gwenhywfar-4.15.2beta/0000755000175000017500000000000012643267243011632 500000000000000gwenhywfar-4.15.2beta/src/0000755000175000017500000000000012643267237012424 500000000000000gwenhywfar-4.15.2beta/src/sio/0000755000175000017500000000000012643267235013214 500000000000000gwenhywfar-4.15.2beta/src/sio/syncio_p.h0000644000175000017500000000402312364015347015122 00000000000000/*************************************************************************** begin : Tue Apr 27 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_SYNCIO_P_H #define GWENHYWFAR_SYNCIO_P_H #include struct GWEN_SYNCIO { GWEN_INHERIT_ELEMENT(GWEN_SYNCIO) GWEN_LIST_ELEMENT(GWEN_SYNCIO) uint32_t refCount; GWEN_SYNCIO *baseIo; char *typeName; uint32_t flags; GWEN_SYNCIO_STATUS status; GWEN_SYNCIO_CONNECT_FN connectFn; GWEN_SYNCIO_DISCONNECT_FN disconnectFn; GWEN_SYNCIO_FLUSH_FN flushFn; GWEN_SYNCIO_READ_FN readFn; GWEN_SYNCIO_WRITE_FN writeFn; }; #endif gwenhywfar-4.15.2beta/src/sio/ssl_cert_descr.c0000644000175000017500000003252012416477066016303 00000000000000/* This file is auto-generated from "ssl_cert_descr.xml" by the typemaker tool of Gwenhywfar. Do not edit this file -- all changes will be lost! */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include "ssl_cert_descr_p.h" #include #include #include #include #include #include #include #include GWEN_LIST_FUNCTIONS(GWEN_SSLCERTDESCR, GWEN_SslCertDescr) GWEN_LIST2_FUNCTIONS(GWEN_SSLCERTDESCR, GWEN_SslCertDescr) GWEN_SSLCERTDESCR *GWEN_SslCertDescr_new(void) { GWEN_SSLCERTDESCR *st; GWEN_NEW_OBJECT(GWEN_SSLCERTDESCR, st) st->_usage=1; GWEN_LIST_INIT(GWEN_SSLCERTDESCR, st) return st; } void GWEN_SslCertDescr_free(GWEN_SSLCERTDESCR *st) { if (st) { assert(st->_usage); if (--(st->_usage)==0) { if (st->countryName) free(st->countryName); if (st->commonName) free(st->commonName); if (st->organizationName) free(st->organizationName); if (st->organizationalUnitName) free(st->organizationalUnitName); if (st->localityName) free(st->localityName); if (st->stateOrProvinceName) free(st->stateOrProvinceName); if (st->notBefore) GWEN_Time_free(st->notBefore); if (st->notAfter) GWEN_Time_free(st->notAfter); if (st->ipAddress) free(st->ipAddress); if (st->fingerPrint) free(st->fingerPrint); if (st->pubKeyModulus) free(st->pubKeyModulus); if (st->pubKeyExponent) free(st->pubKeyExponent); if (st->statusText) free(st->statusText); GWEN_LIST_FINI(GWEN_SSLCERTDESCR, st) GWEN_FREE_OBJECT(st); } } } GWEN_SSLCERTDESCR *GWEN_SslCertDescr_dup(const GWEN_SSLCERTDESCR *d) { GWEN_SSLCERTDESCR *st; assert(d); st=GWEN_SslCertDescr_new(); if (d->countryName) st->countryName=strdup(d->countryName); if (d->commonName) st->commonName=strdup(d->commonName); if (d->organizationName) st->organizationName=strdup(d->organizationName); if (d->organizationalUnitName) st->organizationalUnitName=strdup(d->organizationalUnitName); if (d->localityName) st->localityName=strdup(d->localityName); if (d->stateOrProvinceName) st->stateOrProvinceName=strdup(d->stateOrProvinceName); if (d->notBefore) st->notBefore=GWEN_Time_dup(d->notBefore); if (d->notAfter) st->notAfter=GWEN_Time_dup(d->notAfter); if (d->ipAddress) st->ipAddress=strdup(d->ipAddress); if (d->fingerPrint) st->fingerPrint=strdup(d->fingerPrint); if (d->pubKeyModulus) st->pubKeyModulus=strdup(d->pubKeyModulus); if (d->pubKeyExponent) st->pubKeyExponent=strdup(d->pubKeyExponent); if (d->statusText) st->statusText=strdup(d->statusText); st->isError=d->isError; st->statusFlags=d->statusFlags; return st; } int GWEN_SslCertDescr_toDb(const GWEN_SSLCERTDESCR *st, GWEN_DB_NODE *db) { assert(st); assert(db); if (st->countryName) if (GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "countryName", st->countryName)) return -1; if (st->commonName) if (GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "commonName", st->commonName)) return -1; if (st->organizationName) if (GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "organizationName", st->organizationName)) return -1; if (st->organizationalUnitName) if (GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "organizationalUnitName", st->organizationalUnitName)) return -1; if (st->localityName) if (GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "localityName", st->localityName)) return -1; if (st->stateOrProvinceName) if (GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "stateOrProvinceName", st->stateOrProvinceName)) return -1; if (st->notBefore) if (GWEN_Time_toDb(st->notBefore, GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_DEFAULT, "notBefore"))) return -1; if (st->notAfter) if (GWEN_Time_toDb(st->notAfter, GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_DEFAULT, "notAfter"))) return -1; if (st->ipAddress) if (GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "ipAddress", st->ipAddress)) return -1; if (st->fingerPrint) if (GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "fingerPrint", st->fingerPrint)) return -1; if (st->pubKeyModulus) if (GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "pubKeyModulus", st->pubKeyModulus)) return -1; if (st->pubKeyExponent) if (GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "pubKeyExponent", st->pubKeyExponent)) return -1; if (st->statusText) if (GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "statusText", st->statusText)) return -1; if (GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "isError", st->isError)) return -1; if (GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "statusFlags", st->statusFlags)) return -1; return 0; } int GWEN_SslCertDescr_ReadDb(GWEN_SSLCERTDESCR *st, GWEN_DB_NODE *db) { assert(st); assert(db); GWEN_SslCertDescr_SetCountryName(st, GWEN_DB_GetCharValue(db, "countryName", 0, 0)); GWEN_SslCertDescr_SetCommonName(st, GWEN_DB_GetCharValue(db, "commonName", 0, 0)); GWEN_SslCertDescr_SetOrganizationName(st, GWEN_DB_GetCharValue(db, "organizationName", 0, 0)); GWEN_SslCertDescr_SetOrganizationalUnitName(st, GWEN_DB_GetCharValue(db, "organizationalUnitName", 0, 0)); GWEN_SslCertDescr_SetLocalityName(st, GWEN_DB_GetCharValue(db, "localityName", 0, 0)); GWEN_SslCertDescr_SetStateOrProvinceName(st, GWEN_DB_GetCharValue(db, "stateOrProvinceName", 0, 0)); if (1) { /* for local vars */ GWEN_DB_NODE *dbT; dbT=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "notBefore"); if (dbT) { if (st->notBefore) GWEN_Time_free(st->notBefore); st->notBefore=GWEN_Time_fromDb(dbT); } } if (1) { /* for local vars */ GWEN_DB_NODE *dbT; dbT=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "notAfter"); if (dbT) { if (st->notAfter) GWEN_Time_free(st->notAfter); st->notAfter=GWEN_Time_fromDb(dbT); } } GWEN_SslCertDescr_SetIpAddress(st, GWEN_DB_GetCharValue(db, "ipAddress", 0, 0)); GWEN_SslCertDescr_SetFingerPrint(st, GWEN_DB_GetCharValue(db, "fingerPrint", 0, 0)); GWEN_SslCertDescr_SetPubKeyModulus(st, GWEN_DB_GetCharValue(db, "pubKeyModulus", 0, 0)); GWEN_SslCertDescr_SetPubKeyExponent(st, GWEN_DB_GetCharValue(db, "pubKeyExponent", 0, 0)); GWEN_SslCertDescr_SetStatusText(st, GWEN_DB_GetCharValue(db, "statusText", 0, 0)); GWEN_SslCertDescr_SetIsError(st, GWEN_DB_GetIntValue(db, "isError", 0, 0)); GWEN_SslCertDescr_SetStatusFlags(st, GWEN_DB_GetIntValue(db, "statusFlags", 0, 0)); return 0; } GWEN_SSLCERTDESCR *GWEN_SslCertDescr_fromDb(GWEN_DB_NODE *db) { GWEN_SSLCERTDESCR *st; assert(db); st=GWEN_SslCertDescr_new(); GWEN_SslCertDescr_ReadDb(st, db); st->_modified=0; return st; } const char *GWEN_SslCertDescr_GetCountryName(const GWEN_SSLCERTDESCR *st) { assert(st); return st->countryName; } void GWEN_SslCertDescr_SetCountryName(GWEN_SSLCERTDESCR *st, const char *d) { assert(st); if (st->countryName) free(st->countryName); if (d && *d) st->countryName=strdup(d); else st->countryName=0; st->_modified=1; } const char *GWEN_SslCertDescr_GetCommonName(const GWEN_SSLCERTDESCR *st) { assert(st); return st->commonName; } void GWEN_SslCertDescr_SetCommonName(GWEN_SSLCERTDESCR *st, const char *d) { assert(st); if (st->commonName) free(st->commonName); if (d && *d) st->commonName=strdup(d); else st->commonName=0; st->_modified=1; } const char *GWEN_SslCertDescr_GetOrganizationName(const GWEN_SSLCERTDESCR *st) { assert(st); return st->organizationName; } void GWEN_SslCertDescr_SetOrganizationName(GWEN_SSLCERTDESCR *st, const char *d) { assert(st); if (st->organizationName) free(st->organizationName); if (d && *d) st->organizationName=strdup(d); else st->organizationName=0; st->_modified=1; } const char *GWEN_SslCertDescr_GetOrganizationalUnitName(const GWEN_SSLCERTDESCR *st) { assert(st); return st->organizationalUnitName; } void GWEN_SslCertDescr_SetOrganizationalUnitName(GWEN_SSLCERTDESCR *st, const char *d) { assert(st); if (st->organizationalUnitName) free(st->organizationalUnitName); if (d && *d) st->organizationalUnitName=strdup(d); else st->organizationalUnitName=0; st->_modified=1; } const char *GWEN_SslCertDescr_GetLocalityName(const GWEN_SSLCERTDESCR *st) { assert(st); return st->localityName; } void GWEN_SslCertDescr_SetLocalityName(GWEN_SSLCERTDESCR *st, const char *d) { assert(st); if (st->localityName) free(st->localityName); if (d && *d) st->localityName=strdup(d); else st->localityName=0; st->_modified=1; } const char *GWEN_SslCertDescr_GetStateOrProvinceName(const GWEN_SSLCERTDESCR *st) { assert(st); return st->stateOrProvinceName; } void GWEN_SslCertDescr_SetStateOrProvinceName(GWEN_SSLCERTDESCR *st, const char *d) { assert(st); if (st->stateOrProvinceName) free(st->stateOrProvinceName); if (d && *d) st->stateOrProvinceName=strdup(d); else st->stateOrProvinceName=0; st->_modified=1; } const GWEN_TIME *GWEN_SslCertDescr_GetNotBefore(const GWEN_SSLCERTDESCR *st) { assert(st); return st->notBefore; } void GWEN_SslCertDescr_SetNotBefore(GWEN_SSLCERTDESCR *st, const GWEN_TIME *d) { assert(st); if (st->notBefore) GWEN_Time_free(st->notBefore); if (d) st->notBefore=GWEN_Time_dup(d); else st->notBefore=0; st->_modified=1; } const GWEN_TIME *GWEN_SslCertDescr_GetNotAfter(const GWEN_SSLCERTDESCR *st) { assert(st); return st->notAfter; } void GWEN_SslCertDescr_SetNotAfter(GWEN_SSLCERTDESCR *st, const GWEN_TIME *d) { assert(st); if (st->notAfter) GWEN_Time_free(st->notAfter); if (d) st->notAfter=GWEN_Time_dup(d); else st->notAfter=0; st->_modified=1; } const char *GWEN_SslCertDescr_GetIpAddress(const GWEN_SSLCERTDESCR *st) { assert(st); return st->ipAddress; } void GWEN_SslCertDescr_SetIpAddress(GWEN_SSLCERTDESCR *st, const char *d) { assert(st); if (st->ipAddress) free(st->ipAddress); if (d && *d) st->ipAddress=strdup(d); else st->ipAddress=0; st->_modified=1; } const char *GWEN_SslCertDescr_GetFingerPrint(const GWEN_SSLCERTDESCR *st) { assert(st); return st->fingerPrint; } void GWEN_SslCertDescr_SetFingerPrint(GWEN_SSLCERTDESCR *st, const char *d) { assert(st); if (st->fingerPrint) free(st->fingerPrint); if (d && *d) st->fingerPrint=strdup(d); else st->fingerPrint=0; st->_modified=1; } const char *GWEN_SslCertDescr_GetPubKeyModulus(const GWEN_SSLCERTDESCR *st) { assert(st); return st->pubKeyModulus; } void GWEN_SslCertDescr_SetPubKeyModulus(GWEN_SSLCERTDESCR *st, const char *d) { assert(st); if (st->pubKeyModulus) free(st->pubKeyModulus); if (d && *d) st->pubKeyModulus=strdup(d); else st->pubKeyModulus=0; st->_modified=1; } const char *GWEN_SslCertDescr_GetPubKeyExponent(const GWEN_SSLCERTDESCR *st) { assert(st); return st->pubKeyExponent; } void GWEN_SslCertDescr_SetPubKeyExponent(GWEN_SSLCERTDESCR *st, const char *d) { assert(st); if (st->pubKeyExponent) free(st->pubKeyExponent); if (d && *d) st->pubKeyExponent=strdup(d); else st->pubKeyExponent=0; st->_modified=1; } const char *GWEN_SslCertDescr_GetStatusText(const GWEN_SSLCERTDESCR *st) { assert(st); return st->statusText; } void GWEN_SslCertDescr_SetStatusText(GWEN_SSLCERTDESCR *st, const char *d) { assert(st); if (st->statusText) free(st->statusText); if (d && *d) st->statusText=strdup(d); else st->statusText=0; st->_modified=1; } int GWEN_SslCertDescr_GetIsError(const GWEN_SSLCERTDESCR *st) { assert(st); return st->isError; } void GWEN_SslCertDescr_SetIsError(GWEN_SSLCERTDESCR *st, int d) { assert(st); st->isError=d; st->_modified=1; } uint32_t GWEN_SslCertDescr_GetStatusFlags(const GWEN_SSLCERTDESCR *st) { assert(st); return st->statusFlags; } void GWEN_SslCertDescr_SetStatusFlags(GWEN_SSLCERTDESCR *st, uint32_t d) { assert(st); st->statusFlags=d; st->_modified=1; } int GWEN_SslCertDescr_IsModified(const GWEN_SSLCERTDESCR *st) { assert(st); return st->_modified; } void GWEN_SslCertDescr_SetModified(GWEN_SSLCERTDESCR *st, int i) { assert(st); st->_modified=i; } void GWEN_SslCertDescr_Attach(GWEN_SSLCERTDESCR *st) { assert(st); st->_usage++; } GWEN_SSLCERTDESCR *GWEN_SslCertDescr_List2__freeAll_cb(GWEN_SSLCERTDESCR *st, void *user_data) { GWEN_SslCertDescr_free(st); return 0; } void GWEN_SslCertDescr_List2_freeAll(GWEN_SSLCERTDESCR_LIST2 *stl) { if (stl) { GWEN_SslCertDescr_List2_ForEach(stl, GWEN_SslCertDescr_List2__freeAll_cb, 0); GWEN_SslCertDescr_List2_free(stl); } } GWEN_SSLCERTDESCR_LIST *GWEN_SslCertDescr_List_dup(const GWEN_SSLCERTDESCR_LIST *stl) { if (stl) { GWEN_SSLCERTDESCR_LIST *nl; GWEN_SSLCERTDESCR *e; nl=GWEN_SslCertDescr_List_new(); e=GWEN_SslCertDescr_List_First(stl); while(e) { GWEN_SSLCERTDESCR *ne; ne=GWEN_SslCertDescr_dup(e); assert(ne); GWEN_SslCertDescr_List_Add(ne, nl); e=GWEN_SslCertDescr_List_Next(e); } /* while (e) */ return nl; } else return 0; } gwenhywfar-4.15.2beta/src/sio/syncio_memory_p.h0000644000175000017500000000410212416477066016520 00000000000000/*************************************************************************** begin : Tue Apr 27 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_SYNCIO_MEMORY_P_H #define GWENHYWFAR_SYNCIO_MEMORY_P_H #include typedef struct GWEN_SYNCIO_MEMORY GWEN_SYNCIO_MEMORY; struct GWEN_SYNCIO_MEMORY { GWEN_BUFFER *buffer; int own; }; static void GWENHYWFAR_CB GWEN_SyncIo_Memory_FreeData(void *bp, void *p); int GWENHYWFAR_CB GWEN_SyncIo_Memory_Read(GWEN_SYNCIO *sio, uint8_t *buffer, uint32_t size); int GWENHYWFAR_CB GWEN_SyncIo_Memory_Write(GWEN_SYNCIO *sio, const uint8_t *buffer, uint32_t size); #endif gwenhywfar-4.15.2beta/src/sio/httpsession_p.h0000644000175000017500000000174612364015347016212 00000000000000/*************************************************************************** begin : Fri Feb 15 2008 copyright : (C) 2008-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_HTTP_SESSION_P_H #define GWEN_HTTP_SESSION_P_H #include struct GWEN_HTTP_SESSION { GWEN_INHERIT_ELEMENT(GWEN_HTTP_SESSION); char *url; char *defaultProtocol; int defaultPort; GWEN_SYNCIO *syncIo; uint32_t flags; int httpVMajor; int httpVMinor; char *httpUserAgent; char *httpContentType; uint32_t usage; }; static int GWEN_HttpSession__RecvPacket(GWEN_HTTP_SESSION *sess, GWEN_BUFFER *buf); static int GWEN_HttpSession__RecvPacketToSio(GWEN_HTTP_SESSION *sess, GWEN_SYNCIO *sio); #endif gwenhywfar-4.15.2beta/src/sio/syncio_tls.h0000644000175000017500000000712112364015347015467 00000000000000/*************************************************************************** begin : Wed Apr 28 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_SYNCIO_TLS_H #define GWENHYWFAR_SYNCIO_TLS_H #include #include #define GWEN_SYNCIO_TLS_TYPE "tls" #define GWEN_SYNCIO_TLS_FLAGS_REQUEST_CERT 0x00000001 #define GWEN_SYNCIO_TLS_FLAGS_FORCE_SSL_V3 0x00000002 #define GWEN_SYNCIO_TLS_FLAGS_ALLOW_V1_CA_CRT 0x00000004 #define GWEN_SYNCIO_TLS_FLAGS_NEED_PEER_CERT 0x00000008 #define GWEN_SYNCIO_TLS_FLAGS_ADD_TRUSTED_CAS 0x00000010 #define GWEN_SYNCIO_TLS_FLAGS_SET_PASSV_HOST_NAME 0x00000020 #define GWEN_SYNCIO_TLS_FLAGS_SET_PASSV_HOST_IP 0x00000020 #define GWEN_SYNCIO_TLS_FLAGS_ONLY_SAFE_CIPHERS 0x00000080 #define GWEN_SYNCIO_TLS_FLAGS_FORCE_UNSAFE_CIPHERS 0x00000100 #define GWEN_SYNCIO_TLS_FLAGS_SECURE 0x00008000 #ifdef __cplusplus extern "C" { #endif GWENHYWFAR_API GWEN_SYNCIO *GWEN_SyncIo_Tls_new(GWEN_SYNCIO *baseIo); GWENHYWFAR_API const char *GWEN_SyncIo_Tls_GetLocalCertFile(const GWEN_SYNCIO *sio); GWENHYWFAR_API void GWEN_SyncIo_Tls_SetLocalCertFile(GWEN_SYNCIO *sio, const char *s); GWENHYWFAR_API const char *GWEN_SyncIo_Tls_GetLocalKeyFile(const GWEN_SYNCIO *sio); GWENHYWFAR_API void GWEN_SyncIo_Tls_SetLocalKeyFile(GWEN_SYNCIO *sio, const char *s); GWENHYWFAR_API const char *GWEN_SyncIo_Tls_GetLocalTrustFile(const GWEN_SYNCIO *sio); GWENHYWFAR_API void GWEN_SyncIo_Tls_SetLocalTrustFile(GWEN_SYNCIO *sio, const char *s); GWENHYWFAR_API const char *GWEN_SyncIo_Tls_GetLocalTrustFolder(const GWEN_SYNCIO *sio); GWENHYWFAR_API void GWEN_SyncIo_Tls_SetLocalTrustFolder(GWEN_SYNCIO *sio, const char *s); GWENHYWFAR_API const char *GWEN_SyncIo_Tls_GetDhParamFile(const GWEN_SYNCIO *sio); GWENHYWFAR_API void GWEN_SyncIo_Tls_SetDhParamFile(GWEN_SYNCIO *sio, const char *s); GWENHYWFAR_API const char *GWEN_SyncIo_Tls_GetRemoteHostName(const GWEN_SYNCIO *sio); GWENHYWFAR_API void GWEN_SyncIo_Tls_SetRemoteHostName(GWEN_SYNCIO *sio, const char *s); GWENHYWFAR_API GWEN_SSLCERTDESCR *GWEN_SyncIo_Tls_GetPeerCertDescr(const GWEN_SYNCIO *sio); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/sio/syncio_http.c0000644000175000017500000011536012416477066015654 00000000000000/*************************************************************************** begin : Wed Apr 28 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "syncio_http_p.h" #include "i18n_l.h" #include #include #include #include #include #include #include #include GWEN_INHERIT(GWEN_SYNCIO, GWEN_SYNCIO_HTTP) GWEN_SYNCIO *GWEN_SyncIo_Http_new(GWEN_SYNCIO *baseIo) { GWEN_SYNCIO *sio; GWEN_SYNCIO_HTTP *xio; sio=GWEN_SyncIo_new(GWEN_SYNCIO_HTTP_TYPE, baseIo); GWEN_NEW_OBJECT(GWEN_SYNCIO_HTTP, xio); GWEN_INHERIT_SETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio, xio, GWEN_SyncIo_Http_FreeData); GWEN_SyncIo_SetConnectFn(sio, GWEN_SyncIo_Http_Connect); GWEN_SyncIo_SetDisconnectFn(sio, GWEN_SyncIo_Http_Disconnect); GWEN_SyncIo_SetReadFn(sio, GWEN_SyncIo_Http_Read); GWEN_SyncIo_SetWriteFn(sio, GWEN_SyncIo_Http_Write); xio->dbCommandIn=GWEN_DB_Group_new("command"); xio->dbStatusIn=GWEN_DB_Group_new("status"); xio->dbHeaderIn=GWEN_DB_Group_new("header"); xio->dbCommandOut=GWEN_DB_Group_new("command"); xio->dbStatusOut=GWEN_DB_Group_new("status"); xio->dbHeaderOut=GWEN_DB_Group_new("header"); return sio; } void GWENHYWFAR_CB GWEN_SyncIo_Http_FreeData(void *bp, void *p) { GWEN_SYNCIO_HTTP *xio; xio=(GWEN_SYNCIO_HTTP*) p; GWEN_DB_Group_free(xio->dbCommandOut); GWEN_DB_Group_free(xio->dbStatusOut); GWEN_DB_Group_free(xio->dbHeaderOut); GWEN_DB_Group_free(xio->dbCommandIn); GWEN_DB_Group_free(xio->dbStatusIn); GWEN_DB_Group_free(xio->dbHeaderIn); GWEN_FREE_OBJECT(xio); } int GWENHYWFAR_CB GWEN_SyncIo_Http_Connect(GWEN_SYNCIO *sio) { GWEN_SYNCIO_HTTP *xio; GWEN_SYNCIO *baseIo; int rv; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio); assert(xio); if (GWEN_SyncIo_GetStatus(sio)==GWEN_SyncIo_Status_Connected) { DBG_INFO(GWEN_LOGDOMAIN, "Already connected"); return 0; } baseIo=GWEN_SyncIo_GetBaseIo(sio); assert(baseIo); rv=GWEN_SyncIo_Connect(baseIo); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } GWEN_SyncIo_SetStatus(sio, GWEN_SyncIo_Status_Connected); GWEN_SyncIo_Http_SetReadIdle(sio); return 0; } int GWENHYWFAR_CB GWEN_SyncIo_Http_Disconnect(GWEN_SYNCIO *sio) { GWEN_SYNCIO_HTTP *xio; GWEN_SYNCIO *baseIo; int rv; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio); assert(xio); if (GWEN_SyncIo_GetStatus(sio)!=GWEN_SyncIo_Status_Connected) { DBG_INFO(GWEN_LOGDOMAIN, "Not connected"); return GWEN_ERROR_NOT_CONNECTED; } baseIo=GWEN_SyncIo_GetBaseIo(sio); assert(baseIo); rv=GWEN_SyncIo_Disconnect(baseIo); GWEN_SyncIo_SetStatus(sio, GWEN_SyncIo_Status_Disconnected); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } void GWEN_SyncIo_Http_SetReadIdle(GWEN_SYNCIO *sio) { GWEN_SYNCIO_HTTP *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio); assert(xio); xio->readMode=GWEN_SyncIo_Http_Mode_Idle; } int GWENHYWFAR_CB GWEN_SyncIo_Http_Read(GWEN_SYNCIO *sio, uint8_t *buffer, uint32_t size) { GWEN_SYNCIO_HTTP *xio; int rv; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio); assert(xio); if (GWEN_SyncIo_GetStatus(sio)!=GWEN_SyncIo_Status_Connected) { DBG_ERROR(GWEN_LOGDOMAIN, "Not connected"); return GWEN_ERROR_NOT_CONNECTED; } if (xio->readMode==GWEN_SyncIo_Http_Mode_Idle) { const char *s; /* reset status and headers */ GWEN_DB_ClearGroup(xio->dbCommandIn, NULL); GWEN_DB_ClearGroup(xio->dbStatusIn, NULL); GWEN_DB_ClearGroup(xio->dbHeaderIn, NULL); if (GWEN_SyncIo_GetFlags(sio) & GWEN_SYNCIO_FLAGS_PASSIVE) { /* read command */ rv=GWEN_SyncIo_Http_ReadCommand(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); xio->readMode=GWEN_SyncIo_Http_Mode_Error; return rv; } /* possibly read header */ s=GWEN_DB_GetCharValue(xio->dbCommandIn, "protocol", 0, "HTTP/1.0"); if (!(s && strcasecmp(s, "HTTP/0.9")==0)) { rv=GWEN_SyncIo_Http_ReadHeader(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); xio->readMode=GWEN_SyncIo_Http_Mode_Error; return rv; } } } else { /* read status */ rv=GWEN_SyncIo_Http_ReadStatus(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); xio->readMode=GWEN_SyncIo_Http_Mode_Error; return rv; } /* possibly read header */ s=GWEN_DB_GetCharValue(xio->dbStatusIn, "protocol", 0, "HTTP/1.0"); if (!(s && strcasecmp(s, "HTTP/0.9")==0)) { rv=GWEN_SyncIo_Http_ReadHeader(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); xio->readMode=GWEN_SyncIo_Http_Mode_Error; return rv; } } } } if (xio->readMode==GWEN_SyncIo_Http_Mode_ChunkSize) { rv=GWEN_SyncIo_Http_ReadChunkSize(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); xio->readMode=GWEN_SyncIo_Http_Mode_Error; return rv; } if (xio->currentReadChunkSize==0) { int rv2; GWEN_BUFFER *tbuf; /* all chunks finished, read trailing CR/LF */ tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv2=GWEN_SyncIo_Http_ReadLine(sio, tbuf); if (rv2<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv2); GWEN_Buffer_free(tbuf); return rv2; } GWEN_Buffer_free(tbuf); DBG_DEBUG(GWEN_LOGDOMAIN, "Chunks finished."); /* chunksize is 0, body ended */ GWEN_SyncIo_Http_SetReadIdle(sio); return 0; } else if (xio->currentReadChunkSize==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "Undetermined chunksize in chunked mode? Aborting."); xio->readMode=GWEN_SyncIo_Http_Mode_Error; return GWEN_ERROR_BAD_DATA; } /* chunksize known, next will be to read that chunk */ xio->readMode=GWEN_SyncIo_Http_Mode_Chunk; } if (xio->readMode==GWEN_SyncIo_Http_Mode_Chunk) { /* read chunk */ rv=GWEN_SyncIo_Http_ReadChunk(sio, buffer, size); if (rv<0) { xio->readMode=GWEN_SyncIo_Http_Mode_Error; DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } if (xio->readMode==GWEN_SyncIo_Http_Mode_Body) { /* read chunk */ rv=GWEN_SyncIo_Http_ReadBody(sio, buffer, size); if (rv<0) { xio->readMode=GWEN_SyncIo_Http_Mode_Error; DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } if (xio->readMode==GWEN_SyncIo_Http_Mode_Error) { DBG_ERROR(GWEN_LOGDOMAIN, "Previous read error"); return GWEN_ERROR_GENERIC; } return 0; } int GWENHYWFAR_CB GWEN_SyncIo_Http_Write(GWEN_SYNCIO *sio, const uint8_t *buffer, uint32_t size) { GWEN_SYNCIO_HTTP *xio; GWEN_SYNCIO *baseIo; int rv; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio); assert(xio); baseIo=GWEN_SyncIo_GetBaseIo(sio); assert(baseIo); if (GWEN_SyncIo_GetStatus(sio)!=GWEN_SyncIo_Status_Connected) { DBG_ERROR(GWEN_LOGDOMAIN, "Not connected"); return GWEN_ERROR_NOT_CONNECTED; } if (xio->writeMode==GWEN_SyncIo_Http_Mode_Idle) { const char *s; if (GWEN_SyncIo_GetFlags(sio) & GWEN_SYNCIO_FLAGS_PASSIVE) /* write status */ rv=GWEN_SyncIo_Http_WriteStatus(sio); else /* write command */ rv=GWEN_SyncIo_Http_WriteCommand(sio); if (rv<0) { xio->writeMode=GWEN_SyncIo_Http_Mode_Error; return rv; } /* possibly write header */ s=GWEN_DB_GetCharValue(xio->dbCommandOut, "protocol", 0, "HTTP/1.0"); if (!(s && strcasecmp(s, "HTTP/0.9")==0)) { rv=GWEN_SyncIo_Http_WriteHeader(sio); if (rv<0) { xio->writeMode=GWEN_SyncIo_Http_Mode_Error; return rv; } } } if (xio->writeMode==GWEN_SyncIo_Http_Mode_ChunkSize) { rv=GWEN_SyncIo_Http_WriteChunkSize(sio, size); if (rv<0) { xio->writeMode=GWEN_SyncIo_Http_Mode_Error; return rv; } if (size==0) { /* chunksize is 0, body ended */ GWEN_SyncIo_Http_SetWriteIdle(sio); return 0; } /* chunksize known, next will be to write that chunk */ xio->writeMode=GWEN_SyncIo_Http_Mode_Chunk; } if (xio->writeMode==GWEN_SyncIo_Http_Mode_Chunk) { /* we want to write binary data transparently */ GWEN_SyncIo_AddFlags(baseIo, GWEN_SYNCIO_FLAGS_TRANSPARENT); rv=GWEN_SyncIo_WriteForced(baseIo, buffer, size); if (rv<0) { xio->writeMode=GWEN_SyncIo_Http_Mode_Error; return rv; } xio->writeMode=GWEN_SyncIo_Http_Mode_ChunkSize; return rv; } if (xio->writeMode==GWEN_SyncIo_Http_Mode_Body) { if ((xio->currentWriteBodySize!=-1) && (size>xio->currentWriteBodySize)) { DBG_ERROR(GWEN_LOGDOMAIN, "Size is beyond total body size (%d)!", size); xio->writeMode=GWEN_SyncIo_Http_Mode_Error; return GWEN_ERROR_INVALID; } /* we want to write binary data transparently */ GWEN_SyncIo_AddFlags(baseIo, GWEN_SYNCIO_FLAGS_TRANSPARENT); rv=GWEN_SyncIo_WriteForced(baseIo, buffer, size); if (rv<0) { xio->writeMode=GWEN_SyncIo_Http_Mode_Error; return rv; } if (xio->currentWriteBodySize!=-1) { xio->currentWriteBodySize-=rv; if (xio->currentWriteBodySize==0) GWEN_SyncIo_Http_SetWriteIdle(sio); } return rv; } if (xio->writeMode==GWEN_SyncIo_Http_Mode_Error) { DBG_ERROR(GWEN_LOGDOMAIN, "Previous write error"); return GWEN_ERROR_GENERIC; } return 0; } int GWEN_SyncIo_Http_ReadLine(GWEN_SYNCIO *sio, GWEN_BUFFER *tbuf) { GWEN_SYNCIO_HTTP *xio; GWEN_SYNCIO *baseIo; int rv; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio); assert(xio); baseIo=GWEN_SyncIo_GetBaseIo(sio); assert(baseIo); /* we want to read a text line, so we can't have a transparent mode in the base layer */ GWEN_SyncIo_SubFlags(baseIo, GWEN_SYNCIO_FLAGS_TRANSPARENT); /* read a single line */ do { uint8_t *p; uint32_t l; GWEN_Buffer_AllocRoom(tbuf, 1024); p=(uint8_t*) GWEN_Buffer_GetPosPointer(tbuf); l=GWEN_Buffer_GetMaxUnsegmentedWrite(tbuf); rv=GWEN_SyncIo_Read(baseIo, p, l); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } else if (rv>0) { GWEN_Buffer_IncrementPos(tbuf, rv); GWEN_Buffer_AdjustUsedBytes(tbuf); if (p[rv-1]==10) { p[rv-1]=0; break; } } else if (rv==0) break; } while(rv>0); if (GWEN_Buffer_GetUsedBytes(tbuf)<1) { DBG_ERROR(GWEN_LOGDOMAIN, "Nothing received"); return GWEN_ERROR_EOF; } return 0; } int GWEN_SyncIo_Http_ParseStatus(GWEN_SYNCIO *sio, char *buffer) { GWEN_SYNCIO_HTTP *xio; char *p; char *s; int code; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio); assert(xio); s=buffer; /* read protocol */ p=strchr(s, ' '); if (!p) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad format of HTTP status (%s)", buffer); return GWEN_ERROR_INVALID; } *p=0; p++; GWEN_DB_SetCharValue(xio->dbStatusIn, GWEN_DB_FLAGS_OVERWRITE_VARS, "protocol", s); s=p; /* read status code */ while(*p && isdigit((int)*p)) p++; if (*p) { *p=0; p++; } if (1!=sscanf(s, "%d", &code)) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad request (status code \"%s\")", s); return GWEN_ERROR_INVALID; } GWEN_DB_SetIntValue(xio->dbStatusIn, GWEN_DB_FLAGS_OVERWRITE_VARS, "code", code); s=p; /* read text */ GWEN_DB_SetCharValue(xio->dbStatusIn, GWEN_DB_FLAGS_OVERWRITE_VARS, "text", s); return 0; } int GWEN_SyncIo_Http_ParseCommand(GWEN_SYNCIO *sio, const char *buffer) { GWEN_SYNCIO_HTTP *xio; char *tmp; char *p; char *s; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio); assert(xio); tmp=strdup(buffer); s=tmp; /* read command */ p=strchr(s, ' '); if (!p) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad format of HTTP request (%s)", buffer); free(tmp); return GWEN_ERROR_INVALID; } *p=0; p++; GWEN_DB_SetCharValue(xio->dbCommandIn, GWEN_DB_FLAGS_OVERWRITE_VARS, "command", s); s=p; /* read URL */ p=strchr(s, ' '); if (!p) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad format of HTTP request (%s)", buffer); free(tmp); return GWEN_ERROR_INVALID; } *p=0; p++; GWEN_DB_SetCharValue(xio->dbCommandIn, GWEN_DB_FLAGS_OVERWRITE_VARS, "url", s); s=p; if (*s==0) { /* no protocol information follows, so we assume HTTP/0.9 */ DBG_ERROR(GWEN_LOGDOMAIN, "Bad request (not in HTTP>=1.0)"); free(tmp); return GWEN_ERROR_INVALID; } else { GWEN_DB_SetCharValue(xio->dbCommandIn, GWEN_DB_FLAGS_OVERWRITE_VARS, "protocol", s); } free(tmp); return 0; } int GWEN_SyncIo_Http_ReadStatus(GWEN_SYNCIO *sio) { GWEN_SYNCIO_HTTP *xio; GWEN_SYNCIO *baseIo; GWEN_BUFFER *tbuf; int rv; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio); assert(xio); DBG_INFO(GWEN_LOGDOMAIN, "Reading status"); baseIo=GWEN_SyncIo_GetBaseIo(sio); assert(baseIo); /* read a single line */ tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_SyncIo_Http_ReadLine(sio, tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } if (*GWEN_Buffer_GetStart(tbuf)==0) { DBG_INFO(GWEN_LOGDOMAIN, "Empty line received while reading status response, assuming EOF"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_EOF; } rv=GWEN_SyncIo_Http_ParseStatus(sio, GWEN_Buffer_GetStart(tbuf)); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_free(tbuf); return 0; } int GWEN_SyncIo_Http_ReadCommand(GWEN_SYNCIO *sio) { GWEN_SYNCIO_HTTP *xio; GWEN_SYNCIO *baseIo; GWEN_BUFFER *tbuf; int rv; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio); assert(xio); DBG_INFO(GWEN_LOGDOMAIN, "Reading command"); baseIo=GWEN_SyncIo_GetBaseIo(sio); assert(baseIo); /* read a single line */ tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_SyncIo_Http_ReadLine(sio, tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } rv=GWEN_SyncIo_Http_ParseCommand(sio, GWEN_Buffer_GetStart(tbuf)); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_free(tbuf); return 0; } int GWEN_SyncIo_Http_ParseHeader(GWEN_SYNCIO *sio, char *buf) { GWEN_SYNCIO_HTTP *xio; GWEN_SYNCIO *baseIo; char *p; const char *s; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio); assert(xio); baseIo=GWEN_SyncIo_GetBaseIo(sio); assert(baseIo); /* resolve line continuations */ p=buf; while(*p) { p=strchr(p, 10); if (p) { if (p[1]==32 || p[1]==9) /* found a continuation */ *p=32; p++; } } /* parse every line */ p=buf; while(p && *p) { char *pNext; char *pVarBegin; char *pVarEnd; /* skip blanks */ pNext=strchr(p, 10); if (pNext) { *pNext=0; pNext++; } while(*p && (*p==32 || *p==9)) p++; if (*p) { pVarBegin=p; while(*p && *p!=':' && *p>32 && *p<127) p++; pVarEnd=p; if (*p!=':') { DBG_INFO(GWEN_LOGDOMAIN, "No separator after variable name in received header"); return GWEN_ERROR_BAD_DATA; } *pVarEnd=0; p++; while(*p && (*p==32 || *p==9)) p++; if (*p) GWEN_DB_SetCharValue(xio->dbHeaderIn, GWEN_PATH_FLAGS_CREATE_VAR, pVarBegin, p); } p=pNext; } /* default next mode after reading the header is reading the body * (if any, but that will be checked later) */ xio->readMode=GWEN_SyncIo_Http_Mode_Body; /* header received, now read some settings from it */ s=GWEN_DB_GetCharValue(xio->dbHeaderIn, "Transfer-Encoding", 0, 0); if (s && (-1!=GWEN_Text_ComparePattern(s, "*chunked*", 0))) { /* chunked encoding, this means next we have to read the chunksize */ DBG_DEBUG(GWEN_LOGDOMAIN, "Body is \"chunked\""); xio->currentReadChunkSize=-1; xio->readMode=GWEN_SyncIo_Http_Mode_ChunkSize; } /* get size of body */ xio->currentReadBodySize=GWEN_DB_GetIntValue(xio->dbHeaderIn, "Content-Length", 0, -1); if (xio->currentReadBodySize==0) { /* no body */ GWEN_SyncIo_Http_SetReadIdle(sio); } else if (xio->currentReadBodySize==-1) { int rcode; /* no length of body received, assume 0 in case of an error * This eliminates the bug where this module waits for * a timeout when receiving an error from a special server */ rcode=GWEN_DB_GetIntValue(xio->dbStatusIn, "code", 0, -1); if (rcode<0 || rcode>=300) { /* no body */ GWEN_SyncIo_Http_SetReadIdle(sio); } } return 0; } int GWEN_SyncIo_Http_ReadHeader(GWEN_SYNCIO *sio) { GWEN_SYNCIO_HTTP *xio; GWEN_SYNCIO *baseIo; GWEN_BUFFER *tbuf; int rv; uint32_t pos; int lines=0; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio); assert(xio); DBG_INFO(GWEN_LOGDOMAIN, "Reading header"); baseIo=GWEN_SyncIo_GetBaseIo(sio); assert(baseIo); /* we want to read a text line, so we can't have a transparent mode in the base layer */ GWEN_SyncIo_SubFlags(baseIo, GWEN_SYNCIO_FLAGS_TRANSPARENT); /* read a single line */ tbuf=GWEN_Buffer_new(0, 256, 0, 1); pos=0; do { uint8_t *p; GWEN_Buffer_AllocRoom(tbuf, 1024); p=(uint8_t*) GWEN_Buffer_GetPosPointer(tbuf); rv=GWEN_SyncIo_Read(baseIo, p, 1024); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } else if (rv>0) { GWEN_Buffer_IncrementPos(tbuf, rv); GWEN_Buffer_AdjustUsedBytes(tbuf); if (p[rv-1]==10) { uint32_t npos; lines++; npos=GWEN_Buffer_GetPos(tbuf); if ((npos-pos)==1) { /* empty line, header finished */ break; } pos=npos; } } else if (rv==0) break; } while(rv>0); if (lines<1) { DBG_ERROR(GWEN_LOGDOMAIN, "No header line received"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_EOF; } rv=GWEN_SyncIo_Http_ParseHeader(sio, GWEN_Buffer_GetStart(tbuf)); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_free(tbuf); return 0; } int GWEN_SyncIo_Http_ReadChunkSize(GWEN_SYNCIO *sio) { GWEN_SYNCIO_HTTP *xio; GWEN_SYNCIO *baseIo; GWEN_BUFFER *tbuf; int rv; int csize; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio); assert(xio); DBG_INFO(GWEN_LOGDOMAIN, "Reading chunksize"); baseIo=GWEN_SyncIo_GetBaseIo(sio); assert(baseIo); /* read a single line */ tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_SyncIo_Http_ReadLine(sio, tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } if (*GWEN_Buffer_GetStart(tbuf)==0) { GWEN_Buffer_Reset(tbuf); rv=GWEN_SyncIo_Http_ReadLine(sio, tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } } if (1!=sscanf(GWEN_Buffer_GetStart(tbuf), "%x", &csize)) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad data received (invalid chunksize specifier: [%s])", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } xio->currentReadChunkSize=csize; GWEN_Buffer_free(tbuf); return 0; } int GWEN_SyncIo_Http_ReadChunk(GWEN_SYNCIO *sio, uint8_t *buffer, uint32_t size) { GWEN_SYNCIO_HTTP *xio; GWEN_SYNCIO *baseIo; int rv; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio); assert(xio); DBG_DEBUG(GWEN_LOGDOMAIN, "Reading chunk (%d bytes)", (int) size); baseIo=GWEN_SyncIo_GetBaseIo(sio); assert(baseIo); /* we want to read binary data transparently */ GWEN_SyncIo_AddFlags(baseIo, GWEN_SYNCIO_FLAGS_TRANSPARENT); if (size>xio->currentReadChunkSize) size=xio->currentReadChunkSize; rv=GWEN_SyncIo_Read(baseIo, buffer, size); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } xio->currentReadChunkSize-=rv; if (xio->currentReadBodySize>0) xio->currentReadBodySize-=rv; if (xio->currentReadChunkSize==0) { int rv2; GWEN_BUFFER *tbuf; /* chunk finished, read trailing CR/LF */ tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv2=GWEN_SyncIo_Http_ReadLine(sio, tbuf); if (rv2<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv2); GWEN_Buffer_free(tbuf); return rv2; } GWEN_Buffer_free(tbuf); DBG_DEBUG(GWEN_LOGDOMAIN, "Chunk finished."); /* change read mode */ xio->readMode=GWEN_SyncIo_Http_Mode_ChunkSize; } return rv; } int GWEN_SyncIo_Http_ReadBody(GWEN_SYNCIO *sio, uint8_t *buffer, uint32_t size) { GWEN_SYNCIO_HTTP *xio; GWEN_SYNCIO *baseIo; int rv; assert(size); assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio); assert(xio); DBG_INFO(GWEN_LOGDOMAIN, "Reading body"); baseIo=GWEN_SyncIo_GetBaseIo(sio); assert(baseIo); /* we want to read binary data transparently */ GWEN_SyncIo_AddFlags(baseIo, GWEN_SYNCIO_FLAGS_TRANSPARENT); if ((xio->currentReadBodySize>=0) && (size>xio->currentReadBodySize)) { DBG_INFO(GWEN_LOGDOMAIN, "Adjusting read body size from %d to %d", size, xio->currentReadBodySize); size=xio->currentReadBodySize; } rv=GWEN_SyncIo_Read(baseIo, buffer, size); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } if (xio->currentReadBodySize>=0) xio->currentReadBodySize-=rv; if (xio->currentReadBodySize==0) /* body finished, change read mode */ GWEN_SyncIo_Http_SetReadIdle(sio); return rv; } int GWEN_SyncIo_Http_WriteCommand(GWEN_SYNCIO *sio) { GWEN_SYNCIO_HTTP *xio; GWEN_SYNCIO *baseIo; int rv; const char *s; GWEN_BUFFER *tbuf; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio); assert(xio); baseIo=GWEN_SyncIo_GetBaseIo(sio); assert(baseIo); /* we will construct the line including CR/LF ourselves */ GWEN_SyncIo_AddFlags(baseIo, GWEN_SYNCIO_FLAGS_TRANSPARENT); tbuf=GWEN_Buffer_new(0, 256, 0, 1); s=GWEN_DB_GetCharValue(xio->dbCommandOut, "command", 0, "GET"); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); s=GWEN_DB_GetCharValue(xio->dbCommandOut, "url", 0, "/"); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); s=GWEN_DB_GetCharValue(xio->dbCommandOut, "protocol", 0, "HTTP/1.0"); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\r\n"); /* write */ rv=GWEN_SyncIo_WriteForced(baseIo, (const uint8_t*) GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf)); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_free(tbuf); return 0; } int GWEN_SyncIo_Http_WriteStatus(GWEN_SYNCIO *sio) { GWEN_SYNCIO_HTTP *xio; GWEN_SYNCIO *baseIo; int rv; const char *s; GWEN_BUFFER *tbuf; char numbuf[32]; int i; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio); assert(xio); baseIo=GWEN_SyncIo_GetBaseIo(sio); assert(baseIo); /* we will construct the line including CR/LF ourselves */ GWEN_SyncIo_AddFlags(baseIo, GWEN_SYNCIO_FLAGS_TRANSPARENT); tbuf=GWEN_Buffer_new(0, 256, 0, 1); s=GWEN_DB_GetCharValue(xio->dbStatusOut, "protocol", 0, "HTTP/1.0"); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); i=GWEN_DB_GetIntValue(xio->dbStatusOut, "code", 0, -1); if (i==-1) { DBG_INFO(GWEN_LOGDOMAIN, "Missing status code"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_NO_DATA; } snprintf(numbuf, sizeof(numbuf), "%d ", i); GWEN_Buffer_AppendString(tbuf, numbuf); s=GWEN_DB_GetCharValue(xio->dbStatusOut, "text", 0, "No text."); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\r\n"); /* write */ rv=GWEN_SyncIo_WriteForced(baseIo, (const uint8_t*) GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf)); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_free(tbuf); return 0; } int GWEN_SyncIo_Http_WriteHeader(GWEN_SYNCIO *sio) { GWEN_SYNCIO_HTTP *xio; GWEN_SYNCIO *baseIo; int i; GWEN_DB_NODE *dbVar; GWEN_BUFFER *tbuf; int rv; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio); assert(xio); baseIo=GWEN_SyncIo_GetBaseIo(sio); assert(baseIo); /* we will construct the line including CR/LF ourselves */ GWEN_SyncIo_AddFlags(baseIo, GWEN_SYNCIO_FLAGS_TRANSPARENT); /* default next mode after writing the header is writing the body * (if any, but that will be checked later) */ xio->writeMode=GWEN_SyncIo_Http_Mode_Body; tbuf=GWEN_Buffer_new(0, 256, 0, 1); i=GWEN_DB_GetIntValue(xio->dbHeaderOut, "Content-Length", 0, -1); xio->currentWriteBodySize=i; dbVar=GWEN_DB_GetFirstVar(xio->dbHeaderOut); while (dbVar) { GWEN_DB_NODE *dbVal; /* only handle first value */ dbVal=GWEN_DB_GetFirstValue(dbVar); if (dbVal) { GWEN_DB_NODE_TYPE vtype; vtype=GWEN_DB_GetValueType(dbVal); if (vtype==GWEN_DB_NodeType_ValueChar) { const char *s; GWEN_Buffer_AppendString(tbuf, GWEN_DB_VariableName(dbVar)); GWEN_Buffer_AppendString(tbuf, ":"); s=GWEN_DB_GetCharValueFromNode(dbVal); if (s) GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\r\n"); if (strcasecmp(GWEN_DB_VariableName(dbVar), "Transfer-Encoding")==0) { if (s && (-1!=GWEN_Text_ComparePattern(s, "*chunked*", 0))) { /* chunked encoding, this means next we have to write the chunksize */ xio->writeMode=GWEN_SyncIo_Http_Mode_ChunkSize; } } } else if (vtype==GWEN_DB_NodeType_ValueInt) { i=GWEN_DB_GetIntValueFromNode(dbVal); if (i!=-1 || strcasecmp(GWEN_DB_VariableName(dbVar), "Content-Length")==0) { char numbuf[32]; /* don't write body size of -1 */ GWEN_Buffer_AppendString(tbuf, GWEN_DB_VariableName(dbVar)); GWEN_Buffer_AppendString(tbuf, ":"); snprintf(numbuf, sizeof(numbuf), "%d", i); GWEN_Buffer_AppendString(tbuf, numbuf); GWEN_Buffer_AppendString(tbuf, "\r\n"); } } else { DBG_INFO(GWEN_LOGDOMAIN, "Variable type %d of var [%s] not supported", vtype, GWEN_DB_VariableName(dbVar)); return GWEN_ERROR_BAD_DATA; } } dbVar=GWEN_DB_GetNextVar(dbVar); } /* finalize header */ GWEN_Buffer_AppendString(tbuf, "\r\n"); /* write */ rv=GWEN_SyncIo_WriteForced(baseIo, (const uint8_t*) GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf)); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_free(tbuf); if (xio->currentWriteBodySize==0) GWEN_SyncIo_Http_SetWriteIdle(sio); return 0; } int GWEN_SyncIo_Http_WriteChunkSize(GWEN_SYNCIO *sio, uint32_t size) { GWEN_SYNCIO_HTTP *xio; GWEN_SYNCIO *baseIo; int rv; char numbuf[32]; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio); assert(xio); baseIo=GWEN_SyncIo_GetBaseIo(sio); assert(baseIo); /* we will construct the line including CR/LF ourselves */ GWEN_SyncIo_AddFlags(baseIo, GWEN_SYNCIO_FLAGS_TRANSPARENT); snprintf(numbuf, sizeof(numbuf)-1, "%x\r\n", size); numbuf[sizeof(numbuf)-1]=0; rv=GWEN_SyncIo_WriteForced(baseIo, (const uint8_t*) numbuf, strlen(numbuf)); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } void GWEN_SyncIo_Http_SetWriteIdle(GWEN_SYNCIO *sio) { GWEN_SYNCIO_HTTP *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio); assert(xio); xio->writeMode=GWEN_SyncIo_Http_Mode_Idle; GWEN_DB_ClearGroup(xio->dbStatusOut, NULL); } GWEN_DB_NODE *GWEN_SyncIo_Http_GetDbCommandIn(const GWEN_SYNCIO *sio) { GWEN_SYNCIO_HTTP *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio); assert(xio); return xio->dbCommandIn; } GWEN_DB_NODE *GWEN_SyncIo_Http_GetDbStatusIn(const GWEN_SYNCIO *sio) { GWEN_SYNCIO_HTTP *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio); assert(xio); return xio->dbStatusIn; } GWEN_DB_NODE *GWEN_SyncIo_Http_GetDbHeaderIn(const GWEN_SYNCIO *sio) { GWEN_SYNCIO_HTTP *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio); assert(xio); return xio->dbHeaderIn; } GWEN_DB_NODE *GWEN_SyncIo_Http_GetDbCommandOut(const GWEN_SYNCIO *sio) { GWEN_SYNCIO_HTTP *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio); assert(xio); return xio->dbCommandOut; } GWEN_DB_NODE *GWEN_SyncIo_Http_GetDbStatusOut(const GWEN_SYNCIO *sio) { GWEN_SYNCIO_HTTP *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio); assert(xio); return xio->dbStatusOut; } GWEN_DB_NODE *GWEN_SyncIo_Http_GetDbHeaderOut(const GWEN_SYNCIO *sio) { GWEN_SYNCIO_HTTP *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio); assert(xio); return xio->dbHeaderOut; } int GWEN_SyncIo_Http_RecvBody(GWEN_SYNCIO *sio, GWEN_BUFFER *buf) { GWEN_SYNCIO_HTTP *xio; int rv; int code=0; int firstRead=1; int bodySize=-1; int bytesRead=0; uint32_t pid; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio); assert(xio); pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_SHOW_ABORT | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS, I18N("Network Operation"), I18N("Receiving data"), 0, 0); /* recv packet (this reads the HTTP body) */ for (;;) { uint8_t *p; uint32_t l; rv=GWEN_Buffer_AllocRoom(buf, 1024); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ProgressEnd(pid); return rv; } p=(uint8_t*) GWEN_Buffer_GetPosPointer(buf); l=GWEN_Buffer_GetMaxUnsegmentedWrite(buf); do { rv=GWEN_SyncIo_Read(sio, p, l-1); } while(rv==GWEN_ERROR_INTERRUPTED); if (rv==0) break; else if (rv<0) { if (rv==GWEN_ERROR_EOF) { if (bodySize!=-1 && bytesRead=bodySize) { break; } firstRead=0; } GWEN_Gui_ProgressEnd(pid); if (rv<0) { if (GWEN_Buffer_GetUsedBytes(buf)) { /* data received, check for common error codes */ if (rv==GWEN_ERROR_EOF || rv==GWEN_ERROR_IO || rv==GWEN_ERROR_SSL) { DBG_INFO(GWEN_LOGDOMAIN, "We received an error, but we still got data, " "so we ignore the error here"); } else { DBG_INFO(GWEN_LOGDOMAIN, "No message received (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("No message received")); return rv; } } else { DBG_INFO(GWEN_LOGDOMAIN, "No message received (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("No message received")); return rv; } } if (GWEN_SyncIo_GetFlags(sio) & GWEN_SYNCIO_FLAGS_PASSIVE) code=0; else { code=GWEN_DB_GetIntValue(xio->dbStatusIn, "code", 0, 0); if (code) { const char *s; s=GWEN_DB_GetCharValue(xio->dbStatusIn, "text", 0, NULL); DBG_DEBUG(GWEN_LOGDOMAIN, "HTTP-Status: %d (%s)", code, s?s:"- no text -"); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Debug, I18N("HTTP-Status: %d (%s)"), code, s?s:I18N("- no details -")); } else { DBG_ERROR(GWEN_LOGDOMAIN, "No HTTP status code received"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("No HTTP status code received")); code=GWEN_ERROR_BAD_DATA; } } return code; } int GWEN_SyncIo_Http_RecvBodyToSio(GWEN_SYNCIO *sio, GWEN_SYNCIO *sout) { GWEN_SYNCIO_HTTP *xio; int rv; int code=0; int firstRead=1; int bodySize=-1; int bytesRead=0; uint32_t pid; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_HTTP, sio); assert(xio); pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_SHOW_ABORT | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS, I18N("Network Operation"), I18N("Receiving data"), 0, 0); /* recv packet (this reads the HTTP body) */ for (;;) { uint8_t *p; uint32_t l; uint8_t rbuf[1024]; p=rbuf; l=sizeof(rbuf); do { rv=GWEN_SyncIo_Read(sio, p, l-1); } while(rv==GWEN_ERROR_INTERRUPTED); if (rv==0) break; else if (rv<0) { if (rv==GWEN_ERROR_EOF) { if (bodySize!=-1 && bytesRead=bodySize) { break; } firstRead=0; } GWEN_Gui_ProgressEnd(pid); if (rv<0) { if (bytesRead) { /* data received, check for common error codes */ if (rv==GWEN_ERROR_EOF || rv==GWEN_ERROR_IO || rv==GWEN_ERROR_SSL) { DBG_INFO(GWEN_LOGDOMAIN, "We received an error, but we still got data, " "so we ignore the error here"); } else { DBG_INFO(GWEN_LOGDOMAIN, "No message received (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("No message received")); return rv; } } else { DBG_INFO(GWEN_LOGDOMAIN, "No message received (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("No message received")); return rv; } } if (GWEN_SyncIo_GetFlags(sio) & GWEN_SYNCIO_FLAGS_PASSIVE) code=0; else { code=GWEN_DB_GetIntValue(xio->dbStatusIn, "code", 0, 0); if (code) { const char *s; s=GWEN_DB_GetCharValue(xio->dbStatusIn, "text", 0, NULL); DBG_DEBUG(GWEN_LOGDOMAIN, "HTTP-Status: %d (%s)", code, s?s:"- no text -"); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Debug, I18N("HTTP-Status: %d (%s)"), code, s?s:I18N("- no details -)")); } else { DBG_ERROR(GWEN_LOGDOMAIN, "No HTTP status code received"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("No HTTP status code received")); code=GWEN_ERROR_BAD_DATA; } } return code; } gwenhywfar-4.15.2beta/src/sio/syncio_buffered_p.h0000644000175000017500000000437412416477066017005 00000000000000/*************************************************************************** begin : Tue Apr 27 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_SYNCIO_BUFFERED_P_H #define GWENHYWFAR_SYNCIO_BUFFERED_P_H #include #include typedef struct GWEN_SYNCIO_BUFFERED GWEN_SYNCIO_BUFFERED; struct GWEN_SYNCIO_BUFFERED { GWEN_RINGBUFFER *readBuffer; }; static void GWENHYWFAR_CB GWEN_SyncIo_Buffered_FreeData(void *bp, void *p); int GWENHYWFAR_CB GWEN_SyncIo_Buffered_Connect(GWEN_SYNCIO *sio); int GWENHYWFAR_CB GWEN_SyncIo_Buffered_Disconnect(GWEN_SYNCIO *sio); int GWENHYWFAR_CB GWEN_SyncIo_Buffered_Read(GWEN_SYNCIO *sio, uint8_t *buffer, uint32_t size); int GWENHYWFAR_CB GWEN_SyncIo_Buffered_Write(GWEN_SYNCIO *sio, const uint8_t *buffer, uint32_t size); #endif gwenhywfar-4.15.2beta/src/sio/syncio_buffered.h0000644000175000017500000000417112364015347016451 00000000000000/*************************************************************************** begin : Tue Apr 27 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_SYNCIO_BUFFERED_H #define GWENHYWFAR_SYNCIO_BUFFERED_H #include #include #include #define GWEN_SYNCIO_BUFFERED_TYPE "buffered" #ifdef __cplusplus extern "C" { #endif GWENHYWFAR_API GWEN_SYNCIO *GWEN_SyncIo_Buffered_new(GWEN_SYNCIO *baseIo); GWENHYWFAR_API int GWEN_SyncIo_Buffered_ReadLineToBuffer(GWEN_SYNCIO *sio, GWEN_BUFFER *tbuf); GWENHYWFAR_API int GWEN_SyncIo_Buffered_ReadLinesToStringList(GWEN_SYNCIO *sio, int maxLines, GWEN_STRINGLIST *sl); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/sio/ssl_cert_descr_l.h0000644000175000017500000000075512416477066016630 00000000000000/* This file is auto-generated from "ssl_cert_descr.xml" by the typemaker tool of Gwenhywfar. Do not edit this file -- all changes will be lost! */ #ifndef SSL_CERT_DESCR_L_H #define SSL_CERT_DESCR_L_H /** @page P_GWEN_SSLCERTDESCR_LIB GWEN_SslCertDescr (lib) This page describes the properties of GWEN_SSLCERTDESCR */ #include "ssl_cert_descr.h" #ifdef __cplusplus extern "C" { #endif #ifdef __cplusplus } /* __cplusplus */ #endif #endif /* SSL_CERT_DESCR_L_H */ gwenhywfar-4.15.2beta/src/sio/syncio_memory.h0000644000175000017500000000420612364015347016176 00000000000000/*************************************************************************** begin : Tue Apr 27 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_SYNCIO_MEMORY_H #define GWENHYWFAR_SYNCIO_MEMORY_H #include #include #define GWEN_SYNCIO_MEMORY_TYPE "memory" #ifdef __cplusplus extern "C" { #endif GWENHYWFAR_API GWEN_SYNCIO *GWEN_SyncIo_Memory_new(GWEN_BUFFER *buffer, int take); GWENHYWFAR_API GWEN_SYNCIO *GWEN_SyncIo_Memory_fromBuffer(const uint8_t *buffer, int size); GWENHYWFAR_API GWEN_BUFFER *GWEN_SyncIo_Memory_GetBuffer(const GWEN_SYNCIO *sio); GWENHYWFAR_API GWEN_BUFFER *GWEN_SyncIo_Memory_TakeBuffer(const GWEN_SYNCIO *sio); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/sio/syncio_socket.h0000644000175000017500000000452012416477066016165 00000000000000/*************************************************************************** begin : Tue Apr 27 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_SYNCIO_SOCKET_H #define GWENHYWFAR_SYNCIO_SOCKET_H #include #include #define GWEN_SYNCIO_SOCKET_TYPE "socket" #ifdef __cplusplus extern "C" { #endif GWENHYWFAR_API GWEN_SYNCIO *GWEN_SyncIo_Socket_new(GWEN_SOCKETTYPE sockType, GWEN_AddressFamily addressFamily); GWENHYWFAR_API GWEN_SYNCIO *GWEN_SyncIo_Socket_TakeOver(GWEN_SOCKET *socket); GWENHYWFAR_API const char *GWEN_SyncIo_Socket_GetAddress(const GWEN_SYNCIO *sio); GWENHYWFAR_API void GWEN_SyncIo_Socket_SetAddress(GWEN_SYNCIO *sio, const char *s); GWENHYWFAR_API int GWEN_SyncIo_Socket_GetPort(const GWEN_SYNCIO *sio); GWENHYWFAR_API void GWEN_SyncIo_Socket_SetPort(GWEN_SYNCIO *sio, int i); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/sio/syncio_file.h0000644000175000017500000000647612364015347015620 00000000000000/*************************************************************************** begin : Tue Apr 27 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_SYNCIO_FILE_H #define GWENHYWFAR_SYNCIO_FILE_H #include #define GWEN_SYNCIO_FILE_TYPE "file" typedef enum { GWEN_SyncIo_File_CreationMode_Unknown=-1, GWEN_SyncIo_File_CreationMode_OpenExisting=0, GWEN_SyncIo_File_CreationMode_CreateNew, GWEN_SyncIo_File_CreationMode_CreateAlways, GWEN_SyncIo_File_CreationMode_OpenAlways, GWEN_SyncIo_File_CreationMode_TruncateExisting } GWEN_SYNCIO_FILE_CREATIONMODE; typedef enum { GWEN_SyncIo_File_Whence_Set=0, GWEN_SyncIo_File_Whence_Current, GWEN_SyncIo_File_Whence_End } GWEN_SYNCIO_FILE_WHENCE; #define GWEN_SYNCIO_FILE_FLAGS_READ 0x00000001 #define GWEN_SYNCIO_FILE_FLAGS_WRITE 0x00000002 #define GWEN_SYNCIO_FILE_FLAGS_APPEND 0x00000008 #define GWEN_SYNCIO_FILE_FLAGS_RANDOM 0x00000010 #define GWEN_SYNCIO_FILE_FLAGS_UREAD 0x00000100 #define GWEN_SYNCIO_FILE_FLAGS_UWRITE 0x00000200 #define GWEN_SYNCIO_FILE_FLAGS_UEXEC 0x00000400 #define GWEN_SYNCIO_FILE_FLAGS_GREAD 0x00001000 #define GWEN_SYNCIO_FILE_FLAGS_GWRITE 0x00002000 #define GWEN_SYNCIO_FILE_FLAGS_GEXEC 0x00004000 #define GWEN_SYNCIO_FILE_FLAGS_OREAD 0x00010000 #define GWEN_SYNCIO_FILE_FLAGS_OWRITE 0x00020000 #define GWEN_SYNCIO_FILE_FLAGS_OEXEC 0x00040000 #ifdef __cplusplus extern "C" { #endif GWENHYWFAR_API GWEN_SYNCIO *GWEN_SyncIo_File_new(const char *path, GWEN_SYNCIO_FILE_CREATIONMODE cm); GWENHYWFAR_API GWEN_SYNCIO *GWEN_SyncIo_File_fromStdin(void); GWENHYWFAR_API GWEN_SYNCIO *GWEN_SyncIo_File_fromStdout(void); GWENHYWFAR_API GWEN_SYNCIO *GWEN_SyncIo_File_fromStderr(void); GWENHYWFAR_API const char *GWEN_SyncIo_File_GetPath(const GWEN_SYNCIO *sio); GWENHYWFAR_API int64_t GWEN_SyncIo_File_Seek(GWEN_SYNCIO *sio, int64_t pos, GWEN_SYNCIO_FILE_WHENCE whence); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/sio/ssl_cert_descr_p.h0000644000175000017500000000133712416477066016631 00000000000000/* This file is auto-generated from "ssl_cert_descr.xml" by the typemaker tool of Gwenhywfar. Do not edit this file -- all changes will be lost! */ #ifndef SSL_CERT_DESCR_P_H #define SSL_CERT_DESCR_P_H #include "ssl_cert_descr_l.h" struct GWEN_SSLCERTDESCR { GWEN_LIST_ELEMENT(GWEN_SSLCERTDESCR) int _usage; int _modified; char *countryName; char *commonName; char *organizationName; char *organizationalUnitName; char *localityName; char *stateOrProvinceName; GWEN_TIME *notBefore; GWEN_TIME *notAfter; char *ipAddress; char *fingerPrint; char *pubKeyModulus; char *pubKeyExponent; char *statusText; int isError; uint32_t statusFlags; }; #endif /* SSL_CERT_DESCR_P_H */ gwenhywfar-4.15.2beta/src/sio/syncio_memory.c0000644000175000017500000001257112416477066016205 00000000000000/*************************************************************************** begin : Tue Apr 27 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "syncio_memory_p.h" #include "i18n_l.h" #include #include #include #include #include #include GWEN_INHERIT(GWEN_SYNCIO, GWEN_SYNCIO_MEMORY) GWEN_SYNCIO *GWEN_SyncIo_Memory_new(GWEN_BUFFER *buffer, int take) { GWEN_SYNCIO *sio; GWEN_SYNCIO_MEMORY *xio; sio=GWEN_SyncIo_new(GWEN_SYNCIO_MEMORY_TYPE, NULL); GWEN_NEW_OBJECT(GWEN_SYNCIO_MEMORY, xio); GWEN_INHERIT_SETDATA(GWEN_SYNCIO, GWEN_SYNCIO_MEMORY, sio, xio, GWEN_SyncIo_Memory_FreeData); GWEN_SyncIo_SetReadFn(sio, GWEN_SyncIo_Memory_Read); GWEN_SyncIo_SetWriteFn(sio, GWEN_SyncIo_Memory_Write); if (buffer) { xio->buffer=buffer; xio->own=take?1:0; } else { xio->buffer=GWEN_Buffer_new(0, 256, 0, 1); xio->own=1; } GWEN_SyncIo_SetStatus(sio, GWEN_SyncIo_Status_Connected); return sio; } GWEN_SYNCIO *GWEN_SyncIo_Memory_fromBuffer(const uint8_t *buffer, int size) { GWEN_SYNCIO *sio; GWEN_SYNCIO_MEMORY *xio; sio=GWEN_SyncIo_new(GWEN_SYNCIO_MEMORY_TYPE, NULL); GWEN_NEW_OBJECT(GWEN_SYNCIO_MEMORY, xio); GWEN_INHERIT_SETDATA(GWEN_SYNCIO, GWEN_SYNCIO_MEMORY, sio, xio, GWEN_SyncIo_Memory_FreeData); GWEN_SyncIo_SetReadFn(sio, GWEN_SyncIo_Memory_Read); GWEN_SyncIo_SetWriteFn(sio, GWEN_SyncIo_Memory_Write); /* adapt size, if necessary */ if (size==-1) { if (buffer) size=strlen((const char*) buffer)+1; else size=0; } xio->buffer=GWEN_Buffer_new(0, size, 0, 1); xio->own=1; if (buffer && size>0) { GWEN_Buffer_AppendBytes(xio->buffer, (const char*) buffer, size); GWEN_Buffer_Rewind(xio->buffer); } GWEN_SyncIo_SetStatus(sio, GWEN_SyncIo_Status_Connected); return sio; } void GWENHYWFAR_CB GWEN_SyncIo_Memory_FreeData(void *bp, void *p) { GWEN_SYNCIO_MEMORY *xio; xio=(GWEN_SYNCIO_MEMORY*) p; if (xio->buffer && xio->own) GWEN_Buffer_free(xio->buffer); GWEN_FREE_OBJECT(xio); } GWEN_BUFFER *GWEN_SyncIo_Memory_GetBuffer(const GWEN_SYNCIO *sio) { GWEN_SYNCIO_MEMORY *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_MEMORY, sio); assert(xio); return xio->buffer; } GWEN_BUFFER *GWEN_SyncIo_Memory_TakeBuffer(const GWEN_SYNCIO *sio) { GWEN_SYNCIO_MEMORY *xio; GWEN_BUFFER *buf; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_MEMORY, sio); assert(xio); if (xio->own==0 || xio->buffer==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Can't give away buffer, object does not own it"); return NULL; } buf=xio->buffer; xio->buffer=NULL; xio->own=0; return buf; } int GWENHYWFAR_CB GWEN_SyncIo_Memory_Read(GWEN_SYNCIO *sio, uint8_t *buffer, uint32_t size) { GWEN_SYNCIO_MEMORY *xio; uint32_t bytesLeft; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_MEMORY, sio); assert(xio); if (xio->buffer==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No buffer"); return GWEN_ERROR_INTERNAL; } bytesLeft=GWEN_Buffer_GetBytesLeft(xio->buffer); if (bytesLeft==0) { DBG_VERBOUS(GWEN_LOGDOMAIN, "EOF met"); return 0; } if (size>bytesLeft) size=bytesLeft; memmove(buffer, GWEN_Buffer_GetPosPointer(xio->buffer), size); GWEN_Buffer_IncrementPos(xio->buffer, size); return size; } int GWENHYWFAR_CB GWEN_SyncIo_Memory_Write(GWEN_SYNCIO *sio, const uint8_t *buffer, uint32_t size) { GWEN_SYNCIO_MEMORY *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_MEMORY, sio); assert(xio); if (xio->buffer==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No socket"); return GWEN_ERROR_INTERNAL; } if (size) { int rv; rv=GWEN_Buffer_AppendBytes(xio->buffer, (const char*) buffer, size); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } return size; } gwenhywfar-4.15.2beta/src/sio/syncio_tls.c0000644000175000017500000012613112633760605015470 00000000000000/*************************************************************************** begin : Wed Apr 28 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG /*#define GWEN_TLS_DEBUG*/ /* #define GWEN_TLS_USE_OLD_CODE */ #include "syncio_tls_p.h" #include "i18n_l.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include GWEN_INHERIT(GWEN_SYNCIO, GWEN_SYNCIO_TLS) GWEN_SYNCIO *GWEN_SyncIo_Tls_new(GWEN_SYNCIO *baseIo) { GWEN_SYNCIO *sio; GWEN_SYNCIO_TLS *xio; assert(baseIo); sio=GWEN_SyncIo_new(GWEN_SYNCIO_TLS_TYPE, baseIo); GWEN_NEW_OBJECT(GWEN_SYNCIO_TLS, xio); GWEN_INHERIT_SETDATA(GWEN_SYNCIO, GWEN_SYNCIO_TLS, sio, xio, GWEN_SyncIo_Tls_FreeData); GWEN_SyncIo_SetConnectFn(sio, GWEN_SyncIo_Tls_Connect); GWEN_SyncIo_SetDisconnectFn(sio, GWEN_SyncIo_Tls_Disconnect); GWEN_SyncIo_SetReadFn(sio, GWEN_SyncIo_Tls_Read); GWEN_SyncIo_SetWriteFn(sio, GWEN_SyncIo_Tls_Write); return sio; } void GWENHYWFAR_CB GWEN_SyncIo_Tls_FreeData(void *bp, void *p) { GWEN_SYNCIO_TLS *xio; xio=(GWEN_SYNCIO_TLS*) p; free(xio->localCertFile); free(xio->localKeyFile); free(xio->localTrustFile); free(xio->dhParamFile); free(xio->hostName); GWEN_FREE_OBJECT(xio); } const char *GWEN_SyncIo_Tls_GetLocalCertFile(const GWEN_SYNCIO *sio) { GWEN_SYNCIO_TLS *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_TLS, sio); assert(xio); return xio->localCertFile; } void GWEN_SyncIo_Tls_SetLocalCertFile(GWEN_SYNCIO *sio, const char *s) { GWEN_SYNCIO_TLS *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_TLS, sio); assert(xio); free(xio->localCertFile); if (s) xio->localCertFile=strdup(s); else xio->localCertFile=NULL; } const char *GWEN_SyncIo_Tls_GetLocalKeyFile(const GWEN_SYNCIO *sio) { GWEN_SYNCIO_TLS *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_TLS, sio); assert(xio); return xio->localKeyFile; } void GWEN_SyncIo_Tls_SetLocalKeyFile(GWEN_SYNCIO *sio, const char *s) { GWEN_SYNCIO_TLS *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_TLS, sio); assert(xio); free(xio->localKeyFile); if (s) xio->localKeyFile=strdup(s); else xio->localKeyFile=NULL; } const char *GWEN_SyncIo_Tls_GetLocalTrustFile(const GWEN_SYNCIO *sio) { GWEN_SYNCIO_TLS *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_TLS, sio); assert(xio); return xio->localTrustFile; } void GWEN_SyncIo_Tls_SetLocalTrustFile(GWEN_SYNCIO *sio, const char *s) { GWEN_SYNCIO_TLS *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_TLS, sio); assert(xio); free(xio->localTrustFile); if (s) xio->localTrustFile=strdup(s); else xio->localTrustFile=NULL; } const char *GWEN_SyncIo_Tls_GetDhParamFile(const GWEN_SYNCIO *sio) { GWEN_SYNCIO_TLS *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_TLS, sio); assert(xio); return xio->dhParamFile; } void GWEN_SyncIo_Tls_SetDhParamFile(GWEN_SYNCIO *sio, const char *s) { GWEN_SYNCIO_TLS *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_TLS, sio); assert(xio); free(xio->dhParamFile); if (s) xio->dhParamFile=strdup(s); else xio->dhParamFile=NULL; } const char *GWEN_SyncIo_Tls_GetRemoteHostName(const GWEN_SYNCIO *sio) { GWEN_SYNCIO_TLS *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_TLS, sio); assert(xio); return xio->hostName; } void GWEN_SyncIo_Tls_SetRemoteHostName(GWEN_SYNCIO *sio, const char *s) { GWEN_SYNCIO_TLS *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_TLS, sio); assert(xio); free(xio->hostName); if (s) xio->hostName=strdup(s); else xio->hostName=NULL; } GWEN_SSLCERTDESCR *GWEN_SyncIo_Tls_GetPeerCertDescr(const GWEN_SYNCIO *sio) { GWEN_SYNCIO_TLS *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_TLS, sio); assert(xio); return xio->peerCertDescr; } int GWEN_SyncIo_Tls__readFile(const char *fname, GWEN_BUFFER *buf) { FILE *f; f=fopen(fname, "r"); if (f==NULL) return GWEN_ERROR_IO; while(!feof(f)) { int rv; GWEN_Buffer_AllocRoom(buf, 512); rv=fread(GWEN_Buffer_GetPosPointer(buf), 1, 512, f); if (rv==0) break; else if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "fread(%s): %s", fname, strerror(errno)); fclose(f); return GWEN_ERROR_IO; } else { GWEN_Buffer_IncrementPos(buf, rv); GWEN_Buffer_AdjustUsedBytes(buf); } } fclose(f); return 0; } #if 0 static int GWEN_SyncIo_Tls_AddCaCertFolder(GWEN_SYNCIO *sio, const char *folder) { GWEN_SYNCIO_TLS *xio; int rv; int successfullTustFileCount=0; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_TLS, sio); assert(xio); if (folder && *folder) { GWEN_STRINGLIST *fileList; fileList=GWEN_StringList_new(); rv=GWEN_Directory_GetMatchingFilesRecursively(folder, fileList, "*.crt"); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Error reading list of certificate files (%d) in folder [%s]", rv, folder); } else { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(fileList); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) { rv=gnutls_certificate_set_x509_trust_file(xio->credentials, s, GNUTLS_X509_FMT_PEM); if (rv<=0) { DBG_WARN(GWEN_LOGDOMAIN, "gnutls_certificate_set_x509_trust_file(%s): %d (%s)", s, rv, gnutls_strerror(rv)); } else { DBG_INFO(GWEN_LOGDOMAIN, "Added %d trusted certs from [%s]", rv, s); successfullTustFileCount++; } } se=GWEN_StringListEntry_Next(se); } /* while */ } GWEN_StringList_free(fileList); } if (successfullTustFileCount==0) { DBG_ERROR(GWEN_LOGDOMAIN, "No files added from folder [%s]", folder); } return successfullTustFileCount; } #endif int GWEN_SyncIo_Tls_Prepare(GWEN_SYNCIO *sio) { GWEN_SYNCIO_TLS *xio; int rv; uint32_t lflags; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_TLS, sio); assert(xio); lflags=GWEN_SyncIo_GetFlags(sio); DBG_INFO(GWEN_LOGDOMAIN, "Preparing SSL (%08x)", lflags); /* init session */ if (lflags & GWEN_SYNCIO_FLAGS_PASSIVE) { DBG_INFO(GWEN_LOGDOMAIN, "Init as server"); rv=gnutls_init(&xio->session, GNUTLS_SERVER); } else { DBG_INFO(GWEN_LOGDOMAIN, "Init as client"); rv=gnutls_init(&xio->session, GNUTLS_CLIENT); } if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "gnutls_init: %d (%s)", rv, gnutls_strerror(rv)); return GWEN_ERROR_GENERIC; } /* set default priority */ #ifdef GWEN_TLS_USE_OLD_CODE /* old code */ GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Using old SSL preparation code.")); rv=gnutls_set_default_priority(xio->session); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "gnutls_set_default_priority: %d (%s)", rv, gnutls_strerror(rv)); gnutls_deinit(xio->session); return GWEN_ERROR_GENERIC; } /* possibly force protocol priority */ if (lflags & GWEN_SYNCIO_TLS_FLAGS_FORCE_SSL_V3) { const int proto_prio[2] = { GNUTLS_SSL3, 0 }; DBG_INFO(GWEN_LOGDOMAIN, "Forcing SSL v3"); //rv=gnutls_protocol_set_priority(xio->session, proto_prio); /* as suggested by rakkesh */ rv=gnutls_priority_set(xio->session, proto_prio); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "gnutls_protocol_set_priority: %d (%s)", rv, gnutls_strerror(rv)); gnutls_deinit(xio->session); return GWEN_ERROR_GENERIC; } } #else /* new code */ { /* TODO: The following does not work with all servers, disabled for now */ const char *errPos=NULL; const char *ciphers_default; GWEN_BUFFER *ciphers = NULL; GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Using new SSL preparation code.")); ciphers=GWEN_Buffer_new(0, 256, 0, 1); assert(ciphers!=NULL); ciphers_default=getenv("GWEN_TLS_CIPHER_PRIORITIES"); if (ciphers_default && *ciphers_default) { /* use cipher list from env var */ rv=GWEN_Buffer_AppendString(ciphers, ciphers_default); if (rv!=0) { DBG_ERROR(GWEN_LOGDOMAIN, "failed to append default ciphers to cipher list: %d", rv); GWEN_Buffer_free(ciphers); gnutls_deinit(xio->session); return GWEN_ERROR_GENERIC; } } else { /* use hardcoded default ciphers */ /* this might get removed later, because it is no longer needed */ if (lflags & GWEN_SYNCIO_TLS_FLAGS_FORCE_SSL_V3) { rv=GWEN_Buffer_AppendString(ciphers, "+VERS-SSL3.0:"); if (rv!=0) { DBG_ERROR(GWEN_LOGDOMAIN, "failed to append SSLv3 prefix to cipher list: %d", rv); GWEN_Buffer_free(ciphers); gnutls_deinit(xio->session); return GWEN_ERROR_GENERIC; } } if (lflags & GWEN_SYNCIO_TLS_FLAGS_FORCE_UNSAFE_CIPHERS) { GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("TLS: Warning - Forcing unsafe SSL-Ciphers per user request.")); /* add hardcoded 128-Bit-ciphers ciphers */ rv=GWEN_Buffer_AppendString(ciphers, GWEN_TLS_CIPHER_PRIORITIES_UNSAFE); if (rv!=0) { DBG_ERROR(GWEN_LOGDOMAIN, "failed to append default ciphers to cipher list: %d", rv); GWEN_Buffer_free(ciphers); gnutls_deinit(xio->session); return GWEN_ERROR_GENERIC; } } else { /* add hardcoded default ciphers */ rv=GWEN_Buffer_AppendString(ciphers, GWEN_TLS_CIPHER_PRIORITIES_DEFAULT); if (rv!=0) { DBG_ERROR(GWEN_LOGDOMAIN, "failed to append default ciphers to cipher list: %d", rv); GWEN_Buffer_free(ciphers); gnutls_deinit(xio->session); return GWEN_ERROR_GENERIC; } /* add list of disabled ciphers */ if (lflags & GWEN_SYNCIO_TLS_FLAGS_ONLY_SAFE_CIPHERS) { DBG_INFO(GWEN_LOGDOMAIN, "Removing unsafe ciphers"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Info, I18N("TLS: Disabling unsafe ciphers per user request.")); rv=GWEN_Buffer_AppendString(ciphers, ":"GWEN_TLS_CIPHER_PRIORITIES_DISABLE_UNSAFE); if (rv!=0) { DBG_ERROR(GWEN_LOGDOMAIN, "failed to append unsafe ciphers to cipher list: %d", rv); GWEN_Buffer_free(ciphers); gnutls_deinit(xio->session); return GWEN_ERROR_GENERIC; } } } } DBG_INFO(GWEN_LOGDOMAIN, "Setting cipher priority to [%s]", GWEN_Buffer_GetStart(ciphers)); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Info, I18N("TLS: SSL-Cipher priority list: %s"), GWEN_Buffer_GetStart(ciphers)); rv=gnutls_priority_set_direct(xio->session, GWEN_Buffer_GetStart(ciphers), &errPos); if (rv!=GNUTLS_E_SUCCESS) { DBG_ERROR(GWEN_LOGDOMAIN, "gnutls_priority_set_direct using '%s' failed: %d (%s) [%s]", GWEN_Buffer_GetStart(ciphers), rv, gnutls_strerror(rv), errPos?errPos:""); GWEN_Buffer_free(ciphers); gnutls_deinit(xio->session); return GWEN_ERROR_GENERIC; } GWEN_Buffer_free(ciphers); } #endif /* protect against too-many-known-ca problem */ gnutls_handshake_set_max_packet_length(xio->session, 64*1024); /* let a server request peer certs */ if ((lflags & GWEN_SYNCIO_FLAGS_PASSIVE) && (lflags & GWEN_SYNCIO_TLS_FLAGS_REQUEST_CERT)) gnutls_certificate_server_set_request(xio->session, GNUTLS_CERT_REQUIRE); /* prepare cert credentials */ rv=gnutls_certificate_allocate_credentials(&xio->credentials); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "gnutls_certificate_allocate_credentials: %d (%s)", rv, gnutls_strerror(rv)); gnutls_deinit(xio->session); return GWEN_ERROR_GENERIC; } /* possibly set key file and cert file */ if (xio->localCertFile && xio->localKeyFile) { rv=gnutls_certificate_set_x509_key_file(xio->credentials, xio->localCertFile, xio->localKeyFile, GNUTLS_X509_FMT_PEM); if (rv<0) { if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "gnutls_certificate_set_x509_key_file: %d (%s)", rv, gnutls_strerror(rv)); gnutls_certificate_free_credentials(xio->credentials); gnutls_deinit(xio->session); return GWEN_ERROR_GENERIC; } } } /* find default trust file if none is selected */ if (lflags & GWEN_SYNCIO_TLS_FLAGS_ADD_TRUSTED_CAS) { int trustFileSet=0; #if 0 # ifndef OS_WIN32 /* try to find OpenSSL certificates */ if (trustFileSet==0) { GWEN_STRINGLIST *paths; GWEN_BUFFER *nbuf; paths=GWEN_StringList_new(); GWEN_StringList_AppendString(paths, "/etc/ssl/certs", 0, 0); nbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Directory_FindFileInPaths(paths, "ca-certificates.crt", nbuf); GWEN_StringList_free(paths); if (rv==0) { DBG_INFO(GWEN_LOGDOMAIN, "Using default ca-bundle from [%s]", GWEN_Buffer_GetStart(nbuf)); rv=gnutls_certificate_set_x509_trust_file(xio->credentials, GWEN_Buffer_GetStart(nbuf), GNUTLS_X509_FMT_PEM); if (rv<=0) { DBG_WARN(GWEN_LOGDOMAIN, "gnutls_certificate_set_x509_trust_file(%s): %d (%s)", GWEN_Buffer_GetStart(nbuf), rv, gnutls_strerror(rv)); } else { DBG_INFO(GWEN_LOGDOMAIN, "Added %d trusted certs from [%s]", rv, GWEN_Buffer_GetStart(nbuf)); trustFileSet=1; } } GWEN_Buffer_free(nbuf); } # endif # ifndef OS_WIN32 /* try to find ca-certificates (at least available on Debian systems) */ if (trustFileSet==0) { rv=GWEN_Directory_GetPath("/usr/share/ca-certificates", GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (rv>=0) { rv=GWEN_SyncIo_Tls_AddCaCertFolder(sio, "/usr/share/ca-certificates"); if (rv<=0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); } else { trustFileSet=1; } } } # endif #endif if (trustFileSet==0) { GWEN_STRINGLIST *paths; /* try to find our trust file */ paths=GWEN_PathManager_GetPaths(GWEN_PM_LIBNAME, GWEN_PM_DATADIR); if (paths) { GWEN_BUFFER *nbuf; nbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Directory_FindFileInPaths(paths, "ca-bundle.crt", nbuf); GWEN_StringList_free(paths); if (rv==0) { DBG_INFO(GWEN_LOGDOMAIN, "Using default ca-bundle from [%s]", GWEN_Buffer_GetStart(nbuf)); rv=gnutls_certificate_set_x509_trust_file(xio->credentials, GWEN_Buffer_GetStart(nbuf), GNUTLS_X509_FMT_PEM); if (rv<=0) { DBG_ERROR(GWEN_LOGDOMAIN, "gnutls_certificate_set_x509_trust_file(%s): %d (%s)", GWEN_Buffer_GetStart(nbuf), rv, gnutls_strerror(rv)); } else { DBG_INFO(GWEN_LOGDOMAIN, "Added %d trusted certs", rv); trustFileSet=1; } } GWEN_Buffer_free(nbuf); } } if (trustFileSet==0) { DBG_WARN(GWEN_LOGDOMAIN, "No default bundle file found"); } } /* possibly set trust file */ if (xio->localTrustFile) { rv=gnutls_certificate_set_x509_trust_file(xio->credentials, xio->localTrustFile, GNUTLS_X509_FMT_PEM); if (rv<=0) { DBG_ERROR(GWEN_LOGDOMAIN, "gnutls_certificate_set_x509_trust_file(%s): %d (%s)", (xio->localTrustFile)?(xio->localTrustFile):"-none-", rv, gnutls_strerror(rv)); gnutls_certificate_free_credentials(xio->credentials); gnutls_deinit(xio->session); return GWEN_ERROR_GENERIC; } else { DBG_INFO(GWEN_LOGDOMAIN, "Added %d trusted certs", rv); } } /* possibly set DH params */ if (xio->dhParamFile) { GWEN_BUFFER *dbuf; dbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_SyncIo_Tls__readFile(xio->dhParamFile, dbuf); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dbuf); gnutls_certificate_free_credentials(xio->credentials); gnutls_deinit(xio->session); return rv; } else { gnutls_datum d; gnutls_dh_params dh_params=NULL; rv=gnutls_dh_params_init(&dh_params); if (rv<0) { GWEN_Buffer_free(dbuf); DBG_ERROR(GWEN_LOGDOMAIN, "gnutls_dh_params_init: %d (%s)", rv, gnutls_strerror(rv)); gnutls_certificate_free_credentials(xio->credentials); gnutls_deinit(xio->session); return GWEN_ERROR_GENERIC; } d.size=GWEN_Buffer_GetUsedBytes(dbuf); d.data=(unsigned char*)GWEN_Buffer_GetStart(dbuf); rv=gnutls_dh_params_import_pkcs3(dh_params, &d, GNUTLS_X509_FMT_PEM); if (rv<0) { GWEN_Buffer_free(dbuf); DBG_ERROR(GWEN_LOGDOMAIN, "gnutls_dh_params_import_pkcs3: %d (%s)", rv, gnutls_strerror(rv)); gnutls_certificate_free_credentials(xio->credentials); gnutls_deinit(xio->session); return GWEN_ERROR_GENERIC; } GWEN_Buffer_free(dbuf); gnutls_certificate_set_dh_params(xio->credentials, dh_params); } } /* set credentials in TLS session */ rv=gnutls_credentials_set(xio->session, GNUTLS_CRD_CERTIFICATE, xio->credentials); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "gnutls_credentials_set: %d (%s)", rv, gnutls_strerror(rv)); gnutls_certificate_free_credentials(xio->credentials); gnutls_deinit(xio->session); return GWEN_ERROR_GENERIC; } /* we use our own push/pull functions */ gnutls_transport_set_ptr(xio->session, (gnutls_transport_ptr_t)sio); gnutls_transport_set_push_function(xio->session, GWEN_SyncIo_Tls_Push); gnutls_transport_set_pull_function(xio->session, GWEN_SyncIo_Tls_Pull); #if GNUTLS_VERSION_NUMBER < 0x020c00 /* This function must be set to 0 in GNUTLS versions < 2.12.0 because we use * custom push/pull functions. * In GNUTLS 2.12.x this is set to 0 and since version 3 this functions is removed * completely. * So we only call this function now for GNUTLS < 2.12.0. */ gnutls_transport_set_lowat(xio->session, 0); #endif xio->prepared=1; return 0; } void GWEN_SyncIo_Tls_UndoPrepare(GWEN_SYNCIO *sio) { GWEN_SYNCIO_TLS *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_TLS, sio); assert(xio); if (xio->prepared) { gnutls_certificate_free_credentials(xio->credentials); gnutls_deinit(xio->session); xio->prepared=0; } } int GWEN_SyncIo_Tls_GetPeerCert(GWEN_SYNCIO *sio) { GWEN_SYNCIO_TLS *xio; const gnutls_datum_t *cert_list; unsigned int cert_list_size; size_t size; GWEN_SSLCERTDESCR *certDescr; char buffer1[64]; time_t t0; int rv; uint32_t lflags; uint32_t errFlags=0; int i; unsigned int status; GWEN_BUFFER *sbuf=NULL; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_TLS, sio); assert(xio); lflags=GWEN_SyncIo_GetFlags(sio); if (xio->peerCertDescr) { GWEN_SslCertDescr_free(xio->peerCertDescr); xio->peerCertDescr=NULL; } xio->peerCertFlags=0; t0=time(NULL); if (t0<0) { DBG_WARN(GWEN_LOGDOMAIN, "Could not get system time"); errFlags|=GWEN_SSL_CERT_FLAGS_SYSTEM; } /* create new cert description, check cert on the fly */ certDescr=GWEN_SslCertDescr_new(); /* some general tests */ if (lflags & GWEN_SYNCIO_TLS_FLAGS_ALLOW_V1_CA_CRT) gnutls_certificate_set_verify_flags(xio->credentials, GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT); rv=gnutls_certificate_verify_peers2(xio->session, &status); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "gnutls_certificate_verify_peers2: %d (%s)", rv, gnutls_strerror(rv)); GWEN_SslCertDescr_free(certDescr); return GWEN_ERROR_SSL_SECURITY; } if (gnutls_certificate_type_get(xio->session)!=GNUTLS_CRT_X509) { DBG_INFO(GWEN_LOGDOMAIN, "Certificate is not X.509"); GWEN_SslCertDescr_free(certDescr); return GWEN_ERROR_SSL_SECURITY; } if (status & GNUTLS_CERT_SIGNER_NOT_FOUND) { DBG_INFO(GWEN_LOGDOMAIN, "Signer not found"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Warning, I18N("Signer not found")); errFlags|=GWEN_SSL_CERT_FLAGS_SIGNER_NOT_FOUND; } if (status & GNUTLS_CERT_INVALID) { DBG_INFO(GWEN_LOGDOMAIN, "Certificate is not trusted"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Warning, I18N("Certificate is not trusted")); errFlags|=GWEN_SSL_CERT_FLAGS_INVALID; } if (status & GNUTLS_CERT_REVOKED) { DBG_INFO(GWEN_LOGDOMAIN, "Certificate has been revoked"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Warning, I18N("Certificate has been revoked")); errFlags|=GWEN_SSL_CERT_FLAGS_REVOKED; } cert_list=gnutls_certificate_get_peers(xio->session, &cert_list_size); if (cert_list==NULL || cert_list_size==0) { DBG_INFO(GWEN_LOGDOMAIN, "No peer certificates found"); return GWEN_ERROR_NO_DATA; } for (i=0; ihostName) { DBG_INFO(GWEN_LOGDOMAIN, "Checking hostname [%s]", xio->hostName); if (!gnutls_x509_crt_check_hostname(cert, xio->hostName)) { DBG_WARN(GWEN_LOGDOMAIN, "Certificate was not issued for this host"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Warning, I18N("Certificate was not issued for this host")); errFlags|=GWEN_SSL_CERT_FLAGS_BAD_HOSTNAME; } else { DBG_INFO(GWEN_LOGDOMAIN, "Cert is for this server"); } } else { DBG_WARN(GWEN_LOGDOMAIN, "Hostname is not set, unable to verify the sender"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Warning, I18N("No hostname to verify the sender!")); } } /* get activation time */ t=gnutls_x509_crt_get_activation_time(cert); if (t<0) { DBG_INFO(GWEN_LOGDOMAIN, "gnutls_x509_crt_get_activation_time: %d (%s)", rv, gnutls_strerror(rv)); errFlags|=GWEN_SSL_CERT_FLAGS_BAD_DATA; } else { if (t>t0) { DBG_INFO(GWEN_LOGDOMAIN, "Cert is not yet active"); errFlags|=GWEN_SSL_CERT_FLAGS_NOT_ACTIVE; } if (i==0) { GWEN_TIME *ti; ti=GWEN_Time_fromSeconds(t); if (ti) GWEN_SslCertDescr_SetNotBefore(certDescr, ti); GWEN_Time_free(ti); } } /* get expiration time */ t=gnutls_x509_crt_get_expiration_time(cert); if (t<0) { DBG_INFO(GWEN_LOGDOMAIN, "gnutls_x509_crt_get_expiration_time: %d (%s)", rv, gnutls_strerror(rv)); errFlags|=GWEN_SSL_CERT_FLAGS_BAD_DATA; } else { if (thostName && strcasecmp(xio->hostName, buffer1)!=0) { DBG_INFO(GWEN_LOGDOMAIN, "Owner of certificate does not match hostname"); errFlags|=GWEN_SSL_CERT_FLAGS_BAD_HOSTNAME; } } size=sizeof(buffer1)-1; rv=gnutls_x509_crt_get_dn_by_oid(cert, GNUTLS_OID_X520_ORGANIZATION_NAME, 0, 0, buffer1, &size); if (rv==0) GWEN_SslCertDescr_SetOrganizationName(certDescr, buffer1); size=sizeof(buffer1)-1; rv=gnutls_x509_crt_get_dn_by_oid(cert, GNUTLS_OID_X520_ORGANIZATIONAL_UNIT_NAME, 0, 0, buffer1, &size); if (rv==0) GWEN_SslCertDescr_SetOrganizationalUnitName(certDescr, buffer1); size=sizeof(buffer1)-1; rv=gnutls_x509_crt_get_dn_by_oid(cert, GNUTLS_OID_X520_LOCALITY_NAME, 0, 0, buffer1, &size); if (rv==0) GWEN_SslCertDescr_SetLocalityName(certDescr, buffer1); size=sizeof(buffer1)-1; rv=gnutls_x509_crt_get_dn_by_oid(cert, GNUTLS_OID_X520_STATE_OR_PROVINCE_NAME, 0, 0, buffer1, &size); if (rv==0) GWEN_SslCertDescr_SetStateOrProvinceName(certDescr, buffer1); size=sizeof(buffer1)-1; rv=gnutls_x509_crt_get_dn_by_oid(cert, GNUTLS_OID_X520_COUNTRY_NAME, 0, 0, buffer1, &size); if (rv==0) GWEN_SslCertDescr_SetCountryName(certDescr, buffer1); } gnutls_x509_crt_deinit(cert); } /* done */ if (errFlags) GWEN_SslCertDescr_SetIsError(certDescr, 1); else errFlags|=GWEN_SSL_CERT_FLAGS_OK; sbuf=GWEN_Buffer_new(0, 256, 0, 1); if (errFlags & GWEN_SSL_CERT_FLAGS_SIGNER_NOT_FOUND) { if (GWEN_Buffer_GetUsedBytes(sbuf)) GWEN_Buffer_AppendString(sbuf, "; "); GWEN_Buffer_AppendString(sbuf, I18N("Signer not found")); } if (errFlags & GWEN_SSL_CERT_FLAGS_INVALID) { if (GWEN_Buffer_GetUsedBytes(sbuf)) GWEN_Buffer_AppendString(sbuf, "; "); GWEN_Buffer_AppendString(sbuf, I18N("Certificate is not trusted")); } if (errFlags & GWEN_SSL_CERT_FLAGS_REVOKED) { if (GWEN_Buffer_GetUsedBytes(sbuf)) GWEN_Buffer_AppendString(sbuf, "; "); GWEN_Buffer_AppendString(sbuf, I18N("Certificate has been revoked")); } if (errFlags & GWEN_SSL_CERT_FLAGS_EXPIRED) { if (GWEN_Buffer_GetUsedBytes(sbuf)) GWEN_Buffer_AppendString(sbuf, "; "); GWEN_Buffer_AppendString(sbuf, I18N("Certificate has expired")); } if (errFlags & GWEN_SSL_CERT_FLAGS_NOT_ACTIVE) { if (GWEN_Buffer_GetUsedBytes(sbuf)) GWEN_Buffer_AppendString(sbuf, "; "); GWEN_Buffer_AppendString(sbuf, I18N("Certificate is not active yet")); } if (errFlags & GWEN_SSL_CERT_FLAGS_BAD_HOSTNAME) { if (GWEN_Buffer_GetUsedBytes(sbuf)) GWEN_Buffer_AppendString(sbuf, "; "); GWEN_Buffer_AppendString(sbuf, I18N("Certificate owner does not match hostname")); } if (errFlags & GWEN_SSL_CERT_FLAGS_BAD_DATA) { if (GWEN_Buffer_GetUsedBytes(sbuf)) GWEN_Buffer_AppendString(sbuf, "; "); GWEN_Buffer_AppendString(sbuf, I18N("Certificate contains invalid information")); } if (errFlags & GWEN_SSL_CERT_FLAGS_SYSTEM) { if (GWEN_Buffer_GetUsedBytes(sbuf)) GWEN_Buffer_AppendString(sbuf, "; "); GWEN_Buffer_AppendString(sbuf, I18N("A system error occurred while checking the certificate")); } if (errFlags & GWEN_SSL_CERT_FLAGS_OK) { if (GWEN_Buffer_GetUsedBytes(sbuf)) GWEN_Buffer_AppendString(sbuf, "; "); GWEN_Buffer_AppendString(sbuf, I18N("The certificate is valid")); } GWEN_SslCertDescr_SetStatusText(certDescr, GWEN_Buffer_GetStart(sbuf)); GWEN_SslCertDescr_SetStatusFlags(certDescr, errFlags); GWEN_Buffer_free(sbuf); #if 0 if (1) { GWEN_DB_NODE *dbTest; dbTest=GWEN_DB_Group_new("Cert"); GWEN_SslCertDescr_toDb(certDescr, dbTest); GWEN_DB_Dump(dbTest, 2); GWEN_DB_Group_free(dbTest); } #endif xio->peerCertDescr=certDescr; xio->peerCertFlags=errFlags; return 0; } ssize_t GWEN_SyncIo_Tls_Pull(gnutls_transport_ptr_t p, void *buf, size_t len) { GWEN_SYNCIO *sio; GWEN_SYNCIO_TLS *xio; GWEN_SYNCIO *baseIo; int rv; sio=(GWEN_SYNCIO*) p; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_TLS, sio); assert(xio); DBG_VERBOUS(GWEN_LOGDOMAIN, "TLS PULL: %d bytes", (int)len); baseIo=GWEN_SyncIo_GetBaseIo(sio); assert(baseIo); rv=GWEN_SyncIo_Read(baseIo, buf, len); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); #ifdef HAVE_GNUTLS_TRANSPORT_SET_ERRNO gnutls_transport_set_errno(xio->session, errno); #endif return (ssize_t)-1; } #ifdef HAVE_GNUTLS_TRANSPORT_SET_ERRNO gnutls_transport_set_errno(xio->session, 0); #else errno=0; #endif DBG_VERBOUS(GWEN_LOGDOMAIN, "TLS PULL: returning %d bytes", rv); /*GWEN_Text_DumpString(buf, rv, 2);*/ return rv; } ssize_t GWEN_SyncIo_Tls_Push(gnutls_transport_ptr_t p, const void *buf, size_t len) { GWEN_SYNCIO *sio; GWEN_SYNCIO_TLS *xio; GWEN_SYNCIO *baseIo; int rv; sio=(GWEN_SYNCIO*) p; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_TLS, sio); assert(xio); DBG_VERBOUS(GWEN_LOGDOMAIN, "TLS PUSH: %d bytes", (int)len); baseIo=GWEN_SyncIo_GetBaseIo(sio); assert(baseIo); rv=GWEN_SyncIo_Write(baseIo, buf, len); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); #ifdef HAVE_GNUTLS_TRANSPORT_SET_ERRNO gnutls_transport_set_errno(xio->session, errno); #endif return (ssize_t)-1; } #ifdef HAVE_GNUTLS_TRANSPORT_SET_ERRNO gnutls_transport_set_errno(xio->session, 0); #endif DBG_VERBOUS(GWEN_LOGDOMAIN, "TLS PUSH: returning %d bytes", rv); /*GWEN_Text_DumpString(buf, rv, 2);*/ return rv; } void GWEN_SyncIo_Tls_ShowCipherInfo(GWEN_SYNCIO *sio) { GWEN_SYNCIO_TLS *xio; const char *s; gnutls_kx_algorithm_t kx; GWEN_BUFFER *cbuf; GWEN_BUFFER *sbuf; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_TLS, sio); assert(xio); cbuf=GWEN_Buffer_new(0, 256, 0, 1); sbuf=GWEN_Buffer_new(0, 256, 0, 1); /* protocol */ s=gnutls_protocol_get_name(gnutls_protocol_get_version(xio->session)); if (s && *s) { if (GWEN_Buffer_GetUsedBytes(cbuf)) GWEN_Buffer_AppendString(cbuf, " "); GWEN_Buffer_AppendString(cbuf, "Protocol: "); GWEN_Buffer_AppendString(cbuf, s); GWEN_Buffer_AppendString(sbuf, s); } GWEN_Buffer_AppendString(sbuf, ":"); /* key exchange algorithm */ kx=gnutls_kx_get(xio->session); s=gnutls_kx_get_name(kx); if (s && *s) { if (GWEN_Buffer_GetUsedBytes(cbuf)) GWEN_Buffer_AppendString(cbuf, " "); GWEN_Buffer_AppendString(cbuf, "Key exchange algorithm: "); GWEN_Buffer_AppendString(cbuf, s); GWEN_Buffer_AppendString(sbuf, s); } GWEN_Buffer_AppendString(sbuf, "-"); /* cipher */ s=gnutls_cipher_get_name(gnutls_cipher_get(xio->session)); if (s && *s) { if (GWEN_Buffer_GetUsedBytes(cbuf)) GWEN_Buffer_AppendString(cbuf, " "); GWEN_Buffer_AppendString(cbuf, "cipher algorithm: "); GWEN_Buffer_AppendString(cbuf, s); GWEN_Buffer_AppendString(sbuf, s); } GWEN_Buffer_AppendString(sbuf, ":"); /* MAC algorithm */ s=gnutls_mac_get_name(gnutls_mac_get(xio->session)); if (s && *s) { if (GWEN_Buffer_GetUsedBytes(cbuf)) GWEN_Buffer_AppendString(cbuf, " "); GWEN_Buffer_AppendString(cbuf, "MAC algorithm: "); GWEN_Buffer_AppendString(cbuf, s); GWEN_Buffer_AppendString(sbuf, s); } DBG_NOTICE(GWEN_LOGDOMAIN, "%s", GWEN_Buffer_GetStart(cbuf)); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Info, I18N("TLS: SSL-Ciphers negotiated: %s"), GWEN_Buffer_GetStart(sbuf)); GWEN_Buffer_free(cbuf); GWEN_Buffer_free(sbuf); /* possibly show warning */ switch(gnutls_cipher_get(xio->session)) { case GNUTLS_CIPHER_ARCFOUR_128: case GNUTLS_CIPHER_3DES_CBC: case GNUTLS_CIPHER_AES_128_CBC: case GNUTLS_CIPHER_ARCFOUR_40: case GNUTLS_CIPHER_CAMELLIA_128_CBC: GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("TLS: Warning - The server has chosen unsafe SSL-Ciphers!")); break; case GNUTLS_CIPHER_AES_256_CBC: case GNUTLS_CIPHER_CAMELLIA_256_CBC: case GNUTLS_CIPHER_RC2_40_CBC: case GNUTLS_CIPHER_DES_CBC: case GNUTLS_CIPHER_AES_192_CBC: // new in gnutls-2.9.8, so i.e. not available in gnutls-2.8.x default: break; } } int GWENHYWFAR_CB GWEN_SyncIo_Tls_Connect(GWEN_SYNCIO *sio) { GWEN_SYNCIO_TLS *xio; GWEN_SYNCIO *baseIo; int rv; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_TLS, sio); assert(xio); baseIo=GWEN_SyncIo_GetBaseIo(sio); assert(baseIo); if (GWEN_SyncIo_GetFlags(sio) & GWEN_SYNCIO_FLAGS_PASSIVE) { if (GWEN_SyncIo_GetStatus(baseIo)!=GWEN_SyncIo_Status_Connected) { DBG_ERROR(GWEN_LOGDOMAIN, "Base layer is not connected"); return GWEN_ERROR_NOT_CONNECTED; } } else { DBG_INFO(GWEN_LOGDOMAIN, "Connecting base layer"); rv=GWEN_SyncIo_Connect(baseIo); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } DBG_INFO(GWEN_LOGDOMAIN, "Base layer connected"); } rv=GWEN_SyncIo_Tls_Prepare(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_Disconnect(baseIo); return rv; } do { rv=gnutls_handshake(xio->session); } while (rv==GNUTLS_E_AGAIN && rv==GNUTLS_E_INTERRUPTED); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "gnutls_handshake: %d (%s) [%s]", rv, gnutls_strerror(rv), gnutls_error_is_fatal(rv)?"fatal":"non-fatal"); if (rv==GNUTLS_E_UNEXPECTED_PACKET_LENGTH) { GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("A TLS handshake error occurred. " "If you are using AqBanking you should " "consider enabling the option " "\"force SSLv3\" in the user settings " "dialog.")); } else { GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("TLS Handshake Error: %d (%s)"), rv, gnutls_strerror(rv)); } GWEN_SyncIo_SetStatus(sio, GWEN_SyncIo_Status_Disconnected); GWEN_SyncIo_Tls_UndoPrepare(sio); GWEN_SyncIo_Disconnect(baseIo); return GWEN_ERROR_SSL; } else { /* show session info */ GWEN_SyncIo_Tls_ShowCipherInfo(sio); /* check certificate */ GWEN_SyncIo_SubFlags(sio, GWEN_SYNCIO_TLS_FLAGS_SECURE); rv=GWEN_SyncIo_Tls_GetPeerCert(sio); if (rv<0) { if (GWEN_SyncIo_GetFlags(sio) & GWEN_SYNCIO_TLS_FLAGS_NEED_PEER_CERT) { DBG_ERROR(GWEN_LOGDOMAIN, "No peer certificate when needed, aborting connection"); GWEN_SyncIo_SetStatus(sio, GWEN_SyncIo_Status_Disconnected); GWEN_SyncIo_Tls_UndoPrepare(sio); GWEN_SyncIo_Disconnect(baseIo); return GWEN_ERROR_SSL_SECURITY; } else { DBG_INFO(GWEN_LOGDOMAIN, "SSL connected (insecure)"); GWEN_SyncIo_SetStatus(sio, GWEN_SyncIo_Status_Connected); return 0; } } else { /* present cert to the user */ rv=GWEN_Gui_CheckCert(xio->peerCertDescr, sio, 0); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Peer cert not accepted (%d), aborting", rv); GWEN_SyncIo_SetStatus(sio, GWEN_SyncIo_Status_Disconnected); GWEN_SyncIo_Tls_UndoPrepare(sio); GWEN_SyncIo_Disconnect(baseIo); return GWEN_ERROR_SSL_SECURITY; } else { DBG_INFO(GWEN_LOGDOMAIN, "SSL connected (secure)"); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_TLS_FLAGS_SECURE); GWEN_SyncIo_SetStatus(sio, GWEN_SyncIo_Status_Connected); return 0; } } } } int GWENHYWFAR_CB GWEN_SyncIo_Tls_Disconnect(GWEN_SYNCIO *sio) { GWEN_SYNCIO_TLS *xio; GWEN_SYNCIO *baseIo; int rv; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_TLS, sio); assert(xio); baseIo=GWEN_SyncIo_GetBaseIo(sio); assert(baseIo); if (GWEN_SyncIo_GetStatus(sio)!=GWEN_SyncIo_Status_Connected) { DBG_INFO(GWEN_LOGDOMAIN, "Not connected"); GWEN_SyncIo_Tls_UndoPrepare(sio); GWEN_SyncIo_Disconnect(baseIo); return GWEN_ERROR_NOT_CONNECTED; } do { rv=gnutls_bye(xio->session, GNUTLS_SHUT_RDWR); } while (rv==GNUTLS_E_AGAIN && rv==GNUTLS_E_INTERRUPTED); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "gnutls_bye: %d (%s)", rv, gnutls_strerror(rv)); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Info, I18N("Error on gnutls_bye: %d (%s)"), rv, gnutls_strerror(rv)); GWEN_SyncIo_SetStatus(sio, GWEN_SyncIo_Status_Disconnected); GWEN_SyncIo_Tls_UndoPrepare(sio); GWEN_SyncIo_Disconnect(baseIo); return GWEN_ERROR_SSL; } GWEN_SyncIo_SetStatus(sio, GWEN_SyncIo_Status_Disconnected); GWEN_SyncIo_Tls_UndoPrepare(sio); GWEN_SyncIo_Disconnect(baseIo); return 0; } int GWENHYWFAR_CB GWEN_SyncIo_Tls_Read(GWEN_SYNCIO *sio, uint8_t *buffer, uint32_t size) { GWEN_SYNCIO_TLS *xio; GWEN_SYNCIO *baseIo; int rv; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_TLS, sio); assert(xio); baseIo=GWEN_SyncIo_GetBaseIo(sio); assert(baseIo); if (GWEN_SyncIo_GetStatus(sio)!=GWEN_SyncIo_Status_Connected) { DBG_INFO(GWEN_LOGDOMAIN, "Not connected"); GWEN_SyncIo_Tls_UndoPrepare(sio); GWEN_SyncIo_Disconnect(baseIo); return GWEN_ERROR_NOT_CONNECTED; } do { rv=gnutls_record_recv(xio->session, buffer, size); } while (rv==GNUTLS_E_AGAIN && rv==GNUTLS_E_INTERRUPTED); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "gnutls_record_recv: %d (%s)", rv, gnutls_strerror(rv)); #if 0 GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Error on gnutls_record_recv: %d (%s)"), rv, gnutls_strerror(rv)); #endif GWEN_SyncIo_SetStatus(sio, GWEN_SyncIo_Status_Disconnected); GWEN_SyncIo_Tls_UndoPrepare(sio); GWEN_SyncIo_Disconnect(baseIo); return GWEN_ERROR_SSL; } #ifdef GWEN_TLS_DEBUG DBG_ERROR(0, "Received this:"); GWEN_Text_DumpString((const char*) buffer, rv, 2); #endif return rv; } int GWENHYWFAR_CB GWEN_SyncIo_Tls_Write(GWEN_SYNCIO *sio, const uint8_t *buffer, uint32_t size) { GWEN_SYNCIO_TLS *xio; GWEN_SYNCIO *baseIo; int rv; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_TLS, sio); assert(xio); #ifdef GWEN_TLS_DEBUG DBG_ERROR(0, "Sending this:"); GWEN_Text_DumpString((const char*) buffer, size, 2); #endif baseIo=GWEN_SyncIo_GetBaseIo(sio); assert(baseIo); if (GWEN_SyncIo_GetStatus(sio)!=GWEN_SyncIo_Status_Connected) { DBG_INFO(GWEN_LOGDOMAIN, "Not connected"); GWEN_SyncIo_Tls_UndoPrepare(sio); GWEN_SyncIo_Disconnect(baseIo); return GWEN_ERROR_NOT_CONNECTED; } do { rv=gnutls_record_send(xio->session, buffer, size); } while (rv==GNUTLS_E_AGAIN && rv==GNUTLS_E_INTERRUPTED); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "gnutls_record_send: %d (%s)", rv, gnutls_strerror(rv)); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Error on gnutls_record_send: %d (%s)"), rv, gnutls_strerror(rv)); GWEN_SyncIo_SetStatus(sio, GWEN_SyncIo_Status_Disconnected); GWEN_SyncIo_Tls_UndoPrepare(sio); GWEN_SyncIo_Disconnect(baseIo); return GWEN_ERROR_SSL; } return rv; } gwenhywfar-4.15.2beta/src/sio/Makefile.in0000644000175000017500000006321412634022416015175 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/sio DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(iheader_HEADERS) $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libsio_la_LIBADD = am_libsio_la_OBJECTS = syncio.lo syncio_socket.lo syncio_memory.lo \ syncio_buffered.lo syncio_tls.lo syncio_http.lo \ ssl_cert_descr.lo httpsession.lo libsio_la_OBJECTS = $(am_libsio_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libsio_la_SOURCES) DIST_SOURCES = $(libsio_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(iheaderdir)" HEADERS = $(iheader_HEADERS) $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/parser @all_includes@ AM_CFLAGS = @visibility_cflags@ -DBUILDING_GWENHYWFAR typefiles = ssl_cert_descr.xml EXTRA_DIST = $(typefiles) noinst_LTLIBRARIES = libsio.la noinst_HEADERS = \ syncio_p.h \ syncio_socket_p.h \ syncio_memory_p.h \ syncio_buffered_p.h \ syncio_tls_p.h \ syncio_http_p.h \ ssl_cert_descr_l.h \ ssl_cert_descr_p.h \ httpsession_p.h iheaderdir = $(gwenhywfar_headerdir_am)/gwenhywfar iheader_HEADERS = \ syncio.h \ syncio_file.h \ syncio_socket.h \ syncio_memory.h \ syncio_buffered.h \ syncio_tls.h \ syncio_http.h \ ssl_cert_descr.h \ ssl_cert_flags.h \ httpsession.h libsio_la_SOURCES = \ syncio.c \ syncio_socket.c \ syncio_memory.c \ syncio_buffered.c \ syncio_tls.c \ syncio_http.c \ ssl_cert_descr.c \ httpsession.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/sio/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/sio/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libsio.la: $(libsio_la_OBJECTS) $(libsio_la_DEPENDENCIES) $(EXTRA_libsio_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libsio_la_OBJECTS) $(libsio_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/httpsession.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ssl_cert_descr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/syncio.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/syncio_buffered.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/syncio_http.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/syncio_memory.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/syncio_socket.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/syncio_tls.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-iheaderHEADERS: $(iheader_HEADERS) @$(NORMAL_INSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(iheaderdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(iheaderdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(iheaderdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(iheaderdir)" || exit $$?; \ done uninstall-iheaderHEADERS: @$(NORMAL_UNINSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(iheaderdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(iheaderdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iheaderHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iheaderHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am \ install-iheaderHEADERS install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-iheaderHEADERS types: $(typefiles) typemaker -d GWENHYWFAR_API $(typefiles) sources: for f in $(libsio_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/src/sio/syncio_socket_p.h0000644000175000017500000000443412416477066016510 00000000000000/*************************************************************************** begin : Tue Apr 27 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_SYNCIO_SOCKET_P_H #define GWENHYWFAR_SYNCIO_SOCKET_P_H #include typedef struct GWEN_SYNCIO_SOCKET GWEN_SYNCIO_SOCKET; struct GWEN_SYNCIO_SOCKET { GWEN_SOCKETTYPE socketType; GWEN_AddressFamily addressFamily; char *address; int port; GWEN_SOCKET *socket; }; static void GWENHYWFAR_CB GWEN_SyncIo_Socket_FreeData(void *bp, void *p); int GWENHYWFAR_CB GWEN_SyncIo_Socket_Connect(GWEN_SYNCIO *sio); int GWENHYWFAR_CB GWEN_SyncIo_Socket_Disconnect(GWEN_SYNCIO *sio); int GWENHYWFAR_CB GWEN_SyncIo_Socket_Read(GWEN_SYNCIO *sio, uint8_t *buffer, uint32_t size); int GWENHYWFAR_CB GWEN_SyncIo_Socket_Write(GWEN_SYNCIO *sio, const uint8_t *buffer, uint32_t size); #endif gwenhywfar-4.15.2beta/src/sio/httpsession.c0000644000175000017500000004461512416477066015700 00000000000000/*************************************************************************** begin : Fri Feb 15 2008 copyright : (C) 2008-2011 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "httpsession_p.h" #include "i18n_l.h" #include #include #include #include #include #include #include #include #include GWEN_INHERIT_FUNCTIONS(GWEN_HTTP_SESSION) GWEN_HTTP_SESSION *GWEN_HttpSession_new(const char *url, const char *defaultProto, int defaultPort) { GWEN_HTTP_SESSION *sess; GWEN_NEW_OBJECT(GWEN_HTTP_SESSION, sess); assert(sess); sess->usage=1; GWEN_INHERIT_INIT(GWEN_HTTP_SESSION, sess); if (url) sess->url=strdup(url); if (defaultProto) sess->defaultProtocol=strdup(defaultProto); sess->defaultPort=defaultPort; return sess; } void GWEN_HttpSession_Attach(GWEN_HTTP_SESSION *sess) { assert(sess); assert(sess->usage); sess->usage++; } void GWEN_HttpSession_free(GWEN_HTTP_SESSION *sess) { if (sess) { assert(sess->usage); if (sess->usage==1) { GWEN_INHERIT_FINI(GWEN_HTTP_SESSION, sess); GWEN_SyncIo_free(sess->syncIo); free(sess->url); free(sess->defaultProtocol); free(sess->httpUserAgent); free(sess->httpContentType); GWEN_FREE_OBJECT(sess); } else { sess->usage--; } } } uint32_t GWEN_HttpSession_GetFlags(const GWEN_HTTP_SESSION *sess) { assert(sess); assert(sess->usage); return sess->flags; } void GWEN_HttpSession_SetFlags(GWEN_HTTP_SESSION *sess, uint32_t fl) { assert(sess); assert(sess->usage); sess->flags=fl; } void GWEN_HttpSession_AddFlags(GWEN_HTTP_SESSION *sess, uint32_t fl) { assert(sess); assert(sess->usage); sess->flags|=fl; } void GWEN_HttpSession_SubFlags(GWEN_HTTP_SESSION *sess, uint32_t fl) { assert(sess); assert(sess->usage); sess->flags&=~fl; } const char *GWEN_HttpSession_GetHttpUserAgent(const GWEN_HTTP_SESSION *sess) { assert(sess); assert(sess->usage); return sess->httpUserAgent; } void GWEN_HttpSession_SetHttpUserAgent(GWEN_HTTP_SESSION *sess, const char *s) { assert(sess); assert(sess->usage); free(sess->httpUserAgent); if (s) sess->httpUserAgent=strdup(s); else sess->httpUserAgent=NULL; } const char *GWEN_HttpSession_GetHttpContentType(const GWEN_HTTP_SESSION *sess) { assert(sess); assert(sess->usage); return sess->httpContentType; } void GWEN_HttpSession_SetHttpContentType(GWEN_HTTP_SESSION *sess, const char *s) { assert(sess); assert(sess->usage); free(sess->httpContentType); if (s) sess->httpContentType=strdup(s); else sess->httpContentType=NULL; } int GWEN_HttpSession_GetHttpVMajor(const GWEN_HTTP_SESSION *sess) { assert(sess); assert(sess->usage); return sess->httpVMajor; } void GWEN_HttpSession_SetHttpVMajor(GWEN_HTTP_SESSION *sess, int i) { assert(sess); assert(sess->usage); sess->httpVMajor=i; } int GWEN_HttpSession_GetHttpVMinor(const GWEN_HTTP_SESSION *sess) { assert(sess); assert(sess->usage); return sess->httpVMinor; } void GWEN_HttpSession_SetHttpVMinor(GWEN_HTTP_SESSION *sess, int i) { assert(sess); assert(sess->usage); sess->httpVMinor=i; } int GWEN_HttpSession_Init(GWEN_HTTP_SESSION *sess) { GWEN_SYNCIO *sio; GWEN_SYNCIO *sioTls; GWEN_DB_NODE *db; int rv; rv=GWEN_Gui_GetSyncIo(sess->url, (sess->defaultProtocol)?(sess->defaultProtocol):"http", sess->defaultPort, &sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } if (strcasecmp(GWEN_SyncIo_GetTypeName(sio), GWEN_SYNCIO_HTTP_TYPE)!=0) { DBG_ERROR(GWEN_LOGDOMAIN, "URL does not lead to a HTTP layer"); GWEN_SyncIo_free(sio); return GWEN_ERROR_INVALID; } /* prepare TLS layer */ sioTls=GWEN_SyncIo_GetBaseIoByTypeName(sio, GWEN_SYNCIO_TLS_TYPE); if (sioTls) { GWEN_SyncIo_AddFlags(sioTls, GWEN_SYNCIO_TLS_FLAGS_ALLOW_V1_CA_CRT| GWEN_SYNCIO_TLS_FLAGS_ADD_TRUSTED_CAS); if (sess->flags & GWEN_HTTP_SESSION_FLAGS_FORCE_SSL3) GWEN_SyncIo_AddFlags(sioTls, GWEN_SYNCIO_TLS_FLAGS_FORCE_SSL_V3); if (sess->flags & GWEN_HTTP_SESSION_FLAGS_TLS_ONLY_SAFE_CIPHERS) { DBG_INFO(GWEN_LOGDOMAIN, "Only safe ciphers requested"); GWEN_SyncIo_AddFlags(sioTls, GWEN_SYNCIO_TLS_FLAGS_ONLY_SAFE_CIPHERS); } if (sess->flags & GWEN_HTTP_SESSION_FLAGS_TLS_FORCE_UNSAFE_CIPHERS) { DBG_INFO(GWEN_LOGDOMAIN, "Only unsafe ciphers requested"); GWEN_SyncIo_AddFlags(sioTls, GWEN_SYNCIO_TLS_FLAGS_FORCE_UNSAFE_CIPHERS); } } /* prepare HTTP out header */ db=GWEN_SyncIo_Http_GetDbHeaderOut(sio); if (sess->flags & GWEN_HTTP_SESSION_FLAGS_NO_CACHE) { GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Pragma", "no-cache"); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Cache-control", "no cache"); } if (sess->httpContentType) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Content-type", sess->httpContentType); if (sess->httpUserAgent) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "User-Agent", sess->httpUserAgent); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Connection", "close"); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Content-length", 0); sess->syncIo=sio; return 0; } int GWEN_HttpSession_Fini(GWEN_HTTP_SESSION *sess) { assert(sess); assert(sess->usage); if (sess->syncIo) { GWEN_SyncIo_Disconnect(sess->syncIo); GWEN_SyncIo_free(sess->syncIo); sess->syncIo=NULL; } return 0; } int GWEN_HttpSession_SendPacket(GWEN_HTTP_SESSION *sess, const char *httpCommand, const uint8_t *buf, uint32_t blen) { int rv; assert(sess); assert(sess->usage); /* first connect to server */ GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Debug, I18N("Connecting to server...")); rv=GWEN_SyncIo_Connect(sess->syncIo); if (rv==GWEN_ERROR_SSL) { GWEN_SYNCIO *sioTls; /* try again with alternated SSLv3 flag */ DBG_NOTICE(GWEN_LOGDOMAIN, "SSL-Error connecting (%d), retrying", rv); GWEN_SyncIo_Disconnect(sess->syncIo); sioTls=GWEN_SyncIo_GetBaseIoByTypeName(sess->syncIo, GWEN_SYNCIO_TLS_TYPE); if (sioTls) { if (sess->flags & GWEN_HTTP_SESSION_FLAGS_FORCE_SSL3) { DBG_INFO(GWEN_LOGDOMAIN, "Retrying to connect (non-SSLv3)"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Info, I18N("Retrying to connect (non-SSLv3)")); GWEN_SyncIo_SubFlags(sioTls, GWEN_SYNCIO_TLS_FLAGS_FORCE_SSL_V3); rv=GWEN_SyncIo_Connect(sess->syncIo); if (rv==0) { GWEN_HttpSession_SubFlags(sess, GWEN_HTTP_SESSION_FLAGS_FORCE_SSL3); } } else { DBG_INFO(GWEN_LOGDOMAIN, "Retrying to connect (SSLv3)"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Info, I18N("Retrying to connect (SSLv3)")); GWEN_SyncIo_AddFlags(sioTls, GWEN_SYNCIO_TLS_FLAGS_FORCE_SSL_V3); rv=GWEN_SyncIo_Connect(sess->syncIo); if (rv==0) { GWEN_HttpSession_AddFlags(sess, GWEN_HTTP_SESSION_FLAGS_FORCE_SSL3); } } } } if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Could not connect to server (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Could not connect to server")); GWEN_SyncIo_Disconnect(sess->syncIo); return rv; } else { GWEN_DB_NODE *db; GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Debug, I18N("Connected.")); /* set command */ db=GWEN_SyncIo_Http_GetDbCommandOut(sess->syncIo); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "command", httpCommand); if (sess->httpVMajor) { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "HTTP/%d.%d", sess->httpVMajor, sess->httpVMinor); numbuf[sizeof(numbuf)-1]=0; GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "protocol", numbuf); } else GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "protocol", "HTTP/1.0"); /* set content length */ db=GWEN_SyncIo_Http_GetDbHeaderOut(sess->syncIo); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Content-length", blen); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Debug, I18N("Sending message...")); /* send request */ rv=GWEN_SyncIo_WriteForced(sess->syncIo, buf, blen); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Could not send message (%d)", rv); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Could not send message (%d)"), rv); GWEN_SyncIo_Disconnect(sess->syncIo); return rv; } DBG_INFO(GWEN_LOGDOMAIN, "Message sent."); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Debug, I18N("Message sent.")); return 0; } } int GWEN_HttpSession__RecvPacket(GWEN_HTTP_SESSION *sess, GWEN_BUFFER *buf) { int rv; assert(sess); assert(sess->usage); rv=GWEN_SyncIo_Http_RecvBody(sess->syncIo, buf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } else if (rv<200 || rv>299) { /* response is only ok for continuation (100) code */ if (rv==100) { DBG_INFO(GWEN_LOGDOMAIN, "Continue..."); } else { GWEN_DB_NODE *dbHeaderIn; dbHeaderIn=GWEN_SyncIo_Http_GetDbHeaderIn(sess->syncIo); if (rv==301 || rv==303 || rv==305 || rv==307) { /* moved */ if (dbHeaderIn) { const char *s; s=GWEN_DB_GetCharValue(dbHeaderIn, "Location", 0, 0); if (s) { switch(rv) { case 301: case 303: GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Warning, I18N("HTTP: Moved permanently to %s"), s); break; case 305: GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Warning, I18N("HTTP: Use proxy at %s"), s); break; case 307: GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Warning, I18N("HTTP: Moved temporarily to %s"), s); break; default: GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Warning, I18N("HTTP: Moved to %s"), s); } /* switch */ } } } /* if moved */ } } return rv; } int GWEN_HttpSession_RecvPacket(GWEN_HTTP_SESSION *sess, GWEN_BUFFER *buf) { int rv; uint32_t pos; /* read response */ pos=GWEN_Buffer_GetPos(buf); for (;;) { GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Debug, I18N("Receiving response...")); rv=GWEN_HttpSession__RecvPacket(sess, buf); if (rv<0 || rv<200 || rv>299) { DBG_INFO(GWEN_LOGDOMAIN, "Error receiving packet (%d)", rv); GWEN_SyncIo_Disconnect(sess->syncIo); return rv; } if (rv!=100) break; GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Debug, I18N("Received continuation response.")); GWEN_Buffer_Crop(buf, 0, pos); } GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Debug, I18N("Response received.")); /* disconnect */ GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Debug, I18N("Disconnecting from server...")); GWEN_SyncIo_Disconnect(sess->syncIo); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Debug, I18N("Disconnected.")); return rv; } int GWEN_HttpSession__RecvPacketToSio(GWEN_HTTP_SESSION *sess, GWEN_SYNCIO *sio) { int rv; assert(sess); assert(sess->usage); rv=GWEN_SyncIo_Http_RecvBodyToSio(sess->syncIo, sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } else if (rv<200 || rv>299) { /* response is only ok for continuation (100) code */ if (rv==100) { DBG_INFO(GWEN_LOGDOMAIN, "Continue..."); } else { GWEN_DB_NODE *dbHeaderIn; dbHeaderIn=GWEN_SyncIo_Http_GetDbHeaderIn(sess->syncIo); if (rv==301 || rv==303 || rv==305 || rv==307) { /* moved */ if (dbHeaderIn) { const char *s; s=GWEN_DB_GetCharValue(dbHeaderIn, "Location", 0, 0); if (s) { switch(rv) { case 301: case 303: GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Warning, I18N("HTTP: Moved permanently to %s"), s); break; case 305: GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Warning, I18N("HTTP: Use proxy at %s"), s); break; case 307: GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Warning, I18N("HTTP: Moved temporarily to %s"), s); break; default: GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Warning, I18N("HTTP: Moved to %s"), s); } /* switch */ } } } /* if moved */ } } return rv; } int GWEN_HttpSession_RecvPacketToFile(GWEN_HTTP_SESSION *sess, const char *fname) { int rv; /* read response */ for (;;) { GWEN_SYNCIO *sio; sio=GWEN_SyncIo_File_new(fname, GWEN_SyncIo_File_CreationMode_CreateAlways); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE | GWEN_SYNCIO_FILE_FLAGS_UREAD | GWEN_SYNCIO_FILE_FLAGS_UWRITE | GWEN_SYNCIO_FILE_FLAGS_GREAD | GWEN_SYNCIO_FILE_FLAGS_GWRITE); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); return rv; } GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Debug, I18N("Receiving response...")); rv=GWEN_HttpSession__RecvPacketToSio(sess, sio); if (rv<0 || rv<200 || rv>299) { DBG_INFO(GWEN_LOGDOMAIN, "Error receiving packet (%d)", rv); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); unlink(fname); GWEN_SyncIo_Disconnect(sess->syncIo); return rv; } if (rv!=100) { int rv2; /* flush file and close it */ rv2=GWEN_SyncIo_Flush(sio); if (rv2<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv2); GWEN_SyncIo_free(sio); return rv2; } rv2=GWEN_SyncIo_Disconnect(sio); if (rv2<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv2); GWEN_SyncIo_free(sio); return rv2; } GWEN_SyncIo_free(sio); break; } GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Debug, I18N("Received continuation response.")); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); unlink(fname); } GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Debug, I18N("Response received.")); /* disconnect */ GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Debug, I18N("Disconnecting from server...")); GWEN_SyncIo_Disconnect(sess->syncIo); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Debug, I18N("Disconnected.")); return rv; } int GWEN_HttpSession_ConnectionTest(GWEN_HTTP_SESSION *sess) { int rv; assert(sess); assert(sess->usage); /* first connect to server */ GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Connecting to server...")); rv=GWEN_SyncIo_Connect(sess->syncIo); if (rv==GWEN_ERROR_SSL) { GWEN_SYNCIO *sioTls; /* try again with alternated SSLv3 flag */ DBG_NOTICE(GWEN_LOGDOMAIN, "SSL-Error connecting (%d), retrying", rv); GWEN_SyncIo_Disconnect(sess->syncIo); sioTls=GWEN_SyncIo_GetBaseIoByTypeName(sess->syncIo, GWEN_SYNCIO_TLS_TYPE); if (sioTls) { if (sess->flags & GWEN_HTTP_SESSION_FLAGS_FORCE_SSL3) { DBG_INFO(GWEN_LOGDOMAIN, "Retrying to connect (non-SSLv3)"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Warning, I18N("Retrying to connect (non-SSLv3)")); GWEN_SyncIo_SubFlags(sioTls, GWEN_SYNCIO_TLS_FLAGS_FORCE_SSL_V3); rv=GWEN_SyncIo_Connect(sess->syncIo); if (rv==0) { GWEN_HttpSession_SubFlags(sess, GWEN_HTTP_SESSION_FLAGS_FORCE_SSL3); } } else { DBG_INFO(GWEN_LOGDOMAIN, "Retrying to connect (SSLv3)"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Warning, I18N("Retrying to connect (SSLv3)")); GWEN_SyncIo_AddFlags(sioTls, GWEN_SYNCIO_TLS_FLAGS_FORCE_SSL_V3); rv=GWEN_SyncIo_Connect(sess->syncIo); if (rv==0) { GWEN_HttpSession_AddFlags(sess, GWEN_HTTP_SESSION_FLAGS_FORCE_SSL3); } } } } if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Could not connect to server (%d)", rv); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Could not connect to server")); GWEN_SyncIo_Disconnect(sess->syncIo); return rv; } else { GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Connected.")); GWEN_SyncIo_Disconnect(sess->syncIo); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Disconnected.")); return 0; } } gwenhywfar-4.15.2beta/src/sio/syncio_tls_p.h0000644000175000017500000000650112416477066016017 00000000000000/*************************************************************************** begin : Wed Apr 28 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_SYNCIO_TLS_P_H #define GWENHYWFAR_SYNCIO_TLS_P_H #include #include #if GNUTLS_VERSION_NUMBER < 0x030204 # define GWEN_TLS_CIPHER_PRIORITIES_DEFAULT "SECURE256:SECURE128" #else # define GWEN_TLS_CIPHER_PRIORITIES_DEFAULT "PFS:SECURE128" #endif #define GWEN_TLS_CIPHER_PRIORITIES_UNSAFE "SECURE128" #define GWEN_TLS_CIPHER_PRIORITIES_DISABLE_UNSAFE "-ARCFOUR-128:-AES-128-CBC:-CAMELLIA-128-CBC:-3DES-CBC" typedef struct GWEN_SYNCIO_TLS GWEN_SYNCIO_TLS; struct GWEN_SYNCIO_TLS { char *localCertFile; char *localKeyFile; char *localTrustFile; char *dhParamFile; char *hostName; gnutls_session_t session; gnutls_certificate_credentials_t credentials; int prepared; GWEN_SSLCERTDESCR *peerCertDescr; uint32_t peerCertFlags; }; static void GWENHYWFAR_CB GWEN_SyncIo_Tls_FreeData(void *bp, void *p); int GWENHYWFAR_CB GWEN_SyncIo_Tls_Connect(GWEN_SYNCIO *sio); int GWENHYWFAR_CB GWEN_SyncIo_Tls_Disconnect(GWEN_SYNCIO *sio); int GWENHYWFAR_CB GWEN_SyncIo_Tls_Read(GWEN_SYNCIO *sio, uint8_t *buffer, uint32_t size); int GWENHYWFAR_CB GWEN_SyncIo_Tls_Write(GWEN_SYNCIO *sio, const uint8_t *buffer, uint32_t size); static int GWEN_SyncIo_Tls__readFile(const char *fname, GWEN_BUFFER *buf); static ssize_t GWEN_SyncIo_Tls_Pull(gnutls_transport_ptr_t p, void *buf, size_t len); static ssize_t GWEN_SyncIo_Tls_Push(gnutls_transport_ptr_t p, const void *buf, size_t len); void GWEN_SyncIo_Tls_UndoPrepare(GWEN_SYNCIO *sio); int GWEN_SyncIo_Tls_Prepare(GWEN_SYNCIO *sio); static void GWEN_SyncIo_Tls_ShowCipherInfo(GWEN_SYNCIO *sio); #endif gwenhywfar-4.15.2beta/src/sio/ssl_cert_descr.h0000644000175000017500000002343112416477066016311 00000000000000/* This file is auto-generated from "ssl_cert_descr.xml" by the typemaker tool of Gwenhywfar. Do not edit this file -- all changes will be lost! */ #ifndef SSL_CERT_DESCR_H #define SSL_CERT_DESCR_H /** @page P_GWEN_SSLCERTDESCR_PUBLIC GWEN_SslCertDescr (public) This page describes the properties of GWEN_SSLCERTDESCR @anchor GWEN_SSLCERTDESCR_CountryName

CountryName

Set this property with @ref GWEN_SslCertDescr_SetCountryName, get it with @ref GWEN_SslCertDescr_GetCountryName

@anchor GWEN_SSLCERTDESCR_CommonName

CommonName

Set this property with @ref GWEN_SslCertDescr_SetCommonName, get it with @ref GWEN_SslCertDescr_GetCommonName

@anchor GWEN_SSLCERTDESCR_OrganizationName

OrganizationName

Set this property with @ref GWEN_SslCertDescr_SetOrganizationName, get it with @ref GWEN_SslCertDescr_GetOrganizationName

@anchor GWEN_SSLCERTDESCR_OrganizationalUnitName

OrganizationalUnitName

Set this property with @ref GWEN_SslCertDescr_SetOrganizationalUnitName, get it with @ref GWEN_SslCertDescr_GetOrganizationalUnitName

@anchor GWEN_SSLCERTDESCR_LocalityName

LocalityName

Set this property with @ref GWEN_SslCertDescr_SetLocalityName, get it with @ref GWEN_SslCertDescr_GetLocalityName

@anchor GWEN_SSLCERTDESCR_StateOrProvinceName

StateOrProvinceName

Set this property with @ref GWEN_SslCertDescr_SetStateOrProvinceName, get it with @ref GWEN_SslCertDescr_GetStateOrProvinceName

@anchor GWEN_SSLCERTDESCR_NotBefore

NotBefore

Set this property with @ref GWEN_SslCertDescr_SetNotBefore, get it with @ref GWEN_SslCertDescr_GetNotBefore

@anchor GWEN_SSLCERTDESCR_NotAfter

NotAfter

Set this property with @ref GWEN_SslCertDescr_SetNotAfter, get it with @ref GWEN_SslCertDescr_GetNotAfter

@anchor GWEN_SSLCERTDESCR_IpAddress

IpAddress

Set this property with @ref GWEN_SslCertDescr_SetIpAddress, get it with @ref GWEN_SslCertDescr_GetIpAddress

@anchor GWEN_SSLCERTDESCR_FingerPrint

FingerPrint

Set this property with @ref GWEN_SslCertDescr_SetFingerPrint, get it with @ref GWEN_SslCertDescr_GetFingerPrint

@anchor GWEN_SSLCERTDESCR_PubKeyModulus

PubKeyModulus

Set this property with @ref GWEN_SslCertDescr_SetPubKeyModulus, get it with @ref GWEN_SslCertDescr_GetPubKeyModulus

@anchor GWEN_SSLCERTDESCR_PubKeyExponent

PubKeyExponent

Set this property with @ref GWEN_SslCertDescr_SetPubKeyExponent, get it with @ref GWEN_SslCertDescr_GetPubKeyExponent

@anchor GWEN_SSLCERTDESCR_StatusText

StatusText

Set this property with @ref GWEN_SslCertDescr_SetStatusText, get it with @ref GWEN_SslCertDescr_GetStatusText

@anchor GWEN_SSLCERTDESCR_IsError

IsError

Set this property with @ref GWEN_SslCertDescr_SetIsError, get it with @ref GWEN_SslCertDescr_GetIsError

@anchor GWEN_SSLCERTDESCR_StatusFlags

StatusFlags

Set this property with @ref GWEN_SslCertDescr_SetStatusFlags, get it with @ref GWEN_SslCertDescr_GetStatusFlags

*/ #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_SSLCERTDESCR GWEN_SSLCERTDESCR; #ifdef __cplusplus } /* __cplusplus */ #endif #include #include #include /* headers */ #include #include #ifdef __cplusplus extern "C" { #endif GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_SSLCERTDESCR, GWEN_SslCertDescr, GWENHYWFAR_API) GWENHYWFAR_API GWEN_SSLCERTDESCR_LIST *GWEN_SslCertDescr_List_dup(const GWEN_SSLCERTDESCR_LIST *stl); GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_SSLCERTDESCR, GWEN_SslCertDescr, GWENHYWFAR_API) /** Destroys all objects stored in the given LIST2 and the list itself */ GWENHYWFAR_API void GWEN_SslCertDescr_List2_freeAll(GWEN_SSLCERTDESCR_LIST2 *stl); /** Creates a new object. */ GWENHYWFAR_API GWEN_SSLCERTDESCR *GWEN_SslCertDescr_new(void); /** Creates an object from the data in the given GWEN_DB_NODE */ GWENHYWFAR_API GWEN_SSLCERTDESCR *GWEN_SslCertDescr_fromDb(GWEN_DB_NODE *db); /** Creates and returns a deep copy of thegiven object. */ GWENHYWFAR_API GWEN_SSLCERTDESCR *GWEN_SslCertDescr_dup(const GWEN_SSLCERTDESCR*st); /** Destroys the given object. */ GWENHYWFAR_API void GWEN_SslCertDescr_free(GWEN_SSLCERTDESCR *st); /** Increments the usage counter of the given object, so an additional free() is needed to destroy the object. */ GWENHYWFAR_API void GWEN_SslCertDescr_Attach(GWEN_SSLCERTDESCR *st); /** Reads data from a GWEN_DB. */ GWENHYWFAR_API int GWEN_SslCertDescr_ReadDb(GWEN_SSLCERTDESCR *st, GWEN_DB_NODE *db); /** Stores an object in the given GWEN_DB_NODE */ GWENHYWFAR_API int GWEN_SslCertDescr_toDb(const GWEN_SSLCERTDESCR*st, GWEN_DB_NODE *db); /** Returns 0 if this object has not been modified, !=0 otherwise */ GWENHYWFAR_API int GWEN_SslCertDescr_IsModified(const GWEN_SSLCERTDESCR *st); /** Sets the modified state of the given object */ GWENHYWFAR_API void GWEN_SslCertDescr_SetModified(GWEN_SSLCERTDESCR *st, int i); /** * Returns the property @ref GWEN_SSLCERTDESCR_CountryName */ GWENHYWFAR_API const char *GWEN_SslCertDescr_GetCountryName(const GWEN_SSLCERTDESCR *el); /** * Set the property @ref GWEN_SSLCERTDESCR_CountryName */ GWENHYWFAR_API void GWEN_SslCertDescr_SetCountryName(GWEN_SSLCERTDESCR *el, const char *d); /** * Returns the property @ref GWEN_SSLCERTDESCR_CommonName */ GWENHYWFAR_API const char *GWEN_SslCertDescr_GetCommonName(const GWEN_SSLCERTDESCR *el); /** * Set the property @ref GWEN_SSLCERTDESCR_CommonName */ GWENHYWFAR_API void GWEN_SslCertDescr_SetCommonName(GWEN_SSLCERTDESCR *el, const char *d); /** * Returns the property @ref GWEN_SSLCERTDESCR_OrganizationName */ GWENHYWFAR_API const char *GWEN_SslCertDescr_GetOrganizationName(const GWEN_SSLCERTDESCR *el); /** * Set the property @ref GWEN_SSLCERTDESCR_OrganizationName */ GWENHYWFAR_API void GWEN_SslCertDescr_SetOrganizationName(GWEN_SSLCERTDESCR *el, const char *d); /** * Returns the property @ref GWEN_SSLCERTDESCR_OrganizationalUnitName */ GWENHYWFAR_API const char *GWEN_SslCertDescr_GetOrganizationalUnitName(const GWEN_SSLCERTDESCR *el); /** * Set the property @ref GWEN_SSLCERTDESCR_OrganizationalUnitName */ GWENHYWFAR_API void GWEN_SslCertDescr_SetOrganizationalUnitName(GWEN_SSLCERTDESCR *el, const char *d); /** * Returns the property @ref GWEN_SSLCERTDESCR_LocalityName */ GWENHYWFAR_API const char *GWEN_SslCertDescr_GetLocalityName(const GWEN_SSLCERTDESCR *el); /** * Set the property @ref GWEN_SSLCERTDESCR_LocalityName */ GWENHYWFAR_API void GWEN_SslCertDescr_SetLocalityName(GWEN_SSLCERTDESCR *el, const char *d); /** * Returns the property @ref GWEN_SSLCERTDESCR_StateOrProvinceName */ GWENHYWFAR_API const char *GWEN_SslCertDescr_GetStateOrProvinceName(const GWEN_SSLCERTDESCR *el); /** * Set the property @ref GWEN_SSLCERTDESCR_StateOrProvinceName */ GWENHYWFAR_API void GWEN_SslCertDescr_SetStateOrProvinceName(GWEN_SSLCERTDESCR *el, const char *d); /** * Returns the property @ref GWEN_SSLCERTDESCR_NotBefore */ GWENHYWFAR_API const GWEN_TIME *GWEN_SslCertDescr_GetNotBefore(const GWEN_SSLCERTDESCR *el); /** * Set the property @ref GWEN_SSLCERTDESCR_NotBefore */ GWENHYWFAR_API void GWEN_SslCertDescr_SetNotBefore(GWEN_SSLCERTDESCR *el, const GWEN_TIME *d); /** * Returns the property @ref GWEN_SSLCERTDESCR_NotAfter */ GWENHYWFAR_API const GWEN_TIME *GWEN_SslCertDescr_GetNotAfter(const GWEN_SSLCERTDESCR *el); /** * Set the property @ref GWEN_SSLCERTDESCR_NotAfter */ GWENHYWFAR_API void GWEN_SslCertDescr_SetNotAfter(GWEN_SSLCERTDESCR *el, const GWEN_TIME *d); /** * Returns the property @ref GWEN_SSLCERTDESCR_IpAddress */ GWENHYWFAR_API const char *GWEN_SslCertDescr_GetIpAddress(const GWEN_SSLCERTDESCR *el); /** * Set the property @ref GWEN_SSLCERTDESCR_IpAddress */ GWENHYWFAR_API void GWEN_SslCertDescr_SetIpAddress(GWEN_SSLCERTDESCR *el, const char *d); /** * Returns the property @ref GWEN_SSLCERTDESCR_FingerPrint */ GWENHYWFAR_API const char *GWEN_SslCertDescr_GetFingerPrint(const GWEN_SSLCERTDESCR *el); /** * Set the property @ref GWEN_SSLCERTDESCR_FingerPrint */ GWENHYWFAR_API void GWEN_SslCertDescr_SetFingerPrint(GWEN_SSLCERTDESCR *el, const char *d); /** * Returns the property @ref GWEN_SSLCERTDESCR_PubKeyModulus */ GWENHYWFAR_API const char *GWEN_SslCertDescr_GetPubKeyModulus(const GWEN_SSLCERTDESCR *el); /** * Set the property @ref GWEN_SSLCERTDESCR_PubKeyModulus */ GWENHYWFAR_API void GWEN_SslCertDescr_SetPubKeyModulus(GWEN_SSLCERTDESCR *el, const char *d); /** * Returns the property @ref GWEN_SSLCERTDESCR_PubKeyExponent */ GWENHYWFAR_API const char *GWEN_SslCertDescr_GetPubKeyExponent(const GWEN_SSLCERTDESCR *el); /** * Set the property @ref GWEN_SSLCERTDESCR_PubKeyExponent */ GWENHYWFAR_API void GWEN_SslCertDescr_SetPubKeyExponent(GWEN_SSLCERTDESCR *el, const char *d); /** * Returns the property @ref GWEN_SSLCERTDESCR_StatusText */ GWENHYWFAR_API const char *GWEN_SslCertDescr_GetStatusText(const GWEN_SSLCERTDESCR *el); /** * Set the property @ref GWEN_SSLCERTDESCR_StatusText */ GWENHYWFAR_API void GWEN_SslCertDescr_SetStatusText(GWEN_SSLCERTDESCR *el, const char *d); /** * Returns the property @ref GWEN_SSLCERTDESCR_IsError */ GWENHYWFAR_API int GWEN_SslCertDescr_GetIsError(const GWEN_SSLCERTDESCR *el); /** * Set the property @ref GWEN_SSLCERTDESCR_IsError */ GWENHYWFAR_API void GWEN_SslCertDescr_SetIsError(GWEN_SSLCERTDESCR *el, int d); /** * Returns the property @ref GWEN_SSLCERTDESCR_StatusFlags */ GWENHYWFAR_API uint32_t GWEN_SslCertDescr_GetStatusFlags(const GWEN_SSLCERTDESCR *el); /** * Set the property @ref GWEN_SSLCERTDESCR_StatusFlags */ GWENHYWFAR_API void GWEN_SslCertDescr_SetStatusFlags(GWEN_SSLCERTDESCR *el, uint32_t d); #ifdef __cplusplus } /* __cplusplus */ #endif #endif /* SSL_CERT_DESCR_H */ gwenhywfar-4.15.2beta/src/sio/syncio_buffered.c0000644000175000017500000002336612416477066016463 00000000000000/*************************************************************************** begin : Tue Apr 27 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "syncio_buffered_p.h" #include "i18n_l.h" #include #include #include #include #include #include GWEN_INHERIT(GWEN_SYNCIO, GWEN_SYNCIO_BUFFERED) GWEN_SYNCIO *GWEN_SyncIo_Buffered_new(GWEN_SYNCIO *baseIo) { GWEN_SYNCIO *sio; GWEN_SYNCIO_BUFFERED *xio; assert(baseIo); sio=GWEN_SyncIo_new(GWEN_SYNCIO_BUFFERED_TYPE, baseIo); GWEN_NEW_OBJECT(GWEN_SYNCIO_BUFFERED, xio); GWEN_INHERIT_SETDATA(GWEN_SYNCIO, GWEN_SYNCIO_BUFFERED, sio, xio, GWEN_SyncIo_Buffered_FreeData); GWEN_SyncIo_SetConnectFn(sio, GWEN_SyncIo_Buffered_Connect); GWEN_SyncIo_SetDisconnectFn(sio, GWEN_SyncIo_Buffered_Disconnect); GWEN_SyncIo_SetReadFn(sio, GWEN_SyncIo_Buffered_Read); GWEN_SyncIo_SetWriteFn(sio, GWEN_SyncIo_Buffered_Write); xio->readBuffer=GWEN_RingBuffer_new(1024); return sio; } void GWENHYWFAR_CB GWEN_SyncIo_Buffered_FreeData(void *bp, void *p) { GWEN_SYNCIO_BUFFERED *xio; xio=(GWEN_SYNCIO_BUFFERED*) p; GWEN_RingBuffer_free(xio->readBuffer); GWEN_FREE_OBJECT(xio); } int GWENHYWFAR_CB GWEN_SyncIo_Buffered_Connect(GWEN_SYNCIO *sio) { GWEN_SYNCIO *baseIo; //GWEN_RingBuffer_Reset(xio->readBuffer); baseIo=GWEN_SyncIo_GetBaseIo(sio); if (baseIo) { int rv; rv=GWEN_SyncIo_Connect(baseIo); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } return 0; } int GWENHYWFAR_CB GWEN_SyncIo_Buffered_Disconnect(GWEN_SYNCIO *sio) { GWEN_SYNCIO *baseIo; baseIo=GWEN_SyncIo_GetBaseIo(sio); if (baseIo) { int rv; rv=GWEN_SyncIo_Disconnect(baseIo); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } return 0; } int GWENHYWFAR_CB GWEN_SyncIo_Buffered_Read(GWEN_SYNCIO *sio, uint8_t *buffer, uint32_t size) { GWEN_SYNCIO_BUFFERED *xio; uint32_t flags; assert(size); assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_BUFFERED, sio); assert(xio); if (xio->readBuffer==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No buffer"); return GWEN_ERROR_INTERNAL; } GWEN_SyncIo_SubFlags(sio, GWEN_SYNCIO_FLAGS_PACKET_END); flags=GWEN_SyncIo_GetFlags(sio); if (flags & GWEN_SYNCIO_FLAGS_TRANSPARENT) { uint32_t bytesInBuffer; bytesInBuffer=GWEN_RingBuffer_GetUsedBytes(xio->readBuffer); if (bytesInBuffer) { int rv; uint32_t i; /* still bytes in buffer, return them first */ if (size>bytesInBuffer) i=bytesInBuffer; else i=size; rv=GWEN_RingBuffer_ReadBytes(xio->readBuffer, (char*) buffer, &i); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } /* bytes read */ return i; } else { GWEN_SYNCIO *baseIo; baseIo=GWEN_SyncIo_GetBaseIo(sio); if (baseIo) { int rv; rv=GWEN_SyncIo_Read(baseIo, buffer, size); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } else { DBG_INFO(GWEN_LOGDOMAIN, "No base layer"); return GWEN_ERROR_INTERNAL; } } } else { uint32_t bytesRead=0; while(bytesRead==0) { uint32_t bytesInBuffer; const uint8_t *psrc; uint32_t bytesSkipped=0; bytesInBuffer=GWEN_RingBuffer_GetMaxUnsegmentedRead(xio->readBuffer); if (bytesInBuffer==0) { uint32_t bytesFree; GWEN_SYNCIO *baseIo; int rv; /* fill buffer */ bytesFree=GWEN_RingBuffer_GetMaxUnsegmentedWrite(xio->readBuffer); if (bytesFree==0) { DBG_ERROR(GWEN_LOGDOMAIN, "No unsegmente read and write. TSNH!"); return GWEN_ERROR_INTERNAL; } baseIo=GWEN_SyncIo_GetBaseIo(sio); assert(baseIo); do { rv=GWEN_SyncIo_Read(baseIo, (uint8_t*) GWEN_RingBuffer_GetWritePointer(xio->readBuffer), bytesFree); } while (rv==GWEN_ERROR_INTERRUPTED); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } else if (rv==0) { DBG_INFO(GWEN_LOGDOMAIN, "EOF met (%d)", bytesRead); break; } GWEN_RingBuffer_SkipBytesWrite(xio->readBuffer, rv); bytesInBuffer=GWEN_RingBuffer_GetMaxUnsegmentedRead(xio->readBuffer); if (bytesInBuffer==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Still no bytes available?? TSNH!"); return GWEN_ERROR_INTERNAL; } } /* read data from ring buffer */ psrc=(const uint8_t*)GWEN_RingBuffer_GetReadPointer(xio->readBuffer); while(bytesSkippedreadBuffer, bytesSkipped); } *buffer=0; return bytesRead; } } int GWENHYWFAR_CB GWEN_SyncIo_Buffered_Write(GWEN_SYNCIO *sio, const uint8_t *buffer, uint32_t size) { GWEN_SYNCIO_BUFFERED *xio; GWEN_SYNCIO *baseIo; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_BUFFERED, sio); assert(xio); baseIo=GWEN_SyncIo_GetBaseIo(sio); if (baseIo) { uint32_t flags; flags=GWEN_SyncIo_GetFlags(sio); if (flags & GWEN_SYNCIO_FLAGS_TRANSPARENT) { int rv; /* transparent mode, write directly to base io */ do { rv=GWEN_SyncIo_Write(baseIo, buffer, size); } while (rv==GWEN_ERROR_INTERRUPTED); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } else { int rv; if (size) { rv=GWEN_SyncIo_WriteForced(baseIo, buffer, size); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } if (flags & GWEN_SYNCIO_FLAGS_DOSMODE) { do { rv=GWEN_SyncIo_Write(baseIo, (const uint8_t*) "\r\n", 2); } while (rv==GWEN_ERROR_INTERRUPTED); } else { do { rv=GWEN_SyncIo_Write(baseIo, (const uint8_t*) "\n", 1); } while (rv==GWEN_ERROR_INTERRUPTED); } if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return size; } } else { DBG_INFO(GWEN_LOGDOMAIN, "No base layer"); return GWEN_ERROR_INTERNAL; } } int GWEN_SyncIo_Buffered_ReadLineToBuffer(GWEN_SYNCIO *sio, GWEN_BUFFER *tbuf) { int rv; /* read a single line */ do { uint8_t *p; uint32_t l; GWEN_Buffer_AllocRoom(tbuf, 1024); p=(uint8_t*) GWEN_Buffer_GetPosPointer(tbuf); l=GWEN_Buffer_GetMaxUnsegmentedWrite(tbuf); rv=GWEN_SyncIo_Read(sio, p, l); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } else if (rv>0) { GWEN_Buffer_IncrementPos(tbuf, rv); GWEN_Buffer_AdjustUsedBytes(tbuf); if (p[rv-1]==10) { p[rv-1]=0; break; } } else if (rv==0) break; } while(rv>0); if (GWEN_Buffer_GetUsedBytes(tbuf)<1) { DBG_INFO(GWEN_LOGDOMAIN, "Nothing received: EOF met"); return GWEN_ERROR_EOF; } return 0; } int GWEN_SyncIo_Buffered_ReadLinesToStringList(GWEN_SYNCIO *sio, int maxLines, GWEN_STRINGLIST *sl) { GWEN_BUFFER *tbuf; int rv; int lineCount=0; if (maxLines==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Maxlines==0"); return GWEN_ERROR_INVALID; } /* read every line of the file */ tbuf=GWEN_Buffer_new(0, 256, 0, 1); while( (maxLines==-1) || (lineCount #endif #define DISABLE_DEBUGLOG #include "syncio_p.h" #include "syncio_file.h" #include "syncio_buffered.h" #include #include #include #include #include GWEN_INHERIT_FUNCTIONS(GWEN_SYNCIO) GWEN_LIST_FUNCTIONS(GWEN_SYNCIO, GWEN_SyncIo) GWEN_SYNCIO *GWEN_SyncIo_new(const char *typeName, GWEN_SYNCIO *baseIo) { GWEN_SYNCIO *sio; assert(typeName); GWEN_NEW_OBJECT(GWEN_SYNCIO, sio); sio->refCount=1; GWEN_INHERIT_INIT(GWEN_SYNCIO, sio); GWEN_LIST_INIT(GWEN_SYNCIO, sio); sio->typeName=strdup(typeName); sio->baseIo=baseIo; return sio; } void GWEN_SyncIo_Attach(GWEN_SYNCIO *sio) { assert(sio); assert(sio->refCount); sio->refCount++; } void GWEN_SyncIo_free(GWEN_SYNCIO *sio) { if (sio) { assert(sio->refCount); if (sio->refCount==1) { GWEN_LIST_FINI(GWEN_SYNCIO, sio); GWEN_INHERIT_FINI(GWEN_SYNCIO, sio); GWEN_SyncIo_free(sio->baseIo); free(sio->typeName); sio->refCount=0; GWEN_FREE_OBJECT(sio); } else sio->refCount--; } } int GWEN_SyncIo_Connect(GWEN_SYNCIO *sio) { assert(sio); assert(sio->refCount); if (sio->connectFn) return sio->connectFn(sio); else return 0; } int GWEN_SyncIo_Disconnect(GWEN_SYNCIO *sio) { assert(sio); assert(sio->refCount); if (sio->disconnectFn) return sio->disconnectFn(sio); else return 0; } int GWEN_SyncIo_Flush(GWEN_SYNCIO *sio) { assert(sio); assert(sio->refCount); if (sio->flushFn) return sio->flushFn(sio); else return 0; } int GWEN_SyncIo_Read(GWEN_SYNCIO *sio, uint8_t *buffer, uint32_t size) { assert(sio); assert(sio->refCount); if (sio->readFn) return sio->readFn(sio, buffer, size); else return GWEN_ERROR_EOF; } int GWEN_SyncIo_Write(GWEN_SYNCIO *sio, const uint8_t *buffer, uint32_t size) { assert(sio); assert(sio->refCount); if (sio->writeFn) return sio->writeFn(sio, buffer, size); else return GWEN_ERROR_BROKEN_PIPE; } uint32_t GWEN_SyncIo_GetFlags(const GWEN_SYNCIO *sio) { assert(sio); assert(sio->refCount); return sio->flags; } void GWEN_SyncIo_SetFlags(GWEN_SYNCIO *sio, uint32_t fl) { assert(sio); assert(sio->refCount); sio->flags=fl; } void GWEN_SyncIo_AddFlags(GWEN_SYNCIO *sio, uint32_t fl) { assert(sio); assert(sio->refCount); sio->flags|=fl; } void GWEN_SyncIo_SubFlags(GWEN_SYNCIO *sio, uint32_t fl) { assert(sio); assert(sio->refCount); sio->flags&=~fl; } GWEN_SYNCIO_STATUS GWEN_SyncIo_GetStatus(const GWEN_SYNCIO *sio) { assert(sio); assert(sio->refCount); return sio->status; } void GWEN_SyncIo_SetStatus(GWEN_SYNCIO *sio, GWEN_SYNCIO_STATUS st) { assert(sio); assert(sio->refCount); sio->status=st; } const char *GWEN_SyncIo_GetTypeName(const GWEN_SYNCIO *sio) { assert(sio); assert(sio->refCount); return sio->typeName; } GWEN_SYNCIO *GWEN_SyncIo_GetBaseIo(const GWEN_SYNCIO *sio) { assert(sio); assert(sio->refCount); return sio->baseIo; } GWEN_SYNCIO *GWEN_SyncIo_GetBaseIoByTypeName(const GWEN_SYNCIO *sio, const char *typeName) { GWEN_SYNCIO *baseIo; assert(sio); assert(sio->refCount); baseIo=sio->baseIo; while(baseIo) { if (baseIo->typeName && strcasecmp(baseIo->typeName, typeName)==0) return baseIo; baseIo=baseIo->baseIo; } return NULL; } GWEN_SYNCIO_CONNECT_FN GWEN_SyncIo_SetConnectFn(GWEN_SYNCIO *sio, GWEN_SYNCIO_CONNECT_FN fn) { GWEN_SYNCIO_CONNECT_FN of; assert(sio); assert(sio->refCount); of=sio->connectFn; sio->connectFn=fn; return of; } GWEN_SYNCIO_DISCONNECT_FN GWEN_SyncIo_SetDisconnectFn(GWEN_SYNCIO *sio, GWEN_SYNCIO_DISCONNECT_FN fn) { GWEN_SYNCIO_DISCONNECT_FN of; assert(sio); assert(sio->refCount); of=sio->disconnectFn; sio->disconnectFn=fn; return of; } GWEN_SYNCIO_FLUSH_FN GWEN_SyncIo_SetFlushFn(GWEN_SYNCIO *sio, GWEN_SYNCIO_FLUSH_FN fn) { GWEN_SYNCIO_FLUSH_FN of; assert(sio); assert(sio->refCount); of=sio->flushFn; sio->flushFn=fn; return of; } GWEN_SYNCIO_READ_FN GWEN_SyncIo_SetReadFn(GWEN_SYNCIO *sio, GWEN_SYNCIO_READ_FN fn) { GWEN_SYNCIO_READ_FN of; assert(sio); assert(sio->refCount); of=sio->readFn; sio->readFn=fn; return of; } GWEN_SYNCIO_WRITE_FN GWEN_SyncIo_SetWriteFn(GWEN_SYNCIO *sio, GWEN_SYNCIO_WRITE_FN fn) { GWEN_SYNCIO_WRITE_FN of; assert(sio); assert(sio->refCount); of=sio->writeFn; sio->writeFn=fn; return of; } int GWEN_SyncIo_WriteForced(GWEN_SYNCIO *sio, const uint8_t *buffer, uint32_t size) { if (size==0) { int rv; do { rv=GWEN_SyncIo_Write(sio, buffer, size); } while (rv==GWEN_ERROR_INTERRUPTED); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } else { uint32_t todo; todo=size; while(todo) { int rv; do { rv=GWEN_SyncIo_Write(sio, buffer, todo); } while (rv==GWEN_ERROR_INTERRUPTED); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } todo-=rv; buffer+=rv; } return size; } } int GWEN_SyncIo_ReadForced(GWEN_SYNCIO *sio, uint8_t *buffer, uint32_t size) { uint32_t todo; todo=size; while(todo) { int rv; do { rv=GWEN_SyncIo_Read(sio, buffer, todo); } while (rv==GWEN_ERROR_INTERRUPTED); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } else if (rv==0) { DBG_ERROR(GWEN_LOGDOMAIN, "EOF met"); return GWEN_ERROR_EOF; } todo-=rv; buffer+=rv; } return size; } int GWEN_SyncIo_WriteString(GWEN_SYNCIO *sio, const char *s) { int rv; rv=GWEN_SyncIo_WriteForced(sio, (const uint8_t*) s, s?strlen(s):0); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int GWEN_SyncIo_WriteLine(GWEN_SYNCIO *sio, const char *s) { int rv; rv=GWEN_SyncIo_WriteString(sio, s); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } if (GWEN_SyncIo_GetFlags(sio) & GWEN_SYNCIO_FLAGS_DOSMODE) rv=GWEN_SyncIo_WriteForced(sio, (const uint8_t*) "\r\n", 2); else rv=GWEN_SyncIo_WriteForced(sio, (const uint8_t*) "\n", 1); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int GWEN_SyncIo_WriteChar(GWEN_SYNCIO *sio, char s) { return GWEN_SyncIo_WriteForced(sio, (const uint8_t*) &s, 1); } int GWEN_SyncIo_Helper_ReadFileToStringList(const char *fname, int maxLines, GWEN_STRINGLIST *sl) { GWEN_SYNCIO *sio; GWEN_SYNCIO *baseSio; int rv; /* open checksums from file */ baseSio=GWEN_SyncIo_File_new(fname, GWEN_SyncIo_File_CreationMode_OpenExisting); GWEN_SyncIo_SetFlags(baseSio, GWEN_SYNCIO_FILE_FLAGS_READ); sio=GWEN_SyncIo_Buffered_new(baseSio); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Could not open file [%s]", fname?fname:""); GWEN_SyncIo_free(sio); return rv; } /* read up to maxlines lines from file */ rv=GWEN_SyncIo_Buffered_ReadLinesToStringList(sio, maxLines, sl); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Could not open file [%s]", fname?fname:""); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } /* close file */ GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return 0; } int GWEN_SyncIo_Helper_PartiallyReadFile(const char *fName, uint8_t *buffer, uint32_t size) { GWEN_SYNCIO *sio; uint32_t todo; int rv; /* open file */ sio=GWEN_SyncIo_File_new(fName, GWEN_SyncIo_File_CreationMode_OpenExisting); GWEN_SyncIo_SetFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Could not open file [%s]", fName?fName:""); GWEN_SyncIo_free(sio); return rv; } /* read file */ todo=size; while(todo) { int rv; do { rv=GWEN_SyncIo_Read(sio, buffer, todo); } while (rv==GWEN_ERROR_INTERRUPTED); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } else if (rv==0) { DBG_INFO(GWEN_LOGDOMAIN, "EOF met"); break; } todo-=rv; buffer+=rv; } /* close file */ GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return size-todo; } int GWEN_SyncIo_Helper_ReadFile(const char *fName, GWEN_BUFFER *dbuf) { GWEN_SYNCIO *sio; int rv; int bytesRead=0; int64_t fileSize=0; /* open file */ sio=GWEN_SyncIo_File_new(fName, GWEN_SyncIo_File_CreationMode_OpenExisting); GWEN_SyncIo_SetFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Could not open file [%s]", fName?fName:""); GWEN_SyncIo_free(sio); return rv; } fileSize=GWEN_SyncIo_File_Seek(sio, 0, GWEN_SyncIo_File_Whence_End); GWEN_SyncIo_File_Seek(sio, 0, GWEN_SyncIo_File_Whence_Set); if (fileSize>GWEN_Buffer_GetMaxUnsegmentedWrite(dbuf)) GWEN_Buffer_AllocRoom(dbuf, (uint32_t) fileSize); /* read file */ while(1) { uint32_t l; uint8_t *p; GWEN_Buffer_AllocRoom(dbuf, 4096); l=GWEN_Buffer_GetMaxUnsegmentedWrite(dbuf); p=(uint8_t*) GWEN_Buffer_GetPosPointer(dbuf); do { rv=GWEN_SyncIo_Read(sio, p, l); } while (rv==GWEN_ERROR_INTERRUPTED); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } else if (rv==0) { DBG_INFO(GWEN_LOGDOMAIN, "EOF met"); break; } bytesRead+=rv; GWEN_Buffer_IncrementPos(dbuf, rv); GWEN_Buffer_AdjustUsedBytes(dbuf); } /* close file */ GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return bytesRead; } gwenhywfar-4.15.2beta/src/sio/ssl_cert_flags.h0000644000175000017500000000176412364015347016302 00000000000000/*************************************************************************** begin : Wed Mar 16 2005 copyright : (C) 2005-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_SSL_CERT_FLAGS_H #define GWEN_SSL_CERT_FLAGS_H #define GWEN_SSL_CERT_FLAGS_SIGNER_NOT_FOUND 0x00000001 #define GWEN_SSL_CERT_FLAGS_INVALID 0x00000002 #define GWEN_SSL_CERT_FLAGS_REVOKED 0x00000004 #define GWEN_SSL_CERT_FLAGS_EXPIRED 0x00000008 #define GWEN_SSL_CERT_FLAGS_NOT_ACTIVE 0x00000010 #define GWEN_SSL_CERT_FLAGS_BAD_HOSTNAME 0x00000020 #define GWEN_SSL_CERT_FLAGS_BAD_DATA 0x00000040 #define GWEN_SSL_CERT_FLAGS_SYSTEM 0x00000080 #define GWEN_SSL_CERT_FLAGS_OK 0x80000000 #endif gwenhywfar-4.15.2beta/src/sio/Makefile.am0000644000175000017500000000206512364015347015166 00000000000000INCLUDES= -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/parser @all_includes@ AM_CFLAGS=@visibility_cflags@ -DBUILDING_GWENHYWFAR typefiles=ssl_cert_descr.xml EXTRA_DIST=$(typefiles) noinst_LTLIBRARIES=libsio.la noinst_HEADERS=\ syncio_p.h \ syncio_socket_p.h \ syncio_memory_p.h \ syncio_buffered_p.h \ syncio_tls_p.h \ syncio_http_p.h \ ssl_cert_descr_l.h \ ssl_cert_descr_p.h \ httpsession_p.h iheaderdir=$(gwenhywfar_headerdir_am)/gwenhywfar iheader_HEADERS=\ syncio.h \ syncio_file.h \ syncio_socket.h \ syncio_memory.h \ syncio_buffered.h \ syncio_tls.h \ syncio_http.h \ ssl_cert_descr.h \ ssl_cert_flags.h \ httpsession.h libsio_la_SOURCES=\ syncio.c \ syncio_socket.c \ syncio_memory.c \ syncio_buffered.c \ syncio_tls.c \ syncio_http.c \ ssl_cert_descr.c \ httpsession.c types: $(typefiles) typemaker -d GWENHYWFAR_API $(typefiles) sources: for f in $(libsio_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-4.15.2beta/src/sio/syncio_http_p.h0000644000175000017500000000745012416477066016200 00000000000000/*************************************************************************** begin : Wed Apr 28 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_SYNCIO_HTTP_P_H #define GWENHYWFAR_SYNCIO_HTTP_P_H #include typedef enum { GWEN_SyncIo_Http_Mode_Idle=0, /** not used when writing */ GWEN_SyncIo_Http_Mode_ChunkSize, /** not used when writing */ GWEN_SyncIo_Http_Mode_Chunk, GWEN_SyncIo_Http_Mode_Body, GWEN_SyncIo_Http_Mode_Error, } GWEN_SYNCIO_HTTP_MODE; typedef struct GWEN_SYNCIO_HTTP GWEN_SYNCIO_HTTP; struct GWEN_SYNCIO_HTTP { GWEN_SYNCIO_HTTP_MODE readMode; GWEN_DB_NODE *dbCommandIn; GWEN_DB_NODE *dbStatusIn; GWEN_DB_NODE *dbHeaderIn; int currentReadChunkSize; int currentReadBodySize; GWEN_SYNCIO_HTTP_MODE writeMode; GWEN_DB_NODE *dbCommandOut; GWEN_DB_NODE *dbStatusOut; GWEN_DB_NODE *dbHeaderOut; int currentWriteBodySize; }; static void GWENHYWFAR_CB GWEN_SyncIo_Http_FreeData(void *bp, void *p); int GWENHYWFAR_CB GWEN_SyncIo_Http_Connect(GWEN_SYNCIO *sio); int GWENHYWFAR_CB GWEN_SyncIo_Http_Disconnect(GWEN_SYNCIO *sio); int GWENHYWFAR_CB GWEN_SyncIo_Http_Read(GWEN_SYNCIO *sio, uint8_t *buffer, uint32_t size); int GWENHYWFAR_CB GWEN_SyncIo_Http_Write(GWEN_SYNCIO *sio, const uint8_t *buffer, uint32_t size); static int GWEN_SyncIo_Http_ReadLine(GWEN_SYNCIO *sio, GWEN_BUFFER *tbuf); static int GWEN_SyncIo_Http_ReadStatus(GWEN_SYNCIO *sio); static int GWEN_SyncIo_Http_ReadCommand(GWEN_SYNCIO *sio); static int GWEN_SyncIo_Http_ReadHeader(GWEN_SYNCIO *sio); static int GWEN_SyncIo_Http_ReadChunkSize(GWEN_SYNCIO *sio); static int GWEN_SyncIo_Http_ReadChunk(GWEN_SYNCIO *sio, uint8_t *buffer, uint32_t size); static int GWEN_SyncIo_Http_ReadBody(GWEN_SYNCIO *sio, uint8_t *buffer, uint32_t size); static int GWEN_SyncIo_Http_ParseStatus(GWEN_SYNCIO *sio, char *buffer); static int GWEN_SyncIo_Http_ParseCommand(GWEN_SYNCIO *sio, const char *buffer); static void GWEN_SyncIo_Http_SetReadIdle(GWEN_SYNCIO *sio); static int GWEN_SyncIo_Http_WriteCommand(GWEN_SYNCIO *sio); static int GWEN_SyncIo_Http_WriteStatus(GWEN_SYNCIO *sio); static int GWEN_SyncIo_Http_WriteHeader(GWEN_SYNCIO *sio); static int GWEN_SyncIo_Http_WriteChunkSize(GWEN_SYNCIO *sio, uint32_t size); static void GWEN_SyncIo_Http_SetWriteIdle(GWEN_SYNCIO *sio); #endif gwenhywfar-4.15.2beta/src/sio/syncio_http.h0000644000175000017500000000554412364015347015653 00000000000000/*************************************************************************** begin : Wed Apr 28 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_SYNCIO_HTTP_H #define GWENHYWFAR_SYNCIO_HTTP_H #include #include #define GWEN_SYNCIO_HTTP_TYPE "http" #ifdef __cplusplus extern "C" { #endif /** @name Constructor * */ /*@{*/ /** * The base GWEN_SYNCIO is expected to be of type @ref GWEN_SYNCIO_BUFFERED_TYPE * (see @ref GWEN_SyncIo_Buffered_new). */ GWENHYWFAR_API GWEN_SYNCIO *GWEN_SyncIo_Http_new(GWEN_SYNCIO *baseIo); /*@}*/ /** @name Get Information About Incoming HTTP Messages * */ /*@{*/ GWENHYWFAR_API GWEN_DB_NODE *GWEN_SyncIo_Http_GetDbCommandIn(const GWEN_SYNCIO *sio); GWENHYWFAR_API GWEN_DB_NODE *GWEN_SyncIo_Http_GetDbStatusIn(const GWEN_SYNCIO *sio); GWENHYWFAR_API GWEN_DB_NODE *GWEN_SyncIo_Http_GetDbHeaderIn(const GWEN_SYNCIO *sio); /*@}*/ /** @name Get Information About Outgoing HTTP Messages * */ /*@{*/ GWENHYWFAR_API GWEN_DB_NODE *GWEN_SyncIo_Http_GetDbCommandOut(const GWEN_SYNCIO *sio); GWENHYWFAR_API GWEN_DB_NODE *GWEN_SyncIo_Http_GetDbStatusOut(const GWEN_SYNCIO *sio); GWENHYWFAR_API GWEN_DB_NODE *GWEN_SyncIo_Http_GetDbHeaderOut(const GWEN_SYNCIO *sio); /*@}*/ GWENHYWFAR_API int GWEN_SyncIo_Http_RecvBody(GWEN_SYNCIO *sio, GWEN_BUFFER *buf); GWENHYWFAR_API int GWEN_SyncIo_Http_RecvBodyToSio(GWEN_SYNCIO *sio, GWEN_SYNCIO *sout); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/sio/syncio.h0000644000175000017500000001475212416477066014625 00000000000000/*************************************************************************** begin : Tue Apr 27 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_SYNCIO_H #define GWENHYWFAR_SYNCIO_H #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_SYNCIO GWEN_SYNCIO; GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_SYNCIO, GWENHYWFAR_API) GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_SYNCIO, GWEN_SyncIo, GWENHYWFAR_API) typedef enum { GWEN_SyncIo_Status_Unknown=-1, GWEN_SyncIo_Status_Unconnected=0, GWEN_SyncIo_Status_Disconnected, GWEN_SyncIo_Status_Connected, GWEN_SyncIo_Status_Disabled } GWEN_SYNCIO_STATUS; #define GWEN_SYNCIO_FLAGS_TRANSPARENT 0x80000000 #define GWEN_SYNCIO_FLAGS_DONTCLOSE 0x40000000 #define GWEN_SYNCIO_FLAGS_PASSIVE 0x20000000 #define GWEN_SYNCIO_FLAGS_PACKET_END 0x10000000 #define GWEN_SYNCIO_FLAGS_DOSMODE 0x08000000 #ifdef __cplusplus } #endif #include #include #ifdef __cplusplus extern "C" { #endif GWENHYWFAR_API GWEN_SYNCIO *GWEN_SyncIo_new(const char *typeName, GWEN_SYNCIO *baseIo); GWENHYWFAR_API void GWEN_SyncIo_Attach(GWEN_SYNCIO *sio); GWENHYWFAR_API void GWEN_SyncIo_free(GWEN_SYNCIO *sio); GWENHYWFAR_API int GWEN_SyncIo_Connect(GWEN_SYNCIO *sio); GWENHYWFAR_API int GWEN_SyncIo_Disconnect(GWEN_SYNCIO *sio); GWENHYWFAR_API int GWEN_SyncIo_Flush(GWEN_SYNCIO *sio); GWENHYWFAR_API int GWEN_SyncIo_Read(GWEN_SYNCIO *sio, uint8_t *buffer, uint32_t size); GWENHYWFAR_API int GWEN_SyncIo_Write(GWEN_SYNCIO *sio, const uint8_t *buffer, uint32_t size); GWENHYWFAR_API uint32_t GWEN_SyncIo_GetFlags(const GWEN_SYNCIO *sio); GWENHYWFAR_API void GWEN_SyncIo_SetFlags(GWEN_SYNCIO *sio, uint32_t fl); GWENHYWFAR_API void GWEN_SyncIo_AddFlags(GWEN_SYNCIO *sio, uint32_t fl); GWENHYWFAR_API void GWEN_SyncIo_SubFlags(GWEN_SYNCIO *sio, uint32_t fl); GWENHYWFAR_API GWEN_SYNCIO_STATUS GWEN_SyncIo_GetStatus(const GWEN_SYNCIO *sio); GWENHYWFAR_API void GWEN_SyncIo_SetStatus(GWEN_SYNCIO *sio, GWEN_SYNCIO_STATUS st); GWENHYWFAR_API const char *GWEN_SyncIo_GetTypeName(const GWEN_SYNCIO *sio); GWENHYWFAR_API GWEN_SYNCIO *GWEN_SyncIo_GetBaseIo(const GWEN_SYNCIO *sio); GWENHYWFAR_API GWEN_SYNCIO *GWEN_SyncIo_GetBaseIoByTypeName(const GWEN_SYNCIO *sio, const char *typeName); GWENHYWFAR_API int GWEN_SyncIo_WriteForced(GWEN_SYNCIO *sio, const uint8_t *buffer, uint32_t size); GWENHYWFAR_API int GWEN_SyncIo_ReadForced(GWEN_SYNCIO *sio, uint8_t *buffer, uint32_t size); /** * This is just a convenience function to easily replace a function from * the deprecated module GWEN_BUFFEREDIO. */ GWENHYWFAR_API int GWEN_SyncIo_WriteString(GWEN_SYNCIO *sio, const char *s); GWENHYWFAR_API int GWEN_SyncIo_WriteLine(GWEN_SYNCIO *sio, const char *s); GWENHYWFAR_API int GWEN_SyncIo_WriteChar(GWEN_SYNCIO *sio, char s); GWENHYWFAR_API int GWEN_SyncIo_Helper_ReadFileToStringList(const char *fname, int maxLines, GWEN_STRINGLIST *sl); /** * Read SIZE bytes from the given file. Returns the number of bytes actually read or * an error code (negative value). * * @return number of bytes actually read (or error code if negative value) * @param fName name of the file to load * @param buffer pointer to a fixed buffer to receive the bytes read * @param size number of bytes to read */ GWENHYWFAR_API int GWEN_SyncIo_Helper_PartiallyReadFile(const char *fName, uint8_t *buffer, uint32_t size); /** * Read a whole file into the given buffer * * @return number of bytes actually read (or error code if negative value) * @param fName name of the file to load * @param dbuf GWEN_BUFFER to receive the bytes read */ GWENHYWFAR_API int GWEN_SyncIo_Helper_ReadFile(const char *fName, GWEN_BUFFER *dbuf); /** @name Declarations for Virtual Functions * */ /*@{*/ typedef GWENHYWFAR_CB int (*GWEN_SYNCIO_CONNECT_FN)(GWEN_SYNCIO *sio); typedef GWENHYWFAR_CB int (*GWEN_SYNCIO_DISCONNECT_FN)(GWEN_SYNCIO *sio); typedef GWENHYWFAR_CB int (*GWEN_SYNCIO_FLUSH_FN)(GWEN_SYNCIO *sio); typedef GWENHYWFAR_CB int (*GWEN_SYNCIO_READ_FN)(GWEN_SYNCIO *sio, uint8_t *buffer, uint32_t size); typedef GWENHYWFAR_CB int (*GWEN_SYNCIO_WRITE_FN)(GWEN_SYNCIO *sio, const uint8_t *buffer, uint32_t size); /*@}*/ /** @name Setters for Virtual Functions * */ /*@{*/ GWENHYWFAR_API GWEN_SYNCIO_CONNECT_FN GWEN_SyncIo_SetConnectFn(GWEN_SYNCIO *sio, GWEN_SYNCIO_CONNECT_FN fn); GWENHYWFAR_API GWEN_SYNCIO_DISCONNECT_FN GWEN_SyncIo_SetDisconnectFn(GWEN_SYNCIO *sio, GWEN_SYNCIO_DISCONNECT_FN fn); GWENHYWFAR_API GWEN_SYNCIO_FLUSH_FN GWEN_SyncIo_SetFlushFn(GWEN_SYNCIO *sio, GWEN_SYNCIO_FLUSH_FN fn); GWENHYWFAR_API GWEN_SYNCIO_READ_FN GWEN_SyncIo_SetReadFn(GWEN_SYNCIO *sio, GWEN_SYNCIO_READ_FN fn); GWENHYWFAR_API GWEN_SYNCIO_WRITE_FN GWEN_SyncIo_SetWriteFn(GWEN_SYNCIO *sio, GWEN_SYNCIO_WRITE_FN fn); /*@}*/ #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/sio/ssl_cert_descr.xml0000644000175000017500000000301212364015347016643 00000000000000
gwenhywfar/gwentime.h
gwenhywfar/ssl_cert_flags.h
gwenhywfar-4.15.2beta/src/sio/httpsession.h0000644000175000017500000001064012416477066015674 00000000000000/*************************************************************************** begin : Fri Feb 15 2008 copyright : (C) 2008-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_HTTP_SESSION_H #define GWEN_HTTP_SESSION_H #include #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_HTTP_SESSION GWEN_HTTP_SESSION; GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_HTTP_SESSION, GWENHYWFAR_API) #ifdef __cplusplus } #endif #include #include /** * This flag forces SSLv3 connections when in HTTPS mode. */ #define GWEN_HTTP_SESSION_FLAGS_FORCE_SSL3 0x00000001 #define GWEN_HTTP_SESSION_FLAGS_NO_CACHE 0x00000002 #define GWEN_HTTP_SESSION_FLAGS_TLS_ONLY_SAFE_CIPHERS 0x00000004 #define GWEN_HTTP_SESSION_FLAGS_TLS_FORCE_UNSAFE_CIPHERS 0x00000008 #ifdef __cplusplus extern "C" { #endif /** @defgroup MOD_HTTP_SESSION HTTP Session * * This module provides support for exchanging a HTTP(s) request. */ /*@{*/ /** @name Contructor/Destructor * */ /*@{*/ GWENHYWFAR_API GWEN_HTTP_SESSION *GWEN_HttpSession_new(const char *url, const char *defaultProto, int defaultPort); GWENHYWFAR_API void GWEN_HttpSession_Attach(GWEN_HTTP_SESSION *sess); GWENHYWFAR_API void GWEN_HttpSession_free(GWEN_HTTP_SESSION *sess); /*@}*/ /** @name HTTP Setup Functions * * Functions of this groups should be called before @ref GWEN_HttpSession_Init * because the information conveyed via these functions is needed upon * initialisation. */ /*@{*/ GWENHYWFAR_API uint32_t GWEN_HttpSession_GetFlags(const GWEN_HTTP_SESSION *sess); GWENHYWFAR_API void GWEN_HttpSession_SetFlags(GWEN_HTTP_SESSION *sess, uint32_t fl); GWENHYWFAR_API void GWEN_HttpSession_AddFlags(GWEN_HTTP_SESSION *sess, uint32_t fl); GWENHYWFAR_API void GWEN_HttpSession_SubFlags(GWEN_HTTP_SESSION *sess, uint32_t fl); GWENHYWFAR_API const char *GWEN_HttpSession_GetHttpUserAgent(const GWEN_HTTP_SESSION *sess); GWENHYWFAR_API void GWEN_HttpSession_SetHttpUserAgent(GWEN_HTTP_SESSION *sess, const char *s); GWENHYWFAR_API const char *GWEN_HttpSession_GetHttpContentType(const GWEN_HTTP_SESSION *sess); GWENHYWFAR_API void GWEN_HttpSession_SetHttpContentType(GWEN_HTTP_SESSION *sess, const char *s); GWENHYWFAR_API int GWEN_HttpSession_GetHttpVMajor(const GWEN_HTTP_SESSION *sess); GWENHYWFAR_API void GWEN_HttpSession_SetHttpVMajor(GWEN_HTTP_SESSION *sess, int i); GWENHYWFAR_API int GWEN_HttpSession_GetHttpVMinor(const GWEN_HTTP_SESSION *sess); GWENHYWFAR_API void GWEN_HttpSession_SetHttpVMinor(GWEN_HTTP_SESSION *sess, int i); /*@}*/ /** @name Initialisation and Deinitialisation * */ /*@{*/ GWENHYWFAR_API int GWEN_HttpSession_Init(GWEN_HTTP_SESSION *sess); GWENHYWFAR_API int GWEN_HttpSession_Fini(GWEN_HTTP_SESSION *sess); /** @name Sending and Receiving * */ /*@{*/ /** * This function connects to the server and then sends the given message. * The buffer given as argument to this function must only contain the * raw data (i.e. the HTTP body, no header). * @param sess http session object * @param httpCommand HTTP command to send (e.g. "GET", "POST") * @param buf pointer to the http body data to send * @param blen size of the http body data to send (might be 0) */ GWENHYWFAR_API int GWEN_HttpSession_SendPacket(GWEN_HTTP_SESSION *sess, const char *httpCommand, const uint8_t *buf, uint32_t blen); /** * This function receives a response packet from the server and closes * the connection. It expects the connection to be established by * @ref GWEN_HttpSession_SendPacket(). */ GWENHYWFAR_API int GWEN_HttpSession_RecvPacket(GWEN_HTTP_SESSION *sess, GWEN_BUFFER *buf); GWENHYWFAR_API int GWEN_HttpSession_RecvPacketToFile(GWEN_HTTP_SESSION *sess, const char *fname); /** * Test-connect to the server. This function can be used to retrieve the SSL * certificate from a server as the cert exchange is part of the establishing of * a connection. * This function connects to the server and immediately disconnects. */ GWENHYWFAR_API int GWEN_HttpSession_ConnectionTest(GWEN_HTTP_SESSION *sess); /*@}*/ /*@}*/ /* defgroup */ #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/sio/syncio_socket.c0000644000175000017500000002534712416477066016172 00000000000000/*************************************************************************** begin : Tue Apr 27 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "syncio_socket_p.h" #include "i18n_l.h" #include #include #include #include #include #include #include #define GWEN_SYNCIO_SOCKET_READ_TIMEOUT 60000 #define GWEN_SYNCIO_SOCKET_WRITE_TIMEOUT 60000 GWEN_INHERIT(GWEN_SYNCIO, GWEN_SYNCIO_SOCKET) GWEN_SYNCIO *GWEN_SyncIo_Socket_new(GWEN_SOCKETTYPE sockType, GWEN_AddressFamily addressFamily) { GWEN_SYNCIO *sio; GWEN_SYNCIO_SOCKET *xio; sio=GWEN_SyncIo_new(GWEN_SYNCIO_SOCKET_TYPE, NULL); GWEN_NEW_OBJECT(GWEN_SYNCIO_SOCKET, xio); GWEN_INHERIT_SETDATA(GWEN_SYNCIO, GWEN_SYNCIO_SOCKET, sio, xio, GWEN_SyncIo_Socket_FreeData); GWEN_SyncIo_SetConnectFn(sio, GWEN_SyncIo_Socket_Connect); GWEN_SyncIo_SetDisconnectFn(sio, GWEN_SyncIo_Socket_Disconnect); GWEN_SyncIo_SetReadFn(sio, GWEN_SyncIo_Socket_Read); GWEN_SyncIo_SetWriteFn(sio, GWEN_SyncIo_Socket_Write); xio->socketType=sockType; xio->addressFamily=addressFamily; return sio; } GWEN_SYNCIO *GWEN_SyncIo_Socket_TakeOver(GWEN_SOCKET *socket) { GWEN_SYNCIO *sio; GWEN_SYNCIO_SOCKET *xio; sio=GWEN_SyncIo_new(GWEN_SYNCIO_SOCKET_TYPE, NULL); GWEN_NEW_OBJECT(GWEN_SYNCIO_SOCKET, xio); GWEN_INHERIT_SETDATA(GWEN_SYNCIO, GWEN_SYNCIO_SOCKET, sio, xio, GWEN_SyncIo_Socket_FreeData); GWEN_SyncIo_SetConnectFn(sio, GWEN_SyncIo_Socket_Connect); GWEN_SyncIo_SetDisconnectFn(sio, GWEN_SyncIo_Socket_Disconnect); GWEN_SyncIo_SetReadFn(sio, GWEN_SyncIo_Socket_Read); GWEN_SyncIo_SetWriteFn(sio, GWEN_SyncIo_Socket_Write); xio->socketType=GWEN_Socket_GetSocketType(socket); xio->socket=socket; GWEN_SyncIo_SetStatus(sio, GWEN_SyncIo_Status_Connected); return sio; } void GWENHYWFAR_CB GWEN_SyncIo_Socket_FreeData(void *bp, void *p) { GWEN_SYNCIO_SOCKET *xio; xio=(GWEN_SYNCIO_SOCKET*) p; free(xio->address); GWEN_Socket_free(xio->socket); GWEN_FREE_OBJECT(xio); } const char *GWEN_SyncIo_Socket_GetAddress(const GWEN_SYNCIO *sio) { GWEN_SYNCIO_SOCKET *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_SOCKET, sio); assert(xio); return xio->address; } void GWEN_SyncIo_Socket_SetAddress(GWEN_SYNCIO *sio, const char *s) { GWEN_SYNCIO_SOCKET *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_SOCKET, sio); assert(xio); free(xio->address); if (s) xio->address=strdup(s); else xio->address=NULL; } int GWEN_SyncIo_Socket_GetPort(const GWEN_SYNCIO *sio) { GWEN_SYNCIO_SOCKET *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_SOCKET, sio); assert(xio); return xio->port; } void GWEN_SyncIo_Socket_SetPort(GWEN_SYNCIO *sio, int i) { GWEN_SYNCIO_SOCKET *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_SOCKET, sio); assert(xio); xio->port=i; } int GWENHYWFAR_CB GWEN_SyncIo_Socket_Connect(GWEN_SYNCIO *sio) { GWEN_SYNCIO_SOCKET *xio; GWEN_SOCKET *sk; GWEN_INETADDRESS *addr; int rv; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_SOCKET, sio); assert(xio); if (GWEN_SyncIo_GetStatus(sio)==GWEN_SyncIo_Status_Connected) /* already connected */ return 0; if (GWEN_SyncIo_GetFlags(sio) & GWEN_SYNCIO_FLAGS_PASSIVE) { /* passive, can't connect */ DBG_ERROR(GWEN_LOGDOMAIN, "Passive socket, can't connect"); return GWEN_ERROR_INVALID; } sk=GWEN_Socket_new(xio->socketType); rv=GWEN_Socket_Open(sk); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Error setting up socket: %d"), rv); GWEN_Socket_free(sk); return rv; } addr=GWEN_InetAddr_new(xio->addressFamily); rv=GWEN_InetAddr_SetAddress(addr, xio->address); if (rv<0) { GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Debug, I18N("Resolving hostname \"%s\" ..."), xio->address); rv=GWEN_InetAddr_SetName(addr, xio->address); if (rv<0) { GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Unknown hostname \"%s\""), xio->address); GWEN_InetAddr_free(addr); GWEN_Socket_free(sk); return rv; } else { char addrBuf[256]; rv=GWEN_InetAddr_GetAddress(addr, addrBuf, sizeof(addrBuf)-1); addrBuf[sizeof(addrBuf)-1]=0; if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); } else GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Debug, I18N("IP address is \"%s\""), addrBuf); } } GWEN_InetAddr_SetPort(addr, xio->port); /* connect */ GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Debug, I18N("Connecting to \"%s\""), xio->address); rv=GWEN_Socket_Connect(sk, addr); GWEN_InetAddr_free(addr); if (rv<0) { GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Error, I18N("Error connecting to \"%s\": %s"), xio->address, strerror(errno)); GWEN_Socket_free(sk); return rv; } /* done */ xio->socket=sk; GWEN_SyncIo_SetStatus(sio, GWEN_SyncIo_Status_Connected); DBG_INFO(GWEN_LOGDOMAIN, "Connected to \"%s\"", xio->address); GWEN_Gui_ProgressLog2(0, GWEN_LoggerLevel_Debug, I18N("Connected to \"%s\""), xio->address); return 0; } int GWENHYWFAR_CB GWEN_SyncIo_Socket_Disconnect(GWEN_SYNCIO *sio) { GWEN_SYNCIO_SOCKET *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_SOCKET, sio); assert(xio); if (xio->socket) { GWEN_Socket_Close(xio->socket); GWEN_Socket_free(xio->socket); xio->socket=NULL; GWEN_SyncIo_SetStatus(sio, GWEN_SyncIo_Status_Disconnected); DBG_INFO(GWEN_LOGDOMAIN, "Disconnected socket"); } return 0; } int GWENHYWFAR_CB GWEN_SyncIo_Socket_Read(GWEN_SYNCIO *sio, uint8_t *buffer, uint32_t size) { GWEN_SYNCIO_SOCKET *xio; int rv; int i; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_SOCKET, sio); assert(xio); if (size==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Read size is zero"); return GWEN_ERROR_INVALID; } if (GWEN_SyncIo_GetStatus(sio)!=GWEN_SyncIo_Status_Connected) { /* not connected */ DBG_ERROR(GWEN_LOGDOMAIN, "Socket not connected (%d)", GWEN_SyncIo_GetStatus(sio)); return GWEN_ERROR_NOT_CONNECTED; } if (xio->socket==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No socket"); return GWEN_ERROR_INTERNAL; } /* check whether there is data available */ do { rv=GWEN_Socket_WaitForRead(xio->socket, 0); } while (rv==GWEN_ERROR_INTERRUPTED); /* nothing to read immediately, wait for data availability */ if (rv==GWEN_ERROR_TIMEOUT) { GWEN_SOCKET_LIST2 *sl; sl=GWEN_Socket_List2_new(); GWEN_Socket_List2_PushBack(sl, xio->socket); do { rv=GWEN_Gui_WaitForSockets(sl, NULL, 0, GWEN_SYNCIO_SOCKET_READ_TIMEOUT); } while (rv==GWEN_ERROR_INTERRUPTED); GWEN_Socket_List2_free(sl); if (rv<0) { if (rv==GWEN_ERROR_TIMEOUT) { DBG_ERROR(GWEN_LOGDOMAIN, "timeout (%d)", rv); return rv; } else { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } } i=size; rv=GWEN_Socket_Read(xio->socket, (char*) buffer, &i); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } #if 0 DBG_ERROR(0, "Received this:"); GWEN_Text_DumpString((const char*) buffer, i, stderr, 2); #endif return i; } int GWENHYWFAR_CB GWEN_SyncIo_Socket_Write(GWEN_SYNCIO *sio, const uint8_t *buffer, uint32_t size) { GWEN_SYNCIO_SOCKET *xio; int rv; int i; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_SOCKET, sio); assert(xio); if (GWEN_SyncIo_GetStatus(sio)!=GWEN_SyncIo_Status_Connected) { /* not connected */ DBG_ERROR(GWEN_LOGDOMAIN, "Socket not connected"); return GWEN_ERROR_NOT_CONNECTED; } if (xio->socket==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No socket"); return GWEN_ERROR_INTERNAL; } /* check whether the socket is writeable */ do { rv=GWEN_Socket_WaitForWrite(xio->socket, 0); } while (rv==GWEN_ERROR_INTERRUPTED); if (rv==GWEN_ERROR_TIMEOUT) { int rv; GWEN_SOCKET_LIST2 *sl; sl=GWEN_Socket_List2_new(); GWEN_Socket_List2_PushBack(sl, xio->socket); do { rv=GWEN_Gui_WaitForSockets(NULL, sl, 0, GWEN_SYNCIO_SOCKET_WRITE_TIMEOUT); } while (rv==GWEN_ERROR_INTERRUPTED); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Socket_List2_free(sl); return rv; } GWEN_Socket_List2_free(sl); } i=size; rv=GWEN_Socket_Write(xio->socket, (const char*) buffer, &i); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } #if 0 DBG_ERROR(0, "Written this:"); GWEN_Text_DumpString((const char*) buffer, i, stderr, 2); #endif return i; } gwenhywfar-4.15.2beta/src/crypt3/0000755000175000017500000000000012643267236013647 500000000000000gwenhywfar-4.15.2beta/src/crypt3/cryptkey_be.h0000644000175000017500000000516012530645242016252 00000000000000/************************************************************************************************* $RCSfile$ ------------------- cvs : $Id: crypttoken.h 1113 2007-01-10 09:14:16Z martin $ begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de ************************************************************************************************* * Please see toplevel file COPYING for license details * *************************************************************************************************/ #ifndef GWEN_CRYPT_KEY_BE_H #define GWEN_CRYPT_KEY_BE_H #include typedef GWENHYWFAR_CB int (*GWEN_CRYPT_KEY_SIGN_FN)(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, uint8_t *pSignatureData, uint32_t *pSignatureLen); typedef GWENHYWFAR_CB int (*GWEN_CRYPT_KEY_VERIFY_FN)(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, const uint8_t *pSignatureData, uint32_t signatureLen); typedef GWENHYWFAR_CB int (*GWEN_CRYPT_KEY_ENCIPHER_FN)(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen); typedef GWENHYWFAR_CB int (*GWEN_CRYPT_KEY_DECIPHER_FN)(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen); #ifdef __cplusplus extern "C" { #endif GWENHYWFAR_API GWEN_CRYPT_KEY *GWEN_Crypt_Key_new(GWEN_CRYPT_CRYPTALGOID cryptAlgoId, int keySize); GWENHYWFAR_API GWEN_CRYPT_KEY *GWEN_Crypt_Key_fromDb(GWEN_DB_NODE *db); GWENHYWFAR_API int GWEN_Crypt_Key_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db); GWENHYWFAR_API GWEN_CRYPT_KEY *GWEN_Crypt_Key_dup(const GWEN_CRYPT_KEY *k); GWENHYWFAR_API GWEN_CRYPT_KEY_SIGN_FN GWEN_Crypt_Key_SetSignFn(GWEN_CRYPT_KEY *k, GWEN_CRYPT_KEY_SIGN_FN f); GWENHYWFAR_API GWEN_CRYPT_KEY_VERIFY_FN GWEN_Crypt_Key_SetVerifyFn(GWEN_CRYPT_KEY *k, GWEN_CRYPT_KEY_VERIFY_FN f); GWENHYWFAR_API GWEN_CRYPT_KEY_ENCIPHER_FN GWEN_Crypt_Key_SetEncipherFn(GWEN_CRYPT_KEY *k, GWEN_CRYPT_KEY_ENCIPHER_FN f); GWENHYWFAR_API GWEN_CRYPT_KEY_DECIPHER_FN GWEN_Crypt_Key_SetDecipherFn(GWEN_CRYPT_KEY *k, GWEN_CRYPT_KEY_DECIPHER_FN f); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/crypt3/cryptalgo.c0000644000175000017500000001672312416477066015752 00000000000000/*************************************************************************** begin : Wed Mar 16 2005 copyright : (C) 2005-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "cryptalgo_p.h" #include #include GWEN_LIST2_FUNCTIONS(GWEN_CRYPT_CRYPTALGO, GWEN_Crypt_CryptAlgo) GWEN_CRYPT_CRYPTALGOID GWEN_Crypt_CryptAlgoId_fromString(const char *s) { assert(s); if (strcasecmp(s, "none")==0) return GWEN_Crypt_CryptAlgoId_None; else if (strcasecmp(s, "rsa")==0) return GWEN_Crypt_CryptAlgoId_Rsa; else if (strcasecmp(s, "dsa")==0) return GWEN_Crypt_CryptAlgoId_Dsa; else if (strcasecmp(s, "des")==0) return GWEN_Crypt_CryptAlgoId_Des; else if (strcasecmp(s, "des_3k")==0 || strcasecmp(s, "des3k")==0) return GWEN_Crypt_CryptAlgoId_Des3K; else if (strcasecmp(s, "blowfish")==0) return GWEN_Crypt_CryptAlgoId_BlowFish; else if (strcasecmp(s, "aes128")==0) return GWEN_Crypt_CryptAlgoId_Aes128; else if (strcasecmp(s, "any")==0) return GWEN_Crypt_CryptAlgoId_Any; return GWEN_Crypt_CryptAlgoId_Unknown; } const char *GWEN_Crypt_CryptAlgoId_toString(GWEN_CRYPT_CRYPTALGOID a) { switch(a) { case GWEN_Crypt_CryptAlgoId_None: return "none"; case GWEN_Crypt_CryptAlgoId_Rsa: return "rsa"; case GWEN_Crypt_CryptAlgoId_Dsa: return "dsa"; case GWEN_Crypt_CryptAlgoId_Des: return "des"; case GWEN_Crypt_CryptAlgoId_Des3K: return "des_3k"; case GWEN_Crypt_CryptAlgoId_BlowFish: return "blowfish"; case GWEN_Crypt_CryptAlgoId_Aes128: return "aes128"; case GWEN_Crypt_CryptAlgoId_Any: return "any"; default: return "unknown"; } } GWEN_CRYPT_CRYPTMODE GWEN_Crypt_CryptMode_fromString(const char *s) { assert(s); if (strcasecmp(s, "none")==0) return GWEN_Crypt_CryptMode_None; else if (strcasecmp(s, "ecb")==0) return GWEN_Crypt_CryptMode_Ecb; else if (strcasecmp(s, "cfb")==0) return GWEN_Crypt_CryptMode_Cfb; else if (strcasecmp(s, "cbc")==0) return GWEN_Crypt_CryptMode_Cbc; return GWEN_Crypt_CryptMode_Unknown; } const char *GWEN_Crypt_CryptMode_toString(GWEN_CRYPT_CRYPTMODE m) { switch(m) { case GWEN_Crypt_CryptMode_None: return "none"; case GWEN_Crypt_CryptMode_Ecb: return "ecb"; case GWEN_Crypt_CryptMode_Cfb: return "cfb"; case GWEN_Crypt_CryptMode_Cbc: return "cbc"; default: return "unknown"; } } GWEN_CRYPT_CRYPTALGO *GWEN_Crypt_CryptAlgo_new(GWEN_CRYPT_CRYPTALGOID id, GWEN_CRYPT_CRYPTMODE m) { GWEN_CRYPT_CRYPTALGO *a; GWEN_NEW_OBJECT(GWEN_CRYPT_CRYPTALGO, a); a->refCount=1; a->id=id; a->mode=m; return a; } void GWEN_Crypt_CryptAlgo_Attach(GWEN_CRYPT_CRYPTALGO *a) { assert(a); assert(a->refCount); a->refCount++; } GWEN_CRYPT_CRYPTALGO *GWEN_Crypt_CryptAlgo_fromDb(GWEN_DB_NODE *db) { const char *s; assert(db); s=GWEN_DB_GetCharValue(db, "id", 0, NULL); if (s) { GWEN_CRYPT_CRYPTALGO *a; GWEN_CRYPT_CRYPTALGOID id; GWEN_CRYPT_CRYPTMODE m; const void *p; unsigned int len; id=GWEN_Crypt_CryptAlgoId_fromString(s); if (id==GWEN_Crypt_CryptAlgoId_Unknown) { DBG_INFO(GWEN_LOGDOMAIN, "Unknown cryptalgo id [%s]", s); return NULL; } s=GWEN_DB_GetCharValue(db, "mode", 0, NULL); if (s) m=GWEN_Crypt_CryptMode_fromString(s); else { DBG_INFO(GWEN_LOGDOMAIN, "Missing crypt mode"); return NULL; } a=GWEN_Crypt_CryptAlgo_new(id, m); assert(a); p=GWEN_DB_GetBinValue(db, "initVector", 0, NULL, 0, &len); if (p && len) GWEN_Crypt_CryptAlgo_SetInitVector(a, p, len); a->chunkSize=GWEN_DB_GetIntValue(db, "chunkSize", 0, 0); a->keySizeInBits=GWEN_DB_GetIntValue(db, "keySizeInBits", 0, 0); return a; } else { DBG_INFO(GWEN_LOGDOMAIN, "Missing cryptalgo id"); return NULL; } } int GWEN_Crypt_CryptAlgo_toDb(const GWEN_CRYPT_CRYPTALGO *a, GWEN_DB_NODE *db) { assert(a); assert(a->refCount); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "id", GWEN_Crypt_CryptAlgoId_toString(a->id)); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "mode", GWEN_Crypt_CryptMode_toString(a->id)); if (a->pInitVector && a->lInitVector) GWEN_DB_SetBinValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "initVector", a->pInitVector, a->lInitVector); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "chunkSize", a->chunkSize); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "keySizeInBits", a->keySizeInBits); return 0; } GWEN_CRYPT_CRYPTALGO *GWEN_Crypt_CryptAlgo_dup(const GWEN_CRYPT_CRYPTALGO *na) { GWEN_CRYPT_CRYPTALGO *a; assert(na); a=GWEN_Crypt_CryptAlgo_new(na->id, na->mode); if (na->pInitVector && na->lInitVector) { a->pInitVector=(uint8_t*) malloc(na->lInitVector); if (a->pInitVector==NULL) { GWEN_Crypt_CryptAlgo_free(a); return NULL; } else memmove(a->pInitVector, na->pInitVector, na->lInitVector); a->lInitVector=na->lInitVector; } a->chunkSize=na->chunkSize; a->keySizeInBits=na->keySizeInBits; return a; } void GWEN_Crypt_CryptAlgo_free(GWEN_CRYPT_CRYPTALGO *a) { if (a) { assert(a->refCount); if (a->refCount==1) { if (a->pInitVector) { free(a->pInitVector); a->pInitVector=NULL; } a->refCount--; GWEN_FREE_OBJECT(a); } else { a->refCount--; } } } GWEN_CRYPT_CRYPTALGOID GWEN_Crypt_CryptAlgo_GetId(const GWEN_CRYPT_CRYPTALGO *a) { assert(a); assert(a->refCount); return a->id; } GWEN_CRYPT_CRYPTMODE GWEN_Crypt_CryptAlgo_GetMode(const GWEN_CRYPT_CRYPTALGO *a) { assert(a); assert(a->refCount); return a->mode; } uint8_t *GWEN_Crypt_CryptAlgo_GetInitVectorPtr(const GWEN_CRYPT_CRYPTALGO *a) { assert(a); assert(a->refCount); return a->pInitVector; } uint32_t GWEN_Crypt_CryptAlgo_GetInitVectorLen(const GWEN_CRYPT_CRYPTALGO *a) { assert(a); assert(a->refCount); return a->lInitVector; } int GWEN_Crypt_CryptAlgo_SetInitVector(GWEN_CRYPT_CRYPTALGO *a, const uint8_t *pv, uint32_t lv) { uint8_t *nv=NULL; assert(a); assert(a->refCount); if (pv && lv) { nv=(uint8_t*) malloc(lv); if (nv==NULL) return GWEN_ERROR_MEMORY_FULL; memmove(nv, pv, lv); } if (a->pInitVector && a->lInitVector) free(a->pInitVector); a->pInitVector=nv; a->lInitVector=(nv!=NULL)?lv:0; return 0; } int GWEN_Crypt_CryptAlgo_GetChunkSize(const GWEN_CRYPT_CRYPTALGO *a) { assert(a); assert(a->refCount); return a->chunkSize; } void GWEN_Crypt_CryptAlgo_SetChunkSize(GWEN_CRYPT_CRYPTALGO *a, int s) { assert(a); assert(a->refCount); a->chunkSize=s; } int GWEN_Crypt_CryptAlgo_GetKeySizeInBits(const GWEN_CRYPT_CRYPTALGO *a) { assert(a); assert(a->refCount); return a->keySizeInBits; } void GWEN_Crypt_CryptAlgo_SetKeySizeInBits(GWEN_CRYPT_CRYPTALGO *a, int s) { assert(a); assert(a->refCount); a->keySizeInBits=s; } gwenhywfar-4.15.2beta/src/crypt3/mdigest.c0000644000175000017500000003305212416477066015374 00000000000000/*************************************************************************** begin : Wed Mar 16 2005 copyright : (C) 2005-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "mdigest_p.h" #include "i18n_l.h" #include #include #include #include #include #include #include GWEN_INHERIT_FUNCTIONS(GWEN_MDIGEST) GWEN_LIST_FUNCTIONS(GWEN_MDIGEST, GWEN_MDigest) GWEN_LIST2_FUNCTIONS(GWEN_MDIGEST, GWEN_MDigest) GWEN_MDIGEST *GWEN_MDigest_new(GWEN_CRYPT_HASHALGOID a) { GWEN_MDIGEST *md; GWEN_NEW_OBJECT(GWEN_MDIGEST, md) md->refCount=1; GWEN_INHERIT_INIT(GWEN_MDIGEST, md) GWEN_LIST_INIT(GWEN_MDIGEST, md) md->hashAlgoId=a; return md; } void GWEN_MDigest_free(GWEN_MDIGEST *md) { if (md) { assert(md->refCount); if (md->refCount==1) { GWEN_INHERIT_FINI(GWEN_MDIGEST, md); free(md->pDigest); md->refCount=0; GWEN_LIST_FINI(GWEN_MDIGEST, md); GWEN_FREE_OBJECT(md); } else md->refCount--; } } GWEN_CRYPT_HASHALGOID GWEN_MDigest_GetHashAlgoId(const GWEN_MDIGEST *md) { assert(md); assert(md->refCount); return md->hashAlgoId; } uint8_t *GWEN_MDigest_GetDigestPtr(GWEN_MDIGEST *md) { assert(md); assert(md->refCount); return md->pDigest; } unsigned int GWEN_MDigest_GetDigestSize(GWEN_MDIGEST *md) { assert(md); assert(md->refCount); return md->lDigest; } void GWEN_MDigest_SetDigestBuffer(GWEN_MDIGEST *md, uint8_t *buf, unsigned int l) { assert(md); assert(md->refCount); if (l) { assert(buf); } if (md->pDigest && md->lDigest) free(md->pDigest); md->pDigest=buf; md->lDigest=l; } void GWEN_MDigest_SetDigestLen(GWEN_MDIGEST *md, unsigned int l) { assert(md); assert(md->refCount); if (md->pDigest && md->lDigest) free(md->pDigest); md->pDigest=NULL; md->lDigest=l; } int GWEN_MDigest_Begin(GWEN_MDIGEST *md) { assert(md); assert(md->refCount); if (md->beginFn) return md->beginFn(md); else return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_MDigest_End(GWEN_MDIGEST *md) { assert(md); assert(md->refCount); if (md->endFn) return md->endFn(md); else return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_MDigest_Update(GWEN_MDIGEST *md, const uint8_t *buf, unsigned int l) { assert(md); assert(md->refCount); if (md->updateFn) return md->updateFn(md, buf, l); else return GWEN_ERROR_NOT_IMPLEMENTED; } GWEN_MDIGEST_BEGIN_FN GWEN_MDigest_SetBeginFn(GWEN_MDIGEST *md, GWEN_MDIGEST_BEGIN_FN f) { GWEN_MDIGEST_BEGIN_FN of; assert(md); assert(md->refCount); of=md->beginFn; md->beginFn=f; return of; } GWEN_MDIGEST_END_FN GWEN_MDigest_SetEndFn(GWEN_MDIGEST *md, GWEN_MDIGEST_END_FN f) { GWEN_MDIGEST_END_FN of; assert(md); assert(md->refCount); of=md->endFn; md->endFn=f; return of; } GWEN_MDIGEST_UPDATE_FN GWEN_MDigest_SetUpdateFn(GWEN_MDIGEST *md, GWEN_MDIGEST_UPDATE_FN f) { GWEN_MDIGEST_UPDATE_FN of; assert(md); assert(md->refCount); of=md->updateFn; md->updateFn=f; return of; } int GWEN_MDigest_PBKDF2(GWEN_MDIGEST *md, const char *password, const uint8_t *pSalt, uint32_t lSalt, uint8_t *pKey, uint32_t lKey, uint32_t iterations) { int rv; uint8_t hash[128]; uint32_t hsize; uint32_t i; hsize=GWEN_MDigest_GetDigestSize(md); if (lKey>hsize || lKey>sizeof(hash)) { DBG_ERROR(GWEN_LOGDOMAIN, "Derived key too long"); return GWEN_ERROR_INVALID; } rv=GWEN_MDigest_Begin(md); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_End(md); return rv; } /* hash password */ rv=GWEN_MDigest_Update(md, (const uint8_t*) password, strlen(password)); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_End(md); return rv; } /* hash salt */ rv=GWEN_MDigest_Update(md, pSalt, lSalt); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_End(md); return rv; } rv=GWEN_MDigest_End(md); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_End(md); return rv; } /* use that hash now for the iterations */ memmove(hash, GWEN_MDigest_GetDigestPtr(md), hsize); for (i=2; i #include #ifdef __cplusplus extern "C" { #endif /** * This function encrypts the given data using the given password. * The key for encryption is derived from the given password using * the function @ref GWEN_MDigest_PKPDF2. */ GWENHYWFAR_API int GWEN_SmallTresor_Encrypt(const uint8_t *src, uint32_t slen, const char *password, GWEN_BUFFER *dst, int passwordIterations, int cryptIterations); GWENHYWFAR_API int GWEN_SmallTresor_Decrypt(const uint8_t *p, uint32_t len, const char *password, GWEN_BUFFER *dst, int passwordIterations, int cryptIterations); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/crypt3/smalltresor.c0000644000175000017500000002640412416477066016312 00000000000000/*************************************************************************** begin : Wed May 11 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "smalltresor.h" #include #include #include #include #include #include #include #define BLOWFISH_KEYSIZE 32 static int _encodeData(const uint8_t *ptr, uint32_t len, uint8_t *pOutData, uint32_t *pOutLen, const uint8_t *pKey) { GWEN_CRYPT_KEY *k; int rv; k=GWEN_Crypt_KeyBlowFish_fromData(GWEN_Crypt_CryptMode_Cbc, BLOWFISH_KEYSIZE, pKey, BLOWFISH_KEYSIZE); if (!k) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not create key"); return GWEN_ERROR_ENCRYPT; } rv=GWEN_Crypt_Key_Encipher(k, ptr, len, pOutData, pOutLen); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Error on GWEN_Crypt_Key_Encipher(len=%d, *outLen=%d): %d", len, *pOutLen, rv); GWEN_Crypt_Key_free(k); return rv; } GWEN_Crypt_Key_free(k); return 0; } static int _encode(const uint8_t *p, uint32_t len, GWEN_BUFFER *buf, int iterations) { GWEN_BUFFER *tbuf1; GWEN_BUFFER *tbuf2; int i; int rv; uint8_t *pDest; uint32_t lDest; tbuf1=GWEN_Buffer_new(0, 256, 0, 1); tbuf2=GWEN_Buffer_new(0, 256, 0, 1); for (i=0; i>8) & 0xff); GWEN_Buffer_AppendByte(dst, len & 0xff); } GWEN_Buffer_AllocRoom(dst, len); GWEN_Crypt_Random(3, (uint8_t*) GWEN_Buffer_GetPosPointer(dst), len); GWEN_Buffer_IncrementPos(dst, len); GWEN_Buffer_AdjustUsedBytes(dst); return 0; } static int _decodeData(const uint8_t *ptr, uint32_t len, uint8_t *pOutData, uint32_t *pOutLen, const uint8_t *pKey) { GWEN_CRYPT_KEY *k; int rv; k=GWEN_Crypt_KeyBlowFish_fromData(GWEN_Crypt_CryptMode_Cbc, BLOWFISH_KEYSIZE, pKey, BLOWFISH_KEYSIZE); if (!k) { return GWEN_ERROR_DECRYPT; } rv=GWEN_Crypt_Key_Decipher(k, ptr, len, pOutData, pOutLen); GWEN_Crypt_Key_free(k); if (rv) return rv; return 0; } static int _decode(const uint8_t *p, uint32_t len, GWEN_BUFFER *dst, int iterations) { GWEN_BUFFER *tbuf1; GWEN_BUFFER *tbuf2; int i; int rv; uint8_t *pDest; uint32_t lDest; uint8_t key[BLOWFISH_KEYSIZE]; tbuf1=GWEN_Buffer_new(0, 256, 0, 1); tbuf2=GWEN_Buffer_new(0, 256, 0, 1); for (i=0; i>8) & 0xff); GWEN_Buffer_AppendByte(tbuf, slen & 0xff); /* add data itself */ GWEN_Buffer_AppendBytes(tbuf, (const char*) src, slen); /* add random bytes at the end (without length marker) */ rv=_addRandomBytes(tbuf, 0); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } /* padd using iso 9796_2 */ len=GWEN_Buffer_GetUsedBytes(tbuf); x=(len+7+12) & ~0x7; rv=GWEN_Padd_PaddWithIso9796_2(tbuf, x); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } /* actually encode the data into xbuf */ xbuf=GWEN_Buffer_new(0, GWEN_Buffer_GetUsedBytes(tbuf)+(cryptIterations*BLOWFISH_KEYSIZE), 0, 1); rv=_encode((const uint8_t*) GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf), xbuf, cryptIterations); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(xbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_free(tbuf); /* append salt (including length) to dst buffer */ len=sizeof(salt); GWEN_Buffer_AppendByte(dst, (len>>8) & 0xff); GWEN_Buffer_AppendByte(dst, len & 0xff); GWEN_Buffer_AppendBytes(dst, (const char*) salt, len); /* final round */ p=(const uint8_t*) GWEN_Buffer_GetStart(xbuf); len=GWEN_Buffer_GetUsedBytes(xbuf); GWEN_Buffer_AllocRoom(dst, len); pDest=(uint8_t*)GWEN_Buffer_GetPosPointer(dst); lDest=len; rv=_encodeData(p, len, pDest, &lDest, key); if (rv<0) { GWEN_Buffer_free(xbuf); return rv; } GWEN_Buffer_IncrementPos(dst, lDest); GWEN_Buffer_AdjustUsedBytes(dst); GWEN_Buffer_free(xbuf); return 0; } int GWEN_SmallTresor_Decrypt(const uint8_t *p, uint32_t len, const char *password, GWEN_BUFFER *dst, int passwordIterations, int cryptIterations) { GWEN_BUFFER *tbuf1; GWEN_BUFFER *tbuf2; int rv; uint8_t *pDest; uint32_t lDest; GWEN_MDIGEST *md; uint8_t key[BLOWFISH_KEYSIZE]; if (len<2) { DBG_ERROR(GWEN_LOGDOMAIN, "Invalid data length"); return GWEN_ERROR_INVALID; } /* first derive the key from the given password */ lDest=(p[0]<<8)+p[1]; if (lDest>len-2) { DBG_ERROR(GWEN_LOGDOMAIN, "Invalid salt length"); return GWEN_ERROR_BAD_DATA; } md=GWEN_MDigest_Sha256_new(); rv=GWEN_MDigest_PBKDF2(md, password, p+2, lDest, key, BLOWFISH_KEYSIZE, passwordIterations); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); return rv; } GWEN_MDigest_free(md); /* remove salt from input */ p+=2+lDest; len-=2+lDest; /* check size */ if (len<(BLOWFISH_KEYSIZE*cryptIterations)) { DBG_ERROR(GWEN_LOGDOMAIN, "Data too small"); return GWEN_ERROR_INVALID; } /* now decrypt first round */ tbuf1=GWEN_Buffer_new(0, len, 0, 1); GWEN_Buffer_AllocRoom(tbuf1, len); pDest=(uint8_t*)GWEN_Buffer_GetPosPointer(tbuf1); lDest=len; rv=_decodeData(p, len, pDest, &lDest, key); if (rv<0) { GWEN_Buffer_free(tbuf1); return rv; } GWEN_Buffer_IncrementPos(tbuf1, lDest); GWEN_Buffer_AdjustUsedBytes(tbuf1); /* decode the next rounds */ p=(const uint8_t*) GWEN_Buffer_GetStart(tbuf1); len=GWEN_Buffer_GetUsedBytes(tbuf1); tbuf2=GWEN_Buffer_new(0, len, 0, 1); rv=_decode(p, len, tbuf2, cryptIterations); if (rv<0) { GWEN_Buffer_free(tbuf2); GWEN_Buffer_free(tbuf1); return rv; } GWEN_Buffer_free(tbuf1); /* unpadd */ rv=GWEN_Padd_UnpaddWithIso9796_2(tbuf2); if (rv<0) { GWEN_Buffer_free(tbuf2); return rv; } /* extract data */ p=(const uint8_t*) GWEN_Buffer_GetStart(tbuf2); len=GWEN_Buffer_GetUsedBytes(tbuf2); /* skip random bytes at the beginning */ lDest=(p[0]<<8)+p[1]; if (lDest>len-2) { DBG_ERROR(GWEN_LOGDOMAIN, "Invalid random area length"); GWEN_Buffer_free(tbuf2); return GWEN_ERROR_BAD_DATA; } p+=2+lDest; len-=2+lDest; /* get size of data */ lDest=(p[0]<<8)+p[1]; if (lDest>len-2) { DBG_ERROR(GWEN_LOGDOMAIN, "Invalid data length"); GWEN_Buffer_free(tbuf2); return GWEN_ERROR_BAD_DATA; } p+=2; len-=2; GWEN_Buffer_AppendBytes(dst, (const char*) p, lDest); GWEN_Buffer_free(tbuf2); return 0; } gwenhywfar-4.15.2beta/src/crypt3/cryptkeysym.c0000644000175000017500000004654012530645242016337 00000000000000/*************************************************************************** begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "cryptkeysym_p.h" #include #include #include #include GWEN_INHERIT(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM) GWENHYWFAR_CB int GWEN_Crypt_KeySym_Encipher(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen) { GWEN_CRYPT_KEY_SYM *xk; gcry_error_t err; assert(k); xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k); assert(xk); err=gcry_cipher_encrypt(xk->algoHandle, pOutData, inLen, pInData, inLen); if (err) { DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_encrypt(): %s", gcry_strerror(err)); return GWEN_ERROR_GENERIC; } *pOutLen=inLen; return 0; } GWENHYWFAR_CB int GWEN_Crypt_KeySym_Decipher(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen) { GWEN_CRYPT_KEY_SYM *xk; gcry_error_t err; assert(k); xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k); assert(xk); err=gcry_cipher_decrypt(xk->algoHandle, pOutData, inLen, pInData, inLen); if (err) { DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_decrypt(): %s", gcry_strerror(err)); return GWEN_ERROR_GENERIC; } *pOutLen=inLen; return 0; } GWENHYWFAR_CB void GWEN_Crypt_KeySym_freeData(GWEN_UNUSED void *bp, void *p) { GWEN_CRYPT_KEY_SYM *xk; xk=(GWEN_CRYPT_KEY_SYM*) p; if (xk->keyData && xk->keyLen) { memset(xk->keyData, 0, xk->keyLen); free(xk->keyData); } xk->keyData=NULL; xk->keyLen=0; if (xk->algoValid) gcry_cipher_close(xk->algoHandle); GWEN_FREE_OBJECT(xk); } GWEN_CRYPT_KEY *GWEN_Crypt_KeySym_dup(const GWEN_CRYPT_KEY *k) { GWEN_CRYPT_KEY *nk; GWEN_CRYPT_KEY_SYM *xk; assert(k); xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k); assert(xk); nk=GWEN_Crypt_KeySym_fromData(GWEN_Crypt_Key_GetCryptAlgoId(k), GWEN_Crypt_Key_GetKeySize(k), xk->mode, xk->algo, GCRY_CIPHER_SECURE, xk->keyData, xk->keyLen); return nk; } enum gcry_cipher_modes GWEN_Crypt_KeySym__MyMode2GMode(GWEN_CRYPT_CRYPTMODE mode) { switch(mode) { case GWEN_Crypt_CryptMode_Unknown: return GCRY_CIPHER_MODE_NONE; case GWEN_Crypt_CryptMode_None: return GCRY_CIPHER_MODE_NONE; case GWEN_Crypt_CryptMode_Ecb: return GCRY_CIPHER_MODE_ECB; case GWEN_Crypt_CryptMode_Cfb: return GCRY_CIPHER_MODE_CFB; case GWEN_Crypt_CryptMode_Cbc: return GCRY_CIPHER_MODE_CBC; } return GCRY_CIPHER_MODE_NONE; } GWEN_CRYPT_KEY *GWEN_Crypt_KeySym_Generate(GWEN_CRYPT_CRYPTALGOID cryptAlgoId, int keySize, GWEN_CRYPT_CRYPTMODE mode, int algo, unsigned int flags, int quality) { GWEN_CRYPT_KEY *k; GWEN_CRYPT_KEY_SYM *xk; int kbytes; uint8_t *keyData; gcry_error_t err; enum gcry_random_level q; k=GWEN_Crypt_Key_new(cryptAlgoId, keySize); assert(k); GWEN_NEW_OBJECT(GWEN_CRYPT_KEY_SYM, xk); GWEN_INHERIT_SETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k, xk, GWEN_Crypt_KeySym_freeData); GWEN_Crypt_Key_SetEncipherFn(k, GWEN_Crypt_KeySym_Encipher); GWEN_Crypt_Key_SetDecipherFn(k, GWEN_Crypt_KeySym_Decipher); switch(quality) { case 0: q=GCRY_WEAK_RANDOM; break; case 1: q=GCRY_STRONG_RANDOM; break; case 2: default: q=GCRY_VERY_STRONG_RANDOM; break; } /* open algo */ err=gcry_cipher_open(&xk->algoHandle, algo, GWEN_Crypt_KeySym__MyMode2GMode(mode), flags); if (err) { DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_open(): %s", gcry_strerror(err)); GWEN_Crypt_Key_free(k); return NULL; } xk->algoValid=1; xk->mode=mode; while(1) { kbytes=keySize; keyData=gcry_random_bytes(kbytes, q); /* store key data */ xk->keyData=keyData; xk->keyLen=kbytes; /* set key in algo */ err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen); if (err) { if ((err & GPG_ERR_CODE_MASK)==GPG_ERR_WEAK_KEY) { DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_setkey(): weak key, will try again"); } else { DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_setkey(): %d [%s]", err, gcry_strerror(err)); GWEN_Crypt_Key_free(k); return NULL; } } else break; /* try it again */ memset(xk->keyData, 0, xk->keyLen); free(xk->keyData); xk->keyData=NULL; xk->keyLen=0; } return k; } GWEN_CRYPT_KEY *GWEN_Crypt_KeySym_fromData(GWEN_CRYPT_CRYPTALGOID cryptAlgoId, int keySize, GWEN_CRYPT_CRYPTMODE mode, int algo, unsigned int flags, const uint8_t *kd, uint32_t kl) { GWEN_CRYPT_KEY *k; GWEN_CRYPT_KEY_SYM *xk; gcry_error_t err; #if 0 if (kl!=gcry_cipher_get_algo_keylen(algo)) { DBG_ERROR(GWEN_LOGDOMAIN, "Invalid key length (is %d, should be %d)", (int)kl, (int)gcry_cipher_get_algo_keylen(algo)); return NULL; } #endif k=GWEN_Crypt_Key_new(cryptAlgoId, keySize); assert(k); GWEN_NEW_OBJECT(GWEN_CRYPT_KEY_SYM, xk); GWEN_INHERIT_SETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k, xk, GWEN_Crypt_KeySym_freeData); GWEN_Crypt_Key_SetEncipherFn(k, GWEN_Crypt_KeySym_Encipher); GWEN_Crypt_Key_SetDecipherFn(k, GWEN_Crypt_KeySym_Decipher); /* open algo */ err=gcry_cipher_open(&xk->algoHandle, algo, GWEN_Crypt_KeySym__MyMode2GMode(mode), flags); if (err) { DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_open(): %s", gcry_strerror(err)); GWEN_Crypt_Key_free(k); return NULL; } xk->algoValid=1; xk->mode=mode; xk->algo=algo; /* read key data */ if (kd==NULL || kl==0) { DBG_INFO(GWEN_LOGDOMAIN, "No key data"); GWEN_Crypt_Key_free(k); return NULL; } /* store key data */ xk->keyData=(uint8_t*) malloc(kl); assert(xk->keyData); memmove(xk->keyData, kd, kl); xk->keyLen=kl; /* set key in algo */ err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen); if (err) { DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_setkey(): %s", gcry_strerror(err)); GWEN_Crypt_Key_free(k); return NULL; } return k; } GWEN_CRYPT_KEY *GWEN_Crypt_KeySym__fromDb(GWEN_CRYPT_CRYPTALGOID cryptAlgoId, GWEN_CRYPT_CRYPTMODE mode, int algo, unsigned int flags, const char *gname, GWEN_DB_NODE *db) { gcry_error_t err; GWEN_CRYPT_KEY *k; GWEN_CRYPT_KEY_SYM *xk; //unsigned int nbits; GWEN_DB_NODE *dbR; unsigned int len; const char *p; dbR=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, gname); if (dbR==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "DB does not contain an %s key (no %s group)", gname, gname); return NULL; } k=GWEN_Crypt_Key_fromDb(db); if (k==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return NULL; } if (GWEN_Crypt_Key_GetCryptAlgoId(k)!=cryptAlgoId) { DBG_ERROR(GWEN_LOGDOMAIN, "DB does not contain an RSA key"); GWEN_Crypt_Key_free(k); return NULL; } //nbits=GWEN_Crypt_Key_GetKeySize(k)*8; /* extend key */ GWEN_NEW_OBJECT(GWEN_CRYPT_KEY_SYM, xk); GWEN_INHERIT_SETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k, xk, GWEN_Crypt_KeySym_freeData); GWEN_Crypt_Key_SetEncipherFn(k, GWEN_Crypt_KeySym_Encipher); GWEN_Crypt_Key_SetDecipherFn(k, GWEN_Crypt_KeySym_Decipher); /* open algo */ err=gcry_cipher_open(&xk->algoHandle, algo, GWEN_Crypt_KeySym__MyMode2GMode(mode), flags); if (err) { DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_open(): %s", gcry_strerror(err)); GWEN_Crypt_Key_free(k); return NULL; } xk->algoValid=1; xk->mode=mode; xk->algo=algo; /* read key data */ p=GWEN_DB_GetBinValue(dbR, "keyData", 0, NULL, 0, &len); if (p==NULL || len==0) { DBG_INFO(GWEN_LOGDOMAIN, "No key data"); GWEN_Crypt_Key_free(k); return NULL; } /* store key data */ xk->keyData=(uint8_t*) malloc(len); assert(xk->keyData); memmove(xk->keyData, p, len); xk->keyLen=len; /* set key in algo */ err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen); if (err) { DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_setkey(): %s", gcry_strerror(err)); GWEN_Crypt_Key_free(k); return NULL; } return k; } int GWEN_Crypt_KeySym__toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db, const char *gname) { GWEN_CRYPT_KEY_SYM *xk; GWEN_DB_NODE *dbR; int rv; assert(k); xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k); assert(xk); /* let key module wirte basic key info */ rv=GWEN_Crypt_Key_toDb(k, db); if (rv) return rv; /* write sym stuff into our own group */ dbR=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, gname); assert(dbR); GWEN_DB_SetBinValue(dbR, GWEN_DB_FLAGS_OVERWRITE_VARS, "keyData", xk->keyData, xk->keyLen); return 0; } GWEN_CRYPT_KEY *GWEN_Crypt_KeySym_fromDb(GWEN_CRYPT_CRYPTMODE mode, GWEN_DB_NODE *db) { gcry_error_t err; GWEN_CRYPT_KEY *k; GWEN_CRYPT_KEY_SYM *xk; //unsigned int nbits; GWEN_DB_NODE *dbR; unsigned int len; const char *gname; const char *p; k=GWEN_Crypt_Key_fromDb(db); if (k==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return NULL; } gname=GWEN_Crypt_CryptAlgoId_toString(GWEN_Crypt_Key_GetCryptAlgoId(k)); dbR=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, gname); if (dbR==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "DB does not contain an %s key (no %s group)", gname, gname); GWEN_Crypt_Key_free(k); return NULL; } //nbits=GWEN_Crypt_Key_GetKeySize(k)*8; /* extend key */ GWEN_NEW_OBJECT(GWEN_CRYPT_KEY_SYM, xk); GWEN_INHERIT_SETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k, xk, GWEN_Crypt_KeySym_freeData); GWEN_Crypt_Key_SetEncipherFn(k, GWEN_Crypt_KeySym_Encipher); GWEN_Crypt_Key_SetDecipherFn(k, GWEN_Crypt_KeySym_Decipher); /* open algo */ err=gcry_cipher_open(&xk->algoHandle, GWEN_Crypt_Key_GetCryptAlgoId(k), GWEN_Crypt_KeySym__MyMode2GMode(mode), GCRY_CIPHER_SECURE); if (err) { DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_open(): %s", gcry_strerror(err)); GWEN_Crypt_Key_free(k); return NULL; } xk->algoValid=1; xk->mode=mode; xk->algo=GWEN_Crypt_Key_GetCryptAlgoId(k); /* read key data */ p=GWEN_DB_GetBinValue(dbR, "keyData", 0, NULL, 0, &len); if (p==NULL || len==0) { DBG_INFO(GWEN_LOGDOMAIN, "No key data"); GWEN_Crypt_Key_free(k); return NULL; } /* store key data */ xk->keyData=(uint8_t*) malloc(len); assert(xk->keyData); memmove(xk->keyData, p, len); xk->keyLen=len; /* set key in algo */ err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen); if (err) { DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_setkey(): %s", gcry_strerror(err)); GWEN_Crypt_Key_free(k); return NULL; } return k; } int GWEN_Crypt_KeySym_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db) { GWEN_CRYPT_KEY_SYM *xk; GWEN_DB_NODE *dbR; int rv; const char *gname; assert(k); xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k); assert(xk); /* let key module wirte basic key info */ rv=GWEN_Crypt_Key_toDb(k, db); if (rv) return rv; gname=GWEN_Crypt_CryptAlgoId_toString(GWEN_Crypt_Key_GetCryptAlgoId(k)); /* write sym stuff into our own group */ dbR=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, gname); assert(dbR); GWEN_DB_SetBinValue(dbR, GWEN_DB_FLAGS_OVERWRITE_VARS, "keyData", xk->keyData, xk->keyLen); return 0; } int GWEN_Crypt_KeySym_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl) { GWEN_CRYPT_KEY_SYM *xk; gcry_error_t err; if (!kd || !kl) { DBG_ERROR(GWEN_LOGDOMAIN, "Empty keydata not allowed"); return GWEN_ERROR_INVALID; } assert(k); xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k); assert(xk); if (xk->keyData && xk->keyLen) { memset(xk->keyData, 0, xk->keyLen); free(xk->keyData); } /* store key data */ xk->keyData=(uint8_t*)malloc(kl); assert(xk->keyData); memmove(xk->keyData, kd, kl); xk->keyLen=kl; /* set key in algo */ err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen); if (err) { DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_setkey(): %s", gcry_strerror(err)); GWEN_Crypt_Key_free(k); return GWEN_ERROR_GENERIC; } return 0; } uint8_t *GWEN_Crypt_KeySym_GetKeyDataPtr(const GWEN_CRYPT_KEY *k) { GWEN_CRYPT_KEY_SYM *xk; assert(k); xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k); assert(xk); return xk->keyData; } uint32_t GWEN_Crypt_KeySym_GetKeyDataLen(const GWEN_CRYPT_KEY *k) { GWEN_CRYPT_KEY_SYM *xk; assert(k); xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k); assert(xk); return xk->keyLen; } GWEN_CRYPT_KEY *GWEN_Crypt_KeyDes3K_Generate(GWEN_CRYPT_CRYPTMODE mode, int keySize, int quality) { uint8_t kd[16]; GWEN_CRYPT_KEY *k; GWEN_Crypt_Random(quality, kd, 16); k=GWEN_Crypt_KeyDes3K_fromData(mode, keySize, kd, 16); memset(kd, 0, 16); return k; } GWEN_CRYPT_KEY *GWEN_Crypt_KeyDes3K_fromData(GWEN_CRYPT_CRYPTMODE mode, int keySize, const uint8_t *kd, uint32_t kl) { if (kl==16) { uint8_t new_kd[24]; GWEN_CRYPT_KEY *k; /* 3key DES with only two keys, copy key1 as key3 */ memmove(new_kd, kd, 16); memmove(new_kd+16, new_kd, 8); k=GWEN_Crypt_KeySym_fromData(GWEN_Crypt_CryptAlgoId_Des3K, 24, mode, GCRY_CIPHER_3DES, GCRY_CIPHER_SECURE, new_kd, 24); memset(new_kd, 0, 24); return k; } else return GWEN_Crypt_KeySym_fromData(GWEN_Crypt_CryptAlgoId_Des3K, keySize, mode, GCRY_CIPHER_3DES, GCRY_CIPHER_SECURE, kd, kl); } GWEN_CRYPT_KEY *GWEN_Crypt_KeyDes3K_fromDb(GWEN_CRYPT_CRYPTMODE mode, GWEN_DB_NODE *db) { return GWEN_Crypt_KeySym__fromDb(GWEN_Crypt_CryptAlgoId_Des3K, mode, GCRY_CIPHER_3DES, GCRY_CIPHER_SECURE, "des3k", db); } int GWEN_Crypt_KeyDes3K_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db) { return GWEN_Crypt_KeySym__toDb(k, db, "des3k"); } int GWEN_Crypt_KeyDes3K_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl) { if (kl==16) { uint8_t new_kd[24]; int rv; /* 3key DES with only two keys, copy key1 as key3 */ memmove(new_kd, kd, 16); memmove(new_kd+16, new_kd, 8); rv=GWEN_Crypt_KeySym_SetKeyData(k, new_kd, 24); memset(new_kd, 0, 24); return rv; } else return GWEN_Crypt_KeySym_SetKeyData(k, kd, kl); } uint8_t *GWEN_Crypt_KeyDes3K_GetKeyDataPtr(const GWEN_CRYPT_KEY *k) { return GWEN_Crypt_KeySym_GetKeyDataPtr(k); } uint32_t GWEN_Crypt_KeyDes3K_GetKeyDataLen(const GWEN_CRYPT_KEY *k) { return GWEN_Crypt_KeySym_GetKeyDataLen(k); } int GWEN_Crypt_KeyDes3K_SetIV(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl) { GWEN_CRYPT_KEY_SYM *xk; gcry_error_t err; assert(k); xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k); assert(xk); if (kd==NULL || kl==0) { const uint8_t iv[]= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; err=gcry_cipher_setiv(xk->algoHandle, iv, sizeof(iv)); } else err=gcry_cipher_setiv(xk->algoHandle, kd, kl); if (err) { DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_setiv(): %s", gcry_strerror(err)); return GWEN_ERROR_GENERIC; } return 0; } GWEN_CRYPT_KEY *GWEN_Crypt_KeyBlowFish_Generate(GWEN_CRYPT_CRYPTMODE mode, int keySize, int quality) { return GWEN_Crypt_KeySym_Generate(GWEN_Crypt_CryptAlgoId_BlowFish, keySize, mode, GCRY_CIPHER_BLOWFISH, GCRY_CIPHER_SECURE, quality); } GWEN_CRYPT_KEY *GWEN_Crypt_KeyBlowFish_fromData(GWEN_CRYPT_CRYPTMODE mode, int keySize, const uint8_t *kd, uint32_t kl) { return GWEN_Crypt_KeySym_fromData(GWEN_Crypt_CryptAlgoId_BlowFish, keySize, mode, GCRY_CIPHER_BLOWFISH, GCRY_CIPHER_SECURE, kd, kl); } GWEN_CRYPT_KEY *GWEN_Crypt_KeyBlowFish_fromDb(GWEN_CRYPT_CRYPTMODE mode, GWEN_DB_NODE *db) { return GWEN_Crypt_KeySym__fromDb(GWEN_Crypt_CryptAlgoId_BlowFish, mode, GCRY_CIPHER_BLOWFISH, GCRY_CIPHER_SECURE, "blowFish", db); } int GWEN_Crypt_KeyBlowFish_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db) { return GWEN_Crypt_KeySym__toDb(k, db, "blowFish"); } int GWEN_Crypt_KeyBlowFish_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl) { return GWEN_Crypt_KeySym_SetKeyData(k, kd, kl); } uint8_t *GWEN_Crypt_KeyBlowFish_GetKeyDataPtr(const GWEN_CRYPT_KEY *k) { return GWEN_Crypt_KeySym_GetKeyDataPtr(k); } uint32_t GWEN_Crypt_KeyBlowFish_GetKeyDataLen(const GWEN_CRYPT_KEY *k) { return GWEN_Crypt_KeySym_GetKeyDataLen(k); } GWEN_CRYPT_KEY *GWEN_Crypt_KeyAes128_Generate(GWEN_CRYPT_CRYPTMODE mode, int keySize, int quality) { return GWEN_Crypt_KeySym_Generate(GWEN_Crypt_CryptAlgoId_Aes128, keySize, mode, GCRY_CIPHER_AES128, GCRY_CIPHER_SECURE, quality); } GWEN_CRYPT_KEY *GWEN_Crypt_KeyAes128_fromData(GWEN_CRYPT_CRYPTMODE mode, int keySize, const uint8_t *kd, uint32_t kl) { return GWEN_Crypt_KeySym_fromData(GWEN_Crypt_CryptAlgoId_Aes128, keySize, mode, GCRY_CIPHER_AES128, GCRY_CIPHER_SECURE, kd, kl); } GWEN_CRYPT_KEY *GWEN_Crypt_KeyAes128_fromDb(GWEN_CRYPT_CRYPTMODE mode, GWEN_DB_NODE *db) { return GWEN_Crypt_KeySym__fromDb(GWEN_Crypt_CryptAlgoId_Aes128, mode, GCRY_CIPHER_AES128, GCRY_CIPHER_SECURE, "aes128", db); } int GWEN_Crypt_KeyAes128_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db) { return GWEN_Crypt_KeySym__toDb(k, db, "aes128"); } int GWEN_Crypt_KeyAes128_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl) { return GWEN_Crypt_KeySym_SetKeyData(k, kd, kl); } uint8_t *GWEN_Crypt_KeyAes128_GetKeyDataPtr(const GWEN_CRYPT_KEY *k) { return GWEN_Crypt_KeySym_GetKeyDataPtr(k); } uint32_t GWEN_Crypt_KeyAes128_GetKeyDataLen(const GWEN_CRYPT_KEY *k) { return GWEN_Crypt_KeySym_GetKeyDataLen(k); } int GWEN_Crypt_KeyAes128_SetIV(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl) { GWEN_CRYPT_KEY_SYM *xk; gcry_error_t err; assert(k); xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k); assert(xk); if (kd==NULL || kl==0) { const uint8_t iv[]= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; err=gcry_cipher_setiv(xk->algoHandle, iv, sizeof(iv)); } else err=gcry_cipher_setiv(xk->algoHandle, kd, kl); if (err) { DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_setiv(): %s", gcry_strerror(err)); return GWEN_ERROR_GENERIC; } return 0; } gwenhywfar-4.15.2beta/src/crypt3/cryptalgo_p.h0000644000175000017500000000153712364015347016263 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: crypttoken.h 1113 2007-01-10 09:14:16Z martin $ begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPT_CRYPTALGO_P_H #define GWEN_CRYPT_CRYPTALGO_P_H #include "cryptalgo.h" struct GWEN_CRYPT_CRYPTALGO { GWEN_CRYPT_CRYPTALGOID id; GWEN_CRYPT_CRYPTMODE mode; uint8_t *pInitVector; uint32_t lInitVector; int chunkSize; int keySizeInBits; uint32_t refCount; }; #endif gwenhywfar-4.15.2beta/src/crypt3/cryptkeyrsa_p.h0000644000175000017500000000361112416477066016642 00000000000000/*************************************************************************** begin : Mon May 07 2012 copyright : (C) 2012 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPT_KEY_RSA_P_H #define GWEN_CRYPT_KEY_RSA_P_H #include "cryptkeyrsa.h" #include "cryptkey_be.h" #include typedef struct GWEN_CRYPT_KEY_RSA GWEN_CRYPT_KEY_RSA; struct GWEN_CRYPT_KEY_RSA { int pub; gcry_mpi_t modulus; gcry_mpi_t pubExponent; gcry_mpi_t privExponent; uint32_t flags; }; static GWENHYWFAR_CB void GWEN_Crypt_KeyRsa_freeData(void *bp, void *p); static int GWEN_Crypt_KeyRsa__getNamedElement(gcry_sexp_t pkey, const char *name, gcry_mpi_t *pMpi); static int GWEN_Crypt_KeyRsa__ReadMpi(GWEN_DB_NODE *db, const char *dbName, gcry_mpi_t *pMpi); static int GWEN_Crypt_KeyRsa__WriteMpi(GWEN_DB_NODE *db, const char *dbName, const gcry_mpi_t mpi); static int GWEN_Crypt_KeyRsa__MpiToBuffer(const gcry_mpi_t mpi, unsigned char *buf, size_t nbytes); static GWENHYWFAR_CB int GWEN_Crypt_KeyRsa_Sign(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, uint8_t *pSignatureData, uint32_t *pSignatureLen); static GWENHYWFAR_CB int GWEN_Crypt_KeyRsa_Verify(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, const uint8_t *pSignatureData, uint32_t signatureLen); static GWENHYWFAR_CB int GWEN_Crypt_KeyRsa_Encipher(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen); static GWENHYWFAR_CB int GWEN_Crypt_KeyRsa_Decipher(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen); #endif gwenhywfar-4.15.2beta/src/crypt3/hashalgo.h0000644000175000017500000000455412416477066015540 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: crypttoken.h 1113 2007-01-10 09:14:16Z martin $ begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPT_HASHALGO_H #define GWEN_CRYPT_HASHALGO_H #include typedef struct GWEN_CRYPT_HASHALGO GWEN_CRYPT_HASHALGO; #ifdef __cplusplus extern "C" { #endif GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_CRYPT_HASHALGO, GWEN_Crypt_HashAlgo, GWENHYWFAR_API) #ifdef __cplusplus } #endif typedef enum { GWEN_Crypt_HashAlgoId_Unknown=-1, GWEN_Crypt_HashAlgoId_None=0, GWEN_Crypt_HashAlgoId_Any, /** SHA-1 */ GWEN_Crypt_HashAlgoId_Sha1, /** Ripemd 160 */ GWEN_Crypt_HashAlgoId_Rmd160, /** MD-5 */ GWEN_Crypt_HashAlgoId_Md5, GWEN_Crypt_HashAlgoId_Sha256, } GWEN_CRYPT_HASHALGOID; #include #ifdef __cplusplus extern "C" { #endif GWENHYWFAR_API GWEN_CRYPT_HASHALGOID GWEN_Crypt_HashAlgoId_fromString(const char *s); GWENHYWFAR_API const char *GWEN_Crypt_HashAlgoId_toString(GWEN_CRYPT_HASHALGOID a); GWENHYWFAR_API GWEN_CRYPT_HASHALGO *GWEN_Crypt_HashAlgo_new(GWEN_CRYPT_HASHALGOID id); GWENHYWFAR_API GWEN_CRYPT_HASHALGO *GWEN_Crypt_HashAlgo_dup(const GWEN_CRYPT_HASHALGO *a); GWENHYWFAR_API GWEN_CRYPT_HASHALGO *GWEN_Crypt_HashAlgo_fromDb(GWEN_DB_NODE *db); GWENHYWFAR_API int GWEN_Crypt_HashAlgo_toDb(const GWEN_CRYPT_HASHALGO *a, GWEN_DB_NODE *db); GWENHYWFAR_API void GWEN_Crypt_HashAlgo_Attach(GWEN_CRYPT_HASHALGO *a); GWENHYWFAR_API void GWEN_Crypt_HashAlgo_free(GWEN_CRYPT_HASHALGO *a); GWENHYWFAR_API GWEN_CRYPT_HASHALGOID GWEN_Crypt_HashAlgo_GetId(const GWEN_CRYPT_HASHALGO *a); GWENHYWFAR_API uint8_t *GWEN_Crypt_HashAlgo_GetInitVectorPtr(const GWEN_CRYPT_HASHALGO *a); GWENHYWFAR_API uint32_t GWEN_Crypt_HashAlgo_GetInitVectorLen(const GWEN_CRYPT_HASHALGO *a); GWENHYWFAR_API int GWEN_Crypt_HashAlgo_SetInitVector(GWEN_CRYPT_HASHALGO *a, const uint8_t *pv, uint32_t lv); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/crypt3/mdigest_be.h0000644000175000017500000000320512416477066016044 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: crypttoken.h 1113 2007-01-10 09:14:16Z martin $ begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWENHYWFAR_MDIGEST_BE_H #define GWENHYWFAR_MDIGEST_BE_H #include #include GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_MDIGEST, GWENHYWFAR_API) typedef int (*GWEN_MDIGEST_BEGIN_FN)(GWEN_MDIGEST *md); typedef int (*GWEN_MDIGEST_END_FN)(GWEN_MDIGEST *md); typedef int (*GWEN_MDIGEST_UPDATE_FN)(GWEN_MDIGEST *md, const uint8_t *buf, unsigned int l); GWENHYWFAR_API GWEN_MDIGEST *GWEN_MDigest_new(GWEN_CRYPT_HASHALGOID a); GWENHYWFAR_API GWEN_MDIGEST_BEGIN_FN GWEN_MDigest_SetBeginFn(GWEN_MDIGEST *md, GWEN_MDIGEST_BEGIN_FN f); GWENHYWFAR_API GWEN_MDIGEST_END_FN GWEN_MDigest_SetEndFn(GWEN_MDIGEST *md, GWEN_MDIGEST_END_FN f); GWENHYWFAR_API GWEN_MDIGEST_UPDATE_FN GWEN_MDigest_SetUpdateFn(GWEN_MDIGEST *md, GWEN_MDIGEST_UPDATE_FN f); /** * This function takes over the given buffer */ GWENHYWFAR_API void GWEN_MDigest_SetDigestBuffer(GWEN_MDIGEST *md, uint8_t *buf, unsigned int l); GWENHYWFAR_API void GWEN_MDigest_SetDigestLen(GWEN_MDIGEST *md, unsigned int l); #endif gwenhywfar-4.15.2beta/src/crypt3/hashalgo_p.h0000644000175000017500000000142712364015347016043 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: crypttoken.h 1113 2007-01-10 09:14:16Z martin $ begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPT_HASHALGO_P_H #define GWEN_CRYPT_HASHALGO_P_H #include "hashalgo.h" struct GWEN_CRYPT_HASHALGO { GWEN_CRYPT_HASHALGOID id; uint8_t *pInitVector; uint32_t lInitVector; uint32_t refCount; }; #endif gwenhywfar-4.15.2beta/src/crypt3/cryptdefs.c0000644000175000017500000003040012416477066015735 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: crypttoken.h 1113 2007-01-10 09:14:16Z martin $ begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "cryptdefs_p.h" #include #include #include #include GWEN_CRYPT_PINTYPE GWEN_Crypt_PinType_fromString(const char *s) { assert(s); if (strcasecmp(s, "none")==0) return GWEN_Crypt_PinType_None; else if (strcasecmp(s, "access")==0) return GWEN_Crypt_PinType_Access; else if (strcasecmp(s, "manage")==0) return GWEN_Crypt_PinType_Manage; return GWEN_Crypt_PinType_Unknown; } const char *GWEN_Crypt_PinType_toString(GWEN_CRYPT_PINTYPE pt) { switch(pt) { case GWEN_Crypt_PinType_None: return "none"; case GWEN_Crypt_PinType_Access: return "access"; case GWEN_Crypt_PinType_Manage: return "manage"; default: return "unknown"; } } GWEN_CRYPT_PINENCODING GWEN_Crypt_PinEncoding_fromString(const char *s) { assert(s); if (strcasecmp(s, "none")==0) return GWEN_Crypt_PinEncoding_None; else if (strcasecmp(s, "bin")==0) return GWEN_Crypt_PinEncoding_Bin; else if (strcasecmp(s, "bcd")==0) return GWEN_Crypt_PinEncoding_Bcd; else if (strcasecmp(s, "ascii")==0) return GWEN_Crypt_PinEncoding_Ascii; else if (strcasecmp(s, "fpin2")==0) return GWEN_Crypt_PinEncoding_FPin2; return GWEN_Crypt_PinEncoding_Unknown; } const char *GWEN_Crypt_PinEncoding_toString(GWEN_CRYPT_PINENCODING pe) { switch(pe) { case GWEN_Crypt_PinEncoding_None: return "none"; case GWEN_Crypt_PinEncoding_Bin: return "bin"; case GWEN_Crypt_PinEncoding_Bcd: return "bcd"; case GWEN_Crypt_PinEncoding_Ascii: return "ascii"; case GWEN_Crypt_PinEncoding_FPin2: return "fpin2"; default: return "unknown"; } } int GWEN_Crypt__TransformFromBCD(unsigned char *buffer, unsigned int bufLength, unsigned int *pinLength) { unsigned char *newBuf; unsigned char *p; unsigned int newSize; unsigned int i; unsigned int cnt=0; if (*pinLength==0) return 0; newSize=*pinLength*2; newBuf=(unsigned char*)malloc(newSize); p=newBuf; for (i=0; i<*pinLength; i++) { unsigned char c1; unsigned char c2; c1=buffer[i]; /* 1st digit */ c2=(c1 & 0xf0)>>4; if (c2==0x0f) break; *(p++)=c2+'0'; cnt++; /* 2nd digit */ c2=(c1 & 0x0f); if (c2==0x0f) break; *(p++)=c2+'0'; cnt++; } if (cnt>bufLength) { DBG_ERROR(GWEN_LOGDOMAIN, "Converted pin is too long (%d>%d)", cnt, bufLength); free(newBuf); return GWEN_ERROR_BUFFER_OVERFLOW; } memset(buffer, 0, bufLength); memmove(buffer, newBuf, cnt); *pinLength=cnt; free(newBuf); return 0; } int GWEN_Crypt__TransformFromFPIN2(unsigned char *buffer, unsigned int bufLength, unsigned int *pinLength) { unsigned char *newBuf; unsigned char *p; unsigned int newSize; unsigned int i; unsigned int cnt=0; unsigned int len; if (*pinLength<8) { DBG_ERROR(GWEN_LOGDOMAIN, "Pin too small to be a FPIN2 (%d<8)", *pinLength); return GWEN_ERROR_INVALID; } len=(buffer[0] & 0x0f); newSize=len*2; newBuf=(unsigned char*)malloc(newSize); p=newBuf; for (i=1; i<8; i++) { unsigned char c1; unsigned char c2; if (cnt>=len) break; c1=buffer[i]; /* 1st digit */ c2=(c1 & 0xf0)>>4; if (c2==0x0f) break; *(p++)=c2+'0'; cnt++; if (cnt>=len) break; /* 2nd digit */ c2=(c1 & 0x0f); if (c2==0x0f) break; *(p++)=c2+'0'; cnt++; } if (cnt>bufLength) { DBG_ERROR(GWEN_LOGDOMAIN, "Converted pin is too long (%d>%d)", cnt, bufLength); free(newBuf); return GWEN_ERROR_BUFFER_OVERFLOW; } memset(buffer, 0, bufLength); memmove(buffer, newBuf, cnt); *pinLength=cnt; return 0; } int GWEN_Crypt__TransformFromBin(unsigned char *buffer, unsigned int bufLength, unsigned int *pinLength) { unsigned int i; unsigned char *newBuf; unsigned char *p; unsigned int newSize; if (*pinLength==0) return 0; newSize=*pinLength; newBuf=(unsigned char*)malloc(newSize); p=newBuf; for (i=0; i<*pinLength; i++) { unsigned char c; c=buffer[i]; if (c>9) { DBG_ERROR(GWEN_LOGDOMAIN, "Invalid element in pin (a digit > 9)"); free(newBuf); return GWEN_ERROR_INVALID; } *p=c+'0'; } memset(buffer, 0, bufLength); memmove(buffer, newBuf, *pinLength); free(newBuf); return 0; } int GWEN_Crypt__TransformToBCD(unsigned char *buffer, unsigned int bufLength, unsigned int *pinLength) { unsigned char *newBuf; unsigned char *p; unsigned int newSize; unsigned int i; unsigned int cnt=0; newSize=*pinLength/2+1; newBuf=(unsigned char*)malloc(newSize); memset(newBuf, 0xff, newSize); p=newBuf; i=0; while (i<*pinLength) { unsigned char c1; unsigned char c2; /* 1st digit */ c1=buffer[i]; if (c1<'0' || c1>'9') { DBG_ERROR(GWEN_LOGDOMAIN, "Invalid element in pin (a non-number character)"); free(newBuf); return GWEN_ERROR_INVALID; } c1-='0'; c1=c1<<4; *p=c1+0x0f; /* don't incement yet */ cnt++; /* only increment once !! */ i++; if (i>=*pinLength) break; /* 2nd digit */ c2=buffer[i]; if (c2<'0' || c2>'9') { DBG_ERROR(GWEN_LOGDOMAIN, "Invalid element in pin (a non-number character)"); free(newBuf); return GWEN_ERROR_INVALID; } c2-='0'; c1|=(c2 & 0x0f); *(p++)=c1; i++; } if (cnt>bufLength) { DBG_ERROR(GWEN_LOGDOMAIN, "Converted pin is too long (%d>%d)", cnt, bufLength); free(newBuf); return GWEN_ERROR_BUFFER_OVERFLOW; } memset(buffer, 0, bufLength); for (i=0; i14) { DBG_ERROR(GWEN_LOGDOMAIN, "Pin too long for FPIN2 (%d>14)", *pinLength); return GWEN_ERROR_INVALID; } if (8>bufLength) { DBG_ERROR(GWEN_LOGDOMAIN, "Converted pin is too long (8>%d)", bufLength); return GWEN_ERROR_BUFFER_OVERFLOW; } newSize=8; newBuf=(unsigned char*)malloc(newSize); memset(newBuf, 0xff, newSize); p=newBuf; *(p++)=0x20+*pinLength; i=0; while (i<*pinLength) { unsigned char c1; unsigned char c2; /* 1st digit */ c1=buffer[i]; if (c1<'0' || c1>'9') { DBG_ERROR(GWEN_LOGDOMAIN, "Invalid element in pin (a non-number character)"); free(newBuf); return GWEN_ERROR_INVALID; } c1-='0'; c1=c1<<4; *p=c1+0x0f; /* don't incement yet */ i++; if (i>=*pinLength) break; /* 2nd digit */ c2=buffer[i]; if (c2<'0' || c2>'9') { DBG_ERROR(GWEN_LOGDOMAIN, "Invalid element in pin (a non-number character)"); free(newBuf); return GWEN_ERROR_INVALID; } c2-='0'; c1|=(c2 & 0x0f); *(p++)=c1; i++; } memset(buffer, 0, bufLength); for (i=0; i<8; i++) buffer[i]=newBuf[i]; *pinLength=8; free(newBuf); return 0; } int GWEN_Crypt__TransformToBin(unsigned char *buffer, unsigned int bufLength, unsigned int *pinLength) { unsigned int i; unsigned char *newBuf; unsigned char *p; unsigned int newSize; if (*pinLength==0) return 0; newSize=*pinLength; newBuf=(unsigned char*)malloc(newSize); p=newBuf; for (i=0; i<*pinLength; i++) { unsigned char c; c=buffer[i]; if (c<'0' || c>'9') { DBG_ERROR(GWEN_LOGDOMAIN, "Invalid element in pin (a non-number character)"); free(newBuf); return GWEN_ERROR_INVALID; } *(p++)=c-'0'; } memset(buffer, 0, bufLength); memmove(buffer, newBuf, *pinLength); free(newBuf); return 0; } int GWEN_Crypt_TransformPin(GWEN_CRYPT_PINENCODING peSrc, GWEN_CRYPT_PINENCODING peDst, unsigned char *buffer, unsigned int bufLength, unsigned int *pinLength) { int rv; if (peSrc==peDst) return 0; switch(peSrc) { case GWEN_Crypt_PinEncoding_Bin: rv=GWEN_Crypt__TransformFromBin(buffer, bufLength, pinLength); break; case GWEN_Crypt_PinEncoding_Bcd: rv=GWEN_Crypt__TransformFromBCD(buffer, bufLength, pinLength); break; case GWEN_Crypt_PinEncoding_Ascii: rv=0; break; case GWEN_Crypt_PinEncoding_FPin2: rv=GWEN_Crypt__TransformFromFPIN2(buffer, bufLength, pinLength); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Unhandled source encoding \"%s\"", GWEN_Crypt_PinEncoding_toString(peSrc)); return GWEN_ERROR_INVALID; } if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } switch(peDst) { case GWEN_Crypt_PinEncoding_Bin: rv=GWEN_Crypt__TransformToBin(buffer, bufLength, pinLength); break; case GWEN_Crypt_PinEncoding_Bcd: rv=GWEN_Crypt__TransformToBCD(buffer, bufLength, pinLength); break; case GWEN_Crypt_PinEncoding_Ascii: rv=0; break; case GWEN_Crypt_PinEncoding_FPin2: rv=GWEN_Crypt__TransformToFPIN2(buffer, bufLength, pinLength); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Unhandled destination encoding \"%s\"", GWEN_Crypt_PinEncoding_toString(peDst)); return GWEN_ERROR_INVALID; } if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } static int GWEN_Crypt__KeyDataFromText(const char *text, unsigned char *buffer, unsigned int bufLength) { GWEN_MDIGEST *md; int rv; assert(text); assert(buffer); assert(bufLength); switch(bufLength) { case 16: md=GWEN_MDigest_Md5_new(); break; case 20: md=GWEN_MDigest_Rmd160_new(); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Bad size (%d)", bufLength); return GWEN_ERROR_BAD_SIZE; } rv=GWEN_MDigest_Begin(md); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); return rv; } rv=GWEN_MDigest_Update(md, (const uint8_t*)text, strlen(text)); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); return rv; } rv=GWEN_MDigest_End(md); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); return rv; } /* get hash, copy it to given buffer */ memmove(buffer, GWEN_MDigest_GetDigestPtr(md), bufLength); /* cleanup, return */ GWEN_MDigest_free(md); return 0; } int GWEN_Crypt_KeyDataFromText(const char *text, unsigned char *buffer, unsigned int bufLength) { if (bufLength==24) { int rv; rv=GWEN_Crypt__KeyDataFromText(text, buffer, 16); if (rv) return rv; memmove(buffer+16, buffer, 8); return rv; } else return GWEN_Crypt__KeyDataFromText(text, buffer, bufLength); } void GWEN_Crypt_Random(int quality, uint8_t *buffer, uint32_t len) { uint8_t *data; enum gcry_random_level q; switch(quality) { case 0: q=GCRY_WEAK_RANDOM; break; case 1: q=GCRY_STRONG_RANDOM; break; case 2: default: q=GCRY_VERY_STRONG_RANDOM; break; } data=gcry_random_bytes(len, q); assert(data); memmove(buffer, data, len); memset(data, 0, len); free(data); } gwenhywfar-4.15.2beta/src/crypt3/cryptdefs.h0000644000175000017500000000352212416477066015747 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: crypttoken.h 1113 2007-01-10 09:14:16Z martin $ begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPT_CRYPTDEFS_H #define GWEN_CRYPT_CRYPTDEFS_H #include #ifdef __cplusplus extern "C" { #endif typedef enum { GWEN_Crypt_PinType_Unknown=-1, GWEN_Crypt_PinType_None=0, GWEN_Crypt_PinType_Access, GWEN_Crypt_PinType_Manage } GWEN_CRYPT_PINTYPE; GWENHYWFAR_API GWEN_CRYPT_PINTYPE GWEN_Crypt_PinType_fromString(const char *s); GWENHYWFAR_API const char *GWEN_Crypt_PinType_toString(GWEN_CRYPT_PINTYPE pt); typedef enum { GWEN_Crypt_PinEncoding_Unknown=-1, GWEN_Crypt_PinEncoding_None=0, GWEN_Crypt_PinEncoding_Bin, GWEN_Crypt_PinEncoding_Bcd, GWEN_Crypt_PinEncoding_Ascii, GWEN_Crypt_PinEncoding_FPin2 } GWEN_CRYPT_PINENCODING; GWENHYWFAR_API GWEN_CRYPT_PINENCODING GWEN_Crypt_PinEncoding_fromString(const char *s); GWENHYWFAR_API const char *GWEN_Crypt_PinEncoding_toString(GWEN_CRYPT_PINENCODING pe); GWENHYWFAR_API int GWEN_Crypt_TransformPin(GWEN_CRYPT_PINENCODING peSrc, GWEN_CRYPT_PINENCODING peDst, unsigned char *buffer, unsigned int bufLength, unsigned int *pinLength); GWENHYWFAR_API int GWEN_Crypt_KeyDataFromText(const char *text, unsigned char *buffer, unsigned int bufLength); GWENHYWFAR_API void GWEN_Crypt_Random(int quality, uint8_t *buffer, uint32_t len); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/crypt3/cryptkeysym.h0000644000175000017500000000744712416477066016361 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: crypttoken.h 1113 2007-01-10 09:14:16Z martin $ begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPT_KEY_SYM_H #define GWEN_CRYPT_KEY_SYM_H #include "cryptkey.h" #ifdef __cplusplus extern "C" { #endif GWENHYWFAR_API GWEN_CRYPT_KEY *GWEN_Crypt_KeyDes3K_Generate(GWEN_CRYPT_CRYPTMODE mode, int keySize, int quality); GWENHYWFAR_API GWEN_CRYPT_KEY *GWEN_Crypt_KeyDes3K_fromData(GWEN_CRYPT_CRYPTMODE mode, int keySize, const uint8_t *kd, uint32_t kl); GWENHYWFAR_API GWEN_CRYPT_KEY *GWEN_Crypt_KeyDes3K_fromDb(GWEN_CRYPT_CRYPTMODE mode, GWEN_DB_NODE *db); GWENHYWFAR_API int GWEN_Crypt_KeyDes3K_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db); GWENHYWFAR_API int GWEN_Crypt_KeyDes3K_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl); GWENHYWFAR_API uint8_t *GWEN_Crypt_KeyDes3K_GetKeyDataPtr(const GWEN_CRYPT_KEY *k); GWENHYWFAR_API uint32_t GWEN_Crypt_KeyDes3K_GetKeyDataLen(const GWEN_CRYPT_KEY *k); GWENHYWFAR_API int GWEN_Crypt_KeyDes3K_SetIV(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl); GWENHYWFAR_API GWEN_CRYPT_KEY *GWEN_Crypt_KeyBlowFish_Generate(GWEN_CRYPT_CRYPTMODE mode, int keySize, int quality); GWENHYWFAR_API GWEN_CRYPT_KEY *GWEN_Crypt_KeyBlowFish_fromData(GWEN_CRYPT_CRYPTMODE mode, int keySize, const uint8_t *kd, uint32_t kl); GWENHYWFAR_API GWEN_CRYPT_KEY *GWEN_Crypt_KeyBlowFish_fromDb(GWEN_CRYPT_CRYPTMODE mode, GWEN_DB_NODE *db); GWENHYWFAR_API int GWEN_Crypt_KeyBlowFish_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db); GWENHYWFAR_API int GWEN_Crypt_KeyBlowFish_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl); GWENHYWFAR_API uint8_t *GWEN_Crypt_KeyBlowFish_GetKeyDataPtr(const GWEN_CRYPT_KEY *k); GWENHYWFAR_API uint32_t GWEN_Crypt_KeyBlowFish_GetKeyDataLen(const GWEN_CRYPT_KEY *k); GWENHYWFAR_API GWEN_CRYPT_KEY *GWEN_Crypt_KeyAes128_Generate(GWEN_CRYPT_CRYPTMODE mode, int keySize, int quality); GWENHYWFAR_API GWEN_CRYPT_KEY *GWEN_Crypt_KeyAes128_fromData(GWEN_CRYPT_CRYPTMODE mode, int keySize, const uint8_t *kd, uint32_t kl); GWENHYWFAR_API GWEN_CRYPT_KEY *GWEN_Crypt_KeyAes128_fromDb(GWEN_CRYPT_CRYPTMODE mode, GWEN_DB_NODE *db); GWENHYWFAR_API int GWEN_Crypt_KeyAes128_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db); GWENHYWFAR_API int GWEN_Crypt_KeyAes128_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl); GWENHYWFAR_API uint8_t *GWEN_Crypt_KeyAes128_GetKeyDataPtr(const GWEN_CRYPT_KEY *k); GWENHYWFAR_API uint32_t GWEN_Crypt_KeyAes128_GetKeyDataLen(const GWEN_CRYPT_KEY *k); GWENHYWFAR_API int GWEN_Crypt_KeyAes128_SetIV(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl); /** * This functions creates a copy of the given key. The given key must * have been created by one of the functions in this group (e.g. * @ref GWEN_Crypt_KeyBlowFish_fromDb(), @ref GWEN_Crypt_KeyDes3K_Generate() * etc. For other kinds of keys other functions must be used (like * @ref GWEN_Crypt_KeyRsa_dup() for RSA keys). */ GWENHYWFAR_API GWEN_CRYPT_KEY *GWEN_Crypt_KeySym_dup(const GWEN_CRYPT_KEY *k); GWENHYWFAR_API GWEN_CRYPT_KEY *GWEN_Crypt_KeySym_fromDb(GWEN_CRYPT_CRYPTMODE mode, GWEN_DB_NODE *db); GWENHYWFAR_API int GWEN_Crypt_KeySym_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/crypt3/cryptkey.c0000644000175000017500000001506312416477066015614 00000000000000/*************************************************************************** begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "cryptkey_p.h" #include #include #include GWEN_INHERIT_FUNCTIONS(GWEN_CRYPT_KEY) GWEN_LIST_FUNCTIONS(GWEN_CRYPT_KEY, GWEN_Crypt_Key) GWEN_LIST2_FUNCTIONS(GWEN_CRYPT_KEY, GWEN_Crypt_Key) int GWEN_Crypt3_ModuleInit(void) { gcry_control(GCRYCTL_DISABLE_SECMEM, 0); if (!gcry_check_version (NEED_LIBGCRYPT_VERSION)) { const char *gcrypt_version = gcry_check_version(0); DBG_ERROR(GWEN_LOGDOMAIN, "Libgcrypt version mismatch: " "Gwen needs GCrypt >= %s, but is running with GCrypt %s", NEED_LIBGCRYPT_VERSION, gcrypt_version); return GWEN_ERROR_GENERIC; } /*gcry_control(GCRYCTL_SET_DEBUG_FLAGS, 1u, 0);*/ gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0); gcry_control (GCRYCTL_ENABLE_QUICK_RANDOM, 0); return 0; } int GWEN_Crypt3_ModuleFini(void) { return 0; } GWEN_CRYPT_KEY *GWEN_Crypt_Key_new(GWEN_CRYPT_CRYPTALGOID cryptAlgoId, int keySize) { GWEN_CRYPT_KEY *k; GWEN_NEW_OBJECT(GWEN_CRYPT_KEY, k) k->refCount=1; GWEN_INHERIT_INIT(GWEN_CRYPT_KEY, k) GWEN_LIST_INIT(GWEN_CRYPT_KEY, k) k->cryptAlgoId=cryptAlgoId; k->keySize=keySize; return k; } GWEN_CRYPT_KEY *GWEN_Crypt_Key_fromDb(GWEN_DB_NODE *db) { GWEN_CRYPT_KEY *k; GWEN_CRYPT_CRYPTALGOID cryptAlgoId; int keySize; const char *s; s=GWEN_DB_GetCharValue(db, "cryptAlgoId", 0, NULL); if (s) cryptAlgoId=GWEN_Crypt_CryptAlgoId_fromString(s); else cryptAlgoId=GWEN_Crypt_CryptAlgoId_Unknown; if (cryptAlgoId==GWEN_Crypt_CryptAlgoId_Unknown) { DBG_ERROR(GWEN_LOGDOMAIN, "Unknown crypt algo id [%s]", s?s:"---"); return NULL; } keySize=GWEN_DB_GetIntValue(db, "keySize", 0, -1); if (keySize==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "Missing keysize"); return NULL; } k=GWEN_Crypt_Key_new(cryptAlgoId, keySize); if (k==NULL) return NULL; k->keyNumber=GWEN_DB_GetIntValue(db, "keyNumber", 0, 0); k->keyVersion=GWEN_DB_GetIntValue(db, "keyVersion", 0, 0); return k; } int GWEN_Crypt_Key_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db) { assert(k); assert(db); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "cryptAlgoId", GWEN_Crypt_CryptAlgoId_toString(k->cryptAlgoId)); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "keySize", k->keySize); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "keyNumber", k->keyNumber); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "keyVersion", k->keyVersion); return 0; } GWEN_CRYPT_KEY *GWEN_Crypt_Key_dup(const GWEN_CRYPT_KEY *k) { GWEN_CRYPT_KEY *nk; assert(k); nk=GWEN_Crypt_Key_new(k->cryptAlgoId, k->keySize); if (nk==NULL) return NULL; nk->keyNumber=k->keyNumber; nk->keyVersion=k->keyVersion; return nk; } void GWEN_Crypt_Key_free(GWEN_CRYPT_KEY *k) { if (k) { assert(k->refCount); if (k->refCount==1) { GWEN_INHERIT_FINI(GWEN_CRYPT_KEY, k) GWEN_LIST_FINI(GWEN_CRYPT_KEY, k) k->refCount=0; GWEN_FREE_OBJECT(k); } else k->refCount--; } } GWEN_CRYPT_CRYPTALGOID GWEN_Crypt_Key_GetCryptAlgoId(const GWEN_CRYPT_KEY *k) { assert(k); return k->cryptAlgoId; } int GWEN_Crypt_Key_GetKeySize(const GWEN_CRYPT_KEY *k) { assert(k); return k->keySize; } int GWEN_Crypt_Key_GetKeyNumber(const GWEN_CRYPT_KEY *k) { assert(k); return k->keyNumber; } void GWEN_Crypt_Key_SetKeyNumber(GWEN_CRYPT_KEY *k, int i) { assert(k); k->keyNumber=i; } int GWEN_Crypt_Key_GetKeyVersion(const GWEN_CRYPT_KEY *k) { assert(k); return k->keyVersion; } void GWEN_Crypt_Key_SetKeyVersion(GWEN_CRYPT_KEY *k, int i) { assert(k); k->keyVersion=i; } GWEN_CRYPT_KEY_SIGN_FN GWEN_Crypt_Key_SetSignFn(GWEN_CRYPT_KEY *k, GWEN_CRYPT_KEY_SIGN_FN f) { GWEN_CRYPT_KEY_SIGN_FN of; assert(k); of=k->signFn; k->signFn=f; return of; } GWEN_CRYPT_KEY_VERIFY_FN GWEN_Crypt_Key_SetVerifyFn(GWEN_CRYPT_KEY *k, GWEN_CRYPT_KEY_VERIFY_FN f) { GWEN_CRYPT_KEY_VERIFY_FN of; assert(k); of=k->verifyFn; k->verifyFn=f; return of; } GWEN_CRYPT_KEY_ENCIPHER_FN GWEN_Crypt_Key_SetEncipherFn(GWEN_CRYPT_KEY *k, GWEN_CRYPT_KEY_ENCIPHER_FN f) { GWEN_CRYPT_KEY_ENCIPHER_FN of; assert(k); of=k->encipherFn; k->encipherFn=f; return of; } GWEN_CRYPT_KEY_DECIPHER_FN GWEN_Crypt_Key_SetDecipherFn(GWEN_CRYPT_KEY *k, GWEN_CRYPT_KEY_DECIPHER_FN f) { GWEN_CRYPT_KEY_DECIPHER_FN of; assert(k); of=k->decipherFn; k->decipherFn=f; return of; } int GWEN_Crypt_Key_Sign(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, uint8_t *pSignatureData, uint32_t *pSignatureLen) { assert(k); if (k->signFn) return k->signFn(k, pInData, inLen, pSignatureData, pSignatureLen); else return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_Crypt_Key_Verify(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, const uint8_t *pSignatureData, uint32_t signatureLen) { assert(k); if (k->verifyFn) return k->verifyFn(k, pInData, inLen, pSignatureData, signatureLen); else return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_Crypt_Key_Encipher(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen) { assert(k); if (k->encipherFn) return k->encipherFn(k, pInData, inLen, pOutData, pOutLen); else return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_Crypt_Key_Decipher(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen) { assert(k); if (k->decipherFn) return k->decipherFn(k, pInData, inLen, pOutData, pOutLen); else return GWEN_ERROR_NOT_IMPLEMENTED; } gwenhywfar-4.15.2beta/src/crypt3/mdigest_p.h0000644000175000017500000000167312364015347015714 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: crypttoken.h 1113 2007-01-10 09:14:16Z martin $ begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWENHYWFAR_MDIGEST_P_H #define GWENHYWFAR_MDIGEST_P_H #include "mdigest_be.h" struct GWEN_MDIGEST { GWEN_INHERIT_ELEMENT(GWEN_MDIGEST) GWEN_LIST_ELEMENT(GWEN_MDIGEST) GWEN_CRYPT_HASHALGOID hashAlgoId; uint8_t *pDigest; unsigned int lDigest; GWEN_MDIGEST_BEGIN_FN beginFn; GWEN_MDIGEST_END_FN endFn; GWEN_MDIGEST_UPDATE_FN updateFn; int refCount; }; #endif gwenhywfar-4.15.2beta/src/crypt3/mdigestgc_p.h0000644000175000017500000000222312364015347016216 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: crypttoken.h 1113 2007-01-10 09:14:16Z martin $ begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWENHYWFAR_MDIGESTGC_P_H #define GWENHYWFAR_MDIGESTGC_P_H #include "mdigest_be.h" #include typedef struct GWEN_MDIGEST_GC GWEN_MDIGEST_GC; struct GWEN_MDIGEST_GC { gcry_md_hd_t handle; int algo; unsigned int flags; int isOpen; }; static GWEN_MDIGEST *GWEN_MDigest_Gc_new(GWEN_CRYPT_HASHALGOID a); static GWENHYWFAR_CB void GWEN_Digest_Gc_freeData(void *bp, void *p); static int GWEN_MDigest_Gc_Begin(GWEN_MDIGEST *md); static int GWEN_MDigest_Gc_Update(GWEN_MDIGEST *md, const uint8_t *buf, unsigned int l); static int GWEN_MDigest_Gc_End(GWEN_MDIGEST *md); #endif gwenhywfar-4.15.2beta/src/crypt3/Makefile.in0000644000175000017500000006414612634022414015632 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/crypt3 DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(iheader_HEADERS) $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) am__DEPENDENCIES_1 = libcrypt3_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_libcrypt3_la_OBJECTS = cryptalgo.lo cryptdefs.lo hashalgo.lo \ paddalgo.lo cryptkey.lo cryptkeyrsa.lo cryptkeysym.lo \ mdigest.lo mdigestgc.lo padd.lo smalltresor.lo libcrypt3_la_OBJECTS = $(am_libcrypt3_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libcrypt3_la_SOURCES) DIST_SOURCES = $(libcrypt3_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(iheaderdir)" HEADERS = $(iheader_HEADERS) $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/parser $(LIBGCRYPT_CFLAGS) $(GPG_ERROR_CFLAGS) @all_includes@ AM_CFLAGS = @visibility_cflags@ -DBUILDING_GWENHYWFAR #typefiles=crypttoken.xml iheaderdir = $(gwenhywfar_headerdir_am)/gwenhywfar iheader_HEADERS = \ cryptalgo.h \ cryptdefs.h \ hashalgo.h \ paddalgo.h \ cryptkey.h \ cryptkey_be.h \ cryptkeyrsa.h \ cryptkeysym.h \ mdigest.h \ mdigest_be.h \ padd.h \ smalltresor.h noinst_LTLIBRARIES = libcrypt3.la noinst_HEADERS = \ cryptalgo_p.h \ cryptdefs_p.h \ hashalgo_p.h \ paddalgo_p.h \ cryptkey_l.h \ cryptkey_p.h \ cryptkeyrsa_p.h \ cryptkeysym_p.h \ mdigest_p.h \ mdigestgc_p.h \ padd_p.h libcrypt3_la_SOURCES = \ cryptalgo.c \ cryptdefs.c \ hashalgo.c \ paddalgo.c \ cryptkey.c \ cryptkeyrsa.c \ cryptkeysym.c \ mdigest.c \ mdigestgc.c \ padd.c \ smalltresor.c libcrypt3_la_LIBADD = $(GPG_ERROR_LIBS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/crypt3/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/crypt3/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libcrypt3.la: $(libcrypt3_la_OBJECTS) $(libcrypt3_la_DEPENDENCIES) $(EXTRA_libcrypt3_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libcrypt3_la_OBJECTS) $(libcrypt3_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cryptalgo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cryptdefs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cryptkey.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cryptkeyrsa.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cryptkeysym.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hashalgo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mdigest.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mdigestgc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/padd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paddalgo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smalltresor.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-iheaderHEADERS: $(iheader_HEADERS) @$(NORMAL_INSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(iheaderdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(iheaderdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(iheaderdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(iheaderdir)" || exit $$?; \ done uninstall-iheaderHEADERS: @$(NORMAL_UNINSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(iheaderdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(iheaderdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iheaderHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iheaderHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am \ install-iheaderHEADERS install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-iheaderHEADERS types: $(typefiles) typemaker -d GWENHYWFAR_API $(typefiles) sources: for f in $(libcrypt3_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/src/crypt3/cryptkey.h0000644000175000017500000000503712416477066015621 00000000000000/************************************************************************************************* $RCSfile$ ------------------- cvs : $Id: crypttoken.h 1113 2007-01-10 09:14:16Z martin $ begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de ************************************************************************************************* * Please see toplevel file COPYING for license details * *************************************************************************************************/ #ifndef GWEN_CRYPT_KEY_H #define GWEN_CRYPT_KEY_H #include #include #include #include #include #include #include typedef struct GWEN_CRYPT_KEY GWEN_CRYPT_KEY; #ifdef __cplusplus extern "C" { #endif GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_CRYPT_KEY, GWENHYWFAR_API) GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_CRYPT_KEY, GWEN_Crypt_Key, GWENHYWFAR_API) GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_CRYPT_KEY, GWEN_Crypt_Key, GWENHYWFAR_API) GWENHYWFAR_API void GWEN_Crypt_Key_free(GWEN_CRYPT_KEY *k); GWENHYWFAR_API GWEN_CRYPT_CRYPTALGOID GWEN_Crypt_Key_GetCryptAlgoId(const GWEN_CRYPT_KEY *k); GWENHYWFAR_API int GWEN_Crypt_Key_GetKeySize(const GWEN_CRYPT_KEY *k); GWENHYWFAR_API int GWEN_Crypt_Key_GetKeyNumber(const GWEN_CRYPT_KEY *k); GWENHYWFAR_API void GWEN_Crypt_Key_SetKeyNumber(GWEN_CRYPT_KEY *k, int i); GWENHYWFAR_API int GWEN_Crypt_Key_GetKeyVersion(const GWEN_CRYPT_KEY *k); GWENHYWFAR_API void GWEN_Crypt_Key_SetKeyVersion(GWEN_CRYPT_KEY *k, int i); GWENHYWFAR_API int GWEN_Crypt_Key_Sign(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, uint8_t *pSignatureData, uint32_t *pSignatureLen); GWENHYWFAR_API int GWEN_Crypt_Key_Verify(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, const uint8_t *pSignatureData, uint32_t signatureLen); GWENHYWFAR_API int GWEN_Crypt_Key_Encipher(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen); GWENHYWFAR_API int GWEN_Crypt_Key_Decipher(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/crypt3/padd.h0000644000175000017500000001256112416477066014657 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Jan 05 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_PADD_H #define GWEN_PADD_H #include #include #include #ifdef __cplusplus extern "C" { #endif /** @defgroup MOD_CRYPT_PADD Padding Functions * @ingroup MOD_CRYPT * These functions are used for padding when encrypting/decrypting data * using 2-key-triple-DES or when signing data. * The original code (in C++) has been written by * Fabian Kaiser for OpenHBCI * (file rsakey.cpp). Translated to C and slightly modified by me * (Martin Preuss) */ /*@{*/ /** * This function padds the given buffer according to ISO9796. * The given buffer is expected to contain a 20 byte hash created using * RIPEMD 160. This is padded to 96 bytes according to ISO 9796 (including * appendix A4). */ GWENHYWFAR_API int GWEN_Padd_PaddWithISO9796(GWEN_BUFFER *src); /** * This function padds according to ISO 8786-2. */ GWENHYWFAR_API int GWEN_Padd_PaddWithIso9796_2(GWEN_BUFFER *buf, int dstSize); GWENHYWFAR_API int GWEN_Padd_UnpaddWithIso9796_2(GWEN_BUFFER *buf); /** * This is a compatibility function * (calls @ref GWEN_Padd_PaddWithAnsiX9_23ToMultipleOf with param y=8). */ GWENHYWFAR_API int GWEN_Padd_PaddWithAnsiX9_23(GWEN_BUFFER *src); /** * This is a compatibility function * (calls @ref GWEN_Padd_UnpaddWithAnsiX9_23FromMultipleOf with param y=8). */ GWENHYWFAR_API int GWEN_Padd_UnpaddWithAnsiX9_23(GWEN_BUFFER *src); /** * This function is used to pad the plain text data to a multiple of 8 bytes * size before encrypting it. * This is done by adding bytes to the buffer until its length is multiple of * Y bytes. The byte added is the number of padding bytes appended. * Example: Y is 8, buffer initially contains 5 bytes, so 3 bytes are needed to make * the buffer length a multiple of 8. So the number "3" is added three times. * Please note that if the buffer initially has a multiple of Y bytes then * Y bytes are added (this is needed to make sure the unpadd function can * always recover data padded in this manner). * */ GWENHYWFAR_API int GWEN_Padd_PaddWithAnsiX9_23ToMultipleOf(GWEN_BUFFER *src, int y); /** * This function is used to remove padding from plain text data after * decrypting it. */ GWENHYWFAR_API int GWEN_Padd_UnpaddWithAnsiX9_23FromMultipleOf(GWEN_BUFFER *src, int y); GWENHYWFAR_API int GWEN_Padd_PaddWithPkcs1Bt1(GWEN_BUFFER *src, int dstSize); GWENHYWFAR_API int GWEN_Padd_UnpaddWithPkcs1Bt1(GWEN_BUFFER *src); GWENHYWFAR_API int GWEN_Padd_PaddWithPkcs1Bt2(GWEN_BUFFER *src, int dstSize); GWENHYWFAR_API int GWEN_Padd_UnpaddWithPkcs1Bt2(GWEN_BUFFER *src); GWENHYWFAR_API int GWEN_Padd_MGF1(uint8_t *pDestBuffer, uint32_t lDestBuffer, const uint8_t *pSeed, uint32_t lSeed, GWEN_MDIGEST *md); /** * @param nbits number of actual bits of the modulus */ GWENHYWFAR_API int GWEN_Padd_AddPkcs1Pss(uint8_t *pDestBuffer, uint32_t lDestBuffer, uint32_t nbits, const uint8_t *pHash, uint32_t lHash, uint32_t lSalt, GWEN_MDIGEST *md); GWENHYWFAR_API int GWEN_Padd_VerifyPkcs1Pss(const uint8_t *pSrcBuffer, uint32_t lSrcBuffer, uint32_t nbits, const uint8_t *pHash, uint32_t lHash, uint32_t lSalt, GWEN_MDIGEST *md); GWENHYWFAR_API int GWEN_Padd_ApplyPaddAlgo(const GWEN_CRYPT_PADDALGO *a, GWEN_BUFFER *src); GWENHYWFAR_API int GWEN_Padd_UnapplyPaddAlgo(const GWEN_CRYPT_PADDALGO *a, GWEN_BUFFER *buf); /*@}*/ #ifdef __cplusplus } #endif #endif /* GWEN_PADD_H */ gwenhywfar-4.15.2beta/src/crypt3/mdigest.h0000644000175000017500000000631712416477066015405 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: crypttoken.h 1113 2007-01-10 09:14:16Z martin $ begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWENHYWFAR_MDIGEST_H #define GWENHYWFAR_MDIGEST_H #include #include #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_MDIGEST GWEN_MDIGEST; GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_MDIGEST, GWEN_MDigest, GWENHYWFAR_API) GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_MDIGEST, GWEN_MDigest, GWENHYWFAR_API) #include #include GWENHYWFAR_API void GWEN_MDigest_free(GWEN_MDIGEST *md); GWENHYWFAR_API GWEN_CRYPT_HASHALGOID GWEN_MDigest_GetHashAlgoId(const GWEN_MDIGEST *md); GWENHYWFAR_API uint8_t *GWEN_MDigest_GetDigestPtr(GWEN_MDIGEST *md); GWENHYWFAR_API unsigned int GWEN_MDigest_GetDigestSize(GWEN_MDIGEST *md); GWENHYWFAR_API int GWEN_MDigest_Begin(GWEN_MDIGEST *md); GWENHYWFAR_API int GWEN_MDigest_End(GWEN_MDIGEST *md); GWENHYWFAR_API int GWEN_MDigest_Update(GWEN_MDIGEST *md, const uint8_t *buf, unsigned int l); GWENHYWFAR_API GWEN_MDIGEST *GWEN_MDigest_Md5_new(void); GWENHYWFAR_API GWEN_MDIGEST *GWEN_MDigest_Rmd160_new(void); GWENHYWFAR_API GWEN_MDIGEST *GWEN_MDigest_Sha1_new(void); GWENHYWFAR_API GWEN_MDIGEST *GWEN_MDigest_Sha256_new(void); /** * Generate a key from a given password and a salt according to RFC 2898. */ GWENHYWFAR_API int GWEN_MDigest_PBKDF2(GWEN_MDIGEST *md, const char *password, const uint8_t *pSalt, uint32_t lSalt, uint8_t *pKey, uint32_t lKey, uint32_t iterations); GWENHYWFAR_API int GWEN_MDigest_HashFileTree(GWEN_MDIGEST *md, const char *folder, const char *ignoreFile, GWEN_STRINGLIST *sl); /** * This function verifies the integrity of a given file hierarchy by comparing * checksums saved in a given file inside that file tree to the actual checksums * of the files in the file tree. * @param md digest algorithm to use (see @ref GWEN_MDigest_Rmd160_new et al) * @param folder folder to check * @param checkSumFile name of the file containing the checksums * @param strictCheck if !=0 then an error will be returned if there are files in the * tree for which there is no corresponding entry in the checksum file * @param pid id of the open progress dialog (see @ref GWEN_Gui_ProgressStart) */ GWENHYWFAR_API int GWEN_MDigest_CheckFileTree(GWEN_MDIGEST *md, const char *folder, const char *checksumFile, int strictCheck, uint32_t pid); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/crypt3/cryptkeyrsa.h0000644000175000017500000000661112416477066016326 00000000000000/*************************************************************************** begin : Mon May 07 2012 copyright : (C) 2012 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPT_KEY_RSA_H #define GWEN_CRYPT_KEY_RSA_H #include "cryptkey.h" #include /** * When signing always directly use the signature, do not determine whether * (sig-n) is smaller */ #define GWEN_CRYPT_KEYRSA_FLAGS_DIRECTSIGN 0x00000001 #define GWEN_CRYPT_KEYRSA_MAX_KEYLENGTH 1024 #ifdef __cplusplus extern "C" { #endif /** * Creates a key pair and returns a pointer to it. * @return NULL on error, otherwise a pointer to two keys: public and private * @param nbytes number of bytes * @param use65537e !=0: use the value 65537 for the public exponent, otherwise let the * library choose the exponent by its own */ GWENHYWFAR_API int GWEN_Crypt_KeyRsa_GeneratePair(unsigned int nbytes, int use65537e, GWEN_CRYPT_KEY **pPubKey, GWEN_CRYPT_KEY **pSecretKey); /** * Creates a key pair and returns a pointer to it. * This function allows for more precise control over the size of the created key because it * lets you specify the size in bits rather than in bytes. * @return NULL on error, otherwise a pointer to two keys: public and private * @param nbits number of bits * @param use65537e !=0: use the value 65537 for the public exponent, otherwise let the * library choose the exponent by its own * @deprecated Please use @ref GWEN_Crypt_KeyRsa_GeneratePair instead since * nbits should be a multiple of 8 anyway according to Libgcrypt. */ GWENHYWFAR_API DEPRECATED int GWEN_Crypt_KeyRsa_GeneratePair2(unsigned int nbits, int use65537e, GWEN_CRYPT_KEY **pPubKey, GWEN_CRYPT_KEY **pSecretKey); GWENHYWFAR_API GWEN_CRYPT_KEY *GWEN_Crypt_KeyRsa_dup(const GWEN_CRYPT_KEY *k); GWENHYWFAR_API GWEN_CRYPT_KEY *GWEN_Crypt_KeyRsa_fromDb(GWEN_DB_NODE *db); GWENHYWFAR_API int GWEN_Crypt_KeyRsa_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db, int pub); GWENHYWFAR_API int GWEN_Crypt_KeyRsa_GetModulus(const GWEN_CRYPT_KEY *k, uint8_t *buffer, uint32_t *pBufLen); GWENHYWFAR_API int GWEN_Crypt_KeyRsa_GetExponent(const GWEN_CRYPT_KEY *k, uint8_t *buffer, uint32_t *pBufLen); GWENHYWFAR_API int GWEN_Crypt_KeyRsa_GetSecretExponent(const GWEN_CRYPT_KEY *k, uint8_t *buffer, uint32_t *pBufLen); GWENHYWFAR_API GWEN_CRYPT_KEY *GWEN_Crypt_KeyRsa_fromModExp(unsigned int nbytes, const uint8_t *pModulus, uint32_t lModulus, const uint8_t *pExponent, uint32_t lExponent); GWENHYWFAR_API GWEN_CRYPT_KEY *GWEN_Crypt_KeyRsa_fromModPrivExp(unsigned int nbytes, const uint8_t *pModulus, uint32_t lModulus, const uint8_t *pExponent, uint32_t lExponent, const uint8_t *pPrivExponent, uint32_t lPrivExponent); GWENHYWFAR_API uint32_t GWEN_Crypt_KeyRsa_GetFlags(const GWEN_CRYPT_KEY *k); GWENHYWFAR_API void GWEN_Crypt_KeyRsa_SetFlags(GWEN_CRYPT_KEY *k, uint32_t fl); GWENHYWFAR_API void GWEN_Crypt_KeyRsa_AddFlags(GWEN_CRYPT_KEY *k, uint32_t fl); GWENHYWFAR_API void GWEN_Crypt_KeyRsa_SubFlags(GWEN_CRYPT_KEY *k, uint32_t fl); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/crypt3/cryptkeysym_p.h0000644000175000017500000000445712530645242016664 00000000000000/*************************************************************************** begin : Wed Mar 16 2005 copyright : (C) 2005-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPT_KEY_SYM_P_H #define GWEN_CRYPT_KEY_SYM_P_H #include "cryptkeysym.h" #include "cryptkey_be.h" #include typedef struct GWEN_CRYPT_KEY_SYM GWEN_CRYPT_KEY_SYM; struct GWEN_CRYPT_KEY_SYM { int algoValid; gcry_cipher_hd_t algoHandle; GWEN_CRYPT_CRYPTMODE mode; int algo; uint8_t *keyData; uint32_t keyLen; }; static GWENHYWFAR_CB void GWEN_Crypt_KeySym_freeData(void *bp, void *p); static GWENHYWFAR_CB int GWEN_Crypt_KeySym_Encipher(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen); static GWENHYWFAR_CB int GWEN_Crypt_KeySym_Decipher(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen); static enum gcry_cipher_modes GWEN_Crypt_KeySym__MyMode2GMode(GWEN_CRYPT_CRYPTMODE mode); static GWEN_CRYPT_KEY *GWEN_Crypt_KeySym_Generate(GWEN_CRYPT_CRYPTALGOID cryptAlgoId, int keySize, GWEN_CRYPT_CRYPTMODE mode, int algo, unsigned int flags, int quality); static GWEN_CRYPT_KEY *GWEN_Crypt_KeySym__fromDb(GWEN_CRYPT_CRYPTALGOID cryptAlgoId, GWEN_CRYPT_CRYPTMODE mode, int algo, unsigned int flags, const char *gname, GWEN_DB_NODE *db); static GWEN_CRYPT_KEY *GWEN_Crypt_KeySym_fromData(GWEN_CRYPT_CRYPTALGOID cryptAlgoId, int keySize, GWEN_CRYPT_CRYPTMODE mode, int algo, unsigned int flags, const uint8_t *kd, uint32_t kl); static int GWEN_Crypt_KeySym__toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db, const char *gname); static int GWEN_Crypt_KeySym_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl); #endif gwenhywfar-4.15.2beta/src/crypt3/cryptalgo.h0000644000175000017500000000662312416477066015755 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: crypttoken.h 1113 2007-01-10 09:14:16Z martin $ begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPT_CRYPTALGO_H #define GWEN_CRYPT_CRYPTALGO_H #include typedef struct GWEN_CRYPT_CRYPTALGO GWEN_CRYPT_CRYPTALGO; #ifdef __cplusplus extern "C" { #endif GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_CRYPT_CRYPTALGO, GWEN_Crypt_CryptAlgo, GWENHYWFAR_API) #ifdef __cplusplus } #endif typedef enum { GWEN_Crypt_CryptAlgoId_Unknown=-1, GWEN_Crypt_CryptAlgoId_None=0, GWEN_Crypt_CryptAlgoId_Any, /** RSA */ GWEN_Crypt_CryptAlgoId_Rsa, /** DSA */ GWEN_Crypt_CryptAlgoId_Dsa, /* DES */ GWEN_Crypt_CryptAlgoId_Des, /** triple-key DES */ GWEN_Crypt_CryptAlgoId_Des3K, /* blowfish */ GWEN_Crypt_CryptAlgoId_BlowFish, /* AES-128 */ GWEN_Crypt_CryptAlgoId_Aes128, } GWEN_CRYPT_CRYPTALGOID; typedef enum { GWEN_Crypt_CryptMode_Unknown=-1, GWEN_Crypt_CryptMode_None=0, GWEN_Crypt_CryptMode_Ecb, /* electronic codebook */ GWEN_Crypt_CryptMode_Cfb, /* cipher feedback */ GWEN_Crypt_CryptMode_Cbc /* cipher block chaining */ } GWEN_CRYPT_CRYPTMODE; #include #ifdef __cplusplus extern "C" { #endif GWENHYWFAR_API GWEN_CRYPT_CRYPTALGOID GWEN_Crypt_CryptAlgoId_fromString(const char *s); GWENHYWFAR_API const char *GWEN_Crypt_CryptAlgoId_toString(GWEN_CRYPT_CRYPTALGOID a); GWENHYWFAR_API GWEN_CRYPT_CRYPTMODE GWEN_Crypt_CryptMode_fromString(const char *s); GWENHYWFAR_API const char *GWEN_Crypt_CryptMode_toString(GWEN_CRYPT_CRYPTMODE m); GWENHYWFAR_API GWEN_CRYPT_CRYPTALGO *GWEN_Crypt_CryptAlgo_new(GWEN_CRYPT_CRYPTALGOID id, GWEN_CRYPT_CRYPTMODE m); GWENHYWFAR_API GWEN_CRYPT_CRYPTALGO *GWEN_Crypt_CryptAlgo_dup(const GWEN_CRYPT_CRYPTALGO *a); GWENHYWFAR_API GWEN_CRYPT_CRYPTALGO *GWEN_Crypt_CryptAlgo_fromDb(GWEN_DB_NODE *db); GWENHYWFAR_API int GWEN_Crypt_CryptAlgo_toDb(const GWEN_CRYPT_CRYPTALGO *a, GWEN_DB_NODE *db); GWENHYWFAR_API void GWEN_Crypt_CryptAlgo_Attach(GWEN_CRYPT_CRYPTALGO *a); GWENHYWFAR_API void GWEN_Crypt_CryptAlgo_free(GWEN_CRYPT_CRYPTALGO *a); GWENHYWFAR_API GWEN_CRYPT_CRYPTALGOID GWEN_Crypt_CryptAlgo_GetId(const GWEN_CRYPT_CRYPTALGO *a); GWENHYWFAR_API GWEN_CRYPT_CRYPTMODE GWEN_Crypt_CryptAlgo_GetMode(const GWEN_CRYPT_CRYPTALGO *a); GWENHYWFAR_API uint8_t *GWEN_Crypt_CryptAlgo_GetInitVectorPtr(const GWEN_CRYPT_CRYPTALGO *a); GWENHYWFAR_API uint32_t GWEN_Crypt_CryptAlgo_GetInitVectorLen(const GWEN_CRYPT_CRYPTALGO *a); GWENHYWFAR_API int GWEN_Crypt_CryptAlgo_SetInitVector(GWEN_CRYPT_CRYPTALGO *a, const uint8_t *pv, uint32_t lv); GWENHYWFAR_API int GWEN_Crypt_CryptAlgo_GetChunkSize(const GWEN_CRYPT_CRYPTALGO *a); GWENHYWFAR_API void GWEN_Crypt_CryptAlgo_SetChunkSize(GWEN_CRYPT_CRYPTALGO *a, int s); GWENHYWFAR_API int GWEN_Crypt_CryptAlgo_GetKeySizeInBits(const GWEN_CRYPT_CRYPTALGO *a); GWENHYWFAR_API void GWEN_Crypt_CryptAlgo_SetKeySizeInBits(GWEN_CRYPT_CRYPTALGO *a, int s); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/crypt3/Makefile.am0000644000175000017500000000233612364015347015621 00000000000000INCLUDES= -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/parser $(LIBGCRYPT_CFLAGS) $(GPG_ERROR_CFLAGS) @all_includes@ AM_CFLAGS=@visibility_cflags@ -DBUILDING_GWENHYWFAR #typefiles=crypttoken.xml iheaderdir=$(gwenhywfar_headerdir_am)/gwenhywfar iheader_HEADERS=\ cryptalgo.h \ cryptdefs.h \ hashalgo.h \ paddalgo.h \ cryptkey.h \ cryptkey_be.h \ cryptkeyrsa.h \ cryptkeysym.h \ mdigest.h \ mdigest_be.h \ padd.h \ smalltresor.h noinst_LTLIBRARIES=libcrypt3.la noinst_HEADERS=\ cryptalgo_p.h \ cryptdefs_p.h \ hashalgo_p.h \ paddalgo_p.h \ cryptkey_l.h \ cryptkey_p.h \ cryptkeyrsa_p.h \ cryptkeysym_p.h \ mdigest_p.h \ mdigestgc_p.h \ padd_p.h libcrypt3_la_SOURCES=\ cryptalgo.c \ cryptdefs.c \ hashalgo.c \ paddalgo.c \ cryptkey.c \ cryptkeyrsa.c \ cryptkeysym.c \ mdigest.c \ mdigestgc.c \ padd.c \ smalltresor.c libcrypt3_la_LIBADD=$(GPG_ERROR_LIBS) types: $(typefiles) typemaker -d GWENHYWFAR_API $(typefiles) sources: for f in $(libcrypt3_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-4.15.2beta/src/crypt3/cryptdefs_p.h0000644000175000017500000000332612416477066016270 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: crypttoken.h 1113 2007-01-10 09:14:16Z martin $ begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPT_CRYPTDEFS_P_H #define GWEN_CRYPT_CRYPTDEFS_P_H #include "cryptdefs.h" static int GWEN_Crypt__TransformFromBCD(unsigned char *buffer, unsigned int bufLength, unsigned int *pinLength); static int GWEN_Crypt__TransformFromFPIN2(unsigned char *buffer, unsigned int bufLength, unsigned int *pinLength); static int GWEN_Crypt__TransformFromBin(unsigned char *buffer, unsigned int bufLength, unsigned int *pinLength); static int GWEN_Crypt__TransformToBCD(unsigned char *buffer, unsigned int bufLength, unsigned int *pinLength); static int GWEN_Crypt__TransformToFPIN2(unsigned char *buffer, unsigned int bufLength, unsigned int *pinLength); static int GWEN_Crypt__TransformToBin(unsigned char *buffer, unsigned int bufLength, unsigned int *pinLength); #endif gwenhywfar-4.15.2beta/src/crypt3/paddalgo.h0000644000175000017500000000523712416477066015524 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: crypttoken.h 1113 2007-01-10 09:14:16Z martin $ begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPT_PADDALGO_H #define GWEN_CRYPT_PADDALGO_H #include typedef struct GWEN_CRYPT_PADDALGO GWEN_CRYPT_PADDALGO; #ifdef __cplusplus extern "C" { #endif GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_CRYPT_PADDALGO, GWEN_Crypt_PaddAlgo, GWENHYWFAR_API) #ifdef __cplusplus } #endif typedef enum { GWEN_Crypt_PaddAlgoId_Unknown=-1, GWEN_Crypt_PaddAlgoId_None=0, GWEN_Crypt_PaddAlgoId_Any, /** ISO 9796/1 without appendix 4 */ GWEN_Crypt_PaddAlgoId_Iso9796_1, /** ISO 9796/1 with appendix 4 */ GWEN_Crypt_PaddAlgoId_Iso9796_1A4, /** ISO 9796/2 with random (SigG v1.0) */ GWEN_Crypt_PaddAlgoId_Iso9796_2, /** PKCS#1 block type 01 */ GWEN_Crypt_PaddAlgoId_Pkcs1_1, /** PKCS#1 block type 02 */ GWEN_Crypt_PaddAlgoId_Pkcs1_2, /** fill left with zeroes */ GWEN_Crypt_PaddAlgoId_LeftZero, /** fill right with zeroes */ GWEN_Crypt_PaddAlgoId_RightZero, /** ANSI X9.23 */ GWEN_Crypt_PaddAlgoId_AnsiX9_23, /** PKCS#1 PSS with SHA-256 */ GWEN_Crypt_PaddAlgoId_Pkcs1_Pss_Sha256 } GWEN_CRYPT_PADDALGOID; #include #ifdef __cplusplus extern "C" { #endif GWENHYWFAR_API GWEN_CRYPT_PADDALGOID GWEN_Crypt_PaddAlgoId_fromString(const char *s); GWENHYWFAR_API const char *GWEN_Crypt_PaddAlgoId_toString(GWEN_CRYPT_PADDALGOID a); GWENHYWFAR_API GWEN_CRYPT_PADDALGO *GWEN_Crypt_PaddAlgo_new(GWEN_CRYPT_PADDALGOID id); GWENHYWFAR_API GWEN_CRYPT_PADDALGO *GWEN_Crypt_PaddAlgo_dup(const GWEN_CRYPT_PADDALGO *a); GWENHYWFAR_API GWEN_CRYPT_PADDALGO *GWEN_Crypt_PaddAlgo_fromDb(GWEN_DB_NODE *db); GWENHYWFAR_API int GWEN_Crypt_PaddAlgo_toDb(const GWEN_CRYPT_PADDALGO *a, GWEN_DB_NODE *db); GWENHYWFAR_API void GWEN_Crypt_PaddAlgo_Attach(GWEN_CRYPT_PADDALGO *a); GWENHYWFAR_API void GWEN_Crypt_PaddAlgo_free(GWEN_CRYPT_PADDALGO *a); GWENHYWFAR_API GWEN_CRYPT_PADDALGOID GWEN_Crypt_PaddAlgo_GetId(const GWEN_CRYPT_PADDALGO *a); GWENHYWFAR_API int GWEN_Crypt_PaddAlgo_GetPaddSize(const GWEN_CRYPT_PADDALGO *a); GWENHYWFAR_API void GWEN_Crypt_PaddAlgo_SetPaddSize(GWEN_CRYPT_PADDALGO *a, int s); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/crypt3/mdigestgc.c0000644000175000017500000001007212364015347015673 00000000000000/*************************************************************************** begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "mdigestgc_p.h" #include #include GWEN_INHERIT(GWEN_MDIGEST, GWEN_MDIGEST_GC) int GWEN_MDigest_Gc_Begin(GWEN_MDIGEST *md) { GWEN_MDIGEST_GC *xmd; int err; assert(md); xmd=GWEN_INHERIT_GETDATA(GWEN_MDIGEST, GWEN_MDIGEST_GC, md); assert(xmd); err=gcry_md_open(&xmd->handle, xmd->algo, xmd->flags); if (err) { DBG_INFO(GWEN_LOGDOMAIN, "gcry_md_open(): %d", err); return GWEN_ERROR_GENERIC; } xmd->isOpen=1; return 0; } int GWEN_MDigest_Gc_End(GWEN_MDIGEST *md) { GWEN_MDIGEST_GC *xmd; uint8_t *p; unsigned int len; assert(md); xmd=GWEN_INHERIT_GETDATA(GWEN_MDIGEST, GWEN_MDIGEST_GC, md); assert(xmd); gcry_md_final(xmd->handle); len=gcry_md_get_algo_dlen(xmd->algo); if (len<1) { DBG_INFO(GWEN_LOGDOMAIN, "gcry_md_get_algo_dlen(): %d", len); gcry_md_close(xmd->handle); xmd->isOpen=0; return GWEN_ERROR_GENERIC; } p=(uint8_t*)malloc(len); assert(p); memmove(p, gcry_md_read(xmd->handle, xmd->algo), len); GWEN_MDigest_SetDigestBuffer(md, p, len); gcry_md_close(xmd->handle); xmd->isOpen=0; return 0; } int GWEN_MDigest_Gc_Update(GWEN_MDIGEST *md, const uint8_t *buf, unsigned int l) { GWEN_MDIGEST_GC *xmd; assert(md); xmd=GWEN_INHERIT_GETDATA(GWEN_MDIGEST, GWEN_MDIGEST_GC, md); assert(xmd); if (xmd->isOpen==0) { DBG_INFO(GWEN_LOGDOMAIN, "MDigest not open"); return GWEN_ERROR_NOT_OPEN; } gcry_md_write(xmd->handle, buf, l); return 0; } GWENHYWFAR_CB void GWEN_Digest_Gc_freeData(GWEN_UNUSED void *bp, void *p) { GWEN_MDIGEST_GC *xmd; xmd=(GWEN_MDIGEST_GC*) p; if (xmd->isOpen) { gcry_md_close(xmd->handle); xmd->isOpen=0; } GWEN_FREE_OBJECT(xmd); } GWEN_MDIGEST *GWEN_MDigest_Gc_new(GWEN_CRYPT_HASHALGOID a) { GWEN_MDIGEST *md; GWEN_MDIGEST_GC *xmd; GWEN_NEW_OBJECT(GWEN_MDIGEST_GC, xmd) md=GWEN_MDigest_new(a); assert(md); GWEN_INHERIT_SETDATA(GWEN_MDIGEST, GWEN_MDIGEST_GC, md, xmd, GWEN_Digest_Gc_freeData) GWEN_MDigest_SetBeginFn(md, GWEN_MDigest_Gc_Begin); GWEN_MDigest_SetEndFn(md, GWEN_MDigest_Gc_End); GWEN_MDigest_SetUpdateFn(md, GWEN_MDigest_Gc_Update); return md; } GWEN_MDIGEST *GWEN_MDigest_Md5_new(void) { GWEN_MDIGEST *md; GWEN_MDIGEST_GC *xmd; md=GWEN_MDigest_Gc_new(GWEN_Crypt_HashAlgoId_Md5); assert(md); xmd=GWEN_INHERIT_GETDATA(GWEN_MDIGEST, GWEN_MDIGEST_GC, md); assert(xmd); xmd->algo=GCRY_MD_MD5; GWEN_MDigest_SetDigestLen(md, gcry_md_get_algo_dlen(xmd->algo)); return md; } GWEN_MDIGEST *GWEN_MDigest_Rmd160_new(void) { GWEN_MDIGEST *md; GWEN_MDIGEST_GC *xmd; md=GWEN_MDigest_Gc_new(GWEN_Crypt_HashAlgoId_Rmd160); assert(md); xmd=GWEN_INHERIT_GETDATA(GWEN_MDIGEST, GWEN_MDIGEST_GC, md); assert(xmd); xmd->algo=GCRY_MD_RMD160; GWEN_MDigest_SetDigestLen(md, gcry_md_get_algo_dlen(xmd->algo)); return md; } GWEN_MDIGEST *GWEN_MDigest_Sha1_new(void) { GWEN_MDIGEST *md; GWEN_MDIGEST_GC *xmd; md=GWEN_MDigest_Gc_new(GWEN_Crypt_HashAlgoId_Sha1); assert(md); xmd=GWEN_INHERIT_GETDATA(GWEN_MDIGEST, GWEN_MDIGEST_GC, md); assert(xmd); xmd->algo=GCRY_MD_SHA1; GWEN_MDigest_SetDigestLen(md, gcry_md_get_algo_dlen(xmd->algo)); return md; } GWEN_MDIGEST *GWEN_MDigest_Sha256_new(void) { GWEN_MDIGEST *md; GWEN_MDIGEST_GC *xmd; md=GWEN_MDigest_Gc_new(GWEN_Crypt_HashAlgoId_Sha256); assert(md); xmd=GWEN_INHERIT_GETDATA(GWEN_MDIGEST, GWEN_MDIGEST_GC, md); assert(xmd); xmd->algo=GCRY_MD_SHA256; xmd->flags=GCRY_MD_FLAG_SECURE; GWEN_MDigest_SetDigestLen(md, gcry_md_get_algo_dlen(xmd->algo)); return md; } gwenhywfar-4.15.2beta/src/crypt3/padd.c0000644000175000017500000005144612416477066014657 00000000000000/*************************************************************************** begin : Mon Jan 05 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "padd_p.h" #include #include #include #include #include #include #include static uint8_t nullarray[]= {0, 0, 0, 0, 0, 0, 0, 0}; /* * This code has been taken from OpenHBCI (rsakey.cpp, written by Fabian * Kaiser) */ unsigned char GWEN_Padd_permutate(unsigned char input) { unsigned char leftNibble; unsigned char rightNibble; static const unsigned char lookUp[2][16] = { {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}, {14,3,5,8,9,4,2,15,0,13,11,6,7,10,12,1} }; rightNibble = input & 15; leftNibble = input & 240; leftNibble = leftNibble / 16; rightNibble = lookUp[1][rightNibble]; leftNibble = lookUp[1][leftNibble]; leftNibble = leftNibble * 16; return leftNibble + rightNibble; } /* * The original code (in C++) has been written by Fabian Kaiser for OpenHBCI * (file rsakey.cpp). Translated to C by Martin Preuss */ int GWEN_Padd_PaddWithISO9796(GWEN_BUFFER *src) { unsigned char *p; unsigned int l; unsigned int i; unsigned char buffer[GWEN_PADD_ISO9796_KEYSIZE]; unsigned char hash[20]; unsigned char c; p=(unsigned char*)GWEN_Buffer_GetStart(src); l=GWEN_Buffer_GetUsedBytes(src); memmove(hash, p, l); /* src+src+src */ if (GWEN_Buffer_AppendBytes(src, (const char*)hash, l)) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return -1; } if (GWEN_Buffer_AppendBytes(src, (const char*)hash, l)) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return -1; } /* src=src(20,40) */ if (GWEN_Buffer_Crop(src, 20, 40)) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return -1; } memset(buffer, 0, sizeof(buffer)); /* append redundancy */ p=(unsigned char*)GWEN_Buffer_GetStart(src); for (i=0; i<=47; i++) { int j1, j2, j3; j1=1 + sizeof(buffer) - (2*i); j2=40-i; j3=sizeof(buffer) - (2*i); if (j1>=0 && j1<(int)sizeof(buffer) && j2>=0) { buffer[j1]=p[j2]; } if (j3>=0 && j3<(int)sizeof(buffer) && j2>=0) { buffer[j3]=GWEN_Padd_permutate(p[j2]); } } /* for */ /* copy last 16 bytes to the beginning */ memmove(buffer, buffer+(sizeof(buffer)-16), 16); p=buffer; /* finish */ c=p[sizeof(buffer)-1]; c = (c & 15) * 16; c += 6; p[sizeof(buffer)-1]=c; p[0] = p[0] & 127; p[0] = p[0] | 64; p[sizeof(buffer) - 40] = p[sizeof(buffer) - 40] ^ 1; GWEN_Buffer_Reset(src); if (GWEN_Buffer_AppendBytes(src, (const char*)buffer, sizeof(buffer))) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return -1; } return 0; } int GWEN_Padd_PaddWithIso9796_2(GWEN_BUFFER *buf, int dstSize) { unsigned int diff; char *p; int i; if ((unsigned int)dstSizey) { DBG_ERROR(GWEN_LOGDOMAIN, "Invalid padding (%d bytes ?)", paddLength); return -1; } GWEN_Buffer_Crop(src, 0, GWEN_Buffer_GetUsedBytes(src)-paddLength); GWEN_Buffer_SetPos(src, lastpos-paddLength); return 0; } int GWEN_Padd_PaddWithAnsiX9_23(GWEN_BUFFER *src) { return GWEN_Padd_PaddWithAnsiX9_23ToMultipleOf(src, 8); } int GWEN_Padd_UnpaddWithAnsiX9_23(GWEN_BUFFER *src) { return GWEN_Padd_UnpaddWithAnsiX9_23FromMultipleOf(src, 8); } int GWEN_Padd_PaddWithPkcs1Bt1(GWEN_BUFFER *buf, int dstSize) { unsigned int diff; char *p; if ((unsigned int)dstSize3) { memset(p, 0xff, diff-3); p+=diff-3; } *(p++)=0x00; return 0; } int GWEN_Padd_PaddWithPkcs1Bt2(GWEN_BUFFER *buf, int dstSize) { unsigned int diff; char *p; int i; if ((unsigned int)dstSize0; i++) { int rv; uint32_t l; counter[0]= (uint8_t)((i>>24) & 0xff); counter[1]= (uint8_t)((i>>16) & 0xff); counter[2]= (uint8_t)((i>>8) & 0xff); counter[3]= (uint8_t)(i & 0xff); rv=GWEN_MDigest_Begin(md); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=GWEN_MDigest_Update(md, pSeed, lSeed); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=GWEN_MDigest_Update(md, counter, 4); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=GWEN_MDigest_End(md); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } l=GWEN_MDigest_GetDigestSize(md); if (bytesLeft> (8-numberOfBitsInByte0); free(pDbMask); free(pDB); free(pSalt); return emLen; } int GWEN_Padd_VerifyPkcs1Pss(const uint8_t *pSrcBuffer, uint32_t lSrcBuffer, uint32_t nbits, const uint8_t *pHash, uint32_t lHash, uint32_t lSalt, GWEN_MDIGEST *md) { uint32_t emLen; const uint8_t *pSalt; uint8_t *pDB; uint32_t x; uint32_t i; int rv; const uint8_t *hashMBar; int numberOfBitsInByte0; emLen=nbits/8; if (nbits%8) emLen++; /* check for leading bits to be zero */ numberOfBitsInByte0=((nbits-1) & 0x07); if (numberOfBitsInByte0==0) { pSrcBuffer++; emLen--; } else { if (pSrcBuffer[0] & (0xff << numberOfBitsInByte0)) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad padding: leading bits must be zero (%d)", numberOfBitsInByte0); return GWEN_ERROR_BAD_DATA; } } /* check for key length */ if (emLen < (GWEN_MDigest_GetDigestSize(md)+lSalt+2)) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad padding: Key too small for data"); return GWEN_ERROR_BAD_DATA; } /* check for length of provided data */ if (lSrcBuffer < emLen) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad padding: Provided data too small (is %d, expected %d)", lSrcBuffer, emLen); return GWEN_ERROR_BAD_DATA; } /* get DB (PS | '01' | SALT) */ x=emLen-GWEN_MDigest_GetDigestSize(md)-1; pDB=(uint8_t*)malloc(x); hashMBar=pSrcBuffer+x; rv=GWEN_Padd_MGF1(pDB, x, hashMBar, GWEN_MDigest_GetDigestSize(md), md); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); free(pDB); return rv; } /* un-XOR DB using DBMask from source buffer (EM) */ for (i=0; i> (8-numberOfBitsInByte0)); /* pDB now contains PS | '01' | SALT */ /* recover salt: skip all '00' and wait for '01' */ for (i=0; (i<(x-1) && pDB[i]==0); i++); /* i now points to a byte which is not zero, expect it to be '01' */ if (pDB[i]!=0x01) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad padding: byte 0x01 missing before salt"); free(pDB); return GWEN_ERROR_BAD_DATA; } i++; /* check for length of salt */ if ((x-i)!=lSalt) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad padding: bad length for salt (is %d, should be %d)", x-i, lSalt); free(pDB); return GWEN_ERROR_BAD_DATA; } /* get pointer to salt */ pSalt=pDB+i; /* M'=00 00 00 00 00 00 00 00 | HASH(M) | SALT */ rv=GWEN_MDigest_Begin(md); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); free(pDB); return rv; } rv=GWEN_MDigest_Update(md, nullarray, 8); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); free(pDB); return rv; } if (lHash) { rv=GWEN_MDigest_Update(md, pHash, lHash); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); free(pDB); return rv; } } rv=GWEN_MDigest_Update(md, pSalt, lSalt); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); free(pDB); return rv; } rv=GWEN_MDigest_End(md); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); free(pDB); return rv; } if (memcmp(hashMBar, GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md))!=0) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad padding: hash does not match"); free(pDB); return GWEN_ERROR_VERIFY; } free(pDB); DBG_INFO(GWEN_LOGDOMAIN, "Hash ok."); return 0; } int GWEN_Padd_ApplyPaddAlgo(const GWEN_CRYPT_PADDALGO *a, GWEN_BUFFER *buf) { int rv; unsigned int diff; unsigned int bsize; unsigned int dstSize; unsigned int chunkSize; GWEN_CRYPT_PADDALGOID aid; assert(a); assert(buf); aid=GWEN_Crypt_PaddAlgo_GetId(a); if (aid==GWEN_Crypt_PaddAlgoId_None) /* short return if there is no padding to be done */ return 0; chunkSize=GWEN_Crypt_PaddAlgo_GetPaddSize(a); if (chunkSize==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Invalid chunk size (0)"); return GWEN_ERROR_INVALID; } bsize=GWEN_Buffer_GetUsedBytes(buf); dstSize=bsize+(chunkSize-1); dstSize=(dstSize/chunkSize)*chunkSize; diff=dstSize-bsize; DBG_INFO(GWEN_LOGDOMAIN, "Padding with algo \"%s\"", GWEN_Crypt_PaddAlgoId_toString(aid)); switch(aid) { case GWEN_Crypt_PaddAlgoId_None: rv=0; break; case GWEN_Crypt_PaddAlgoId_Iso9796_1A4: if (dstSize>96) { DBG_ERROR(GWEN_LOGDOMAIN, "Padding size must be <=96 bytes (is %d)", dstSize); return GWEN_ERROR_INVALID; } rv=GWEN_Padd_PaddWithISO9796(buf); break; case GWEN_Crypt_PaddAlgoId_Pkcs1_1: rv=GWEN_Padd_PaddWithPkcs1Bt1(buf, dstSize); break; case GWEN_Crypt_PaddAlgoId_Pkcs1_2: rv=GWEN_Padd_PaddWithPkcs1Bt2(buf, dstSize); break; case GWEN_Crypt_PaddAlgoId_LeftZero: rv=GWEN_Buffer_FillLeftWithBytes(buf, 0, diff); break; case GWEN_Crypt_PaddAlgoId_RightZero: rv=GWEN_Buffer_FillWithBytes(buf, 0, diff); break; case GWEN_Crypt_PaddAlgoId_AnsiX9_23: return GWEN_Padd_PaddWithAnsiX9_23(buf); case GWEN_Crypt_PaddAlgoId_Iso9796_2: return GWEN_Padd_PaddWithIso9796_2(buf, dstSize); case GWEN_Crypt_PaddAlgoId_Iso9796_1: default: DBG_INFO(GWEN_LOGDOMAIN, "Algo-Type %d (%s) not supported", aid, GWEN_Crypt_PaddAlgoId_toString(aid)); return GWEN_ERROR_NOT_AVAILABLE; } if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Error padding with algo %d (%s)", aid, GWEN_Crypt_PaddAlgoId_toString(aid)); return GWEN_ERROR_GENERIC; } return rv; } int GWEN_Padd_UnapplyPaddAlgo(const GWEN_CRYPT_PADDALGO *a, GWEN_BUFFER *buf) { int rv; GWEN_CRYPT_PADDALGOID aid; assert(a); assert(buf); aid=GWEN_Crypt_PaddAlgo_GetId(a); DBG_INFO(GWEN_LOGDOMAIN, "Unpadding with algo \"%s\"", GWEN_Crypt_PaddAlgoId_toString(aid)); switch(aid) { case GWEN_Crypt_PaddAlgoId_None: rv=0; break; case GWEN_Crypt_PaddAlgoId_Pkcs1_1: rv=GWEN_Padd_UnpaddWithPkcs1Bt1(buf); break; case GWEN_Crypt_PaddAlgoId_Pkcs1_2: rv=GWEN_Padd_UnpaddWithPkcs1Bt2(buf); break; case GWEN_Crypt_PaddAlgoId_AnsiX9_23: return GWEN_Padd_UnpaddWithAnsiX9_23(buf); case GWEN_Crypt_PaddAlgoId_Iso9796_2: return GWEN_Padd_UnpaddWithIso9796_2(buf); case GWEN_Crypt_PaddAlgoId_Iso9796_1: case GWEN_Crypt_PaddAlgoId_LeftZero: case GWEN_Crypt_PaddAlgoId_RightZero: case GWEN_Crypt_PaddAlgoId_Iso9796_1A4: default: DBG_INFO(GWEN_LOGDOMAIN, "Algo-Type %d (%s) not supported", aid, GWEN_Crypt_PaddAlgoId_toString(aid)); return GWEN_ERROR_NOT_AVAILABLE; } if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Error padding with algo %d (%s)", aid, GWEN_Crypt_PaddAlgoId_toString(aid)); return GWEN_ERROR_GENERIC; } return rv; } gwenhywfar-4.15.2beta/src/crypt3/cryptkey_l.h0000644000175000017500000000146412364015347016124 00000000000000/************************************************************************************************* $RCSfile$ ------------------- cvs : $Id: crypttoken.h 1113 2007-01-10 09:14:16Z martin $ begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de ************************************************************************************************* * Please see toplevel file COPYING for license details * *************************************************************************************************/ #ifndef GWEN_CRYPT_KEY_L_H #define GWEN_CRYPT_KEY_L_H #include int GWEN_Crypt3_ModuleInit(void); int GWEN_Crypt3_ModuleFini(void); #endif gwenhywfar-4.15.2beta/src/crypt3/cryptkeyrsa.c0000644000175000017500000006136312416477066016326 00000000000000/*************************************************************************** begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "cryptkeyrsa_p.h" #include #include #include GWEN_INHERIT(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_RSA) #if 0 static void dumpKeyData(gcry_ac_data_t data) { int i; unsigned int l; l=gcry_ac_data_length(data); for (i=0; i0); snprintf(numbuf, sizeof(numbuf)-1, "%d", nbits); if (use65537e) { snprintf(buffer, sizeof(buffer)-1, "(genkey\n" " (rsa\n" " (nbits %zd:%d)\n" " (rsa-use-e 5:65537)\n" " ))", strlen(numbuf), nbits); } else snprintf(buffer, sizeof(buffer)-1, "(genkey\n" " (rsa\n" " (nbits %zd:%d)\n" " (rsa-use-e 1:0)\n" " ))", strlen(numbuf), nbits); buffer[sizeof(buffer)-1]=0; /*DBG_ERROR(0, "Genkey string: [%s]", buffer);*/ rc=gcry_sexp_new(&keyparm, buffer, 0, 1); if (rc) { DBG_ERROR(GWEN_LOGDOMAIN, "Error creating S-expression: %s", gpg_strerror (rc)); return GWEN_ERROR_GENERIC; } rc=gcry_pk_genkey(&key, keyparm); gcry_sexp_release(keyparm); if (rc) { DBG_ERROR(GWEN_LOGDOMAIN, "Error generating RSA key: %s", gpg_strerror (rc)); return GWEN_ERROR_GENERIC; } pkey=gcry_sexp_find_token(key, "public-key", 0); if (!pkey) { DBG_ERROR(GWEN_LOGDOMAIN, "Public part missing in return value"); gcry_sexp_release(key); return GWEN_ERROR_GENERIC; } else { int rv; gcry_mpi_t n=NULL; gcry_mpi_t e=NULL; GWEN_CRYPT_KEY *k; GWEN_CRYPT_KEY_RSA *xk; /* get public exponent */ rv=GWEN_Crypt_KeyRsa__getNamedElement(pkey, "n", &n); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); gcry_sexp_release(key); return GWEN_ERROR_GENERIC; } rv=GWEN_Crypt_KeyRsa__getNamedElement(pkey, "e", &e); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); gcry_mpi_release(n); gcry_sexp_release(key); return GWEN_ERROR_GENERIC; } /* create public key */ k=GWEN_Crypt_Key_new(GWEN_Crypt_CryptAlgoId_Rsa, nbytes); GWEN_NEW_OBJECT(GWEN_CRYPT_KEY_RSA, xk); GWEN_INHERIT_SETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_RSA, k, xk, GWEN_Crypt_KeyRsa_freeData); GWEN_Crypt_Key_SetSignFn(k, GWEN_Crypt_KeyRsa_Sign); GWEN_Crypt_Key_SetVerifyFn(k, GWEN_Crypt_KeyRsa_Verify); GWEN_Crypt_Key_SetEncipherFn(k, GWEN_Crypt_KeyRsa_Encipher); GWEN_Crypt_Key_SetDecipherFn(k, GWEN_Crypt_KeyRsa_Decipher); xk->modulus=gcry_mpi_copy(n); xk->pubExponent=gcry_mpi_copy(e); xk->pub=1; pubKey=k; gcry_mpi_release(e); gcry_mpi_release(n); } pkey=gcry_sexp_find_token(key, "private-key", 0); if (!pkey) { DBG_ERROR(GWEN_LOGDOMAIN, "Private part missing in return value"); gcry_sexp_release(key); return GWEN_ERROR_GENERIC; } else { int rv; gcry_mpi_t n=NULL; gcry_mpi_t e=NULL; gcry_mpi_t d=NULL; GWEN_CRYPT_KEY *k; GWEN_CRYPT_KEY_RSA *xk; /* get public exponent */ rv=GWEN_Crypt_KeyRsa__getNamedElement(pkey, "n", &n); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); gcry_sexp_release(key); return GWEN_ERROR_GENERIC; } rv=GWEN_Crypt_KeyRsa__getNamedElement(pkey, "e", &e); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); gcry_mpi_release(n); gcry_sexp_release(key); return GWEN_ERROR_GENERIC; } rv=GWEN_Crypt_KeyRsa__getNamedElement(pkey, "d", &d); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); gcry_mpi_release(e); gcry_mpi_release(n); gcry_sexp_release(key); return GWEN_ERROR_GENERIC; } /* create private key */ k=GWEN_Crypt_Key_new(GWEN_Crypt_CryptAlgoId_Rsa, nbytes); GWEN_NEW_OBJECT(GWEN_CRYPT_KEY_RSA, xk); GWEN_INHERIT_SETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_RSA, k, xk, GWEN_Crypt_KeyRsa_freeData); GWEN_Crypt_Key_SetSignFn(k, GWEN_Crypt_KeyRsa_Sign); GWEN_Crypt_Key_SetVerifyFn(k, GWEN_Crypt_KeyRsa_Verify); GWEN_Crypt_Key_SetEncipherFn(k, GWEN_Crypt_KeyRsa_Encipher); GWEN_Crypt_Key_SetDecipherFn(k, GWEN_Crypt_KeyRsa_Decipher); xk->modulus=gcry_mpi_copy(n); xk->pubExponent=gcry_mpi_copy(e); xk->privExponent=gcry_mpi_copy(d); xk->pub=0; secretKey=k; gcry_mpi_release(d); gcry_mpi_release(e); gcry_mpi_release(n); } gcry_sexp_release(key); *pPubKey=pubKey; *pSecretKey=secretKey; return 0; } int GWEN_Crypt_KeyRsa_GeneratePair2(unsigned int nbits, int use65537e, GWEN_CRYPT_KEY **pPubKey, GWEN_CRYPT_KEY **pSecretKey) { if (nbits%8) { DBG_ERROR(GWEN_LOGDOMAIN, "nbits is required to be a multiple of 8 (%d)", nbits); return GWEN_ERROR_INVALID; } return GWEN_Crypt_KeyRsa_GeneratePair(nbits/8, use65537e, pPubKey, pSecretKey); } GWENHYWFAR_CB int GWEN_Crypt_KeyRsa_Sign(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, uint8_t *pSignatureData, uint32_t *pSignatureLen) { GWEN_CRYPT_KEY_RSA *xk; gcry_error_t err; size_t nscanned; gcry_mpi_t mpi_in=NULL; gcry_mpi_t mpi_sigout1; gcry_mpi_t mpi_sigout2=NULL; size_t nwritten; assert(k); xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_RSA, k); assert(xk); if (xk->modulus==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No modulus in key data"); return GWEN_ERROR_BAD_DATA; } if (xk->privExponent==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No secret exponent in key data"); return GWEN_ERROR_BAD_DATA; } /* convert input to MPI */ err=gcry_mpi_scan(&mpi_in, GCRYMPI_FMT_USG, pInData, inLen, &nscanned); if (err) { DBG_INFO(GWEN_LOGDOMAIN, "gcry_mpi_scan(): %s", gcry_strerror(err)); gcry_mpi_release(mpi_in); return GWEN_ERROR_BAD_DATA; } /* create first signature */ mpi_sigout1=gcry_mpi_new(GWEN_Crypt_Key_GetKeySize(k)); gcry_mpi_powm(mpi_sigout1, mpi_in, xk->privExponent, xk->modulus); if (!(xk->flags & GWEN_CRYPT_KEYRSA_FLAGS_DIRECTSIGN)) { /* create second signature */ mpi_sigout2=gcry_mpi_new(GWEN_Crypt_Key_GetKeySize(k)); gcry_mpi_sub(mpi_sigout2, xk->modulus, mpi_sigout1); if (gcry_mpi_cmp(mpi_sigout2, mpi_sigout1)<0) { DBG_DEBUG(GWEN_LOGDOMAIN, "Choosing 2nd variant"); gcry_mpi_set(mpi_sigout1, mpi_sigout2); } } /* release unneeded objects */ gcry_mpi_release(mpi_sigout2); gcry_mpi_release(mpi_in); /* convert signature MPI */ err=gcry_mpi_print(GCRYMPI_FMT_USG, pSignatureData, *pSignatureLen, &nwritten, mpi_sigout1); gcry_mpi_release(mpi_sigout1); if (err) { DBG_INFO(GWEN_LOGDOMAIN, "gcry_mpi_print(): %s", gcry_strerror(err)); return GWEN_ERROR_BAD_DATA; } *pSignatureLen=nwritten; return 0; } static GWENHYWFAR_CB int GWEN_Crypt_KeyRsa_Verify(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, const uint8_t *pSignatureData, uint32_t signatureLen) { GWEN_CRYPT_KEY_RSA *xk; gcry_error_t err; size_t nscanned; gcry_mpi_t mpi_in=NULL; gcry_mpi_t mpi_sigin1=NULL; gcry_mpi_t mpi_sigout; assert(k); xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_RSA, k); assert(xk); if (xk->modulus==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No modulus in key data"); return GWEN_ERROR_BAD_DATA; } if (xk->pubExponent==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No public exponent in key data"); return GWEN_ERROR_BAD_DATA; } /* convert input to MPI */ err=gcry_mpi_scan(&mpi_in, GCRYMPI_FMT_USG, pInData, inLen, &nscanned); if (err) { DBG_INFO(GWEN_LOGDOMAIN, "gcry_mpi_scan(): %s", gcry_strerror(err)); gcry_mpi_release(mpi_in); return GWEN_ERROR_BAD_DATA; } /* convert signature to MPI */ err=gcry_mpi_scan(&mpi_sigin1, GCRYMPI_FMT_USG, pSignatureData, signatureLen, &nscanned); if (err) { DBG_INFO(GWEN_LOGDOMAIN, "gcry_mpi_scan(): %s", gcry_strerror(err)); gcry_mpi_release(mpi_sigin1); gcry_mpi_release(mpi_in); return GWEN_ERROR_BAD_DATA; } /* create signature */ mpi_sigout=gcry_mpi_new(GWEN_Crypt_Key_GetKeySize(k)); gcry_mpi_powm(mpi_sigout, mpi_sigin1, xk->pubExponent, xk->modulus); /* compare */ if (gcry_mpi_cmp(mpi_sigout, mpi_in)) { gcry_mpi_t mpi_sigin2; mpi_sigin2=gcry_mpi_new(GWEN_Crypt_Key_GetKeySize(k)); DBG_DEBUG(GWEN_LOGDOMAIN, "Trying 2nd variant"); gcry_mpi_sub(mpi_sigin2, xk->modulus, mpi_sigin1); gcry_mpi_powm(mpi_sigout, mpi_sigin2, xk->pubExponent, xk->modulus); if (gcry_mpi_cmp(mpi_sigout, mpi_in)) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad signature"); gcry_mpi_release(mpi_sigin2); gcry_mpi_release(mpi_sigout); gcry_mpi_release(mpi_sigin1); gcry_mpi_release(mpi_in); return GWEN_ERROR_VERIFY; } gcry_mpi_release(mpi_sigin2); } gcry_mpi_release(mpi_sigout); gcry_mpi_release(mpi_sigin1); gcry_mpi_release(mpi_in); return 0; } static GWENHYWFAR_CB int GWEN_Crypt_KeyRsa_Encipher(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen) { GWEN_CRYPT_KEY_RSA *xk; gcry_error_t err; size_t nscanned; gcry_mpi_t mpi_in=NULL; gcry_mpi_t mpi_out; size_t nwritten; assert(k); xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_RSA, k); assert(xk); if (xk->modulus==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No modulus in key data"); return GWEN_ERROR_BAD_DATA; } if (xk->pubExponent==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No public exponent in key data"); return GWEN_ERROR_BAD_DATA; } /* convert input to MPI */ err=gcry_mpi_scan(&mpi_in, GCRYMPI_FMT_USG, pInData, inLen, &nscanned); if (err) { DBG_INFO(GWEN_LOGDOMAIN, "gcry_mpi_scan(): %s", gcry_strerror(err)); gcry_mpi_release(mpi_in); return GWEN_ERROR_BAD_DATA; } /* encrypt */ mpi_out=gcry_mpi_new(GWEN_Crypt_Key_GetKeySize(k)); gcry_mpi_powm(mpi_out, mpi_in, xk->pubExponent, xk->modulus); /* release unneeded objects */ gcry_mpi_release(mpi_in); /* convert result MPI */ err=gcry_mpi_print(GCRYMPI_FMT_USG, pOutData, *pOutLen, &nwritten, mpi_out); gcry_mpi_release(mpi_out); if (err) { DBG_INFO(GWEN_LOGDOMAIN, "gcry_mpi_print(): %s", gcry_strerror(err)); return GWEN_ERROR_BAD_DATA; } *pOutLen=nwritten; return 0; } static GWENHYWFAR_CB int GWEN_Crypt_KeyRsa_Decipher(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen) { GWEN_CRYPT_KEY_RSA *xk; gcry_error_t err; size_t nscanned; gcry_mpi_t mpi_in=NULL; gcry_mpi_t mpi_out; size_t nwritten; assert(k); xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_RSA, k); assert(xk); if (xk->modulus==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No modulus in key data"); return GWEN_ERROR_BAD_DATA; } if (xk->privExponent==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No secret exponent in key data"); return GWEN_ERROR_BAD_DATA; } /* convert input to MPI */ err=gcry_mpi_scan(&mpi_in, GCRYMPI_FMT_USG, pInData, inLen, &nscanned); if (err) { DBG_INFO(GWEN_LOGDOMAIN, "gcry_mpi_scan(): %s", gcry_strerror(err)); gcry_mpi_release(mpi_in); return GWEN_ERROR_BAD_DATA; } /* decrypt */ mpi_out=gcry_mpi_new(GWEN_Crypt_Key_GetKeySize(k)); gcry_mpi_powm(mpi_out, mpi_in, xk->privExponent, xk->modulus); /* release unneeded objects */ gcry_mpi_release(mpi_in); /* convert result MPI */ err=gcry_mpi_print(GCRYMPI_FMT_USG, pOutData, *pOutLen, &nwritten, mpi_out); gcry_mpi_release(mpi_out); if (err) { DBG_INFO(GWEN_LOGDOMAIN, "gcry_mpi_print(): %s", gcry_strerror(err)); return GWEN_ERROR_BAD_DATA; } *pOutLen=nwritten; return 0; } static int GWEN_Crypt_KeyRsa__ReadMpi(GWEN_DB_NODE *db, const char *dbName, gcry_mpi_t *pMpi) { gcry_error_t err; const void *p; unsigned int len; gcry_mpi_t mpi=NULL; size_t nscanned=0; /* read n */ p=GWEN_DB_GetBinValue(db, dbName, 0, NULL, 0, &len); if (p==NULL || len<1) { DBG_INFO(GWEN_LOGDOMAIN, "Missing %s", dbName); return GWEN_ERROR_NO_DATA; } err=gcry_mpi_scan(&mpi, GCRYMPI_FMT_USG, p, len, &nscanned); if (err) { DBG_INFO(GWEN_LOGDOMAIN, "gcry_mpi_scan(): %s", gcry_strerror(err)); gcry_mpi_release(mpi); return GWEN_ERROR_GENERIC; } if (nscanned<1) { if (mpi==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Empty %s (%d)", dbName, (int)nscanned); return GWEN_ERROR_BAD_DATA; } } *pMpi=mpi; return 0; } static int GWEN_Crypt_KeyRsa__WriteMpi(GWEN_DB_NODE *db, const char *dbName, const gcry_mpi_t mpi) { gcry_error_t err; unsigned char *buf; size_t nbytes; /* write mpi as bin into a buffer which will be allocates by this function */ err=gcry_mpi_aprint(GCRYMPI_FMT_USG, &buf, &nbytes, mpi); if (err) { DBG_INFO(GWEN_LOGDOMAIN, "gcry_mpi_aprint(%s): %s", dbName, gcry_strerror(err)); return GWEN_ERROR_GENERIC; } GWEN_DB_SetBinValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, dbName, buf, nbytes); gcry_free(buf); return 0; } static int GWEN_Crypt_KeyRsa__MpiToBuffer(const gcry_mpi_t mpi, unsigned char *buf, size_t nbytes) { gcry_error_t err; size_t nwritten=0; /* write mpi as bin into the given buffer */ err=gcry_mpi_print(GCRYMPI_FMT_USG, buf, nbytes, &nwritten, mpi); if (err) { DBG_INFO(GWEN_LOGDOMAIN, "gcry_mpi_print(): %s", gcry_strerror(err)); return GWEN_ERROR_GENERIC; } return nwritten; } static GWENHYWFAR_CB void GWEN_Crypt_KeyRsa_freeData(GWEN_UNUSED void *bp, void *p) { GWEN_CRYPT_KEY_RSA *xk; xk=(GWEN_CRYPT_KEY_RSA*) p; if (xk->modulus) gcry_mpi_release(xk->modulus); if (xk->pubExponent) gcry_mpi_release(xk->pubExponent); if (xk->privExponent) gcry_mpi_release(xk->privExponent); GWEN_FREE_OBJECT(xk); } GWEN_CRYPT_KEY *GWEN_Crypt_KeyRsa_fromDb(GWEN_DB_NODE *db) { int rv; int isPublic; GWEN_CRYPT_KEY *k; GWEN_CRYPT_KEY_RSA *xk; GWEN_DB_NODE *dbR; dbR=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "rsa"); if (dbR==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "DB does not contain an RSA key (no RSA group)"); return NULL; } k=GWEN_Crypt_Key_fromDb(db); if (k==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return NULL; } if (GWEN_Crypt_Key_GetCryptAlgoId(k)!=GWEN_Crypt_CryptAlgoId_Rsa) { DBG_ERROR(GWEN_LOGDOMAIN, "DB does not contain an RSA key"); GWEN_Crypt_Key_free(k); return NULL; } /* extend key */ GWEN_NEW_OBJECT(GWEN_CRYPT_KEY_RSA, xk); GWEN_INHERIT_SETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_RSA, k, xk, GWEN_Crypt_KeyRsa_freeData); GWEN_Crypt_Key_SetSignFn(k, GWEN_Crypt_KeyRsa_Sign); GWEN_Crypt_Key_SetVerifyFn(k, GWEN_Crypt_KeyRsa_Verify); GWEN_Crypt_Key_SetEncipherFn(k, GWEN_Crypt_KeyRsa_Encipher); GWEN_Crypt_Key_SetDecipherFn(k, GWEN_Crypt_KeyRsa_Decipher); isPublic=GWEN_DB_GetIntValue(dbR, "isPublic", 0, 1); xk->pub=isPublic; xk->flags=GWEN_DB_GetIntValue(dbR, "flags", 0, 0); /* read data */ rv=GWEN_Crypt_KeyRsa__ReadMpi(dbR, "n", &(xk->modulus)); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Crypt_Key_free(k); return NULL; } rv=GWEN_Crypt_KeyRsa__ReadMpi(dbR, "e", &(xk->pubExponent)); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Crypt_Key_free(k); return NULL; } if (!isPublic) { rv=GWEN_Crypt_KeyRsa__ReadMpi(dbR, "d", &(xk->privExponent)); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Crypt_Key_free(k); return NULL; } } return k; } int GWEN_Crypt_KeyRsa_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db, int pub) { GWEN_CRYPT_KEY_RSA *xk; GWEN_DB_NODE *dbR; int rv; assert(k); xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_RSA, k); assert(xk); if (xk->pub && !pub) { DBG_ERROR(GWEN_LOGDOMAIN, "Can't write public key as secret key"); return GWEN_ERROR_INVALID; } #if 0 DBG_ERROR(0, "toDb (%s):", pub?"public":"private"); dumpKeyData(ds); #endif /* let key module write basic key info */ rv=GWEN_Crypt_Key_toDb(k, db); if (rv) return rv; /* write RSA stuff into our own group */ dbR=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "rsa"); assert(dbR); GWEN_DB_SetIntValue(dbR, GWEN_DB_FLAGS_OVERWRITE_VARS, "isPublic", pub); GWEN_DB_SetIntValue(dbR, GWEN_DB_FLAGS_OVERWRITE_VARS, "flags", xk->flags); /* store n */ rv=GWEN_Crypt_KeyRsa__WriteMpi(dbR, "n", xk->modulus); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } /* store e */ rv=GWEN_Crypt_KeyRsa__WriteMpi(dbR, "e", xk->pubExponent); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } if (!pub) { /* store d */ rv=GWEN_Crypt_KeyRsa__WriteMpi(dbR, "d", xk->privExponent); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } return 0; } int GWEN_Crypt_KeyRsa_GetModulus(const GWEN_CRYPT_KEY *k, uint8_t *buffer, uint32_t *pBufLen) { GWEN_CRYPT_KEY_RSA *xk; int rv; assert(k); xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_RSA, k); assert(xk); rv=GWEN_Crypt_KeyRsa__MpiToBuffer(xk->modulus, buffer, *pBufLen); if (rv<1) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); if (rv<0) return rv; return GWEN_ERROR_GENERIC; } *pBufLen=rv; return 0; } int GWEN_Crypt_KeyRsa_GetExponent(const GWEN_CRYPT_KEY *k, uint8_t *buffer, uint32_t *pBufLen) { GWEN_CRYPT_KEY_RSA *xk; int rv; assert(k); xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_RSA, k); assert(xk); rv=GWEN_Crypt_KeyRsa__MpiToBuffer(xk->pubExponent, buffer, *pBufLen); if (rv<1) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); if (rv<0) return rv; return GWEN_ERROR_GENERIC; } *pBufLen=rv; return 0; } int GWEN_Crypt_KeyRsa_GetSecretExponent(const GWEN_CRYPT_KEY *k, uint8_t *buffer, uint32_t *pBufLen) { GWEN_CRYPT_KEY_RSA *xk; int rv; assert(k); xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_RSA, k); assert(xk); rv=GWEN_Crypt_KeyRsa__MpiToBuffer(xk->privExponent, buffer, *pBufLen); if (rv<1) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); if (rv<0) return rv; return GWEN_ERROR_GENERIC; } *pBufLen=rv; return 0; } GWEN_CRYPT_KEY *GWEN_Crypt_KeyRsa_fromModExp(unsigned int nbytes, const uint8_t *pModulus, uint32_t lModulus, const uint8_t *pExponent, uint32_t lExponent) { GWEN_DB_NODE *dbKey; GWEN_DB_NODE *dbR; GWEN_CRYPT_KEY *key; assert(nbytes); assert(pModulus); assert(lModulus); assert(pExponent); assert(lExponent); dbKey=GWEN_DB_Group_new("key"); dbR=GWEN_DB_GetGroup(dbKey, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "rsa"); /* basic key stuff */ GWEN_DB_SetCharValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "cryptAlgoId", GWEN_Crypt_CryptAlgoId_toString(GWEN_Crypt_CryptAlgoId_Rsa)); GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "keySize", nbytes); /* RSA stuff */ GWEN_DB_SetIntValue(dbR, GWEN_DB_FLAGS_OVERWRITE_VARS, "isPublic", 1); GWEN_DB_SetBinValue(dbR, GWEN_DB_FLAGS_OVERWRITE_VARS, "n", pModulus, lModulus); GWEN_DB_SetBinValue(dbR, GWEN_DB_FLAGS_OVERWRITE_VARS, "e", pExponent, lExponent); /* create key from DB */ key=GWEN_Crypt_KeyRsa_fromDb(dbKey); if (key==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Internal error: Bad RSA key group"); GWEN_DB_Dump(dbKey, 2); GWEN_DB_Group_free(dbKey); return NULL; } GWEN_DB_Group_free(dbKey); return key; } GWEN_CRYPT_KEY *GWEN_Crypt_KeyRsa_fromModPrivExp(unsigned int nbytes, const uint8_t *pModulus, uint32_t lModulus, const uint8_t *pExponent, uint32_t lExponent, const uint8_t *pPrivExponent, uint32_t lPrivExponent) { GWEN_DB_NODE *dbKey; GWEN_DB_NODE *dbR; GWEN_CRYPT_KEY *key; assert(nbytes); assert(pModulus); assert(lModulus); assert(pExponent); assert(lExponent); assert(pPrivExponent); assert(lPrivExponent); dbKey=GWEN_DB_Group_new("key"); dbR=GWEN_DB_GetGroup(dbKey, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "rsa"); /* basic key stuff */ GWEN_DB_SetCharValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "cryptAlgoId", GWEN_Crypt_CryptAlgoId_toString(GWEN_Crypt_CryptAlgoId_Rsa)); GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "keySize", nbytes); /* RSA stuff */ GWEN_DB_SetIntValue(dbR, GWEN_DB_FLAGS_OVERWRITE_VARS, "isPublic", 0); GWEN_DB_SetBinValue(dbR, GWEN_DB_FLAGS_OVERWRITE_VARS, "n", pModulus, lModulus); GWEN_DB_SetBinValue(dbR, GWEN_DB_FLAGS_OVERWRITE_VARS, "e", pExponent, lExponent); GWEN_DB_SetBinValue(dbR, GWEN_DB_FLAGS_OVERWRITE_VARS, "d", pPrivExponent, lPrivExponent); /* create key from DB */ key=GWEN_Crypt_KeyRsa_fromDb(dbKey); if (key==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Internal error: Bad RSA key group"); GWEN_DB_Dump(dbKey, 2); GWEN_DB_Group_free(dbKey); return NULL; } GWEN_DB_Group_free(dbKey); return key; } GWEN_CRYPT_KEY *GWEN_Crypt_KeyRsa_dup(const GWEN_CRYPT_KEY *k) { GWEN_CRYPT_KEY_RSA *xk; GWEN_DB_NODE *dbKey; GWEN_CRYPT_KEY *nk; int rv; assert(k); xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_RSA, k); assert(xk); dbKey=GWEN_DB_Group_new("dbKey"); rv=GWEN_Crypt_KeyRsa_toDb(k, dbKey, xk->pub); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbKey); return NULL; } nk=GWEN_Crypt_KeyRsa_fromDb(dbKey); GWEN_DB_Group_free(dbKey); if (nk==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Could not create key"); } GWEN_Crypt_KeyRsa_SetFlags(nk, xk->flags); return nk; } uint32_t GWEN_Crypt_KeyRsa_GetFlags(const GWEN_CRYPT_KEY *k) { GWEN_CRYPT_KEY_RSA *xk; assert(k); xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_RSA, k); assert(xk); return xk->flags; } void GWEN_Crypt_KeyRsa_SetFlags(GWEN_CRYPT_KEY *k, uint32_t fl) { GWEN_CRYPT_KEY_RSA *xk; assert(k); xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_RSA, k); assert(xk); xk->flags=fl; } void GWEN_Crypt_KeyRsa_AddFlags(GWEN_CRYPT_KEY *k, uint32_t fl) { GWEN_CRYPT_KEY_RSA *xk; assert(k); xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_RSA, k); assert(xk); xk->flags|=fl; } void GWEN_Crypt_KeyRsa_SubFlags(GWEN_CRYPT_KEY *k, uint32_t fl) { GWEN_CRYPT_KEY_RSA *xk; assert(k); xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_RSA, k); assert(xk); xk->flags&=~fl; } gwenhywfar-4.15.2beta/src/crypt3/padd_p.h0000644000175000017500000000353612364015347015170 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Jan 05 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_PADD_P_H #define GWEN_PADD_P_H #define GWEN_PADD_ISO9796_KEYSIZE 96 #include unsigned char GWEN_Padd_permutate(unsigned char input); int GWEN_Padd__UnpaddWithPkcs1Bt1Or2(GWEN_BUFFER *buf); #endif /* GWEN_PADD_P_H */ gwenhywfar-4.15.2beta/src/crypt3/hashalgo.c0000644000175000017500000001147512416477066015533 00000000000000/*************************************************************************** begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "hashalgo_p.h" #include #include GWEN_LIST2_FUNCTIONS(GWEN_CRYPT_HASHALGO, GWEN_Crypt_HashAlgo) GWEN_CRYPT_HASHALGOID GWEN_Crypt_HashAlgoId_fromString(const char *s) { assert(s); if (strcasecmp(s, "none")==0) return GWEN_Crypt_HashAlgoId_None; else if (strcasecmp(s, "sha1")==0) return GWEN_Crypt_HashAlgoId_Sha1; else if (strcasecmp(s, "rmd160")==0) return GWEN_Crypt_HashAlgoId_Rmd160; else if (strcasecmp(s, "md5")==0) return GWEN_Crypt_HashAlgoId_Md5; else if (strcasecmp(s, "any")==0) return GWEN_Crypt_HashAlgoId_Any; else if (strcasecmp(s, "sha256")==0) return GWEN_Crypt_HashAlgoId_Sha256; return GWEN_Crypt_HashAlgoId_Unknown; } const char *GWEN_Crypt_HashAlgoId_toString(GWEN_CRYPT_HASHALGOID a) { switch(a) { case GWEN_Crypt_HashAlgoId_None: return "none"; case GWEN_Crypt_HashAlgoId_Sha1: return "sha1"; case GWEN_Crypt_HashAlgoId_Rmd160: return "rmd160"; case GWEN_Crypt_HashAlgoId_Md5: return "md5"; case GWEN_Crypt_HashAlgoId_Sha256: return "sha256"; case GWEN_Crypt_HashAlgoId_Any: return "any"; default: return "unknown"; } } GWEN_CRYPT_HASHALGO *GWEN_Crypt_HashAlgo_new(GWEN_CRYPT_HASHALGOID id) { GWEN_CRYPT_HASHALGO *a; GWEN_NEW_OBJECT(GWEN_CRYPT_HASHALGO, a); a->refCount=1; a->id=id; return a; } void GWEN_Crypt_HashAlgo_Attach(GWEN_CRYPT_HASHALGO *a) { assert(a); assert(a->refCount); a->refCount++; } GWEN_CRYPT_HASHALGO *GWEN_Crypt_HashAlgo_fromDb(GWEN_DB_NODE *db) { const char *s; assert(db); s=GWEN_DB_GetCharValue(db, "id", 0, NULL); if (s) { GWEN_CRYPT_HASHALGO *a; GWEN_CRYPT_HASHALGOID id; const void *p; unsigned int len; id=GWEN_Crypt_HashAlgoId_fromString(s); if (id==GWEN_Crypt_HashAlgoId_Unknown) { DBG_INFO(GWEN_LOGDOMAIN, "Unknown hashalgo id [%s]", s); return NULL; } a=GWEN_Crypt_HashAlgo_new(id); assert(a); p=GWEN_DB_GetBinValue(db, "initVector", 0, NULL, 0, &len); if (p && len) GWEN_Crypt_HashAlgo_SetInitVector(a, p, len); return a; } else { DBG_INFO(GWEN_LOGDOMAIN, "Missing hashalgo id"); return NULL; } } int GWEN_Crypt_HashAlgo_toDb(const GWEN_CRYPT_HASHALGO *a, GWEN_DB_NODE *db) { assert(a); assert(a->refCount); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "id", GWEN_Crypt_HashAlgoId_toString(a->id)); if (a->pInitVector && a->lInitVector) GWEN_DB_SetBinValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "initVector", a->pInitVector, a->lInitVector); return 0; } GWEN_CRYPT_HASHALGO *GWEN_Crypt_HashAlgo_dup(const GWEN_CRYPT_HASHALGO *na) { GWEN_CRYPT_HASHALGO *a; assert(na); a=GWEN_Crypt_HashAlgo_new(na->id); if (na->pInitVector && na->lInitVector) { a->pInitVector=(uint8_t*) malloc(na->lInitVector); if (a->pInitVector==NULL) { GWEN_Crypt_HashAlgo_free(a); return NULL; } else memmove(a->pInitVector, na->pInitVector, na->lInitVector); a->lInitVector=na->lInitVector; } return a; } void GWEN_Crypt_HashAlgo_free(GWEN_CRYPT_HASHALGO *a) { if (a) { assert(a->refCount); if (a->refCount==1) { if (a->pInitVector) { free(a->pInitVector); a->pInitVector=NULL; } a->refCount--; GWEN_FREE_OBJECT(a); } else { a->refCount--; } } } GWEN_CRYPT_HASHALGOID GWEN_Crypt_HashAlgo_GetId(const GWEN_CRYPT_HASHALGO *a) { assert(a); assert(a->refCount); return a->id; } uint8_t *GWEN_Crypt_HashAlgo_GetInitVectorPtr(const GWEN_CRYPT_HASHALGO *a) { assert(a); assert(a->refCount); return a->pInitVector; } uint32_t GWEN_Crypt_HashAlgo_GetInitVectorLen(const GWEN_CRYPT_HASHALGO *a) { assert(a); assert(a->refCount); return a->lInitVector; } int GWEN_Crypt_HashAlgo_SetInitVector(GWEN_CRYPT_HASHALGO *a, const uint8_t *pv, uint32_t lv) { uint8_t *nv=NULL; assert(a); assert(a->refCount); if (pv && lv) { nv=(uint8_t*) malloc(lv); if (nv==NULL) return GWEN_ERROR_MEMORY_FULL; memmove(nv, pv, lv); } if (a->pInitVector && a->lInitVector) free(a->pInitVector); a->pInitVector=nv; a->lInitVector=(nv!=NULL)?lv:0; return 0; } gwenhywfar-4.15.2beta/src/crypt3/paddalgo.c0000644000175000017500000001105312416477066015510 00000000000000/*************************************************************************** begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "paddalgo_p.h" #include #include GWEN_LIST2_FUNCTIONS(GWEN_CRYPT_PADDALGO, GWEN_Crypt_PaddAlgo) GWEN_CRYPT_PADDALGOID GWEN_Crypt_PaddAlgoId_fromString(const char *s) { assert(s); if (strcasecmp(s, "none")==0) return GWEN_Crypt_PaddAlgoId_None; else if (strcasecmp(s, "iso9796_1")==0) return GWEN_Crypt_PaddAlgoId_Iso9796_1; else if (strcasecmp(s, "iso9796_1a4")==0) return GWEN_Crypt_PaddAlgoId_Iso9796_1A4; else if (strcasecmp(s, "iso9796_2")==0) return GWEN_Crypt_PaddAlgoId_Iso9796_2; else if (strcasecmp(s, "pkcs1_1")==0) return GWEN_Crypt_PaddAlgoId_Pkcs1_1; else if (strcasecmp(s, "pkcs1_2")==0) return GWEN_Crypt_PaddAlgoId_Pkcs1_2; else if (strcasecmp(s, "leftzero")==0) return GWEN_Crypt_PaddAlgoId_LeftZero; else if (strcasecmp(s, "rightzero")==0) return GWEN_Crypt_PaddAlgoId_RightZero; else if (strcasecmp(s, "ansix9_23")==0) return GWEN_Crypt_PaddAlgoId_AnsiX9_23; else if (strcasecmp(s, "pkcs1_pss_sha256")==0) return GWEN_Crypt_PaddAlgoId_Pkcs1_Pss_Sha256; else if (strcasecmp(s, "any")==0) return GWEN_Crypt_PaddAlgoId_Any; return GWEN_Crypt_PaddAlgoId_Unknown; } const char *GWEN_Crypt_PaddAlgoId_toString(GWEN_CRYPT_PADDALGOID a) { switch(a) { case GWEN_Crypt_PaddAlgoId_None: return "none"; case GWEN_Crypt_PaddAlgoId_Iso9796_1: return "iso9796_1"; case GWEN_Crypt_PaddAlgoId_Iso9796_1A4: return "iso9796_1a4"; case GWEN_Crypt_PaddAlgoId_Iso9796_2: return "iso9796_2"; case GWEN_Crypt_PaddAlgoId_Pkcs1_1: return "pkcs1_1"; case GWEN_Crypt_PaddAlgoId_Pkcs1_2: return "pkcs1_2"; case GWEN_Crypt_PaddAlgoId_LeftZero: return "leftzero"; case GWEN_Crypt_PaddAlgoId_RightZero: return "rightzero"; case GWEN_Crypt_PaddAlgoId_AnsiX9_23: return "ansix9_23"; case GWEN_Crypt_PaddAlgoId_Pkcs1_Pss_Sha256: return "pkcs1_pss_sha256"; case GWEN_Crypt_PaddAlgoId_Any: return "any"; default: return "unknown"; } } GWEN_CRYPT_PADDALGO *GWEN_Crypt_PaddAlgo_new(GWEN_CRYPT_PADDALGOID id) { GWEN_CRYPT_PADDALGO *a; GWEN_NEW_OBJECT(GWEN_CRYPT_PADDALGO, a); a->refCount=1; a->id=id; return a; } void GWEN_Crypt_PaddAlgo_Attach(GWEN_CRYPT_PADDALGO *a) { assert(a); assert(a->refCount); a->refCount++; } GWEN_CRYPT_PADDALGO *GWEN_Crypt_PaddAlgo_fromDb(GWEN_DB_NODE *db) { const char *s; assert(db); s=GWEN_DB_GetCharValue(db, "id", 0, NULL); if (s) { GWEN_CRYPT_PADDALGO *a; GWEN_CRYPT_PADDALGOID id; id=GWEN_Crypt_PaddAlgoId_fromString(s); if (id==GWEN_Crypt_PaddAlgoId_Unknown) { DBG_INFO(GWEN_LOGDOMAIN, "Unknown paddalgo id [%s]", s); return NULL; } a=GWEN_Crypt_PaddAlgo_new(id); assert(a); a->paddSize=GWEN_DB_GetIntValue(db, "paddSize", 0, 0); return a; } else { DBG_INFO(GWEN_LOGDOMAIN, "Missing paddalgo id"); return NULL; } } int GWEN_Crypt_PaddAlgo_toDb(const GWEN_CRYPT_PADDALGO *a, GWEN_DB_NODE *db) { assert(a); assert(a->refCount); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "id", GWEN_Crypt_PaddAlgoId_toString(a->id)); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "paddSize", a->paddSize); return 0; } GWEN_CRYPT_PADDALGO *GWEN_Crypt_PaddAlgo_dup(const GWEN_CRYPT_PADDALGO *na) { GWEN_CRYPT_PADDALGO *a; assert(na); a=GWEN_Crypt_PaddAlgo_new(na->id); a->paddSize=na->paddSize; return a; } void GWEN_Crypt_PaddAlgo_free(GWEN_CRYPT_PADDALGO *a) { if (a) { assert(a->refCount); if (a->refCount==1) { a->refCount--; GWEN_FREE_OBJECT(a); } else { a->refCount--; } } } GWEN_CRYPT_PADDALGOID GWEN_Crypt_PaddAlgo_GetId(const GWEN_CRYPT_PADDALGO *a) { assert(a); assert(a->refCount); return a->id; } int GWEN_Crypt_PaddAlgo_GetPaddSize(const GWEN_CRYPT_PADDALGO *a) { assert(a); assert(a->refCount); return a->paddSize; } void GWEN_Crypt_PaddAlgo_SetPaddSize(GWEN_CRYPT_PADDALGO *a, int s) { assert(a); assert(a->refCount); a->paddSize=s; } gwenhywfar-4.15.2beta/src/gwenhywfar.c0000644000175000017500000003307712416477066014704 00000000000000/*************************************************************************** begin : Thu Sep 11 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /* Internationalization */ #ifdef ENABLE_NLS # include # include #endif #include #include #include #include "base/debug.h" #include "base/logger_l.h" #include "base/error_l.h" #include "base/memory_l.h" #include "base/pathmanager_l.h" #include "base/plugin_l.h" #include "base/i18n_l.h" #include "os/inetaddr_l.h" #include "os/inetsocket_l.h" #include "os/libloader_l.h" #include "os/process_l.h" #include "parser/dbio_l.h" #include "parser/configmgr_l.h" #include "crypt3/cryptkey_l.h" #include "crypttoken/ctplugin_l.h" #include "binreloc.h" #include /* for regkey stuff */ #ifdef OS_WIN32 # define DIRSEP "\\" # include #else # define DIRSEP "/" #endif /* Watch out: Make sure these are identical with the identifiers in gwenhywfar.iss.in ! */ #define GWEN_REGKEY_PATHS "Software\\Gwenhywfar\\Paths" #define GWEN_REGNAME_PREFIX "prefix" #define GWEN_REGNAME_LIBDIR "libdir" #define GWEN_REGNAME_PLUGINDIR "plugindir" #define GWEN_REGNAME_SYSCONFDIR "sysconfdir" #define GWEN_REGNAME_LOCALEDIR "localedir" #define GWEN_REGNAME_DATADIR "pkgdatadir" #define GWEN_REGNAME_SYSDATADIR "sysdatadir" static unsigned int gwen_is_initialized=0; static int gwen_binreloc_initialized=0; char *GWEN__get_plugindir (const char *default_dir); int GWEN_Init(void) { int err; if (gwen_is_initialized==0) { err=GWEN_Memory_ModuleInit(); if (err) return err; err=GWEN_Logger_ModuleInit(); if (err) return err; gnutls_global_init(); if (gwen_binreloc_initialized==0) { #ifdef ENABLE_BINRELOC BrInitError br_error; /* Init binreloc. Note: It is not totally clear whether the correct function might still be br_init() instead of br_init_lib(). */ if (!br_init_lib(&br_error)) { DBG_INFO(GWEN_LOGDOMAIN, "Error on br_init: %d\n", br_error); gwen_binreloc_initialized=-1; } else gwen_binreloc_initialized=1; #else gwen_binreloc_initialized=1; #endif } GWEN_Error_ModuleInit(); err=GWEN_PathManager_ModuleInit(); if (err) return err; /* Define some paths used by gwenhywfar; add the windows registry entries first, because on Unix those functions simply do nothing and on windows they will ensure that the most valid paths (which are those from the registry) are first in the path lists. */ /* --------------------------------------------------------------------- * $sysconfdir e.g. "/etc" */ GWEN_PathManager_DefinePath(GWEN_PM_LIBNAME, GWEN_PM_SYSCONFDIR); GWEN_PathManager_AddPathFromWinReg(GWEN_PM_LIBNAME, GWEN_PM_LIBNAME, GWEN_PM_SYSCONFDIR, GWEN_REGKEY_PATHS, GWEN_REGNAME_SYSCONFDIR); #if defined(OS_WIN32) || defined(ENABLE_LOCAL_INSTALL) /* add folder relative to EXE */ GWEN_PathManager_AddRelPath(GWEN_PM_LIBNAME, GWEN_PM_LIBNAME, GWEN_PM_SYSCONFDIR, GWEN_SYSCONF_DIR, GWEN_PathManager_RelModeExe); #else /* add absolute folder */ GWEN_PathManager_AddPath(GWEN_PM_LIBNAME, GWEN_PM_LIBNAME, GWEN_PM_SYSCONFDIR, GWEN_SYSCONF_DIR); #endif /* --------------------------------------------------------------------- * $localedir e.g. "/usr/share/locale" */ GWEN_PathManager_DefinePath(GWEN_PM_LIBNAME, GWEN_PM_LOCALEDIR); GWEN_PathManager_AddPathFromWinReg(GWEN_PM_LIBNAME, GWEN_PM_LIBNAME, GWEN_PM_LOCALEDIR, GWEN_REGKEY_PATHS, GWEN_REGNAME_LOCALEDIR); #if defined(OS_WIN32) || defined(ENABLE_LOCAL_INSTALL) /* add folder relative to EXE */ GWEN_PathManager_AddRelPath(GWEN_PM_LIBNAME, GWEN_PM_LIBNAME, GWEN_PM_LOCALEDIR, LOCALEDIR, GWEN_PathManager_RelModeExe); #else /* add absolute folder */ GWEN_PathManager_AddPath(GWEN_PM_LIBNAME, GWEN_PM_LIBNAME, GWEN_PM_LOCALEDIR, LOCALEDIR); #endif /* --------------------------------------------------------------------- * $plugindir e.g. "/usr/lib/gwenhywfar/plugins/0" */ GWEN_PathManager_DefinePath(GWEN_PM_LIBNAME, GWEN_PM_PLUGINDIR); GWEN_PathManager_AddPathFromWinReg(GWEN_PM_LIBNAME, GWEN_PM_LIBNAME, GWEN_PM_PLUGINDIR, GWEN_REGKEY_PATHS, GWEN_REGNAME_PLUGINDIR); #if defined(OS_WIN32) || defined(ENABLE_LOCAL_INSTALL) /* add folder relative to EXE */ GWEN_PathManager_AddRelPath(GWEN_PM_LIBNAME, GWEN_PM_LIBNAME, GWEN_PM_PLUGINDIR, PLUGINDIR, GWEN_PathManager_RelModeExe); #else /* add absolute folder */ GWEN_PathManager_AddPath(GWEN_PM_LIBNAME, GWEN_PM_LIBNAME, GWEN_PM_PLUGINDIR, PLUGINDIR); #endif /* --------------------------------------------------------------------- * datadir e.g. "/usr/share/gwenhywfar" */ GWEN_PathManager_DefinePath(GWEN_PM_LIBNAME, GWEN_PM_DATADIR); GWEN_PathManager_AddPathFromWinReg(GWEN_PM_LIBNAME, GWEN_PM_LIBNAME, GWEN_PM_DATADIR, GWEN_REGKEY_PATHS, GWEN_REGNAME_DATADIR); #if defined(OS_WIN32) || defined(ENABLE_LOCAL_INSTALL) /* add folder relative to EXE */ GWEN_PathManager_AddRelPath(GWEN_PM_LIBNAME, GWEN_PM_LIBNAME, GWEN_PM_DATADIR, GWEN_DATADIR, GWEN_PathManager_RelModeExe); #else /* add absolute folder */ GWEN_PathManager_AddPath(GWEN_PM_LIBNAME, GWEN_PM_LIBNAME, GWEN_PM_DATADIR, GWEN_DATADIR); #endif /* --------------------------------------------------------------------- * system datadir e.g. "/usr/share" */ GWEN_PathManager_DefinePath(GWEN_PM_LIBNAME, GWEN_PM_SYSDATADIR); GWEN_PathManager_AddPathFromWinReg(GWEN_PM_LIBNAME, GWEN_PM_LIBNAME, GWEN_PM_SYSDATADIR, GWEN_REGKEY_PATHS, GWEN_REGNAME_SYSDATADIR); #if defined(OS_WIN32) || defined(ENABLE_LOCAL_INSTALL) /* add folder relative to EXE */ GWEN_PathManager_AddRelPath(GWEN_PM_LIBNAME, GWEN_PM_LIBNAME, GWEN_PM_SYSDATADIR, GWEN_SYSDATADIR, GWEN_PathManager_RelModeExe); #else /* add absolute folder */ GWEN_PathManager_AddPath(GWEN_PM_LIBNAME, GWEN_PM_LIBNAME, GWEN_PM_SYSDATADIR, GWEN_SYSDATADIR); #endif /* Initialize other modules. */ DBG_DEBUG(GWEN_LOGDOMAIN, "Initializing I18N module"); err=GWEN_I18N_ModuleInit(); if (err) return err; DBG_DEBUG(GWEN_LOGDOMAIN, "Initializing InetAddr module"); err=GWEN_InetAddr_ModuleInit(); if (err) return err; DBG_DEBUG(GWEN_LOGDOMAIN, "Initializing Socket module"); err=GWEN_Socket_ModuleInit(); if (err) return err; DBG_DEBUG(GWEN_LOGDOMAIN, "Initializing Libloader module"); err=GWEN_LibLoader_ModuleInit(); if (err) return err; DBG_DEBUG(GWEN_LOGDOMAIN, "Initializing Crypt3 module"); err=GWEN_Crypt3_ModuleInit(); if (err) return err; DBG_DEBUG(GWEN_LOGDOMAIN, "Initializing Process module"); err=GWEN_Process_ModuleInit(); if (err) return err; DBG_DEBUG(GWEN_LOGDOMAIN, "Initializing Plugin module"); err=GWEN_Plugin_ModuleInit(); if (err) return err; DBG_DEBUG(GWEN_LOGDOMAIN, "Initializing DataBase IO module"); err=GWEN_DBIO_ModuleInit(); if (err) return err; DBG_DEBUG(GWEN_LOGDOMAIN, "Initializing ConfigMgr module"); err=GWEN_ConfigMgr_ModuleInit(); if (err) return err; DBG_DEBUG(GWEN_LOGDOMAIN, "Initializing CryptToken2 module"); err=GWEN_Crypt_Token_ModuleInit(); if (err) return err; /* add more modules here */ } gwen_is_initialized++; return 0; } int GWEN_Fini(void) { int err; err=0; if (gwen_is_initialized==0) return 0; gwen_is_initialized--; if (gwen_is_initialized==0) { int lerr; /* add more modules here */ lerr=GWEN_Crypt_Token_ModuleFini(); if (lerr) { err=lerr; DBG_ERROR(GWEN_LOGDOMAIN, "GWEN_Fini: " "Could not deinitialze module CryptToken2"); } lerr=GWEN_ConfigMgr_ModuleFini(); if (lerr) { err=lerr; DBG_ERROR(GWEN_LOGDOMAIN, "GWEN_Fini: " "Could not deinitialze module ConfigMgr"); } lerr=GWEN_DBIO_ModuleFini(); if (lerr) { err=lerr; DBG_ERROR(GWEN_LOGDOMAIN, "GWEN_Fini: " "Could not deinitialze module DBIO"); } lerr=GWEN_Plugin_ModuleFini(); if (lerr) { err=lerr; DBG_ERROR(GWEN_LOGDOMAIN, "GWEN_Fini: " "Could not deinitialze module Plugin"); } lerr=GWEN_Process_ModuleFini(); if (lerr) { err=lerr; DBG_ERROR(GWEN_LOGDOMAIN, "GWEN_Fini: " "Could not deinitialze module Process"); } lerr=GWEN_Crypt3_ModuleFini(); if (lerr) { err=lerr; DBG_ERROR(GWEN_LOGDOMAIN, "GWEN_Fini: " "Could not deinitialze module Crypt3"); } lerr=GWEN_LibLoader_ModuleFini(); if (lerr) { err=lerr; DBG_ERROR(GWEN_LOGDOMAIN, "GWEN_Fini: " "Could not deinitialze module LibLoader"); } lerr=GWEN_Socket_ModuleFini(); if (lerr) { err=lerr; DBG_ERROR(GWEN_LOGDOMAIN, "GWEN_Fini: " "Could not deinitialze module Socket"); } lerr=GWEN_InetAddr_ModuleFini(); if (lerr) { err=lerr; DBG_ERROR(GWEN_LOGDOMAIN, "GWEN_Fini: " "Could not deinitialze module InetAddr"); } lerr=GWEN_I18N_ModuleFini(); if (lerr) { err=lerr; DBG_ERROR(GWEN_LOGDOMAIN, "GWEN_Fini: " "Could not deinitialze module I18N"); } lerr=GWEN_PathManager_ModuleFini(); if (lerr) { err=lerr; DBG_ERROR(GWEN_LOGDOMAIN, "GWEN_Fini: " "Could not deinitialze module PathManager"); } GWEN_Error_ModuleFini(); /* these two modules must be deinitialized at last */ lerr=GWEN_Logger_ModuleFini(); if (lerr) { err=lerr; DBG_ERROR(GWEN_LOGDOMAIN, "GWEN_Fini: " "Could not deinitialze module Logger"); } lerr=GWEN_Memory_ModuleFini(); if (lerr) { err=lerr; DBG_ERROR(GWEN_LOGDOMAIN, "GWEN_Fini: " "Could not deinitialze module Memory"); } gnutls_global_deinit(); } return err; } int GWEN_Fini_Forced(void) { if (gwen_is_initialized) gwen_is_initialized=1; return GWEN_Fini(); } void GWEN_Version(int *major, int *minor, int *patchlevel, int *build) { *major=GWENHYWFAR_VERSION_MAJOR; *minor=GWENHYWFAR_VERSION_MINOR; *patchlevel=GWENHYWFAR_VERSION_PATCHLEVEL; *build=GWENHYWFAR_VERSION_BUILD; } gwenhywfar-4.15.2beta/src/base/0000755000175000017500000000000012643267234013333 500000000000000gwenhywfar-4.15.2beta/src/base/plugindescr.h0000644000175000017500000001335512416477066015756 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Fri Sep 12 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_PLUGINDESCR_H #define GWENHYWFAR_PLUGINDESCR_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_PLUGIN_DESCRIPTION GWEN_PLUGIN_DESCRIPTION; GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_PLUGIN_DESCRIPTION, GWEN_PluginDescription, GWENHYWFAR_API) GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_PLUGIN_DESCRIPTION, GWEN_PluginDescription, GWENHYWFAR_API) /* Do not terminate these lines with semicolon because they are macros, not functions, and ISO C89 does not allow a semicolon there. */ GWENHYWFAR_API void GWEN_PluginDescription_List2_freeAll(GWEN_PLUGIN_DESCRIPTION_LIST2 *pdl); GWENHYWFAR_API GWEN_PLUGIN_DESCRIPTION_LIST2 *GWEN_LoadPluginDescrs(const char *path); /** * Loads a list of plugins descriptions. * When parsing the description files entries for the current language will * be selected. The current language can be set via @ref GWEN_I18N_SetLocale. * @param path folder to search for XML files * @param type plugin type (property "type" of tag "plugin") * @param pdl plugin descriptions list2 to load descriptions to */ GWENHYWFAR_API int GWEN_LoadPluginDescrsByType(const char *path, const char *type, GWEN_PLUGIN_DESCRIPTION_LIST2 *pdl); GWENHYWFAR_API void GWEN_PluginDescription_free(GWEN_PLUGIN_DESCRIPTION *pd); GWENHYWFAR_API GWEN_PLUGIN_DESCRIPTION* GWEN_PluginDescription_dup(const GWEN_PLUGIN_DESCRIPTION *pd); GWENHYWFAR_API void GWEN_PluginDescription_Attach(GWEN_PLUGIN_DESCRIPTION *pd); /** * Returns the XML node this description consists of (the "plugin" node). * It may contain additional information used by programs. * This function does not relinquish ownership of the returned pointer, * so you MUST NOT free it. As soon as the description itself is destroyed * this XML node will be, too. So you have to call GWEN_XMLNode_dup() if * you want the XML node to survive the description. */ GWENHYWFAR_API GWEN_XMLNODE* GWEN_PluginDescription_GetXmlNode(const GWEN_PLUGIN_DESCRIPTION *pd); GWENHYWFAR_API const char *GWEN_PluginDescription_GetPath(const GWEN_PLUGIN_DESCRIPTION *pd); GWENHYWFAR_API void GWEN_PluginDescription_SetPath(GWEN_PLUGIN_DESCRIPTION *pd, const char *s); GWENHYWFAR_API const char *GWEN_PluginDescription_GetName(const GWEN_PLUGIN_DESCRIPTION *pd); GWENHYWFAR_API const char *GWEN_PluginDescription_GetType(const GWEN_PLUGIN_DESCRIPTION *pd); GWENHYWFAR_API const char* GWEN_PluginDescription_GetShortDescr(const GWEN_PLUGIN_DESCRIPTION *pd); GWENHYWFAR_API const char* GWEN_PluginDescription_GetAuthor(const GWEN_PLUGIN_DESCRIPTION *pd); GWENHYWFAR_API const char* GWEN_PluginDescription_GetVersion(const GWEN_PLUGIN_DESCRIPTION *pd); GWENHYWFAR_API const char* GWEN_PluginDescription_GetLongDescr(const GWEN_PLUGIN_DESCRIPTION *pd); GWENHYWFAR_API const char* GWEN_PluginDescription_GetFileName(const GWEN_PLUGIN_DESCRIPTION *pd); GWENHYWFAR_API void GWEN_PluginDescription_SetFileName(GWEN_PLUGIN_DESCRIPTION *pd, const char *s); /** *

* Seeks for a long description with the given format and the currently * selected locale and appends it to the data in the given buffer. *

*

* The DESCR tag of the plugin description is expected to contain sub tags * named TEXT with the property "FORMAT" describing the format and "LANG" * containing the language of the element. *

*

* Currently supported format is "html". *

* @return 0 if ok, !=0 on error * @param pd plugin description * @param s name of the format (e.g. html) * @param buf buffer to append the description to */ GWENHYWFAR_API DEPRECATED int GWEN_PluginDescription_GetLongDescrByFormat(const GWEN_PLUGIN_DESCRIPTION *pd, const char *s, GWEN_BUFFER *buf); GWENHYWFAR_API int GWEN_PluginDescription_IsActive(const GWEN_PLUGIN_DESCRIPTION *pd); GWENHYWFAR_API void GWEN_PluginDescription_SetIsActive(GWEN_PLUGIN_DESCRIPTION *pd, int i); #ifdef __cplusplus } #endif #endif /* GWENHYWFAR_PLUGINDESCR_H */ gwenhywfar-4.15.2beta/src/base/gwen_param.tm20000644000175000017500000000026512425452307016015 00000000000000 GWEN_PARAM GWEN_Param gwenhywfar-4.15.2beta/src/base/tree_p.h0000644000175000017500000000373712364015347014710 00000000000000/*************************************************************************** begin : Fri Jan 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_TREE_P_H #define GWEN_TREE_P_H #include "tree.h" struct GWEN_TREE_ELEMENT { GWEN_TREE *treePtr; void *data; GWEN_TREE_ELEMENT *prevElement; GWEN_TREE_ELEMENT *nextElement; GWEN_TREE_ELEMENT *firstChild; GWEN_TREE_ELEMENT *lastChild; GWEN_TREE_ELEMENT *parent; uint32_t count; }; struct GWEN_TREE { uint32_t count; GWEN_TREE_ELEMENT *firstElement; GWEN_TREE_ELEMENT *lastElement; }; #endif gwenhywfar-4.15.2beta/src/base/idlist.h0000644000175000017500000001061112416477066014717 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /** @file idlist.h * @short A list of uint32_t objects */ #ifndef GWENHYWFAR_IDLIST_H #define GWENHYWFAR_IDLIST_H #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_IDLIST GWEN_IDLIST; #ifdef __cplusplus } #endif #include #include #ifdef __cplusplus extern "C" { #endif /** * @defgroup MOD_IDLIST ID list module * @ingroup MOD_BASE * @short A list of uint32_t objects * * This is basically a list for uint32_t objects, * but since it uses tables instead of those list objects normally used * throughout Gwen it is less memory consuming. */ /*@{*/ /** * Constructor. */ GWENHYWFAR_API GWEN_IDLIST *GWEN_IdList_new(void); /** * Destructor. */ GWENHYWFAR_API void GWEN_IdList_free(GWEN_IDLIST *idl); /** * Returns a new id list which contains all the ids of the given list * in the same order. However, the list returned is compact (i.e. it has no * wholes). */ GWENHYWFAR_API GWEN_IDLIST *GWEN_IdList_dup(const GWEN_IDLIST *idl); /** * Removes all ids from the list thus leaving it empty. */ GWENHYWFAR_API void GWEN_IdList_Clear(GWEN_IDLIST *idl); /** * Adds an id to the list. This function does no doublecheck. */ GWENHYWFAR_API int GWEN_IdList_AddId(GWEN_IDLIST *idl, uint32_t id); /** * Removes the first occurrence of the given id. * @return 0 if deleted, !=0 if the id wasn't found */ GWENHYWFAR_API int GWEN_IdList_DelId(GWEN_IDLIST *idl, uint32_t id); /** * Checks whether the given id exists in the idlist. * @return 0 if found, !=0 otherwise */ GWENHYWFAR_API int GWEN_IdList_HasId(const GWEN_IDLIST *idl, uint32_t id); /** * Returns the first id from the list. */ GWENHYWFAR_API uint32_t GWEN_IdList_GetFirstId(GWEN_IDLIST *idl); GWENHYWFAR_API uint32_t GWEN_IdList_GetNextId(GWEN_IDLIST *idl); /** * This function returns the first id stored in the list. It can also * be used with const GWEN_IDLIST. * @param hdl pointer to a 32 bit value to receive a handle * to be used by @ref GWEN_IdList_GetNextId2. This handle is only valid * as longs as no ids are removed from the list. */ GWENHYWFAR_API uint32_t GWEN_IdList_GetFirstId2(const GWEN_IDLIST *idl, uint32_t *hdl); /** * This function returns the next id stored in the list. It can also * be used with const GWEN_IDLIST. * @param hdl pointer to a 32 bit value to receive a handle * to be used by @ref GWEN_IdList_GetNextId2. This handle is only valid * as longs as no ids are removed from the list. */ GWENHYWFAR_API uint32_t GWEN_IdList_GetNextId2(const GWEN_IDLIST *idl, uint32_t *hdl); /** * Sorts the ids in ascending order */ GWENHYWFAR_API int GWEN_IdList_Sort(GWEN_IDLIST *idl); /*@}*/ #ifdef __cplusplus } #endif #endif /* GWENHYWFAR_IDLIST_H */ gwenhywfar-4.15.2beta/src/base/misc.h0000644000175000017500000001140612416477066014365 00000000000000/*************************************************************************** begin : Sat Jun 28 2003 copyright : (C) 2003-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /** @file src/base/misc.h * * @short This file contains some macros concerning lists and inheritance. * *

* FIRST: Yes, I DO know, macros are very, very bad. * When writing these macros I spent much time debugging them, because the * compiler is not much of a help here. * The validity of a macro is only checked upon invocation, * so if you never use a macro it will never be checked. *

*

* However, these macros do work just fine and they make some tasks * much easier to handle. *

*

* The reason for using macros is the lack of templates in C. * When writing Gwenhywfar I often faced the fact that some functions always * appear with many structs defined. The only difference is the name of those * functions and the type of the arguments. *

*

* The best example is the handling of lists of structs. * In most listable structs there was a variable called @b next which pointed * to the next object in the list. There were also functions like TYPE_next(), * TYPE_add(), TYPE_del() etc for list handling. Whenever I improved the list * mechanism I had to change ALL code files in order to improve them all. *

*

* These macros are now used to facilitate improvements in list or inheritance * handling code in C. *

*

* @b NOTE: Please do not change these macros unless you know exactly what you * are doing! * Bugs in the macros will most probably lead to nearly undebuggable results * in code files using them.
* You have been warned ;-) *

* */ #ifndef GWENHYWFAR_MISC_H #define GWENHYWFAR_MISC_H #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif #define GWEN_LIST_ADD(typ, sr, head) {\ typ *curr; \ \ assert(sr); \ \ curr=*head; \ if (!curr) { \ *head=sr; \ } \ else { \ while(curr->next) { \ curr=curr->next; \ } \ curr->next=sr; \ }\ } #define GWEN_LIST_INSERT(typ, sr, head) {\ typ *curr; \ \ assert(sr); \ \ curr=*head; \ if (!curr) { \ *head=sr; \ } \ else { \ sr->next=curr;\ *head=sr;\ }\ } #define GWEN_LIST_DEL(typ, sr, head) {\ typ *curr; \ \ assert(sr); \ curr=*head; \ if (curr) { \ if (curr==sr) { \ *head=curr->next; \ } \ else { \ while(curr->next!=sr) { \ curr=curr->next; \ } \ if (curr) \ curr->next=sr->next; \ } \ } \ sr->next=0;\ } /*@}*/ /* defgroup */ #ifdef __cplusplus } #endif #include #include #endif gwenhywfar-4.15.2beta/src/base/pointerlist.c0000644000175000017500000003260412450775036016000 00000000000000/*************************************************************************** begin : Wed Sep 12 2012 copyright : (C) 2012 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "pointerlist_p.h" #include #include #include #include GWEN_POINTERLIST_TABLE *GWEN_PointerListTable_new(void) { GWEN_POINTERLIST_TABLE *idt; GWEN_NEW_OBJECT(GWEN_POINTERLIST_TABLE, idt); idt->refCount=1; idt->freeEntries=GWEN_POINTERLIST_TABLE_MAXENTRIES; return idt; } void GWEN_PointerListTable_free(GWEN_POINTERLIST_TABLE *idt) { if (idt) { assert(idt->refCount); if (--(idt->refCount)==0) { GWEN_FREE_OBJECT(idt); } } } static inline int GWEN_PointerListTable_AddPtr(GWEN_POINTERLIST_TABLE *idt, void *ptr) { unsigned int i; for (i=0; ientries[i]==0) { idt->entries[i]=ptr; idt->freeEntries--; return 0; } } /* for */ return -1; } static inline int GWEN_PointerListTable_AppendPtr(GWEN_POINTERLIST_TABLE *idt, void *ptr) { if (idt->freeEntries) { unsigned int i; i=GWEN_POINTERLIST_TABLE_MAXENTRIES-idt->freeEntries; idt->entries[i]=ptr; idt->freeEntries--; return 0; } else return -1; } static inline int GWEN_PointerListTable_HasPtr(const GWEN_POINTERLIST_TABLE *idt, void *ptr) { unsigned int i; for (i=0; ientries[i]==ptr) { return 1; } } /* for */ return 0; } static inline int GWEN_PointerListTable_DelPtr(GWEN_POINTERLIST_TABLE *idt, void *ptr) { unsigned int i; for (i=0; ientries[i]==ptr) { idt->entries[i]=0; idt->freeEntries++; return 0; } } /* for */ return -1; } static inline int GWEN_PointerListTable_IsEmpty(const GWEN_POINTERLIST_TABLE *idt) { return GWEN_POINTERLIST_TABLE_MAXENTRIES==idt->freeEntries; } static inline int GWEN_PointerListTable_IsFull(const GWEN_POINTERLIST_TABLE *idt) { return idt->freeEntries==0; } #if 0 static inline unsigned int GWEN_PointerListTable_GetCount(const GWEN_POINTERLIST_TABLE *idt) { return GWEN_POINTERLIST_TABLE_MAXENTRIES-idt->freeEntries; } static inline void *GWEN_PointerListTable_GetFirstPtr(const GWEN_POINTERLIST_TABLE *idt, uint64_t *tabIdx) { unsigned int i; for (i=0; ientries[i]!=0) { *tabIdx=i; return idt->entries[i]; } } /* for */ return NULL; } static inline void *GWEN_PointerListTable_GetNextPtr(const GWEN_POINTERLIST_TABLE *idt, uint64_t *tabIdx) { unsigned int i; for (i=(*tabIdx)+1; ientries[i]!=0) { *tabIdx=i; return idt->entries[i]; } } /* for */ return NULL; } #endif GWEN_POINTERLIST *GWEN_PointerList_new(void) { GWEN_POINTERLIST *idl; GWEN_NEW_OBJECT(GWEN_POINTERLIST, idl); idl->refCount=1; idl->tableStep=GWEN_POINTERLIST_DEFAULT_STEP; return idl; } void GWEN_PointerList_Attach(GWEN_POINTERLIST *idl) { assert(idl); assert(idl->refCount); idl->refCount++; } void GWEN_PointerList_free(GWEN_POINTERLIST *idl) { if (idl) { assert(idl->refCount); if (idl->refCount==1) { GWEN_PointerList_Clear(idl); idl->refCount=0; GWEN_FREE_OBJECT(idl); } else idl->refCount--; } } void GWEN_PointerList_AddTable(GWEN_POINTERLIST *idl, GWEN_POINTERLIST_TABLE *idt) { GWEN_POINTERLIST_TABLE **tablePtr; int idx; assert(idl); tablePtr=idl->pIdTablePointers; for (idx=0, tablePtr=idl->pIdTablePointers; idxidTableCount; idx++, tablePtr++) { if (*tablePtr==NULL) break; } /* while */ if (idx>=idl->idTableCount) { uint32_t newCount; GWEN_POINTERLIST_TABLE **newPtr; /* resize */ newCount=idl->idTableCount+idl->tableStep; newPtr=(GWEN_POINTERLIST_TABLE **)realloc(idl->pIdTablePointers, sizeof(GWEN_POINTERLIST_TABLE*)*newCount); assert(newPtr); /* init new pointers */ memset((void*)(newPtr+idl->idTableCount), 0, sizeof(GWEN_POINTERLIST_TABLE*)*(newCount-idl->idTableCount)); idl->pIdTablePointers=newPtr; idl->pIdTablePointers[idl->idTableCount]=idt; idl->lastTableIdx=idl->idTableCount; idl->idTableCount=newCount; } else { idl->pIdTablePointers[idx]=idt; idl->lastTableIdx=idx; } } int GWEN_PointerList_AddPtr(GWEN_POINTERLIST *idl, void *ptr) { GWEN_POINTERLIST_TABLE *idt=NULL; GWEN_POINTERLIST_TABLE **tablePtr; int idx; assert(idl); if (idl->pIdTablePointers==NULL) { /* create an initial pointer table which can take up to tableStep pointers */ idl->pIdTablePointers=(GWEN_POINTERLIST_TABLE **) malloc(sizeof(GWEN_POINTERLIST_TABLE*)*(idl->tableStep)); assert(idl->pIdTablePointers); memset(idl->pIdTablePointers, 0, sizeof(GWEN_POINTERLIST*)*(idl->tableStep)); idl->idTableCount=idl->tableStep; } for (idx=0, tablePtr=idl->pIdTablePointers; idxidTableCount; idx++, tablePtr++) { idt=*tablePtr; if (idt && !GWEN_PointerListTable_IsFull(idt)) break; } /* while */ if (idx>=idl->idTableCount) { idt=GWEN_PointerListTable_new(); GWEN_PointerList_AddTable(idl, idt); } GWEN_PointerListTable_AddPtr(idt, ptr); idl->entryCount++; return 0; } int GWEN_PointerList_DelPtr(GWEN_POINTERLIST *idl, void *ptr) { if (idl->pIdTablePointers) { GWEN_POINTERLIST_TABLE *idt=NULL; GWEN_POINTERLIST_TABLE **tablePtr; int idx; for (idx=0, tablePtr=idl->pIdTablePointers; idxidTableCount; idx++, tablePtr++) { idt=*tablePtr; if (idt && !GWEN_PointerListTable_DelPtr(idt, ptr)) { /* found a table which had this id */ GWEN_PointerList_Clean(idl); idl->entryCount--; return 0; } } } return -1; } int GWEN_PointerList_HasPtr(const GWEN_POINTERLIST *idl, void *ptr) { if (idl->pIdTablePointers) { GWEN_POINTERLIST_TABLE *idt=NULL; GWEN_POINTERLIST_TABLE **tablePtr; int idx; for (idx=0, tablePtr=idl->pIdTablePointers; idxidTableCount; idx++, tablePtr++) { idt=*tablePtr; if (idt && GWEN_PointerListTable_HasPtr(idt, ptr)) return 1; } } return 0; } void GWEN_PointerList_Clean(GWEN_POINTERLIST *idl) { GWEN_POINTERLIST_TABLE *idt=NULL; GWEN_POINTERLIST_TABLE **tablePtr; int idx; for (idx=0, tablePtr=idl->pIdTablePointers; idxidTableCount; idx++, tablePtr++) { idt=*tablePtr; if (idt && GWEN_PointerListTable_IsEmpty(idt)) { GWEN_PointerListTable_free(idt); *tablePtr=NULL; } } } void GWEN_PointerList_Clear(GWEN_POINTERLIST *idl) { if (idl->pIdTablePointers) { GWEN_POINTERLIST_TABLE *idt=NULL; GWEN_POINTERLIST_TABLE **tablePtr; int idx; for (idx=0, tablePtr=idl->pIdTablePointers; idxidTableCount; idx++, tablePtr++) { idt=*tablePtr; if (idt) { GWEN_PointerListTable_free(idt); *tablePtr=NULL; } } free(idl->pIdTablePointers); idl->pIdTablePointers=NULL; } idl->entryCount=0; idl->nextIdx=0; } GWEN_POINTERLIST *GWEN_PointerList_dup(const GWEN_POINTERLIST *idl) { GWEN_POINTERLIST *nidl; int idx; nidl=GWEN_PointerList_new(); nidl->tableStep=idl->tableStep; nidl->idTableCount=idl->idTableCount; nidl->entryCount=idl->entryCount; if (idl->pIdTablePointers) { for (idx=0; idxidTableCount; idx++) { GWEN_POINTERLIST_TABLE *idt; idt=idl->pIdTablePointers[idx]; if (idt && !GWEN_PointerListTable_IsEmpty(idt)) { GWEN_POINTERLIST_TABLE *nidt; nidt=GWEN_PointerListTable_new(); memmove(nidt->entries, idt->entries, GWEN_POINTERLIST_TABLE_MAXENTRIES*sizeof(void*)); nidt->freeEntries=idt->freeEntries; GWEN_PointerList_AddTable(nidl, nidt); } } } return nidl; } uint64_t GWEN_PointerList_GetEntryCount(const GWEN_POINTERLIST *idl) { assert(idl); assert(idl->refCount); return idl->entryCount; } void *GWEN_PointerList_GetFirstPtr(const GWEN_POINTERLIST *idl, uint64_t *pos) { GWEN_POINTERLIST_TABLE *idt=NULL; GWEN_POINTERLIST_TABLE **tablePtr; int idx; int idIndex=0; *pos=0; for (idx=0, tablePtr=idl->pIdTablePointers; idxidTableCount; idx++, tablePtr++) { idt=*tablePtr; if (idt && !GWEN_PointerListTable_IsEmpty(idt)) { int i; void *ptr; for (i=0; ientries[i]!=0) { ptr=idt->entries[i]; *pos=idIndex+i+1; return ptr; } } } idIndex+=GWEN_POINTERLIST_TABLE_MAXENTRIES; } return NULL; } void *GWEN_PointerList_GetNextPtr(const GWEN_POINTERLIST *idl, uint64_t *pos) { if (*pos) { GWEN_POINTERLIST_TABLE *idt; uint64_t tableNum=*pos / GWEN_POINTERLIST_TABLE_MAXENTRIES; uint64_t tableIdx=*pos % GWEN_POINTERLIST_TABLE_MAXENTRIES; GWEN_POINTERLIST_TABLE **tablePtr; int idIndex=0; int idx; if (tableNum>idl->idTableCount) { DBG_ERROR(GWEN_LOGDOMAIN, "Table number out of range"); *pos=0; return 0; } idIndex=(tableNum*GWEN_POINTERLIST_TABLE_MAXENTRIES); for (idx=tableNum, tablePtr=idl->pIdTablePointers+tableNum; idxidTableCount; idx++, tablePtr++) { idt=*tablePtr; if (idt && !GWEN_PointerListTable_IsEmpty(idt)) { int i; void *ptr; if (idx==tableNum) { for (i=tableIdx; ientries[i]!=0) { ptr=idt->entries[i]; *pos=idIndex+i+1; return ptr; } } } else { for (i=0; ientries[i]!=0) { ptr=idt->entries[i]; *pos=idIndex+i+1; return ptr; } } } } idIndex+=GWEN_POINTERLIST_TABLE_MAXENTRIES; } *pos=0; } return NULL; } GWEN_POINTERLIST_ITERATOR *GWEN_PointerList_Iterator_new(GWEN_POINTERLIST *idl) { GWEN_POINTERLIST_ITERATOR *it; assert(idl); GWEN_NEW_OBJECT(GWEN_POINTERLIST_ITERATOR, it); GWEN_PointerList_Attach(idl); it->list=idl; return it; } void GWEN_PointerList_Iterator_free(GWEN_POINTERLIST_ITERATOR *it) { if (it) { GWEN_PointerList_free(it->list); GWEN_FREE_OBJECT(it); } } void *GWEN_PointerList_Iterator_GetFirstId(GWEN_POINTERLIST_ITERATOR *it) { return GWEN_PointerList_GetFirstPtr(it->list, &(it->nextIndex)); } void *GWEN_PointerList_Iterator_GetNextId(GWEN_POINTERLIST_ITERATOR *it) { return GWEN_PointerList_GetNextPtr(it->list, &(it->nextIndex)); } int GWEN_PointerList_AppendPtr(GWEN_POINTERLIST *idl, void *ptr) { GWEN_POINTERLIST_TABLE *idt=NULL; assert(idl); if (idl->pIdTablePointers==NULL) { /* create an initial pointer table which can take up to tableStep pointers */ idl->pIdTablePointers=(GWEN_POINTERLIST_TABLE **) malloc(sizeof(GWEN_POINTERLIST_TABLE*)*(idl->tableStep)); assert(idl->pIdTablePointers); memset(idl->pIdTablePointers, 0, sizeof(GWEN_POINTERLIST_TABLE*)*(idl->tableStep)); idl->idTableCount=idl->tableStep; } idt=idl->pIdTablePointers[idl->lastTableIdx]; if (idt==NULL || GWEN_PointerListTable_IsFull(idt)) { idt=GWEN_PointerListTable_new(); GWEN_PointerList_AddTable(idl, idt); } GWEN_PointerListTable_AppendPtr(idt, ptr); idl->entryCount++; return 0; } void *GWEN_PointerList_GetPtrAt(const GWEN_POINTERLIST *idl, uint64_t idx) { GWEN_POINTERLIST_TABLE *idt; uint64_t tableNum=idx / GWEN_POINTERLIST_TABLE_MAXENTRIES; uint64_t tableIdx=idx % GWEN_POINTERLIST_TABLE_MAXENTRIES; assert(idl); if (tableNum>idl->idTableCount) { DBG_INFO(GWEN_LOGDOMAIN, "Table index out of range"); return 0; } idt=idl->pIdTablePointers[tableNum]; if (idt==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Table index points to an empty table"); return 0; } return idt->entries[tableIdx]; } gwenhywfar-4.15.2beta/src/base/stringlist2.h0000644000175000017500000001361512416477066015722 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Thu Apr 03 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_STRINGLIST2_H #define GWENHYWFAR_STRINGLIST2_H #include #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_STRINGLIST2 GWEN_STRINGLIST2; typedef GWEN_LIST_ITERATOR GWEN_STRINGLIST2_ITERATOR; typedef enum { GWEN_StringList2_IntertMode_AlwaysAdd=0, GWEN_StringList2_IntertMode_NoDouble, GWEN_StringList2_IntertMode_Reuse } GWEN_STRINGLIST2_INSERTMODE; GWENHYWFAR_API GWEN_STRINGLIST2 *GWEN_StringList2_new(void); GWENHYWFAR_API void GWEN_StringList2_free(GWEN_STRINGLIST2 *sl2); GWENHYWFAR_API GWEN_STRINGLIST2 *GWEN_StringList2_dup(GWEN_STRINGLIST2 *sl2); GWENHYWFAR_API int GWEN_StringList2_toDb(GWEN_STRINGLIST2 *sl2, GWEN_DB_NODE *db, const char *varName); GWENHYWFAR_API GWEN_STRINGLIST2 *GWEN_StringList2_fromDb(GWEN_DB_NODE *db, const char *name, GWEN_STRINGLIST2_INSERTMODE m); GWENHYWFAR_API int GWEN_StringList2_toXml(GWEN_STRINGLIST2 *sl2, GWEN_XMLNODE *node); GWENHYWFAR_API GWEN_STRINGLIST2 *GWEN_StringList2_fromXml(GWEN_XMLNODE *node, GWEN_STRINGLIST2_INSERTMODE m); /** * Normally this group of functions ignores cases when comparing two strings. * You can change this behaviour here. * @param sl2 string list * @param i if 0 then cases are ignored */ GWENHYWFAR_API void GWEN_StringList2_SetSenseCase(GWEN_STRINGLIST2 *sl2, int i); /** * Normally this group of functions ignores reference counters on stringlist * entries when removing a string via @ref GWEN_StringList2_RemoveString. * You can change this behaviour here. * @param sl2 string list * @param i if 0 then reference counters are honoured */ GWENHYWFAR_API void GWEN_StringList2_SetIgnoreRefCount(GWEN_STRINGLIST2 *sl2, int i); /** * Appends a string. * @return 0 if not appended, !=0 if appended * @param take if true then the StringList takes over ownership of the string * @param checkDouble if true the the string will only be appended if it * does not already exist */ GWENHYWFAR_API int GWEN_StringList2_AppendString(GWEN_STRINGLIST2 *sl2, const char *s, int take, GWEN_STRINGLIST2_INSERTMODE m); /** * Inserts a string. * @return 0 if not inserted, !=0 if inserted * @param take if true then the StringList takes over ownership of the string * @param checkDouble if true the the string will only be appended if it * does not already exist */ GWENHYWFAR_API int GWEN_StringList2_InsertString(GWEN_STRINGLIST2 *sl2, const char *s, int take, GWEN_STRINGLIST2_INSERTMODE m); /** * Removes a given string from the stringlist. * @return 0 if not found, !=0 if found and removed */ GWENHYWFAR_API int GWEN_StringList2_RemoveString(GWEN_STRINGLIST2 *sl2, const char *s); /** * Checks whether the given string already exists within in the * string list. * @return !=0 if found, 0 otherwise */ GWENHYWFAR_API int GWEN_StringList2_HasString(const GWEN_STRINGLIST2 *sl2, const char *s); GWENHYWFAR_API const char *GWEN_StringList2_GetStringAt(const GWEN_STRINGLIST2 *sl2, int idx); GWENHYWFAR_API GWEN_STRINGLIST2_ITERATOR *GWEN_StringList2_First(const GWEN_STRINGLIST2 *l); GWENHYWFAR_API GWEN_STRINGLIST2_ITERATOR *GWEN_StringList2_Last(const GWEN_STRINGLIST2 *l); GWENHYWFAR_API void GWEN_StringList2Iterator_free(GWEN_STRINGLIST2_ITERATOR *li); GWENHYWFAR_API const char *GWEN_StringList2Iterator_Previous(GWEN_STRINGLIST2_ITERATOR *li); GWENHYWFAR_API const char *GWEN_StringList2Iterator_Next(GWEN_STRINGLIST2_ITERATOR *li); GWENHYWFAR_API const char *GWEN_StringList2Iterator_Data(GWEN_STRINGLIST2_ITERATOR *li); GWENHYWFAR_API unsigned int GWEN_StringList2Iterator_GetLinkCount(const GWEN_STRINGLIST2_ITERATOR *li); GWENHYWFAR_API GWEN_REFPTR* GWEN_StringList2Iterator_DataRefPtr(GWEN_STRINGLIST2_ITERATOR *li); GWENHYWFAR_API void GWEN_StringList2_Dump(const GWEN_STRINGLIST2 *sl2); GWENHYWFAR_API int GWEN_StringList2_toXml(GWEN_STRINGLIST2 *sl2, GWEN_XMLNODE *node); GWENHYWFAR_API unsigned int GWEN_StringList2_GetCount(const GWEN_STRINGLIST2 *l); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/base/plugindescr_p.h0000644000175000017500000000511512416477066016270 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Fri Sep 12 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_PLUGINDESCR_P_H #define GWENHYWFAR_PLUGINDESCR_P_H #include #include #include struct GWEN_PLUGIN_DESCRIPTION { GWEN_LIST_ELEMENT(GWEN_PLUGIN_DESCRIPTION) char *fileName; char *langDomain; char *path; char *name; char *type; char *shortDescr; char *author; char *version; char *longDescr; int isActive; GWEN_XMLNODE *xmlNode; uint32_t refCount; }; GWEN_PLUGIN_DESCRIPTION *GWEN_PluginDescription_new(GWEN_XMLNODE *node); GWEN_PLUGIN_DESCRIPTION* GWEN_PluginDescription_List2_freeAll_cb(GWEN_PLUGIN_DESCRIPTION *pd, void*); int GWEN_PluginDescription__GetLongDescrByFormat(const GWEN_PLUGIN_DESCRIPTION *pd, const char *s, GWEN_BUFFER *buf); int GWEN_PluginDescription__GetLocalizedLongDescrByFormat(const GWEN_PLUGIN_DESCRIPTION *pd, const char *s, const char *lang, GWEN_BUFFER *buf); #endif /* GWENHYWFAR_PLUGINDESCR_P_H */ gwenhywfar-4.15.2beta/src/base/buffer_p.h0000644000175000017500000000523212416477066015222 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Fri Sep 12 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_BUFFER_P_H #define GWENHYWFAR_BUFFER_P_H #include #include /** * When reallocating the buffer a multiple of this value is used. * Needs to be aligned at 2^n */ #define GWEN_BUFFER_DYNAMIC_STEP 1024 #define GWEN_BUFFER_FLAGS_OWNED 0x0001 #define GWEN_BUFFER_FLAGS_OWN_SYNCIO 0x0002 #define GWEN_BUFFER_MODE_COPYMASK (\ ~(GWEN_BUFFER_FLAGS_OWN_SYNCIO) \ ) struct GWEN_BUFFER { char *realPtr; char *ptr; uint32_t pos; uint32_t bufferSize; uint32_t realBufferSize; uint32_t bytesUsed; uint32_t flags; uint32_t mode; uint32_t hardLimit; uint32_t step; uint32_t bookmarks[GWEN_BUFFER_MAX_BOOKMARKS]; GWEN_SYNCIO *syncIo; uint32_t _refCount; }; static void GWEN_Buffer_AdjustBookmarks(GWEN_BUFFER *bf, uint32_t pos, int offset); static int GWEN_Buffer__FillBuffer(GWEN_BUFFER *bf); static int GWEN_Buffer__FillBuffer_SyncIo(GWEN_BUFFER *bf); #endif gwenhywfar-4.15.2beta/src/base/pointerlist_p.h0000644000175000017500000000515312364015347016317 00000000000000/*************************************************************************** begin : Wed Sep 12 2012 copyright : (C) 2012 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_POINTERLIST_P_H #define GWENHYWFAR_POINTERLIST_P_H #include #include #include #define GWEN_POINTERLIST_TABLE_MAXENTRIES 64 #define GWEN_POINTERLIST_DEFAULT_STEP 64 typedef struct GWEN_POINTERLIST_TABLE GWEN_POINTERLIST_TABLE; struct GWEN_POINTERLIST_TABLE { uint64_t freeEntries; void* entries[GWEN_POINTERLIST_TABLE_MAXENTRIES]; uint32_t refCount; }; static GWEN_POINTERLIST_TABLE *GWEN_PointerListTable_new(); static void GWEN_PointerListTable_free(GWEN_POINTERLIST_TABLE *idt); static void GWEN_PointerList_AddTable(GWEN_POINTERLIST *idl, GWEN_POINTERLIST_TABLE *idt); static void GWEN_PointerList_Clean(GWEN_POINTERLIST *idl); struct GWEN_POINTERLIST { uint32_t refCount; uint64_t entryCount; GWEN_POINTERLIST_TABLE **pIdTablePointers; uint32_t idTableCount; uint32_t lastTableIdx; uint64_t nextIdx; uint32_t tableStep; }; struct GWEN_POINTERLIST_ITERATOR { GWEN_POINTERLIST *list; uint64_t nextIndex; }; #endif /* GWENHYWFAR_POINTERLIST_P_H */ gwenhywfar-4.15.2beta/src/base/memory.c0000644000175000017500000003224512416477066014741 00000000000000/*************************************************************************** begin : Sat Jun 28 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /*#define ENABLE_MY_SMALL_BLOCK_ALLOC*/ #include "memory_p.h" #include #include #include #include #include #include #ifdef HAVE_STRINGS_H # include #endif #include #ifdef HAVE_UNISTD_H # include #endif static GWEN_MEMORY_TABLE *gwen_memory__first_table=0; static int gwen_memory__debug=0; static int gwen_memory__nofree=0; static int gwen_memory__verbous=0; static size_t gwen_memory__allocated_bytes=0; static size_t gwen_memory__allocated_calls=0; static size_t gwen_memory__allocated_reused=0; #ifdef ENABLE_MY_SMALL_BLOCK_ALLOC static size_t gwen_memory__released_since_collect=0; #endif int GWEN_Memory_ModuleInit(void) { const char *s; s=getenv(GWEN_MEMORY_ENV_DEBUG); if (s) { fprintf(stderr, "Memory debugging is enabled\n"); gwen_memory__debug=1; gwen_memory__nofree=(getenv(GWEN_MEMORY_ENV_NO_FREE)!=0); gwen_memory__verbous=(getenv(GWEN_MEMORY_ENV_VERBOUS)!=0); } return 0; } int GWEN_Memory_ModuleFini(void) { GWEN_MEMORY_TABLE *mt; mt=gwen_memory__first_table; while(mt) { GWEN_MEMORY_TABLE *next; next=mt->next; GWEN_Memory_Table_free(mt); mt=next; } if (gwen_memory__verbous) { size_t avg=0; size_t bytes; const char *suffix; if (gwen_memory__allocated_calls) avg=gwen_memory__allocated_bytes/gwen_memory__allocated_calls; if (gwen_memory__allocated_bytes>(1024*1024)) { bytes=gwen_memory__allocated_bytes/(1024*1024); suffix="mb"; } else if (gwen_memory__allocated_bytes>1024) { bytes=gwen_memory__allocated_bytes/1024; suffix="kb"; } else { bytes=gwen_memory__allocated_bytes; suffix="bytes"; } fprintf(stderr, "GWEN info: %zu %s allocated in %zu calls " "(%zu times reused, average %zu bytes)\n", bytes, suffix, gwen_memory__allocated_calls, gwen_memory__allocated_reused, avg); } return 0; } void GWEN_Memory_Report(void) { return; } GWEN_MEMORY_TABLE *GWEN_Memory_Table_new(void) { GWEN_MEMORY_TABLE *mt; unsigned char *p; unsigned short dsize; if (gwen_memory__verbous) fprintf(stderr, "GWEN info: allocating memory table\n"); mt=(GWEN_MEMORY_TABLE*)malloc(sizeof(GWEN_MEMORY_TABLE)); assert(mt); memset(mt, 0, sizeof(GWEN_MEMORY_TABLE)); dsize=GWEN_MEMORY_MAXBLOCK; p=mt->data; GWEN_MEMORY_WRITESIZE(p, dsize); return mt; } void GWEN_Memory_Table_free(GWEN_MEMORY_TABLE *mt) { if (mt) { if (gwen_memory__debug) { unsigned char *p; unsigned char *end; p=mt->data; end=p+GWEN_MEMORY_TABLE_LEN; while(pnext) last=last->next; last->next=mt; } void GWEN_Memory_Table_Insert(GWEN_MEMORY_TABLE *mt) { mt->next=gwen_memory__first_table; gwen_memory__first_table=mt; } unsigned char *GWEN_Memory_Table__FindFreeBlock(GWEN_MEMORY_TABLE *mt, unsigned short dsize) { unsigned char *end; unsigned char *p; end=mt->data+GWEN_MEMORY_TABLE_LEN; p=mt->data; while(pdata, rsize, (bsize & GWEN_MEMORY_MASK_INUSE)?"used":"free");*/ if (rsize && !(bsize & GWEN_MEMORY_MASK_INUSE)) { /* unused block */ if (rsize==dsize || rsize>=(dsize+GWEN_MEMORY_SIZELEN+GWEN_MEMORY_MINREMAIN)) { return p; } } p+=rsize+GWEN_MEMORY_SIZELEN; } return 0; } void GWEN_Memory_Table__CollectAt(GWEN_MEMORY_TABLE *mt, unsigned char *p) { unsigned char *end; unsigned short nsize=0; unsigned char *np; int cnt=0; np=p; end=mt->data+GWEN_MEMORY_TABLE_LEN; while(np1) { fprintf(stderr, "GWEN info: collected %u bytes\n", nsize); GWEN_MEMORY_WRITESIZE(p, nsize); } } void GWEN_Memory_Table__Collect(GWEN_MEMORY_TABLE *mt) { unsigned char *p; unsigned char *end; end=mt->data+GWEN_MEMORY_TABLE_LEN; p=mt->data; while(pdata; end=p+GWEN_MEMORY_TABLE_LEN; while(pdata, rsize, p, (bsize & GWEN_MEMORY_MASK_INUSE)?"used":"free"); p+=rsize+GWEN_MEMORY_SIZELEN; } } unsigned char *GWEN_Memory__FindFreeBlock(unsigned short dsize) { GWEN_MEMORY_TABLE *mt; unsigned char *p=0; if (dsize>GWEN_MEMORY_MAXBLOCK) { fprintf(stderr, "GWEN error: Memory block too big (%d>%d)\n", dsize, GWEN_MEMORY_MAXBLOCK); abort(); } if (gwen_memory__first_table==0) gwen_memory__first_table=GWEN_Memory_Table_new(); mt=gwen_memory__first_table; assert(mt); while(mt) { p=GWEN_Memory_Table__FindFreeBlock(mt, dsize); if (p) return p; mt=mt->next; } mt=GWEN_Memory_Table_new(); //GWEN_Memory_Table_Append(gwen_memory__first_table, mt); GWEN_Memory_Table_Insert(mt); p=GWEN_Memory_Table__FindFreeBlock(mt, dsize); assert(p); return p; } void *GWEN_Memory__Malloc(unsigned short dsize) { unsigned char *p; unsigned short bsize; unsigned short rsize; p=GWEN_Memory__FindFreeBlock(dsize); assert(p); bsize=GWEN_MEMORY_READSIZE(p); rsize=bsize & GWEN_MEMORY_MASK_LEN; if (rsize>dsize) { unsigned char *np; unsigned short nsize; /* write header for next block */ nsize=rsize-dsize-GWEN_MEMORY_SIZELEN; np=p+GWEN_MEMORY_SIZELEN+dsize; /*fprintf(stderr, "Splitting block from %u to %u/%u (relpos %u)\n", rsize, dsize, nsize, np-p); */ GWEN_MEMORY_WRITESIZE(np, (nsize & GWEN_MEMORY_MASK_LEN)); } else gwen_memory__allocated_reused++; GWEN_MEMORY_WRITESIZE(p, (dsize | GWEN_MEMORY_MASK_INUSE | GWEN_MEMORY_MASK_MALLOCED)); /* fprintf(stderr, "GWEN debug: allocated block internally (%p).\n", p); */ return (void*)GWEN_MEMORY_GETDATA(p); } void *GWEN_Memory_malloc(size_t wsize) { void *p; #ifdef ENABLE_MY_SMALL_BLOCK_ALLOC size_t dsize; #endif if (GWEN_UNLIKELY(wsize==0)) { fprintf(stderr, "GWEN error: allocating 0 bytes, maybe a program error\n"); abort(); } #ifdef ENABLE_MY_SMALL_BLOCK_ALLOC dsize=(wsize+GWEN_MEMORY_GRANULARITY-1) & ~(GWEN_MEMORY_GRANULARITY-1); if (dsizensize) rsize=nsize; memmove(p, oldp, rsize); GWEN_Memory_dealloc(oldp); return p; #else return realloc(oldp, nsize); #endif } void GWEN_Memory_dealloc(void *p) { #ifdef ENABLE_MY_SMALL_BLOCK_ALLOC if (p) { unsigned char *pc; unsigned short dsize; pc=GWEN_MEMORY_GETSTART(p); dsize=GWEN_MEMORY_READSIZE(pc); if (!(dsize & GWEN_MEMORY_MASK_MALLOCED)) { fprintf(stderr, "GWEN error: Block %p already free'd\n", p); abort(); } if (!(dsize & GWEN_MEMORY_MASK_INUSE)) { fprintf(stderr, "GWEN error: Block %p not in use\n", p); abort(); } if (gwen_memory__nofree==0) { GWEN_MEMORY_WRITESIZE(pc, (dsize & ~GWEN_MEMORY_MASK_MALLOCED & ~GWEN_MEMORY_MASK_INUSE)); } else { GWEN_MEMORY_WRITESIZE(pc, (dsize & ~GWEN_MEMORY_MASK_MALLOCED)); } if (dsize==GWEN_MEMORY_EXTERNAL) { /*fprintf(stderr, "GWEN debug: deallocating block at %p externally\n", p); */ if (gwen_memory__nofree==0) free((void*)pc); } else { /*fprintf(stderr, "GWEN debug: deallocating %u bytes at %p internally\n", (dsize & GWEN_MEMORY_MASK_LEN), p); */ //gwen_memory__released_since_collect+=dsize; if (gwen_memory__released_since_collect>GWEN_MEMORY_COLLECT_AFTER) { fprintf(stderr, "GWEN info: collecting free blocks\n"); GWEN_Memory_Collect(); gwen_memory__released_since_collect=0; } } } #else if (GWEN_LIKELY(gwen_memory__nofree==0)) free(p); #endif } char *GWEN_Memory_strdup(const char *s) { #ifdef ENABLE_MY_SMALL_BLOCK_ALLOC unsigned int dsize; char *p; #endif assert(s); #ifdef ENABLE_MY_SMALL_BLOCK_ALLOC dsize=strlen(s); p=(char*)GWEN_Memory_malloc(dsize+1); assert(p); memmove(p, s, dsize+1); return p; #else return strdup(s); #endif } void GWEN_Memory_Dump(void) { GWEN_MEMORY_TABLE *mt; mt=gwen_memory__first_table; while(mt) { GWEN_Memory_Table__Dump(mt); mt=mt->next; } } void GWEN_Memory_Collect(void) { GWEN_MEMORY_TABLE *mt; mt=gwen_memory__first_table; while(mt) { GWEN_Memory_Table__Collect(mt); mt=mt->next; } } gwenhywfar-4.15.2beta/src/base/pathmanager_l.h0000644000175000017500000000355212364015347016227 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_PATHMANAGER_L_H #define GWENHYWFAR_PATHMANAGER_L_H #include int GWEN_PathManager_ModuleInit(void); int GWEN_PathManager_ModuleFini(void); #endif /* GWENHYWFAR_PATHMANAGER_H */ gwenhywfar-4.15.2beta/src/base/list_p.h0000644000175000017500000000615512364015347014721 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sat Nov 15 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_LIST_P_H #define GWENHYWFAR_LIST_P_H #include #include typedef struct GWEN_LIST_ENTRY GWEN_LIST_ENTRY; typedef struct GWEN_CONSTLIST_ENTRY GWEN_CONSTLIST_ENTRY; typedef struct GWEN__LISTPTR GWEN__LISTPTR; struct GWEN_LIST_ENTRY { GWEN_LIST_ENTRY *previous; GWEN_LIST_ENTRY *next; GWEN_REFPTR *dataPtr; unsigned int usage; unsigned int linkCount; }; static GWEN_LIST_ENTRY *GWEN_ListEntry_new(); static void GWEN_ListEntry_free(GWEN_LIST_ENTRY *le); struct GWEN_CONSTLIST_ENTRY { GWEN_CONSTLIST_ENTRY *previous; GWEN_CONSTLIST_ENTRY *next; const void *data; unsigned int usage; }; struct GWEN__LISTPTR { uint32_t refCount; GWEN_LIST_ENTRY *first; GWEN_LIST_ENTRY *last; unsigned int size; GWEN_REFPTR_INFO *refPtrInfo; }; static GWEN__LISTPTR *GWEN__ListPtr_new(); static void GWEN__ListPtr_free(GWEN__LISTPTR *lp); static void GWEN__ListPtr_Attach(GWEN__LISTPTR *lp); static void GWEN__ListPtr_Clear(GWEN__LISTPTR *lp); static GWEN__LISTPTR *GWEN__ListPtr_dup(GWEN__LISTPTR *lp); struct GWEN_LIST { GWEN_INHERIT_ELEMENT(GWEN_LIST) GWEN__LISTPTR *listPtr; GWEN_REFPTR_INFO *refPtrInfo; }; struct GWEN_CONSTLIST { GWEN_CONSTLIST_ENTRY *first; GWEN_CONSTLIST_ENTRY *last; unsigned int size; }; struct GWEN_LIST_ITERATOR { const GWEN_LIST *list; GWEN_LIST_ENTRY *current; }; struct GWEN_CONSTLIST_ITERATOR { const GWEN_CONSTLIST *list; GWEN_CONSTLIST_ENTRY *current; }; #endif gwenhywfar-4.15.2beta/src/base/memcache.c0000644000175000017500000002160612416477066015172 00000000000000/*************************************************************************** begin : Mon Jul 14 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "memcache_p.h" #include #include GWEN_IDMAP_FUNCTIONS(GWEN_MEMCACHE_ENTRY, GWEN_MemCacheEntry) GWEN_MEMCACHE_ENTRY *GWEN_MemCacheEntry_new(GWEN_MEMCACHE *memCache, uint32_t id, void *dataPtr, size_t dataLen) { GWEN_MEMCACHE_ENTRY *me; GWEN_NEW_OBJECT(GWEN_MEMCACHE_ENTRY, me); me->memCache=memCache; me->id=id; me->dataPtr=dataPtr; me->dataLen=dataLen; me->isValid=1; /* update memcache */ me->memCache->currentCacheEntries++; me->memCache->currentCacheMemory+=me->dataLen; return me; } void GWEN_MemCacheEntry_free(GWEN_MEMCACHE_ENTRY *me) { if (me) { assert(me->useCounter==0); assert(me->memCache); /* update memcache */ me->memCache->currentCacheEntries--; me->memCache->currentCacheMemory-=me->dataLen; if (me->dataPtr && me->dataLen) free(me->dataPtr); GWEN_FREE_OBJECT(me); } } int GWEN_MemCacheEntry_GetUseCounter(const GWEN_MEMCACHE_ENTRY *me) { assert(me); return me->useCounter; } time_t GWEN_MemCacheEntry_GetUnusedSince(GWEN_MEMCACHE_ENTRY *me) { assert(me); return me->unusedSince; } uint32_t GWEN_MemCacheEntry_GetId(GWEN_MEMCACHE_ENTRY *me) { assert(me); return me->id; } void *GWEN_MemCacheEntry_GetDataPtr(GWEN_MEMCACHE_ENTRY *me) { assert(me); return me->dataPtr; } size_t GWEN_MemCacheEntry_GetDataLen(GWEN_MEMCACHE_ENTRY *me) { assert(me); return me->dataLen; } void GWEN_MemCacheEntry_BeginUse(GWEN_MEMCACHE_ENTRY *me) { int rv; assert(me); rv=GWEN_MemCache_Lock(me->memCache); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); assert(0); } me->useCounter++; GWEN_MemCache_Unlock(me->memCache); } void GWEN_MemCacheEntry_EndUse(GWEN_MEMCACHE_ENTRY *me) { int rv; assert(me); rv=GWEN_MemCache_Lock(me->memCache); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); assert(0); } if (me->useCounter>0) { me->useCounter--; if (me->useCounter==0) { if (!(me->isValid)) { GWEN_MemCacheEntry_free(me); } else me->unusedSince=time(0); } } else { DBG_ERROR(GWEN_LOGDOMAIN, "Use counter < 1, aborting"); GWEN_MemCache_Unlock(me->memCache); assert(me->useCounter>0); } GWEN_MemCache_Unlock(me->memCache); } GWEN_MEMCACHE *GWEN_MemCache_new(size_t maxCacheMemory, uint32_t maxCacheEntries) { GWEN_MEMCACHE *mc; GWEN_NEW_OBJECT(GWEN_MEMCACHE, mc); mc->mutex=GWEN_Mutex_new(); mc->idMap=GWEN_MemCacheEntry_IdMap_new(GWEN_IdMapAlgo_Hex4); mc->maxCacheMemory=maxCacheMemory; mc->maxCacheEntries=maxCacheEntries; return mc; } void GWEN_MemCache_free(GWEN_MEMCACHE *mc) { if (mc) { GWEN_MemCacheEntry_IdMap_free(mc->idMap); GWEN_Mutex_free(mc->mutex); GWEN_FREE_OBJECT(mc); } } GWEN_MEMCACHE_ENTRY *GWEN_MemCache_FindEntry(GWEN_MEMCACHE *mc, uint32_t id) { GWEN_MEMCACHE_ENTRY *me; assert(mc); GWEN_MemCache_Lock(mc); me=GWEN_MemCacheEntry_IdMap_Find(mc->idMap, id); if (me) { /* we can't call GWEN_MemCache_BeginUse() here because of the mutex */ me->useCounter++; } GWEN_MemCache_Unlock(mc); return me; } void GWEN_MemCache_PurgeEntry(GWEN_MEMCACHE *mc, uint32_t id) { GWEN_MEMCACHE_ENTRY *me; assert(mc); GWEN_MemCache_Lock(mc); me=GWEN_MemCacheEntry_IdMap_Find(mc->idMap, id); if (me) { me->isValid=0; GWEN_MemCacheEntry_IdMap_Remove(mc->idMap, id); if (me->useCounter==0) GWEN_MemCacheEntry_free(me); } GWEN_MemCache_Unlock(mc); } int GWEN_MemCache__MakeRoom(GWEN_MEMCACHE *mc, size_t neededSize) { assert(mc); /* release unused entries until there is enough memory */ while(neededSize) { GWEN_MEMCACHE_ENTRY *oldestEntry; GWEN_IDMAP_RESULT res; uint32_t currentId; /* get oldest entry */ oldestEntry=NULL; res=GWEN_MemCacheEntry_IdMap_GetFirst(mc->idMap, ¤tId); while(res==GWEN_IdMapResult_Ok) { GWEN_MEMCACHE_ENTRY *me; me=GWEN_MemCacheEntry_IdMap_Find(mc->idMap, currentId); if (me) { if (me->isValid && me->useCounter==0) { if (oldestEntry==NULL) oldestEntry=me; else { if (me->unusedSinceunusedSince) oldestEntry=me; } } } res=GWEN_MemCacheEntry_IdMap_GetNext(mc->idMap, ¤tId); } if (oldestEntry==NULL) /* no unused entry found */ break; /* subtract size of to-be-removed entry from needed size */ if (neededSizedataLen) neededSize=0; else neededSize-=oldestEntry->dataLen; /* remove oldest entry (it is unused, so we also delete it here) */ GWEN_MemCacheEntry_IdMap_Remove(mc->idMap, oldestEntry->id); GWEN_MemCacheEntry_free(oldestEntry); } return (neededSize==0)?0:GWEN_ERROR_MEMORY_FULL; } GWEN_MEMCACHE_ENTRY *GWEN_MemCache_CreateEntry(GWEN_MEMCACHE *mc, uint32_t id, void *dataPtr, size_t dataLen) { GWEN_MEMCACHE_ENTRY *me; assert(mc); GWEN_MemCache_Lock(mc); /* invalidate possibly existing entry in any case */ me=GWEN_MemCacheEntry_IdMap_Find(mc->idMap, id); if (me) { me->isValid=0; GWEN_MemCacheEntry_IdMap_Remove(mc->idMap, id); if (me->useCounter==0) GWEN_MemCacheEntry_free(me); } /* check for limits: entry count */ if (mc->currentCacheEntries>=mc->maxCacheEntries) { int rv; /* release unused entries (at least 1 byte) */ rv=GWEN_MemCache__MakeRoom(mc, 1); if (rv) { DBG_WARN(GWEN_LOGDOMAIN, "Too many entries in use"); GWEN_MemCache_Unlock(mc); return NULL; } } /* check for limits: memory in use */ if ((mc->currentCacheMemory+dataLen)>=mc->maxCacheMemory) { size_t diff; int rv; diff=(mc->currentCacheMemory+dataLen)-mc->maxCacheMemory; /* release unused entries */ rv=GWEN_MemCache__MakeRoom(mc, diff); if (rv) { DBG_WARN(GWEN_LOGDOMAIN, "Too much memory in use"); GWEN_MemCache_Unlock(mc); return NULL; } } /* create new entry */ me=GWEN_MemCacheEntry_new(mc, id, dataPtr, dataLen); assert(me); me->useCounter++; GWEN_MemCacheEntry_IdMap_Insert(mc->idMap, id, me); GWEN_MemCache_Unlock(mc); return me; } void GWEN_MemCache_PurgeEntries(GWEN_MEMCACHE *mc, uint32_t id, uint32_t mask) { GWEN_IDMAP_RESULT res; uint32_t currentId; assert(mc); GWEN_MemCache_Lock(mc); res=GWEN_MemCacheEntry_IdMap_GetFirst(mc->idMap, ¤tId); while(res==GWEN_IdMapResult_Ok) { uint32_t nextId; nextId=currentId; res=GWEN_MemCacheEntry_IdMap_GetNext(mc->idMap, &nextId); if ((currentId & mask)==id) { GWEN_MEMCACHE_ENTRY *me; me=GWEN_MemCacheEntry_IdMap_Find(mc->idMap, currentId); if (me) { me->isValid=0; GWEN_MemCacheEntry_IdMap_Remove(mc->idMap, currentId); if (me->useCounter==0) GWEN_MemCacheEntry_free(me); } } currentId=nextId; } GWEN_MemCache_Unlock(mc); } void GWEN_MemCache_Purge(GWEN_MEMCACHE *mc) { assert(mc); GWEN_MemCache_PurgeEntries(mc, 0, 0); } int GWEN_MemCache_Lock(GWEN_MEMCACHE *mc) { assert(mc); return GWEN_Mutex_Lock(mc->mutex); } int GWEN_MemCache_Unlock(GWEN_MEMCACHE *mc) { assert(mc); return GWEN_Mutex_Unlock(mc->mutex); } gwenhywfar-4.15.2beta/src/base/param_fns.h0000644000175000017500000001373712560445316015402 00000000000000/*************************************************************************** begin : Wed Sep 17 2014 copyright : (C) 2014 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_PARAM_FNS_H #define GWENHYWFAR_PARAM_FNS_H /** * Returns the current value of the given param converted to integer. * @return current value as integer * @param param parameter to read the value from */ GWENHYWFAR_API int GWEN_Param_GetCurrentValueAsInt(const GWEN_PARAM *param); /** * Changes the current value of the given param (converted from integer). * The given value is converted to char and stored. * @param param parameter to change * @param v value to set */ GWENHYWFAR_API void GWEN_Param_SetCurrentValueAsInt(GWEN_PARAM *param, int v); /** * Returns the current value of the given param converted to floating point. * @return current value as floating point * @param param parameter to read the value from */ GWENHYWFAR_API double GWEN_Param_GetCurrentValueAsDouble(const GWEN_PARAM *param); /** * Changes the current value of the given param (converted from floating point). * The given value is converted to char and stored. * @param param parameter to change * @param v value to set */ GWENHYWFAR_API void GWEN_Param_SetCurrentValueAsDouble(GWEN_PARAM *param, double v); /** * Find param with the given name and return its current value. If there is no value (or no * valid value) then a default value is returned. * This is for integer values. * @return value * @param pl list of parameters * @param name name of the parameter * @param defVal default value (returned if param has no value or no valid value). * */ GWENHYWFAR_API int GWEN_Param_List_GetCurrentValueAsInt(const GWEN_PARAM_LIST *pl, const char *name, int defVal); /** * Find param with the given name and change its current value. If there is no param of that name is * found this function does nothing. * This is for integer values. * @return value * @param pl list of parameters * @param name name of the parameter * @param v value to set. * */ GWENHYWFAR_API void GWEN_Param_List_SetCurrentValueAsInt(GWEN_PARAM_LIST *pl, const char *name, int v); /** * Find param with the given name and return its current value. If there is no value (or no * valid value) then a default value is returned. * This is for floating point values. * @return value * @param pl list of parameters * @param name name of the parameter * @param defVal default value (returned if param has no value or no valid value). * */ GWENHYWFAR_API double GWEN_Param_List_GetCurrentValueAsDouble(const GWEN_PARAM_LIST *pl, const char *name, double defVal); /** * Find param with the given name and change its current value. If there is no param of that name is * found this function does nothing. * This is for floating point values. * @return value * @param pl list of parameters * @param name name of the parameter * @param v value to set. * */ GWENHYWFAR_API void GWEN_Param_List_SetCurrentValueAsDouble(GWEN_PARAM_LIST *pl, const char *name, double v); /** * Write the list of parameters to XML. * @param pl list of parameters to write * @param xn XML node to store the parameters */ GWENHYWFAR_API void GWEN_Param_List_WriteXml(const GWEN_PARAM_LIST *pl, GWEN_XMLNODE *xn); /** * Read a list of parameters from XML. * @param pl list to store parameters read * @param xn XML node to read the parameters from */ GWENHYWFAR_API void GWEN_Param_List_ReadXml(GWEN_PARAM_LIST *pl, GWEN_XMLNODE *xn); /** * Write the current values of a list of parameters to XML. * * For every member of the given list an XML node "param" is created below the given XML node * which only contains the attribute "name" (parameter name) and the param's "currentValue" (the current value) * as data node. * Example: * @code * data1 * data2 * @endcode * * @param pl list of parameters to write * @param xn XML node to store the parameters */ GWENHYWFAR_API void GWEN_Param_List_WriteValuesToXml(const GWEN_PARAM_LIST *pl, GWEN_XMLNODE *xn); /** * Read the current values for a list of parameters from XML. * * The XML tree is expected to have been created by @ref GWEN_Param_List_WriteValuesToXml. * Every "param" node below the given XML node is expected to have an attribute "name" with the name of * the param and a data node which holds the current value to set. * Entries for non-existing params are ignored. * @param pl list of parameters to read values for * @param xn XML node to read values for the parameters */ GWENHYWFAR_API void GWEN_Param_List_ReadValuesFromXml(GWEN_PARAM_LIST *pl, GWEN_XMLNODE *xn); #endif gwenhywfar-4.15.2beta/src/base/list1.h0000644000175000017500000003466712416477066014504 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sat Jun 28 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #include #include #include #ifndef GWEN_DUMMY_EMPTY_ARG /** Necessary for MSVC compiler because it does not accept a left-out macro argument. */ # define GWEN_DUMMY_EMPTY_ARG #endif #ifndef GWEN_LIST1_H #define GWEN_LIST1_H #ifdef __cplusplus extern "C" { #endif /** @defgroup GWEN_MACRO_LIST Macros For Typesafe List Handling * * The macros of this group facilitates typesafe use of lists. * *

* Let's assume you have a structure type called MYSTRUCT and you want * to manage lists of them. Let's further assume that you want the * functions dealing with that struct have prefixes like MyStruct (as in * @b MyStruct_new) *

* The header file would look like this: * * @code * * / * mystruct.h * / * * #ifndef MYSTRUCT_H * #define MYSTRUCT_H * * typedef struct MYSTRUCT MYSTRUCT; * * GWEN_LIST_FUNCTION_DEFS(MYSTRUCT, MyStruct); * * struct MYSTRUCT { * GWEN_LIST_ELEMENT(MYSTRUCT); * int myData; * } * * * MYSTRUCT *MyStruct_new(int myData); * void MyStruct_free(MYSTRUCT *myStruct); * * #endif * @endcode *

* This defines all necessary data and function prototypes needed for * list management. *

* *

* The code file would look quite similar to the following: *

* * @code * * / * mystruct.c * / * * GWEN_LIST_FUNCTIONS(MYSTRUCT, MyStruct) * * MYSTRUCT *MyStruct_new(int myData) { * MYSTRUCT *pMyStruct; * * pMyStruct=(MYSTRUCT*)malloc(sizeof(MYSTRUCT)); * memset(pMyStruct, 0, sizeof(MYSTRUCT)); * * GWEN_LIST_INIT(MYSTRUCT, pMyStruct) * * pMyStruct->myData=myData; * return pMyStruct; * } * * void MyStruct_free(MYSTRUCT *pMyStruct) { * if (pMyStruct) { * pMyStruct->myData=0; * * GWEN_LIST_FINI(MYSTRUCT, pMyStruct) * * free(pMyStruct); * } * } * * @endcode * Please note the three macros used in the code file: *
    *
  • @ref GWEN_LIST_FUNCTIONS creates the functions for the list * management
  • *
  • @ref GWEN_LIST_INIT initializes the list data inside your * struct to defined values
  • *
  • @ref GWEN_LIST_FINI frees all ressources occupied by the list * management code. Please note that this macro should be the last * statement inside the destructor function before @b free()
  • *
* *

Note: When writing these macro code lines, the original ISO * C89 standard for the C language does not allow terminating the * macro statement with a semicolon ';'. Any recent compiler will * probably silently ignore such an extra ';', but you should be * aware that this can cause problems once one of your users tries * to compile this with a different compiler. Therefore these code * lines should end directly with the closing parentheses.

* *

* The list management code assumes that there is a function called * (in this example) @b MyStruct_free() (or generally: TYPEPREFIX_free). * This is used when destroying a list of MYSTRUCT elements. In this case * all elements still enlisted are destroyed upon destruction of the list. *

*/ /*@{*/ /** @name Internal Functions * * All functions and structs within this group should be considered * internal. They just implement the functionality behind the typesafe list * macros (see @ref GWEN_LIST_FUNCTION_LIB_DEFS and following). */ /*@{*/ typedef struct GWEN_LIST1 GWEN_LIST1; typedef struct GWEN_LIST1_ELEMENT GWEN_LIST1_ELEMENT; typedef int GWENHYWFAR_CB (*GWEN_LIST1_SORT_FN)(const void *a, const void *b, int ascending); /** Allocate (create) a new empty list. */ GWENHYWFAR_API GWEN_LIST1 *GWEN_List1_new(void); /** Free (delete) an existing list. The list elements are * untouched by this function; they need to be freed * beforehand. */ GWENHYWFAR_API void GWEN_List1_free(GWEN_LIST1 *l); /** Returns the number of elements in this list. This value is * cached in the list structure, so this function is a cheap * function. */ GWENHYWFAR_API int GWEN_List1_GetCount(const GWEN_LIST1 *l); /** Adds (appends) a list element at the end of the list. (This * operation is also called "append" or "push_back" elsewhere.) */ GWENHYWFAR_API int GWEN_List1_Add(GWEN_LIST1 *l, GWEN_LIST1_ELEMENT *el); /** Inserts (prepends) a list element at the beginning of the * list. (This operation is also called "prepend" or "push_front" * elsewhere.) */ GWENHYWFAR_API int GWEN_List1_Insert(GWEN_LIST1 *l, GWEN_LIST1_ELEMENT *el); /** Deletes (removes) a list element from the list it used to * belong to. The list element is not free'd or anything, it is * only removed from the list it used to belong to. (This * operation is also called "remove" or "unlink" elsewhere.) */ GWENHYWFAR_API int GWEN_List1_Del(GWEN_LIST1_ELEMENT *el); /** Adds (appends) the second list to the end of the first * list. (This operation is also called "append" or "concatenate" * elsewhere.) */ GWENHYWFAR_API int GWEN_List1_AddList(GWEN_LIST1 *dest, GWEN_LIST1 *l); /** Returns the data pointer of the first list element. */ GWENHYWFAR_API void *GWEN_List1_GetFirst(const GWEN_LIST1 *l); /** Returns the data pointer of the last list element. */ GWENHYWFAR_API void *GWEN_List1_GetLast(const GWEN_LIST1 *l); GWENHYWFAR_API GWEN_LIST1_SORT_FN GWEN_List1_SetSortFn(GWEN_LIST1 *l, GWEN_LIST1_SORT_FN fn); GWENHYWFAR_API void GWEN_List1_Sort(GWEN_LIST1 *l, int ascending); /** Allocate (create) a new list element structure. */ GWENHYWFAR_API GWEN_LIST1_ELEMENT *GWEN_List1Element_new(void *d); /** Free (delete) a list element structure. */ GWENHYWFAR_API void GWEN_List1Element_free(GWEN_LIST1_ELEMENT *el); /** Returns the data pointer of the given list element * structure. */ GWENHYWFAR_API void *GWEN_List1Element_GetData(const GWEN_LIST1_ELEMENT *el); /** Returns the data pointer of the list element that is the * previous (predecessor) to the given one in its list. If there * is no such prepending list element, returns NULL. */ GWENHYWFAR_API void *GWEN_List1Element_GetPrevious(const GWEN_LIST1_ELEMENT *el); /** Returns the data pointer of the list element that is the next * one (successor) to the given one in its list. If there is no * such prepending list element, returns NULL. */ GWENHYWFAR_API void *GWEN_List1Element_GetNext(const GWEN_LIST1_ELEMENT *el); /*@}*/ /** @name Typesafe Macros * */ /*@{*/ /** * Use this inside the declaration of a struct for which you want to create * lists. */ #define GWEN_LIST_ELEMENT(t) \ GWEN_LIST1_ELEMENT *_list1_element; /** * Use this macro in your public header files to export only list functions * which do not modify a list. This allows your code to return lists which can * not be modified by callers. It also prevents callers from creating their * own lists (this is sometimes needed). */ #define GWEN_LIST_FUNCTION_LIB_DEFS_CONST(t, pr, decl) \ typedef GWEN_LIST1 t##_LIST; \ typedef int GWENHYWFAR_CB (*t##_LIST_SORT_FN)(const t *a, const t *b, int ascending); \ \ \ decl t* pr##_List_First(const t##_LIST *l); \ decl t* pr##_List_Last(const t##_LIST *l); \ decl t* pr##_List_Next(const t *element); \ decl t* pr##_List_Previous(const t *element); \ decl uint32_t pr##_List_GetCount(const t##_LIST *l); \ decl int pr##_List_HasElement(const t##_LIST *l, const t *element); \ decl t##_LIST_SORT_FN pr##_List_SetSortFn(t##_LIST *l, t##_LIST_SORT_FN fn); \ decl void pr##_List_Sort(t##_LIST *l, int ascending); #define GWEN_LIST_FUNCTION_LIB_DEFS_NOCONST(t, pr, decl) \ typedef GWEN_LIST1_ELEMENT t##_LIST_ELEMENT; \ \ decl void pr##_List_Clear(t##_LIST *l); \ decl t##_LIST* pr##_List_new(); \ decl void pr##_List_free(t##_LIST *l); \ decl int pr##_List_AddList(t##_LIST *dst, t##_LIST *l); \ decl int pr##_List_Add(t *element, t##_LIST *list); \ decl int pr##_List_Insert(t *element, t##_LIST *list); \ decl int pr##_List_Del(t *element); \ #define GWEN_LIST_FUNCTION_DEFS_CONST(t, pr) \ GWEN_LIST_FUNCTION_LIB_DEFS_CONST(t, pr, GWEN_DUMMY_EMPTY_ARG) #define GWEN_LIST_FUNCTION_DEFS_NOCONST(t, pr) \ GWEN_LIST_FUNCTION_LIB_DEFS_NOCONST(t, pr, GWEN_DUMMY_EMPTY_ARG) /** * Use this in public header files to define some prototypes for list * functions. * Let's assume the type of your list elements is "MYTYPE" and you want to * use the prefix "MyType_" for the list functions. * The following function prototypes will then be created: *
    *
  • * void MyType_List_Add(MYTYPE *element, MYTYPE_LIST *list);
    * Adds (appends) a MYTYPE struct at the end of the given * list. (We apologize for the unusual argument order here.) *
  • *
  • * void MyType_List_Del(MYTYPE *element);
    * Removes a MyType struct from the list it is enlisted to. *
  • *
  • * MYTYPE *MyType_List_First(MYTYPE *element);
    * Returns the first element of the given list. *
  • *
  • * MYTYPE* MyType_List_Next(const MYTYPE *element);
    * Returns the next list element to the given one (the * successor) in its list. *
  • *
  • * MYTYPE* MyType_List_Previous(const MYTYPE *element);
    * Returns the previous list element to the given one (the * predecessor) in its list. *
  • *
  • * void MyType_List_Clear(MYTYPE *element);
    * Frees all entries of the given list. * This function assumes that there is a function Mytype_free(). *
  • *
  • * MYTYPE_LIST *MyType_List_new();
    * Creates a new list of elements of MYTYPE type. *
  • *
  • * void MyType_List_free(MYTYPE_LIST *l);
    * Clears and frees a list of elements of MYTYPE type. * All objects inside the list are freed. * This function assumes that there is a function Mytype_free(). *
  • *
* */ #define GWEN_LIST_FUNCTION_LIB_DEFS(t, pr, decl) \ GWEN_LIST_FUNCTION_LIB_DEFS_CONST(t, pr, decl) \ GWEN_LIST_FUNCTION_LIB_DEFS_NOCONST(t, pr, decl) /** * This macro should be used in applications, not in libraries. In * libraries please use the macro @ref GWEN_LIST_FUNCTION_LIB_DEFS. */ #define GWEN_LIST_FUNCTION_DEFS(t, pr) \ GWEN_LIST_FUNCTION_LIB_DEFS(t, pr, GWEN_DUMMY_EMPTY_ARG) /** * Use this inside your code files (*.c). * Actually implements the functions for which the prototypes have been * defined via @ref GWEN_LIST_FUNCTION_DEFS. */ #define GWEN_LIST_FUNCTIONS(t, pr) \ \ int pr##_List_Add(t *element, t##_LIST *l) { \ return GWEN_List1_Add(l, element->_list1_element); \ } \ \ int pr##_List_AddList(t##_LIST *dst, t##_LIST *l) { \ return GWEN_List1_AddList(dst, l); \ } \ \ int pr##_List_Insert(t *element, t##_LIST *l) { \ return GWEN_List1_Insert(l, element->_list1_element); \ } \ \ int pr##_List_Del(t *element){ \ return GWEN_List1_Del(element->_list1_element); \ }\ \ t* pr##_List_First(const t##_LIST *l) { \ if (l) return (t*)GWEN_List1_GetFirst(l);\ else return 0; \ } \ \ t* pr##_List_Last(const t##_LIST *l) { \ if (l) return (t*) GWEN_List1_GetLast(l);\ else return 0; \ } \ \ void pr##_List_Clear(t##_LIST *l) { \ t* el; \ while( (el=GWEN_List1_GetFirst(l)) ) {\ pr##_List_Del(el);\ pr##_free(el);\ } /* while */ \ } \ \ int pr##_List_HasElement(const t##_LIST *l, const t *element) { \ const t* el; \ el=(t*)GWEN_List1_GetFirst(l); \ while(el) {\ if (el==element) \ return 1; \ el=(const t*)GWEN_List1Element_GetNext(el->_list1_element); \ } /* while */ \ return 0; \ } \ \ t##_LIST* pr##_List_new(){\ return (t##_LIST*)GWEN_List1_new(); \ }\ \ void pr##_List_free(t##_LIST *l) {\ if (l) { \ pr##_List_Clear(l);\ GWEN_List1_free(l); \ }\ } \ \ t* pr##_List_Next(const t *element) { \ return (t*)GWEN_List1Element_GetNext(element->_list1_element);\ } \ \ t* pr##_List_Previous(const t *element) { \ return (t*)GWEN_List1Element_GetPrevious(element->_list1_element);\ } \ \ uint32_t pr##_List_GetCount(const t##_LIST *l){\ return GWEN_List1_GetCount(l);\ } \ \ t##_LIST_SORT_FN pr##_List_SetSortFn(t##_LIST *l, t##_LIST_SORT_FN fn) { \ return (t##_LIST_SORT_FN) GWEN_List1_SetSortFn(l, (GWEN_LIST1_SORT_FN) fn); \ } \ \ void pr##_List_Sort(t##_LIST *l, int ascending){\ GWEN_List1_Sort(l, ascending);\ } /** * Use this in your code file (*.c) inside the init code for the struct * you want to use in lists (in GWEN these are the functions which end with * "_new". */ #define GWEN_LIST_INIT(t, element) \ element->_list1_element=GWEN_List1Element_new(element); /** * Use this in your code file (*.c) inside the fini code for the struct * you want to use in lists (in GWEN these are the functions which end with * "_free". */ #define GWEN_LIST_FINI(t, element) \ if (element && element->_list1_element) { \ GWEN_List1Element_free(element->_list1_element); \ element->_list1_element=0; \ } /*@}*/ /*@}*/ /* defgroup */ #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/base/buffer.c0000644000175000017500000006061312416477066014702 00000000000000/*************************************************************************** begin : Fri Sep 12 2003 copyright : (C) 2003-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "buffer_p.h" #include #include #include GWEN_BUFFER *GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take) { GWEN_BUFFER *bf; GWEN_NEW_OBJECT(GWEN_BUFFER, bf); bf->_refCount=1; if (!buffer) { /* allocate buffer */ bf->realPtr=(char*)GWEN_Memory_malloc(size+1); assert(bf->realPtr); bf->ptr=bf->realPtr; bf->realBufferSize=size+1; bf->bufferSize=size+1; bf->flags=GWEN_BUFFER_FLAGS_OWNED; bf->bytesUsed=used; bf->ptr[0]=0; } else { /* use existing buffer */ bf->realPtr=buffer; bf->ptr=buffer; bf->realBufferSize=size; bf->bufferSize=size; bf->bytesUsed=used; if (take) bf->flags=GWEN_BUFFER_FLAGS_OWNED; } bf->mode=GWEN_BUFFER_MODE_DEFAULT; bf->hardLimit=GWEN_BUFFER_DEFAULT_HARDLIMIT; bf->step=GWEN_BUFFER_DYNAMIC_STEP; return bf; } void GWEN_Buffer_Attach(GWEN_BUFFER *bf) { assert(bf->_refCount); bf->_refCount++; } void GWEN_Buffer_free(GWEN_BUFFER *bf) { if (bf) { assert(bf->_refCount); if (bf->_refCount==1) { if (bf->flags & GWEN_BUFFER_FLAGS_OWNED) GWEN_Memory_dealloc(bf->realPtr); if (bf->syncIo) { if (bf->flags & GWEN_BUFFER_FLAGS_OWN_SYNCIO) GWEN_SyncIo_free(bf->syncIo); } GWEN_FREE_OBJECT(bf); } else bf->_refCount--; } } GWEN_BUFFER *GWEN_Buffer_dup(GWEN_BUFFER *bf) { GWEN_BUFFER *newbf; uint32_t i; GWEN_NEW_OBJECT(GWEN_BUFFER, newbf); newbf->_refCount=1; if (bf->realPtr && bf->realBufferSize) { newbf->realPtr=(char*)GWEN_Memory_malloc(bf->realBufferSize); newbf->ptr=newbf->realPtr+(bf->ptr-bf->realPtr); newbf->realBufferSize=bf->realBufferSize; newbf->bufferSize=bf->bufferSize; newbf->bytesUsed=bf->bytesUsed; if (newbf->bytesUsed) { unsigned int toCopy; toCopy=bf->bytesUsed+1; if (toCopy>(newbf->bufferSize)) { fprintf(stderr, "Panic: Too many bytes in buffer"); abort(); } memmove(newbf->ptr, bf->ptr, toCopy); } newbf->pos=bf->pos; } newbf->flags=bf->flags | GWEN_BUFFER_FLAGS_OWNED; newbf->mode=bf->mode&GWEN_BUFFER_MODE_COPYMASK; newbf->hardLimit=bf->hardLimit; newbf->step=bf->step; for (i=0; ibookmarks[i]=bf->bookmarks[i]; return newbf; } int GWEN_Buffer_Relinquish(GWEN_BUFFER *bf) { assert(bf); if (!(bf->flags & GWEN_BUFFER_FLAGS_OWNED)) return GWEN_ERROR_INVALID; if (bf->realPtr!=bf->ptr) return GWEN_ERROR_INVALID; bf->flags&=~GWEN_BUFFER_FLAGS_OWNED; return 0; } int GWEN_Buffer_ReserveBytes(GWEN_BUFFER *bf, uint32_t res) { assert(bf); if (!res) return 0; if (bf->bytesUsed) { /* we need to move data */ if (GWEN_Buffer_AllocRoom(bf, res)) return -1; memmove(bf->ptr+res, bf->ptr, bf->bytesUsed); bf->ptr+=res; bf->bufferSize-=res; return 0; } else { /* no data in buffer, so simply move ptrs */ if (GWEN_Buffer_AllocRoom(bf, res)) return -1; bf->ptr+=res; bf->bufferSize-=res; if (bf->bufferSize) bf->ptr[0]=0; return 0; } } uint32_t GWEN_Buffer_GetMode(GWEN_BUFFER *bf) { assert(bf); return bf->mode; } void GWEN_Buffer_SetMode(GWEN_BUFFER *bf, uint32_t mode) { assert(bf); bf->mode=mode; } void GWEN_Buffer_AddMode(GWEN_BUFFER *bf, uint32_t mode) { assert(bf); bf->mode|=mode; } void GWEN_Buffer_SubMode(GWEN_BUFFER *bf, uint32_t mode) { assert(bf); bf->mode&=~mode; } uint32_t GWEN_Buffer_GetHardLimit(GWEN_BUFFER *bf) { assert(bf); return bf->hardLimit; } void GWEN_Buffer_SetHardLimit(GWEN_BUFFER *bf, uint32_t l) { assert(bf); assert(l); bf->hardLimit=l; } char *GWEN_Buffer_GetStart(const GWEN_BUFFER *bf) { assert(bf); return bf->ptr; } uint32_t GWEN_Buffer_GetSize(const GWEN_BUFFER *bf) { assert(bf); if (bf->mode & GWEN_BUFFER_MODE_DYNAMIC) return bf->hardLimit; return bf->bufferSize; } uint32_t GWEN_Buffer_GetPos(const GWEN_BUFFER *bf) { assert(bf); return bf->pos; } int GWEN_Buffer_SetPos(GWEN_BUFFER *bf, uint32_t i) { assert(bf); if (i>=bf->bufferSize) { if (bf->mode & GWEN_BUFFER_MODE_USE_SYNCIO) { bf->pos=i; } else { DBG_ERROR(GWEN_LOGDOMAIN, "Position %d outside buffer boundaries (%d bytes)", i, bf->bufferSize); return GWEN_ERROR_BUFFER_OVERFLOW; } } bf->pos=i; return 0; } uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf) { assert(bf); return bf->bytesUsed; } int GWEN_Buffer_AllocRoom(GWEN_BUFFER *bf, uint32_t size) { assert(bf); if (bf->mode & GWEN_BUFFER_MODE_READONLY) { DBG_ERROR(GWEN_LOGDOMAIN, "Read-only mode"); if (bf->mode & GWEN_BUFFER_MODE_ABORT_ON_MEMFULL) { abort(); } return GWEN_ERROR_PERMISSIONS; } /*DBG_VERBOUS(GWEN_LOGDOMAIN, "Allocating %d bytes", size);*/ if (bf->bytesUsed+(size+1) > bf->bufferSize) { /* need to realloc */ uint32_t nsize; uint32_t noffs; uint32_t reserved; void *p; /* check for dynamic mode */ if (!(bf->mode & GWEN_BUFFER_MODE_DYNAMIC)) { DBG_ERROR(GWEN_LOGDOMAIN, "Not in dynamic mode"); if (bf->mode & GWEN_BUFFER_MODE_ABORT_ON_MEMFULL) { abort(); } return GWEN_ERROR_BUFFER_OVERFLOW; } /* calculate reserved bytes (to set ptr later) */ reserved=bf->ptr-bf->realPtr; /* this is the raw number of bytes we need (we always add a NULL * character) */ nsize=bf->bytesUsed+(size+1)-bf->bufferSize; /* round it up */ nsize=(nsize+(bf->step-1)); nsize&=~(bf->step-1); /* store number of additional bytes to allocate */ noffs=nsize; /* add current size to it */ nsize+=bf->realBufferSize; if (nsize>bf->hardLimit) { DBG_ERROR(GWEN_LOGDOMAIN, "Size is beyond hard limit (%d>%d)", nsize, bf->hardLimit); if (bf->mode & GWEN_BUFFER_MODE_ABORT_ON_MEMFULL) { abort(); } return GWEN_ERROR_BUFFER_OVERFLOW; } DBG_VERBOUS(GWEN_LOGDOMAIN, "Reallocating from %d to %d bytes", bf->bufferSize, nsize); if (bf->realPtr==NULL) { p=GWEN_Memory_malloc(nsize); } else { p=GWEN_Memory_realloc(bf->realPtr, nsize); } if (!p) { DBG_ERROR(GWEN_LOGDOMAIN, "Realloc failed."); if (bf->mode & GWEN_BUFFER_MODE_ABORT_ON_MEMFULL) { abort(); } return GWEN_ERROR_MEMORY_FULL; } /* store new size and pointer */ bf->realPtr=p; bf->ptr=bf->realPtr+reserved; bf->realBufferSize=nsize; bf->bufferSize+=noffs; } return 0; } int GWEN_Buffer_AppendBytes(GWEN_BUFFER *bf, const char *buffer, uint32_t size) { int rv; assert(bf); if (bf->mode & GWEN_BUFFER_MODE_READONLY) { DBG_ERROR(GWEN_LOGDOMAIN, "Read-only mode"); if (bf->mode & GWEN_BUFFER_MODE_ABORT_ON_MEMFULL) { abort(); } return GWEN_ERROR_PERMISSIONS; } rv=GWEN_Buffer_AllocRoom(bf, size); if (rv<0) { DBG_DEBUG(GWEN_LOGDOMAIN, "called from here"); return rv; } memmove(bf->ptr+bf->bytesUsed, buffer, size); if (bf->pos==bf->bytesUsed) bf->pos+=size; bf->bytesUsed+=size; /* append a NULL to allow using the buffer as ASCIIZ string */ bf->ptr[bf->bytesUsed]=0; return 0; } int GWEN_Buffer_AppendByte(GWEN_BUFFER *bf, char c) { int rv; assert(bf); if (bf->mode & GWEN_BUFFER_MODE_READONLY) { DBG_ERROR(GWEN_LOGDOMAIN, "Read-only mode"); if (bf->mode & GWEN_BUFFER_MODE_ABORT_ON_MEMFULL) { abort(); } return GWEN_ERROR_PERMISSIONS; } if (bf->bytesUsed+1+1 > bf->bufferSize) { rv=GWEN_Buffer_AllocRoom(bf, 1+1); if (rv<0) { DBG_DEBUG(GWEN_LOGDOMAIN, "here"); return rv; } } bf->ptr[bf->bytesUsed]=c; if (bf->pos == bf->bytesUsed) bf->pos++; /* append a NULL to allow using the buffer as ASCIIZ string */ bf->ptr[++(bf->bytesUsed)]=0; return 0; } int GWEN_Buffer__FillBuffer_SyncIo(GWEN_BUFFER *bf) { if (bf->syncIo) { uint32_t toread; int rv; toread=bf->pos-bf->bytesUsed+1; if (GWEN_Buffer_AllocRoom(bf, toread+1)) { DBG_INFO(GWEN_LOGDOMAIN, "Buffer too small"); return GWEN_ERROR_GENERIC; } rv=GWEN_SyncIo_ReadForced(bf->syncIo, (uint8_t*) (bf->ptr+bf->bytesUsed), toread); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } else if (rv==0) { DBG_INFO(GWEN_LOGDOMAIN, "EOF met"); return GWEN_ERROR_EOF; } bf->bytesUsed+=rv; } else { DBG_DEBUG(GWEN_LOGDOMAIN, "End of used area reached and no SYNCIO (%d bytes)", bf->pos); return GWEN_ERROR_EOF; } return 0; } int GWEN_Buffer__FillBuffer(GWEN_BUFFER *bf) { assert(bf); if (bf->mode & GWEN_BUFFER_MODE_USE_SYNCIO) return GWEN_Buffer__FillBuffer_SyncIo(bf); else { DBG_DEBUG(GWEN_LOGDOMAIN, "End of used area reached (%d bytes)", bf->pos); return GWEN_ERROR_EOF; } } int GWEN_Buffer_PeekByte(GWEN_BUFFER *bf) { assert(bf); if (bf->pos>=bf->bytesUsed) { int rv; rv=GWEN_Buffer__FillBuffer(bf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } return (unsigned char) (bf->ptr[bf->pos]); } int GWEN_Buffer_ReadByte(GWEN_BUFFER *bf) { assert(bf); if (bf->pos>=bf->bytesUsed) { int rv; rv=GWEN_Buffer__FillBuffer(bf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } return (unsigned char) (bf->ptr[bf->pos++]); } int GWEN_Buffer_IncrementPos(GWEN_BUFFER *bf, uint32_t i) { assert(bf); if (i+bf->pos>=bf->bufferSize) { if (!(bf->mode & GWEN_BUFFER_MODE_USE_SYNCIO)) { DBG_DEBUG(GWEN_LOGDOMAIN, "Position %d outside buffer boundaries (%d bytes)\n" "Incrementing anyway", i+bf->pos, bf->bufferSize); } } bf->pos+=i; return 0; } int GWEN_Buffer_AdjustUsedBytes(GWEN_BUFFER *bf) { assert(bf); if (bf->pos<=bf->bufferSize) { if (bf->pos>bf->bytesUsed) { DBG_DEBUG(GWEN_LOGDOMAIN, "Adjusted buffer (uses now %d bytes)", bf->pos); bf->bytesUsed=bf->pos; } /* append a NULL to allow using the buffer as ASCIIZ string */ bf->ptr[bf->bytesUsed]=0; return 0; } else { DBG_ERROR(GWEN_LOGDOMAIN, "Pointer outside buffer size (%d bytes)", bf->bufferSize); return GWEN_ERROR_BUFFER_OVERFLOW; } } int GWEN_Buffer_DecrementPos(GWEN_BUFFER *bf, uint32_t i) { assert(bf); if (bf->pospos-i, bf->bufferSize); return GWEN_ERROR_BUFFER_OVERFLOW; } bf->pos-=i; return 0; } int GWEN_Buffer_AppendBuffer(GWEN_BUFFER *bf, GWEN_BUFFER *sf) { assert(bf); assert(sf); if (bf->mode & GWEN_BUFFER_MODE_READONLY) { DBG_ERROR(GWEN_LOGDOMAIN, "Read-only mode"); if (bf->mode & GWEN_BUFFER_MODE_ABORT_ON_MEMFULL) { abort(); } return GWEN_ERROR_PERMISSIONS; } if (sf->bytesUsed) return GWEN_Buffer_AppendBytes(bf, sf->ptr, sf->bytesUsed); return 0; } uint32_t GWEN_Buffer_GetMaxUnsegmentedWrite(GWEN_BUFFER *bf) { assert(bf); return (bf->bufferSize-bf->bytesUsed); } uint32_t GWEN_Buffer_GetBytesLeft(GWEN_BUFFER *bf) { assert(bf); if (bf->posbytesUsed) return bf->bytesUsed-bf->pos; else return 0; } char *GWEN_Buffer_GetPosPointer(const GWEN_BUFFER *bf) { assert(bf); return bf->ptr+bf->pos; } void GWEN_Buffer_OverwriteContent(GWEN_BUFFER *bf, int c) { assert(bf); if (bf->realPtr && bf->realBufferSize) { memset(bf->realPtr, c, bf->realBufferSize); } } uint32_t GWEN_Buffer_GetBookmark(const GWEN_BUFFER *bf, unsigned int idx) { assert(bf); assert(idxbookmarks[idx]; } void GWEN_Buffer_SetBookmark(GWEN_BUFFER *bf, unsigned int idx, uint32_t v) { assert(bf); assert(idxbookmarks[idx]=v; } void GWEN_Buffer_Dump(GWEN_BUFFER *bf, unsigned int insert) { uint32_t k; for (k=0; kpos, bf->pos); for (k=0; kbufferSize); for (k=0; khardLimit); for (k=0; kbytesUsed); for (k=0; kptr-bf->realPtr)); for (k=0; kflags); if (bf->flags & GWEN_BUFFER_FLAGS_OWNED) fprintf(stderr, "OWNED "); fprintf(stderr, ")\n"); for (k=0; kmode); if (bf->mode & GWEN_BUFFER_MODE_DYNAMIC) fprintf(stderr, "DYNAMIC "); if (bf->mode & GWEN_BUFFER_MODE_READONLY) fprintf(stderr, "READONLY "); if (bf->mode & GWEN_BUFFER_MODE_ABORT_ON_MEMFULL) fprintf(stderr, "ABORT_ON_MEMFULL "); fprintf(stderr, ")\n"); for (k=0; kbookmarks[k]); fprintf(stderr, "\n"); if (bf->ptr && bf->bytesUsed) { for (k=0; kptr, bf->bytesUsed, insert+1); } } void GWEN_Buffer_Reset(GWEN_BUFFER *bf) { assert(bf); bf->pos=0; bf->bytesUsed=0; bf->ptr[0]=0; } void GWEN_Buffer_Rewind(GWEN_BUFFER *bf) { assert(bf); bf->pos=0; } int GWEN_Buffer_ReadBytes(GWEN_BUFFER *bf, char *buffer, uint32_t *size) { /* optimized for speed */ uint32_t i; char *pdst; DBG_VERBOUS(GWEN_LOGDOMAIN, "About to copy up to %d bytes", *size); i=0; pdst=buffer; while(i<*size) { int j; int srcLeft; if (bf->pos>=bf->bytesUsed) { if (GWEN_Buffer__FillBuffer(bf)) { DBG_DEBUG(GWEN_LOGDOMAIN, "Could not fill buffer, but that's ok"); break; } } srcLeft=bf->bytesUsed - bf->pos; if (srcLeft==0) break; j=(*size)-i; if (j>srcLeft) j=srcLeft; DBG_VERBOUS(GWEN_LOGDOMAIN, "Copying %d bytes", j); memmove(pdst, bf->ptr + bf->pos, j); pdst+=j; i+=j; bf->pos+=j; } /* while */ *size=i; DBG_VERBOUS(GWEN_LOGDOMAIN, "Copied %d bytes", *size); return 0; } uint32_t GWEN_Buffer_GetStep(GWEN_BUFFER *bf) { assert(bf); return bf->step; } void GWEN_Buffer_SetStep(GWEN_BUFFER *bf, uint32_t step) { assert(bf); bf->step=step; } void GWEN_Buffer_AdjustBookmarks(GWEN_BUFFER *bf, uint32_t pos, int offset) { uint32_t i; assert(bf); for (i=0; ibookmarks[i]>=pos) bf->bookmarks[i]+=offset; } /* for */ } int GWEN_Buffer_InsertRoom(GWEN_BUFFER *bf, uint32_t size) { char *p; int i; int rv; assert(bf); if (bf->mode & GWEN_BUFFER_MODE_READONLY) { DBG_ERROR(GWEN_LOGDOMAIN, "Read-only mode"); if (bf->mode & GWEN_BUFFER_MODE_ABORT_ON_MEMFULL) { abort(); } return GWEN_ERROR_PERMISSIONS; } if (bf->pos==0) { if (bf->bytesUsed==0) { /* no bytes used, simply return */ rv=GWEN_Buffer_AllocRoom(bf, size); if (rv) { DBG_DEBUG(GWEN_LOGDOMAIN, "called from here"); return rv; } bf->bytesUsed+=size; /* append "0" behind buffer */ bf->ptr[bf->bytesUsed]=0; return 0; } else { if ( (bf->ptr - bf->realPtr) >= (int)size ) { /* simply occupy the reserved space */ bf->ptr-=size; bf->bytesUsed+=size; bf->bufferSize+=size; GWEN_Buffer_AdjustBookmarks(bf, bf->pos, size); return 0; } } } rv=GWEN_Buffer_AllocRoom(bf, size); if (rv<0) { DBG_DEBUG(GWEN_LOGDOMAIN, "called from here"); return rv; } assert(bf->pos<=bf->bytesUsed); p=bf->ptr+bf->pos; i=bf->bytesUsed-bf->pos; if (i>0) /* move current data at pos out of the way */ memmove(p+size, p, i); bf->bytesUsed+=size; /* append "0" behind buffer */ bf->ptr[bf->bytesUsed]=0; GWEN_Buffer_AdjustBookmarks(bf, bf->pos, size); return 0; } int GWEN_Buffer_RemoveRoom(GWEN_BUFFER *bf, uint32_t size) { char *p; int i; assert(bf); if (bf->mode & GWEN_BUFFER_MODE_READONLY) { DBG_ERROR(GWEN_LOGDOMAIN, "Read-only mode"); if (bf->mode & GWEN_BUFFER_MODE_ABORT_ON_MEMFULL) { abort(); } return GWEN_ERROR_PERMISSIONS; } if (bf->bytesUsedpos) { /* can't remove more bytes than we have */ return GWEN_ERROR_INVALID; } if (bf->pos==0) { /* simply add to reserved space */ bf->ptr+=size; bf->bytesUsed-=size; bf->bufferSize-=size; } else { /* we need to get the rest closer */ p=bf->ptr+bf->pos+size; i=bf->bytesUsed-bf->pos-size; memmove(bf->ptr+bf->pos, p, i); bf->bytesUsed-=size; } /* append "0" behind buffer */ bf->ptr[bf->bytesUsed]=0; GWEN_Buffer_AdjustBookmarks(bf, bf->pos, -((int)size)); return 0; } int GWEN_Buffer_ReplaceBytes(GWEN_BUFFER *bf, uint32_t rsize, const char *buffer, uint32_t size) { int32_t d; int rv; if (bf->mode & GWEN_BUFFER_MODE_READONLY) { DBG_ERROR(GWEN_LOGDOMAIN, "Read-only mode"); if (bf->mode & GWEN_BUFFER_MODE_ABORT_ON_MEMFULL) { abort(); } return GWEN_ERROR_PERMISSIONS; } /* either insert or remove bytes */ d=size-rsize; if (d<0) { rv=GWEN_Buffer_RemoveRoom(bf, -d); } else if (d>0) { rv=GWEN_Buffer_InsertRoom(bf, d); } else /* nothing to adjust if sizes are the same */ rv=0; if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Error replacing %d bytes with %d bytes (%d)", rsize, size, rv); return rv; } /* write new bytes */ if (size) memmove(bf->ptr+bf->pos, buffer, size); return 0; } int GWEN_Buffer_InsertBytes(GWEN_BUFFER *bf, const char *buffer, uint32_t size) { int rv; assert(bf); assert(buffer); if (bf->mode & GWEN_BUFFER_MODE_READONLY) { DBG_ERROR(GWEN_LOGDOMAIN, "Read-only mode"); if (bf->mode & GWEN_BUFFER_MODE_ABORT_ON_MEMFULL) { abort(); } return GWEN_ERROR_PERMISSIONS; } rv=GWEN_Buffer_InsertRoom(bf, size); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } memmove(bf->ptr+bf->pos, buffer, size); return 0; } int GWEN_Buffer_InsertByte(GWEN_BUFFER *bf, char c) { int rv; assert(bf); if (bf->mode & GWEN_BUFFER_MODE_READONLY) { DBG_ERROR(GWEN_LOGDOMAIN, "Read-only mode"); if (bf->mode & GWEN_BUFFER_MODE_ABORT_ON_MEMFULL) { abort(); } return GWEN_ERROR_PERMISSIONS; } rv=GWEN_Buffer_InsertRoom(bf, 1); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } bf->ptr[bf->pos]=c; return 0; } int GWEN_Buffer_InsertBuffer(GWEN_BUFFER *bf, GWEN_BUFFER *sf) { assert(bf); assert(sf); return GWEN_Buffer_InsertBytes(bf, sf->ptr, sf->bytesUsed); } int GWEN_Buffer_Crop(GWEN_BUFFER *bf, uint32_t pos, uint32_t l) { int offset; if (bf->mode & GWEN_BUFFER_MODE_READONLY) { DBG_ERROR(GWEN_LOGDOMAIN, "Read-only mode"); if (bf->mode & GWEN_BUFFER_MODE_ABORT_ON_MEMFULL) { abort(); } return GWEN_ERROR_PERMISSIONS; } if (pos>=bf->bufferSize) { DBG_ERROR(GWEN_LOGDOMAIN, "Position outside buffer"); return -1; } if (bf->bytesUsed-posptr+=pos; bf->bufferSize-=pos; if (bf->pos>pos) offset=pos; else offset=bf->pos; bf->pos-=offset; bf->bytesUsed=l; /* adjust position after possible truncation */ if (bf->pos>bf->bytesUsed) bf->pos=bf->bytesUsed; bf->ptr[bf->bytesUsed]=0; GWEN_Buffer_AdjustBookmarks(bf, offset, -offset); return 0; } int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer) { assert(bf); assert(buffer); return GWEN_Buffer_AppendBytes(bf, buffer, strlen(buffer)); } int GWEN_Buffer_InsertString(GWEN_BUFFER *bf, const char *buffer) { assert(bf); assert(buffer); return GWEN_Buffer_InsertBytes(bf, buffer, strlen(buffer)); } void GWEN_Buffer_SetSourceSyncIo(GWEN_BUFFER *bf, GWEN_SYNCIO *sio, int take) { assert(bf); if (bf->syncIo) { if (bf->flags & GWEN_BUFFER_FLAGS_OWN_SYNCIO) { GWEN_SyncIo_free(bf->syncIo); } } if (take) bf->flags|=GWEN_BUFFER_FLAGS_OWN_SYNCIO; else bf->flags&=~GWEN_BUFFER_FLAGS_OWN_SYNCIO; bf->syncIo=sio; } int GWEN_Buffer_FillWithBytes(GWEN_BUFFER *bf, unsigned char c, uint32_t size) { int rv; assert(bf); if (bf->mode & GWEN_BUFFER_MODE_READONLY) { DBG_ERROR(GWEN_LOGDOMAIN, "Read-only mode"); if (bf->mode & GWEN_BUFFER_MODE_ABORT_ON_MEMFULL) { abort(); } return GWEN_ERROR_PERMISSIONS; } rv=GWEN_Buffer_AllocRoom(bf, size+1); if (rv<0) { DBG_DEBUG(GWEN_LOGDOMAIN, "called from here"); return rv; } memset(bf->ptr+bf->bytesUsed, c, size); if (bf->pos==bf->bytesUsed) bf->pos+=size; bf->bytesUsed+=size; /* append a NULL to allow using the buffer as ASCIIZ string */ bf->ptr[bf->bytesUsed]=0; return 0; } int GWEN_Buffer_FillLeftWithBytes(GWEN_BUFFER *bf, unsigned char c, uint32_t size) { int rv; assert(bf); if (bf->mode & GWEN_BUFFER_MODE_READONLY) { DBG_ERROR(GWEN_LOGDOMAIN, "Read-only mode"); if (bf->mode & GWEN_BUFFER_MODE_ABORT_ON_MEMFULL) { abort(); } return GWEN_ERROR_PERMISSIONS; } rv=GWEN_Buffer_InsertRoom(bf, size); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return -1; } memset(bf->ptr+bf->pos, c, size); return 0; } int GWENHYWFAR_CB GWEN_Buffer_CacheFn_Attach(void *ptr) { GWEN_Buffer_Attach((GWEN_BUFFER*) ptr); return 0; } int GWENHYWFAR_CB GWEN_Buffer_CacheFn_Free(void *ptr) { GWEN_Buffer_free((GWEN_BUFFER*) ptr); return 0; } gwenhywfar-4.15.2beta/src/base/ringbuffer.h0000644000175000017500000001750012416477066015564 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sun Jan 25 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_RINGBUFFER_H #define GWEN_RINGBUFFER_H #include #include #ifdef __cplusplus extern "C" { #endif /** @defgroup MOD_RINGBUFFER Ringbuffer Management * @ingroup MOD_BASE * * @brief This file contains the definition of a GWEN_RINGBUFFER. * */ /*@{*/ typedef struct GWEN_RINGBUFFER GWEN_RINGBUFFER; /** @name Constructor And Destructor * */ /*@{*/ /** * Creates a new ring buffer * @param size maximum size of the ring buffer */ GWENHYWFAR_API GWEN_RINGBUFFER *GWEN_RingBuffer_new(unsigned int size); /** * Destructor. */ GWENHYWFAR_API void GWEN_RingBuffer_free(GWEN_RINGBUFFER *rb); /** @name Reading And Writing * */ /*@{*/ /** * Writes the given bytes into the ring buffer. * @param rb ring buffer * @param buffer pointer to bytes to write * @param size pointer to a variable that contains the number of bytes * to write. Upon return this variable contains the number of bytes actually * copied. */ GWENHYWFAR_API int GWEN_RingBuffer_WriteBytes(GWEN_RINGBUFFER *rb, const char *buffer, uint32_t *size); /** * Writes a single byte to the ring buffer. */ GWENHYWFAR_API int GWEN_RingBuffer_WriteByte(GWEN_RINGBUFFER *rb, char c); /** * Read bytes from the ring buffer. * @param rb ring buffer * @param buffer pointer to the destination buffer * @param size pointer to a variable that contains the number of bytes * to read. Upon return this variable contains the number of bytes actually * copied. */ GWENHYWFAR_API int GWEN_RingBuffer_ReadBytes(GWEN_RINGBUFFER *rb, char *buffer, uint32_t *size); /** * Reads a single byte from the ring buffer. */ GWENHYWFAR_API int GWEN_RingBuffer_ReadByte(GWEN_RINGBUFFER *rb); /*@}*/ /** @name Informational Functions * */ /*@{*/ /** * Returns the number of bytes stored inside the ring buffer. */ GWENHYWFAR_API uint32_t GWEN_RingBuffer_GetUsedBytes(const GWEN_RINGBUFFER *rb); /** * Returns the number of bytes which still can be stored inside the ring * buffer. */ GWENHYWFAR_API uint32_t GWEN_RingBuffer_GetBytesLeft(const GWEN_RINGBUFFER *rb); /** * Returns the size of the ring buffer. */ GWENHYWFAR_API uint32_t GWEN_RingBuffer_GetBufferSize(const GWEN_RINGBUFFER *rb); /*@}*/ /** @name Statistical Functions * */ /*@{*/ /** * Returns the number of times the buffer was empty. */ GWENHYWFAR_API uint32_t GWEN_RingBuffer_GetEmptyCounter(const GWEN_RINGBUFFER *rb); GWENHYWFAR_API void GWEN_RingBuffer_ResetEmptyCounter(GWEN_RINGBUFFER *rb); /** * Returns the number of times the buffer was full. */ GWENHYWFAR_API uint32_t GWEN_RingBuffer_GetFullCounter(const GWEN_RINGBUFFER *rb); GWENHYWFAR_API void GWEN_RingBuffer_ResetFullCounter(GWEN_RINGBUFFER *rb); /** * Returns the number of bytes which have passed through this buffer (i.e. * bytes that have been written to and read from the buffer. */ GWENHYWFAR_API uint32_t GWEN_RingBuffer_GetThroughput(GWEN_RINGBUFFER *rb); /** * Resets the buffers throughput counter to zero. */ GWENHYWFAR_API void GWEN_RingBuffer_ResetThroughput(GWEN_RINGBUFFER *rb); /** * Returns the maximum number of bytes which has been stored in the buffer. */ GWENHYWFAR_API uint32_t GWEN_RingBuffer_GetMaxUsedBytes(const GWEN_RINGBUFFER *rb); /** * Resets the counter for the maximum number of bytes stored in the * buffer. */ GWENHYWFAR_API void GWEN_RingBuffer_ResetMaxUsedBytes(GWEN_RINGBUFFER *rb); GWENHYWFAR_API void GWEN_RingBuffer_Reset(GWEN_RINGBUFFER *rb); /*@}*/ /* name */ /** @name Functions For Direct Manipulation Of The Buffer * * Please use these functions with care. These function are supported in order * to avoid unnecessary copying. */ /*@{*/ /** * Returns the maximum number of bytes which can be read with a following * call to @ref GWEN_RingBuffer_ReadBytes. This value (if not 0) can be * used for @ref GWEN_RingBuffer_SkipBytesRead. */ GWENHYWFAR_API uint32_t GWEN_RingBuffer_GetMaxUnsegmentedRead(GWEN_RINGBUFFER *rb); /** * Returns the maximum number of bytes which can be written with a following * call to @ref GWEN_RingBuffer_WriteBytes. This value (if not 0) can be * used for @ref GWEN_RingBuffer_SkipBytesWrite. */ GWENHYWFAR_API uint32_t GWEN_RingBuffer_GetMaxUnsegmentedWrite(GWEN_RINGBUFFER *rb); /** * Adjusts the internal pointers and statistical data as if * @ref GWEN_RingBuffer_ReadBytes had been called. Please note that the * size value given here MUST be <= the value returned by * @ref GWEN_RingBuffer_GetMaxUnsegmentedRead ! */ GWENHYWFAR_API void GWEN_RingBuffer_SkipBytesRead(GWEN_RINGBUFFER *rb, uint32_t psize); /** * Adjusts the internal pointers and statistical data as if * @ref GWEN_RingBuffer_WriteBytes had been called. Please note that the * size value given here MUST be <= the value returned by * @ref GWEN_RingBuffer_GetMaxUnsegmentedWrite ! */ GWENHYWFAR_API void GWEN_RingBuffer_SkipBytesWrite(GWEN_RINGBUFFER *rb, uint32_t psize); /** * Returne the current read pointer. Please note that the return value of * @ref GWEN_RingBuffer_GetMaxUnsegmentedRead indicates the maximum number * of bytes at this position available! Trying to access bytes beyond that * boundary will most likely result in segmentation faults. * Please make sure that you call @ref GWEN_RingBuffer_SkipBytesRead after * taking data from the buffer in order to keep the internal structure * intact. */ GWENHYWFAR_API const char *GWEN_RingBuffer_GetReadPointer(const GWEN_RINGBUFFER *rb); /** * Returne the current write pointer. Please note that the return value of * @ref GWEN_RingBuffer_GetMaxUnsegmentedWrite indicates the maximum number * of bytes at this position available! Trying to access bytes beyond that * boundary will most likely result in segmentation faults. * Please make sure that you call @ref GWEN_RingBuffer_SkipBytesWrite after * writing data to the buffer in order to keep the internal structure * intact. */ GWENHYWFAR_API char *GWEN_RingBuffer_GetWritePointer(const GWEN_RINGBUFFER *rb); /*@}*/ /* name */ /*@}*/ /* group */ #ifdef __cplusplus } #endif #endif /* GWEN_RINGBUFFER_H */ gwenhywfar-4.15.2beta/src/base/i18n.h0000644000175000017500000000475012364015347014205 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Fri Sep 12 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_I18N_H #define GWENHYWFAR_I18N_H #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif GWENHYWFAR_API int GWEN_I18N_SetLocale(const char *s); /** * Gwenhywfar remains the owner of the object returned (if any), so you * MUST NOT free it. */ GWENHYWFAR_API GWEN_STRINGLIST *GWEN_I18N_GetCurrentLocaleList(void); GWENHYWFAR_API const char *GWEN_I18N_GetCurrentLocale(void); GWENHYWFAR_API const char *GWEN_I18N_Translate(const char *textdomain, const char *text); GWENHYWFAR_API int GWEN_I18N_BindTextDomain_Dir(const char *textdomain, const char *folder); GWENHYWFAR_API int GWEN_I18N_BindTextDomain_Codeset(const char *textdomain, const char *cs); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/base/args.c0000644000175000017500000003356012416477066014366 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sat Apr 24 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "args_p.h" #include "gui_l.h" #include #include #include #include #define DISABLE_DEBUGLOG int GWEN_Args_Check(int argc, char **argv, int startAt, uint32_t mode, const GWEN_ARGS *args, GWEN_DB_NODE *db) { int i; const char *p; const GWEN_ARGS *tmpArgs; GWEN_DB_NODE *counts; GWEN_BUFFER *tbuf; int stop; i=startAt; tbuf=GWEN_Buffer_new(0, 256, 0, 1); counts=GWEN_DB_Group_new("counts"); stop=0; while(ishortOption) { if (strcmp(tmpArgs->shortOption, p)==0) { /* found option */ GWEN_DB_SetIntValue(counts, GWEN_DB_FLAGS_OVERWRITE_VARS, tmpArgs->name, GWEN_DB_GetIntValue(counts, tmpArgs->name, 0, 0)+1); break; } } /* if shortOption */ if (tmpArgs->flags & GWEN_ARGS_FLAGS_LAST) { DBG_ERROR(GWEN_LOGDOMAIN, "Unknown short option \"%s\"", p); GWEN_DB_Group_free(counts); GWEN_Buffer_free(tbuf); return GWEN_ARGS_RESULT_ERROR; } } /* for */ i++; if (tmpArgs->flags & GWEN_ARGS_FLAGS_HAS_ARGUMENT) { /* argument needed */ if (i>=argc) { DBG_ERROR(GWEN_LOGDOMAIN, "Argument needed for option \"%s\"", tmpArgs->name); GWEN_DB_Group_free(counts); GWEN_Buffer_free(tbuf); return GWEN_ARGS_RESULT_ERROR; } GWEN_Buffer_Reset(tbuf); if (GWEN_Gui_ReadString(argv[i], tbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Error parsing \"%s\"", argv[i]); GWEN_DB_Group_free(counts); GWEN_Buffer_free(tbuf); return GWEN_ARGS_RESULT_ERROR; } p=GWEN_Buffer_GetStart(tbuf); switch(tmpArgs->type) { case GWEN_ArgsType_Char: GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, tmpArgs->name, p); break; case GWEN_ArgsType_Int: if (sscanf(p, "%i", &value)!=1) { DBG_ERROR(GWEN_LOGDOMAIN, "Non-integer argument for short option \"%s\"", tmpArgs->shortOption); GWEN_DB_Group_free(counts); GWEN_Buffer_free(tbuf); return GWEN_ARGS_RESULT_ERROR; } GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_DEFAULT, tmpArgs->name, value); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Unknown option type \"%d\"", tmpArgs->type); GWEN_DB_Group_free(counts); GWEN_Buffer_free(tbuf); return GWEN_ARGS_RESULT_ERROR; } /* switch */ i++; } else { if (tmpArgs->flags & GWEN_ARGS_FLAGS_HELP) { GWEN_DB_Group_free(counts); GWEN_Buffer_free(tbuf); return GWEN_ARGS_RESULT_HELP; } GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, tmpArgs->name, GWEN_DB_GetIntValue(counts, tmpArgs->name, 0, 0)); } break; case GWEN_ArgsElementTypeLong: /* copy option name up to (but excluding) the "=" if any, * determine the start of possible argument */ v=p; while(*v && *v!='=') v++; tmpBuf=(char*)malloc(v-p+1); assert(tmpBuf); memmove(tmpBuf, p, v-p); tmpBuf[v-p]=0; for(tmpArgs=args;; tmpArgs++) { if (tmpArgs->longOption) { if (strcmp(tmpArgs->longOption, tmpBuf)==0) { /* found option */ GWEN_DB_SetIntValue(counts, GWEN_DB_FLAGS_OVERWRITE_VARS, tmpArgs->name, GWEN_DB_GetIntValue(counts, tmpArgs->name, 0, 0)+1); break; } } /* if longOption */ if (tmpArgs->flags & GWEN_ARGS_FLAGS_LAST) { DBG_ERROR(GWEN_LOGDOMAIN, "Unknown long option \"%s\"", tmpBuf); free(tmpBuf); GWEN_DB_Group_free(counts); GWEN_Buffer_free(tbuf); return GWEN_ARGS_RESULT_ERROR; } } /* for */ i++; if (*v=='=') { if (!(tmpArgs->flags & GWEN_ARGS_FLAGS_HAS_ARGUMENT)) { DBG_ERROR(GWEN_LOGDOMAIN, "No argument allowed for option \"%s\"", tmpArgs->name); free(tmpBuf); GWEN_DB_Group_free(counts); GWEN_Buffer_free(tbuf); return GWEN_ARGS_RESULT_ERROR; } v++; } if (tmpArgs->flags & GWEN_ARGS_FLAGS_HAS_ARGUMENT) { /* argument needed */ if (*v==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Argument needed for option \"%s\"", tmpArgs->name); free(tmpBuf); GWEN_DB_Group_free(counts); GWEN_Buffer_free(tbuf); return GWEN_ARGS_RESULT_ERROR; } switch(tmpArgs->type) { case GWEN_ArgsType_Char: GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, tmpArgs->name, v); break; case GWEN_ArgsType_Int: if (sscanf(v, "%i", &value)!=1) { DBG_ERROR(GWEN_LOGDOMAIN, "Non-integer argument for long option \"%s\"", tmpBuf); free(tmpBuf); GWEN_DB_Group_free(counts); GWEN_Buffer_free(tbuf); return GWEN_ARGS_RESULT_ERROR; } GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_DEFAULT, tmpArgs->name, value); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Unknown option type \"%d\"", tmpArgs->type); free(tmpBuf); GWEN_DB_Group_free(counts); GWEN_Buffer_free(tbuf); return GWEN_ARGS_RESULT_ERROR; } /* switch */ } else { if (tmpArgs->flags & GWEN_ARGS_FLAGS_HELP) { free(tmpBuf); GWEN_DB_Group_free(counts); GWEN_Buffer_free(tbuf); return GWEN_ARGS_RESULT_HELP; } GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, tmpArgs->name, GWEN_DB_GetIntValue(counts, tmpArgs->name, 0, 0)); } free(tmpBuf); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Internal error (unknown argv type \"%d\")", t); GWEN_DB_Group_free(counts); GWEN_Buffer_free(tbuf); return GWEN_ARGS_RESULT_ERROR; break; } /* switch */ GWEN_Buffer_Reset(tbuf); } /* while */ /* check argument counts */ for(tmpArgs=args;; tmpArgs++) { const char *s; int c; if (tmpArgs->longOption) s=tmpArgs->longOption; else s=tmpArgs->shortOption; c=GWEN_DB_GetIntValue(counts, tmpArgs->name, 0, 0); /* check minnum */ if (tmpArgs->minNum && ((unsigned int)cminNum)) { if (tmpArgs->minNum>1) { DBG_ERROR(GWEN_LOGDOMAIN, "Option \"%s\" needed %d times (have %d)", s, tmpArgs->minNum, c); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Option \"%s\" needed", s); } GWEN_DB_Group_free(counts); GWEN_Buffer_free(tbuf); return GWEN_ARGS_RESULT_ERROR; } /* check maxnum */ if (tmpArgs->maxNum && ((unsigned int)c>tmpArgs->maxNum)) { DBG_ERROR(GWEN_LOGDOMAIN, "Option \"%s\" needed at most %d times (have %d)", s, tmpArgs->maxNum, c); GWEN_DB_Group_free(counts); GWEN_Buffer_free(tbuf); return GWEN_ARGS_RESULT_ERROR; } if (tmpArgs->flags & GWEN_ARGS_FLAGS_LAST) break; } /* for */ GWEN_DB_Group_free(counts); GWEN_Buffer_free(tbuf); return i; } int GWEN_Args__AppendTXT(GWEN_BUFFER *ubuf, const char *s, unsigned int ins) { unsigned int i; while(*s) { for (i=0; ishortOption || tmpArgs->longOption) { if (tmpArgs->shortOption) { GWEN_Buffer_AppendString(ubuf, " "); if (tmpArgs->minNum==0) GWEN_Buffer_AppendString(ubuf, "["); else GWEN_Buffer_AppendString(ubuf, " "); GWEN_Buffer_AppendString(ubuf, "-"); GWEN_Buffer_AppendString(ubuf, tmpArgs->shortOption); if (tmpArgs->flags & GWEN_ARGS_FLAGS_HAS_ARGUMENT) GWEN_Buffer_AppendString(ubuf, " PARAM"); if (tmpArgs->minNum==0) GWEN_Buffer_AppendString(ubuf, "]"); GWEN_Buffer_AppendString(ubuf, "\n"); } /* if short option */ if (tmpArgs->longOption) { GWEN_Buffer_AppendString(ubuf, " "); if (tmpArgs->minNum==0) GWEN_Buffer_AppendString(ubuf, "["); else GWEN_Buffer_AppendString(ubuf, " "); GWEN_Buffer_AppendString(ubuf, "--"); GWEN_Buffer_AppendString(ubuf, tmpArgs->longOption); if (tmpArgs->flags & GWEN_ARGS_FLAGS_HAS_ARGUMENT) GWEN_Buffer_AppendString(ubuf, "=PARAM"); if (tmpArgs->minNum==0) GWEN_Buffer_AppendString(ubuf, "]"); GWEN_Buffer_AppendString(ubuf, "\n"); } /* if short option */ s=tmpArgs->longDescription; if (!s) s=tmpArgs->shortDescription; if (s) { GWEN_Args__AppendTXT(ubuf, s, 3); GWEN_Buffer_AppendString(ubuf, "\n"); } } /* if any option */ else { DBG_ERROR(GWEN_LOGDOMAIN, "Option \"%s\" has neither a long nor a short name", tmpArgs->name); return -1; } if (tmpArgs->flags & GWEN_ARGS_FLAGS_LAST) break; } /* for */ return 0; } int GWEN_Args_UsageHTML(GWEN_UNUSED const GWEN_ARGS *args, GWEN_UNUSED GWEN_BUFFER *ubuf) { return 0; } int GWEN_Args_Usage(const GWEN_ARGS *args, GWEN_BUFFER *ubuf, GWEN_ARGS_OUTTYPE ot) { int rv; switch(ot) { case GWEN_ArgsOutType_Txt: rv=GWEN_Args_UsageTXT(args, ubuf); break; case GWEN_ArgsOutType_Html: rv=GWEN_Args_UsageHTML(args, ubuf); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Unknown output type %d", ot); rv=-1; } /* switch */ return rv; } int GWEN_Args_ShortUsage(GWEN_UNUSED const GWEN_ARGS *args, GWEN_UNUSED GWEN_BUFFER *ubuf, GWEN_UNUSED GWEN_ARGS_OUTTYPE ot) { return 0; } gwenhywfar-4.15.2beta/src/base/plugin.h0000644000175000017500000001634212416477066014734 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Fri Sep 12 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_PLUGIN_H #define GWENHYWFAR_PLUGIN_H #include #include #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_PLUGIN GWEN_PLUGIN; typedef struct GWEN_PLUGIN_MANAGER GWEN_PLUGIN_MANAGER; GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_PLUGIN, GWENHYWFAR_API) GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_PLUGIN_MANAGER, GWENHYWFAR_API) #ifdef __cplusplus } #endif #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif typedef GWEN_PLUGIN* (*GWEN_PLUGIN_FACTORYFN)(GWEN_PLUGIN_MANAGER *pm, const char *name, const char *fileName); GWENHYWFAR_API GWEN_PLUGIN *GWEN_Plugin_new(GWEN_PLUGIN_MANAGER *pm, const char *name, const char *fileName); GWENHYWFAR_API void GWEN_Plugin_free(GWEN_PLUGIN *p); GWENHYWFAR_API GWEN_PLUGIN_MANAGER *GWEN_Plugin_GetManager(const GWEN_PLUGIN *p); GWENHYWFAR_API const char *GWEN_Plugin_GetName(const GWEN_PLUGIN *p); GWENHYWFAR_API const char *GWEN_Plugin_GetFileName(const GWEN_PLUGIN *p); GWENHYWFAR_API GWEN_LIBLOADER *GWEN_Plugin_GetLibLoader(const GWEN_PLUGIN *p); /** * @param destLib The name of the library that this plugin is supposed to * belong to. */ GWENHYWFAR_API GWEN_PLUGIN_MANAGER *GWEN_PluginManager_new(const char *name, const char *destLib); GWENHYWFAR_API void GWEN_PluginManager_free(GWEN_PLUGIN_MANAGER *pm); GWENHYWFAR_API const char *GWEN_PluginManager_GetName(const GWEN_PLUGIN_MANAGER *pm); /** Add a directory path to lookup plugins from. * The plugin manager must already be registered with Gwen (using * @ref GWEN_PluginManager_Register) otherwise the path can not be * added */ GWENHYWFAR_API int GWEN_PluginManager_AddPath(GWEN_PLUGIN_MANAGER *pm, const char *callingLib, const char *path); GWENHYWFAR_API int GWEN_PluginManager_AddRelPath(GWEN_PLUGIN_MANAGER *pm, const char *callingLib, const char *relpath, GWEN_PATHMANAGER_RELMODE rm); /** Insert a directory path to lookup plugins from. * The plugin manager must already be registered with Gwen (using * @ref GWEN_PluginManager_Register) otherwise the path can not be * added. */ GWENHYWFAR_API int GWEN_PluginManager_InsertPath(GWEN_PLUGIN_MANAGER *pm, const char *callingLib, const char *path); /** Insert a directory path to lookup plugins from. * The plugin manager must already be registered with Gwen (using * @ref GWEN_PluginManager_Register) otherwise the path can not be * added. This function uses relative paths. */ GWENHYWFAR_API int GWEN_PluginManager_InsertRelPath(GWEN_PLUGIN_MANAGER *pm, const char *callingLib, const char *relpath, GWEN_PATHMANAGER_RELMODE rm); GWENHYWFAR_API int GWEN_PluginManager_RemovePath(GWEN_PLUGIN_MANAGER *pm, const char *callingLib, const char *path); /** Add a directory path from the windows registry HKEY_LOCAL_MACHINE, * to lookup plugins from. On Non-Windows systems, this function does * nothing and returns zero. * * Note: Gwenhywfar-2.6.0 and older used to lookup the paths under * HKEY_CURRENT_USER, but with gwen-2.6.1 this was changed to * HKEY_LOCAL_MACHINE because we're talking about installation paths * as opposed to per-user configuration settings. * * The plugin manager must already be registered with Gwen (using * @ref GWEN_PluginManager_Register) otherwise the path can not be * added. * * @return Zero on success, and non-zero on error. * * @param pm The PluginManager * * @param keypath The path to the registry key, * e.g. "Software\\MySoftware\\Whatever" * * @param varname The key name (variable name?) inside the given * registry key, e.g. "myvariable". */ GWENHYWFAR_API int GWEN_PluginManager_AddPathFromWinReg(GWEN_PLUGIN_MANAGER *pm, const char *callingLib, const char *keypath, const char *varname); /** Returns the list of all search paths of the given * PluginManager. */ GWENHYWFAR_API GWEN_STRINGLIST *GWEN_PluginManager_GetPaths(const GWEN_PLUGIN_MANAGER *pm); GWENHYWFAR_API GWEN_PLUGIN *GWEN_PluginManager_LoadPlugin(GWEN_PLUGIN_MANAGER *pm, const char *modName); GWENHYWFAR_API GWEN_PLUGIN *GWEN_PluginManager_LoadPluginFile(GWEN_PLUGIN_MANAGER *pm, const char *modName, const char *fname); GWENHYWFAR_API GWEN_PLUGIN *GWEN_PluginManager_GetPlugin(GWEN_PLUGIN_MANAGER *pm, const char *s); /** * Add a plugin to this plugin manager. Normally plugins are loaded upon * @ref GWEN_PluginManager_GetPlugin. This function allows for plugins * that are created by other means (e.g. by static linking) */ GWENHYWFAR_API void GWEN_PluginManager_AddPlugin(GWEN_PLUGIN_MANAGER *pm, GWEN_PLUGIN *p); GWENHYWFAR_API int GWEN_PluginManager_Register(GWEN_PLUGIN_MANAGER *pm); GWENHYWFAR_API int GWEN_PluginManager_Unregister(GWEN_PLUGIN_MANAGER *pm); GWENHYWFAR_API GWEN_PLUGIN_MANAGER *GWEN_PluginManager_FindPluginManager(const char *s); GWENHYWFAR_API GWEN_PLUGIN_DESCRIPTION_LIST2* GWEN_PluginManager_GetPluginDescrs(GWEN_PLUGIN_MANAGER *pm); GWENHYWFAR_API GWEN_PLUGIN_DESCRIPTION* GWEN_PluginManager_GetPluginDescr(GWEN_PLUGIN_MANAGER *pm, const char *modName); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/base/param.xml0000644000175000017500000001047012425452270015071 00000000000000 GWEN_PARAM GWEN_Param param with_db with_xml with_tree with_list1 with_list2 with_refcount
gwenhywfar/gwenhywfarapi.h
gwenhywfar/stringlist2.h
gwenhywfar/param_fns.h
param_fns.c
NULL NULL public own with_getbymember const dup const 0 0 with_flags public GWEN_Param_Type_Unknown GWEN_Param_Type_Unknown enum public GWEN_Param_DataType_Unknown GWEN_Param_DataType_Unknown enum public NULL NULL public own const dup const NULL NULL public own const dup const NULL NULL public own const dup const NULL NULL public own const dup const NULL NULL own assign none const public 0 0 volatile private 0 0 volatile private 0 0 volatile with_flags public
gwenhywfar-4.15.2beta/src/base/stringlist.c0000644000175000017500000003712712416477066015637 00000000000000/*************************************************************************** begin : Thu Apr 03 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include #include #include "stringlist_p.h" #include "debug.h" #include #include #include #ifdef HAVE_STRINGS_H # include #endif GWEN_STRINGLIST *GWEN_StringList_new(void) { GWEN_STRINGLIST *sl; GWEN_NEW_OBJECT(GWEN_STRINGLIST, sl); assert(sl); sl->ignoreRefCount=1; return sl; } void GWEN_StringList_free(GWEN_STRINGLIST *sl) { GWEN_STRINGLISTENTRY *curr, *next; if (sl) { curr=sl->first; while(curr) { next=curr->next; GWEN_StringListEntry_free(curr); curr=next; } /* while */ GWEN_FREE_OBJECT(sl); } } void GWEN_StringList_SetSenseCase(GWEN_STRINGLIST *sl, int i) { assert(sl); sl->senseCase=i; } void GWEN_StringList_SetIgnoreRefCount(GWEN_STRINGLIST *sl, int i) { assert(sl); sl->ignoreRefCount=i; } GWEN_STRINGLISTENTRY *GWEN_StringListEntry_new(const char *s, int take) { GWEN_STRINGLISTENTRY *sl; GWEN_NEW_OBJECT(GWEN_STRINGLISTENTRY, sl); assert(sl); sl->refCount=1; if (s) { if (take) sl->data=s; else sl->data=strdup(s); } return sl; } void GWEN_StringListEntry_ReplaceString(GWEN_STRINGLISTENTRY *e, const char *s, int take) { assert(e); if (e->data) free((void*)(e->data)); if (take) e->data=s; else e->data=strdup(s); } void GWEN_StringListEntry_free(GWEN_STRINGLISTENTRY *sl) { if (sl) { if (sl->data) free((void*)(sl->data)); GWEN_FREE_OBJECT(sl); } } void GWEN_StringList_AppendEntry(GWEN_STRINGLIST *sl, GWEN_STRINGLISTENTRY *se) { GWEN_STRINGLISTENTRY *curr; assert(sl); assert(se); curr=sl->first; if (!curr) { sl->first=se; } else { while(curr->next) { curr=curr->next; } curr->next=se; } sl->count++; } GWEN_STRINGLIST *GWEN_StringList_fromTabString(const char *s, int checkDup) { GWEN_STRINGLIST *sl; sl=GWEN_StringList_new(); if (s && *s) { while(*s) { const char *t; char *tmpStr; t=strchr(s, '\t'); if (t) { int len; len=(t-s); tmpStr=(char*) malloc(len+1); assert(tmpStr); memmove(tmpStr, s, len); tmpStr[len]=0; /* add partial string, take it over */ GWEN_StringList_AppendString(sl, tmpStr, 1, checkDup); s=t+1; } else { /* just add the remaining string (don't take over, copy!) */ GWEN_StringList_AppendString(sl, s, 0, checkDup); break; } } } return sl; } void GWEN_StringList_RemoveEntry(GWEN_STRINGLIST *sl, GWEN_STRINGLISTENTRY *se) { GWEN_STRINGLISTENTRY *curr; assert(sl); assert(se); curr=sl->first; if (curr) { if (curr==se) { sl->first=curr->next; if (sl->count) sl->count--; } else { while(curr->next!=se) { curr=curr->next; } if (curr) { curr->next=se->next; if (sl->count) sl->count--; } } } } void GWEN_StringList_Clear(GWEN_STRINGLIST *sl) { GWEN_STRINGLISTENTRY *se, *next; assert(sl); se=sl->first; sl->first=0; sl->count=0; while (se) { next=se->next; GWEN_StringListEntry_free(se); se=next; } /* while */ } int GWEN_StringList_AppendString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble) { GWEN_STRINGLISTENTRY *se; if (checkDouble) { se=sl->first; if (sl->senseCase) { while(se) { if (strcmp(se->data, s)==0) { if (take) free((char*)s); se->refCount++; return 0; } se=se->next; } /* while */ } else { while(se) { if (strcasecmp(se->data, s)==0) { if (take) free((char*)s); se->refCount++; return 0; } se=se->next; } /* while */ } } /* if checkdouble */ se=GWEN_StringListEntry_new(s, take); GWEN_StringList_AppendEntry(sl, se); return 1; } int GWEN_StringList_InsertString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble) { GWEN_STRINGLISTENTRY *se; if (checkDouble) { se=sl->first; if (sl->senseCase) { while(se) { if (strcmp(se->data, s)==0) { if (take) free((char*)s); se->refCount++; return 0; } se=se->next; } /* while */ } else { while(se) { if (strcasecmp(se->data, s)==0) { if (take) free((char*)s); se->refCount++; return 0; } se=se->next; } /* while */ } } /* if checkdouble */ se=GWEN_StringListEntry_new(s, take); se->next=sl->first; sl->first=se; sl->count++; return 1; } GWENHYWFAR_API int GWEN_StringList_RemoveString(GWEN_STRINGLIST *sl, const char *s) { GWEN_STRINGLISTENTRY *se; se=sl->first; if (sl->senseCase) { while(se) { if (strcmp(se->data, s)==0) { assert(se->refCount); se->refCount--; if (sl->ignoreRefCount) GWEN_StringList_RemoveEntry(sl, se); else { if (se->refCount==0) GWEN_StringList_RemoveEntry(sl, se); } return 1; } se=se->next; } /* while */ return 0; } else { while(se) { if (strcasecmp(se->data, s)==0) { assert(se->refCount); se->refCount--; if (sl->ignoreRefCount) GWEN_StringList_RemoveEntry(sl, se); else { if (se->refCount==0) GWEN_StringList_RemoveEntry(sl, se); } return 1; } se=se->next; } /* while */ return 0; } } GWEN_STRINGLISTENTRY *GWEN_StringList_FirstEntry(const GWEN_STRINGLIST *sl) { assert(sl); return sl->first; } GWEN_STRINGLISTENTRY *GWEN_StringListEntry_Next(const GWEN_STRINGLISTENTRY *se) { assert(se); return se->next; } const char *GWEN_StringListEntry_Data(const GWEN_STRINGLISTENTRY *se) { assert(se); return se->data; } void GWEN_StringListEntry_SetData(GWEN_STRINGLISTENTRY *se, const char *s) { assert(se); if (se->data) free((void*)(se->data)); if (s) se->data=strdup(s); else se->data=NULL; } unsigned int GWEN_StringList_Count(const GWEN_STRINGLIST *sl) { assert(sl); return sl->count; } int GWEN_StringList_HasString(const GWEN_STRINGLIST *sl, const char *s) { GWEN_STRINGLISTENTRY *se; assert(sl); se=sl->first; if (sl->senseCase) { while(se) { if (strcmp(se->data, s)==0) { return 1; } se=se->next; } /* while */ return 0; } else { while(se) { if (strcasecmp(se->data, s)==0) { return 1; } se=se->next; } /* while */ return 0; } } int GWEN_StringList_GetStringPos(const GWEN_STRINGLIST *sl, const char *s) { GWEN_STRINGLISTENTRY *se; int i; assert(sl); se=sl->first; if (sl->senseCase) { i=0; while(se) { if (strcmp(se->data, s)==0) { return i; } i++; se=se->next; } /* while */ return -1; } else { i=0; while(se) { if (strcasecmp(se->data, s)==0) { return i; } i++; se=se->next; } /* while */ return -1; } } GWEN_STRINGLISTENTRY *GWEN_StringList_FindStringEntry(const GWEN_STRINGLIST *sl, const char *s) { GWEN_STRINGLISTENTRY *se; int i; assert(sl); se=sl->first; if (sl->senseCase) { i=0; while(se) { if (strcmp(se->data, s)==0) { return se; } i++; se=se->next; } /* while */ return NULL; } else { i=0; while(se) { if (strcasecmp(se->data, s)==0) { return se; } i++; se=se->next; } /* while */ return NULL; } } GWEN_STRINGLIST *GWEN_StringList_dup(const GWEN_STRINGLIST *sl) { GWEN_STRINGLISTENTRY *se; GWEN_STRINGLIST *newsl; assert(sl); newsl=GWEN_StringList_new(); se=sl->first; while(se) { GWEN_STRINGLISTENTRY *newse; newse=GWEN_StringListEntry_new(se->data, 0); GWEN_StringList_AppendEntry(newsl, newse); se=se->next; } /* while */ return newsl; } void *GWEN_StringList_ForEach(const GWEN_STRINGLIST *l, void *(*func)(const char *s, void *u), void *user_data) { GWEN_STRINGLISTENTRY *it; const char *el; void *result = 0; assert(l); it = GWEN_StringList_FirstEntry(l); if (!it) return 0; while(it) { el = GWEN_StringListEntry_Data(it); result = func(el, user_data); if (result) { return result; } it = GWEN_StringListEntry_Next(it); } return 0; } const char *GWEN_StringList_FirstString(const GWEN_STRINGLIST *l) { assert(l); if (l->first==0) return 0; return l->first->data; } static int GWEN_StringList__compar_asc_nocase(const void *a, const void *b) { const GWEN_STRINGLISTENTRY * const * pse1 = a, * const * pse2 = b; const GWEN_STRINGLISTENTRY *se1 = *pse1, *se2 = *pse2; if (se1 && se2 && se1->data && se2->data) return strcmp(se1->data, se2->data); else return 0; } static int GWEN_StringList__compar_desc_nocase(const void *a, const void *b) { const GWEN_STRINGLISTENTRY * const * pse1 = a, * const * pse2 = b; const GWEN_STRINGLISTENTRY *se1 = *pse1, *se2 = *pse2; if (se1 && se2 && se1->data && se2->data) return strcmp(se2->data, se1->data); else return 0; } static int GWEN_StringList__compar_asc_case(const void *a, const void *b) { const GWEN_STRINGLISTENTRY * const * pse1 = a, * const * pse2 = b; const GWEN_STRINGLISTENTRY *se1 = *pse1, *se2 = *pse2; if (se1 && se2 && se1->data && se2->data) return strcasecmp(se1->data, se2->data); else return 0; } static int GWEN_StringList__compar_desc_case(const void *a, const void *b) { const GWEN_STRINGLISTENTRY * const * pse1 = a, * const * pse2 = b; const GWEN_STRINGLISTENTRY *se1 = *pse1, *se2 = *pse2; if (se1 && se2 && se1->data && se2->data) return strcasecmp(se2->data, se1->data); else return 0; } static int GWEN_StringList__compar_asc_int(const void *a, const void *b) { const GWEN_STRINGLISTENTRY * const * pse1 = a, * const * pse2 = b; const GWEN_STRINGLISTENTRY *se1 = *pse1, *se2 = *pse2; if (se1 && se2 && se1->data && se2->data) { int i1, i2; i1=atoi(se1->data); i2=atoi(se2->data); return (i1>i2) - (i1data && se2->data) { int i1, i2; i1=atoi(se1->data); i2=atoi(se2->data); return (i2>i1) - (i2count<2) return; /* sort entries into a linear pointer list */ tmpEntries=(GWEN_STRINGLISTENTRY **)malloc((l->count+1)* sizeof(GWEN_STRINGLISTENTRY*)); assert(tmpEntries); sentry=l->first; psentry=tmpEntries; while(sentry) { *(psentry++)=sentry; sentry=sentry->next; } /* while */ *psentry=0; /* sort */ switch(sortMode) { case GWEN_StringList_SortModeNoCase: if (ascending) qsort(tmpEntries, l->count, sizeof(GWEN_STRINGLISTENTRY*), GWEN_StringList__compar_asc_nocase); else qsort(tmpEntries, l->count, sizeof(GWEN_STRINGLISTENTRY*), GWEN_StringList__compar_desc_nocase); break; case GWEN_StringList_SortModeCase: if (ascending) qsort(tmpEntries, l->count, sizeof(GWEN_STRINGLISTENTRY*), GWEN_StringList__compar_asc_case); else qsort(tmpEntries, l->count, sizeof(GWEN_STRINGLISTENTRY*), GWEN_StringList__compar_desc_case); break; case GWEN_StringList_SortModeInt: if (ascending) qsort(tmpEntries, l->count, sizeof(GWEN_STRINGLISTENTRY*), GWEN_StringList__compar_asc_int); else qsort(tmpEntries, l->count, sizeof(GWEN_STRINGLISTENTRY*), GWEN_StringList__compar_desc_int); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Unknown sortmode %d", sortMode); } /* sort entries back into GWEN_STRINGLIST */ psentry=tmpEntries; sentry=0; while(*psentry) { if (sentry) sentry->next=*psentry; else l->first=*psentry; sentry=*psentry; psentry++; } /* while */ sentry->next=NULL; free(tmpEntries); } const char *GWEN_StringList_StringAt(const GWEN_STRINGLIST *sl, int idx) { GWEN_STRINGLISTENTRY *se; assert(sl); se=sl->first; while(se) { if (idx--==0) return se->data; se=se->next; } /* while */ return 0; } GWEN_STRINGLIST *GWEN_StringList_fromString(const char *str, const char *delimiters, int checkDouble) { if (str && *str) { GWEN_STRINGLIST *sl; const unsigned char *s; sl=GWEN_StringList_new(); s=(const unsigned char*)str; while(*s) { /* skip blanks */ while(*s && *s<33) s++; if (*s) { const unsigned char *pStart; int len; /* read word */ pStart=s; //s++; while(*s && strchr(delimiters, *s)==NULL) s++; len=s-pStart; if (len) { char *toAdd; toAdd=(char*) malloc(len+1); assert(toAdd); memmove(toAdd, pStart, len); toAdd[len]=0; GWEN_StringList_AppendString(sl, toAdd, 1, checkDouble); } } if (*s==0) break; s++; } if (GWEN_StringList_Count(sl)==0) { GWEN_StringList_free(sl); return NULL; } return sl; } else return NULL; } gwenhywfar-4.15.2beta/src/base/pathmanager.c0000644000175000017500000004575612416477066015733 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "pathmanager_p.h" #include #include #include #include #include #include #include #include #include #ifdef OS_WIN32 # include #endif static GWEN_DB_NODE *gwen__paths=0; int GWEN_PathManager_ModuleInit(void) { gwen__paths=GWEN_DB_Group_new("paths"); return 0; } int GWEN_PathManager_ModuleFini(void) { GWEN_DB_Group_free(gwen__paths); gwen__paths=0; return 0; } int GWEN_PathManager_DefinePath(const char *destLib, const char *pathName) { GWEN_DB_NODE *dbT; assert(destLib); assert(pathName); assert(gwen__paths); dbT=GWEN_DB_GetGroup(gwen__paths, GWEN_DB_FLAGS_DEFAULT, destLib); assert(dbT); if (GWEN_DB_GetGroup(dbT, GWEN_PATH_FLAGS_NAMEMUSTEXIST, pathName)) { DBG_ERROR(GWEN_LOGDOMAIN, "Path \"%s/%s\" already exists", destLib, pathName); return GWEN_ERROR_INVALID; } dbT=GWEN_DB_GetGroup(dbT, GWEN_DB_FLAGS_DEFAULT, pathName); return 0; } int GWEN_PathManager_UndefinePath(const char *destLib, const char *pathName) { GWEN_DB_NODE *dbT; assert(destLib); assert(pathName); assert(gwen__paths); dbT=GWEN_DB_GetGroup(gwen__paths, GWEN_PATH_FLAGS_NAMEMUSTEXIST, destLib); if (!dbT) return GWEN_ERROR_NOT_FOUND; dbT=GWEN_DB_GetGroup(dbT, GWEN_DB_FLAGS_DEFAULT, pathName); if (!dbT) return GWEN_ERROR_NOT_FOUND; GWEN_DB_UnlinkGroup(dbT); GWEN_DB_Group_free(dbT); return 0; } int GWEN_PathManager_AddPath(const char *callingLib, const char *destLib, const char *pathName, const char *pathValue) { GWEN_DB_NODE *dbT; GWEN_BUFFER *buf; assert(destLib); assert(pathName); assert(pathValue); assert(gwen__paths); dbT=GWEN_DB_GetGroup(gwen__paths, GWEN_PATH_FLAGS_NAMEMUSTEXIST, destLib); if (!dbT) return GWEN_ERROR_NOT_FOUND; dbT=GWEN_DB_GetGroup(dbT, GWEN_PATH_FLAGS_NAMEMUSTEXIST, pathName); if (!dbT) return GWEN_ERROR_NOT_FOUND; dbT=GWEN_DB_GetGroup(dbT, GWEN_PATH_FLAGS_CREATE_GROUP, "pair"); assert(dbT); if (callingLib) { GWEN_DB_SetCharValue(dbT, GWEN_DB_FLAGS_DEFAULT, "lib", callingLib); } buf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Directory_OsifyPath(pathValue, buf, 1); GWEN_DB_SetCharValue(dbT, GWEN_DB_FLAGS_DEFAULT, "path", GWEN_Buffer_GetStart(buf)); GWEN_Buffer_free(buf); return 0; } int GWEN_PathManager_AddRelPath(const char *callingLib, const char *destLib, const char *pathName, const char *pathValue, GWEN_PATHMANAGER_RELMODE rm) { char cwd[256]; switch(rm) { case GWEN_PathManager_RelModeCwd: { const char *pcwd; pcwd=getcwd(cwd, sizeof(cwd)-1); if (pcwd) { GWEN_BUFFER *buf; int rv; buf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(buf, cwd); if (*pathValue!=GWEN_DIR_SEPARATOR) GWEN_Buffer_AppendString(buf, GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendString(buf, pathValue); rv=GWEN_PathManager_AddPath(callingLib, destLib, pathName, GWEN_Buffer_GetStart(buf)); GWEN_Buffer_free(buf); return rv; } else { DBG_ERROR(GWEN_LOGDOMAIN, "getcwd(): %s", strerror(errno)); return GWEN_ERROR_IO; } break; } case GWEN_PathManager_RelModeExe: { int rv; rv=GWEN_Directory_GetPrefixDirectory(cwd, sizeof(cwd)-1); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } else { GWEN_BUFFER *buf; buf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(buf, cwd); if (*pathValue!=GWEN_DIR_SEPARATOR) GWEN_Buffer_AppendString(buf, GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendString(buf, pathValue); DBG_INFO(GWEN_LOGDOMAIN, "Adding path [%s]", GWEN_Buffer_GetStart(buf)); rv=GWEN_PathManager_AddPath(callingLib, destLib, pathName, GWEN_Buffer_GetStart(buf)); GWEN_Buffer_free(buf); return rv; } } case GWEN_PathManager_RelModeHome: { GWEN_BUFFER *buf; int rv; rv=GWEN_Directory_GetHomeDirectory(cwd, sizeof(cwd)-1); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not determine HOME directory (%d)", rv); return rv; } buf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(buf, cwd); if (*pathValue!=GWEN_DIR_SEPARATOR) GWEN_Buffer_AppendString(buf, GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendString(buf, pathValue); rv=GWEN_PathManager_AddPath(callingLib, destLib, pathName, GWEN_Buffer_GetStart(buf)); GWEN_Buffer_free(buf); return rv; } default: DBG_INFO(GWEN_LOGDOMAIN, "Unknown relative mode %d", rm); return GWEN_ERROR_INVALID; } } int GWEN_PathManager_InsertPath(const char *callingLib, const char *destLib, const char *pathName, const char *pathValue) { GWEN_DB_NODE *dbT; assert(destLib); assert(pathName); assert(pathValue); assert(gwen__paths); dbT=GWEN_DB_GetGroup(gwen__paths, GWEN_PATH_FLAGS_NAMEMUSTEXIST, destLib); if (!dbT) return GWEN_ERROR_NOT_FOUND; dbT=GWEN_DB_GetGroup(dbT, GWEN_PATH_FLAGS_NAMEMUSTEXIST, pathName); if (!dbT) return GWEN_ERROR_NOT_FOUND; dbT=GWEN_DB_GetGroup(dbT, GWEN_PATH_FLAGS_CREATE_GROUP | GWEN_DB_FLAGS_INSERT, "pair"); assert(dbT); if (callingLib) { GWEN_DB_SetCharValue(dbT, GWEN_DB_FLAGS_DEFAULT, "lib", callingLib); } GWEN_DB_SetCharValue(dbT, GWEN_DB_FLAGS_DEFAULT, "path", pathValue); return 0; } int GWEN_PathManager_InsertRelPath(const char *callingLib, const char *destLib, const char *pathName, const char *pathValue, GWEN_PATHMANAGER_RELMODE rm) { char cwd[256]; switch(rm) { case GWEN_PathManager_RelModeCwd: { const char *pcwd; pcwd=getcwd(cwd, sizeof(cwd)-1); if (pcwd) { GWEN_BUFFER *buf; int rv; buf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(buf, cwd); if (*pathValue!=GWEN_DIR_SEPARATOR) GWEN_Buffer_AppendString(buf, GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendString(buf, pathValue); rv=GWEN_PathManager_InsertPath(callingLib, destLib, pathName, GWEN_Buffer_GetStart(buf)); GWEN_Buffer_free(buf); return rv; } else { DBG_ERROR(GWEN_LOGDOMAIN, "getcwd(): %s", strerror(errno)); return GWEN_ERROR_IO; } break; } case GWEN_PathManager_RelModeExe: { int rv; rv=GWEN_Directory_GetPrefixDirectory(cwd, sizeof(cwd)-1); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } else { GWEN_BUFFER *buf; buf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(buf, cwd); if (*pathValue!=GWEN_DIR_SEPARATOR) GWEN_Buffer_AppendString(buf, GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendString(buf, pathValue); DBG_INFO(GWEN_LOGDOMAIN, "Adding path [%s]", GWEN_Buffer_GetStart(buf)); rv=GWEN_PathManager_InsertPath(callingLib, destLib, pathName, GWEN_Buffer_GetStart(buf)); GWEN_Buffer_free(buf); return rv; } } case GWEN_PathManager_RelModeHome: { GWEN_BUFFER *buf; int rv; rv=GWEN_Directory_GetHomeDirectory(cwd, sizeof(cwd)-1); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not determine HOME directory (%d)", rv); return rv; } buf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(buf, cwd); if (*pathValue!=GWEN_DIR_SEPARATOR) GWEN_Buffer_AppendString(buf, GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendString(buf, pathValue); rv=GWEN_PathManager_InsertPath(callingLib, destLib, pathName, GWEN_Buffer_GetStart(buf)); GWEN_Buffer_free(buf); return rv; } default: DBG_INFO(GWEN_LOGDOMAIN, "Unknown relative mode %d", rm); return GWEN_ERROR_INVALID; } } int GWEN_PathManager_RemovePath(const char *callingLib, const char *destLib, const char *pathName, const char *pathValue) { GWEN_DB_NODE *dbT; const char *s; const char *p; assert(gwen__paths); dbT=GWEN_DB_GetGroup(gwen__paths, GWEN_PATH_FLAGS_NAMEMUSTEXIST, destLib); if (!dbT) return GWEN_ERROR_NOT_FOUND; dbT=GWEN_DB_GetGroup(dbT, GWEN_PATH_FLAGS_NAMEMUSTEXIST, pathName); if (!dbT) return GWEN_ERROR_NOT_FOUND; dbT=GWEN_DB_FindFirstGroup(dbT, "pair"); while(dbT) { p=GWEN_DB_GetCharValue(dbT, "path", 0, 0); assert(p); s=GWEN_DB_GetCharValue(dbT, "lib", 0, 0); if ( ( (!callingLib && !s) || (callingLib && s && strcasecmp(s, callingLib)==0) ) && strcasecmp(p, pathValue)==0 ) break; dbT=GWEN_DB_FindNextGroup(dbT, "pair"); } if (dbT) { GWEN_DB_UnlinkGroup(dbT); GWEN_DB_Group_free(dbT); return 0; } else return 1; } int GWEN_PathManager_RemovePaths(const char *callingLib) { GWEN_DB_NODE *dbT; const char *s; assert(gwen__paths); GWEN_DB_DeleteGroup(gwen__paths, callingLib); dbT=GWEN_DB_GetFirstGroup(gwen__paths); while(dbT) { GWEN_DB_NODE *dbN; dbN=GWEN_DB_GetFirstGroup(dbT); while(dbN) { GWEN_DB_NODE *dbNN; dbNN=GWEN_DB_FindFirstGroup(dbN, "pair"); while(dbNN) { GWEN_DB_NODE *dbNext; dbNext=GWEN_DB_FindNextGroup(dbNN, "pair"); s=GWEN_DB_GetCharValue(dbNN, "lib", 0, 0); assert(s); if (s && strcasecmp(s, callingLib)==0) { GWEN_DB_UnlinkGroup(dbNN); GWEN_DB_Group_free(dbNN); } dbNN=dbNext; } /* while pairs */ dbN=GWEN_DB_GetNextGroup(dbN); } /* while paths */ dbT=GWEN_DB_GetNextGroup(dbT); } /* while destLibs */ return 0; } int GWEN_PathManager_PathChanged(const char *destLib, const char *pathName) { GWEN_DB_NODE *dbT; assert(gwen__paths); dbT=GWEN_DB_GetGroup(gwen__paths, GWEN_PATH_FLAGS_NAMEMUSTEXIST, destLib); if (!dbT) return GWEN_ERROR_NOT_FOUND; dbT=GWEN_DB_GetGroup(dbT, GWEN_PATH_FLAGS_NAMEMUSTEXIST, pathName); if (!dbT) return GWEN_ERROR_NOT_FOUND; if ((GWEN_DB_GetNodeFlags(dbT) & GWEN_DB_NODE_FLAGS_DIRTY)) return 1; return 0; } GWEN_STRINGLIST *GWEN_PathManager_GetPaths(const char *destLib, const char *pathName) { GWEN_DB_NODE *dbT; assert(gwen__paths); dbT=GWEN_DB_GetGroup(gwen__paths, GWEN_PATH_FLAGS_NAMEMUSTEXIST, destLib); if (dbT) { dbT=GWEN_DB_GetGroup(dbT, GWEN_PATH_FLAGS_NAMEMUSTEXIST, pathName); if (dbT) { GWEN_STRINGLIST *sl; int i; const char *s; GWEN_DB_NODE *dbN; sl=GWEN_StringList_new(); /* then add all paths from other libs */ dbN=GWEN_DB_FindFirstGroup(dbT, "pair"); while(dbN) { for (i=0; ; i++) { s=GWEN_DB_GetCharValue(dbN, "path", i, 0); if (!s) break; GWEN_StringList_AppendString(sl, s, 0, 1); } dbN=GWEN_DB_FindNextGroup(dbN, "pair"); } if (GWEN_StringList_Count(sl)==0) { GWEN_StringList_free(sl); DBG_DEBUG(GWEN_LOGDOMAIN, "no entries"); return 0; } return sl; } } return 0; } int GWEN_PathManager_FindFile(const char *destLib, const char *pathName, const char *fileName, GWEN_BUFFER *fbuf) { GWEN_DB_NODE *dbT; assert(gwen__paths); dbT=GWEN_DB_GetGroup(gwen__paths, GWEN_PATH_FLAGS_NAMEMUSTEXIST, destLib); if (dbT) { dbT=GWEN_DB_GetGroup(dbT, GWEN_PATH_FLAGS_NAMEMUSTEXIST, pathName); if (dbT) { int i; const char *s; GWEN_DB_NODE *dbN; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* check all paths */ dbN=GWEN_DB_FindFirstGroup(dbT, "pair"); while(dbN) { for (i=0; ; i++) { s=GWEN_DB_GetCharValue(dbN, "path", i, 0); if (!s) break; else { FILE *f; GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendString(tbuf, fileName); DBG_DEBUG(GWEN_LOGDOMAIN, "Trying \"%s\"", GWEN_Buffer_GetStart(tbuf)); f=fopen(GWEN_Buffer_GetStart(tbuf), "r"); if (f) { fclose(f); DBG_DEBUG(GWEN_LOGDOMAIN, "File \"%s\" found in folder \"%s\"", fileName, s); GWEN_Buffer_AppendBuffer(fbuf, tbuf); GWEN_Buffer_free(tbuf); return 0; } GWEN_Buffer_Reset(tbuf); } } dbN=GWEN_DB_FindNextGroup(dbN, "pair"); } GWEN_Buffer_free(tbuf); } } DBG_INFO(GWEN_LOGDOMAIN, "File \"%s\" not found", fileName); return GWEN_ERROR_NOT_FOUND; } int GWEN_PathManager_GetMatchingFilesRecursively(const char *destLib, const char *pathName, const char *subFolderName, GWEN_STRINGLIST *sl, const char *mask) { GWEN_DB_NODE *dbT; assert(gwen__paths); dbT=GWEN_DB_GetGroup(gwen__paths, GWEN_PATH_FLAGS_NAMEMUSTEXIST, destLib); if (dbT) { dbT=GWEN_DB_GetGroup(dbT, GWEN_PATH_FLAGS_NAMEMUSTEXIST, pathName); if (dbT) { int i; const char *s; GWEN_DB_NODE *dbN; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* check all paths */ dbN=GWEN_DB_FindFirstGroup(dbT, "pair"); while(dbN) { for (i=0; ; i++) { s=GWEN_DB_GetCharValue(dbN, "path", i, 0); if (!s) break; else { GWEN_Buffer_AppendString(tbuf, s); if (subFolderName && *subFolderName) { GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendString(tbuf, subFolderName); } DBG_DEBUG(GWEN_LOGDOMAIN, "Trying \"%s\"", GWEN_Buffer_GetStart(tbuf)); GWEN_Directory_GetMatchingFilesRecursively(GWEN_Buffer_GetStart(tbuf), sl, mask); GWEN_Buffer_Reset(tbuf); } } dbN=GWEN_DB_FindNextGroup(dbN, "pair"); } GWEN_Buffer_free(tbuf); } } return 0; } #ifdef OS_WIN32 int GWEN_PathManager_AddPathFromWinReg(const char *callingLib, const char *destLib, const char *pathName, const char *keypath, const char *varname) { HKEY hkey; TCHAR nbuffer[MAX_PATH]; BYTE vbuffer[MAX_PATH]; DWORD nsize; DWORD vsize; DWORD typ; int i; snprintf(nbuffer, sizeof(nbuffer), keypath); /* open the key */ if (RegOpenKey(HKEY_LOCAL_MACHINE, nbuffer, &hkey)) { DBG_INFO(GWEN_LOGDOMAIN, "RegOpenKey %s failed.", keypath); return 1; } /* find the variablename */ for (i=0;; i++) { nsize=sizeof(nbuffer); vsize=sizeof(vbuffer); if (ERROR_SUCCESS!=RegEnumValue(hkey, i, /* index */ nbuffer, &nsize, 0, /* reserved */ &typ, vbuffer, &vsize)) break; if (strcasecmp(nbuffer, varname)==0 && typ==REG_SZ) { /* variable found */ RegCloseKey(hkey); return GWEN_PathManager_AddPath(callingLib, destLib, pathName, (char*)vbuffer); } } /* for */ RegCloseKey(hkey); DBG_INFO(GWEN_LOGDOMAIN, "In RegKey \"%s\" the variable \"%s\" does not exist", keypath, varname); return 1; } #else /* OS_WIN32 */ int GWEN_PathManager_AddPathFromWinReg(GWEN_UNUSED const char *callingLib, GWEN_UNUSED const char *destLib, GWEN_UNUSED const char *pathName, GWEN_UNUSED const char *keypath, GWEN_UNUSED const char *varname) { return 0; } #endif /* OS_WIN32 */ gwenhywfar-4.15.2beta/src/base/param.c0000644000175000017500000005526412425452307014526 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "param.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "param_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(GWEN_PARAM, GWEN_Param) GWEN_LIST2_FUNCTIONS(GWEN_PARAM, GWEN_Param) GWEN_TREE_FUNCTIONS(GWEN_PARAM, GWEN_Param) GWEN_PARAM_DATATYPE GWEN_Param_DataType_fromString(const char *p_s) { if (p_s && *p_s) { if (strcasecmp(p_s, "int")==0) return GWEN_Param_DataType_Int; else if (strcasecmp(p_s, "bool")==0) return GWEN_Param_DataType_Bool; else if (strcasecmp(p_s, "float")==0) return GWEN_Param_DataType_Float; else if (strcasecmp(p_s, "string")==0) return GWEN_Param_DataType_String; } return GWEN_Param_DataType_Unknown; } GWEN_PARAM_TYPE GWEN_Param_Type_fromString(const char *p_s) { if (p_s && *p_s) { if (strcasecmp(p_s, "simple")==0) return GWEN_Param_Type_Simple; else if (strcasecmp(p_s, "choice")==0) return GWEN_Param_Type_Choice; } return GWEN_Param_Type_Unknown; } const char *GWEN_Param_DataType_toString(GWEN_PARAM_DATATYPE p_i) { switch(p_i) { case GWEN_Param_DataType_Int: return "int"; case GWEN_Param_DataType_Bool: return "bool"; case GWEN_Param_DataType_Float: return "float"; case GWEN_Param_DataType_String: return "string"; default: return "unknown"; } } const char *GWEN_Param_Type_toString(GWEN_PARAM_TYPE p_i) { switch(p_i) { case GWEN_Param_Type_Simple: return "simple"; case GWEN_Param_Type_Choice: return "choice"; default: return "unknown"; } } GWEN_PARAM *GWEN_Param_new(void) { GWEN_PARAM *p_struct; GWEN_NEW_OBJECT(GWEN_PARAM, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(GWEN_PARAM, p_struct) GWEN_TREE_INIT(GWEN_PARAM, p_struct) /* members */ p_struct->name=NULL; p_struct->flags=0; p_struct->type=GWEN_Param_Type_Unknown; p_struct->dataType=GWEN_Param_DataType_Unknown; p_struct->shortDescription=NULL; p_struct->longDescription=NULL; p_struct->currentValue=NULL; p_struct->defaultValue=NULL; p_struct->choices=NULL; p_struct->internalIntValue=0; p_struct->internalFloatValue=0; p_struct->runtimeFlags=0; /* virtual functions */ return p_struct; } void GWEN_Param_free(GWEN_PARAM *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(GWEN_PARAM, p_struct) GWEN_TREE_FINI(GWEN_PARAM, p_struct) /* members */ free(p_struct->name); free(p_struct->shortDescription); free(p_struct->longDescription); free(p_struct->currentValue); free(p_struct->defaultValue); GWEN_StringList2_free(p_struct->choices); p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void GWEN_Param_Attach(GWEN_PARAM *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } GWEN_PARAM *GWEN_Param_dup(const GWEN_PARAM *p_src) { GWEN_PARAM *p_struct; assert(p_src); p_struct=GWEN_Param_new(); /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; } if (p_src->name) { p_struct->name=strdup(p_src->name); } /* member "flags" */ p_struct->flags=p_src->flags; /* member "type" */ p_struct->type=p_src->type; /* member "dataType" */ p_struct->dataType=p_src->dataType; /* member "shortDescription" */ if (p_struct->shortDescription) { free(p_struct->shortDescription); p_struct->shortDescription=NULL; } if (p_src->shortDescription) { p_struct->shortDescription=strdup(p_src->shortDescription); } /* member "longDescription" */ if (p_struct->longDescription) { free(p_struct->longDescription); p_struct->longDescription=NULL; } if (p_src->longDescription) { p_struct->longDescription=strdup(p_src->longDescription); } /* member "currentValue" */ if (p_struct->currentValue) { free(p_struct->currentValue); p_struct->currentValue=NULL; } if (p_src->currentValue) { p_struct->currentValue=strdup(p_src->currentValue); } /* member "defaultValue" */ if (p_struct->defaultValue) { free(p_struct->defaultValue); p_struct->defaultValue=NULL; } if (p_src->defaultValue) { p_struct->defaultValue=strdup(p_src->defaultValue); } /* member "choices" */ if (p_struct->choices) { GWEN_StringList2_free(p_struct->choices); p_struct->choices=NULL; } if (p_src->choices) { p_struct->choices=GWEN_StringList2_dup(p_src->choices); } /* member "internalIntValue" */ p_struct->internalIntValue=p_src->internalIntValue; /* member "internalFloatValue" */ p_struct->internalFloatValue=p_src->internalFloatValue; /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } GWEN_PARAM *GWEN_Param_copy(GWEN_PARAM *p_struct, const GWEN_PARAM *p_src) { assert(p_struct); assert(p_src); /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; } if (p_src->name) { p_struct->name=strdup(p_src->name); } /* member "flags" */ p_struct->flags=p_src->flags; /* member "type" */ p_struct->type=p_src->type; /* member "dataType" */ p_struct->dataType=p_src->dataType; /* member "shortDescription" */ if (p_struct->shortDescription) { free(p_struct->shortDescription); p_struct->shortDescription=NULL; } if (p_src->shortDescription) { p_struct->shortDescription=strdup(p_src->shortDescription); } /* member "longDescription" */ if (p_struct->longDescription) { free(p_struct->longDescription); p_struct->longDescription=NULL; } if (p_src->longDescription) { p_struct->longDescription=strdup(p_src->longDescription); } /* member "currentValue" */ if (p_struct->currentValue) { free(p_struct->currentValue); p_struct->currentValue=NULL; } if (p_src->currentValue) { p_struct->currentValue=strdup(p_src->currentValue); } /* member "defaultValue" */ if (p_struct->defaultValue) { free(p_struct->defaultValue); p_struct->defaultValue=NULL; } if (p_src->defaultValue) { p_struct->defaultValue=strdup(p_src->defaultValue); } /* member "choices" */ if (p_struct->choices) { GWEN_StringList2_free(p_struct->choices); p_struct->choices=NULL; } if (p_src->choices) { p_struct->choices=GWEN_StringList2_dup(p_src->choices); } /* member "internalIntValue" */ p_struct->internalIntValue=p_src->internalIntValue; /* member "internalFloatValue" */ p_struct->internalFloatValue=p_src->internalFloatValue; /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } const char *GWEN_Param_GetName(const GWEN_PARAM *p_struct) { assert(p_struct); return p_struct->name; } uint32_t GWEN_Param_GetFlags(const GWEN_PARAM *p_struct) { assert(p_struct); return p_struct->flags; } GWEN_PARAM_TYPE GWEN_Param_GetType(const GWEN_PARAM *p_struct) { assert(p_struct); return p_struct->type; } GWEN_PARAM_DATATYPE GWEN_Param_GetDataType(const GWEN_PARAM *p_struct) { assert(p_struct); return p_struct->dataType; } const char *GWEN_Param_GetShortDescription(const GWEN_PARAM *p_struct) { assert(p_struct); return p_struct->shortDescription; } const char *GWEN_Param_GetLongDescription(const GWEN_PARAM *p_struct) { assert(p_struct); return p_struct->longDescription; } const char *GWEN_Param_GetCurrentValue(const GWEN_PARAM *p_struct) { assert(p_struct); return p_struct->currentValue; } const char *GWEN_Param_GetDefaultValue(const GWEN_PARAM *p_struct) { assert(p_struct); return p_struct->defaultValue; } GWEN_STRINGLIST2 *GWEN_Param_GetChoices(const GWEN_PARAM *p_struct) { assert(p_struct); return p_struct->choices; } int GWEN_Param_GetInternalIntValue(const GWEN_PARAM *p_struct) { assert(p_struct); return p_struct->internalIntValue; } double GWEN_Param_GetInternalFloatValue(const GWEN_PARAM *p_struct) { assert(p_struct); return p_struct->internalFloatValue; } uint32_t GWEN_Param_GetRuntimeFlags(const GWEN_PARAM *p_struct) { assert(p_struct); return p_struct->runtimeFlags; } void GWEN_Param_SetName(GWEN_PARAM *p_struct, const char *p_src) { assert(p_struct); if (p_struct->name) { free(p_struct->name); } if (p_src) { p_struct->name=strdup(p_src); } else { p_struct->name=NULL; } } void GWEN_Param_SetFlags(GWEN_PARAM *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags=p_src; } void GWEN_Param_AddFlags(GWEN_PARAM *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags|=p_src; } void GWEN_Param_SubFlags(GWEN_PARAM *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags&=~p_src; } void GWEN_Param_SetType(GWEN_PARAM *p_struct, GWEN_PARAM_TYPE p_src) { assert(p_struct); p_struct->type=p_src; } void GWEN_Param_SetDataType(GWEN_PARAM *p_struct, GWEN_PARAM_DATATYPE p_src) { assert(p_struct); p_struct->dataType=p_src; } void GWEN_Param_SetShortDescription(GWEN_PARAM *p_struct, const char *p_src) { assert(p_struct); if (p_struct->shortDescription) { free(p_struct->shortDescription); } if (p_src) { p_struct->shortDescription=strdup(p_src); } else { p_struct->shortDescription=NULL; } } void GWEN_Param_SetLongDescription(GWEN_PARAM *p_struct, const char *p_src) { assert(p_struct); if (p_struct->longDescription) { free(p_struct->longDescription); } if (p_src) { p_struct->longDescription=strdup(p_src); } else { p_struct->longDescription=NULL; } } void GWEN_Param_SetCurrentValue(GWEN_PARAM *p_struct, const char *p_src) { assert(p_struct); if (p_struct->currentValue) { free(p_struct->currentValue); } if (p_src) { p_struct->currentValue=strdup(p_src); } else { p_struct->currentValue=NULL; } } void GWEN_Param_SetDefaultValue(GWEN_PARAM *p_struct, const char *p_src) { assert(p_struct); if (p_struct->defaultValue) { free(p_struct->defaultValue); } if (p_src) { p_struct->defaultValue=strdup(p_src); } else { p_struct->defaultValue=NULL; } } void GWEN_Param_SetChoices(GWEN_PARAM *p_struct, GWEN_STRINGLIST2 *p_src) { assert(p_struct); if (p_struct->choices) { GWEN_StringList2_free(p_struct->choices); } p_struct->choices=p_src; } void GWEN_Param_SetInternalIntValue(GWEN_PARAM *p_struct, int p_src) { assert(p_struct); p_struct->internalIntValue=p_src; } void GWEN_Param_SetInternalFloatValue(GWEN_PARAM *p_struct, double p_src) { assert(p_struct); p_struct->internalFloatValue=p_src; } void GWEN_Param_SetRuntimeFlags(GWEN_PARAM *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags=p_src; } void GWEN_Param_AddRuntimeFlags(GWEN_PARAM *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags|=p_src; } void GWEN_Param_SubRuntimeFlags(GWEN_PARAM *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags&=~p_src; } /* list1 functions */ GWEN_PARAM_LIST *GWEN_Param_List_dup(const GWEN_PARAM_LIST *p_src) { GWEN_PARAM_LIST *p_dest; GWEN_PARAM *p_elem; assert(p_src); p_dest=GWEN_Param_List_new(); p_elem=GWEN_Param_List_First(p_src); while(p_elem) { GWEN_PARAM *p_cpy; p_cpy=GWEN_Param_dup(p_elem); GWEN_Param_List_Add(p_cpy, p_dest); p_elem=GWEN_Param_List_Next(p_elem); } return p_dest; } void GWEN_Param_ReadDb(GWEN_PARAM *p_struct, GWEN_DB_NODE *p_db) { assert(p_struct); /* member "name" */ if (p_struct->name) { free(p_struct->name); } { const char *s; s=GWEN_DB_GetCharValue(p_db, "name", 0, NULL); if (s) p_struct->name=strdup(s); } if (p_struct->name==NULL) { p_struct->name=NULL; } /* member "flags" */ p_struct->flags=GWEN_DB_GetIntValue(p_db, "flags", 0, 0); /* member "type" */ { const char *s; s=GWEN_DB_GetCharValue(p_db, "type", 0, NULL); if (s) p_struct->type=GWEN_Param_Type_fromString(s); else p_struct->type=GWEN_Param_Type_Unknown; } /* member "dataType" */ { const char *s; s=GWEN_DB_GetCharValue(p_db, "dataType", 0, NULL); if (s) p_struct->dataType=GWEN_Param_DataType_fromString(s); else p_struct->dataType=GWEN_Param_DataType_Unknown; } /* member "shortDescription" */ if (p_struct->shortDescription) { free(p_struct->shortDescription); } { const char *s; s=GWEN_DB_GetCharValue(p_db, "shortDescription", 0, NULL); if (s) p_struct->shortDescription=strdup(s); } if (p_struct->shortDescription==NULL) { p_struct->shortDescription=NULL; } /* member "longDescription" */ if (p_struct->longDescription) { free(p_struct->longDescription); } { const char *s; s=GWEN_DB_GetCharValue(p_db, "longDescription", 0, NULL); if (s) p_struct->longDescription=strdup(s); } if (p_struct->longDescription==NULL) { p_struct->longDescription=NULL; } /* member "currentValue" */ if (p_struct->currentValue) { free(p_struct->currentValue); } { const char *s; s=GWEN_DB_GetCharValue(p_db, "currentValue", 0, NULL); if (s) p_struct->currentValue=strdup(s); } if (p_struct->currentValue==NULL) { p_struct->currentValue=NULL; } /* member "defaultValue" */ if (p_struct->defaultValue) { free(p_struct->defaultValue); } { const char *s; s=GWEN_DB_GetCharValue(p_db, "defaultValue", 0, NULL); if (s) p_struct->defaultValue=strdup(s); } if (p_struct->defaultValue==NULL) { p_struct->defaultValue=NULL; } /* member "choices" */ if (p_struct->choices) { GWEN_StringList2_free(p_struct->choices); } { p_struct->choices=GWEN_StringList2_fromDb(p_db, "choices", GWEN_StringList2_IntertMode_AlwaysAdd); } if (p_struct->choices==NULL) { p_struct->choices=NULL; } /* member "internalIntValue" */ /* member "internalIntValue" is volatile, just presetting */ p_struct->internalIntValue=0; /* member "internalFloatValue" */ /* member "internalFloatValue" is volatile, just presetting */ p_struct->internalFloatValue=0; /* member "runtimeFlags" */ /* member "runtimeFlags" is volatile, just presetting */ p_struct->runtimeFlags=0; } int GWEN_Param_WriteDb(const GWEN_PARAM *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "name" */ if (p_struct->name) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "name", p_struct->name); else { GWEN_DB_DeleteVar(p_db, "name"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "flags" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "flags", p_struct->flags); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "type" */ p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "type", GWEN_Param_Type_toString(p_struct->type)); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "dataType" */ p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "dataType", GWEN_Param_DataType_toString(p_struct->dataType)); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "shortDescription" */ if (p_struct->shortDescription) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "shortDescription", p_struct->shortDescription); else { GWEN_DB_DeleteVar(p_db, "shortDescription"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "longDescription" */ if (p_struct->longDescription) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "longDescription", p_struct->longDescription); else { GWEN_DB_DeleteVar(p_db, "longDescription"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "currentValue" */ if (p_struct->currentValue) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "currentValue", p_struct->currentValue); else { GWEN_DB_DeleteVar(p_db, "currentValue"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "defaultValue" */ if (p_struct->defaultValue) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "defaultValue", p_struct->defaultValue); else { GWEN_DB_DeleteVar(p_db, "defaultValue"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "choices" */ if (p_struct->choices){ p_rv=GWEN_StringList2_toDb(p_struct->choices, p_db, "choices"); } else { GWEN_DB_DeleteVar(p_db, "choices"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "internalIntValue" is volatile, not writing to db */ /* member "internalFloatValue" is volatile, not writing to db */ /* member "runtimeFlags" is volatile, not writing to db */ return 0; } GWEN_PARAM *GWEN_Param_fromDb(GWEN_DB_NODE *p_db) { GWEN_PARAM *p_struct; p_struct=GWEN_Param_new(); GWEN_Param_ReadDb(p_struct, p_db); return p_struct; } int GWEN_Param_toDb(const GWEN_PARAM *p_struct, GWEN_DB_NODE *p_db) { return GWEN_Param_WriteDb(p_struct, p_db); } void GWEN_Param_ReadXml(GWEN_PARAM *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "name" */ if (p_struct->name) { free(p_struct->name); } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "name", NULL); if (s) p_struct->name=strdup(s); } if (p_struct->name==NULL) { /* member "name" is volatile, just presetting */ p_struct->name=NULL; } /* member "flags" */ p_struct->flags=GWEN_XMLNode_GetIntValue(p_db, "flags", 0); /* member "type" */ { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "type", NULL); if (s) p_struct->type=GWEN_Param_Type_fromString(s); else p_struct->type=GWEN_Param_Type_Unknown; } /* member "dataType" */ { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "dataType", NULL); if (s) p_struct->dataType=GWEN_Param_DataType_fromString(s); else p_struct->dataType=GWEN_Param_DataType_Unknown; } /* member "shortDescription" */ if (p_struct->shortDescription) { free(p_struct->shortDescription); } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "shortDescription", NULL); if (s) p_struct->shortDescription=strdup(s); } if (p_struct->shortDescription==NULL) { /* member "shortDescription" is volatile, just presetting */ p_struct->shortDescription=NULL; } /* member "longDescription" */ if (p_struct->longDescription) { free(p_struct->longDescription); } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "longDescription", NULL); if (s) p_struct->longDescription=strdup(s); } if (p_struct->longDescription==NULL) { /* member "longDescription" is volatile, just presetting */ p_struct->longDescription=NULL; } /* member "currentValue" */ if (p_struct->currentValue) { free(p_struct->currentValue); } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "currentValue", NULL); if (s) p_struct->currentValue=strdup(s); } if (p_struct->currentValue==NULL) { /* member "currentValue" is volatile, just presetting */ p_struct->currentValue=NULL; } /* member "defaultValue" */ if (p_struct->defaultValue) { free(p_struct->defaultValue); } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "defaultValue", NULL); if (s) p_struct->defaultValue=strdup(s); } if (p_struct->defaultValue==NULL) { /* member "defaultValue" is volatile, just presetting */ p_struct->defaultValue=NULL; } /* member "choices" */ if (p_struct->choices) { GWEN_StringList2_free(p_struct->choices); } { GWEN_XMLNODE *n; n=GWEN_XMLNode_FindFirstTag(p_db, "choices", 0, 0); if(n) { p_struct->choices=GWEN_StringList2_fromXml(n, GWEN_StringList2_IntertMode_AlwaysAdd); } else p_struct->choices=NULL; } if (p_struct->choices==NULL) { /* member "choices" is volatile, just presetting */ p_struct->choices=NULL; } /* member "internalIntValue" */ /* member "internalIntValue" is volatile, just presetting */ p_struct->internalIntValue=0; /* member "internalFloatValue" */ /* member "internalFloatValue" is volatile, just presetting */ p_struct->internalFloatValue=0; /* member "runtimeFlags" */ /* member "runtimeFlags" is volatile, just presetting */ p_struct->runtimeFlags=0; } void GWEN_Param_WriteXml(const GWEN_PARAM *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "name" */ GWEN_XMLNode_SetCharValue(p_db, "name", p_struct->name); /* member "flags" */ GWEN_XMLNode_SetIntValue(p_db, "flags", p_struct->flags); /* member "type" */ GWEN_XMLNode_SetCharValue(p_db, "type", GWEN_Param_Type_toString(p_struct->type)); /* member "dataType" */ GWEN_XMLNode_SetCharValue(p_db, "dataType", GWEN_Param_DataType_toString(p_struct->dataType)); /* member "shortDescription" */ GWEN_XMLNode_SetCharValue(p_db, "shortDescription", p_struct->shortDescription); /* member "longDescription" */ GWEN_XMLNode_SetCharValue(p_db, "longDescription", p_struct->longDescription); /* member "currentValue" */ GWEN_XMLNode_SetCharValue(p_db, "currentValue", p_struct->currentValue); /* member "defaultValue" */ GWEN_XMLNode_SetCharValue(p_db, "defaultValue", p_struct->defaultValue); /* member "choices" */ if (p_struct->choices){ GWEN_XMLNODE *n; n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "choices"); GWEN_StringList2_toXml(p_struct->choices, n); GWEN_XMLNode_AddChild(p_db, n); } /* member "internalIntValue" is volatile, not writing to xml */ /* member "internalFloatValue" is volatile, not writing to xml */ /* member "runtimeFlags" is volatile, not writing to xml */ } void GWEN_Param_toXml(const GWEN_PARAM *p_struct, GWEN_XMLNODE *p_db) { GWEN_Param_WriteXml(p_struct, p_db); } GWEN_PARAM *GWEN_Param_fromXml(GWEN_XMLNODE *p_db) { GWEN_PARAM *p_struct; p_struct=GWEN_Param_new(); GWEN_Param_ReadXml(p_struct, p_db); return p_struct; } GWEN_PARAM *GWEN_Param_List_GetByName(const GWEN_PARAM_LIST *p_list, const char *p_cmp) { GWEN_PARAM *p_struct; assert(p_list); p_struct = GWEN_Param_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->name && p_cmp) p_rv=strcasecmp(p_cmp, p_struct->name); else if (p_cmp) p_rv=1; else if (p_struct->name) p_rv=-1; else p_rv=0; if (p_rv == 0) return p_struct; p_struct = GWEN_Param_List_Next(p_struct); } return NULL; } GWEN_PARAM *GWEN_Param_Tree_GetByName(const GWEN_PARAM_TREE *p_tree, const char *p_cmp) { GWEN_PARAM *p_struct; assert(p_tree); p_struct = GWEN_Param_Tree_GetFirst(p_tree); while(p_struct) { int p_rv; if (p_struct->name && p_cmp) p_rv=strcasecmp(p_cmp, p_struct->name); else if (p_cmp) p_rv=1; else if (p_struct->name) p_rv=-1; else p_rv=0; if (p_rv == 0) return p_struct; p_struct = GWEN_Param_Tree_GetBelow(p_struct); } return NULL; } /* code headers */ #include "param_fns.c" gwenhywfar-4.15.2beta/src/base/param.h0000644000175000017500000001514712425452307014527 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "param.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef PARAM_H #define PARAM_H #ifdef __cplusplus extern "C" { #endif /* define GWEN_PARAM_RTFLAGS */ /* define GWEN_PARAM_FLAGS */ /* needed system headers */ #include #include #include #include #include #include /* pre-headers */ #include #include typedef struct GWEN_PARAM GWEN_PARAM; GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_PARAM, GWEN_Param, GWENHYWFAR_API) GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_PARAM, GWEN_Param, GWENHYWFAR_API) GWEN_TREE_FUNCTION_LIB_DEFS(GWEN_PARAM, GWEN_Param, GWENHYWFAR_API) typedef enum { GWEN_Param_DataType_Unknown = -1, GWEN_Param_DataType_Int, GWEN_Param_DataType_Bool, GWEN_Param_DataType_Float, GWEN_Param_DataType_String } GWEN_PARAM_DATATYPE; typedef enum { GWEN_Param_Type_Unknown = -1, GWEN_Param_Type_Simple, GWEN_Param_Type_Choice } GWEN_PARAM_TYPE; /* post-headers */ #include GWENHYWFAR_API GWEN_PARAM_DATATYPE GWEN_Param_DataType_fromString(const char *p_s); GWENHYWFAR_API GWEN_PARAM_TYPE GWEN_Param_Type_fromString(const char *p_s); GWENHYWFAR_API const char *GWEN_Param_DataType_toString(GWEN_PARAM_DATATYPE p_i); GWENHYWFAR_API const char *GWEN_Param_Type_toString(GWEN_PARAM_TYPE p_i); /** Constructor. */ GWENHYWFAR_API GWEN_PARAM *GWEN_Param_new(void); /** Destructor. */ GWENHYWFAR_API void GWEN_Param_free(GWEN_PARAM *p_struct); GWENHYWFAR_API void GWEN_Param_Attach(GWEN_PARAM *p_struct); GWENHYWFAR_API GWEN_PARAM *GWEN_Param_dup(const GWEN_PARAM *p_struct); GWENHYWFAR_API GWEN_PARAM *GWEN_Param_copy(GWEN_PARAM *p_struct, const GWEN_PARAM *p_src); /** Getter. * Use this function to get the member "name" */ GWENHYWFAR_API const char *GWEN_Param_GetName(const GWEN_PARAM *p_struct); /** Getter. * Use this function to get the member "flags" */ GWENHYWFAR_API uint32_t GWEN_Param_GetFlags(const GWEN_PARAM *p_struct); /** Getter. * Use this function to get the member "type" */ GWENHYWFAR_API GWEN_PARAM_TYPE GWEN_Param_GetType(const GWEN_PARAM *p_struct); /** Getter. * Use this function to get the member "dataType" */ GWENHYWFAR_API GWEN_PARAM_DATATYPE GWEN_Param_GetDataType(const GWEN_PARAM *p_struct); /** Getter. * Use this function to get the member "shortDescription" */ GWENHYWFAR_API const char *GWEN_Param_GetShortDescription(const GWEN_PARAM *p_struct); /** Getter. * Use this function to get the member "longDescription" */ GWENHYWFAR_API const char *GWEN_Param_GetLongDescription(const GWEN_PARAM *p_struct); /** Getter. * Use this function to get the member "currentValue" */ GWENHYWFAR_API const char *GWEN_Param_GetCurrentValue(const GWEN_PARAM *p_struct); /** Getter. * Use this function to get the member "defaultValue" */ GWENHYWFAR_API const char *GWEN_Param_GetDefaultValue(const GWEN_PARAM *p_struct); /** Getter. * Use this function to get the member "choices" */ GWENHYWFAR_API GWEN_STRINGLIST2 *GWEN_Param_GetChoices(const GWEN_PARAM *p_struct); /** Getter. * Use this function to get the member "runtimeFlags" */ GWENHYWFAR_API uint32_t GWEN_Param_GetRuntimeFlags(const GWEN_PARAM *p_struct); /** Setter. * Use this function to set the member "name" */ GWENHYWFAR_API void GWEN_Param_SetName(GWEN_PARAM *p_struct, const char *p_src); /** Setter. * Use this function to set the member "flags" */ GWENHYWFAR_API void GWEN_Param_SetFlags(GWEN_PARAM *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to the member "flags" */ GWENHYWFAR_API void GWEN_Param_AddFlags(GWEN_PARAM *p_struct, uint32_t p_src); /** Sub flags. * Use this function to sub flags from the member "flags" */ GWENHYWFAR_API void GWEN_Param_SubFlags(GWEN_PARAM *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "type" */ GWENHYWFAR_API void GWEN_Param_SetType(GWEN_PARAM *p_struct, GWEN_PARAM_TYPE p_src); /** Setter. * Use this function to set the member "dataType" */ GWENHYWFAR_API void GWEN_Param_SetDataType(GWEN_PARAM *p_struct, GWEN_PARAM_DATATYPE p_src); /** Setter. * Use this function to set the member "shortDescription" */ GWENHYWFAR_API void GWEN_Param_SetShortDescription(GWEN_PARAM *p_struct, const char *p_src); /** Setter. * Use this function to set the member "longDescription" */ GWENHYWFAR_API void GWEN_Param_SetLongDescription(GWEN_PARAM *p_struct, const char *p_src); /** Setter. * Use this function to set the member "currentValue" */ GWENHYWFAR_API void GWEN_Param_SetCurrentValue(GWEN_PARAM *p_struct, const char *p_src); /** Setter. * Use this function to set the member "defaultValue" */ GWENHYWFAR_API void GWEN_Param_SetDefaultValue(GWEN_PARAM *p_struct, const char *p_src); /** Setter. * Use this function to set the member "choices" */ GWENHYWFAR_API void GWEN_Param_SetChoices(GWEN_PARAM *p_struct, GWEN_STRINGLIST2 *p_src); /** Setter. * Use this function to set the member "runtimeFlags" */ GWENHYWFAR_API void GWEN_Param_SetRuntimeFlags(GWEN_PARAM *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to the member "runtimeFlags" */ GWENHYWFAR_API void GWEN_Param_AddRuntimeFlags(GWEN_PARAM *p_struct, uint32_t p_src); /** Sub flags. * Use this function to sub flags from the member "runtimeFlags" */ GWENHYWFAR_API void GWEN_Param_SubRuntimeFlags(GWEN_PARAM *p_struct, uint32_t p_src); /* list1 functions */ GWENHYWFAR_API GWEN_PARAM_LIST *GWEN_Param_List_dup(const GWEN_PARAM_LIST *p_src); GWENHYWFAR_API void GWEN_Param_ReadDb(GWEN_PARAM *p_struct, GWEN_DB_NODE *p_db); GWENHYWFAR_API int GWEN_Param_WriteDb(const GWEN_PARAM *p_struct, GWEN_DB_NODE *p_db); GWENHYWFAR_API GWEN_PARAM *GWEN_Param_fromDb(GWEN_DB_NODE *p_db); GWENHYWFAR_API int GWEN_Param_toDb(const GWEN_PARAM *p_struct, GWEN_DB_NODE *p_db); GWENHYWFAR_API void GWEN_Param_ReadXml(GWEN_PARAM *p_struct, GWEN_XMLNODE *p_db); GWENHYWFAR_API void GWEN_Param_WriteXml(const GWEN_PARAM *p_struct, GWEN_XMLNODE *p_db); GWENHYWFAR_API void GWEN_Param_toXml(const GWEN_PARAM *p_struct, GWEN_XMLNODE *p_db); GWENHYWFAR_API GWEN_PARAM *GWEN_Param_fromXml(GWEN_XMLNODE *p_db); GWENHYWFAR_API GWEN_PARAM *GWEN_Param_List_GetByName(const GWEN_PARAM_LIST *p_list, const char *p_cmp); GWENHYWFAR_API GWEN_PARAM *GWEN_Param_Tree_GetByName(const GWEN_PARAM_TREE *p_tree, const char *p_cmp); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/base/error_p.h0000644000175000017500000000341312416477066015101 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Tue Oct 02 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_ERROR_P_H #define GWENHYWFAR_ERROR_P_H #include "error_l.h" // Intentionally empty #endif /* MOD_ERROR_H */ gwenhywfar-4.15.2beta/src/base/refptr.c0000644000175000017500000001372112416477066014731 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sun Jan 25 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "refptr_p.h" #include #include #include GWEN_REFPTR_POBJECT *GWEN_RefPtrObject_new(void *dp, GWEN_REFPTR_INFO *rpi) { GWEN_REFPTR_POBJECT *rpo; GWEN_NEW_OBJECT(GWEN_REFPTR_POBJECT, rpo); rpo->refCount=1; rpo->ptr=dp; rpo->infoPtr=rpi; if (rpi) GWEN_RefPtrInfo_Attach(rpi); return rpo; } void GWEN_RefPtrObject_free(GWEN_REFPTR_POBJECT *rpo) { if (rpo) { assert(rpo->refCount); if (--(rpo->refCount)==0) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Freeing GWEN_RefPtrObject"); if ((rpo->flags & GWEN_REFPTR_FLAGS_AUTODELETE) && rpo->infoPtr && rpo->ptr) { if (rpo->infoPtr->freeFn) rpo->infoPtr->freeFn(rpo->ptr); } GWEN_FREE_OBJECT(rpo); } } } void GWEN_RefPtrObject_Attach(GWEN_REFPTR_POBJECT *rpo) { assert(rpo); assert(rpo->refCount); rpo->refCount++; } uint32_t GWEN_RefPtrInfo_GetFlags(const GWEN_REFPTR_INFO *rpi) { assert(rpi); return rpi->flags; } void GWEN_RefPtrInfo_SetFlags(GWEN_REFPTR_INFO *rpi, uint32_t fl) { assert(rpi); rpi->flags=fl; } void GWEN_RefPtrInfo_AddFlags(GWEN_REFPTR_INFO *rpi, uint32_t fl) { assert(rpi); rpi->flags|=fl; } void GWEN_RefPtrInfo_DelFlags(GWEN_REFPTR_INFO *rpi, uint32_t fl) { assert(rpi); rpi->flags&=~fl; } GWEN_REFPTR_INFO *GWEN_RefPtrInfo_new(void) { GWEN_REFPTR_INFO *rpi; GWEN_NEW_OBJECT(GWEN_REFPTR_INFO, rpi); rpi->refCount=1; return rpi; } void GWEN_RefPtrInfo_free(GWEN_REFPTR_INFO *rpi) { if (rpi) { assert(rpi->refCount); if (--(rpi->refCount)==0) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Freeing GWEN_RefPtrInfo"); GWEN_FREE_OBJECT(rpi); } } } void GWEN_RefPtrInfo_Attach(GWEN_REFPTR_INFO *rpi) { assert(rpi); assert(rpi->refCount); rpi->refCount++; } void GWEN_RefPtrInfo_SetFreeFn(GWEN_REFPTR_INFO *rpi, GWEN_REFPTR_INFO_FREE_FN f) { assert(rpi); rpi->freeFn=f; } void GWEN_RefPtrInfo_SetDupFn(GWEN_REFPTR_INFO *rpi, GWEN_REFPTR_INFO_DUP_FN f) { assert(rpi); rpi->dupFn=f; } GWEN_REFPTR *GWEN_RefPtr_new(void *dp, GWEN_REFPTR_INFO *rpi) { GWEN_REFPTR *rp; GWEN_NEW_OBJECT(GWEN_REFPTR, rp); rp->objectPtr=GWEN_RefPtrObject_new(dp, rpi); if (rpi) rp->objectPtr->flags=rpi->flags; return rp; } void GWEN_RefPtr_free(GWEN_REFPTR *rp) { if (rp) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Freeing GWEN_RefPtr"); GWEN_RefPtrObject_free(rp->objectPtr); GWEN_FREE_OBJECT(rp); } } GWEN_REFPTR *GWEN_RefPtr_dup(const GWEN_REFPTR *rp) { GWEN_REFPTR *nrp; assert(rp); GWEN_NEW_OBJECT(GWEN_REFPTR, nrp); nrp->objectPtr=rp->objectPtr; GWEN_RefPtrObject_Attach(nrp->objectPtr); return nrp; } GWEN_REFPTR *GWEN_RefPtr_copy(const GWEN_REFPTR *rp) { GWEN_REFPTR *nrp; assert(rp); if (rp->objectPtr) { if (rp->objectPtr->ptr) { if (rp->objectPtr->infoPtr) { if (rp->objectPtr->infoPtr->dupFn) { void *p; p=rp->objectPtr->infoPtr->dupFn(rp->objectPtr->ptr); nrp=GWEN_RefPtr_new(p, rp->objectPtr->infoPtr); return nrp; } } } } return 0; } void *GWEN_RefPtr_GetData(const GWEN_REFPTR *rp) { if (!rp) return 0; if (rp->objectPtr) { return rp->objectPtr->ptr; } return 0; } void GWEN_RefPtr_SetData(GWEN_REFPTR *rp, void *dp, GWEN_REFPTR_INFO *rpi) { assert(rp); if (rp->objectPtr) { GWEN_RefPtrObject_free(rp->objectPtr); } rp->objectPtr=GWEN_RefPtrObject_new(dp, rpi); } uint32_t GWEN_RefPtr_GetFlags(const GWEN_REFPTR *rp) { assert(rp); if (rp->objectPtr) return rp->objectPtr->flags; DBG_INFO(GWEN_LOGDOMAIN, "No object in RefPtr"); return 0; } void GWEN_RefPtr_SetFlags(GWEN_REFPTR *rp, uint32_t fl) { assert(rp); if (rp->objectPtr) rp->objectPtr->flags=fl; else { DBG_INFO(GWEN_LOGDOMAIN, "No object in RefPtr"); } } void GWEN_RefPtr_AddFlags(GWEN_REFPTR *rp, uint32_t fl) { assert(rp); if (rp->objectPtr) rp->objectPtr->flags|=fl; else { DBG_INFO(GWEN_LOGDOMAIN, "No object in RefPtr"); } } void GWEN_RefPtr_DelFlags(GWEN_REFPTR *rp, uint32_t fl) { assert(rp); if (rp->objectPtr) rp->objectPtr->flags&=~fl; else { DBG_INFO(GWEN_LOGDOMAIN, "No object in RefPtr"); } } gwenhywfar-4.15.2beta/src/base/pointerlist.h0000644000175000017500000001106312364015347015775 00000000000000/*************************************************************************** begin : Wed Sep 12 2012 copyright : (C) 2012 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /** @file pointerlist.h * @short A list of pointers */ #ifndef GWENHYWFAR_POINTERLIST_H #define GWENHYWFAR_POINTERLIST_H #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_POINTERLIST GWEN_POINTERLIST; typedef struct GWEN_POINTERLIST_ITERATOR GWEN_POINTERLIST_ITERATOR; #ifdef __cplusplus } #endif #include #include #ifdef __cplusplus extern "C" { #endif /** * @defgroup MOD_POINTERLIST Pointer list module * @ingroup MOD_BASE * @short A list of pointers * * This is basically a list for pointers, * but since it uses tables instead of those list objects normally used * throughout Gwen it is less memory consuming. */ /*@{*/ /** * Constructor. */ GWENHYWFAR_API GWEN_POINTERLIST *GWEN_PointerList_new(void); /** * Destructor. */ GWENHYWFAR_API void GWEN_PointerList_free(GWEN_POINTERLIST *idl); GWENHYWFAR_API void GWEN_PointerList_Attach(GWEN_POINTERLIST *idl); /** * Returns a new id list which contains all the ids of the given list * in the same order. However, the list returned might be more * is compact (i.e. it has fewer wholes), so the positions of ids * within the list might have changed!. */ GWENHYWFAR_API GWEN_POINTERLIST *GWEN_PointerList_dup(const GWEN_POINTERLIST *idl); /** * Removes all ptrs from the list thus leaving it empty. */ GWENHYWFAR_API void GWEN_PointerList_Clear(GWEN_POINTERLIST *idl); /** * Adds a ptr to the list. This function does no doublecheck. */ GWENHYWFAR_API int GWEN_PointerList_AddPtr(GWEN_POINTERLIST *idl, void *ptr); /** * Removes the first occurrence of the given ptr. * @return 0 if deleted, !=0 if the ptr wasn't found */ GWENHYWFAR_API int GWEN_PointerList_DelPtr(GWEN_POINTERLIST *idl, void *ptr); /** * Checks whether the given ptr exists in the ptrlist. * @return 0 if found, !=0 otherwise */ GWENHYWFAR_API int GWEN_PointerList_HasPtr(const GWEN_POINTERLIST *idl, void *ptr); /** */ GWENHYWFAR_API void *GWEN_PointerList_GetFirstPtr(const GWEN_POINTERLIST *idl, uint64_t *hdl); /** */ GWENHYWFAR_API void *GWEN_PointerList_GetNextPtr(const GWEN_POINTERLIST *idl, uint64_t *hdl); /** * Always append ptr at the end of the list. */ GWENHYWFAR_API int GWEN_PointerList_AppendPtr(GWEN_POINTERLIST *idl, void *ptr); GWENHYWFAR_API void *GWEN_PointerList_GetPtrAt(const GWEN_POINTERLIST *idl, uint64_t index); GWENHYWFAR_API uint64_t GWEN_PointerList_GetEntryCount(const GWEN_POINTERLIST *idl); /*@}*/ /** * @defgroup MOD_POINTERLIST_ITERATOR Iterator for Pointer list module * @ingroup MOD_BASE * @short Iterator for a list of uint64_t objects * */ /*@{*/ GWENHYWFAR_API GWEN_POINTERLIST_ITERATOR *GWEN_PointerList_Iterator_new(GWEN_POINTERLIST *idl); GWENHYWFAR_API void GWEN_PointerList_Iterator_free(GWEN_POINTERLIST_ITERATOR *it); GWENHYWFAR_API void *GWEN_PointerList_Iterator_GetFirstId(GWEN_POINTERLIST_ITERATOR *it); GWENHYWFAR_API void *GWEN_PointerList_Iterator_GetNextId(GWEN_POINTERLIST_ITERATOR *it); /*@}*/ #ifdef __cplusplus } #endif #endif /* GWENHYWFAR_POINTERLIST_H */ gwenhywfar-4.15.2beta/src/base/tree.c0000644000175000017500000001577512416477066014401 00000000000000/*************************************************************************** begin : Fri Jan 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "tree_p.h" #include #include GWEN_TREE *GWEN_Tree_new(void) { GWEN_TREE *l; GWEN_NEW_OBJECT(GWEN_TREE, l); return l; } void GWEN_Tree_free(GWEN_TREE *l) { if (l) { GWEN_FREE_OBJECT(l); } } int GWEN_Tree_GetCount(const GWEN_TREE *l) { assert(l); return l->count; } void GWEN_Tree_Add(GWEN_TREE *l, GWEN_TREE_ELEMENT *el) { assert(l); assert(el); if (el->treePtr) { /* element is already part of another list */ DBG_ERROR(GWEN_LOGDOMAIN, "Element is already part of a list"); assert(0); } else { if (l->firstElement==0) l->firstElement=el; el->prevElement=l->lastElement; if (l->lastElement) l->lastElement->nextElement=el; l->lastElement=el; el->treePtr=l; el->parent=NULL; l->count++; } } void GWEN_Tree_AddList(GWEN_TREE *dest, GWEN_TREE *l) { GWEN_TREE_ELEMENT *el; assert(dest); assert(l); while((el=l->firstElement)) { GWEN_Tree_Del(el); GWEN_Tree_Add(dest, el); } } void GWEN_Tree_Insert(GWEN_TREE *l, GWEN_TREE_ELEMENT *el) { assert(l); assert(el); if (el->treePtr) { /* element is already part of another list */ DBG_ERROR(GWEN_LOGDOMAIN, "Element is already part of a list"); } else { el->nextElement=l->firstElement; l->firstElement=el; if (l->lastElement==0) l->lastElement=el; el->treePtr=l; el->parent=NULL; l->count++; } } void GWEN_Tree_Del(GWEN_TREE_ELEMENT *el) { GWEN_TREE *l; l=el->treePtr; if (l==0) { /* not part of any list */ DBG_ERROR(GWEN_LOGDOMAIN, "Element is not part of any list"); } else { /* unlink from previous */ if (el->prevElement) el->prevElement->nextElement=el->nextElement; /* unlink from next */ if (el->nextElement) el->nextElement->prevElement=el->prevElement; /* unlink from list */ if (l->firstElement==el) l->firstElement=el->nextElement; if (l->lastElement==el) l->lastElement=el->prevElement; l->count--; /* unlink from parent */ if (el->parent) { if (el->parent->firstChild==el) el->parent->firstChild=el->nextElement; if (el->parent->lastChild==el) el->parent->lastChild=el->prevElement; el->parent->count--; } el->nextElement=NULL; el->prevElement=NULL; el->parent=NULL; el->treePtr=NULL; } } void GWEN_Tree_AddChild(GWEN_TREE_ELEMENT *where, GWEN_TREE_ELEMENT *el) { if (el->treePtr) { /* element is already part of another tree */ DBG_ERROR(GWEN_LOGDOMAIN, "Element is already part of a tree"); assert(0); } else { if (where->firstChild==0) where->firstChild=el; el->prevElement=where->lastChild; if (where->lastChild) where->lastChild->nextElement=el; where->lastChild=el; el->parent=where; el->treePtr=where->treePtr; el->treePtr->count++; where->count++; } } void GWEN_Tree_InsertChild(GWEN_TREE_ELEMENT *where, GWEN_TREE_ELEMENT *el) { if (el->treePtr) { /* element is already part of another list */ DBG_ERROR(GWEN_LOGDOMAIN, "Element is already part of a tree"); assert(0); } else { el->nextElement=where->firstChild; where->firstChild=el; if (where->lastChild==NULL) where->lastChild=el; el->parent=where; el->treePtr=where->treePtr; el->treePtr->count++; where->count++; } } void *GWEN_Tree_GetFirst(const GWEN_TREE *l) { if (l->firstElement) return l->firstElement->data; return 0; } void *GWEN_Tree_GetLast(const GWEN_TREE *l) { if (l->lastElement) return l->lastElement->data; return 0; } GWEN_TREE_ELEMENT *GWEN_TreeElement_new(void *d) { GWEN_TREE_ELEMENT *el; GWEN_NEW_OBJECT(GWEN_TREE_ELEMENT, el); el->data=d; return el; } void GWEN_TreeElement_free(GWEN_TREE_ELEMENT *el) { if (el) { if (el->treePtr) GWEN_Tree_Del(el); if (el->firstChild) { DBG_ERROR(GWEN_LOGDOMAIN, "Tree element still has children"); assert(0); } GWEN_FREE_OBJECT(el); } } void *GWEN_TreeElement_GetPrevious(const GWEN_TREE_ELEMENT *el) { if (el->prevElement) return el->prevElement->data; return 0; } void *GWEN_TreeElement_GetNext(const GWEN_TREE_ELEMENT *el) { if (el->nextElement) return el->nextElement->data; return 0; } void *GWEN_TreeElement_GetBelow(const GWEN_TREE_ELEMENT *el) { if (el->firstChild) /* look down */ return el->firstChild->data; else if (el->nextElement) /* look right */ return el->nextElement->data; else { /* look for a parent which has a right neighbour */ while(el && el->parent) { if (el->parent->nextElement) /* look right of parent */ return el->parent->nextElement->data; /* parent has no right neighbour, consult its parent */ el=el->parent; } } return NULL; } void *GWEN_TreeElement_GetFirstChild(const GWEN_TREE_ELEMENT *el) { if (el->firstChild) return el->firstChild->data; return NULL; } void *GWEN_TreeElement_GetLastChild(const GWEN_TREE_ELEMENT *el) { if (el->lastChild) return el->lastChild->data; return NULL; } void *GWEN_TreeElement_GetParent(const GWEN_TREE_ELEMENT *el) { if (el->parent) return el->parent->data; return NULL; } uint32_t GWEN_TreeElement_GetChildrenCount(const GWEN_TREE_ELEMENT *el) { assert(el); return el->count; } gwenhywfar-4.15.2beta/src/base/idmap_p.h0000644000175000017500000000774012416477066015051 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: idlist_p.h 1048 2006-05-17 17:15:35Z martin $ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_IDMAP_P_H #define GWENHYWFAR_IDMAP_P_H #include "idmap.h" typedef GWEN_IDMAP_RESULT (*GWEN_IDMAP_SETPAIR_FN)(GWEN_IDMAP *map, uint32_t id, void *ptr); typedef void* (*GWEN_IDMAP_GETPAIR_FN)(GWEN_IDMAP *map, uint32_t id); typedef GWEN_IDMAP_RESULT (*GWEN_IDMAP_FINDFIRST_FN)(const GWEN_IDMAP *map, uint32_t *pid); typedef GWEN_IDMAP_RESULT (*GWEN_IDMAP_FINDNEXT_FN)(const GWEN_IDMAP *map, uint32_t *pid); typedef void (*GWEN_IDMAP_DUMP_FN)(GWEN_IDMAP *map, FILE *f, int indent); typedef void (*GWEN_IDMAP_FREEDATA_FN)(GWEN_IDMAP *map); struct GWEN_IDMAP { GWEN_IDMAP_SETPAIR_FN setPairFn; GWEN_IDMAP_GETPAIR_FN getPairFn; GWEN_IDMAP_FINDFIRST_FN findFirstFn; GWEN_IDMAP_FINDNEXT_FN findNextFn; GWEN_IDMAP_FREEDATA_FN freeDataFn; GWEN_IDMAP_DUMP_FN dumpFn; GWEN_IDMAP_ALGO algo; void *algoData; uint32_t count; }; typedef struct GWEN_IDMAP_HEX4_TABLE GWEN_IDMAP_HEX4_TABLE; struct GWEN_IDMAP_HEX4_TABLE { GWEN_IDMAP_HEX4_TABLE *parent; int isPtrTable; void* ptrs[16]; }; static GWEN_IDMAP_HEX4_TABLE *GWEN_IdMapHex4Map_new(GWEN_IDMAP_HEX4_TABLE *p, int isPtrTable); static void GWEN_IdMapHex4Map_free(GWEN_IDMAP_HEX4_TABLE *t); typedef struct GWEN_IDMAP_HEX4 GWEN_IDMAP_HEX4; struct GWEN_IDMAP_HEX4 { GWEN_IDMAP_HEX4_TABLE *table; uint32_t lastId; }; static void GWEN_IdMapHex4_Extend(GWEN_IDMAP *map); static void GWEN_IdMapHex4_free(GWEN_IDMAP *map); static GWEN_IDMAP_RESULT GWEN_IdMapHex4_Insert(GWEN_IDMAP *map, uint32_t id, void *ptr); static void *GWEN_IdMapHex4_Find(GWEN_IDMAP *map, uint32_t id); static GWEN_IDMAP_RESULT GWEN_IdMapHex4_FindFirst(const GWEN_IDMAP *map, uint32_t *pid); static GWEN_IDMAP_RESULT GWEN_IdMapHex4_FindNext(const GWEN_IDMAP *map, uint32_t *pid); static GWEN_IDMAP_HEX4_TABLE *GWEN_IdMapHex4__GetTable(GWEN_IDMAP_HEX4_TABLE *t, uint32_t id); static GWEN_IDMAP_HEX4_TABLE *GWEN_IdMapHex4__GetFirstTable(GWEN_IDMAP_HEX4_TABLE *t, uint32_t *pid); static GWEN_IDMAP_HEX4_TABLE *GWEN_IdMapHex4__GetNextTable(GWEN_IDMAP_HEX4_TABLE *t, uint32_t *pid, int incr); static void GWEN_IdMapHex4__Dump(GWEN_IDMAP_HEX4_TABLE *table, FILE *f, int indent); static void GWEN_IdMapHex4_Dump(GWEN_IDMAP *map, FILE *f, int indent); #endif gwenhywfar-4.15.2beta/src/base/multicache.h0000644000175000017500000001246412501326065015540 00000000000000/*************************************************************************** begin : Wed May 08 2013 copyright : (C) 2013 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_MULTICACHE_H #define GWENHYWFAR_MULTICACHE_H #include #include #ifdef __cplusplus extern "C" { #endif /** @defgroup MOD_MULTICACHE Multi Cache Module * @ingroup MOD_BASE * * @brief This file contains the definition of a GWEN_MULTICACHE, a * cache for multiple types of data. * * The idea behind this is to make it easier to handle multiple types of objects * by a single central cache object. You only set the maximum total size the central * cache object is allowed to provide and that object will use this sum of memory to * provide a caching mechanism for multiple different types. * * You'll have to create a single central cache object (GWEN_MULTICACHE). Then you can * create a GWEN_MULTICACHE_TYPE object for each kind of data you want to have managed. * For the GWEN_MULTICACHE_TYPE object you need to provide functions which will increase * and decrease the reference counter of the object cached. * */ /*@{*/ typedef struct GWEN_MULTICACHE GWEN_MULTICACHE; typedef struct GWEN_MULTICACHE_TYPE GWEN_MULTICACHE_TYPE; typedef int GWENHYWFAR_CB (*GWEN_MULTICACHE_TYPE_ATTACH_FN)(void *p); typedef int GWENHYWFAR_CB (*GWEN_MULTICACHE_TYPE_FREE_FN)(void *p); typedef int GWENHYWFAR_CB (*GWEN_MULTICACHE_TYPE_ATTACH_OBJECT_FN)(const GWEN_MULTICACHE_TYPE *ct, void *p); typedef int GWENHYWFAR_CB (*GWEN_MULTICACHE_TYPE_FREE_OBJECT_FN)(const GWEN_MULTICACHE_TYPE *ct, void *p); /** @name Per-type Cache Objects * * This object describes one of the data types which can be managed by a central * cache object. */ /*@{*/ GWENHYWFAR_API GWEN_MULTICACHE_TYPE *GWEN_MultiCache_Type_new(GWEN_MULTICACHE *mc); GWENHYWFAR_API void GWEN_MultiCache_Type_free(GWEN_MULTICACHE_TYPE *ct); GWENHYWFAR_API void *GWEN_MultiCache_Type_GetData(const GWEN_MULTICACHE_TYPE *ct, uint32_t id); GWENHYWFAR_API void *GWEN_MultiCache_Type_GetDataWithParams(const GWEN_MULTICACHE_TYPE *ct, uint32_t id, uint32_t param1, uint32_t param2, uint32_t param3, uint32_t param4); GWENHYWFAR_API void *GWEN_MultiCache_Type_GetDataWithParams5(const GWEN_MULTICACHE_TYPE *ct, uint32_t id, uint32_t param1, uint32_t param2, uint32_t param3, uint32_t param4, double param5); GWENHYWFAR_API void GWEN_MultiCache_Type_SetData(GWEN_MULTICACHE_TYPE *ct, uint32_t id, void *ptr, uint32_t size); GWENHYWFAR_API void GWEN_MultiCache_Type_SetDataWithParams(GWEN_MULTICACHE_TYPE *ct, uint32_t id, void *ptr, uint32_t size, uint32_t param1, uint32_t param2, uint32_t param3, uint32_t param4); GWENHYWFAR_API void GWEN_MultiCache_Type_SetDataWithParams5(GWEN_MULTICACHE_TYPE *ct, uint32_t id, void *ptr, uint32_t size, uint32_t param1, uint32_t param2, uint32_t param3, uint32_t param4, double param5); GWENHYWFAR_API void GWEN_MultiCache_Type_PurgeData(GWEN_MULTICACHE_TYPE *ct, uint32_t id); GWENHYWFAR_API void GWEN_MultiCache_Type_PurgeAll(GWEN_MULTICACHE_TYPE *ct); GWENHYWFAR_API void GWEN_MultiCache_Type_SetAttachFn(GWEN_MULTICACHE_TYPE *ct, GWEN_MULTICACHE_TYPE_ATTACH_FN fn); GWENHYWFAR_API void GWEN_MultiCache_Type_SetFreeFn(GWEN_MULTICACHE_TYPE *ct, GWEN_MULTICACHE_TYPE_FREE_FN fn); GWENHYWFAR_API void GWEN_MultiCache_Type_SetAttachObjectFn(GWEN_MULTICACHE_TYPE *ct, GWEN_MULTICACHE_TYPE_ATTACH_OBJECT_FN fn); GWENHYWFAR_API void GWEN_MultiCache_Type_SetFreeObjectFn(GWEN_MULTICACHE_TYPE *ct, GWEN_MULTICACHE_TYPE_FREE_OBJECT_FN fn); /*@}*/ /** @name Central Cache Object * * This is the central cache object which can hold multiple types of data. */ /*@{*/ GWENHYWFAR_API GWEN_MULTICACHE *GWEN_MultiCache_new(uint64_t maxSize); GWENHYWFAR_API void GWEN_MultiCache_free(GWEN_MULTICACHE *mc); GWENHYWFAR_API uint64_t GWEN_MultiCache_GetMaxSizeUsed(const GWEN_MULTICACHE *mc); /*@}*/ /*@}*/ #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/base/i18n.c0000644000175000017500000001541212416477066014205 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Fri Sep 12 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "i18n_l.h" #include #include #include #include #include #include #include #include #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_I18N # include # include #endif static GWEN_STRINGLIST *gwen_i18n__localelist=0; static char *gwen_i18n__currentlocale=0; #ifdef OS_WIN32 struct gwen_i18n_tabletype { const char *win_name; const char *nls_name; }; static struct gwen_i18n_tabletype gwen_i18n___localetable[]= { { "German_Germany", "de_DE" }, { "English_UK", "en_GB" }, { "English_US", "en_US" }, { "French_France", "fr_FR" }, { NULL, NULL } }; static const char *gwen_i18n_transwinlocale(const char *s) { char *cs; char *p; struct gwen_i18n_tabletype *tt; cs=strdup(s); /* find complete */ tt=gwen_i18n___localetable; while(tt->win_name) { if (strcasecmp(tt->win_name, cs)==0) { free(cs); return tt->nls_name; } tt++; } p=strrchr(cs, '.'); if (p) { *p=0; /* find partial string */ tt=gwen_i18n___localetable; while(tt->win_name) { if (strcasecmp(tt->win_name, cs)==0) { free(cs); return tt->nls_name; } tt++; } } p=strrchr(cs, '_'); if (p) { *p=0; /* find partial string */ tt=gwen_i18n___localetable; while(tt->win_name) { if (strcasecmp(tt->win_name, cs)==0) { free(cs); return tt->nls_name; } tt++; } } free(cs); DBG_ERROR(GWEN_LOGDOMAIN, "No translation found for WIN32 locale [%s]", s); return s; } #endif int GWEN_I18N_ModuleInit(void) { const char *localedir; GWEN_STRINGLIST *slist; gwen_i18n__localelist=GWEN_StringList_new(); slist=GWEN_PathManager_GetPaths(GWEN_PM_LIBNAME, GWEN_PM_LOCALEDIR); if (slist) { if (GWEN_StringList_Count(slist) > 0) { int rv; localedir=GWEN_StringList_FirstString(slist); rv=GWEN_I18N_BindTextDomain_Dir(PACKAGE, localedir); if (rv) { DBG_WARN(GWEN_LOGDOMAIN, "Could not bind textdomain (%d)", rv); } else { rv=GWEN_I18N_BindTextDomain_Codeset(PACKAGE, "UTF-8"); if (rv) { DBG_WARN(GWEN_LOGDOMAIN, "Could not set codeset (%d)", rv); } } /* set locale */ if (GWEN_I18N_SetLocale("")) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not set locale"); } } else { DBG_ERROR(GWEN_LOGDOMAIN, "Empty locale path list"); } GWEN_StringList_free(slist); } else { DBG_ERROR(GWEN_LOGDOMAIN, "No locale path list"); } return 0; } int GWEN_I18N_ModuleFini(void) { GWEN_StringList_free(gwen_i18n__localelist); free(gwen_i18n__currentlocale); return 0; } int GWEN_I18N_SetLocale(const char *s) { const char *realLocale; char *p; char *cs; assert(s); #ifdef HAVE_I18N realLocale=setlocale(LC_ALL, s); if (realLocale==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Unable to set locale [%s]", s); realLocale=s; } else { #ifdef OS_WIN32 const char *t; t=gwen_i18n_transwinlocale(realLocale); DBG_INFO(GWEN_LOGDOMAIN, "Real locale is [%s] (from [%s])", t, realLocale); realLocale=t; #else DBG_INFO(GWEN_LOGDOMAIN, "Real locale is [%s]", realLocale); #endif } #else realLocale=s; #endif cs=strdup(realLocale); GWEN_StringList_Clear(gwen_i18n__localelist); GWEN_StringList_AppendString(gwen_i18n__localelist, cs, 0, 1); p=strrchr(cs, '@'); if (p) { *p=0; GWEN_StringList_AppendString(gwen_i18n__localelist, cs, 0, 1); } p=strrchr(cs, '.'); if (p) { *p=0; GWEN_StringList_AppendString(gwen_i18n__localelist, cs, 0, 1); } p=strrchr(cs, '_'); if (p) { *p=0; GWEN_StringList_AppendString(gwen_i18n__localelist, cs, 0, 1); } free(cs); free(gwen_i18n__currentlocale); gwen_i18n__currentlocale=strdup(realLocale); return 0; } GWEN_STRINGLIST *GWEN_I18N_GetCurrentLocaleList(void) { return gwen_i18n__localelist; } const char *GWEN_I18N_GetCurrentLocale(void) { return gwen_i18n__currentlocale; } const char *GWEN_I18N_Translate(const char *txtdom, const char *text) { #ifdef HAVE_I18N const char *p; p=strchr(text, '|'); if (p) { const char *s; s=dgettext(txtdom, text); if (strcmp(s, text)==0) return ++p; else return s; } else return dgettext(txtdom, text); #else const char *p; p=strchr(text, '|'); if (p) return ++p; return text; #endif } int GWEN_I18N_BindTextDomain_Dir(const char *txtdom, const char *folder) { #ifdef HAVE_I18N if (NULL==bindtextdomain(txtdom, folder)) { DBG_INFO(GWEN_LOGDOMAIN, "bindtextdomain(): %s", strerror(errno)); return GWEN_ERROR_GENERIC; } return 0; #else return GWEN_ERROR_NOT_SUPPORTED; #endif } int GWEN_I18N_BindTextDomain_Codeset(const char *txtdom, const char *cs) { #ifdef HAVE_I18N if (NULL==bind_textdomain_codeset(txtdom, cs)) { DBG_INFO(GWEN_LOGDOMAIN, "bind_textdomain_codeset(): %s", strerror(errno)); return GWEN_ERROR_GENERIC; } return 0; #else return GWEN_ERROR_NOT_SUPPORTED; #endif } gwenhywfar-4.15.2beta/src/base/gwensignal.h0000644000175000017500000001306612416477066015574 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: stringlist_p.h 786 2005-07-09 13:38:17Z aquamaniac $ begin : Thu Apr 03 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_SIGNAL_H #define GWENHYWFAR_SIGNAL_H #include #include #include #ifdef __cplusplus extern "C" { #endif /** * @defgroup MOD_SIGNALSLOT Module for Signals and Slots * @ingroup MOD_BASE * @short Basic signal handling. * * This module introduces a simple signal-slot framework. * Signals have a fixed list of arguments: *
    *
  • a void* pointer
  • *
  • 1st integer argument
  • *
  • 2nd integer argument
  • *
* The actual type of the void pointer is defined by the signal and * corresponding slot(s): Gwen checks the type at runtime and refuses to * connect signals with slots which define this pointer to be of a different * type. * Any signal can be connected to any number of matching slots. * * The central object in this framework is @ref GWEN_SIGNALOBJECT. It holds * a list of signals and slots for a given object. * * */ /*@{*/ typedef struct GWEN_SIGNALOBJECT GWEN_SIGNALOBJECT; typedef struct GWEN_SIGNAL GWEN_SIGNAL; typedef struct GWEN_SLOT GWEN_SLOT; /** * This is the prototype for the slot function. If there is a problem in the * function it should return 1, otherwise 0. */ typedef int GWENHYWFAR_CB (*GWEN_SLOT_FUNCTION)(GWEN_SLOT *slot, void *userData, void *pArg1, void *pArg2, int iArg3, int iArg4); /** @name SignalObject * */ /*@{*/ GWENHYWFAR_API GWEN_SIGNALOBJECT *GWEN_SignalObject_new(void); GWENHYWFAR_API void GWEN_SignalObject_free(GWEN_SIGNALOBJECT *so); GWENHYWFAR_API GWEN_SIGNAL *GWEN_SignalObject_FindSignal(const GWEN_SIGNALOBJECT *so, const char *name, const char *typeOfArg1, const char *typeOfArg2); GWENHYWFAR_API GWEN_SLOT *GWEN_SignalObject_FindSlot(const GWEN_SIGNALOBJECT *so, const char *name, const char *typeOfArg1, const char *typeOfArg2); /** * This function removes all signals and slots for the given derived * type. This function can be used from within the FREEDATA function * of the GWEN_INHERIT framework. */ GWENHYWFAR_API void GWEN_SignalObject_RemoveForDerivedType(GWEN_SIGNALOBJECT *so, const char *derivedType); /** * @defgroup MOD_SIGNALSLOT_SIGNAL Signals * @short Signals * */ /*@{*/ GWENHYWFAR_API GWEN_SIGNAL *GWEN_Signal_new(GWEN_SIGNALOBJECT *so, const char *derivedType, const char *name, const char *typeOfArg1, const char *typeOfArg2); GWENHYWFAR_API void GWEN_Signal_free(GWEN_SIGNAL *sig); GWENHYWFAR_API GWEN_SIGNALOBJECT *GWEN_Signal_GetSignalObject(const GWEN_SIGNAL *sig); GWENHYWFAR_API int GWEN_Signal_Connect(GWEN_SIGNAL *sig, GWEN_SLOT *slot); GWENHYWFAR_API int GWEN_Signal_Disconnect(GWEN_SIGNAL *sig, GWEN_SLOT *slot); /** * This function calls the slot function of all connected slots. * If any of the slot functions called returns with code 1 then * this function will return 1, too. Otherwise 0 is returned. * This means that this function will only return 0 if every called slot * function returns 0. */ GWENHYWFAR_API int GWEN_Signal_Emit(GWEN_SIGNAL *sig, void *pArg1, void *pArg2, int iArg3, int iArg4); /*@}*/ /** * @defgroup MOD_SIGNALSLOT_SLOT Slots * @short Slots * */ /*@{*/ GWENHYWFAR_API GWEN_SLOT *GWEN_Slot_new(GWEN_SIGNALOBJECT *so, const char *derivedType, const char *name, const char *typeOfArg1, const char *typeOfArg2, GWEN_SLOT_FUNCTION fn, void *userData); GWENHYWFAR_API void GWEN_Slot_free(GWEN_SLOT *slot); GWENHYWFAR_API GWEN_SIGNALOBJECT *GWEN_Slot_GetSignalObject(const GWEN_SLOT *slot); /*@}*/ /* defgroup */ /*@}*/ /* defgroup */ #ifdef __cplusplus } /* extern C */ #endif #endif gwenhywfar-4.15.2beta/src/base/stringlist.h0000644000175000017500000001662312416477066015642 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Thu Apr 03 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_STRINGLIST_H #define GWENHYWFAR_STRINGLIST_H #include #ifdef __cplusplus extern "C" { #endif typedef enum { /** case-insensitive, i.e. using strcasecmp(3). */ GWEN_StringList_SortModeNoCase=0, /** case-sensitive, i.e. using strcmp(3). */ GWEN_StringList_SortModeCase, /** handle string list entries as integers (-> correct sorting of ASCII * coded values like "10", "1") */ GWEN_StringList_SortModeInt } GWEN_STRINGLIST_SORT_MODE; typedef struct GWEN_STRINGLISTENTRYSTRUCT GWEN_STRINGLISTENTRY; typedef struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST; GWENHYWFAR_API GWEN_STRINGLIST *GWEN_StringList_new(void); GWENHYWFAR_API GWEN_STRINGLIST *GWEN_StringList_fromTabString(const char *s, int checkDup); GWENHYWFAR_API void GWEN_StringList_free(GWEN_STRINGLIST *sl); GWENHYWFAR_API GWEN_STRINGLIST *GWEN_StringList_dup(const GWEN_STRINGLIST *sl); GWENHYWFAR_API void GWEN_StringList_Clear(GWEN_STRINGLIST *sl); /** Returns the number of elements in this list. */ GWENHYWFAR_API unsigned int GWEN_StringList_Count(const GWEN_STRINGLIST *sl); GWENHYWFAR_API GWEN_STRINGLISTENTRY *GWEN_StringListEntry_new(const char *s, int take); GWENHYWFAR_API void GWEN_StringListEntry_ReplaceString(GWEN_STRINGLISTENTRY *e, const char *s, int take); GWENHYWFAR_API void GWEN_StringListEntry_free(GWEN_STRINGLISTENTRY *sl); GWENHYWFAR_API void GWEN_StringList_AppendEntry(GWEN_STRINGLIST *sl, GWEN_STRINGLISTENTRY *se); GWENHYWFAR_API void GWEN_StringList_RemoveEntry(GWEN_STRINGLIST *sl, GWEN_STRINGLISTENTRY *se); GWENHYWFAR_API GWEN_STRINGLISTENTRY *GWEN_StringList_FirstEntry(const GWEN_STRINGLIST *sl); GWENHYWFAR_API GWEN_STRINGLISTENTRY *GWEN_StringListEntry_Next(const GWEN_STRINGLISTENTRY *se); GWENHYWFAR_API const char *GWEN_StringListEntry_Data(const GWEN_STRINGLISTENTRY *se); GWENHYWFAR_API void GWEN_StringListEntry_SetData(GWEN_STRINGLISTENTRY *se, const char *s); /** * Normally this group of functions ignores cases when comparing two strings. * You can change this behaviour here. * @param sl string list * @param i if 0 then cases are ignored */ GWENHYWFAR_API void GWEN_StringList_SetSenseCase(GWEN_STRINGLIST *sl, int i); /** * Normally this group of functions ignores reference counters on stringlist * entries when removing a string via @ref GWEN_StringList_RemoveString. * You can change this behaviour here. * @param sl string list * @param i if 0 then reference counters are honoured */ GWENHYWFAR_API void GWEN_StringList_SetIgnoreRefCount(GWEN_STRINGLIST *sl, int i); /** * Appends a string. * @return 0 if not appended, !=0 if appended * @param take if true then the StringList takes over ownership of the string * @param checkDouble if true the the string will only be appended if it * does not already exist */ GWENHYWFAR_API int GWEN_StringList_AppendString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble); /** * Inserts a string. * @return 0 if not inserted, !=0 if inserted * @param take if true then the StringList takes over ownership of the string * @param checkDouble if true the the string will only be appended if it * does not already exist */ GWENHYWFAR_API int GWEN_StringList_InsertString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble); /** * Removes a given string from the stringlist. * @return 0 if not found, !=0 if found and removed */ GWENHYWFAR_API int GWEN_StringList_RemoveString(GWEN_STRINGLIST *sl, const char *s); /** * Checks whether the given string already exists within in the * string list. * @return !=0 if found, 0 otherwise */ GWENHYWFAR_API int GWEN_StringList_HasString(const GWEN_STRINGLIST *sl, const char *s); /** * Returns the position of the given string within the stringlist. * * @return position, -1 if not found */ GWENHYWFAR_API int GWEN_StringList_GetStringPos(const GWEN_STRINGLIST *sl, const char *s); /** * Returns the first stringlist entry which contains the given string * @return string list entry containing the given string, NULL otherwise */ GWENHYWFAR_API GWEN_STRINGLISTENTRY *GWEN_StringList_FindStringEntry(const GWEN_STRINGLIST *sl, const char *s); /** Traverses the list, calling the callback function 'func' on * each list element. Traversal will stop when 'func' returns a * non-NULL value, and the routine will return with that * value. Otherwise the routine will return NULL. * @param l The list to traverse. * @param func The function to be called with each list element. * @param user_data A pointer passed on to the function 'func'. * @return The non-NULL pointer returned by 'func' as soon as it * returns one. Otherwise (i.e. 'func' always returns NULL) * returns NULL. */ GWENHYWFAR_API void *GWEN_StringList_ForEach(const GWEN_STRINGLIST *l, void *(*func)(const char *s, void *u), void *user_data); /** Returns the first string in this list. */ GWENHYWFAR_API const char *GWEN_StringList_FirstString(const GWEN_STRINGLIST *l); GWENHYWFAR_API const char *GWEN_StringList_StringAt(const GWEN_STRINGLIST *l, int idx); /** Sorts this list. Internally this uses qsort(3), so the sorting * should be reasonably fast even for large lists. * * @param l The list to sort. * * @param ascending If non-zero, the list is sorted ascending, * i.e. smallest string first, according to strcmp(3) rules. If zero, * the list is sorted descending. * * @param sortMode See @ref GWEN_StringList_SortModeNoCase and following */ GWENHYWFAR_API void GWEN_StringList_Sort(GWEN_STRINGLIST *l, int ascending, GWEN_STRINGLIST_SORT_MODE sortMode); GWENHYWFAR_API GWEN_STRINGLIST *GWEN_StringList_fromString(const char *str, const char *delimiters, int checkDouble); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/base/idlist.c0000644000175000017500000002437012416477066014721 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "idlist_p.h" #include #include #include #include GWEN_LIST_FUNCTIONS(GWEN_IDTABLE, GWEN_IdTable) /* No trailing semicolon here because this is a macro call */ GWEN_IDTABLE *GWEN_IdTable_new(void) { GWEN_IDTABLE *idt; GWEN_NEW_OBJECT(GWEN_IDTABLE, idt); GWEN_LIST_INIT(GWEN_IDTABLE, idt); idt->freeEntries=GWEN_IDTABLE_MAXENTRIES; return idt; } void GWEN_IdTable_free(GWEN_IDTABLE *idt) { if (idt) { GWEN_LIST_FINI(GWEN_IDTABLE, idt); GWEN_FREE_OBJECT(idt); } } int GWEN_IdTable_AddId(GWEN_IDTABLE *idt, uint32_t id) { unsigned int i; assert(idt); assert(id); for (i=0; ientries[i]==0) { idt->entries[i]=id; idt->freeEntries--; return 0; } } /* for */ return -1; } int GWEN_IdTable_HasId(const GWEN_IDTABLE *idt, uint32_t id) { unsigned int i; assert(idt); assert(id); for (i=0; ientries[i]==id) { return 1; } } /* for */ return 0; } int GWEN_IdTable_DelId(GWEN_IDTABLE *idt, uint32_t id) { unsigned int i; assert(idt); assert(id); for (i=0; ientries[i]==id) { idt->entries[i]=0; idt->freeEntries++; return 0; } } /* for */ return -1; } int GWEN_IdTable_IsEmpty(const GWEN_IDTABLE *idt) { assert(idt); return GWEN_IDTABLE_MAXENTRIES==idt->freeEntries; } int GWEN_IdTable_IsFull(const GWEN_IDTABLE *idt) { assert(idt); return idt->freeEntries==0; } unsigned int GWEN_IdTable_GetCount(const GWEN_IDTABLE *idt) { assert(idt); return GWEN_IDTABLE_MAXENTRIES-idt->freeEntries; } uint32_t GWEN_IdTable_GetFirstId(GWEN_IDTABLE *idt) { unsigned int i; assert(idt); idt->current=0; for (i=0; ientries[i]!=0) { idt->current=i; return idt->entries[i]; } } /* for */ return 0; } uint32_t GWEN_IdTable_GetNextId(GWEN_IDTABLE *idt) { unsigned int i; assert(idt); for (i=idt->current+1; ientries[i]!=0) { idt->current=i; return idt->entries[i]; } } /* for */ idt->current=GWEN_IDTABLE_MAXENTRIES; return 0; } uint32_t GWEN_IdTable_GetFirstId2(const GWEN_IDTABLE *idt, uint32_t *tabIdx) { unsigned int i; assert(idt); for (i=0; ientries[i]!=0) { *tabIdx=i; return idt->entries[i]; } } /* for */ return 0; } uint32_t GWEN_IdTable_GetNextId2(const GWEN_IDTABLE *idt, uint32_t *tabIdx) { unsigned int i; assert(idt); for (i=(*tabIdx)+1; ientries[i]!=0) { *tabIdx=i; return idt->entries[i]; } } /* for */ return 0; } GWEN_IDLIST *GWEN_IdList_new(void) { GWEN_IDLIST *idl; GWEN_NEW_OBJECT(GWEN_IDLIST, idl); idl->idTables=GWEN_IdTable_List_new(); return idl; } void GWEN_IdList_free(GWEN_IDLIST *idl) { if (idl) { GWEN_IdTable_List_free(idl->idTables); GWEN_FREE_OBJECT(idl); } } int GWEN_IdList_AddId(GWEN_IDLIST *idl, uint32_t id) { GWEN_IDTABLE *idt; assert(idl); idl->current=0; idt=GWEN_IdTable_List_First(idl->idTables); /* find free table */ while(idt) { if (!GWEN_IdTable_IsFull(idt)) break; idt=GWEN_IdTable_List_Next(idt); } /* while */ if (!idt) { idt=GWEN_IdTable_new(); GWEN_IdTable_List_Add(idt, idl->idTables);; } GWEN_IdTable_AddId(idt, id); idl->entryCount++; return 0; } int GWEN_IdList_DelId(GWEN_IDLIST *idl, uint32_t id) { GWEN_IDTABLE *idt; assert(idl); idl->current=0; idt=GWEN_IdTable_List_First(idl->idTables); /* find table */ while(idt) { if (!GWEN_IdTable_DelId(idt, id)) { /* found a table which had this id */ GWEN_IdList_Clean(idl); idl->entryCount--; return 0; } idt=GWEN_IdTable_List_Next(idt); } /* while */ return -1; } int GWEN_IdList_HasId(const GWEN_IDLIST *idl, uint32_t id) { GWEN_IDTABLE *idt; assert(idl); idt=GWEN_IdTable_List_First(idl->idTables); /* find free table */ while(idt) { if (GWEN_IdTable_HasId(idt, id)) return 1; idt=GWEN_IdTable_List_Next(idt); } /* while */ return 0; } void GWEN_IdList_Clean(GWEN_IDLIST *idl) { GWEN_IDTABLE *idt; assert(idl); idl->current=0; idt=GWEN_IdTable_List_First(idl->idTables); /* find free table */ while(idt) { GWEN_IDTABLE *next; next=GWEN_IdTable_List_Next(idt); if (GWEN_IdTable_IsEmpty(idt)) { GWEN_IdTable_List_Del(idt); GWEN_IdTable_free(idt); } idt=next; } /* while */ } uint32_t GWEN_IdList_GetFirstId(GWEN_IDLIST *idl) { GWEN_IDTABLE *idt; assert(idl); idt=GWEN_IdTable_List_First(idl->idTables); /* find free table */ while(idt) { GWEN_IDTABLE *next; uint32_t id; next=GWEN_IdTable_List_Next(idt); id=GWEN_IdTable_GetFirstId(idt); if (id) { idl->current=idt; return id; } idt=next; } /* while */ return 0; } uint32_t GWEN_IdList_GetNextId(GWEN_IDLIST *idl) { GWEN_IDTABLE *idt; uint32_t id; assert(idl); idt=idl->current; if (idt) { id=GWEN_IdTable_GetNextId(idt); if (id) { idl->current=idt; return id; } } else { idl->current=0; return 0; } idt=GWEN_IdTable_List_Next(idt); while (idt) { id=GWEN_IdTable_GetFirstId(idt); if (id) { idl->current=idt; return id; } idt=GWEN_IdTable_List_Next(idt); } /* while */ idl->current=0; return 0; } int GWEN_IdList_Sort(GWEN_IDLIST *idl) { GWEN_IDTABLE *idt; unsigned int cnt; uint32_t *ptr; unsigned int i; assert(idl); /* count ids */ idt=GWEN_IdTable_List_First(idl->idTables); cnt=0; while(idt) { GWEN_IDTABLE *next; next=GWEN_IdTable_List_Next(idt); cnt+=GWEN_IdTable_GetCount(idt); idt=next; } /* while */ if (!cnt) return 0; /* move ids to a temporary list */ ptr=(uint32_t*)malloc(sizeof(uint32_t)*cnt); assert(ptr); for (i=0; iidTables); idl->current=0; /* sort temporary list */ while(1) { int rpl; rpl=0; for (i=0; i<(cnt-1); i++) { if (ptr[i]>ptr[i+1]) { uint32_t id; id=ptr[i]; ptr[i]=ptr[i+1]; ptr[i+1]=id; rpl=1; } } /* for */ if (!rpl) break; } /* while */ /* move back from temporary list */ for (i=0; iidTables); idl->entryCount=0; idl->current=0; } GWEN_IDLIST *GWEN_IdList_dup(const GWEN_IDLIST *idl) { GWEN_IDLIST *nidl; GWEN_IDTABLE *idt; assert(idl); nidl=GWEN_IdList_new(); idt=GWEN_IdTable_List_First(idl->idTables); while(idt) { if (idt->freeEntries!=GWEN_IDTABLE_MAXENTRIES) { int i; for (i=0; ientries[i]!=0) GWEN_IdList_AddId(nidl, idt->entries[i]); } } idt=GWEN_IdTable_List_Next(idt); } return nidl; } uint32_t GWEN_IdList_GetFirstId2(const GWEN_IDLIST *idl, uint32_t *pos) { GWEN_IDTABLE *idt; int tabNum=0; assert(idl); idt=GWEN_IdTable_List_First(idl->idTables); /* find free table */ while(idt) { GWEN_IDTABLE *next; uint32_t id; uint32_t tabIdx; next=GWEN_IdTable_List_Next(idt); id=GWEN_IdTable_GetFirstId2(idt, &tabIdx); if (id) { *pos=(tabNum*GWEN_IDTABLE_MAXENTRIES)+tabIdx; return id; } tabNum++; idt=next; } /* while */ return 0; } uint32_t GWEN_IdList_GetNextId2(const GWEN_IDLIST *idl, uint32_t *pos) { GWEN_IDTABLE *idt; int i; int tabNum; uint32_t tabIdx; assert(idl); tabNum=(*pos)/GWEN_IDTABLE_MAXENTRIES; tabIdx=(*pos)%GWEN_IDTABLE_MAXENTRIES; /* seek table */ i=tabNum; idt=GWEN_IdTable_List_First(idl->idTables); while(i--) idt=GWEN_IdTable_List_Next(idt); assert(idt); while(idt) { GWEN_IDTABLE *next; uint32_t id; next=GWEN_IdTable_List_Next(idt); id=GWEN_IdTable_GetNextId2(idt, &tabIdx); if (id) { *pos=(tabNum*GWEN_IDTABLE_MAXENTRIES)+tabIdx; return id; } tabNum++; idt=next; } /* while */ return 0; } gwenhywfar-4.15.2beta/src/base/stringlist_p.h0000644000175000017500000000471612364015347016151 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Thu Apr 03 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_STRINGLIST_P_H #define GWENHYWFAR_STRINGLIST_P_H #include #include #include struct GWEN_STRINGLISTENTRYSTRUCT { GWEN_STRINGLISTENTRY *next; const char *data; uint32_t refCount; }; struct GWEN_STRINGLISTSTRUCT { GWEN_STRINGLISTENTRY *first; unsigned int count; int senseCase; int ignoreRefCount; }; static int GWEN_StringList__compar_asc_nocase(const void *a, const void *b); static int GWEN_StringList__compar_desc_nocase(const void *a, const void *b); static int GWEN_StringList__compar_asc_case(const void *a, const void *b); static int GWEN_StringList__compar_desc_case(const void *a, const void *b); static int GWEN_StringList__compar_asc_int(const void *a, const void *b); static int GWEN_StringList__compar_desc_int(const void *a, const void *b); #endif gwenhywfar-4.15.2beta/src/base/tree.h0000644000175000017500000004235512416477066014400 00000000000000/*************************************************************************** begin : Fri Jan 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #include #include #include #ifndef GWEN_DUMMY_EMPTY_ARG /** Necessary for MSVC compiler because it does not accept a left-out macro argument. */ # define GWEN_DUMMY_EMPTY_ARG #endif #ifndef GWEN_TREE_H #define GWEN_TREE_H #ifdef __cplusplus extern "C" { #endif /** @defgroup GWEN_MACRO_TREE Macros For Typesafe Tree Handling * * The macros of this group facilitates typesafe use of trees. * *

* Let's assume you have a structure type called MYSTRUCT and you want * to manage lists of them. Let's further assume that you want the * functions dealing with that struct have prefixes like MyStruct (as in * @b MyStruct_new) *

* The header file would look like this: * * @code * * / * mystruct.h * / * * #ifndef MYSTRUCT_H * #define MYSTRUCT_H * * typedef struct MYSTRUCT MYSTRUCT; * * GWEN_TREE_FUNCTION_DEFS(MYSTRUCT, MyStruct); * * struct MYSTRUCT { * GWEN_TREE_ELEMENT(MYSTRUCT); * int myData; * } * * * MYSTRUCT *MyStruct_new(int myData); * void MyStruct_free(MYSTRUCT *myStruct); * * #endif * @endcode *

* This defines all necessary data and function prototypes needed for * list management. *

* *

* The code file would look quite similar to the following: *

* * @code * * / * mystruct.c * / * * GWEN_TREE_FUNCTIONS(MYSTRUCT, MyStruct) * * MYSTRUCT *MyStruct_new(int myData) { * MYSTRUCT *pMyStruct; * * pMyStruct=(MYSTRUCT*)malloc(sizeof(MYSTRUCT)); * memset(pMyStruct, 0, sizeof(MYSTRUCT)); * * GWEN_TREE_INIT(MYSTRUCT, pMyStruct) * * pMyStruct->myData=myData; * return pMyStruct; * } * * void MyStruct_free(MYSTRUCT *pMyStruct) { * if (pMyStruct) { * pMyStruct->myData=0; * * GWEN_TREE_FINI(MYSTRUCT, pMyStruct) * * free(pMyStruct); * } * } * * @endcode * Please note the three macros used in the code file: *
    *
  • @ref GWEN_TREE_FUNCTIONS creates the functions for the list * management
  • *
  • @ref GWEN_TREE_INIT initializes the list data inside your * struct to defined values
  • *
  • @ref GWEN_TREE_FINI frees all ressources occupied by the list * management code. Please note that this macro should be the last * statement inside the destructor function before @b free()
  • *
* *

Note: When writing these macro code lines, the original ISO * C89 standard for the C language does not allow terminating the * macro statement with a semicolon ';'. Any recent compiler will * probably silently ignore such an extra ';', but you should be * aware that this can cause problems once one of your users tries * to compile this with a different compiler. Therefore these code * lines should end directly with the closing parentheses.

* *

* The list management code assumes that there is a function called * (in this example) @b MyStruct_free() (or generally: TYPEPREFIX_free). * This is used when destroying a list of MYSTRUCT elements. In this case * all elements still enlisted are destroyed upon destruction of the list. *

*/ /*@{*/ /** @name Internal Functions * * All functions and structs within this group should be considered * internal. They just implement the functionality behind the typesafe list * macros (see @ref GWEN_TREE_FUNCTION_LIB_DEFS and following). */ /*@{*/ typedef struct GWEN_TREE GWEN_TREE; typedef struct GWEN_TREE_ELEMENT GWEN_TREE_ELEMENT; /** Allocate (create) a new empty list. */ GWENHYWFAR_API GWEN_TREE *GWEN_Tree_new(void); /** Free (delete) an existing list. The list elements are * untouched by this function; they need to be freed * beforehand. */ GWENHYWFAR_API void GWEN_Tree_free(GWEN_TREE *l); /** Returns the number of elements in this list. This value is * cached in the list structure, so this function is a cheap * function. */ GWENHYWFAR_API int GWEN_Tree_GetCount(const GWEN_TREE *l); /** Adds (appends) a toplevel tree element. (This * operation is also called "append" or "push_back" elsewhere.) */ GWENHYWFAR_API void GWEN_Tree_Add(GWEN_TREE *l, GWEN_TREE_ELEMENT *el); /** Inserts (prepends) a toplevel tree element at the beginning of the * list. (This operation is also called "prepend" or "push_front" * elsewhere.) */ GWENHYWFAR_API void GWEN_Tree_Insert(GWEN_TREE *l, GWEN_TREE_ELEMENT *el); /** Deletes (removes) a tree element from the tree it used to * belong to. The tree element is not free'd or anything, it is * only removed from the list it used to belong to. (This * operation is also called "remove" or "unlink" elsewhere.) */ GWENHYWFAR_API void GWEN_Tree_Del(GWEN_TREE_ELEMENT *el); /** Adds (appends) the second list to the end of the first * list. (This operation is also called "append" or "concatenate" * elsewhere.) * The second list will be empty upon return. */ GWENHYWFAR_API void GWEN_Tree_AddList(GWEN_TREE *dest, GWEN_TREE *l); /** Add a child below the given element. */ GWENHYWFAR_API void GWEN_Tree_AddChild(GWEN_TREE_ELEMENT *where, GWEN_TREE_ELEMENT *el); /** Insert a child below the given element. */ GWENHYWFAR_API void GWEN_Tree_InsertChild(GWEN_TREE_ELEMENT *where, GWEN_TREE_ELEMENT *el); /** Returns the data pointer of the first list element. */ GWENHYWFAR_API void *GWEN_Tree_GetFirst(const GWEN_TREE *l); /** Returns the data pointer of the last list element. */ GWENHYWFAR_API void *GWEN_Tree_GetLast(const GWEN_TREE *l); /** Allocate (create) a new list element structure. */ GWENHYWFAR_API GWEN_TREE_ELEMENT *GWEN_TreeElement_new(void *d); /** Free (delete) a list element structure. */ GWENHYWFAR_API void GWEN_TreeElement_free(GWEN_TREE_ELEMENT *el); /** Returns the data pointer of the list element that is the * previous (predecessor) to the given one in its list. If there * is no such prepending list element, returns NULL. */ GWENHYWFAR_API void *GWEN_TreeElement_GetPrevious(const GWEN_TREE_ELEMENT *el); /** Returns the data pointer of the list element that is the next * one (successor) to the given one in its list. If there is no * such prepending list element, returns NULL. */ GWENHYWFAR_API void *GWEN_TreeElement_GetNext(const GWEN_TREE_ELEMENT *el); /** Returns the element which is logically below the given one. * The order of search is this: *
    *
  • first child of the given element
  • *
  • next neighbour of the given element
  • *
  • loop for every parent: check next neighbour of the given element's parent (if any)
  • *
*/ GWENHYWFAR_API void *GWEN_TreeElement_GetBelow(const GWEN_TREE_ELEMENT *el); /** Returns the first child of the given element. */ GWENHYWFAR_API void *GWEN_TreeElement_GetFirstChild(const GWEN_TREE_ELEMENT *el); /** Returns the last child of the given element. */ GWENHYWFAR_API void *GWEN_TreeElement_GetLastChild(const GWEN_TREE_ELEMENT *el); GWENHYWFAR_API void *GWEN_TreeElement_GetParent(const GWEN_TREE_ELEMENT *el); /** Returns the number of children of the given element */ GWENHYWFAR_API uint32_t GWEN_TreeElement_GetChildrenCount(const GWEN_TREE_ELEMENT *el); /*@}*/ /** @name Typesafe Macros * */ /*@{*/ /** * Use this inside the declaration of a struct for which you want to create * lists. */ #define GWEN_TREE_ELEMENT(t) \ GWEN_TREE_ELEMENT *_tree_element; /** * Use this macro in your public header files to export only list functions * which do not modify a list. This allows your code to return lists which can * not be modified by callers. It also prevents callers from creating their * own lists (this is sometimes needed). */ #define GWEN_TREE_FUNCTION_LIB_DEFS_CONST(t, pr, decl) \ typedef GWEN_TREE t##_TREE; \ \ decl t* pr##_Tree_GetFirst(const t##_TREE *l); \ decl t* pr##_Tree_GetLast(const t##_TREE *l); \ decl t* pr##_Tree_GetNext(const t *element); \ decl t* pr##_Tree_GetPrevious(const t *element); \ decl t* pr##_Tree_GetBelow(const t *element); \ decl uint32_t pr##_Tree_GetCount(const t##_TREE *l); \ decl int pr##_Tree_HasElement(const t##_TREE *l, const t *element); \ decl t* pr##_Tree_GetFirstChild(const t *element); \ decl t* pr##_Tree_GetLastChild(const t *element); \ decl uint32_t pr##_Tree_GetChildrenCount(const t *element); \ decl t* pr##_Tree_GetParent(const t *element); #define GWEN_TREE_FUNCTION_LIB_DEFS_NOCONST(t, pr, decl) \ typedef GWEN_TREE_ELEMENT t##_TREE_ELEMENT; \ \ decl void pr##_Tree_Clear(t##_TREE *l); \ decl t##_TREE* pr##_Tree_new(); \ decl void pr##_Tree_free(t##_TREE *l); \ decl void pr##_Tree_AddList(t##_TREE *dst, t##_TREE *l); \ decl void pr##_Tree_Add(t##_TREE *list, t *element); \ decl void pr##_Tree_Insert(t##_TREE *list, t *element); \ decl void pr##_Tree_Del(t *element); \ \ decl void pr##_Tree_AddChild(t *where, t *element); \ decl void pr##_Tree_InsertChild(t *where, t *element); \ \ decl int pr##_Tree_HasChildElement(const t *who, const t *element); \ decl void pr##_Tree_ClearChildren(t *element); \ #define GWEN_TREE_FUNCTION_DEFS_CONST(t, pr) \ GWEN_TREE_FUNCTION_LIB_DEFS_CONST(t, pr, GWEN_DUMMY_EMPTY_ARG) #define GWEN_TREE_FUNCTION_DEFS_NOCONST(t, pr) \ GWEN_TREE_FUNCTION_LIB_DEFS_NOCONST(t, pr, GWEN_DUMMY_EMPTY_ARG) /** * Use this in public header files to define some prototypes for list * functions. * Let's assume the type of your list elements is "MYTYPE" and you want to * use the prefix "MyType_" for the list functions. * The following function prototypes will then be created: *
    *
  • * void MyType_Tree_Add(MYTYPE *element, MYTYPE_TREE *list);
    * Adds (appends) a MYTYPE struct at the end of the given * list. (We apologize for the unusual argument order here.) *
  • *
  • * void MyType_Tree_Del(MYTYPE *element);
    * Removes a MyType struct from the list it is enlisted to. *
  • *
  • * MYTYPE *MyType_Tree_First(MYTYPE *element);
    * Returns the first element of the given list. *
  • *
  • * MYTYPE* MyType_Tree_Next(const MYTYPE *element);
    * Returns the next list element to the given one (the * successor) in its list. *
  • *
  • * MYTYPE* MyType_Tree_Previous(const MYTYPE *element);
    * Returns the previous list element to the given one (the * predecessor) in its list. *
  • *
  • * void MyType_Tree_Clear(MYTYPE *element);
    * Frees all entries of the given list. * This function assumes that there is a function Mytype_free(). *
  • *
  • * MYTYPE_TREE *MyType_Tree_new();
    * Creates a new list of elements of MYTYPE type. *
  • *
  • * void MyType_Tree_free(MYTYPE_TREE *l);
    * Clears and frees a list of elements of MYTYPE type. * All objects inside the list are freed. *
  • *
* */ #define GWEN_TREE_FUNCTION_LIB_DEFS(t, pr, decl) \ GWEN_TREE_FUNCTION_LIB_DEFS_CONST(t, pr, decl) \ GWEN_TREE_FUNCTION_LIB_DEFS_NOCONST(t, pr, decl) /** * This macro should be used in applications, not in libraries. In * libraries please use the macro @ref GWEN_TREE_FUNCTION_LIB_DEFS. */ #define GWEN_TREE_FUNCTION_DEFS(t, pr) \ GWEN_TREE_FUNCTION_LIB_DEFS(t, pr, GWEN_DUMMY_EMPTY_ARG) /** * Use this inside your code files (*.c). * Actually implements the functions for which the prototypes have been * defined via @ref GWEN_TREE_FUNCTION_DEFS. */ #define GWEN_TREE_FUNCTIONS(t, pr) \ \ void pr##_Tree_Add(t##_TREE *l, t *element) { \ assert(element); \ assert(element->_tree_element);\ GWEN_Tree_Add(l, element->_tree_element); \ } \ \ void pr##_Tree_AddList(t##_TREE *dst, t##_TREE *l) { \ GWEN_Tree_AddList(dst, l); \ } \ \ void pr##_Tree_Insert(t##_TREE *l, t *element) { \ assert(element); \ assert(element->_tree_element);\ GWEN_Tree_Insert(l, element->_tree_element); \ } \ \ void pr##_Tree_Del(t *element){ \ assert(element); \ assert(element->_tree_element);\ GWEN_Tree_Del(element->_tree_element); \ }\ \ t* pr##_Tree_GetFirst(const t##_TREE *l) { \ if (l) return (t*)GWEN_Tree_GetFirst(l);\ else return 0; \ } \ \ t* pr##_Tree_GetLast(const t##_TREE *l) { \ if (l) return (t*) GWEN_Tree_GetLast(l);\ else return 0; \ } \ \ void pr##_Tree_Clear(t##_TREE *l) { \ t* el; \ while( (el=GWEN_Tree_GetFirst(l)) ) {\ pr##_Tree_Del(el);\ pr##_Tree_ClearChildren(el); \ pr##_free(el);\ } /* while */ \ } \ \ int pr##_Tree_HasElement(const t##_TREE *l, const t *element) { \ const t* el; \ el=(t*)GWEN_Tree_GetFirst(l); \ while(el) {\ if (el==element) \ return 1; \ el=(const t*)GWEN_TreeElement_GetBelow(el->_tree_element); \ } /* while */ \ return 0; \ } \ \ t##_TREE* pr##_Tree_new(){\ return (t##_TREE*)GWEN_Tree_new(); \ }\ \ void pr##_Tree_free(t##_TREE *l) {\ if (l) { \ pr##_Tree_Clear(l);\ GWEN_Tree_free(l); \ }\ } \ \ t* pr##_Tree_GetNext(const t *element) { \ assert(element); \ assert(element->_tree_element);\ return (t*)GWEN_TreeElement_GetNext(element->_tree_element);\ } \ \ t* pr##_Tree_GetPrevious(const t *element) { \ assert(element); \ assert(element->_tree_element);\ return (t*)GWEN_TreeElement_GetPrevious(element->_tree_element);\ } \ \ t* pr##_Tree_GetBelow(const t *element) { \ assert(element); \ assert(element->_tree_element);\ return (t*)GWEN_TreeElement_GetBelow(element->_tree_element);\ } \ \ uint32_t pr##_Tree_GetCount(const t##_TREE *l){\ return GWEN_Tree_GetCount(l);\ } \ \ int pr##_Tree_HasChildElement(const t *who, const t *element) { \ const t* el; \ el=(const t*)GWEN_TreeElement_GetFirstChild(who->_tree_element); \ while(el) {\ if (el==element) \ return 1; \ el=(const t*)GWEN_TreeElement_GetNext(el->_tree_element); \ } /* while */ \ return 0; \ } \ \ void pr##_Tree_AddChild(t *where, t *element) { \ assert(where); \ assert(where->_tree_element);\ assert(element); \ assert(element->_tree_element);\ GWEN_Tree_AddChild(where->_tree_element, element->_tree_element); \ } \ \ void pr##_Tree_InsertChild(t *where, t *element) { \ assert(where); \ assert(where->_tree_element);\ assert(element); \ assert(element->_tree_element);\ GWEN_Tree_InsertChild(where->_tree_element, element->_tree_element); \ } \ \ void pr##_Tree_ClearChildren(t *element) { \ t* c; \ while( (c=GWEN_TreeElement_GetFirstChild(element->_tree_element)) ) {\ pr##_Tree_ClearChildren(c);\ pr##_Tree_Del(c);\ pr##_free(c);\ } /* while */ \ } \ \ t* pr##_Tree_GetFirstChild(const t *element) { \ assert(element); \ assert(element->_tree_element);\ return (t*)GWEN_TreeElement_GetFirstChild(element->_tree_element);\ } \ \ t* pr##_Tree_GetLastChild(const t *element) { \ assert(element); \ assert(element->_tree_element);\ return (t*)GWEN_TreeElement_GetLastChild(element->_tree_element);\ } \ \ uint32_t pr##_Tree_GetChildrenCount(const t *element){\ return GWEN_TreeElement_GetChildrenCount(element->_tree_element);\ } \ \ t* pr##_Tree_GetParent(const t *element) { \ assert(element); \ assert(element->_tree_element);\ return (t*)GWEN_TreeElement_GetParent(element->_tree_element);\ } \ \ /** * Use this in your code file (*.c) inside the init code for the struct * you want to use in lists (in GWEN these are the functions which end with * "_new". */ #define GWEN_TREE_INIT(t, element) \ element->_tree_element=GWEN_TreeElement_new(element); /** * Use this in your code file (*.c) inside the fini code for the struct * you want to use in lists (in GWEN these are the functions which end with * "_free". */ #define GWEN_TREE_FINI(t, element) \ if (element && element->_tree_element) { \ GWEN_TreeElement_free(element->_tree_element); \ element->_tree_element=0; \ } /*@}*/ /*@}*/ /* defgroup */ #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/base/idlist64_p.h0000644000175000017500000000551112364015347015403 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: idlist_p.h 1102 2006-12-30 19:39:37Z martin $ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_IDLIST64_P_H #define GWENHYWFAR_IDLIST64_P_H #include #include #include #define GWEN_IDTABLE64_MAXENTRIES 32 #define GWEN_IDLIST64_STEP 64 typedef struct GWEN_IDTABLE64 GWEN_IDTABLE64; struct GWEN_IDTABLE64 { uint64_t freeEntries; uint64_t entries[GWEN_IDTABLE64_MAXENTRIES]; uint64_t current; uint32_t refCount; }; static GWEN_IDTABLE64 *GWEN_IdTable64_new(); static void GWEN_IdTable64_free(GWEN_IDTABLE64 *idt); /*static void GWEN_IdTable64_Attach(GWEN_IDTABLE64 *idt);*/ static uint64_t GWEN_IdList64__GetFirstId(const GWEN_IDLIST64 *idl, uint64_t *pos); static uint64_t GWEN_IdList64__GetNextId(const GWEN_IDLIST64 *idl, uint64_t *pos); static void GWEN_IdList64_AddTable(GWEN_IDLIST64 *idl, GWEN_IDTABLE64 *idt); static void GWEN_IdList64_Clean(GWEN_IDLIST64 *idl); struct GWEN_IDLIST64 { uint32_t refCount; uint64_t entryCount; GWEN_IDTABLE64 **pIdTablePointers; uint32_t idTableCount; uint32_t lastTableIdx; uint64_t nextIdx; }; struct GWEN_IDLIST64_ITERATOR { GWEN_IDLIST64 *list; uint64_t nextIndex; }; #endif /* GWENHYWFAR_IDLIST64_P_H */ gwenhywfar-4.15.2beta/src/base/bindata.h0000644000175000017500000000347412364015347015032 00000000000000/*************************************************************************** begin : Fri Aug 16 2013 copyright : (C) 2013 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_BINDATA_H #define GWENHYWFAR_BINDATA_H #include #include #ifdef __cplusplus extern "C" { #endif typedef struct { uint8_t *pointer; uint64_t length; } GWEN_BINDATA; #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/base/memcache_p.h0000644000175000017500000000522712416477066015517 00000000000000/*************************************************************************** begin : Mon Jul 14 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_MEMCACHE_P_H #define GWENHYWFAR_MEMCACHE_P_H #include #include #include GWEN_IDMAP_FUNCTION_DEFS(GWEN_MEMCACHE_ENTRY, GWEN_MemCacheEntry) struct GWEN_MEMCACHE_ENTRY { GWEN_MEMCACHE *memCache; uint32_t id; int useCounter; time_t unusedSince; void *dataPtr; size_t dataLen; int isValid; }; GWEN_MEMCACHE_ENTRY *GWEN_MemCacheEntry_new(GWEN_MEMCACHE *memCache, uint32_t id, void *dataPtr, size_t dataLen); int GWEN_MemCacheEntry_GetUseCounter(const GWEN_MEMCACHE_ENTRY *me); time_t GWEN_MemCacheEntry_GetUnusedSince(GWEN_MEMCACHE_ENTRY *me); void GWEN_MemCacheEntry_SetIsValid(GWEN_MEMCACHE_ENTRY *me, int b); struct GWEN_MEMCACHE { GWEN_MEMCACHE_ENTRY_IDMAP *idMap; size_t maxCacheMemory; uint32_t maxCacheEntries; size_t currentCacheMemory; uint32_t currentCacheEntries; GWEN_MUTEX *mutex; }; int GWEN_MemCache_Lock(GWEN_MEMCACHE *mc); int GWEN_MemCache_Unlock(GWEN_MEMCACHE *mc); int GWEN_MemCache__MakeRoom(GWEN_MEMCACHE *mc, size_t neededSize); #endif gwenhywfar-4.15.2beta/src/base/multicache_p.h0000644000175000017500000001171612501326172016055 00000000000000/*************************************************************************** begin : Wed May 08 2013 copyright : (C) 2013 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_MULTICACHE_P_H #define GWENHYWFAR_MULTICACHE_P_H #include #include #include #include typedef struct GWEN_MULTICACHE_ENTRY GWEN_MULTICACHE_ENTRY; GWEN_LIST_FUNCTION_DEFS(GWEN_MULTICACHE_ENTRY, GWEN_MultiCache_Entry); GWEN_IDMAP_FUNCTION_DEFS(GWEN_MULTICACHE_ENTRY, GWEN_MultiCache_Entry); GWEN_LIST_FUNCTION_DEFS(GWEN_MULTICACHE_TYPE, GWEN_MultiCache_Type); struct GWEN_MULTICACHE_ENTRY { GWEN_LIST_ELEMENT(GWEN_MULTICACHE_ENTRY); GWEN_MULTICACHE_TYPE *cacheType; uint32_t id; uint32_t dataSize; void *dataPtr; uint32_t param1; uint32_t param2; uint32_t param3; uint32_t param4; double param5; }; static GWEN_MULTICACHE_ENTRY *GWEN_MultiCache_Entry_new(GWEN_MULTICACHE_TYPE *ct, uint32_t id, void *p, uint32_t i); static void GWEN_MultiCache_Entry_free(GWEN_MULTICACHE_ENTRY *e); static uint32_t GWEN_MultiCache_Entry_GetId(const GWEN_MULTICACHE_ENTRY *e); static uint32_t GWEN_MultiCache_Entry_GetDataSize(const GWEN_MULTICACHE_ENTRY *e); static void *GWEN_MultiCache_Entry_GetDataPtr(const GWEN_MULTICACHE_ENTRY *e); static GWEN_MULTICACHE_TYPE *GWEN_MultiCache_Entry_GetCacheType(const GWEN_MULTICACHE_ENTRY *e); static uint32_t GWEN_MultiCache_Entry_GetParam1(const GWEN_MULTICACHE_ENTRY *e); static void GWEN_MultiCache_Entry_SetParam1(GWEN_MULTICACHE_ENTRY *e, uint32_t i); static uint32_t GWEN_MultiCache_Entry_GetParam2(const GWEN_MULTICACHE_ENTRY *e); static void GWEN_MultiCache_Entry_SetParam2(GWEN_MULTICACHE_ENTRY *e, uint32_t i); static uint32_t GWEN_MultiCache_Entry_GetParam3(const GWEN_MULTICACHE_ENTRY *e); static void GWEN_MultiCache_Entry_SetParam3(GWEN_MULTICACHE_ENTRY *e, uint32_t i); static uint32_t GWEN_MultiCache_Entry_GetParam4(const GWEN_MULTICACHE_ENTRY *e); static void GWEN_MultiCache_Entry_SetParam4(GWEN_MULTICACHE_ENTRY *e, uint32_t i); static double GWEN_MultiCache_Entry_GetParam5(const GWEN_MULTICACHE_ENTRY *e); static void GWEN_MultiCache_Entry_SetParam5(GWEN_MULTICACHE_ENTRY *e, double d); struct GWEN_MULTICACHE_TYPE { GWEN_LIST_ELEMENT(GWEN_MULTICACHE_TYPE); GWEN_MULTICACHE *multiCache; GWEN_MULTICACHE_ENTRY_IDMAP *entryMap; GWEN_MULTICACHE_TYPE_ATTACH_FN attachFn; GWEN_MULTICACHE_TYPE_FREE_FN freeFn; GWEN_MULTICACHE_TYPE_ATTACH_OBJECT_FN attachObjectFn; GWEN_MULTICACHE_TYPE_FREE_OBJECT_FN freeObjectFn; uint32_t _refCount; }; static int GWEN_MultiCache_Type_AttachData(const GWEN_MULTICACHE_TYPE *ct, void *p); static int GWEN_MultiCache_Type_FreeData(const GWEN_MULTICACHE_TYPE *ct, void *p); static void GWEN_MultiCache_Type_ReleaseEntry(GWEN_MULTICACHE_TYPE *ct, GWEN_MULTICACHE_ENTRY *e); struct GWEN_MULTICACHE { GWEN_MULTICACHE_TYPE_LIST *typeList; GWEN_MULTICACHE_ENTRY_LIST *entryList; uint64_t maxSize; uint64_t currentSize; uint64_t maxSizeUsed; uint64_t cacheHits; uint64_t cacheMisses; uint64_t cacheDrops; uint32_t _refCount; }; static int GWEN_MultiCache_AddEntry(GWEN_MULTICACHE *mc, GWEN_MULTICACHE_ENTRY *e); static void GWEN_MultiCache_ReleaseEntry(GWEN_MULTICACHE *mc, GWEN_MULTICACHE_ENTRY *e); static void GWEN_MultiCache_ReleaseEntriesForType(GWEN_MULTICACHE *mc, GWEN_MULTICACHE_TYPE *ct); static void GWEN_MultiCache_UsingEntry(GWEN_MULTICACHE *mc, GWEN_MULTICACHE_ENTRY *e); static void GWEN_MultiCache_IncCacheHits(GWEN_MULTICACHE *mc); static void GWEN_MultiCache_IncCacheMisses(GWEN_MULTICACHE *mc); #endif gwenhywfar-4.15.2beta/src/base/pathmanager.h0000644000175000017500000003435212416477066015726 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_PATHMANAGER_H #define GWENHYWFAR_PATHMANAGER_H #include #include #include typedef enum { /** relative to the current working directory at calling time */ GWEN_PathManager_RelModeCwd=0, /** * This mode is interpreted differently in Windows and non-Windows systems * due to the different handling of paths. *
    *
  • * Windows: Releative to the folder in which the currently running * executable is located. *
  • *
  • * Non-Windows: Relative to the installation prefix of the currently * running executable *
  • *
*/ GWEN_PathManager_RelModeExe, /** relative to the user's home directory */ GWEN_PathManager_RelModeHome } GWEN_PATHMANAGER_RELMODE; #ifdef __cplusplus extern "C" { #endif /** @name Path Management * * Gwenhywfar keeps track of registered directory paths for itself * and for other libraries. * * The paths are registered and stored in one global object (of * GWEN_DB_NODE type), so write-access to this GWEN_PathManager * functions is unfortunately not thread-safe. * * This technique is used internally to * determine some important paths. */ /*@{*/ /** * Register a path to be managed by the global GWEN_PathManager * module. This must be done before calling one of the other * functions of this group. The actual path is not yet set. * * @param destLib The name of the library that this path is supposed to * belong to. * * @param pathName A string identifier for this registered path. * * @return Zero on success, or GWEN_ERROR_INVALID if the @c * pathName already exists. */ GWENHYWFAR_API int GWEN_PathManager_DefinePath(const char *destLib, const char *pathName); /** * Unregister a path that was registered by * GWEN_PathManager_DefinePath(). * * @param destLib The name of the library that this path is supposed to * belong to. * * @param pathName A string identifier for this registered path. * * @return Zero on success, or GWEN_ERROR_NOT_FOUND if the @c * pathName was not found. */ GWENHYWFAR_API int GWEN_PathManager_UndefinePath(const char *destLib, const char *pathName); /** * Add a directory path entry to a registered path entry in the * global GWEN_PathManager. * * @param callingLib The name of the library that adds this path entry. * * @param destLib The name of the library that this path is supposed to * belong to. * * @param pathName A string identifier for this registered path. * * @param pathValue The actual directory path that should be added to * this registered path. * * @param rm path relative to what? (see @ref GWEN_PathManager_RelModeCwd) * * @return Zero on success, or GWEN_ERROR_NOT_FOUND if the @c * pathName was not found. */ GWENHYWFAR_API int GWEN_PathManager_AddPath(const char *callingLib, const char *destLib, const char *pathName, const char *pathValue); /** * Same as @ref GWEN_PathManager_AddPath but the path to add is given * relative to some directory. The "relmode" argument chooses the base * directory to which the given sub-directory path is appended and the * result is added to this PathManager: * * - RelModeCwd appends the path to the current working directory at * the time of calling. So future changes to the CWD do not affect * this setting. * * - RelModeExe appends the path to the prefix of the installation * location of the calling executable. This function looks up the * current working directory, removes the last component (i.e. the * "/bin/") to get the prefix, then adds the given relative path to * it. * * - RelModeHome appends the path to the return value of * GWEN_Directory_GetHomeDirectory(). * * All three variantes will then add the resulting path * to the PathManager. * * @param callingLib The name of the library that adds this path entry. * * @param destLib The name of the library that this path is supposed to * belong to. * * @param pathName A string identifier for this registered path. * * @param pathValue The actual directory path relative to the prefix * of the current working directory that should be added to this * registered path. * * @param rm The Flag to choose the starting directory to which the * path is appended. * * @return Zero on success, or GWEN_ERROR_NOT_FOUND if the @c * pathName was not found. */ GWENHYWFAR_API int GWEN_PathManager_AddRelPath(const char *callingLib, const char *destLib, const char *pathName, const char *pathValue, GWEN_PATHMANAGER_RELMODE rm); /** * Add a directory path entry to a registered path entry in the * global GWEN_PathManager by looking up the directory path in the * Windows registry. * * On non-windows platforms, the function does nothing and returns * zero, so you can safely call this in your multi-platform code. * * Note: Gwenhywfar-2.6.0 and older used to lookup the paths under * HKEY_CURRENT_USER, but with gwen-2.6.1 this was changed to * HKEY_LOCAL_MACHINE because we're talking about installation paths * as opposed to per-user configuration settings. * * @param callingLib The name of the library that adds this path entry. * * @param destLib The name of the library that this path is supposed to * belong to. * * @param pathName A string identifier for this registered path. * * @param keypath The key's path in the windows registry under * HKEY_LOCAL_MACHINE, e.g. "Software\MyProgram\Paths". * * @param varname The variable name of the string variable with the * actual directory path. * * @return Zero on success, or nonzero if the @c pathName or the * registry key was not found. */ GWENHYWFAR_API int GWEN_PathManager_AddPathFromWinReg(const char *callingLib, const char *destLib, const char *pathName, const char *keypath, const char *varname); /** * Insert a directory path entry to a registered path entry in the * global GWEN_PathManager. While @ref GWEN_PathManager_AddPath adds a path * to the end of the list for this particular @c pathName this function * here inserts it at the beginning of the list. This can be used e.g. to * ensure that plugins/files from a given path take precedence over already * added paths. * * @param callingLib The name of the library that adds this path entry. * * @param destLib The name of the library that this path is supposed to * belong to. * * @param pathName A string identifier for this registered path. * * @param pathValue The actual directory path that should be added to * this registered path. */ GWENHYWFAR_API int GWEN_PathManager_InsertPath(const char *callingLib, const char *destLib, const char *pathName, const char *pathValue); /** * Same as @ref GWEN_PathManager_InsertPath but the path to insert is given * relative to some directory. The "relmode" argument chooses the base * directory to which the given sub-directory path is appended and the * result is added to this PathManager: * * - RelModeCwd appends the path to the current working directory at * the time of calling. So future changes to the CWD do not affect * this setting. * * - RelModeExe appends the path to the prefix of the installation * location of the calling executable. This function looks up the * current working directory, removes the last component (i.e. the * "/bin/") to get the prefix, then adds the given relative path to * it. * * - RelModeHome appends the path to the return value of * GWEN_Directory_GetHomeDirectory(). * * All three variantes will then add the resulting path * to the PathManager. * * @param callingLib The name of the library that adds this path entry. * * @param destLib The name of the library that this path is supposed to * belong to. * * @param pathName A string identifier for this registered path. * * @param pathValue The actual directory path relative to the prefix * of the current working directory that should be added to this * registered path. * * @param rm The Flag to choose the starting directory to which the * path is appended. * * @return Zero on success, or GWEN_ERROR_NOT_FOUND if the @c * pathName was not found. */ GWENHYWFAR_API int GWEN_PathManager_InsertRelPath(const char *callingLib, const char *destLib, const char *pathName, const char *pathValue, GWEN_PATHMANAGER_RELMODE rm); /** * Removes a directory path entry from a registered path entry in * the global GWEN_PathManager. * * @param callingLib The name of the library that added this path entry. * * @param destLib The name of the library that this path is supposed to * belong to. * * @param pathName A string identifier for this registered path. * * @param pathValue The actual directory path that should be added to * this registered path. * * @return Zero on success, or nonzero if the @c pathName was not * found. */ GWENHYWFAR_API int GWEN_PathManager_RemovePath(const char *callingLib, const char *destLib, const char *pathName, const char *pathValue); /** * Removes all directory path entries that were registered by the * @c callingLib from the global GWEN_PathManager. * * @param callingLib The name of the library that added path entries. * * @return Zero on success. */ GWENHYWFAR_API int GWEN_PathManager_RemovePaths(const char *callingLib); /** * This function checks whether the path list for @c pathName has changed * since the last call to this function (i.e. whether paths have been * added, inserted or removed). * * @param destLib The name of the library that this path is supposed to * belong to. * * @param pathName A string identifier for this registered path. * * @return Zero on success, or GWEN_ERROR_NOT_FOUND if the @c * pathName was not found. */ GWENHYWFAR_API int GWEN_PathManager_PathChanged(const char *destLib, const char *pathName); /** * Returns a string list of all path entries that exist under the * registered @c pathName. * * @param destLib The name of the library that this path is supposed to * belong to. * * @param pathName A string identifier for this registered path. * * @return A newly allocated @ref GWEN_STRINGLIST with all added * path entries, or NULL if no path entry or no registered @c * pathName exists. Delete this list with @ref GWEN_StringList_free() * when no longer needed. */ GWENHYWFAR_API GWEN_STRINGLIST *GWEN_PathManager_GetPaths(const char *destLib, const char *pathName); /** * This functions tries to find a given file using all * path entries under the registered @c pathName. * * @param destLib The name of the library that this path is supposed to * belong to. * * @param pathName A string identifier for this registered path. * * @param fileName Name of the file (may contain partial paths, like in * "dialogs/testdialog.xml" * * @param fbuf buffer to receive the full path to access the file * * @return 0 on success (in that case @c fbuf will be filled), an * error code otherwise. */ GWENHYWFAR_API int GWEN_PathManager_FindFile(const char *destLib, const char *pathName, const char *fileName, GWEN_BUFFER *fbuf); /** * This function calls @ref GWEN_Directory_GetMatchingFilesRecursively() on every * path entry under the registered @c pathName. * * @return 0 if ok, error code on error * * @param destLib The name of the library that this path is supposed to * belong to. * * @param pathName A string identifier for this registered path. * * @param subFolderName if given then this folder name is appended to every path under * the registered @c pathName before caling @ref GWEN_Directory_GetMatchingFilesRecursively() * on it. You can use this parameter to search only in specific sub folders of the paths. * * @param sl string list to receive the paths of all matching files */ GWENHYWFAR_API int GWEN_PathManager_GetMatchingFilesRecursively(const char *destLib, const char *pathName, const char *subFolderName, GWEN_STRINGLIST *sl, const char *mask); /*@}*/ #ifdef __cplusplus } #endif #endif /* GWENHYWFAR_PATHMANAGER_H */ gwenhywfar-4.15.2beta/src/base/gwensignal_p.h0000644000175000017500000000721012416477066016105 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: stringlist_p.h 786 2005-07-09 13:38:17Z aquamaniac $ begin : Thu Apr 03 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_SIGNAL_P_H #define GWENHYWFAR_SIGNAL_P_H #include "gwensignal.h" GWEN_LIST2_FUNCTION_DEFS(GWEN_SIGNAL, GWEN_Signal) GWEN_LIST2_FUNCTION_DEFS(GWEN_SLOT, GWEN_Slot) void GWEN_Signal_List2_freeAll(GWEN_SIGNAL_LIST2 *slist); void GWEN_Slot_List2_freeAll(GWEN_SLOT_LIST2 *slist); struct GWEN_SIGNAL { GWEN_SIGNALOBJECT *signalObject; char *name; uint32_t derivedParentType; uint32_t typeOfArg1; uint32_t typeOfArg2; GWEN_SLOT_LIST2 *connectedSlots; uint32_t _refCount; }; GWEN_SIGNAL *GWEN_Signal__List2_freeAll_cb(GWEN_SIGNAL *sig, void *user_data); GWEN_SIGNAL *GWEN_Signal__List2_hasSignal_cb(GWEN_SIGNAL *sig, void *user_data); int GWEN_Signal_List2_HasSignal(GWEN_SIGNAL_LIST2 *slist, const GWEN_SIGNAL *sig); void GWEN_Signal_Attach(GWEN_SIGNAL *sig); struct GWEN_SLOT { GWEN_SIGNALOBJECT *signalObject; char *name; uint32_t derivedParentType; GWEN_SLOT_FUNCTION func; void *userData; uint32_t typeOfArg1; uint32_t typeOfArg2; GWEN_SIGNAL_LIST2 *connectedSignals; uint32_t _refCount; }; GWEN_SLOT *GWEN_Slot__List2_freeAll_cb(GWEN_SLOT *slot, void *user_data); GWEN_SLOT *GWEN_Slot__List2_hasSlot_cb(GWEN_SLOT *slot, void *user_data); int GWEN_Slot_List2_HasSlot(GWEN_SLOT_LIST2 *slist, const GWEN_SLOT *slot); void GWEN_Slot_Attach(GWEN_SLOT *slot); struct GWEN_SIGNALOBJECT { GWEN_SLOT_LIST2 *slotList; GWEN_SIGNAL_LIST2 *signalList; }; uint32_t GWEN_SignalObject_MkTypeId(const char *typeName); GWEN_SIGNAL *GWEN_SignalObject__findSignal(const GWEN_SIGNALOBJECT *so, const char *name, uint32_t typeId1, uint32_t typeId2); GWEN_SLOT *GWEN_SignalObject__findSlot(const GWEN_SIGNALOBJECT *so, const char *name, uint32_t typeId1, uint32_t typeId2); int GWEN_SignalObject_AddSignal(GWEN_SIGNALOBJECT *so, GWEN_SIGNAL *sig); int GWEN_SignalObject_AddSlot(GWEN_SIGNALOBJECT *so, GWEN_SLOT *slot); #endif gwenhywfar-4.15.2beta/src/base/list1.tmpl0000644000175000017500000001141112364015347015177 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sat Jun 28 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef @TYPENAME@_LIST1_H #define @TYPENAME@_LIST1_H #ifdef __cplusplus extern "C" { #endif /** @internal */ typedef struct @TYPENAME@_LIST_ELEMENT { uint32_t id; @TYPENAME@ *nextObject; } @TYPENAME@_LIST__ELEMENT; /** * This represents a list of @TYPENAME@ (see @ref @FN_PREFIX@_List_new). * This list may contain any number of elements. However, every element can * only exist within a single list. * If you need a better list please check @ref GWEN_LIST. */ typedef struct @TYPENAME@_LIST @TYPENAME@_LIST; /** * This function is called from within @ref @FN_PREFIX@_List_SetSortFn(). */ typedef int GWENHYWFAR_CB (*@TYPENAME@_LIST_SORT_FN)(const @TYPENAME@ *a, const @TYPENAME@ *b, int ascending); /** @internal */ struct @TYPENAME@_LIST { @TYPENAME@ *first; uint32_t count; uint32_t id; } @TYPENAME@_LIST; /** * Moves the content of one list to another list thus leaving the * old list empty. */ void @FN_PREFIX@_List_AddList(@TYPENAME@_LIST *dst, @TYPENAME@_LIST *l); /** * Adds the given element to the given list making it the new tail. */ void @FN_PREFIX@_List_Add(@TYPENAME@ *element, @TYPENAME@_LIST *list); /** * Inserts the given element into the given list thus making it the new * head of the list. */ void @FN_PREFIX@_List_Insert(@TYPENAME@ *element, @TYPENAME@_LIST *list); /** * Unlinks the given element from whatever list it may currently be * enlisted. If the element is @b not member of any list the program is * aborted. * Please note: The element is just unlinked, not deleted. */ void @FN_PREFIX@_List_Del(@TYPENAME@ *element); /** * Returns the first element of the list. */ @TYPENAME@* @FN_PREFIX@_List_First(const @TYPENAME@_LIST *l); /** * Returns the last element of the list. */ @TYPENAME@* @FN_PREFIX@_List_Last(const @TYPENAME@_LIST *l); /** * Clears the given list (thus leaving it empty). All elements of this list * are deleted via @ref @FN_PREFIX@_free(); */ void @FN_PREFIX@_List_Clear(@TYPENAME@_LIST *l); /** * Creates a new list of @ref @TYPENAME@. */ @TYPENAME@_LIST* @FN_PREFIX@_List_new(); /** * Destroys the list and frees all its elements. */ void @FN_PREFIX@_List_free(@TYPENAME@_LIST *l); /** * Returns the successor of the given element. */ @TYPENAME@* @FN_PREFIX@_List_Next(const @TYPENAME@ *element); /** * Returns the predecessor of the given element. */ @TYPENAME@* @FN_PREFIX@_List_Previous(const @TYPENAME@ *element); /** * Returns the number of elements currently in the given list. */ uint32_t @FN_PREFIX@_List_GetCount(const @TYPENAME@_LIST *l); /** * Set the sort function for the next calls to @ref @FN_PREFIX@_List_Sort(). */ @TYPENAME@_LIST_SORT_FN @FN_PREFIX@_List_SetSortFn(@TYPENAME@_LIST *l, @TYPENAME@_LIST_SORT_FN fn); /** * Sort the list. Within the course of this function the sort function set via * @ref @FN_PREFIX@_List_SetSortFn is called with the arguments * "const @TYPENAME@ *a, const @TYPENAME@ *b, int ascending". */ void @FN_PREFIX@_List_Sort(@TYPENAME@_LIST *l, int ascending); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/base/memory.h0000644000175000017500000000604512416477066014745 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sat Jun 28 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_MEMORY_H #define GWENHYWFAR_MEMORY_H #include #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif /* this is taken from the system header file assert.h and * and modified by me (Martin Preuss). */ # if defined __cplusplus ? __GNUC_PREREQ (2, 6) : __GNUC_PREREQ (2, 4) # define GWEN_LOCATION_FUNCTION __PRETTY_FUNCTION__ # else # if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L # define GWEN_LOCATION_FUNCTION __func__ # else # define GWEN_LOCATION_FUNCTION ((__const char *) "unknown function") # endif # endif GWENHYWFAR_API void *GWEN_Memory_malloc(size_t dsize); GWENHYWFAR_API void GWEN_Memory_dealloc(void *p); GWENHYWFAR_API void *GWEN_Memory_realloc(void *oldp, size_t nsize); GWENHYWFAR_API char *GWEN_Memory_strdup(const char *s); GWENHYWFAR_API void GWEN_Memory_Collect(void); GWENHYWFAR_API void GWEN_Memory_Dump(void); #define GWEN_MEM_NEW(typ, memptr) \ memptr=(typ*)GWEN_Memory_malloc(sizeof(typ)); #define GWEN_MEM_FREE(varname) \ GWEN_Memory_dealloc((void*)varname); #define GWEN_NEW_OBJECT(typ, varname)\ {\ varname=(typ*)GWEN_Memory_malloc(sizeof(typ)); \ memset(varname, 0, sizeof(typ));\ } #define GWEN_FREE_OBJECT(varname) \ GWEN_Memory_dealloc((void*)varname); #ifdef __cplusplus } #endif #endif /* GWENHYWFAR_MEMORY_H */ gwenhywfar-4.15.2beta/src/base/memory_l.h0000644000175000017500000000344212364015347015246 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sat Jun 28 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_MEMORY_L_H #define GWENHYWFAR_MEMORY_L_H #include int GWEN_Memory_ModuleInit(void); int GWEN_Memory_ModuleFini(void); #endif /* GWENHYWFAR_MEMORY_L_H */ gwenhywfar-4.15.2beta/src/base/logger_p.h0000644000175000017500000000715212364015347015223 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sun Dec 05 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_LOGGER_P_H #define GWEN_LOGGER_P_H #include "logger_l.h" #include #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_LOGGER_DOMAIN GWEN_LOGGER_DOMAIN; typedef struct GWEN_LOGGER GWEN_LOGGER; struct GWEN_LOGGER { GWEN_LOGGER *next; GWEN_LOGGER_DOMAIN *domain; int enabled; int open; GWEN_LOGGER_LOGTYPE logType; char *logFile; char *logIdent; GWEN_LOGGER_LEVEL logLevel; GWEN_LOGGERFUNCTIONLOG logFunction; uint32_t usage; }; struct GWEN_LOGGER_DOMAIN { GWEN_LOGGER_DOMAIN *next; char *name; GWEN_LOGGER *logger; }; GWEN_LOGGER_DOMAIN *GWEN_LoggerDomain_new(const char *name); void GWEN_LoggerDomain_free(GWEN_LOGGER_DOMAIN *ld); GWEN_LOGGER_DOMAIN *GWEN_LoggerDomain_Find(const char *name); void GWEN_LoggerDomain_Add(GWEN_LOGGER_DOMAIN *ld); void GWEN_LoggerDomain_Del(GWEN_LOGGER_DOMAIN *ld); GWEN_LOGGER *GWEN_LoggerDomain_GetLogger(const char *name); int GWEN_Logger__CreateMessage(GWEN_LOGGER *lg, GWEN_LOGGER_LEVEL priority, const char *s, GWEN_BUFFER *mbuf); int GWEN_Logger__Log(GWEN_LOGGER *lg, GWEN_LOGGER_LEVEL priority, const char *s); GWEN_LOGGER *GWEN_Logger_new(GWEN_LOGGER_DOMAIN *domain); void GWEN_Logger_free(GWEN_LOGGER *lg); void GWEN_Logger_Attach(GWEN_LOGGER *lg); /** * Adds a logger to the given one. So if the old logger is to log something * then the newly added logger will log the same message as well. * The new logger must already be open (via @ref GWEN_Logger_Open). */ GWENHYWFAR_API void GWEN_Logger_AddLogger(GWEN_LOGGER *oldLogger, GWEN_LOGGER *newLogger); /** * DEPRECATED. Only sets the new default logger if it not already is * set or if the new default logger is NULL. You must call * GWEN_Logger_Open on that logger prior to calling this function. */ GWENHYWFAR_API void GWEN_Logger_SetDefaultLogger(GWEN_LOGGER *lg) DEPRECATED ; #ifdef __cplusplus } #endif #endif /* #ifndef GWEN_LOGGER_P_H */ gwenhywfar-4.15.2beta/src/base/ringbuffer_p.h0000644000175000017500000000375512364015347016102 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sun Jan 25 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_RINGBUFFER_P_H #define GWEN_RINGBUFFER_P_H #include struct GWEN_RINGBUFFER { char *ptr; uint32_t bufferSize; uint32_t readPos; uint32_t writePos; uint32_t bytesUsed; uint32_t maxBytesUsed; uint32_t emptyCounter; uint32_t fullCounter; uint32_t throughput; }; #endif /* GWEN_RINGBUFFER_P_H */ gwenhywfar-4.15.2beta/src/base/error.h0000644000175000017500000001351212416477066014563 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Tue Oct 02 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /** * @file base/error.h * @short This file contains the module for error handling. */ #ifndef GWENHYWFAR_ERROR_H #define GWENHYWFAR_ERROR_H #include #include /** * @defgroup MOD_ERROR Error module * @ingroup MOD_BASE * @short This module does all error handling * @author Martin Preuss * */ /*@{*/ /* * Allow this to be used from C and C++ */ #ifdef __cplusplus extern "C" { #endif /** @defgroup MOD_ERROR_SIMPLE Simplified Error Codes * */ /*@{*/ #define GWEN_SUCCESS 0 /* generic errors */ #define GWEN_ERROR_GENERIC (-1) #define GWEN_ERROR_ABORTED (-2) #define GWEN_ERROR_NOT_AVAILABLE (-3) #define GWEN_ERROR_USER_ABORTED (-4) #define GWEN_ERROR_OPEN (-5) #define GWEN_ERROR_INVALID (-6) /* socket errors */ #define GWEN_ERROR_BAD_SOCKETTYPE (-32) #define GWEN_ERROR_NOT_OPEN (-33) #define GWEN_ERROR_TIMEOUT (-34) #define GWEN_ERROR_IN_PROGRESS (-35) #define GWEN_ERROR_STARTUP (-36) #define GWEN_ERROR_INTERRUPTED (-37) #define GWEN_ERROR_BROKEN_PIPE (-39) /* inet address errors */ #define GWEN_ERROR_MEMORY_FULL (-40) #define GWEN_ERROR_BAD_ADDRESS (-41) #define GWEN_ERROR_BUFFER_OVERFLOW (-42) #define GWEN_ERROR_HOST_NOT_FOUND (-43) #define GWEN_ERROR_NO_ADDRESS (-44) #define GWEN_ERROR_NO_RECOVERY (-45) #define GWEN_ERROR_TRY_AGAIN (-46) #define GWEN_ERROR_UNKNOWN_DNS_ERROR (-47) #define GWEN_ERROR_BAD_ADDRESS_FAMILY (-48) /* libloader errors */ #define GWEN_ERROR_COULD_NOT_LOAD (-49) #define GWEN_ERROR_COULD_NOT_RESOLVE (-50) #define GWEN_ERROR_NOT_FOUND (-51) /* buffered IO errors */ #define GWEN_ERROR_READ (-52) #define GWEN_ERROR_WRITE (-53) #define GWEN_ERROR_CLOSE (-54) #define GWEN_ERROR_NO_DATA (-55) #define GWEN_ERROR_PARTIAL (-56) #define GWEN_ERROR_EOF (-57) /* crypt errors */ #define GWEN_ERROR_ALREADY_REGISTERED (-58) #define GWEN_ERROR_NOT_REGISTERED (-59) #define GWEN_ERROR_BAD_SIZE (-60) #define GWEN_ERROR_ENCRYPT (-62) #define GWEN_ERROR_DECRYPT (-63) #define GWEN_ERROR_SIGN (-64) #define GWEN_ERROR_VERIFY (-65) #define GWEN_ERROR_SSL (-66) /* crypt token errors */ #define GWEN_ERROR_NOT_IMPLEMENTED (-67) #define GWEN_ERROR_NOT_SUPPORTED (-68) #define GWEN_ERROR_BAD_NAME (-69) #define GWEN_ERROR_BAD_PIN (-70) #define GWEN_ERROR_BAD_PIN_0_LEFT (-71) #define GWEN_ERROR_BAD_PIN_1_LEFT (-72) #define GWEN_ERROR_BAD_PIN_2_LEFT (-73) #define GWEN_ERROR_NO_KEY (-74) #define GWEN_ERROR_REMOVED (-75) #define GWEN_ERROR_DEFAULT_VALUE (-76) /* new error codes in GWEN2 */ #define GWEN_ERROR_NOT_CONNECTED (-100) #define GWEN_ERROR_BAD_DATA (-101) #define GWEN_ERROR_FOUND (-102) #define GWEN_ERROR_IO (-103) #define GWEN_ERROR_INTERNAL (-104) #define GWEN_ERROR_PERMISSIONS (-105) #define GWEN_ERROR_CONN_REFUSED (-106) #define GWEN_ERROR_NET_UNREACHABLE (-107) #define GWEN_ERROR_SSL_SECURITY (-108) #define GWEN_ERROR_LOCK (-109) #define GWEN_ERROR_USEROFFSET (-1000) /*@}*/ /** * @name Verbosity * * Composing error messages. */ /*@{*/ /** * Dumps the string corresponding to the given erro code. * @return 1 detailed error message created, 0 otherwise * @param c error code * @param buffer pointer to a buffer to receive the message * @param bsize size of that buffer in bytes */ GWENHYWFAR_API int GWEN_Error_ToString(int c, char *buffer, int bsize); /** * @brief Returns a (very) short string describing the given GWEN error code, or "Unknown error" for unknown codes * @param i The error code * @return A fixed static string that must not be free'd */ GWENHYWFAR_API const char *GWEN_Error_SimpleToString(int i); /*@}*/ /*@}*/ #ifdef __cplusplus } #endif /*@} group mod_error */ #endif /* MOD_ERROR_H */ gwenhywfar-4.15.2beta/src/base/Makefile.in0000644000175000017500000007306512634022414015320 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/base DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(dist_typedata_DATA) $(iheader_HEADERS) \ $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libbase_la_LIBADD = am_libbase_la_OBJECTS = args.lo buffer.lo debug.lo error.lo \ gwensignal.lo i18n.lo idlist.lo idlist64.lo inherit.lo list.lo \ list1.lo logger.lo memory.lo pathmanager.lo plugin.lo \ plugindescr.lo refptr.lo ringbuffer.lo stringlist.lo \ stringlist2.lo idmap.lo fastbuffer.lo memcache.lo tree.lo \ pointerlist.lo multicache.lo param.lo libbase_la_OBJECTS = $(am_libbase_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libbase_la_SOURCES) DIST_SOURCES = $(libbase_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(typedatadir)" "$(DESTDIR)$(iheaderdir)" DATA = $(dist_typedata_DATA) HEADERS = $(iheader_HEADERS) $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ \ -DGWEN_BUFFER_DEFAULT_HARDLIMIT='@gwenhywfar_buffer_hardlimit@' DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/ \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/gui \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/parser # Don't include src/os above because its process.h conflicts with the # system's , at least for gcc3.2 on mingw32 # -I$(top_srcdir)/src/os AM_CFLAGS = @PROFILING_CFLAGS@ @visibility_cflags@ -DBUILDING_GWENHYWFAR noinst_LTLIBRARIES = libbase.la typedatadir = $(datadir)/gwenhywfar/typemaker2/c dist_typedata_DATA = \ gwen_param.tm2 gwen_param_list.tm2 gwen_param_list2.tm2 gwen_param_tree.tm2 typefiles = param.xml EXTRA_DIST = $(typefiles) param_fns.c noinst_HEADERS = \ args_p.h \ buffer_p.h \ debug_p.h \ error_l.h \ error_p.h \ gwensignal_p.h \ i18n_l.h \ idlist_p.h \ idlist64_p.h \ inherit_p.h \ list_p.h \ list1_p.h \ logger_l.h \ logger_p.h \ memory_l.h \ memory_p.h \ pathmanager_l.h \ pathmanager_p.h \ plugindescr_p.h \ plugin_l.h \ plugin_p.h \ refptr_p.h \ ringbuffer_p.h \ stringlist_p.h \ stringlist2_p.h \ idmap_p.h \ memcache_p.h \ tree_p.h \ pointerlist_p.h \ multicache_p.h \ param_p.h iheaderdir = $(gwenhywfar_headerdir_am)/gwenhywfar iheader_HEADERS = \ args.h \ buffer.h \ debug.h \ error.h \ gwensignal.h \ i18n.h \ idlist.h \ idlist64.h \ inherit.h \ list.h \ list1.h \ list1.tmpl \ list2.h \ list2.tmpl \ logger.h \ memory.h \ misc.h \ misc2.h \ pathmanager.h \ plugin.h \ plugindescr.h \ refptr.h \ ringbuffer.h \ stringlist.h \ stringlist2.h \ idmap.h \ fastbuffer.h \ memcache.h \ tree.h \ pointerlist.h \ multicache.h \ bindata.h \ param.h \ param_fns.h libbase_la_SOURCES = \ args.c \ buffer.c \ debug.c \ error.c \ gwensignal.c \ i18n.c \ idlist.c \ idlist64.c \ inherit.c \ list.c \ list1.c \ logger.c \ memory.c \ pathmanager.c \ plugin.c \ plugindescr.c \ refptr.c \ ringbuffer.c \ stringlist.c \ stringlist2.c \ idmap.c \ fastbuffer.c \ memcache.c \ tree.c \ pointerlist.c \ multicache.c \ param.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/base/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/base/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libbase.la: $(libbase_la_OBJECTS) $(libbase_la_DEPENDENCIES) $(EXTRA_libbase_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libbase_la_OBJECTS) $(libbase_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/args.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buffer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debug.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fastbuffer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gwensignal.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i18n.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/idlist.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/idlist64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/idmap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inherit.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logger.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memcache.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memory.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multicache.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/param.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pathmanager.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plugin.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plugindescr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pointerlist.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/refptr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ringbuffer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stringlist.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stringlist2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tree.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_typedataDATA: $(dist_typedata_DATA) @$(NORMAL_INSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(typedatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(typedatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typedatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(typedatadir)" || exit $$?; \ done uninstall-dist_typedataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(typedatadir)'; $(am__uninstall_files_from_dir) install-iheaderHEADERS: $(iheader_HEADERS) @$(NORMAL_INSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(iheaderdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(iheaderdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(iheaderdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(iheaderdir)" || exit $$?; \ done uninstall-iheaderHEADERS: @$(NORMAL_UNINSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(iheaderdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(typedatadir)" "$(DESTDIR)$(iheaderdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_typedataDATA install-iheaderHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_typedataDATA uninstall-iheaderHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dist_typedataDATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-iheaderHEADERS install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am \ uninstall-dist_typedataDATA uninstall-iheaderHEADERS sources: for f in $(libbase_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done types: $(typefiles) typedefs typemaker2 -I $(srcdir) --destfolder="$(srcdir)" -D GWENHYWFAR_API $(typefiles) typedefs: $(typefiles) typemaker2 --defs-only -I $(srcdir) --destfolder="$(srcdir)" -D GWENHYWFAR_API $(typefiles) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/src/base/plugindescr.c0000644000175000017500000003546612416477066015760 00000000000000/*************************************************************************** begin : Thu Apr 03 2003 copyright : (C) 2003-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "plugindescr_p.h" #include "i18n_l.h" #include #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include #ifdef HAVE_STRINGS_H # include #endif GWEN_LIST_FUNCTIONS(GWEN_PLUGIN_DESCRIPTION, GWEN_PluginDescription) GWEN_LIST2_FUNCTIONS(GWEN_PLUGIN_DESCRIPTION, GWEN_PluginDescription) GWEN_PLUGIN_DESCRIPTION *GWEN_PluginDescription_new(GWEN_XMLNODE *node) { GWEN_PLUGIN_DESCRIPTION *pd; const char *p; GWEN_NEW_OBJECT(GWEN_PLUGIN_DESCRIPTION, pd); pd->refCount=1; DBG_MEM_INC("GWEN_PLUGIN_DESCRIPTION", 0); GWEN_LIST_INIT(GWEN_PLUGIN_DESCRIPTION, pd); p=GWEN_XMLNode_GetProperty(node, "name", 0); if (!p) { DBG_ERROR(GWEN_LOGDOMAIN, "Unnamed plugin"); GWEN_PluginDescription_free(pd); return 0; } pd->name=strdup(p); pd->xmlNode=GWEN_XMLNode_dup(node); p=GWEN_XMLNode_GetProperty(node, "i18n", NULL); if (!p) { DBG_NOTICE(GWEN_LOGDOMAIN, "Plugin has no I18N domain, using GWEN"); p="gwenhywfar"; } pd->langDomain=strdup(p); p=GWEN_XMLNode_GetProperty(node, "type", 0); if (!p) { DBG_ERROR(GWEN_LOGDOMAIN, "Plugin has no type"); GWEN_PluginDescription_free(pd); return 0; } pd->type=strdup(p); p=GWEN_XMLNode_GetCharValue(node, "version", 0); if (p) pd->version=strdup(p); p=GWEN_XMLNode_GetCharValue(node, "author", 0); if (p) pd->author=strdup(p); p=GWEN_XMLNode_GetCharValue(node, "short", 0); if (p) pd->shortDescr=strdup(p); p=GWEN_XMLNode_GetCharValue(node, "descr", 0); if (p) pd->longDescr=strdup(p); return pd; } void GWEN_PluginDescription_free(GWEN_PLUGIN_DESCRIPTION *pd) { if (pd) { assert(pd->refCount); if (pd->refCount==1) { DBG_MEM_DEC("GWEN_PLUGIN_DESCRIPTION"); GWEN_LIST_FINI(GWEN_PLUGIN_DESCRIPTION, pd); free(pd->path); GWEN_XMLNode_free(pd->xmlNode); free(pd->fileName); free(pd->longDescr); free(pd->shortDescr); free(pd->author); free(pd->version); free(pd->langDomain); free(pd->type); free(pd->name); pd->refCount=0; GWEN_FREE_OBJECT(pd); } else pd->refCount--; } } void GWEN_PluginDescription_Attach(GWEN_PLUGIN_DESCRIPTION *pd) { assert(pd); assert(pd->refCount); pd->refCount++; } GWEN_PLUGIN_DESCRIPTION* GWEN_PluginDescription_dup(const GWEN_PLUGIN_DESCRIPTION *pd) { GWEN_PLUGIN_DESCRIPTION *np; const char *s; assert(pd); GWEN_NEW_OBJECT(GWEN_PLUGIN_DESCRIPTION, np); np->refCount=1; DBG_MEM_INC("GWEN_PLUGIN_DESCRIPTION", 0); GWEN_LIST_INIT(GWEN_PLUGIN_DESCRIPTION, np); s=pd->fileName; if (s) np->fileName=strdup(s); s=pd->path; if (s) np->path=strdup(s); s=pd->name; if (s) np->name=strdup(s); s=pd->type; if (s) np->type=strdup(s); s=pd->langDomain; if (s) np->langDomain=strdup(s); s=pd->shortDescr; if (s) np->shortDescr=strdup(s); s=pd->author; if (s) np->author=strdup(s); s=pd->version; if (s) np->version=strdup(s); s=pd->longDescr; if (s) np->longDescr=strdup(s); np->isActive=pd->isActive; if (pd->xmlNode) np->xmlNode=GWEN_XMLNode_dup(pd->xmlNode); return np; } GWEN_PLUGIN_DESCRIPTION* GWEN_PluginDescription_List2_freeAll_cb(GWEN_PLUGIN_DESCRIPTION *pd, __attribute__((unused)) void *user_data) { GWEN_PluginDescription_free(pd); return 0; } void GWEN_PluginDescription_List2_freeAll(GWEN_PLUGIN_DESCRIPTION_LIST2 *pdl) { GWEN_PluginDescription_List2_ForEach (pdl, GWEN_PluginDescription_List2_freeAll_cb, 0); GWEN_PluginDescription_List2_free(pdl); } const char *GWEN_PluginDescription_GetPath(const GWEN_PLUGIN_DESCRIPTION *pd) { assert(pd); return pd->path; } void GWEN_PluginDescription_SetPath(GWEN_PLUGIN_DESCRIPTION *pd, const char *s) { assert(pd); free(pd->path); if (s) pd->path=strdup(s); else pd->path=0; } const char *GWEN_PluginDescription_GetName(const GWEN_PLUGIN_DESCRIPTION *pd) { assert(pd); return pd->name; } const char *GWEN_PluginDescription_GetType(const GWEN_PLUGIN_DESCRIPTION *pd) { assert(pd); return pd->type; } const char* GWEN_PluginDescription_GetShortDescr(const GWEN_PLUGIN_DESCRIPTION *pd) { assert(pd); return GWEN_I18N_Translate(pd->langDomain, pd->shortDescr); } const char* GWEN_PluginDescription_GetAuthor(const GWEN_PLUGIN_DESCRIPTION *pd) { assert(pd); return pd->author; } const char* GWEN_PluginDescription_GetVersion(const GWEN_PLUGIN_DESCRIPTION *pd) { assert(pd); return pd->version; } const char* GWEN_PluginDescription_GetLongDescr(const GWEN_PLUGIN_DESCRIPTION *pd) { assert(pd); return GWEN_I18N_Translate(pd->langDomain, pd->longDescr); } int GWEN_PluginDescription__GetLongDescrByFormat(const GWEN_PLUGIN_DESCRIPTION *pd, const char *s, GWEN_BUFFER *buf) { GWEN_XMLNODE *n; assert(pd); assert(pd->xmlNode); n=GWEN_XMLNode_FindFirstTag(pd->xmlNode, "descr", 0, 0); if (n) { n=GWEN_XMLNode_FindFirstTag(n, "text", "format", s); while (n) { if (0==GWEN_XMLNode_GetProperty(n, "lang", 0)) { int rv; rv=GWEN_XMLNode_toBuffer(n, buf, GWEN_XML_FLAGS_TOLERANT_ENDTAGS); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } n=GWEN_XMLNode_FindNextTag(n, "text", "format", s); } /* while */ } return -1; } int GWEN_PluginDescription__GetLocalizedLongDescrByFormat(const GWEN_PLUGIN_DESCRIPTION *pd, const char *s, const char *lang, GWEN_BUFFER *buf) { GWEN_XMLNODE *n; assert(pd); assert(pd->xmlNode); n=GWEN_XMLNode_FindFirstTag(pd->xmlNode, "descr", 0, 0); if (n) { n=GWEN_XMLNode_FindFirstTag(n, "text", "lang", lang); while (n) { const char *fmt; fmt=GWEN_XMLNode_GetProperty(n, "format", 0); if (fmt && strcasecmp(fmt, s)==0) { int rv; rv=GWEN_XMLNode_toBuffer(n, buf, GWEN_XML_FLAGS_TOLERANT_ENDTAGS); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } n=GWEN_XMLNode_FindNextTag(n, "text", "lang", lang); } /* while */ } return -1; } int GWEN_PluginDescription_GetLongDescrByFormat(const GWEN_PLUGIN_DESCRIPTION *pd, const char *s, GWEN_BUFFER *buf) { GWEN_STRINGLIST *langl; int rv; langl=GWEN_I18N_GetCurrentLocaleList(); if (langl) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(langl); while(se) { const char *l; l=GWEN_StringListEntry_Data(se); DBG_NOTICE(GWEN_LOGDOMAIN, "Trying locale \"%s\"", l); assert(l); rv=GWEN_PluginDescription__GetLocalizedLongDescrByFormat(pd, s, l, buf); if (rv==0) return rv; se=GWEN_StringListEntry_Next(se); } /* while */ } /* if language list available */ /* no localized version found, return text for default language */ rv=GWEN_PluginDescription__GetLongDescrByFormat(pd, s, buf); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } const char* GWEN_PluginDescription_GetFileName(const GWEN_PLUGIN_DESCRIPTION *pd) { assert(pd); return pd->fileName; } void GWEN_PluginDescription_SetFileName(GWEN_PLUGIN_DESCRIPTION *pd, const char *s) { assert(pd); free(pd->fileName); if (s) pd->fileName=strdup(s); else pd->fileName=0; } GWEN_XMLNODE* GWEN_PluginDescription_GetXmlNode(const GWEN_PLUGIN_DESCRIPTION *pd) { assert(pd); return pd->xmlNode; } GWEN_PLUGIN_DESCRIPTION_LIST2 *GWEN_LoadPluginDescrs(const char *path) { GWEN_PLUGIN_DESCRIPTION_LIST2 *pl; pl=GWEN_PluginDescription_List2_new(); GWEN_LoadPluginDescrsByType(path, 0, pl); if (GWEN_PluginDescription_List2_GetSize(pl)==0) { GWEN_PluginDescription_List2_free(pl); return 0; } return pl; } int GWEN_PluginDescription_IsActive(const GWEN_PLUGIN_DESCRIPTION *pd) { assert(pd); return pd->isActive; } void GWEN_PluginDescription_SetIsActive(GWEN_PLUGIN_DESCRIPTION *pd, int i) { assert(pd); pd->isActive=i; } int GWEN_LoadPluginDescrsByType(const char *path, const char *type, GWEN_PLUGIN_DESCRIPTION_LIST2 *pdl) { GWEN_DIRECTORY *d; GWEN_BUFFER *nbuf; char nbuffer[64]; unsigned int pathLen; if (!path) path=""; /* create path */ nbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(nbuf, path); pathLen=GWEN_Buffer_GetUsedBytes(nbuf); d=GWEN_Directory_new(); if (GWEN_Directory_Open(d, GWEN_Buffer_GetStart(nbuf))) { DBG_INFO(GWEN_LOGDOMAIN, "Path \"%s\" is not available", GWEN_Buffer_GetStart(nbuf)); GWEN_Buffer_free(nbuf); GWEN_Directory_free(d); return -1; } while(!GWEN_Directory_Read(d, nbuffer, sizeof(nbuffer))) { if (strcmp(nbuffer, ".") && strcmp(nbuffer, "..")) { int nlen; nlen=strlen(nbuffer); if (nlen>3) { if (strcasecmp(nbuffer+nlen-4, ".xml")==0) { struct stat st; GWEN_Buffer_Crop(nbuf, 0, pathLen); GWEN_Buffer_SetPos(nbuf, pathLen); GWEN_Buffer_AppendByte(nbuf, GWEN_DIR_SEPARATOR); GWEN_Buffer_AppendString(nbuf, nbuffer); if (stat(GWEN_Buffer_GetStart(nbuf), &st)) { DBG_ERROR(GWEN_LOGDOMAIN, "stat(%s): %s", GWEN_Buffer_GetStart(nbuf), strerror(errno)); } else { if (!S_ISDIR(st.st_mode)) { GWEN_XMLNODE *fileNode; fileNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); if (GWEN_XML_ReadFile(fileNode, GWEN_Buffer_GetStart(nbuf), GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_HANDLE_HEADERS | GWEN_XML_FLAGS_HANDLE_OPEN_HTMLTAGS)) { DBG_WARN(GWEN_LOGDOMAIN, "Bad file \"%s\"", GWEN_Buffer_GetStart(nbuf)); } else { GWEN_XMLNODE *node; GWEN_XMLNODE *n; GWEN_STRINGLIST *langl; n=0; node=GWEN_XMLNode_FindFirstTag(fileNode, "PluginDescr", 0, 0); if (!node) node=fileNode; langl=GWEN_I18N_GetCurrentLocaleList(); if (langl) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(langl); while(se) { const char *l; l=GWEN_StringListEntry_Data(se); DBG_DEBUG(GWEN_LOGDOMAIN, "Trying locale \"%s\"", l); assert(l); n=GWEN_XMLNode_FindFirstTag(node, "plugin", "lang", l); if (n) break; se=GWEN_StringListEntry_Next(se); } /* while */ } /* if language list available */ if (!n) n=GWEN_XMLNode_FindFirstTag(node, "plugin", 0, 0); if (n) { GWEN_PLUGIN_DESCRIPTION *pd; int loadIt; loadIt=1; if (type) { const char *ft; ft=GWEN_XMLNode_GetProperty(n, "type", 0); if (!ft) loadIt=0; else if (strcasecmp(ft, type)!=0) { loadIt=0; } } /* if type specified */ if (loadIt) { pd=GWEN_PluginDescription_new(n); if (!pd) { DBG_WARN(GWEN_LOGDOMAIN, "Bad plugin description"); } else { GWEN_PluginDescription_SetFileName (pd, GWEN_Buffer_GetStart(nbuf)); GWEN_Buffer_Crop(nbuf, 0, pathLen); GWEN_Buffer_SetPos(nbuf, pathLen); GWEN_PluginDescription_SetPath (pd, GWEN_Buffer_GetStart(nbuf)); GWEN_PluginDescription_List2_PushBack(pdl, pd); } } /* if loadIt */ else { DBG_INFO(GWEN_LOGDOMAIN, "Ignoring file \"%s\" (bad/missing type)", GWEN_Buffer_GetStart(nbuf)); } } else { DBG_WARN(GWEN_LOGDOMAIN, "File \"%s\" does not contain a plugin " "description", GWEN_Buffer_GetStart(nbuf)); } } GWEN_XMLNode_free(fileNode); } /* if !dir */ } /* if stat was ok */ } /* if XML */ } /* if name has more than 3 chars */ } /* if not "." and not ".." */ } /* while */ GWEN_Directory_Close(d); GWEN_Directory_free(d); GWEN_Buffer_free(nbuf); return 0; } gwenhywfar-4.15.2beta/src/base/list2.tmpl0000644000175000017500000002107712364015347015211 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sat Jun 28 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef @TYPENAME@_LIST2_H #define @TYPENAME@_LIST2_H #ifdef __cplusplus extern "C" { #endif /** * Defines a list of pointers to @TYPENAME@. The pointers stored in * a list are not taken over by the list, so you must take care of freeing * the elements of the list yourself. * (see @ref @FN_PREFIX@_List2_new) */ typedef struct @TYPENAME@_LIST2 @TYPENAME@_LIST2; /** * An iterator is used to traverse a list. */ typedef struct @TYPENAME@_LIST2_ITERATOR @TYPENAME@_LIST2_ITERATOR; /** * See @ref @FN_PREFIX@_List2_ForEach. */ typedef @TYPENAME@* (@TYPENAME@_LIST2_FOREACH)(@TYPENAME@ *element, void *user_data); /** * Creates a new list. This mus be freed using @ref @FN_PREFIX@_List2_free. */ @TYPENAME@_LIST2 *@FN_PREFIX@_List2_new(); /** * Destroys the list. Please note that the members in this list are not destroyed! */ void @FN_PREFIX@_List2_free(@TYPENAME@_LIST2 *l); /** * Dumps the contents of the list to an open file (e.g. stderr). */ void @FN_PREFIX@_List2_Dump(@TYPENAME@_LIST2 *l, FILE *f, unsigned int indent); /** * Appends an element to a list making it the new last element. */ void @FN_PREFIX@_List2_PushBack(@TYPENAME@_LIST2 *l, @TYPENAME@ *p); /** * Inserts an element at the start of the list, making it the new * first element. */ void @FN_PREFIX@_List2_PushFront(@TYPENAME@_LIST2 *l, @TYPENAME@ *p); /** * Returns the first element of the list. (The element is not * removed from the list.) */ @TYPENAME@ *@FN_PREFIX@_List2_GetFront(@TYPENAME@_LIST2 *l); /** * Returns the last element of the list. (The element is not * removed from the list.) */ @TYPENAME@ *@FN_PREFIX@_List2_GetBack(@TYPENAME@_LIST2 *l); /** * Removes the element currently pointed to by the given iterator * from the list. */ void @FN_PREFIX@_List2_Erase(@TYPENAME@_LIST2 *l, @TYPENAME@_LIST2_ITERATOR *it); /** Returns the size of this list, i.e. the number of elements in this * list. * * This number is counted in the list metadata, so this is a cheap * operation. */ unsigned int @FN_PREFIX@_List2_GetSize(@TYPENAME@_LIST2 *l); /** * Removes the list's last element from the list. (The element is not * freed.) */ void @FN_PREFIX@_List2_PopBack(@TYPENAME@_LIST2 *l); /** * Removes the list's first element from the list. (The element is not * freed.) */ void @FN_PREFIX@_List2_PopFront(@TYPENAME@_LIST2 *l); /** * Removes all list elements from the list. (The elements are not freed.) */ void @FN_PREFIX@_List2_Clear(@TYPENAME@_LIST2 *l); /** * Returns a list iterator pointing to the first element. */ @TYPENAME@_LIST2_ITERATOR *@FN_PREFIX@_List2_First(@TYPENAME@_LIST2 *l); /** * Returns a list iterator pointing to the last element. */ @TYPENAME@_LIST2_ITERATOR *@FN_PREFIX@_List2_Last(@TYPENAME@_LIST2 *l); /** * Creates a list iterator for the given list. (FIXME: Should be private). */ @TYPENAME@_LIST2_ITERATOR *@FN_PREFIX@_List2Iterator_new(@TYPENAME@_LIST2 *l); /** * Destroys the list iterator. */ void @FN_PREFIX@_List2Iterator_free(@TYPENAME@_LIST2_ITERATOR *li); /** * Moves the list iterator to the predecessor of the currenty selected * element and returns that predecessor element. */ @TYPENAME@ *@FN_PREFIX@_List2Iterator_Previous(@TYPENAME@_LIST2_ITERATOR *li); /** * Moves the list iterator to the successor of the currenty selected * element and returns that successor element. */ @TYPENAME@ *@FN_PREFIX@_List2Iterator_Next(@TYPENAME@_LIST2_ITERATOR *li); /** * Returns the pointer to the element stored at the list position the * iterator currently points to. */ @TYPENAME@ *@FN_PREFIX@_List2Iterator_Data(@TYPENAME@_LIST2_ITERATOR *li); /** Traverses the list, calling the callback function 'func' on * each list element. Traversal will stop when 'func' returns a * non-NULL value, and the routine will return with that * value. Otherwise the routine will return NULL. * @param list The list to traverse. * @param func The function to be called with each list element. * @param user_data A pointer passed on to the function 'func'. * @return The non-NULL pointer returned by 'func' as soon as it * returns one. Otherwise (i.e. 'func' always returns NULL) * returns NULL. */ @TYPENAME@ *@FN_PREFIX@_List2_ForEach(@TYPENAME@_LIST2 *list, @TYPENAME@_LIST2_FOREACH func, void *user_data); typedef struct @TYPENAME@_CONSTLIST2 @TYPENAME@_CONSTLIST2; typedef struct @TYPENAME@_CONSTLIST2_ITERATOR @TYPENAME@_CONSTLIST2_ITERATOR; typedef const @TYPENAME@* (@TYPENAME@_CONSTLIST2_FOREACH)(const @TYPENAME@ *element, void *user_data); @TYPENAME@_CONSTLIST2 *@FN_PREFIX@_ConstList2_new(); void @FN_PREFIX@_ConstList2_free(@TYPENAME@_CONSTLIST2 *l); void @FN_PREFIX@_ConstList2_PushBack(@TYPENAME@_CONSTLIST2 *l, const @TYPENAME@ *p); void @FN_PREFIX@_ConstList2_PushFront(@TYPENAME@_CONSTLIST2 *l, const @TYPENAME@ *p); const @TYPENAME@ *@FN_PREFIX@_ConstList2_GetFront(@TYPENAME@_CONSTLIST2 *l); const @TYPENAME@ *@FN_PREFIX@_ConstList2_GetBack(@TYPENAME@_CONSTLIST2 *l); unsigned int @FN_PREFIX@_ConstList2_GetSize(@TYPENAME@_CONSTLIST2 *l); void @FN_PREFIX@_ConstList2_PopBack(@TYPENAME@_CONSTLIST2 *l); void @FN_PREFIX@_ConstList2_PopFront(@TYPENAME@_CONSTLIST2 *l); void @FN_PREFIX@_ConstList2_Clear(@TYPENAME@_CONSTLIST2 *l); @TYPENAME@_CONSTLIST2_ITERATOR *@FN_PREFIX@_ConstList2_First(@TYPENAME@_CONSTLIST2 *l); @TYPENAME@_CONSTLIST2_ITERATOR *@FN_PREFIX@_ConstList2_Last(@TYPENAME@_CONSTLIST2 *l); @TYPENAME@_CONSTLIST2_ITERATOR *@FN_PREFIX@_ConstList2Iterator_new(@TYPENAME@_CONSTLIST2 *l); void @FN_PREFIX@_ConstList2Iterator_free(@TYPENAME@_CONSTLIST2_ITERATOR *li); const @TYPENAME@ *@FN_PREFIX@_ConstList2Iterator_Previous(@TYPENAME@_CONSTLIST2_ITERATOR *li); const @TYPENAME@ *@FN_PREFIX@_ConstList2Iterator_Next(@TYPENAME@_CONSTLIST2_ITERATOR *li); const @TYPENAME@ *@FN_PREFIX@_ConstList2Iterator_Data(@TYPENAME@_CONSTLIST2_ITERATOR *li); /** Traverses the list, calling the callback function 'func' on * each list element. Traversal will stop when 'func' returns a * non-NULL value, and the routine will return with that * value. Otherwise the routine will return NULL. * @param list The list to traverse. * @param func The function to be called with each list element. * @param user_data A pointer passed on to the function 'func'. * @return The non-NULL pointer returned by 'func' as soon as it * returns one. Otherwise (i.e. 'func' always returns NULL) * returns NULL. */ const @TYPENAME@ *@FN_PREFIX@_ConstList2_ForEach(@TYPENAME@_CONSTLIST2 *list, @TYPENAME@_CONSTLIST2_FOREACH func, void *user_data); #ifdef __cplusplus } #endif #endif /* @TYPENAME@_LIST_H */ gwenhywfar-4.15.2beta/src/base/gwen_param_tree.tm20000644000175000017500000000033012425452307017025 00000000000000 GWEN_PARAM_TREE GWEN_Param_Tree gwenhywfar-4.15.2beta/src/base/ringbuffer.c0000644000175000017500000001751112416477066015561 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sun Jan 25 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "ringbuffer_p.h" #include #include #include GWEN_RINGBUFFER *GWEN_RingBuffer_new(unsigned int size) { GWEN_RINGBUFFER *rb; assert(size); GWEN_NEW_OBJECT(GWEN_RINGBUFFER, rb); DBG_MEM_INC("GWEN_RINGBUFFER", 0); rb->ptr=(char*)malloc(size); rb->bufferSize=size; return rb; } void GWEN_RingBuffer_free(GWEN_RINGBUFFER *rb) { if (rb) { DBG_MEM_DEC("GWEN_RINGBUFFER"); free(rb->ptr); GWEN_FREE_OBJECT(rb); } } int GWEN_RingBuffer_WriteBytes(GWEN_RINGBUFFER *rb, const char *buffer, uint32_t *size) { uint32_t psize; uint32_t bytesLeft; if ((rb->bufferSize-rb->bytesUsed)==0) { DBG_DEBUG(GWEN_LOGDOMAIN, "Buffer full"); rb->fullCounter++; return -1; } bytesLeft=*size; while(bytesLeft) { if ((rb->bufferSize-rb->bytesUsed)==0) break; if (rb->writePos>=rb->readPos) psize=rb->bufferSize-rb->writePos; else psize=rb->readPos-rb->writePos; if (psize>bytesLeft) psize=bytesLeft; memmove(rb->ptr+rb->writePos, buffer, psize); rb->writePos+=psize; if (rb->writePos>=rb->bufferSize) rb->writePos=0; rb->bytesUsed+=psize; buffer+=psize; bytesLeft-=psize; } /* while */ *size-=bytesLeft; if (rb->bytesUsed>rb->maxBytesUsed) rb->maxBytesUsed=rb->bytesUsed; return 0; } uint32_t GWEN_RingBuffer_GetMaxUnsegmentedRead(GWEN_RINGBUFFER *rb) { uint32_t psize; assert(rb); if (rb->bytesUsed==0) { DBG_DEBUG(GWEN_LOGDOMAIN, "Buffer empty"); rb->emptyCounter++; return 0; } if (rb->readPos>=rb->writePos) psize=rb->bufferSize-rb->readPos; else psize=rb->writePos-rb->readPos; return psize; } uint32_t GWEN_RingBuffer_GetMaxUnsegmentedWrite(GWEN_RINGBUFFER *rb) { uint32_t psize; assert(rb); if ((rb->bufferSize-rb->bytesUsed)==0) { DBG_DEBUG(GWEN_LOGDOMAIN, "Buffer full"); rb->fullCounter++; return 0; } if (rb->writePos>=rb->readPos) psize=rb->bufferSize-rb->writePos; else psize=rb->readPos-rb->writePos; return psize; } void GWEN_RingBuffer_SkipBytesRead(GWEN_RINGBUFFER *rb, uint32_t psize) { assert(rb); if (rb->bytesUsedreadPos+=psize; if (rb->readPos>=rb->bufferSize) rb->readPos=0; rb->bytesUsed-=psize; rb->throughput+=psize; } void GWEN_RingBuffer_SkipBytesWrite(GWEN_RINGBUFFER *rb, uint32_t psize) { assert(rb); if ((rb->bufferSize-rb->bytesUsed)writePos+=psize; if (rb->writePos>=rb->bufferSize) rb->writePos=0; rb->bytesUsed+=psize; if (rb->bytesUsed>rb->maxBytesUsed) rb->maxBytesUsed=rb->bytesUsed; } int GWEN_RingBuffer_ReadBytes(GWEN_RINGBUFFER *rb, char *buffer, uint32_t *size) { uint32_t psize; uint32_t bytesLeft; if (rb->bytesUsed==0) { DBG_DEBUG(GWEN_LOGDOMAIN, "Buffer empty"); rb->emptyCounter++; return -1; } bytesLeft=*size; while(bytesLeft) { if (rb->bytesUsed==0) break; if (rb->readPos>=rb->writePos) psize=rb->bufferSize-rb->readPos; else psize=rb->writePos-rb->readPos; if (psize>bytesLeft) psize=bytesLeft; memmove(buffer, rb->ptr+rb->readPos, psize); rb->readPos+=psize; if (rb->readPos>=rb->bufferSize) rb->readPos=0; rb->bytesUsed-=psize; buffer+=psize; bytesLeft-=psize; } /* while */ *size-=bytesLeft; rb->throughput+=*size; return 0; } uint32_t GWEN_RingBuffer_GetUsedBytes(const GWEN_RINGBUFFER *rb) { assert(rb); return rb->bytesUsed; } uint32_t GWEN_RingBuffer_GetBytesLeft(const GWEN_RINGBUFFER *rb) { assert(rb); return rb->bufferSize-rb->bytesUsed; } uint32_t GWEN_RingBuffer_GetBufferSize(const GWEN_RINGBUFFER *rb) { assert(rb); return rb->bufferSize; } int GWEN_RingBuffer_WriteByte(GWEN_RINGBUFFER *rb, char c) { assert(rb); if ((rb->bufferSize-rb->bytesUsed)==0) { DBG_DEBUG(GWEN_LOGDOMAIN, "Buffer full"); rb->fullCounter++; return -1; } rb->ptr[rb->writePos]=c; rb->writePos++; if (rb->writePos>=rb->bufferSize) rb->writePos=0; rb->bytesUsed++; if (rb->bytesUsed>rb->maxBytesUsed) rb->maxBytesUsed=rb->bytesUsed; return 0; } int GWEN_RingBuffer_ReadByte(GWEN_RINGBUFFER *rb) { int c; assert(rb); if (rb->bytesUsed==0) { DBG_DEBUG(GWEN_LOGDOMAIN, "Buffer empty"); rb->emptyCounter++; return -1; } c=(unsigned char)rb->ptr[rb->readPos]; rb->readPos++; if (rb->readPos>=rb->bufferSize) rb->readPos=0; rb->bytesUsed--; rb->throughput++; return c; } uint32_t GWEN_RingBuffer_GetMaxUsedBytes(const GWEN_RINGBUFFER *rb) { assert(rb); return rb->maxBytesUsed; } void GWEN_RingBuffer_ResetMaxUsedBytes(GWEN_RINGBUFFER *rb) { assert(rb); rb->maxBytesUsed=0; } uint32_t GWEN_RingBuffer_GetThroughput(GWEN_RINGBUFFER *rb) { assert(rb); return rb->throughput; } void GWEN_RingBuffer_ResetThroughput(GWEN_RINGBUFFER *rb) { assert(rb); rb->throughput=0; } uint32_t GWEN_RingBuffer_GetFullCounter(const GWEN_RINGBUFFER *rb) { assert(rb); return rb->fullCounter; } void GWEN_RingBuffer_ResetFullCounter(GWEN_RINGBUFFER *rb) { assert(rb); rb->fullCounter=0; } uint32_t GWEN_RingBuffer_GetEmptyCounter(const GWEN_RINGBUFFER *rb) { assert(rb); return rb->emptyCounter; } void GWEN_RingBuffer_ResetEmptyCounter(GWEN_RINGBUFFER *rb) { assert(rb); rb->emptyCounter=0; } const char *GWEN_RingBuffer_GetReadPointer(const GWEN_RINGBUFFER *rb) { assert(rb); return rb->ptr+rb->readPos; } char *GWEN_RingBuffer_GetWritePointer(const GWEN_RINGBUFFER *rb) { assert(rb); return rb->ptr+rb->writePos; } void GWEN_RingBuffer_Reset(GWEN_RINGBUFFER *rb) { assert(rb); rb->readPos=0; rb->writePos=0; rb->bytesUsed=0; rb->maxBytesUsed=0; rb->emptyCounter=0; rb->fullCounter=0; rb->throughput=0; } gwenhywfar-4.15.2beta/src/base/list2.h0000644000175000017500000003351512416477066014474 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sat Jun 28 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /** @file list2.h * * @short This file contains some macros concerning lists. * */ #ifndef GWENHYWFAR_LIST2_H #define GWENHYWFAR_LIST2_H #include #include #include #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif /* * This macro should be used in libraries with the * __declspec(dllexport) declaration as the @c decl argument. */ #define GWEN_LIST2_FUNCTION_LIB_DEFS(t, pr, decl) \ typedef struct t##_LIST2 t##_LIST2; \ typedef struct t##_LIST2_ITERATOR t##_LIST2_ITERATOR; \ typedef t* (t##_LIST2_FOREACH)(t *element, void *user_data); \ \ decl t##_LIST2 *pr##_List2_new(void); \ decl void pr##_List2_free(t##_LIST2 *l); \ decl t##_LIST2 *pr##_List2_dup(const t##_LIST2 *l); \ decl void pr##_List2_Unshare(t##_LIST2 *l); \ decl void pr##_List2_Dump(t##_LIST2 *l, FILE *f, unsigned int indent); \ decl void pr##_List2_PushBack(t##_LIST2 *l, t *p); \ decl void pr##_List2_PushFront(t##_LIST2 *l, t *p); \ decl t *pr##_List2_GetFront(const t##_LIST2 *l); \ decl t *pr##_List2_GetBack(const t##_LIST2 *l); \ decl void pr##_List2_Erase(t##_LIST2 *l, t##_LIST2_ITERATOR *it); \ decl void pr##_List2_Remove(t##_LIST2 *l, const t *p); \ decl unsigned int pr##_List2_GetSize(const t##_LIST2 *l); \ decl int pr##_List2_IsEmpty(const t##_LIST2 *l); \ decl void pr##_List2_PopBack(t##_LIST2 *l); \ decl void pr##_List2_PopFront(t##_LIST2 *l); \ decl void pr##_List2_Clear(t##_LIST2 *l); \ decl t##_LIST2_ITERATOR *pr##_List2_First(const t##_LIST2 *l); \ decl t##_LIST2_ITERATOR *pr##_List2_Last(const t##_LIST2 *l); \ decl t##_LIST2_ITERATOR *pr##_List2Iterator_new(t##_LIST2 *l); \ decl void pr##_List2Iterator_free(t##_LIST2_ITERATOR *li); \ decl t *pr##_List2Iterator_Previous(t##_LIST2_ITERATOR *li); \ decl t *pr##_List2Iterator_Next(t##_LIST2_ITERATOR *li); \ decl t *pr##_List2Iterator_Data(t##_LIST2_ITERATOR *li); \ decl void pr##_List2Iterator_IncLinkCount(t##_LIST2_ITERATOR *li); \ decl unsigned int pr##_List2Iterator_GetLinkCount(const t##_LIST2_ITERATOR *li); \ decl t##_LIST2_ITERATOR *pr##_List2_FindIter(t##_LIST2 *l, const t *p); \ decl const t *pr##_List2_Contains(t##_LIST2 *l, const t *p); \ decl t *pr##_List2_ForEach(t##_LIST2 *l, t##_LIST2_FOREACH, void *user_data); /** This macro should be used in applications, not in libraries. In * libraries please use the macro @ref GWEN_LIST2_FUNCTION_LIB_DEFS. */ #define GWEN_LIST2_FUNCTION_DEFS(t, pr) \ GWEN_LIST2_FUNCTION_LIB_DEFS(t, pr, GWEN_DUMMY_EMPTY_ARG) /** This macro actually implements the functions. Please use it in your * source file (*.c) after the includes. */ #define GWEN_LIST2_FUNCTIONS(t, pr) \ t##_LIST2 *pr##_List2_new(void) { \ return (t##_LIST2*)GWEN_List_new(); \ } \ \ void pr##_List2_free(t##_LIST2 *l) { \ GWEN_List_free((GWEN_LIST*)l); \ } \ \ t##_LIST2 *pr##_List2_dup(const t##_LIST2 *l) {\ return (t##_LIST2*)GWEN_List_dup((const GWEN_LIST*)l); \ }\ \ void pr##_List2_Unshare(t##_LIST2 *l) { \ GWEN_List_Unshare((GWEN_LIST*)l); \ } \ \ void pr##_List2_Dump(t##_LIST2 *l, FILE *f, unsigned int indent) { \ GWEN_List_Dump((GWEN_LIST*) l, f, indent); \ } \ \ void pr##_List2_PushBack(t##_LIST2 *l, t *p) { \ GWEN_List_PushBack((GWEN_LIST*) l, p); \ } \ \ void pr##_List2_PushFront(t##_LIST2 *l, t *p) { \ GWEN_List_PushFront((GWEN_LIST*) l, p); \ } \ \ t *pr##_List2_GetFront(const t##_LIST2 *l) { \ return (t*) GWEN_List_GetFront((const GWEN_LIST*) l); \ }\ \ t *pr##_List2_GetBack(const t##_LIST2 *l) { \ return (t*) GWEN_List_GetBack((const GWEN_LIST*) l); \ } \ \ void pr##_List2_Erase(t##_LIST2 *l, t##_LIST2_ITERATOR *it) { \ GWEN_List_Erase((GWEN_LIST*) l, (GWEN_LIST_ITERATOR*) it); \ } \ \ void pr##_List2_Remove(t##_LIST2 *l, const t *p){ \ GWEN_List_Remove((GWEN_LIST*) l, p); \ } \ \ unsigned int pr##_List2_GetSize(const t##_LIST2 *l){ \ return GWEN_List_GetSize((const GWEN_LIST*) l); \ }\ \ int pr##_List2_IsEmpty(const t##_LIST2 *l){ \ return GWEN_List_IsEmpty((const GWEN_LIST*) l); \ }\ \ void pr##_List2_PopBack(t##_LIST2 *l){ \ GWEN_List_PopBack((GWEN_LIST*) l); \ }\ \ void pr##_List2_PopFront(t##_LIST2 *l){ \ GWEN_List_PopFront((GWEN_LIST*) l); \ }\ \ void pr##_List2_Clear(t##_LIST2 *l){ \ GWEN_List_Clear((GWEN_LIST*) l); \ }\ \ \ t##_LIST2_ITERATOR *pr##_List2_First(const t##_LIST2 *l) { \ return (t##_LIST2_ITERATOR*) GWEN_List_First((const GWEN_LIST*) l); \ }\ \ t##_LIST2_ITERATOR *pr##_List2_Last(const t##_LIST2 *l) { \ return (t##_LIST2_ITERATOR*) GWEN_List_Last((const GWEN_LIST*) l); \ }\ \ t##_LIST2_ITERATOR *pr##_List2Iterator_new(t##_LIST2 *l) { \ return (t##_LIST2_ITERATOR*) GWEN_ListIterator_new((GWEN_LIST*) l); \ }\ \ void pr##_List2Iterator_free(t##_LIST2_ITERATOR *li) {\ GWEN_ListIterator_free((GWEN_LIST_ITERATOR*)li); \ } \ \ t *pr##_List2Iterator_Previous(t##_LIST2_ITERATOR *li) { \ return (t*) GWEN_ListIterator_Previous((GWEN_LIST_ITERATOR*)li); \ }\ \ t *pr##_List2Iterator_Next(t##_LIST2_ITERATOR *li) { \ return (t*) GWEN_ListIterator_Next((GWEN_LIST_ITERATOR*)li); \ }\ \ t *pr##_List2Iterator_Data(t##_LIST2_ITERATOR *li) { \ return (t*) GWEN_ListIterator_Data((GWEN_LIST_ITERATOR*)li); \ } \ \ void pr##_List2Iterator_IncLinkCount(t##_LIST2_ITERATOR *li) { \ GWEN_ListIterator_IncLinkCount((GWEN_LIST_ITERATOR*)li); \ } \ \ unsigned int pr##_List2Iterator_GetLinkCount(const t##_LIST2_ITERATOR *li){\ return GWEN_ListIterator_GetLinkCount((const GWEN_LIST_ITERATOR*)li); \ } \ \ t##_LIST2_ITERATOR *pr##_List2_FindIter(t##_LIST2 *l, const t *p){ \ return (t##_LIST2_ITERATOR*) GWEN_List_FindIter((GWEN_LIST *)l, p); \ } \ \ const t *pr##_List2_Contains(t##_LIST2 *l, const t *p){ \ return (const t*) GWEN_List_Contains((GWEN_LIST*)l, p); \ } \ \ t *pr##_List2_ForEach(t##_LIST2 *l, t##_LIST2_FOREACH fn, void *user_data){ \ t##_LIST2_ITERATOR *it; \ t *el; \ if (!l) return 0; \ \ it=pr##_List2_First(l); \ if (!it) \ return 0; \ el=pr##_List2Iterator_Data(it); \ while(el) { \ el=fn(el, user_data); \ if (el) { \ pr##_List2Iterator_free(it); \ return el; \ } \ el=pr##_List2Iterator_Next(it); \ } \ pr##_List2Iterator_free(it); \ return 0; \ } /* * This macro should be used in libraries with the * __declspec(dllexport) declaration as the @c decl argument. */ #define GWEN_CONSTLIST2_FUNCTION_LIB_DEFS(t, pr, decl) \ typedef struct t##_CONSTLIST2 t##_CONSTLIST2; \ typedef struct t##_CONSTLIST2_ITERATOR t##_CONSTLIST2_ITERATOR; \ typedef const t* (t##_CONSTLIST2_FOREACH)(const t *element, void *user_data); \ \ decl t##_CONSTLIST2 *pr##_ConstList2_new(void); \ decl void pr##_ConstList2_free(t##_CONSTLIST2 *l); \ decl void pr##_ConstList2_PushBack(t##_CONSTLIST2 *l, const t *p); \ decl void pr##_ConstList2_PushFront(t##_CONSTLIST2 *l, const t *p); \ decl const t *pr##_ConstList2_GetFront(const t##_CONSTLIST2 *l); \ decl const t *pr##_ConstList2_GetBack(const t##_CONSTLIST2 *l); \ decl unsigned int pr##_ConstList2_GetSize(const t##_CONSTLIST2 *l); \ decl int pr##_ConstList2_IsEmpty(const t##_CONSTLIST2 *l); \ decl void pr##_ConstList2_PopBack(t##_CONSTLIST2 *l); \ decl void pr##_ConstList2_PopFront(t##_CONSTLIST2 *l); \ decl void pr##_ConstList2_Clear(t##_CONSTLIST2 *l); \ decl t##_CONSTLIST2_ITERATOR *pr##_ConstList2_First(const t##_CONSTLIST2 *l); \ decl t##_CONSTLIST2_ITERATOR *pr##_ConstList2_Last(const t##_CONSTLIST2 *l); \ decl t##_CONSTLIST2_ITERATOR *pr##_ConstList2Iterator_new(t##_CONSTLIST2 *l); \ decl void pr##_ConstList2Iterator_free(t##_CONSTLIST2_ITERATOR *li); \ decl const t *pr##_ConstList2Iterator_Previous(t##_CONSTLIST2_ITERATOR *li); \ decl const t *pr##_ConstList2Iterator_Next(t##_CONSTLIST2_ITERATOR *li); \ decl const t *pr##_ConstList2Iterator_Data(t##_CONSTLIST2_ITERATOR *li); \ decl t##_CONSTLIST2_ITERATOR *pr##_ConstList2_FindIter(t##_CONSTLIST2 *l, const t *p); \ decl const t *pr##_ConstList2_Contains(t##_CONSTLIST2 *l, const t *p); \ decl void pr##_ConstList2_Remove(t##_CONSTLIST2 *l, const t *p); \ decl const t *pr##_ConstList2_ForEach(t##_CONSTLIST2 *l, t##_CONSTLIST2_FOREACH, void *user_data); /* This macro should be used in applications, not in libraries. In * libraries please use the macro @ref * GWEN_CONSTLIST2_FUNCTION_LIB_DEFS. */ #define GWEN_CONSTLIST2_FUNCTION_DEFS(t, pr) \ GWEN_CONSTLIST2_FUNCTION_LIB_DEFS(t, pr, GWEN_DUMMY_EMPTY_ARG) #define GWEN_CONSTLIST2_FUNCTIONS(t, pr) \ t##_CONSTLIST2 *pr##_ConstList2_new(void) { \ return (t##_CONSTLIST2*)GWEN_ConstList_new(); \ } \ \ void pr##_ConstList2_free(t##_CONSTLIST2 *l) { \ GWEN_ConstList_free((GWEN_CONSTLIST*)l); \ } \ \ void pr##_ConstList2_PushBack(t##_CONSTLIST2 *l, const t *p) { \ GWEN_ConstList_PushBack((GWEN_CONSTLIST*) l, p); \ } \ \ void pr##_ConstList2_PushFront(t##_CONSTLIST2 *l, const t *p) { \ GWEN_ConstList_PushFront((GWEN_CONSTLIST*) l, p); \ } \ \ const t *pr##_ConstList2_GetFront(const t##_CONSTLIST2 *l) { \ return (t*) GWEN_ConstList_GetFront((const GWEN_CONSTLIST*) l); \ }\ \ const t *pr##_ConstList2_GetBack(const t##_CONSTLIST2 *l) { \ return (t*) GWEN_ConstList_GetBack((const GWEN_CONSTLIST*) l); \ } \ \ \ unsigned int pr##_ConstList2_GetSize(const t##_CONSTLIST2 *l){ \ return GWEN_ConstList_GetSize((const GWEN_CONSTLIST*) l); \ }\ \ int pr##_ConstList2_IsEmpty(const t##_CONSTLIST2 *l){ \ return GWEN_ConstList_IsEmpty((const GWEN_CONSTLIST*) l); \ }\ \ void pr##_ConstList2_PopBack(t##_CONSTLIST2 *l){ \ GWEN_ConstList_PopBack((GWEN_CONSTLIST*) l); \ }\ \ void pr##_ConstList2_PopFront(t##_CONSTLIST2 *l){ \ GWEN_ConstList_PopFront((GWEN_CONSTLIST*) l); \ }\ \ void pr##_ConstList2_Clear(t##_CONSTLIST2 *l){ \ GWEN_ConstList_Clear((GWEN_CONSTLIST*) l); \ }\ \ \ t##_CONSTLIST2_ITERATOR *pr##_ConstList2_First(const t##_CONSTLIST2 *l) { \ return (t##_CONSTLIST2_ITERATOR*) GWEN_ConstList_First((const GWEN_CONSTLIST*) l); \ }\ \ t##_CONSTLIST2_ITERATOR *pr##_ConstList2_Last(const t##_CONSTLIST2 *l) { \ return (t##_CONSTLIST2_ITERATOR*) GWEN_ConstList_Last((const GWEN_CONSTLIST*) l); \ }\ \ t##_CONSTLIST2_ITERATOR *pr##_ConstList2Iterator_new(t##_CONSTLIST2 *l) { \ return (t##_CONSTLIST2_ITERATOR*) GWEN_ConstListIterator_new((GWEN_CONSTLIST*) l); \ }\ \ void pr##_ConstList2Iterator_free(t##_CONSTLIST2_ITERATOR *li) {\ GWEN_ConstListIterator_free((GWEN_CONSTLIST_ITERATOR*)li); \ } \ \ const t *pr##_ConstList2Iterator_Previous(t##_CONSTLIST2_ITERATOR *li) { \ return (t*) GWEN_ConstListIterator_Previous((GWEN_CONSTLIST_ITERATOR*)li); \ }\ \ const t *pr##_ConstList2Iterator_Next(t##_CONSTLIST2_ITERATOR *li) { \ return (t*) GWEN_ConstListIterator_Next((GWEN_CONSTLIST_ITERATOR*)li); \ }\ \ const t *pr##_ConstList2Iterator_Data(t##_CONSTLIST2_ITERATOR *li) { \ return (t*) GWEN_ConstListIterator_Data((GWEN_CONSTLIST_ITERATOR*)li); \ } \ \ t##_CONSTLIST2_ITERATOR *pr##_ConstList2_FindIter(t##_CONSTLIST2 *l, const t *p){ \ return (t##_CONSTLIST2_ITERATOR*) GWEN_ConstList_FindIter((GWEN_CONSTLIST *)l, p); \ } \ \ const t *pr##_ConstList2_Contains(t##_CONSTLIST2 *l, const t *p){ \ return (const t*) GWEN_ConstList_Contains((GWEN_CONSTLIST*)l, p); \ } \ \ void pr##_ConstList2_Remove(t##_CONSTLIST2 *l, const t *p){ \ GWEN_ConstList_Remove((GWEN_CONSTLIST*) l, p); \ } \ \ const t *pr##_ConstList2_ForEach(t##_CONSTLIST2 *l, t##_CONSTLIST2_FOREACH fn, void *user_data){ \ t##_CONSTLIST2_ITERATOR *it; \ const t *el; \ if (!l) return 0; \ \ it=pr##_ConstList2_First(l); \ if (!it) \ return 0; \ el=pr##_ConstList2Iterator_Data(it); \ while(el) { \ el=fn(el, user_data); \ if (el) { \ pr##_ConstList2Iterator_free(it); \ return el; \ } \ el=pr##_ConstList2Iterator_Next(it); \ } \ pr##_ConstList2Iterator_free(it); \ return 0; \ } #ifdef __cplusplus } #endif #endif /* GWENHYWFAR_LIST2_H */ gwenhywfar-4.15.2beta/src/base/idmap.h0000644000175000017500000002376312416477066014535 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_IDMAP_H #define GWENHYWFAR_IDMAP_H #include #include #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_IDMAP GWEN_IDMAP; typedef enum { GWEN_IdMapResult_Ok=0, GWEN_IdMapResult_NoFit, GWEN_IdMapResult_NotFound } GWEN_IDMAP_RESULT; typedef enum { GWEN_IdMapAlgo_Unknown=0, GWEN_IdMapAlgo_Hex4 } GWEN_IDMAP_ALGO; /** @name Macros for Typesafe ID maps * */ /*@{*/ #ifndef GWEN_DUMMY_EMPTY_ARG /** Necessary for MSVC compiler because it does not accept a left-out macro argument. */ # define GWEN_DUMMY_EMPTY_ARG #endif #define GWEN_IDMAP_FUNCTION_LIB_DEFS(t, pr, decl) \ typedef GWEN_IDMAP t##_IDMAP; \ \ decl t##_IDMAP *pr##_IdMap_new(GWEN_IDMAP_ALGO algo); \ decl void pr##_IdMap_free(t##_IDMAP *l); \ decl void pr##_IdMap_freeAll(t##_IDMAP *l); \ decl void pr##_IdMap_FreeItems(t##_IDMAP *l); \ decl GWEN_IDMAP_RESULT pr##_IdMap_Insert(t##_IDMAP *l, \ uint32_t id, \ t* ptr); \ decl GWEN_IDMAP_RESULT pr##_IdMap_Remove(t##_IDMAP *l, \ uint32_t id); \ decl t* pr##_IdMap_Find(t##_IDMAP *l, uint32_t id); \ decl GWEN_IDMAP_RESULT pr##_IdMap_GetFirst(const t##_IDMAP *map, \ uint32_t *pid); \ decl GWEN_IDMAP_RESULT pr##_IdMap_GetNext(const t##_IDMAP *map, \ uint32_t *pid); \ decl uint32_t pr##_IdMap_GetSize(const GWEN_IDMAP *map); \ decl void pr##_IdMap_Clear(GWEN_IDMAP *l); #define GWEN_IDMAP_FUNCTION_DEFS(t, pr) \ GWEN_IDMAP_FUNCTION_LIB_DEFS(t, pr, GWEN_DUMMY_EMPTY_ARG) #define GWEN_IDMAP_FUNCTIONS(t, pr) \ t##_IDMAP *pr##_IdMap_new(GWEN_IDMAP_ALGO algo) { \ return (t##_IDMAP*)GWEN_IdMap_new(algo); \ } \ \ void pr##_IdMap_free(t##_IDMAP *l) { \ GWEN_IdMap_free((GWEN_IDMAP*)l); \ } \ \ void pr##_IdMap_freeAll(t##_IDMAP *l) { \ GWEN_IDMAP_RESULT res; \ uint32_t id; \ \ res=pr##_IdMap_GetFirst(l, &id); \ while(res==GWEN_IdMapResult_Ok) { \ uint32_t nextId; \ t *ptr; \ \ nextId=id; \ res=pr##_IdMap_GetNext(l, &nextId); \ ptr=pr##_IdMap_Find(l, id); \ if (ptr) \ pr##_free(ptr); \ id=nextId; \ } \ pr##_IdMap_free(l); \ } \ \ void pr##_IdMap_FreeItems(t##_IDMAP *l) { \ GWEN_IDMAP_RESULT res; \ uint32_t id; \ \ res=pr##_IdMap_GetFirst(l, &id); \ while(res==GWEN_IdMapResult_Ok) { \ uint32_t nextId; \ t *ptr; \ \ nextId=id; \ res=pr##_IdMap_GetNext(l, &nextId); \ ptr=pr##_IdMap_Find(l, id); \ if (ptr) \ pr##_free(ptr); \ pr##_IdMap_Remove(l, id); \ id=nextId; \ } \ } \ \ GWEN_IDMAP_RESULT pr##_IdMap_Insert(t##_IDMAP *l, \ uint32_t id, \ t* ptr) { \ return GWEN_IdMap_Insert((GWEN_IDMAP*)l, id, (void*) ptr); \ } \ \ GWEN_IDMAP_RESULT pr##_IdMap_Remove(t##_IDMAP *l, \ uint32_t id){ \ return GWEN_IdMap_Remove((GWEN_IDMAP*)l, id); \ } \ \ t* pr##_IdMap_Find(t##_IDMAP *l, uint32_t id) { \ return GWEN_IdMap_Find((GWEN_IDMAP*)l, id); \ } \ \ GWEN_IDMAP_RESULT pr##_IdMap_GetFirst(const t##_IDMAP *l, \ uint32_t *pid) { \ return GWEN_IdMap_GetFirst((const GWEN_IDMAP*)l, pid); \ } \ \ GWEN_IDMAP_RESULT pr##_IdMap_GetNext(const t##_IDMAP *l, \ uint32_t *pid) { \ return GWEN_IdMap_GetNext((const GWEN_IDMAP*)l, pid); \ } \ \ uint32_t pr##_IdMap_GetSize(const GWEN_IDMAP *l) { \ return GWEN_IdMap_GetSize((const GWEN_IDMAP*)l); \ } \ \ void pr##_IdMap_Clear(GWEN_IDMAP *l) { \ GWEN_IdMap_Clear((GWEN_IDMAP*)l); \ } /*@}*/ GWENHYWFAR_API GWEN_IDMAP *GWEN_IdMap_new(GWEN_IDMAP_ALGO algo); GWENHYWFAR_API void GWEN_IdMap_free(GWEN_IDMAP *map); GWENHYWFAR_API GWEN_IDMAP_RESULT GWEN_IdMap_Insert(GWEN_IDMAP *map, uint32_t id, void *ptr); GWENHYWFAR_API GWEN_IDMAP_RESULT GWEN_IdMap_Remove(GWEN_IDMAP *map, uint32_t id); GWENHYWFAR_API void *GWEN_IdMap_Find(GWEN_IDMAP *map, uint32_t id); /** * Return the first id in the map. * @param map map to browse * @param pid pointer to a variable to receive the first id in the map. * Upon return this variable will be updated to the first id in the map if * the result is @ref GWEN_IdMapResult_Ok. */ GWENHYWFAR_API GWEN_IDMAP_RESULT GWEN_IdMap_GetFirst(const GWEN_IDMAP *map, uint32_t *pid); /** * Return the next id in the map. * @param map map to browse * @param pid pointer to the id retrieved via @ref GWEN_IdMap_GetFirst. * Upon return this variable will be updated to the next id in the map if * the result is @ref GWEN_IdMapResult_Ok. */ GWENHYWFAR_API GWEN_IDMAP_RESULT GWEN_IdMap_GetNext(const GWEN_IDMAP *map, uint32_t *pid); GWENHYWFAR_API uint32_t GWEN_IdMap_GetSize(const GWEN_IDMAP *map); GWENHYWFAR_API void GWEN_IdMap_Clear(GWEN_IDMAP *map); GWENHYWFAR_API void GWEN_IdMap_Dump(GWEN_IDMAP *map, FILE *f, int indent); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/base/pathmanager_p.h0000644000175000017500000000351612364015347016233 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_PATHMANAGER_P_H #define GWENHYWFAR_PATHMANAGER_P_H #include "pathmanager_l.h" #include #include #endif /* GWENHYWFAR_PATHMANAGER_P_H */ gwenhywfar-4.15.2beta/src/base/stringlist2_p.h0000644000175000017500000000403112364015347016221 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Thu Apr 03 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_STRINGLIST2_P_H #define GWENHYWFAR_STRINGLIST2_P_H #include #include #include #include #include struct GWEN_STRINGLIST2 { int senseCase; GWEN_LIST *listPtr; }; GWEN_STRINGLIST2_ITERATOR* GWEN_StringList2__GetString(const GWEN_STRINGLIST2 *sl2, const char *s); #endif gwenhywfar-4.15.2beta/src/base/inherit_p.h0000644000175000017500000000407512364015347015407 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sun Dec 05 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_INHERIT_P_H #define GWENHYWFAR_INHERIT_P_H #include #include #include struct GWEN_INHERITDATA { GWEN_LIST_ELEMENT(GWEN_INHERITDATA) /* No trailing semicolon here because this is a macro call */ uint32_t id; void *data; void *baseData; GWEN_INHERIT_FREEDATAFN freeDataFn; char *typeName; }; #endif /* GWENHYWFAR_INHERIT_P_H */ gwenhywfar-4.15.2beta/src/base/args_p.h0000644000175000017500000000412512364015347014675 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sat Apr 24 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_ARGS_P #define GWENHYWFAR_ARGS_P #include typedef enum { GWEN_ArgsElementTypeFreeParam=0, GWEN_ArgsElementTypeShort, GWEN_ArgsElementTypeLong } GWEN_ARGS_ELEMENT_TYPE; int GWEN_Args_UsageTXT(const GWEN_ARGS *args, GWEN_BUFFER *ubuf); int GWEN_Args_UsageHTML(const GWEN_ARGS *args, GWEN_BUFFER *ubuf); int GWEN_Args__AppendTXT(GWEN_BUFFER *ubuf, const char *s, unsigned int ins); #endif /* GWENHYWFAR_ARGS_P */ gwenhywfar-4.15.2beta/src/base/memory_p.h0000644000175000017500000001100012416477066015247 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sat Jun 28 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_MEMORY_P_H #define GWENHYWFAR_MEMORY_P_H #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_MEMORY__OBJECT_STRING GWEN_MEMORY__OBJECT_STRING; typedef struct GWEN_MEMORY__OBJECT GWEN_MEMORY__OBJECT; #ifdef __cplusplus } #endif #include #include #include #include #include #include #include #include #define GWEN_MEMORY_ENV_DEBUG "GWEN_MEMORY_DEBUG" #define GWEN_MEMORY_ENV_DUMP_ALL "GWEN_MEMORY_DUMP_ALL" #define GWEN_MEMORY_ENV_DOUBLE_CHECK "GWEN_MEMORY_DOUBLE_CHECK" #define GWEN_MEMORY_ENV_NO_FREE "GWEN_MEMORY_NO_FREE" #define GWEN_MEMORY_ENV_VERBOUS "GWEN_MEMORY_VERBOUS" #ifdef __cplusplus extern "C" { #endif GWEN_LIST_FUNCTION_DEFS(GWEN_MEMORY__OBJECT_STRING, GWEN_Memory__Object_String) /* No trailing semicolon here because this is a macro call */ struct GWEN_MEMORY__OBJECT_STRING { GWEN_LIST_ELEMENT(GWEN_MEMORY__OBJECT_STRING) char *text; }; GWEN_MEMORY__OBJECT_STRING* GWEN_Memory__Object_String_new(const char *s); void GWEN_Memory__Object_String_free(GWEN_MEMORY__OBJECT_STRING *s); GWEN_LIST_FUNCTION_DEFS(GWEN_MEMORY__OBJECT, GWEN_Memory__Object) struct GWEN_MEMORY__OBJECT { GWEN_LIST_ELEMENT(GWEN_MEMORY__OBJECT) void *object; size_t size; char *typeName; char *locationNew; GWEN_MEMORY__OBJECT_STRING_LIST *locationsFree; GWEN_MEMORY__OBJECT_STRING_LIST *locationsAttach; int usage; }; GWEN_MEMORY__OBJECT *GWEN_Memory__Object_new(void *ptr, size_t size, const char *typeName, const char *location); void GWEN_Memory__Object_free(GWEN_MEMORY__OBJECT *o); #define GWEN_MEMORY_MASK_INUSE 0x8000 #define GWEN_MEMORY_MASK_MALLOCED 0x4000 #define GWEN_MEMORY_MASK_LEN 0x3fff #define GWEN_MEMORY_TABLE_LEN (16*1024) #define GWEN_MEMORY_SIZELEN 2 #define GWEN_MEMORY_MAXBLOCK (GWEN_MEMORY_TABLE_LEN-GWEN_MEMORY_SIZELEN-2) #define GWEN_MEMORY_MINREMAIN 2 #define GWEN_MEMORY_EXTERNAL 0xffff #define GWEN_MEMORY_READSIZE(p) ((p)[0]+((p)[1]<<8)) #define GWEN_MEMORY_WRITESIZE(p, s) \ { (p)[0]=((s) & 0xff); (p)[1]=(((s)>>8) & 0xff);} #define GWEN_MEMORY_GETDATA(p) ((p)+GWEN_MEMORY_SIZELEN) #define GWEN_MEMORY_GETSTART(p) ((p)-GWEN_MEMORY_SIZELEN) #define GWEN_MEMORY_GRANULARITY 32 #define GWEN_MEMORY_COLLECT_AFTER (1024*1024) typedef struct GWEN_MEMORY_TABLE GWEN_MEMORY_TABLE; struct GWEN_MEMORY_TABLE { GWEN_MEMORY_TABLE *next; unsigned char data[GWEN_MEMORY_TABLE_LEN]; }; GWEN_MEMORY_TABLE *GWEN_Memory_Table_new(); void GWEN_Memory_Table_free(GWEN_MEMORY_TABLE *mt); void GWEN_Memory_Table_Append(GWEN_MEMORY_TABLE *head, GWEN_MEMORY_TABLE *mt); void GWEN_Memory_Table__Dump(GWEN_MEMORY_TABLE *mt); void GWEN_Memory_Table__Collect(GWEN_MEMORY_TABLE *mt); #ifdef __cplusplus } #endif #endif /* GWENHYWFAR_MEMORY_P_H */ gwenhywfar-4.15.2beta/src/base/inherit.c0000644000175000017500000001227712416477066015076 00000000000000/*************************************************************************** begin : Sun Dec 05 2003 copyright : (C) 2003-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "inherit_p.h" #include #include #include #include GWEN_LIST_FUNCTIONS(GWEN_INHERITDATA, GWEN_InheritData) GWEN_INHERITDATA *GWEN_InheritData_new(const char *t, uint32_t id, void *data, void *baseData, GWEN_INHERIT_FREEDATAFN freeDataFn) { GWEN_INHERITDATA *d; assert(t); GWEN_NEW_OBJECT(GWEN_INHERITDATA, d); GWEN_LIST_INIT(GWEN_INHERITDATA, d); d->typeName=strdup(t); d->id=id; d->data=data; d->baseData=baseData; d->freeDataFn=freeDataFn; DBG_VERBOUS(GWEN_LOGDOMAIN, "Created inheritance for type \"%s\" (%08x)", t, id); return d; } void GWEN_InheritData_free(GWEN_INHERITDATA *d) { if (d) { if (d->freeDataFn) d->freeDataFn(d->baseData, d->data); free(d->typeName); GWEN_LIST_FINI(GWEN_INHERITDATA, d); GWEN_FREE_OBJECT(d); } } void GWEN_InheritData_freeData(GWEN_INHERITDATA *d) { if (d) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Freeing data for type \"%s\"", d->typeName); if (d->freeDataFn) d->freeDataFn(d->baseData, d->data); d->freeDataFn=NULL; d->data=NULL; } } void GWEN_InheritData_clear(GWEN_INHERITDATA *d) { assert(d); d->freeDataFn=0; d->data=0; } const char *GWEN_InheritData_GetTypeName(const GWEN_INHERITDATA *d) { assert(d); return d->typeName; } uint32_t GWEN_InheritData_GetId(const GWEN_INHERITDATA *d) { assert(d); return d->id; } void *GWEN_InheritData_GetData(const GWEN_INHERITDATA *d) { assert(d); return d->data; } GWEN_INHERIT_FREEDATAFN GWEN_InheritData_GetFreeDataFn(const GWEN_INHERITDATA *d) { assert(d); return d->freeDataFn; } uint32_t GWEN_Inherit_MakeId(const char *typeName) { unsigned int i, j; uint32_t result; result=0; j=strlen(typeName); for (i=0; i>24)&0xff); result=tmpResult|c; result^=(unsigned char)(typeName[i]); } DBG_VERBOUS(GWEN_LOGDOMAIN, "Id for type \"%s\" is \"%08x\"", typeName, result); return result; } void *GWEN_Inherit_FindData(GWEN_INHERITDATA_LIST *l, uint32_t id, int wantCreate) { GWEN_INHERITDATA *ih; assert(l); DBG_VERBOUS(GWEN_LOGDOMAIN, "Searching for inheritance id \"%08x\"", id); ih=GWEN_InheritData_List_First(l); while(ih) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Checking type \"%s\" (%08x) against %08x", ih->typeName, ih->id, id); if (ih->id==id) return ih->data; ih=GWEN_InheritData_List_Next(ih); } /* while */ if (!wantCreate) { DBG_WARN(GWEN_LOGDOMAIN, "Type \"%08x\" not derived from this base type", id); } return 0; } GWEN_INHERITDATA *GWEN_Inherit_FindEntry(GWEN_INHERITDATA_LIST *l, uint32_t id, int wantCreate) { GWEN_INHERITDATA *ih; assert(l); DBG_VERBOUS(GWEN_LOGDOMAIN, "Searching for inheritance id \"%08x\"", id); ih=GWEN_InheritData_List_First(l); while(ih) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Checking type \"%s\" (%08x) against %08x", ih->typeName, ih->id, id); if (ih->id==id) return ih; ih=GWEN_InheritData_List_Next(ih); } /* while */ if (!wantCreate) { DBG_WARN(GWEN_LOGDOMAIN, "Type \"%08x\" not derived from this base type", id); } return 0; } gwenhywfar-4.15.2beta/src/base/stringlist2.c0000644000175000017500000002614612416477066015720 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Thu Apr 03 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include #include #include "stringlist2_p.h" #include "debug.h" #include #include #include #ifdef HAVE_STRINGS_H # include #endif GWEN_STRINGLIST2 *GWEN_StringList2_new(void) { GWEN_STRINGLIST2 *sl2; GWEN_REFPTR_INFO *rpi; GWEN_NEW_OBJECT(GWEN_STRINGLIST2, sl2); rpi=GWEN_RefPtrInfo_new(); GWEN_RefPtrInfo_SetFreeFn(rpi, (GWEN_REFPTR_INFO_FREE_FN)free); sl2->listPtr=GWEN_List_new(); GWEN_List_SetRefPtrInfo(sl2->listPtr, rpi); GWEN_RefPtrInfo_free(rpi); return sl2; } void GWEN_StringList2_free(GWEN_STRINGLIST2 *sl2) { if (sl2) { GWEN_List_free(sl2->listPtr); GWEN_FREE_OBJECT(sl2); } } GWEN_STRINGLIST2 *GWEN_StringList2_dup(GWEN_STRINGLIST2 *sl2) { GWEN_STRINGLIST2 *nsl2; GWEN_NEW_OBJECT(GWEN_STRINGLIST2, nsl2); nsl2->listPtr=GWEN_List_dup(sl2->listPtr); nsl2->senseCase=sl2->senseCase; return nsl2; } int GWEN_StringList2_toDb(GWEN_STRINGLIST2 *sl2, GWEN_DB_NODE *db, const char *name) { GWEN_DB_DeleteVar(db, name); if (sl2) { GWEN_STRINGLIST2_ITERATOR *it; it=GWEN_StringList2_First(sl2); if (it) { const char *s; s=GWEN_StringList2Iterator_Data(it); while(s) { int rv; rv=GWEN_DB_SetCharValue(db, 0, name, s); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } s=GWEN_StringList2Iterator_Next(it); } GWEN_StringList2Iterator_free(it); } } return 0; } GWEN_STRINGLIST2 *GWEN_StringList2_fromDb(GWEN_DB_NODE *db, const char *name, GWEN_STRINGLIST2_INSERTMODE m) { GWEN_STRINGLIST2 *sl2; int i; sl2=GWEN_StringList2_new(); for (i=0; ; i++) { const char *s; s=GWEN_DB_GetCharValue(db, name, i, NULL); if (!s) break; GWEN_StringList2_AppendString(sl2, s, 0, m); } return sl2; } int GWEN_StringList2_toXml(GWEN_STRINGLIST2 *sl2, GWEN_XMLNODE *node) { GWEN_STRINGLIST2_ITERATOR *it; it=GWEN_StringList2_First(sl2); if (it) { const char *s; s=GWEN_StringList2Iterator_Data(it); while(s) { GWEN_XMLNode_SetCharValue(node, "elem", s); s=GWEN_StringList2Iterator_Next(it); } GWEN_StringList2Iterator_free(it); } return 0; } GWEN_STRINGLIST2 *GWEN_StringList2_fromXml(GWEN_XMLNODE *node, GWEN_STRINGLIST2_INSERTMODE m) { GWEN_STRINGLIST2 *sl2; GWEN_XMLNODE *n; sl2=GWEN_StringList2_new(); n=GWEN_XMLNode_GetFirstTag(node); while(n) { GWEN_XMLNODE *dn; dn=GWEN_XMLNode_GetFirstData(n); if (dn) { const char *s; s=GWEN_XMLNode_GetData(dn); if (s) { GWEN_StringList2_AppendString(sl2, s, 0, m); } } n=GWEN_XMLNode_GetNextTag(n); } return sl2; } void GWEN_StringList2_SetSenseCase(GWEN_STRINGLIST2 *sl2, int i) { assert(sl2); sl2->senseCase=i; } int GWEN_StringList2_AppendString(GWEN_STRINGLIST2 *sl2, const char *s, int take, GWEN_STRINGLIST2_INSERTMODE m) { GWEN_REFPTR *rp; assert(sl2); assert(s); if (m!=GWEN_StringList2_IntertMode_AlwaysAdd) { GWEN_STRINGLIST2_ITERATOR *it; it=GWEN_StringList2__GetString(sl2, s); if (it) { if (m==GWEN_StringList2_IntertMode_NoDouble) { if (take) free((void*)s); GWEN_StringList2Iterator_free(it); return 0; } if (m==GWEN_StringList2_IntertMode_Reuse) { GWEN_ListIterator_IncLinkCount((GWEN_LIST_ITERATOR*)it); if (take) free((void*)s); GWEN_StringList2Iterator_free(it); return 0; } GWEN_StringList2Iterator_free(it); } } if (take) rp=GWEN_RefPtr_new((void*)s, GWEN_List_GetRefPtrInfo(sl2->listPtr)); else rp=GWEN_RefPtr_new(strdup(s), GWEN_List_GetRefPtrInfo(sl2->listPtr)); GWEN_RefPtr_AddFlags(rp, GWEN_REFPTR_FLAGS_AUTODELETE); GWEN_List_PushBackRefPtr(sl2->listPtr, rp); return 1; } int GWEN_StringList2_InsertString(GWEN_STRINGLIST2 *sl2, const char *s, int take, GWEN_STRINGLIST2_INSERTMODE m) { GWEN_REFPTR *rp; assert(sl2); assert(s); if (m!=GWEN_StringList2_IntertMode_AlwaysAdd) { GWEN_STRINGLIST2_ITERATOR *it; it=GWEN_StringList2__GetString(sl2, s); if (it) { if (m==GWEN_StringList2_IntertMode_NoDouble) { if (take) free((void*)s); GWEN_StringList2Iterator_free(it); return 0; } if (m==GWEN_StringList2_IntertMode_Reuse) { GWEN_ListIterator_IncLinkCount((GWEN_LIST_ITERATOR*)it); if (take) free((void*)s); GWEN_StringList2Iterator_free(it); return 0; } GWEN_StringList2Iterator_free(it); } } if (take) rp=GWEN_RefPtr_new((void*)s, GWEN_List_GetRefPtrInfo(sl2->listPtr)); else rp=GWEN_RefPtr_new(strdup(s), GWEN_List_GetRefPtrInfo(sl2->listPtr)); GWEN_RefPtr_AddFlags(rp, GWEN_REFPTR_FLAGS_AUTODELETE); GWEN_List_PushFrontRefPtr(sl2->listPtr, rp); return 1; } int GWEN_StringList2_RemoveString(GWEN_STRINGLIST2 *sl2, const char *s) { GWEN_STRINGLIST2_ITERATOR *it; it=GWEN_StringList2__GetString(sl2, s); if (it) { int lc; lc=GWEN_ListIterator_GetLinkCount(it); GWEN_List_Erase(sl2->listPtr, it); GWEN_StringList2Iterator_free(it); if (lc<2) return 1; } return 0; } int GWEN_StringList2_HasString(const GWEN_STRINGLIST2 *sl2, const char *s) { GWEN_STRINGLIST2_ITERATOR *it; int gotIt; it=GWEN_StringList2_First(sl2); gotIt=0; if (it) { const char *t; t=GWEN_StringList2Iterator_Data(it); if (sl2->senseCase) { while(t) { if (strcmp(s, t)) { gotIt=1; break; } t=GWEN_StringList2Iterator_Next(it); } } else { while(t) { if (strcasecmp(s, t)) { gotIt=1; break; } t=GWEN_StringList2Iterator_Next(it); } } GWEN_StringList2Iterator_free(it); } return gotIt; } GWEN_STRINGLIST2_ITERATOR* GWEN_StringList2__GetString(const GWEN_STRINGLIST2 *sl2, const char *s) { GWEN_STRINGLIST2_ITERATOR *it; GWEN_REFPTR *rp; it=GWEN_StringList2_First(sl2); if (it) { rp=GWEN_ListIterator_DataRefPtr((GWEN_LIST_ITERATOR*)it); if (sl2->senseCase) { while(rp) { const char *t; t=(const char*)GWEN_RefPtr_GetData(rp); assert(t); if (strcmp(s, t)==0) return it; rp=GWEN_ListIterator_NextRefPtr((GWEN_LIST_ITERATOR*)it); } } else { while(rp) { const char *t; t=(const char*)GWEN_RefPtr_GetData(rp); assert(t); if (strcasecmp(s, t)==0) return it; rp=GWEN_ListIterator_NextRefPtr((GWEN_LIST_ITERATOR*)it); } } GWEN_StringList2Iterator_free(it); } return 0; } const char *GWEN_StringList2_GetStringAt(const GWEN_STRINGLIST2 *sl2, int idx) { GWEN_STRINGLIST2_ITERATOR *it; GWEN_REFPTR *rp; it=GWEN_StringList2_First(sl2); if (it) { rp=GWEN_ListIterator_DataRefPtr((GWEN_LIST_ITERATOR*)it); while(rp) { const char *t; t=(const char*)GWEN_RefPtr_GetData(rp); assert(t); if (idx--==0) { GWEN_StringList2Iterator_free(it); return t; } rp=GWEN_ListIterator_NextRefPtr((GWEN_LIST_ITERATOR*)it); } GWEN_StringList2Iterator_free(it); } return NULL; } GWEN_STRINGLIST2_ITERATOR *GWEN_StringList2_First(const GWEN_STRINGLIST2 *l) { assert(l); return (GWEN_STRINGLIST2_ITERATOR*) GWEN_List_First(l->listPtr); } GWEN_STRINGLIST2_ITERATOR *GWEN_StringList2_Last(const GWEN_STRINGLIST2 *l) { assert(l); return (GWEN_STRINGLIST2_ITERATOR*) GWEN_List_Last(l->listPtr); } void GWEN_StringList2Iterator_free(GWEN_STRINGLIST2_ITERATOR *li) { assert(li); GWEN_ListIterator_free((GWEN_LIST_ITERATOR*)li); } const char *GWEN_StringList2Iterator_Previous(GWEN_STRINGLIST2_ITERATOR *li) { assert(li); return (const char*) GWEN_ListIterator_Previous((GWEN_LIST_ITERATOR*)li); } const char *GWEN_StringList2Iterator_Next(GWEN_STRINGLIST2_ITERATOR *li) { assert(li); return (const char*) GWEN_ListIterator_Next((GWEN_LIST_ITERATOR*)li); } const char *GWEN_StringList2Iterator_Data(GWEN_STRINGLIST2_ITERATOR *li) { assert(li); return (const char*) GWEN_ListIterator_Data((GWEN_LIST_ITERATOR*)li); } GWEN_REFPTR* GWEN_StringList2Iterator_DataRefPtr(GWEN_STRINGLIST2_ITERATOR *li) { assert(li); return (GWEN_REFPTR*) GWEN_ListIterator_DataRefPtr((GWEN_LIST_ITERATOR*)li); } unsigned int GWEN_StringList2Iterator_GetLinkCount(const GWEN_STRINGLIST2_ITERATOR *li) { assert(li); return GWEN_ListIterator_GetLinkCount((const GWEN_LIST_ITERATOR*)li); } unsigned int GWEN_StringList2_GetCount(const GWEN_STRINGLIST2 *l) { assert(l); return GWEN_List_GetSize(l->listPtr); } void GWEN_StringList2_Dump(const GWEN_STRINGLIST2 *sl2) { GWEN_STRINGLIST2_ITERATOR *it; it=GWEN_StringList2_First(sl2); if (it) { const char *t; int i; t=GWEN_StringList2Iterator_Data(it); i=0; while(t) { fprintf(stderr, "String %d: \"%s\" [%d]\n", i, t, GWEN_StringList2Iterator_GetLinkCount(it)); t=GWEN_StringList2Iterator_Next(it); } GWEN_StringList2Iterator_free(it); } else { fprintf(stderr, "Empty string list.\n"); } } gwenhywfar-4.15.2beta/src/base/fastbuffer.c0000644000175000017500000000723612416477066015562 00000000000000/*************************************************************************** begin : Tue Apr 27 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "fastbuffer.h" #include "i18n_l.h" #include #include #include GWEN_FAST_BUFFER *GWEN_FastBuffer_new(uint32_t bsize, GWEN_SYNCIO *io) { GWEN_FAST_BUFFER *fb; assert(bsize); fb=(GWEN_FAST_BUFFER*) GWEN_Memory_malloc(sizeof(GWEN_FAST_BUFFER)+bsize); assert(fb); memset(fb, 0, sizeof(GWEN_FAST_BUFFER)+bsize); fb->bufferSize=bsize; fb->io=io; return fb; } void GWEN_FastBuffer_free(GWEN_FAST_BUFFER *fb) { if (fb) { GWEN_Memory_dealloc(fb); } } int GWEN_FastBuffer_ReadLine(GWEN_FAST_BUFFER *fb, uint8_t *p, int len) { int bytes; int copied=0; if (fb->bufferReadPos>=fb->bufferWritePos) { int rv; rv=GWEN_SyncIo_Read(fb->io, fb->buffer, fb->bufferSize); if (rv<0) { DBG_DEBUG(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } bytes=fb->bufferWritePos-fb->bufferReadPos; if (bytes>len) bytes=len; while(bytes) { uint8_t c; c=fb->buffer[fb->bufferReadPos++]; fb->bytesRead++; if (c==10) { *(p++)=c; copied++; break; } else if (c!=13) { *(p++)=c; copied++; } bytes--; } /* while */ return copied; } int GWEN_FastBuffer_ReadLineToBuffer(GWEN_FAST_BUFFER *fb, GWEN_BUFFER *buf) { int lineComplete=0; int hadSome=0; while (!lineComplete) { int bytes; int copied=0; uint8_t *p; if (fb->bufferReadPos>=fb->bufferWritePos) { int rv; rv=GWEN_SyncIo_Read(fb->io, fb->buffer, fb->bufferSize); if (rv<0) { if (rv==GWEN_ERROR_EOF && hadSome) { /* done */ return 0; } DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } else if (rv==0) { DBG_DEBUG(GWEN_LOGDOMAIN, "EOF met"); if (!hadSome) return GWEN_ERROR_EOF; lineComplete=1; /* TODO: maybe we should have a flag that indicates that we met EOF here... */ } else { fb->bufferWritePos=rv; fb->bufferReadPos=0; } } bytes=fb->bufferWritePos-fb->bufferReadPos; p=fb->buffer+fb->bufferReadPos; while(bytes) { uint8_t c; hadSome=1; c=fb->buffer[fb->bufferReadPos++]; fb->bytesRead++; bytes--; if (c==10) { lineComplete=1; /* don't include this character */ break; } else if (c==13) { break; } else { copied++; } } /* while */ if (copied) GWEN_Buffer_AppendBytes(buf, (const char*)p, copied); } return 0; } uint32_t GWEN_FastBuffer_GetFlags(const GWEN_FAST_BUFFER *fb) { assert(fb); return fb->flags; } void GWEN_FastBuffer_SetFlags(GWEN_FAST_BUFFER *fb, uint32_t fl) { assert(fb); fb->flags=fl; } void GWEN_FastBuffer_AddFlags(GWEN_FAST_BUFFER *fb, uint32_t fl) { assert(fb); fb->flags|=fl; } void GWEN_FastBuffer_SubFlags(GWEN_FAST_BUFFER *fb, uint32_t fl) { assert(fb); fb->flags&=~fl; } uint32_t GWEN_FastBuffer_GetBytesWritten(const GWEN_FAST_BUFFER *fb) { assert(fb); return fb->bytesWritten; } uint32_t GWEN_FastBuffer_GetBytesRead(const GWEN_FAST_BUFFER *fb) { assert(fb); return fb->bytesRead; } gwenhywfar-4.15.2beta/src/base/logger.c0000644000175000017500000004311212416477066014703 00000000000000/*************************************************************************** begin : Sun Dec 05 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include "logger_p.h" #include #include #include #ifdef HAVE_SYSLOG_H # include #endif #include #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_TIME_H # include #endif #ifdef HAVE_UNISTD_H # include #endif static GWEN_LOGGER_DOMAIN *gwen_loggerdomains=0; int GWEN_Logger_ModuleInit(void) { const char *s; GWEN_LOGGER_LEVEL ll=GWEN_LoggerLevel_Warning; GWEN_Logger_Open(GWEN_LOGDOMAIN, "gwen", 0, GWEN_LoggerType_Console, GWEN_LoggerFacility_User); s=getenv("GWEN_LOGLEVEL"); if (s) { ll=GWEN_Logger_Name2Level(s); if (ll==GWEN_LoggerLevel_Unknown) ll=GWEN_LoggerLevel_Warning; } GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, ll); return 0; } int GWEN_Logger_ModuleFini(void) { GWEN_LOGGER_DOMAIN *ld; while((ld=gwen_loggerdomains)) { GWEN_LoggerDomain_Del(ld); GWEN_LoggerDomain_free(ld); } return 0; } GWEN_LOGGER_DOMAIN *GWEN_LoggerDomain_new(const char *name) { GWEN_LOGGER_DOMAIN *ld; assert(name); GWEN_NEW_OBJECT(GWEN_LOGGER_DOMAIN, ld); ld->name=strdup(name); return ld; } void GWEN_LoggerDomain_free(GWEN_LOGGER_DOMAIN *ld) { if (ld) { free(ld->name); GWEN_Logger_free(ld->logger); GWEN_FREE_OBJECT(ld); } } GWEN_LOGGER_DOMAIN *GWEN_LoggerDomain_Find(const char *name) { GWEN_LOGGER_DOMAIN *ld; assert(name); ld=gwen_loggerdomains; while(ld) { if (strcasecmp(ld->name, name)==0) break; ld=ld->next; } return ld; } void GWEN_LoggerDomain_Add(GWEN_LOGGER_DOMAIN *ld) { assert(ld); GWEN_LIST_INSERT(GWEN_LOGGER_DOMAIN, ld, &gwen_loggerdomains); } void GWEN_LoggerDomain_Del(GWEN_LOGGER_DOMAIN *ld) { assert(ld); GWEN_LIST_DEL(GWEN_LOGGER_DOMAIN, ld, &gwen_loggerdomains); } GWEN_LOGGER *GWEN_LoggerDomain_GetLogger(const char *name) { GWEN_LOGGER_DOMAIN *ld; if (!name) name="default"; ld=GWEN_LoggerDomain_Find(name); if (ld) { return ld->logger; } ld=GWEN_LoggerDomain_new(name); ld->logger=GWEN_Logger_new(ld); GWEN_LoggerDomain_Add(ld); return ld->logger; } GWEN_LOGGER *GWEN_Logger_new(GWEN_LOGGER_DOMAIN *domain) { GWEN_LOGGER *lg; GWEN_NEW_OBJECT(GWEN_LOGGER, lg); lg->usage=1; lg->enabled=1; lg->logType=GWEN_LoggerType_Console; lg->logLevel=GWEN_LoggerLevel_Error; lg->domain=domain; return lg; } void GWEN_Logger_free(GWEN_LOGGER *lg) { if (lg) { assert(lg->usage); if (--(lg->usage)==0) { free(lg->logFile); free(lg->logIdent); GWEN_FREE_OBJECT(lg); } } } void GWEN_Logger_Attach(GWEN_LOGGER *lg) { assert(lg); lg->usage++; } void GWEN_Logger_AddLogger(GWEN_LOGGER *oldLogger, GWEN_LOGGER *newLogger) { assert(newLogger); assert(oldLogger); GWEN_LIST_ADD(GWEN_LOGGER, newLogger, &(oldLogger->next)); } void GWEN_Logger_SetDefaultLogger(GWEN_UNUSED GWEN_LOGGER *lg) { fprintf(stderr, "GWEN_Logger_SetDefaultLogger: Deprecated function\n"); } int GWEN_Logger_Open(const char *logDomain, const char *ident, const char *file, GWEN_LOGGER_LOGTYPE logtype, GWEN_LOGGER_FACILITY facility) { GWEN_LOGGER *lg; lg=GWEN_LoggerDomain_GetLogger(logDomain); assert(lg); lg->logType=logtype; GWEN_Logger_SetIdent(logDomain, ident); GWEN_Logger_SetFilename(logDomain, file); if (logtype==GWEN_LoggerType_File) { /* logging to a file */ if (file==0) { lg->logType=GWEN_LoggerType_Console; lg->enabled=1; fprintf(stderr,"LOGGER: No filename given, will log to console.\n"); } else { lg->logType=GWEN_LoggerType_File; lg->enabled=1; } } #ifdef HAVE_SYSLOG_H else if (logtype==GWEN_LoggerType_Syslog) { /* caller wants to log via syslog */ int fac; switch(facility) { case GWEN_LoggerFacility_Auth: fac=LOG_AUTH; break; case GWEN_LoggerFacility_Daemon: fac=LOG_DAEMON; break; case GWEN_LoggerFacility_Mail: fac=LOG_MAIL; break; case GWEN_LoggerFacility_News: fac=LOG_NEWS; break; case GWEN_LoggerFacility_User: case GWEN_LoggerFacility_Unknown: default: fac=LOG_USER; break; } openlog(ident, LOG_CONS | LOG_PID, fac); lg->enabled=1; } /* if syslog */ #endif /* ifdef HAVE_SYSLOG_H */ else { /* console or function */ lg->enabled=1; } lg->open=1; return GWEN_Logger_Log(logDomain, GWEN_LoggerLevel_Debug, "started"); } void GWEN_Logger_Close(const char *logDomain) { GWEN_LOGGER *lg; lg=GWEN_LoggerDomain_GetLogger(logDomain); assert(lg); GWEN_Logger_Log(logDomain, GWEN_LoggerLevel_Debug, "stopped"); lg->logType=GWEN_LoggerType_Console; lg->enabled=0; #ifdef HAVE_SYSLOG_H closelog(); #endif lg->open=0; /* remove logdomain after it has been closed */ GWEN_LoggerDomain_Del(lg->domain); GWEN_LoggerDomain_free(lg->domain); } int GWEN_Logger_IsOpen(const char *logDomain) { GWEN_LOGGER_DOMAIN *ld; if (!logDomain) logDomain="default"; ld=GWEN_LoggerDomain_Find(logDomain); if (ld) return ld->logger->open; return 0; } int GWEN_Logger__CreateMessage(GWEN_LOGGER *lg, GWEN_LOGGER_LEVEL priority, const char *s, GWEN_BUFFER *mbuf) { #ifdef HAVE_SNPRINTF unsigned int i; #endif /* HAVE_SNPRINTF */ #ifdef HAVE_TIME_H struct tm *t; time_t tt; #endif /* HAVE_TIME_H */ char buffer[256]; assert(lg); if (lg->logIdent) { if (strlen(lg->logIdent)+32>=sizeof(buffer)) { fprintf(stderr," LOGGER: Logbuffer too small (1).\n"); return 1; } } #ifdef HAVE_TIME_H tt=time(0); t=localtime(&tt); # ifdef HAVE_SNPRINTF # ifdef HAVE_GETPID i=snprintf(buffer, sizeof(buffer)-1, "%d:%04d/%02d/%02d %02d-%02d-%02d:%s(%d):",priority, t->tm_year+1900, t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec, lg->logIdent, (int)getpid()); # else i=snprintf(buffer, sizeof(buffer)-1, "%d:%04d/%02d/%02d %02d-%02d-%02d:%s:",priority, t->tm_year+1900, t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec, lg->logIdent); # endif /* HAVE_GETPID */ if (i>=sizeof(buffer)) { fprintf(stderr," LOGGER: Logbuffer too small (2).\n"); return 1; } # else /* HAVE_SNPRINTF */ # ifdef HAVE_GETPID sprintf(buffer,"%d:%04d/%02d/%02d %02d-%02d-%02d:%s(%d):",priority, t->tm_year+1900, t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec, lg->logIdent, (int)getpid()); # else sprintf(buffer,"%d:%04d/%02d/%02d %02d-%02d-%02d:%s:",priority, t->tm_year+1900, t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec, lg->logIdent); # endif /* HAVE_GETPID */ # endif /* HAVE_SNPRINTF */ #else /* HAVE_TIME_H */ # ifdef HAVE_SNPRINTF buffer[sizeof(buffer)-1]=0; i=snprintf(buffer, sizeof(buffer)-1, "%d:%s:",priority, lg->logIdent); if (i>=sizeof(buffer)) { fprintf(stderr," LOGGER: Logbuffer too small (3).\n"); return 1; } # else /* HAVE_SNPRINTF */ sprintf(buffer,"%d:%s:",priority, lg->logIdent); # endif /* HAVE_SNPRINTF */ #endif /* HAVE_TIME_H */ GWEN_Buffer_AppendString(mbuf, buffer); GWEN_Buffer_AppendString(mbuf, s); GWEN_Buffer_AppendByte(mbuf, '\n'); return 0; } int GWEN_Logger_CreateLogMessage(const char *logDomain, GWEN_LOGGER_LEVEL priority, const char *s, GWEN_BUFFER *mbuf) { GWEN_LOGGER *lg; lg=GWEN_LoggerDomain_GetLogger(logDomain); assert(lg); return GWEN_Logger__CreateMessage(lg, priority, s, mbuf); } int GWEN_Logger__Log(GWEN_LOGGER *lg, GWEN_LOGGER_LEVEL priority, const char *s) { while(lg) { FILE *f; #ifdef HAVE_SYSLOG_H int pri; #endif /* HAVE_SYSLOG_H */ GWEN_BUFFER *mbuf; int rv; assert(lg); if (priority>lg->logLevel) /* priority too low, don't log */ return 0; mbuf=GWEN_Buffer_new(0, 256, 0, 1); switch(lg->logType) { case GWEN_LoggerType_File: rv=GWEN_Logger__CreateMessage(lg, priority, s, mbuf); if (rv) { GWEN_Buffer_free(mbuf); return rv; } f=fopen(lg->logFile,"a+"); if (f==0) { fprintf(stderr, "LOGGER: Unable to open file \"%s\" (%s)\n", lg->logFile, strerror(errno)); lg->logType=GWEN_LoggerType_Console; GWEN_Buffer_free(mbuf); return 1; } if (fwrite(GWEN_Buffer_GetStart(mbuf), GWEN_Buffer_GetUsedBytes(mbuf), 1, f)!=1) { fprintf(stderr, "LOGGER: Unable to write to file \"%s\" (%s)\n", lg->logFile, strerror(errno)); fclose(f); lg->logType=GWEN_LoggerType_Console; GWEN_Buffer_free(mbuf); return 1; } if (fclose(f)) { fprintf(stderr, "LOGGER: Unable to close file \"%s\" (%s)\n", lg->logFile, strerror(errno)); lg->logType=GWEN_LoggerType_Console; GWEN_Buffer_free(mbuf); return 1; } break; #ifdef HAVE_SYSLOG_H case GWEN_LoggerType_Syslog: switch(priority) { case GWEN_LoggerLevel_Emergency: pri=LOG_EMERG; break; case GWEN_LoggerLevel_Alert: pri=LOG_ALERT; break; case GWEN_LoggerLevel_Critical: pri=LOG_CRIT; break; case GWEN_LoggerLevel_Error: pri=LOG_ERR; break; case GWEN_LoggerLevel_Warning: pri=LOG_WARNING; break; case GWEN_LoggerLevel_Notice: pri=LOG_NOTICE; break; case GWEN_LoggerLevel_Info: pri=LOG_NOTICE; break; case GWEN_LoggerLevel_Debug: case GWEN_LoggerLevel_Verbous: case GWEN_LoggerLevel_Unknown: default: pri=LOG_DEBUG; break; } /* switch */ syslog(pri,"%s",s); break; #endif /* HAVE_SYSLOG_H */ case GWEN_LoggerType_Function: if (lg->logFunction==0) { fprintf(stderr, "LOGGER: Logtype is \"Function\", but no function is set.\n"); GWEN_Buffer_free(mbuf); return 1; } rv=GWEN_Logger__CreateMessage(lg, priority, s, mbuf); if (rv) { GWEN_Buffer_free(mbuf); return rv; } (lg->logFunction)(GWEN_Buffer_GetStart(mbuf)); break; case GWEN_LoggerType_Console: case GWEN_LoggerType_Unknown: default: rv=GWEN_Logger__CreateMessage(lg, priority, s, mbuf); if (rv) { GWEN_Buffer_free(mbuf); return rv; } fprintf(stderr, "%s", GWEN_Buffer_GetStart(mbuf)); break; } /* switch */ lg=lg->next; GWEN_Buffer_free(mbuf); } /* while lg */ return 0; } int GWEN_Logger_Log(const char *logDomain, GWEN_LOGGER_LEVEL priority, const char *s) { if (!GWEN_Gui_LogHook(logDomain, priority, s)) { const char *p; int rv; unsigned int i; GWEN_BUFFER *mbuf; GWEN_LOGGER *lg; lg=GWEN_LoggerDomain_GetLogger(logDomain); assert(lg); if (!lg->enabled) return 1; if (priority>lg->logLevel) /* priority too low, don't log */ return 0; /* temporarily disable logging to avoid endless loops */ lg->enabled=0; /* copy buffer, exchange all newlines by 0 */ mbuf=GWEN_Buffer_new(0, strlen(s)+1, 0, 1); for (i=0; ienabled=1; return rv; } else return 0; } void GWEN_Logger_Enable(const char *logDomain, int f) { GWEN_LOGGER *lg; lg=GWEN_LoggerDomain_GetLogger(logDomain); assert(lg); lg->enabled=f; } int GWEN_Logger_IsEnabled(const char *logDomain) { GWEN_LOGGER *lg; lg=GWEN_LoggerDomain_GetLogger(logDomain); assert(lg); return lg->enabled; } void GWEN_Logger_SetLevel(const char *logDomain, GWEN_LOGGER_LEVEL l) { GWEN_LOGGER *lg; lg=GWEN_LoggerDomain_GetLogger(logDomain); assert(lg); lg->logLevel=l; } int GWEN_Logger_GetLevel(const char *logDomain) { GWEN_LOGGER *lg; lg=GWEN_LoggerDomain_GetLogger(logDomain); assert(lg); return lg->logLevel; } void GWEN_Logger_SetIdent(const char *logDomain, const char *id) { GWEN_LOGGER *lg; lg=GWEN_LoggerDomain_GetLogger(logDomain); assert(lg); free(lg->logIdent); if (id) lg->logIdent=strdup(id); else lg->logIdent=strdup("No ident, please adjust your program"); } void GWEN_Logger_SetFilename(const char *logDomain, const char *name) { GWEN_LOGGER *lg; lg=GWEN_LoggerDomain_GetLogger(logDomain); assert(lg); free(lg->logFile); if (name) lg->logFile=strdup(name); else lg->logFile=strdup(""); } GWEN_LOGGERFUNCTIONLOG GWEN_Logger_SetLogFunction(const char *logDomain, GWEN_LOGGERFUNCTIONLOG fn) { GWEN_LOGGER *lg; GWEN_LOGGERFUNCTIONLOG oldFn; lg=GWEN_LoggerDomain_GetLogger(logDomain); assert(lg); oldFn=lg->logFunction; lg->logFunction=fn; return oldFn; } GWEN_LOGGER_LEVEL GWEN_Logger_Name2Level(const char *name) { if (strcasecmp(name, "emergency")==0) return GWEN_LoggerLevel_Emergency; else if (strcasecmp(name, "alert")==0) return GWEN_LoggerLevel_Alert; else if (strcasecmp(name, "critical")==0) return GWEN_LoggerLevel_Critical; else if (strcasecmp(name, "error")==0) return GWEN_LoggerLevel_Error; else if (strcasecmp(name, "warning")==0) return GWEN_LoggerLevel_Warning; else if (strcasecmp(name, "notice")==0) return GWEN_LoggerLevel_Notice; else if (strcasecmp(name, "info")==0) return GWEN_LoggerLevel_Info; else if (strcasecmp(name, "debug")==0) return GWEN_LoggerLevel_Debug; else if (strcasecmp(name, "verbous")==0) return GWEN_LoggerLevel_Verbous; else { return GWEN_LoggerLevel_Unknown; } } const char *GWEN_Logger_Level2Name(GWEN_LOGGER_LEVEL level) { const char *s; switch(level) { case GWEN_LoggerLevel_Emergency: s="emergency"; break; case GWEN_LoggerLevel_Alert: s="alert"; break; case GWEN_LoggerLevel_Critical: s="critical"; break; case GWEN_LoggerLevel_Error: s="error"; break; case GWEN_LoggerLevel_Warning: s="warning"; break; case GWEN_LoggerLevel_Notice: s="notice"; break; case GWEN_LoggerLevel_Info: s="info"; break; case GWEN_LoggerLevel_Debug: s="debug"; break; case GWEN_LoggerLevel_Verbous: s="verbous"; break; case GWEN_LoggerLevel_Unknown: default: s="unknown"; break; } /* switch */ return s; } GWEN_LOGGER_LOGTYPE GWEN_Logger_Name2Logtype(const char *name) { if (strcasecmp(name, "console")==0) return GWEN_LoggerType_Console; else if (strcasecmp(name, "file")==0) return GWEN_LoggerType_File; else if (strcasecmp(name, "syslog")==0) return GWEN_LoggerType_Syslog; else if (strcasecmp(name, "function")==0) return GWEN_LoggerType_Function; else { return GWEN_LoggerType_Unknown; } } const char *GWEN_Logger_Logtype2Name(GWEN_LOGGER_LOGTYPE lt) { const char *s; switch(lt) { case GWEN_LoggerType_Console: s="console"; break; case GWEN_LoggerType_File: s="file"; break; case GWEN_LoggerType_Syslog: s="syslog"; break; case GWEN_LoggerType_Function: s="function"; break; case GWEN_LoggerType_Unknown: default: s="unknown"; break; } /* switch */ return s; } int GWEN_Logger_Exists(const char *logDomain) { assert(logDomain); return (GWEN_LoggerDomain_Find(logDomain)!=0); } gwenhywfar-4.15.2beta/src/base/error.c0000644000175000017500000001253412416477066014561 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Tue Oct 02 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "error_p.h" /* Internationalization */ #ifdef ENABLE_NLS # include # include # define I18N(m) dgettext("gwenhywfar", m) # define I18S(m) m #else # define I18N(m) m # define I18S(m) m #endif #include #include #include #ifdef HAVE_STRINGS_H # include #endif #include "gwenhywfar/debug.h" #include "gwenhywfar/misc.h" #include "gwenhywfar/inetsocket.h" #include "gwenhywfar/inetaddr.h" #include "gwenhywfar/libloader.h" int GWEN_Error_ModuleInit(void) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Error_ModuleInit"); return 0; } int GWEN_Error_ModuleFini(void) { return 0; } int GWEN_Error_ToString(int c, char *buffer, int bsize) { const char *s; assert(buffer); assert(bsize); s=GWEN_Error_SimpleToString(c); snprintf(buffer, bsize-1, "Error %d [%s]", c, s?s:"none"); /* make sure the string is NULL terminated */ buffer[bsize-1]=0; /* finished */ return 1; } const char *GWEN_Error_SimpleToString(int i) { const char *s; switch(i) { case GWEN_SUCCESS: s=I18N("Ok"); break; case GWEN_ERROR_GENERIC: s=I18N("Generic error"); break; case GWEN_ERROR_ABORTED: s=I18N("Aborted"); break; case GWEN_ERROR_NOT_AVAILABLE: s=I18N("Not available"); break; case GWEN_ERROR_BAD_SOCKETTYPE: s=I18N("Bad socket type"); break; case GWEN_ERROR_NOT_OPEN: s=I18N("Not open"); break; case GWEN_ERROR_TIMEOUT: s=I18N("Timeout"); break; case GWEN_ERROR_IN_PROGRESS: s=I18N("In Progress"); break; case GWEN_ERROR_STARTUP: s=I18N("Startup error"); break; case GWEN_ERROR_INTERRUPTED: s=I18N("Interrupted system call"); break; case GWEN_ERROR_NOT_SUPPORTED: s=I18N("Not supported"); break; case GWEN_ERROR_BROKEN_PIPE: s=I18N("Broken pipe"); break; case GWEN_ERROR_MEMORY_FULL: s=I18N("Memory full"); break; case GWEN_ERROR_BAD_ADDRESS: s=I18N("Bad address"); break; case GWEN_ERROR_BUFFER_OVERFLOW: s=I18N("Buffer overflow"); break; case GWEN_ERROR_HOST_NOT_FOUND: s=I18N("Host not found"); break; case GWEN_ERROR_NO_ADDRESS: s=I18N("No address"); break; case GWEN_ERROR_NO_RECOVERY: s=I18N("No recovery"); break; case GWEN_ERROR_TRY_AGAIN: s=I18N("Try again"); break; case GWEN_ERROR_UNKNOWN_DNS_ERROR: s=I18N("Unknown DNS error"); break; case GWEN_ERROR_BAD_ADDRESS_FAMILY: s=I18N("Bad address family"); break; case GWEN_ERROR_COULD_NOT_LOAD: s=I18N("Could not load"); break; case GWEN_ERROR_COULD_NOT_RESOLVE: s=I18N("Could not resolve a symbol"); break; case GWEN_ERROR_NOT_FOUND: s=I18N("Not found"); break; case GWEN_ERROR_READ: s=I18N("Could not read"); break; case GWEN_ERROR_WRITE: s=I18N("Could not write"); break; case GWEN_ERROR_CLOSE: s=I18N("Could not close"); break; case GWEN_ERROR_NO_DATA: s=I18N("No data"); break; case GWEN_ERROR_PARTIAL: s=I18N("Partial data"); break; case GWEN_ERROR_EOF: s=I18N("EOF met"); break; case GWEN_ERROR_ALREADY_REGISTERED: s=I18N("Already registered"); break; case GWEN_ERROR_NOT_REGISTERED: s=I18N("Not registered"); break; case GWEN_ERROR_BAD_SIZE: s=I18N("Bad size"); break; case GWEN_ERROR_ENCRYPT: s=I18N("Could not encrypt"); break; case GWEN_ERROR_DECRYPT: s=I18N("Could not decrypt"); break; case GWEN_ERROR_SIGN: s=I18N("Could not sign"); break; case GWEN_ERROR_VERIFY: s=I18N("Could not verify"); break; case GWEN_ERROR_SSL: s=I18N("Generic SSL error"); break; default: s="Unknown error"; } return s; } gwenhywfar-4.15.2beta/src/base/multicache.c0000644000175000017500000003503312501354106015525 00000000000000/*************************************************************************** begin : Wed May 08 2013 copyright : (C) 2013 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "multicache_p.h" #include GWEN_LIST_FUNCTIONS(GWEN_MULTICACHE_ENTRY, GWEN_MultiCache_Entry); GWEN_IDMAP_FUNCTIONS(GWEN_MULTICACHE_ENTRY, GWEN_MultiCache_Entry); GWEN_LIST_FUNCTIONS(GWEN_MULTICACHE_TYPE, GWEN_MultiCache_Type); GWEN_MULTICACHE_ENTRY *GWEN_MultiCache_Entry_new(GWEN_MULTICACHE_TYPE *ct, uint32_t id, void *p, uint32_t i) { GWEN_MULTICACHE_ENTRY *e; GWEN_NEW_OBJECT(GWEN_MULTICACHE_ENTRY, e); GWEN_LIST_INIT(GWEN_MULTICACHE_ENTRY, e); e->cacheType=ct; e->id=id; e->dataPtr=p; e->dataSize=i; return e; } void GWEN_MultiCache_Entry_free(GWEN_MULTICACHE_ENTRY *e) { if (e) { GWEN_LIST_FINI(GWEN_MULTICACHE_ENTRY, e); GWEN_FREE_OBJECT(e); } } uint32_t GWEN_MultiCache_Entry_GetId(const GWEN_MULTICACHE_ENTRY *e) { assert(e); return e->id; } uint32_t GWEN_MultiCache_Entry_GetDataSize(const GWEN_MULTICACHE_ENTRY *e) { assert(e); return e->dataSize; } void *GWEN_MultiCache_Entry_GetDataPtr(const GWEN_MULTICACHE_ENTRY *e) { assert(e); return e->dataPtr; } GWEN_MULTICACHE_TYPE *GWEN_MultiCache_Entry_GetCacheType(const GWEN_MULTICACHE_ENTRY *e) { assert(e); return e->cacheType; } uint32_t GWEN_MultiCache_Entry_GetParam1(const GWEN_MULTICACHE_ENTRY *e) { assert(e); return e->param1; } void GWEN_MultiCache_Entry_SetParam1(GWEN_MULTICACHE_ENTRY *e, uint32_t i) { assert(e); e->param1=i; } uint32_t GWEN_MultiCache_Entry_GetParam2(const GWEN_MULTICACHE_ENTRY *e) { assert(e); return e->param2; } void GWEN_MultiCache_Entry_SetParam2(GWEN_MULTICACHE_ENTRY *e, uint32_t i) { assert(e); e->param2=i; } uint32_t GWEN_MultiCache_Entry_GetParam3(const GWEN_MULTICACHE_ENTRY *e) { assert(e); return e->param3; } void GWEN_MultiCache_Entry_SetParam3(GWEN_MULTICACHE_ENTRY *e, uint32_t i) { assert(e); e->param3=i; } uint32_t GWEN_MultiCache_Entry_GetParam4(const GWEN_MULTICACHE_ENTRY *e) { assert(e); return e->param4; } void GWEN_MultiCache_Entry_SetParam4(GWEN_MULTICACHE_ENTRY *e, uint32_t i) { assert(e); e->param4=i; } double GWEN_MultiCache_Entry_GetParam5(const GWEN_MULTICACHE_ENTRY *e) { assert(e); return e->param5; } void GWEN_MultiCache_Entry_SetParam5(GWEN_MULTICACHE_ENTRY *e, double d) { assert(e); e->param5=d; } GWEN_MULTICACHE_TYPE *GWEN_MultiCache_Type_new(GWEN_MULTICACHE *mc) { GWEN_MULTICACHE_TYPE *ct; GWEN_NEW_OBJECT(GWEN_MULTICACHE_TYPE, ct); GWEN_LIST_INIT(GWEN_MULTICACHE_TYPE, ct); ct->_refCount=1; ct->multiCache=mc; ct->entryMap=GWEN_MultiCache_Entry_IdMap_new(GWEN_IdMapAlgo_Hex4); return ct; } void GWEN_MultiCache_Type_free(GWEN_MULTICACHE_TYPE *ct) { if (ct) { assert(ct->_refCount); if (ct->_refCount==1) { GWEN_MultiCache_ReleaseEntriesForType(ct->multiCache, ct); GWEN_MultiCache_Entry_IdMap_free(ct->entryMap); GWEN_LIST_FINI(GWEN_MULTICACHE_TYPE, ct); ct->_refCount=0; GWEN_FREE_OBJECT(ct); } else ct->_refCount--; } } void *GWEN_MultiCache_Type_GetData(const GWEN_MULTICACHE_TYPE *ct, uint32_t id) { GWEN_MULTICACHE_ENTRY *e; assert(ct); assert(ct->_refCount); e=(GWEN_MULTICACHE_ENTRY*)GWEN_MultiCache_Entry_IdMap_Find(ct->entryMap, id); if (e) { void *p; GWEN_MultiCache_UsingEntry(ct->multiCache, e); p=GWEN_MultiCache_Entry_GetDataPtr(e); GWEN_MultiCache_Type_AttachData(ct, p); GWEN_MultiCache_IncCacheHits(ct->multiCache); return p; } GWEN_MultiCache_IncCacheMisses(ct->multiCache); return NULL; } void *GWEN_MultiCache_Type_GetDataWithParams(const GWEN_MULTICACHE_TYPE *ct, uint32_t id, uint32_t param1, uint32_t param2, uint32_t param3, uint32_t param4) { GWEN_MULTICACHE_ENTRY *e; assert(ct); assert(ct->_refCount); e=(GWEN_MULTICACHE_ENTRY*)GWEN_MultiCache_Entry_IdMap_Find(ct->entryMap, id); if (e) { if ((GWEN_MultiCache_Entry_GetParam1(e)==param1) && (GWEN_MultiCache_Entry_GetParam2(e)==param2) && (GWEN_MultiCache_Entry_GetParam3(e)==param3) && (GWEN_MultiCache_Entry_GetParam4(e)==param4)) { void *p; GWEN_MultiCache_UsingEntry(ct->multiCache, e); p=GWEN_MultiCache_Entry_GetDataPtr(e); GWEN_MultiCache_Type_AttachData(ct, p); GWEN_MultiCache_IncCacheHits(ct->multiCache); return p; } } GWEN_MultiCache_IncCacheMisses(ct->multiCache); return NULL; } void *GWEN_MultiCache_Type_GetDataWithParams5(const GWEN_MULTICACHE_TYPE *ct, uint32_t id, uint32_t param1, uint32_t param2, uint32_t param3, uint32_t param4, double param5) { GWEN_MULTICACHE_ENTRY *e; assert(ct); assert(ct->_refCount); e=(GWEN_MULTICACHE_ENTRY*)GWEN_MultiCache_Entry_IdMap_Find(ct->entryMap, id); if (e) { if ((GWEN_MultiCache_Entry_GetParam1(e)==param1) && (GWEN_MultiCache_Entry_GetParam2(e)==param2) && (GWEN_MultiCache_Entry_GetParam3(e)==param3) && (GWEN_MultiCache_Entry_GetParam4(e)==param4) && (GWEN_MultiCache_Entry_GetParam5(e)==param5)) { void *p; GWEN_MultiCache_UsingEntry(ct->multiCache, e); p=GWEN_MultiCache_Entry_GetDataPtr(e); GWEN_MultiCache_Type_AttachData(ct, p); GWEN_MultiCache_IncCacheHits(ct->multiCache); return p; } } GWEN_MultiCache_IncCacheMisses(ct->multiCache); return NULL; } void GWEN_MultiCache_Type_SetData(GWEN_MULTICACHE_TYPE *ct, uint32_t id, void *ptr, uint32_t size) { GWEN_MULTICACHE_ENTRY *e; assert(ct); assert(ct->_refCount); GWEN_MultiCache_Type_PurgeData(ct, id); e=GWEN_MultiCache_Entry_new(ct, id, ptr, size); GWEN_MultiCache_AddEntry(ct->multiCache, e); GWEN_MultiCache_Entry_IdMap_Insert(ct->entryMap, id, (void*) e); } void GWEN_MultiCache_Type_SetDataWithParams(GWEN_MULTICACHE_TYPE *ct, uint32_t id, void *ptr, uint32_t size, uint32_t param1, uint32_t param2, uint32_t param3, uint32_t param4) { GWEN_MULTICACHE_ENTRY *e; assert(ct); assert(ct->_refCount); GWEN_MultiCache_Type_PurgeData(ct, id); e=GWEN_MultiCache_Entry_new(ct, id, ptr, size); GWEN_MultiCache_AddEntry(ct->multiCache, e); GWEN_MultiCache_Entry_SetParam1(e, param1); GWEN_MultiCache_Entry_SetParam2(e, param2); GWEN_MultiCache_Entry_SetParam3(e, param3); GWEN_MultiCache_Entry_SetParam4(e, param4); GWEN_MultiCache_Entry_IdMap_Insert(ct->entryMap, id, (void*) e); } void GWEN_MultiCache_Type_SetDataWithParams5(GWEN_MULTICACHE_TYPE *ct, uint32_t id, void *ptr, uint32_t size, uint32_t param1, uint32_t param2, uint32_t param3, uint32_t param4, double param5) { GWEN_MULTICACHE_ENTRY *e; assert(ct); assert(ct->_refCount); GWEN_MultiCache_Type_PurgeData(ct, id); e=GWEN_MultiCache_Entry_new(ct, id, ptr, size); GWEN_MultiCache_AddEntry(ct->multiCache, e); GWEN_MultiCache_Entry_SetParam1(e, param1); GWEN_MultiCache_Entry_SetParam2(e, param2); GWEN_MultiCache_Entry_SetParam3(e, param3); GWEN_MultiCache_Entry_SetParam4(e, param4); GWEN_MultiCache_Entry_SetParam5(e, param5); GWEN_MultiCache_Entry_IdMap_Insert(ct->entryMap, id, (void*) e); } void GWEN_MultiCache_Type_PurgeData(GWEN_MULTICACHE_TYPE *ct, uint32_t id) { GWEN_MULTICACHE_ENTRY *e; assert(ct); assert(ct->_refCount); e=(GWEN_MULTICACHE_ENTRY*)GWEN_MultiCache_Entry_IdMap_Find(ct->entryMap, id); if (e) GWEN_MultiCache_ReleaseEntry(ct->multiCache, e); } void GWEN_MultiCache_Type_PurgeAll(GWEN_MULTICACHE_TYPE *ct) { assert(ct); assert(ct->_refCount); GWEN_MultiCache_ReleaseEntriesForType(ct->multiCache, ct); } void GWEN_MultiCache_Type_SetAttachFn(GWEN_MULTICACHE_TYPE *ct, GWEN_MULTICACHE_TYPE_ATTACH_FN fn) { assert(ct); assert(ct->_refCount); ct->attachFn=fn; } void GWEN_MultiCache_Type_SetFreeFn(GWEN_MULTICACHE_TYPE *ct, GWEN_MULTICACHE_TYPE_FREE_FN fn) { assert(ct); assert(ct->_refCount); ct->freeFn=fn; } void GWEN_MultiCache_Type_SetAttachObjectFn(GWEN_MULTICACHE_TYPE *ct, GWEN_MULTICACHE_TYPE_ATTACH_OBJECT_FN fn) { assert(ct); assert(ct->_refCount); ct->attachObjectFn=fn; } void GWEN_MultiCache_Type_SetFreeObjectFn(GWEN_MULTICACHE_TYPE *ct, GWEN_MULTICACHE_TYPE_FREE_OBJECT_FN fn) { assert(ct); assert(ct->_refCount); ct->freeObjectFn=fn; } int GWEN_MultiCache_Type_AttachData(const GWEN_MULTICACHE_TYPE *ct, void *p) { assert(ct); assert(ct->_refCount); /* try attachObjectFn first, because that has THIS object as first argument */ if (ct->attachObjectFn) return ct->attachObjectFn(ct, p); if (ct->attachFn) return ct->attachFn(p); return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_MultiCache_Type_FreeData(const GWEN_MULTICACHE_TYPE *ct, void *p) { assert(ct); assert(ct->_refCount); /* try freeObjectFn first, because that has THIS object as first argument */ if (ct->freeObjectFn) return ct->freeObjectFn(ct, p); if (ct->freeFn) return ct->freeFn(p); return GWEN_ERROR_NOT_IMPLEMENTED; } void GWEN_MultiCache_Type_ReleaseEntry(GWEN_MULTICACHE_TYPE *ct, GWEN_MULTICACHE_ENTRY *e) { assert(ct); assert(ct->_refCount); assert(e); GWEN_MultiCache_Entry_IdMap_Remove(ct->entryMap, GWEN_MultiCache_Entry_GetId(e)); } GWEN_MULTICACHE *GWEN_MultiCache_new(uint64_t maxSize) { GWEN_MULTICACHE *mc; GWEN_NEW_OBJECT(GWEN_MULTICACHE, mc); mc->_refCount=1; mc->maxSize=maxSize; mc->typeList=GWEN_MultiCache_Type_List_new(); mc->entryList=GWEN_MultiCache_Entry_List_new(); return mc; } void GWEN_MultiCache_free(GWEN_MULTICACHE *mc) { if (mc) { assert(mc->_refCount); if (mc->_refCount==1) { GWEN_MULTICACHE_ENTRY *ce; ce=GWEN_MultiCache_Entry_List_First(mc->entryList); while(ce) { GWEN_MultiCache_ReleaseEntry(mc, ce); ce=GWEN_MultiCache_Entry_List_First(mc->entryList); } GWEN_MultiCache_Entry_List_free(mc->entryList); GWEN_MultiCache_Type_List_free(mc->typeList); DBG_NOTICE(GWEN_LOGDOMAIN, "MultiCache usage: %lld hits, %lld misses, %lld drops, %lld mb max memory used from %lld mb (%d %%)", (unsigned long long int) mc->cacheHits, (unsigned long long int) mc->cacheMisses, (unsigned long long int) mc->cacheDrops, (unsigned long long int) ((mc->maxSizeUsed)/(1024*1024)), (unsigned long long int) ((mc->maxSize)/(1024*1024)), (int)((mc->maxSizeUsed)*100.0/mc->maxSize)); mc->_refCount=0; GWEN_FREE_OBJECT(mc); } else mc->_refCount--; } } uint64_t GWEN_MultiCache_GetMaxSizeUsed(const GWEN_MULTICACHE *mc) { assert(mc); assert(mc->_refCount); return mc->maxSizeUsed; } int GWEN_MultiCache_AddEntry(GWEN_MULTICACHE *mc, GWEN_MULTICACHE_ENTRY *e) { uint32_t esize; assert(mc); assert(mc->_refCount); assert(e); esize=GWEN_MultiCache_Entry_GetDataSize(e); if ((mc->currentSize+esize)>mc->maxSize) { int64_t nsize; /* make room */ nsize=(mc->currentSize+esize)-mc->maxSize; while(nsize>0) { GWEN_MULTICACHE_ENTRY *ce; ce=GWEN_MultiCache_Entry_List_First(mc->entryList); if (ce) { nsize-=GWEN_MultiCache_Entry_GetDataSize(ce); GWEN_MultiCache_ReleaseEntry(mc, ce); mc->cacheDrops++; } else { DBG_ERROR(GWEN_LOGDOMAIN, "No entry left to release, cache size limit too low"); return GWEN_ERROR_MEMORY_FULL; } } } mc->currentSize+=esize; if (mc->currentSize>mc->maxSizeUsed) mc->maxSizeUsed=mc->currentSize; GWEN_MultiCache_Type_AttachData(GWEN_MultiCache_Entry_GetCacheType(e), GWEN_MultiCache_Entry_GetDataPtr(e)); GWEN_MultiCache_Entry_List_Add(e, mc->entryList); return 0; } void GWEN_MultiCache_ReleaseEntry(GWEN_MULTICACHE *mc, GWEN_MULTICACHE_ENTRY *e) { uint32_t esize; assert(mc); assert(mc->_refCount); assert(e); assert(e->cacheType); /* remove from list first */ GWEN_MultiCache_Entry_List_Del(e); /* release from type's idmap */ GWEN_MultiCache_Type_ReleaseEntry(GWEN_MultiCache_Entry_GetCacheType(e), e); /* release */ esize=GWEN_MultiCache_Entry_GetDataSize(e); GWEN_MultiCache_Type_FreeData(e->cacheType, GWEN_MultiCache_Entry_GetDataPtr(e)); GWEN_MultiCache_Entry_free(e); mc->currentSize-=esize; } void GWEN_MultiCache_ReleaseEntriesForType(GWEN_MULTICACHE *mc, GWEN_MULTICACHE_TYPE *ct) { GWEN_MULTICACHE_ENTRY *ce; assert(mc); assert(mc->_refCount); assert(ct); ce=GWEN_MultiCache_Entry_List_First(mc->entryList); while(ce) { GWEN_MULTICACHE_ENTRY *ceNext; ceNext=GWEN_MultiCache_Entry_List_Next(ce); if (GWEN_MultiCache_Entry_GetCacheType(ce)==ct) GWEN_MultiCache_ReleaseEntry(mc, ce); ce=ceNext; } } void GWEN_MultiCache_UsingEntry(GWEN_MULTICACHE *mc, GWEN_MULTICACHE_ENTRY *e) { assert(mc); assert(mc->_refCount); /* move cache entry to the end of the list */ GWEN_MultiCache_Entry_List_Del(e); GWEN_MultiCache_Entry_List_Add(e, mc->entryList); } void GWEN_MultiCache_IncCacheHits(GWEN_MULTICACHE *mc) { assert(mc); assert(mc->_refCount); mc->cacheHits++; } void GWEN_MultiCache_IncCacheMisses(GWEN_MULTICACHE *mc) { assert(mc); assert(mc->_refCount); mc->cacheMisses++; } gwenhywfar-4.15.2beta/src/base/idlist64.c0000644000175000017500000003704512450775036015072 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "idlist64_p.h" #include #include #include #include GWEN_IDTABLE64 *GWEN_IdTable64_new(void) { GWEN_IDTABLE64 *idt; GWEN_NEW_OBJECT(GWEN_IDTABLE64, idt); idt->refCount=1; idt->freeEntries=GWEN_IDTABLE64_MAXENTRIES; return idt; } void GWEN_IdTable64_free(GWEN_IDTABLE64 *idt) { if (idt) { assert(idt->refCount); if (--(idt->refCount)==0) { GWEN_FREE_OBJECT(idt); } } } #if 0 void GWEN_IdTable64_Attach(GWEN_IDTABLE64 *idt) { assert(idt); assert(idt->refCount); idt->refCount++; } #endif static inline int GWEN_IdTable64_AddId(GWEN_IDTABLE64 *idt, uint64_t id) { unsigned int i; for (i=0; ientries[i]==0) { idt->entries[i]=id; idt->freeEntries--; return 0; } } /* for */ return -1; } static inline int GWEN_IdTable64_AppendId(GWEN_IDTABLE64 *idt, uint64_t id) { if (idt->freeEntries) { unsigned int i; i=GWEN_IDTABLE64_MAXENTRIES-idt->freeEntries; idt->entries[i]=id; idt->freeEntries--; return 0; } else return -1; } static inline int GWEN_IdTable64_HasId(const GWEN_IDTABLE64 *idt, uint64_t id) { unsigned int i; for (i=0; ientries[i]==id) { return 1; } } /* for */ return 0; } static inline int GWEN_IdTable64_DelId(GWEN_IDTABLE64 *idt, uint64_t id) { unsigned int i; for (i=0; ientries[i]==id) { idt->entries[i]=0; idt->freeEntries++; return 0; } } /* for */ return -1; } static inline int GWEN_IdTable64_IsEmpty(const GWEN_IDTABLE64 *idt) { return GWEN_IDTABLE64_MAXENTRIES==idt->freeEntries; } static inline int GWEN_IdTable64_IsFull(const GWEN_IDTABLE64 *idt) { return idt->freeEntries==0; } #if 0 static inline unsigned int GWEN_IdTable64_GetCount(const GWEN_IDTABLE64 *idt) { return GWEN_IDTABLE64_MAXENTRIES-idt->freeEntries; } static inline uint64_t GWEN_IdTable64_GetFirstId(GWEN_IDTABLE64 *idt) { unsigned int i; assert(idt); idt->current=0; for (i=0; ientries[i]!=0) { idt->current=i; return idt->entries[i]; } } /* for */ return 0; } static inline uint64_t GWEN_IdTable64_GetNextId(GWEN_IDTABLE64 *idt) { unsigned int i; for (i=idt->current+1; ientries[i]!=0) { idt->current=i; return idt->entries[i]; } } /* for */ idt->current=GWEN_IDTABLE64_MAXENTRIES; return 0; } static inline uint64_t GWEN_IdTable64_GetFirstId2(const GWEN_IDTABLE64 *idt, uint64_t *tabIdx) { unsigned int i; for (i=0; ientries[i]!=0) { *tabIdx=i; return idt->entries[i]; } } /* for */ return 0; } static inline uint64_t GWEN_IdTable64_GetNextId2(const GWEN_IDTABLE64 *idt, uint64_t *tabIdx) { unsigned int i; for (i=(*tabIdx)+1; ientries[i]!=0) { *tabIdx=i; return idt->entries[i]; } } /* for */ return 0; } #endif GWEN_IDLIST64 *GWEN_IdList64_new(void) { GWEN_IDLIST64 *idl; GWEN_NEW_OBJECT(GWEN_IDLIST64, idl); idl->refCount=1; return idl; } void GWEN_IdList64_Attach(GWEN_IDLIST64 *idl) { assert(idl); assert(idl->refCount); idl->refCount++; } void GWEN_IdList64_free(GWEN_IDLIST64 *idl) { if (idl) { assert(idl->refCount); if (idl->refCount==1) { GWEN_IdList64_Clear(idl); idl->refCount=0; GWEN_FREE_OBJECT(idl); } else idl->refCount--; } } void GWEN_IdList64_AddTable(GWEN_IDLIST64 *idl, GWEN_IDTABLE64 *idt) { GWEN_IDTABLE64 **tablePtr; int idx; assert(idl); tablePtr=idl->pIdTablePointers; for (idx=0, tablePtr=idl->pIdTablePointers; idxidTableCount; idx++, tablePtr++) { if (*tablePtr==NULL) break; } /* while */ if (idx>=idl->idTableCount) { uint32_t newCount; GWEN_IDTABLE64 **newPtr; /* resize */ newCount=idl->idTableCount+GWEN_IDLIST64_STEP; newPtr=(GWEN_IDTABLE64 **)realloc(idl->pIdTablePointers, sizeof(GWEN_IDTABLE64*)*newCount); assert(newPtr); /* init new pointers */ memset((void*)(newPtr+idl->idTableCount), 0, sizeof(GWEN_IDTABLE64*)*(newCount-idl->idTableCount)); idl->pIdTablePointers=newPtr; idl->pIdTablePointers[idl->idTableCount]=idt; idl->lastTableIdx=idl->idTableCount; /* this is the idx of the new table, and it is the last one */ idl->idTableCount=newCount; } else { idl->pIdTablePointers[idx]=idt; idl->lastTableIdx=idx; } } int GWEN_IdList64_AddId(GWEN_IDLIST64 *idl, uint64_t id) { GWEN_IDTABLE64 *idt=NULL; GWEN_IDTABLE64 **tablePtr; int idx; assert(idl); if (idl->pIdTablePointers==NULL) { /* create an initial pointer table which can take up to GWEN_IDLIST64_STEP pointers */ idl->pIdTablePointers=(GWEN_IDTABLE64 **) malloc(sizeof(GWEN_IDTABLE64*)*GWEN_IDLIST64_STEP); assert(idl->pIdTablePointers); memset(idl->pIdTablePointers, 0, sizeof(GWEN_IDTABLE64*)*GWEN_IDLIST64_STEP); idl->idTableCount=GWEN_IDLIST64_STEP; } for (idx=0, tablePtr=idl->pIdTablePointers; idxidTableCount; idx++, tablePtr++) { idt=*tablePtr; if (idt && !GWEN_IdTable64_IsFull(idt)) break; } /* while */ if (idx>=idl->idTableCount) { idt=GWEN_IdTable64_new(); GWEN_IdList64_AddTable(idl, idt); } GWEN_IdTable64_AddId(idt, id); idl->entryCount++; return 0; } int GWEN_IdList64_DelId(GWEN_IDLIST64 *idl, uint64_t id) { if (idl->pIdTablePointers) { GWEN_IDTABLE64 *idt=NULL; GWEN_IDTABLE64 **tablePtr; int idx; for (idx=0, tablePtr=idl->pIdTablePointers; idxidTableCount; idx++, tablePtr++) { idt=*tablePtr; if (idt && !GWEN_IdTable64_DelId(idt, id)) { /* found a table which had this id */ GWEN_IdList64_Clean(idl); idl->entryCount--; return 0; } } } return -1; } int GWEN_IdList64_HasId(const GWEN_IDLIST64 *idl, uint64_t id) { if (idl->pIdTablePointers) { GWEN_IDTABLE64 *idt=NULL; GWEN_IDTABLE64 **tablePtr; int idx; for (idx=0, tablePtr=idl->pIdTablePointers; idxidTableCount; idx++, tablePtr++) { idt=*tablePtr; if (idt && GWEN_IdTable64_HasId(idt, id)) return 1; } } return 0; } void GWEN_IdList64_Clean(GWEN_IDLIST64 *idl) { GWEN_IDTABLE64 *idt=NULL; GWEN_IDTABLE64 **tablePtr; int idx; for (idx=0, tablePtr=idl->pIdTablePointers; idxidTableCount; idx++, tablePtr++) { idt=*tablePtr; if (idt && GWEN_IdTable64_IsEmpty(idt)) { GWEN_IdTable64_free(idt); *tablePtr=NULL; } } } void GWEN_IdList64_Clear(GWEN_IDLIST64 *idl) { if (idl->pIdTablePointers) { GWEN_IDTABLE64 *idt=NULL; GWEN_IDTABLE64 **tablePtr; int idx; for (idx=0, tablePtr=idl->pIdTablePointers; idxidTableCount; idx++, tablePtr++) { idt=*tablePtr; if (idt) { GWEN_IdTable64_free(idt); *tablePtr=NULL; } } free(idl->pIdTablePointers); idl->pIdTablePointers=NULL; } idl->entryCount=0; idl->nextIdx=0; } static int __compAscending(const void *pa, const void *pb) { uint64_t a=*((const uint64_t*)pa); uint64_t b=*((const uint64_t*)pb); if (ab) return 1; else return 0; } static int __compDescending(const void *pa, const void *pb) { uint64_t a=*((const uint64_t*)pa); uint64_t b=*((const uint64_t*)pb); if (ab) return -1; else return 0; } static int GWEN_IdList64__Sort(GWEN_IDLIST64 *idl, int ascending) { assert(idl); assert(idl->refCount); if (idl->pIdTablePointers && idl->entryCount) { GWEN_IDLIST64_ITERATOR *it; unsigned int cnt; uint64_t *ptr; unsigned int i; assert(idl); /* count ids */ cnt=idl->entryCount; /* move ids to a temporary list */ ptr=(uint64_t*)malloc(sizeof(uint64_t)*cnt); assert(ptr); it=GWEN_IdList64_Iterator_new(idl); for (i=0; iidTableCount=idl->idTableCount; nidl->entryCount=idl->entryCount; if (idl->pIdTablePointers) { for (idx=0; idxidTableCount; idx++) { GWEN_IDTABLE64 *idt; idt=idl->pIdTablePointers[idx]; if (idt && !GWEN_IdTable64_IsEmpty(idt)) { GWEN_IDTABLE64 *nidt; nidt=GWEN_IdTable64_new(); memmove(nidt->entries, idt->entries, GWEN_IDTABLE64_MAXENTRIES*sizeof(uint64_t)); nidt->freeEntries=idt->freeEntries; GWEN_IdList64_AddTable(nidl, nidt); } } } return nidl; } uint64_t GWEN_IdList64_GetEntryCount(const GWEN_IDLIST64 *idl) { assert(idl); assert(idl->refCount); return idl->entryCount; } uint64_t GWEN_IdList64__GetFirstId(const GWEN_IDLIST64 *idl, uint64_t *pos) { GWEN_IDTABLE64 *idt=NULL; GWEN_IDTABLE64 **tablePtr; int idx; int idIndex=0; *pos=0; for (idx=0, tablePtr=idl->pIdTablePointers; idxidTableCount; idx++, tablePtr++) { idt=*tablePtr; if (idt && !GWEN_IdTable64_IsEmpty(idt)) { int i; uint64_t id; for (i=0; ientries[i]!=0) { id=idt->entries[i]; *pos=idIndex+i+1; return id; } } } idIndex+=GWEN_IDTABLE64_MAXENTRIES; } return 0; } uint64_t GWEN_IdList64__GetNextId(const GWEN_IDLIST64 *idl, uint64_t *pos) { if (*pos) { GWEN_IDTABLE64 *idt; uint64_t tableNum=*pos / GWEN_IDTABLE64_MAXENTRIES; uint64_t tableIdx=*pos % GWEN_IDTABLE64_MAXENTRIES; GWEN_IDTABLE64 **tablePtr; int idIndex=0; int idx; if (tableNum>idl->idTableCount) { DBG_ERROR(GWEN_LOGDOMAIN, "Table number out of range"); *pos=0; return 0; } idIndex=(tableNum*GWEN_IDTABLE64_MAXENTRIES); for (idx=tableNum, tablePtr=idl->pIdTablePointers+tableNum; idxidTableCount; idx++, tablePtr++) { idt=*tablePtr; if (idt && !GWEN_IdTable64_IsEmpty(idt)) { int i; uint64_t id; if (idx==tableNum) { for (i=tableIdx; ientries[i]!=0) { id=idt->entries[i]; *pos=idIndex+i+1; return id; } } } else { for (i=0; ientries[i]!=0) { id=idt->entries[i]; *pos=idIndex+i+1; return id; } } } } idIndex+=GWEN_IDTABLE64_MAXENTRIES; } *pos=0; } return 0; } uint64_t GWEN_IdList64_GetFirstId(GWEN_IDLIST64 *idl) { return GWEN_IdList64__GetFirstId(idl, &(idl->nextIdx)); } uint64_t GWEN_IdList64_GetNextId(GWEN_IDLIST64 *idl) { return GWEN_IdList64__GetNextId(idl, &(idl->nextIdx)); } uint64_t GWEN_IdList64_GetFirstId2(const GWEN_IDLIST64 *idl, uint64_t *pos) { return GWEN_IdList64__GetFirstId(idl, pos); } uint64_t GWEN_IdList64_GetNextId2(const GWEN_IDLIST64 *idl, uint64_t *pos) { return GWEN_IdList64__GetNextId(idl, pos); } GWEN_IDLIST64_ITERATOR *GWEN_IdList64_Iterator_new(GWEN_IDLIST64 *idl) { GWEN_IDLIST64_ITERATOR *it; assert(idl); GWEN_NEW_OBJECT(GWEN_IDLIST64_ITERATOR, it); GWEN_IdList64_Attach(idl); it->list=idl; return it; } void GWEN_IdList64_Iterator_free(GWEN_IDLIST64_ITERATOR *it) { if (it) { GWEN_IdList64_free(it->list); GWEN_FREE_OBJECT(it); } } uint64_t GWEN_IdList64_Iterator_GetFirstId(GWEN_IDLIST64_ITERATOR *it) { return GWEN_IdList64__GetFirstId(it->list, &(it->nextIndex)); } uint64_t GWEN_IdList64_Iterator_GetNextId(GWEN_IDLIST64_ITERATOR *it) { return GWEN_IdList64__GetNextId(it->list, &(it->nextIndex)); } int GWEN_IdList64_AppendId(GWEN_IDLIST64 *idl, uint64_t id) { GWEN_IDTABLE64 *idt=NULL; assert(idl); if (idl->pIdTablePointers==NULL) { /* create an initial pointer table which can take up to GWEN_IDLIST64_STEP pointers */ idl->pIdTablePointers=(GWEN_IDTABLE64 **) malloc(sizeof(GWEN_IDTABLE64*)*GWEN_IDLIST64_STEP); assert(idl->pIdTablePointers); memset(idl->pIdTablePointers, 0, sizeof(GWEN_IDTABLE64*)*GWEN_IDLIST64_STEP); idl->idTableCount=GWEN_IDLIST64_STEP; } assert(idl->lastTableIdxidTableCount); idt=idl->pIdTablePointers[idl->lastTableIdx]; if (idt==NULL || GWEN_IdTable64_IsFull(idt)) { idt=GWEN_IdTable64_new(); GWEN_IdList64_AddTable(idl, idt); } GWEN_IdTable64_AppendId(idt, id); idl->entryCount++; return 0; } uint64_t GWEN_IdList64_GetIdAt(const GWEN_IDLIST64 *idl, uint64_t idx) { GWEN_IDTABLE64 *idt; uint64_t tableNum=idx / GWEN_IDTABLE64_MAXENTRIES; uint64_t tableIdx=idx % GWEN_IDTABLE64_MAXENTRIES; assert(idl); if (tableNum>idl->idTableCount) { DBG_INFO(GWEN_LOGDOMAIN, "Table index out of range"); return 0; } idt=idl->pIdTablePointers[tableNum]; if (idt==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Table index points to an empty table"); return 0; } return idt->entries[tableIdx]; } gwenhywfar-4.15.2beta/src/base/list.h0000644000175000017500000003502112416477066014404 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sat Nov 15 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_LIST_H #define GWENHYWFAR_LIST_H #ifdef __cplusplus extern "C" { #endif #include #include #include /* This is needed for PalmOS, because it define some functions needed */ #include #include /** @defgroup GWEN_LIST Generic List Handling * @ingroup MOD_BASE * The macros of this group facilitates typesafe use of lists. */ /*@{*/ /** @brief Doubly-linked list. * * The list contains pointer to data objects, with the ability to * iterate over the list in both directions. */ typedef struct GWEN_LIST GWEN_LIST; /** Callback function for one list element. */ typedef void *(*GWEN_LIST_FOREACH_CB)(void *element, void *user_data); /** @brief Doubly-linked list with const objects. * * The list contains pointer to const data objects, with the ability * to iterate over the list in both directions. */ typedef struct GWEN_LIST GWEN_CONSTLIST; /** Callback function for one const list element. */ typedef const void *(*GWEN_CONSTLIST_FOREACH_CB)(const void *element, void *user_data); /** An iterator for the doubly-linked list, i.e. a pointer to a specific element */ typedef struct GWEN_LIST_ITERATOR GWEN_LIST_ITERATOR; /** An iterator for the const doubly-linked list, i.e. a pointer to a specific element */ typedef struct GWEN_LIST_ITERATOR GWEN_CONSTLIST_ITERATOR; /** allow inheriting of lists */ GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_LIST, GWENHYWFAR_API) /** Constructor. Returns a new empty list. */ GWENHYWFAR_API GWEN_LIST *GWEN_List_new(void); /** Destructor. Frees all of the memory used by this list. The list * elements are not freed. */ GWENHYWFAR_API void GWEN_List_free(GWEN_LIST *l); /** Duplicates a list by returning a reference and using * reference-counting. */ GWENHYWFAR_API GWEN_LIST *GWEN_List_dup(const GWEN_LIST *l); GWENHYWFAR_API void GWEN_List_Unshare(GWEN_LIST *l); /** * Dumps the contents of the list to an open file (e.g. stderr). */ GWENHYWFAR_API void GWEN_List_Dump(const GWEN_LIST *l, FILE *f, unsigned int indent); /** * Appends an element to a list, making it the new last element. */ GWENHYWFAR_API void GWEN_List_PushBack(GWEN_LIST *l, void *p); /** * Appends an element to a list, making it the new last element. */ GWENHYWFAR_API void GWEN_List_PushBackRefPtr(GWEN_LIST *l, GWEN_REFPTR *rp); /** * Inserts an element at the start of the list, making it the new * first element. */ GWENHYWFAR_API void GWEN_List_PushFront(GWEN_LIST *l, void *p); /** * Inserts an element at the start of the list, making it the new * first element. */ GWENHYWFAR_API void GWEN_List_PushFrontRefPtr(GWEN_LIST *l, GWEN_REFPTR *rp); /** * Returns the first element of the list. (The element is not * removed from the list.) */ GWENHYWFAR_API void *GWEN_List_GetFront(const GWEN_LIST *l); /** * Returns the first element of the list. (The element is not * removed from the list.) */ GWENHYWFAR_API GWEN_REFPTR *GWEN_List_GetFrontRefPtr(const GWEN_LIST *l); /** * Returns the last element of the list. (The element is not * removed from the list.) */ GWENHYWFAR_API void *GWEN_List_GetBack(const GWEN_LIST *l); /** * Returns the last element of the list. (The element is not * removed from the list.) */ GWENHYWFAR_API GWEN_REFPTR *GWEN_List_GetBackRefPtr(const GWEN_LIST *l); /** * Removes the element currently pointed to by the given iterator * from the list. (The element is not freed.) * The given iterator is move toward the next element in any case (if there * is no next element then the iterator will point to 0). */ GWENHYWFAR_API void GWEN_List_Erase(GWEN_LIST *l, GWEN_LIST_ITERATOR *it); /** * Searches for the first occurrence of the "element" pointer and * erases that element from the list. (The element itself is not * freed.) I.e. this function calls GWEN_List_Erase on the first * occurrence found of "element". */ GWENHYWFAR_API void GWEN_List_Remove(GWEN_LIST *l, const void *element); /** Returns the size of this list, i.e. the number of elements in this * list. * * This number is counted in the list metadata, so this is a cheap * operation. */ GWENHYWFAR_API unsigned int GWEN_List_GetSize(const GWEN_LIST *l); /** Returns nonzero (TRUE) if this list is empty, and zero (FALSE) if * this list is not empty. */ GWENHYWFAR_API int GWEN_List_IsEmpty(const GWEN_LIST *l); GWENHYWFAR_API GWEN_REFPTR_INFO *GWEN_List_GetRefPtrInfo(const GWEN_LIST *l); GWENHYWFAR_API void GWEN_List_SetRefPtrInfo(GWEN_LIST *l, GWEN_REFPTR_INFO *rpi); /** * Removes the list's last element from the list. (The element is not * freed.) */ GWENHYWFAR_API void GWEN_List_PopBack(GWEN_LIST *l); /** * Removes the list's first element from the list. (The element is not * freed.) */ GWENHYWFAR_API void GWEN_List_PopFront(GWEN_LIST *l); /** * Removes all list elements from the list. The elements are not * freed. */ GWENHYWFAR_API void GWEN_List_Clear(GWEN_LIST *l); /** * Finds the LIST_ITERATOR position of the given element. The * returned LIST_ITERATOR will be owned by the caller and must be * freed when no longer in use. If the list does not contain the * element, NULL will be returned. */ GWENHYWFAR_API GWEN_LIST_ITERATOR *GWEN_List_FindIter(GWEN_LIST *l, const void *element); /** * Searches whether the list contains the given element. If it does, * the pointer to the element is returned. Otherwise, NULL is * returned. */ GWENHYWFAR_API const void *GWEN_List_Contains(GWEN_LIST *l, const void *element); /** Traverses the list, calling the callback function 'func' on * each list element. Traversal will stop when 'func' returns a * non-NULL value, and the routine will return with that * value. Otherwise the routine will return NULL. * * @param list The list to traverse. * @param func The function to be called with each list element. * @param user_data A pointer passed on to the function 'func'. * @return The non-NULL pointer returned by 'func' as soon as it * returns one. Otherwise (i.e. 'func' always returns NULL) * returns NULL. */ GWENHYWFAR_API void *GWEN_List_ForEach(GWEN_LIST *list, GWEN_LIST_FOREACH_CB func, void *user_data); /** Return an iterator pointing to the first element in the list */ GWENHYWFAR_API GWEN_LIST_ITERATOR *GWEN_List_First(const GWEN_LIST *l); /** Returns an iterator pointing to the last element in the list. */ GWENHYWFAR_API GWEN_LIST_ITERATOR *GWEN_List_Last(const GWEN_LIST *l); /** * Creates a list iterator for the given list. */ GWENHYWFAR_API GWEN_LIST_ITERATOR *GWEN_ListIterator_new(const GWEN_LIST *l); /** Frees a list iterator. */ GWENHYWFAR_API void GWEN_ListIterator_free(GWEN_LIST_ITERATOR *li); /** * Moves the list iterator to the predecessor of the currenty selected * element and returns that predecessor element. */ GWENHYWFAR_API void *GWEN_ListIterator_Previous(GWEN_LIST_ITERATOR *li); /** * Moves the list iterator to the predecessor of the currenty selected * element and returns that predecessor element. */ GWENHYWFAR_API GWEN_REFPTR *GWEN_ListIterator_PreviousRefPtr(GWEN_LIST_ITERATOR *li); /** * Moves the list iterator to the successor of the currenty selected * element and returns that successor element. */ GWENHYWFAR_API void *GWEN_ListIterator_Next(GWEN_LIST_ITERATOR *li); /** * Moves the list iterator to the successor of the currenty selected * element and returns that successor element. */ GWENHYWFAR_API GWEN_REFPTR *GWEN_ListIterator_NextRefPtr(GWEN_LIST_ITERATOR *li); /** * Returns the pointer to the element stored at the list position the * iterator currently points to. */ GWENHYWFAR_API void *GWEN_ListIterator_Data(GWEN_LIST_ITERATOR *li); /** * Returns the pointer to the element stored at the list position the * iterator currently points to. */ GWENHYWFAR_API GWEN_REFPTR *GWEN_ListIterator_DataRefPtr(GWEN_LIST_ITERATOR *li); GWENHYWFAR_API void GWEN_ListIterator_IncLinkCount(GWEN_LIST_ITERATOR *li); GWENHYWFAR_API unsigned int GWEN_ListIterator_GetLinkCount(const GWEN_LIST_ITERATOR *li); /** Constructor. Returns a new empty list. */ GWENHYWFAR_API GWEN_CONSTLIST *GWEN_ConstList_new(void); /** Destructor. Frees all of the memory used by this list. The list * elements are not freed */ GWENHYWFAR_API void GWEN_ConstList_free(GWEN_CONSTLIST *l); /** * Appends an element to a list, making it the new last element. */ GWENHYWFAR_API void GWEN_ConstList_PushBack(GWEN_CONSTLIST *l, const void *p); /** * Inserts an element at the start of the list, making it the new * first element. */ GWENHYWFAR_API void GWEN_ConstList_PushFront(GWEN_CONSTLIST *l, const void *p); /** * Returns the first element of the list. (The element is not * removed from the list.) */ GWENHYWFAR_API const void *GWEN_ConstList_GetFront(const GWEN_CONSTLIST *l); /** * Returns the last element of the list. (The element is not * removed from the list.) */ GWENHYWFAR_API const void *GWEN_ConstList_GetBack(const GWEN_CONSTLIST *l); /** Returns the size of this list, i.e. the number of elements in this * list. * * This number is counted in the list metadata, so this is a cheap * operation. */ GWENHYWFAR_API unsigned int GWEN_ConstList_GetSize(const GWEN_CONSTLIST *l); /** Returns nonzero (TRUE) if this list is empty, and zero (FALSE) if * this list is not empty. */ GWENHYWFAR_API int GWEN_ConstList_IsEmpty(const GWEN_LIST *l); /** * Removes the list's last element from the list. (The element is not * freed.) */ GWENHYWFAR_API void GWEN_ConstList_PopBack(GWEN_CONSTLIST *l); /** * Removes the list's first element from the list. (The element is not * freed.) */ GWENHYWFAR_API void GWEN_ConstList_PopFront(GWEN_CONSTLIST *l); /** * Removes all list elements from the list. The elements are not * freed. */ GWENHYWFAR_API void GWEN_ConstList_Clear(GWEN_CONSTLIST *l); /** Traverses the list, calling the callback function 'func' on * each list element. Traversal will stop when 'func' returns a * non-NULL value, and the routine will return with that * value. Otherwise the routine will return NULL. * * @param list The list to traverse. * @param func The function to be called with each list element. * @param user_data A pointer passed on to the function 'func'. * @return The non-NULL pointer returned by 'func' as soon as it * returns one. Otherwise (i.e. 'func' always returns NULL) * returns NULL. */ GWENHYWFAR_API const void *GWEN_ConstList_ForEach(GWEN_CONSTLIST *list, GWEN_CONSTLIST_FOREACH_CB func, void *user_data); /** * Finds the LIST_ITERATOR position of the given element. The * returned LIST_ITERATOR will be owned by the caller and must be * freed when no longer in use. If the list does not contain the * element, NULL will be returned. */ GWENHYWFAR_API GWEN_CONSTLIST_ITERATOR *GWEN_ConstList_FindIter(const GWEN_CONSTLIST *l, const void *element); /** * Searches whether the list contains the given element. If it does, * the pointer to the element is returned. Otherwise, NULL is * returned. */ GWENHYWFAR_API const void *GWEN_ConstList_Contains(const GWEN_CONSTLIST *l, const void *element); /** * Removes the element currently pointed to by the given iterator * from the list. (The element is not freed.) * The given iterator is move toward the next element in any case (if there * is no next element then the iterator will point to 0). */ GWENHYWFAR_API void GWEN_ConstList_Erase(GWEN_CONSTLIST *l, GWEN_CONSTLIST_ITERATOR *it); /** * Searches for the first occurrence of the "element" pointer and * erases that element from the list. (The element itself is not * freed.) I.e. this function calls GWEN_List_Erase on the first * occurrence found of "element". */ GWENHYWFAR_API void GWEN_ConstList_Remove(GWEN_CONSTLIST *l, const void *element); /** Return an iterator pointing to the first element in the list */ GWENHYWFAR_API GWEN_CONSTLIST_ITERATOR *GWEN_ConstList_First(const GWEN_CONSTLIST *l); /** Returns an iterator pointing to the last element in the list. */ GWENHYWFAR_API GWEN_CONSTLIST_ITERATOR *GWEN_ConstList_Last(const GWEN_CONSTLIST *l); /** * Creates a list iterator for the given list. */ GWENHYWFAR_API GWEN_CONSTLIST_ITERATOR *GWEN_ConstListIterator_new(const GWEN_CONSTLIST *l); /** Frees a list iterator. */ GWENHYWFAR_API void GWEN_ConstListIterator_free(GWEN_CONSTLIST_ITERATOR *li); /** * Moves the list iterator to the predecessor of the currenty selected * element and returns that predecessor element. */ GWENHYWFAR_API const void *GWEN_ConstListIterator_Previous(GWEN_CONSTLIST_ITERATOR *li); /** * Moves the list iterator to the successor of the currenty selected * element and returns that successor element. */ GWENHYWFAR_API const void *GWEN_ConstListIterator_Next(GWEN_CONSTLIST_ITERATOR *li); /** * Returns the pointer to the element stored at the list position the * iterator currently points to. */ GWENHYWFAR_API const void *GWEN_ConstListIterator_Data(GWEN_CONSTLIST_ITERATOR *li); /*@}*/ /* defgroup */ #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/base/list1_p.h0000644000175000017500000000475712364015347015010 00000000000000/*************************************************************************** begin : Sat Jun 28 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_LIST1_P_H #define GWEN_LIST1_P_H #include "list1.h" struct GWEN_LIST1_ELEMENT { GWEN_LIST1 *listPtr; void *data; GWEN_LIST1_ELEMENT *prevElement; GWEN_LIST1_ELEMENT *nextElement; }; struct GWEN_LIST1 { uint32_t count; GWEN_LIST1_ELEMENT *firstElement; GWEN_LIST1_ELEMENT *lastElement; GWEN_LIST1_SORT_FN sortFunction; }; typedef struct GWEN_LIST1_SORT_CTX GWEN_LIST1_SORT_CTX; struct GWEN_LIST1_SORT_CTX { GWEN_LIST1 *list; int param; }; static GWEN_LIST1_SORT_CTX *GWEN_List1_SortCtx_new(GWEN_LIST1 *list, int param); static void GWEN_List1_SortCtx_free(GWEN_LIST1_SORT_CTX *ctx); typedef struct GWEN_LIST1_SORT_ELEM GWEN_LIST1_SORT_ELEM; struct GWEN_LIST1_SORT_ELEM { GWEN_LIST1_SORT_CTX *context; GWEN_LIST1_ELEMENT *element; }; static GWEN_LIST1_SORT_ELEM *GWEN_List1_SortElem_new(GWEN_LIST1_SORT_CTX *ctx, GWEN_LIST1_ELEMENT *elem); static void GWEN_List1_SortElem_free(GWEN_LIST1_SORT_ELEM *e); #endif gwenhywfar-4.15.2beta/src/base/logger_l.h0000644000175000017500000000347012364015347015216 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sun Dec 05 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_LOGGER_L_H #define GWEN_LOGGER_L_H #include int GWEN_Logger_ModuleInit(void); int GWEN_Logger_ModuleFini(void); #endif /* GWEN_LOGGER_L_H */ gwenhywfar-4.15.2beta/src/base/memcache.h0000644000175000017500000001062212416477066015173 00000000000000/*************************************************************************** begin : Mon Jul 14 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_MEMCACHE_H #define GWENHYWFAR_MEMCACHE_H #include #include #include typedef struct GWEN_MEMCACHE_ENTRY GWEN_MEMCACHE_ENTRY; typedef struct GWEN_MEMCACHE GWEN_MEMCACHE; GWENHYWFAR_API void GWEN_MemCacheEntry_free(GWEN_MEMCACHE_ENTRY *me); GWENHYWFAR_API uint32_t GWEN_MemCacheEntry_GetId(GWEN_MEMCACHE_ENTRY *me); GWENHYWFAR_API void *GWEN_MemCacheEntry_GetDataPtr(GWEN_MEMCACHE_ENTRY *me); GWENHYWFAR_API size_t GWEN_MemCacheEntry_GetDataLen(GWEN_MEMCACHE_ENTRY *me); GWENHYWFAR_API int GWEN_MemCacheEntry_GetIsValid(const GWEN_MEMCACHE_ENTRY *me); GWENHYWFAR_API void GWEN_MemCacheEntry_BeginUse(GWEN_MEMCACHE_ENTRY *me); GWENHYWFAR_API void GWEN_MemCacheEntry_EndUse(GWEN_MEMCACHE_ENTRY *me); GWENHYWFAR_API GWEN_MEMCACHE *GWEN_MemCache_new(size_t maxCacheMemory, uint32_t maxCacheEntries); GWENHYWFAR_API void GWEN_MemCache_free(GWEN_MEMCACHE *mc); /** * Returns the cache entry with the given id (if any). * If NULL is returned then there is no entry with the given id, * otherwise the use counter of the object returned is incremented. * Therefore the caller has to call @ref GWEN_MemCacheEntry_EndUse * after working with the object returned in order to release unused * cache entries. */ GWENHYWFAR_API GWEN_MEMCACHE_ENTRY *GWEN_MemCache_FindEntry(GWEN_MEMCACHE *mc, uint32_t id); /** * Creates a cache entry for the given id. If there already is an entry * of the given id that existing entry will first be invalidated. * The use counter of the new object returned is 1, so the caller must * call @ref GWEN_MemCacheEntry_EndUse after working with the object returned in * order to release unused cache entries. */ GWENHYWFAR_API GWEN_MEMCACHE_ENTRY *GWEN_MemCache_CreateEntry(GWEN_MEMCACHE *mc, uint32_t id, void *dataPtr, size_t dataLen); /** * This function invalidates a given cache entry (if it exists). * The data associated with that entry is not freed yet until all * users of that entry called @ref GWEN_MemCacheEntry_EndUse (i.e. * until the use counter of that entry reaches zero). However, the * entry will be removed from the cache index so that future calls * to @ref GWEN_MemCache_FindEntry will not return it. */ GWENHYWFAR_API void GWEN_MemCache_PurgeEntry(GWEN_MEMCACHE *mc, uint32_t id); /** * This function invalidates all entries whose ids match the given * id/mask pair. See @ref GWEN_MemCache_PurgeEntry for implementation * details and caveats. */ GWENHYWFAR_API void GWEN_MemCache_PurgeEntries(GWEN_MEMCACHE *mc, uint32_t id, uint32_t mask); /** * This function invalidates all cache entries. * See @ref GWEN_MemCache_PurgeEntry for implementation * details and caveats. */ GWENHYWFAR_API void GWEN_MemCache_Purge(GWEN_MEMCACHE *mc); #endif gwenhywfar-4.15.2beta/src/base/Makefile.am0000644000175000017500000000471012406366332015305 00000000000000INCLUDES= -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/ \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/gui \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/parser # Don't include src/os above because its process.h conflicts with the # system's , at least for gcc3.2 on mingw32 # -I$(top_srcdir)/src/os AM_CFLAGS=@PROFILING_CFLAGS@ @visibility_cflags@ -DBUILDING_GWENHYWFAR DEFS+=-DGWEN_BUFFER_DEFAULT_HARDLIMIT='@gwenhywfar_buffer_hardlimit@' noinst_LTLIBRARIES=libbase.la typedatadir=$(datadir)/gwenhywfar/typemaker2/c dist_typedata_DATA=\ gwen_param.tm2 gwen_param_list.tm2 gwen_param_list2.tm2 gwen_param_tree.tm2 typefiles=param.xml EXTRA_DIST=$(typefiles) param_fns.c noinst_HEADERS=\ args_p.h \ buffer_p.h \ debug_p.h \ error_l.h \ error_p.h \ gwensignal_p.h \ i18n_l.h \ idlist_p.h \ idlist64_p.h \ inherit_p.h \ list_p.h \ list1_p.h \ logger_l.h \ logger_p.h \ memory_l.h \ memory_p.h \ pathmanager_l.h \ pathmanager_p.h \ plugindescr_p.h \ plugin_l.h \ plugin_p.h \ refptr_p.h \ ringbuffer_p.h \ stringlist_p.h \ stringlist2_p.h \ idmap_p.h \ memcache_p.h \ tree_p.h \ pointerlist_p.h \ multicache_p.h \ param_p.h iheaderdir=$(gwenhywfar_headerdir_am)/gwenhywfar iheader_HEADERS=\ args.h \ buffer.h \ debug.h \ error.h \ gwensignal.h \ i18n.h \ idlist.h \ idlist64.h \ inherit.h \ list.h \ list1.h \ list1.tmpl \ list2.h \ list2.tmpl \ logger.h \ memory.h \ misc.h \ misc2.h \ pathmanager.h \ plugin.h \ plugindescr.h \ refptr.h \ ringbuffer.h \ stringlist.h \ stringlist2.h \ idmap.h \ fastbuffer.h \ memcache.h \ tree.h \ pointerlist.h \ multicache.h \ bindata.h \ param.h \ param_fns.h libbase_la_SOURCES=\ args.c \ buffer.c \ debug.c \ error.c \ gwensignal.c \ i18n.c \ idlist.c \ idlist64.c \ inherit.c \ list.c \ list1.c \ logger.c \ memory.c \ pathmanager.c \ plugin.c \ plugindescr.c \ refptr.c \ ringbuffer.c \ stringlist.c \ stringlist2.c \ idmap.c \ fastbuffer.c \ memcache.c \ tree.c \ pointerlist.c \ multicache.c \ param.c sources: for f in $(libbase_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done types: $(typefiles) typedefs typemaker2 -I $(srcdir) --destfolder="$(srcdir)" -D GWENHYWFAR_API $(typefiles) typedefs: $(typefiles) typemaker2 --defs-only -I $(srcdir) --destfolder="$(srcdir)" -D GWENHYWFAR_API $(typefiles) gwenhywfar-4.15.2beta/src/base/plugin_p.h0000644000175000017500000000451012416477066015245 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Fri Sep 12 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_PLUGIN_P_H #define GWENHYWFAR_PLUGIN_P_H #include "plugin_l.h" #include #include struct GWEN_PLUGIN_MANAGER { GWEN_INHERIT_ELEMENT(GWEN_PLUGIN_MANAGER) GWEN_LIST_ELEMENT(GWEN_PLUGIN_MANAGER) char *name; char *destLib; GWEN_PLUGIN_LIST *plugins; }; struct GWEN_PLUGIN { GWEN_INHERIT_ELEMENT(GWEN_PLUGIN) GWEN_LIST_ELEMENT(GWEN_PLUGIN) GWEN_PLUGIN_MANAGER *manager; char *name; char *fileName; GWEN_LIBLOADER *libLoader; uint32_t refCount; }; void GWEN_Plugin_SetLibLoader(GWEN_PLUGIN *p, GWEN_LIBLOADER *ll); GWEN_PLUGIN *GWEN_PluginManager__FindPlugin(GWEN_PLUGIN_MANAGER *pm, const char *s); #endif gwenhywfar-4.15.2beta/src/base/gwen_param_list.tm20000644000175000017500000000033112425452307017042 00000000000000 GWEN_PARAM_LIST GWEN_Param_List gwenhywfar-4.15.2beta/src/base/logger.h0000644000175000017500000001542212416477066014713 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sun Dec 05 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_LOGGER_H #define GWEN_LOGGER_H #ifdef __cplusplus extern "C" { #endif #define GWEN_LOGDOMAIN "gwenhywfar" #include #include typedef void GWENHYWFAR_CB (*GWEN_LOGGERFUNCTIONLOG)(const char *s); typedef enum { GWEN_LoggerType_Console, GWEN_LoggerType_File, GWEN_LoggerType_Syslog, GWEN_LoggerType_Function, GWEN_LoggerType_Unknown=9999 } GWEN_LOGGER_LOGTYPE; typedef enum { GWEN_LoggerFacility_Auth=0, GWEN_LoggerFacility_Daemon, GWEN_LoggerFacility_Mail, GWEN_LoggerFacility_News, GWEN_LoggerFacility_User, GWEN_LoggerFacility_Unknown=9999 } GWEN_LOGGER_FACILITY; typedef enum { GWEN_LoggerLevel_Emergency=0, GWEN_LoggerLevel_Alert, GWEN_LoggerLevel_Critical, GWEN_LoggerLevel_Error, GWEN_LoggerLevel_Warning, GWEN_LoggerLevel_Notice, GWEN_LoggerLevel_Info, GWEN_LoggerLevel_Debug, GWEN_LoggerLevel_Verbous, GWEN_LoggerLevel_Unknown=9999 } GWEN_LOGGER_LEVEL; /** * Checks whether a given log domain already exists. * @return 1 if it exists, 0 otherwise */ GWENHYWFAR_API int GWEN_Logger_Exists(const char *logDomain); /** * Sets up logging. It automatically enables logging. * @author Martin Preuss * @param ident this string is prepended to each message logged to identify * the logging program * @param file name of the file to log to. If this is empty and syslog is * available, then all messages are logged via syslog. If syslog is not * available, all messages are logged to the console. * @param logtype how to log (via syslog, to a file, to the console etc) * @param facility what kind of program the log message comes from */ GWENHYWFAR_API int GWEN_Logger_Open(const char *logDomain, const char *ident, const char *file, GWEN_LOGGER_LOGTYPE logtype, GWEN_LOGGER_FACILITY facility); /** * Shuts down logging. Automatically disables logging. * @author Martin Preuss */ GWENHYWFAR_API void GWEN_Logger_Close(const char *logDomain); /** * Checks whether the logger for the given logDomain is open or not. */ GWENHYWFAR_API int GWEN_Logger_IsOpen(const char *logDomain); /** * Log a message. * @author Martin Preuss * @param priority priority of the message * @param s string to log. This string is cut at all occurences of a newline * character thus splitting it into multiple log lines if necessary */ GWENHYWFAR_API int GWEN_Logger_Log(const char *logDomain, GWEN_LOGGER_LEVEL priority, const char *s); /** * Enables or disables logging. * @author Martin Preuss * @param f if 0 then logging is disabled, otherwise it is enabled */ GWENHYWFAR_API void GWEN_Logger_Enable(const char *logDomain, int f); /** * Checks whether logging is enabled. * @author Martin Preuss * @return 0 if disabled, 1 otherwise */ GWENHYWFAR_API int GWEN_Logger_IsEnabled(const char *logDomain); /** * Sets the logger level. All messages with a priority up to the given one * will be logged, all others will not. * @author Martin Preuss * @param l maximum level to be logged */ GWENHYWFAR_API void GWEN_Logger_SetLevel(const char *logDomain, GWEN_LOGGER_LEVEL l); /** * Returns the current log level. * @author Martin Preuss */ GWENHYWFAR_API int GWEN_Logger_GetLevel(const char *logDomain); /** * Set ident string. This string is prepended to every log message and * should contain the name of the running program. * @author Martin Preuss */ GWENHYWFAR_API void GWEN_Logger_SetIdent(const char *logDomain, const char *id); /** * Set the name of the file to be used when logging to a file. */ void GWEN_Logger_SetFilename(const char *logDomain, const char *name); /** * Set logging function. This function is used to log messages in mode * LoggerTypeFunction. * @author Martin Preuss */ GWENHYWFAR_API GWEN_LOGGERFUNCTIONLOG GWEN_Logger_SetLogFunction(const char *logDomain, GWEN_LOGGERFUNCTIONLOG fn); /** * Transforms an ASCII string to a level value. */ GWENHYWFAR_API GWEN_LOGGER_LEVEL GWEN_Logger_Name2Level(const char *name); /** * Transforms a logger level to an ASCII string (for config files, * command line options etc). */ GWENHYWFAR_API const char *GWEN_Logger_Level2Name(GWEN_LOGGER_LEVEL level); /** * Transforms an ASCII string into the corresponding log type. */ GWENHYWFAR_API GWEN_LOGGER_LOGTYPE GWEN_Logger_Name2Logtype(const char *name); /** * Transforms a log type into an ASCII string. */ GWENHYWFAR_API const char *GWEN_Logger_Logtype2Name(GWEN_LOGGER_LOGTYPE lt); /** * This function can be used to generate log messages from within log hooks. */ GWENHYWFAR_API int GWEN_Logger_CreateLogMessage(const char *logDomain, GWEN_LOGGER_LEVEL priority, const char *s, GWEN_BUFFER *mbuf); #ifdef __cplusplus } #endif #endif /* #ifndef CH_LOGGER_H */ gwenhywfar-4.15.2beta/src/base/debug.h0000644000175000017500000002203012416477066014513 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Thu Nov 28 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_DEBUG_H #define GWEN_DEBUG_H #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif #if (defined HAVE_FUNC && (DEBUGMODE>10)) # define DBG_ENTER fprintf(stderr,"Enter \""__func__"\" \n") # define DBG_LEAVE fprintf(stderr,"Leave \""__func__"\" \n") #else # define DBG_ENTER # define DBG_LEAVE #endif #define GWEN_MEMORY_DEBUG_MODE_ALL 0 #define GWEN_MEMORY_DEBUG_MODE_OPEN 1 #define GWEN_MEMORY_DEBUG_MODE_DETAILED 2 #define GWEN_MEMORY_DEBUG_MODE_SHORT 3 typedef struct GWEN_MEMORY_DEBUG_OBJECT GWEN_MEMORY_DEBUG_OBJECT; GWENHYWFAR_API void GWEN_MemoryDebug_Increment(const char *name, const char *wFile, int wLine, int attach); GWENHYWFAR_API void GWEN_MemoryDebug_Decrement(const char *name, const char *wFile, int wLine); GWENHYWFAR_API void GWEN_MemoryDebug_Dump(uint32_t mode); GWENHYWFAR_API void GWEN_MemoryDebug_DumpObject(const char *name, uint32_t mode); GWENHYWFAR_API long int GWEN_MemoryDebug_GetObjectCount(const char *name); GWENHYWFAR_API void GWEN_MemoryDebug_CleanUp(void); #ifdef GWEN_MEMORY_DEBUG # define DBG_MEM_INC(o, attach)\ GWEN_MemoryDebug_Increment(o, __FILE__, __LINE__, attach) # define DBG_MEM_DEC(o)\ GWEN_MemoryDebug_Decrement(o, __FILE__, __LINE__) #else # define DBG_MEM_INC(o, attach) # define DBG_MEM_DEC(o) #endif GWENHYWFAR_API uint32_t GWEN_Debug_Snprintf(char *buffer, uint32_t size, const char *fmt, ...); #ifndef NO_VARIADIC_MACROS # define DBG_ERROR(dbg_logger, format, args...) if (1){\ char dbg_buffer[256]; \ snprintf(dbg_buffer, sizeof(dbg_buffer)-1,\ __FILE__":%5d: " format , __LINE__ , ## args); \ dbg_buffer[sizeof(dbg_buffer)-1]=0; \ GWEN_Logger_Log(dbg_logger, GWEN_LoggerLevel_Error, dbg_buffer);}; #else /* #ifndef NO_VARIADIC_MACROS */ GWENHYWFAR_API void DBG_ERROR(const char *logdomain, const char *format, ...); #endif /* #ifndef NO_VARIADIC_MACROS */ #define DBG_ERROR_ERR(dbg_logger, dbg_err) {\ char dbg_buffer[256]; \ char dbg_errbuff[256]; \ GWEN_Error_ToString(dbg_err,dbg_errbuff, sizeof(dbg_errbuff)); \ snprintf(dbg_buffer, sizeof(dbg_buffer)-1,\ __FILE__":%5d: %s" , __LINE__ , dbg_errbuff); \ dbg_buffer[sizeof(dbg_buffer)-1]=0; \ GWEN_Logger_Log(dbg_logger, GWEN_LoggerLevel_Error, dbg_buffer);}; #ifndef NO_VARIADIC_MACROS # define DBG_WARN(dbg_logger, format, args...) {\ char dbg_buffer[256]; \ snprintf(dbg_buffer, sizeof(dbg_buffer)-1,\ __FILE__":%5d: " format , __LINE__ , ## args); \ dbg_buffer[sizeof(dbg_buffer)-1]=0; \ GWEN_Logger_Log(dbg_logger, GWEN_LoggerLevel_Warning, dbg_buffer);}; #else /* #ifndef NO_VARIADIC_MACROS */ GWENHYWFAR_API void DBG_WARN(const char *logdomain, const char *format, ...); #endif /* #ifndef NO_VARIADIC_MACROS */ #define DBG_WARN_ERR(dbg_logger, dbg_err) {\ char dbg_buffer[256]; \ char dbg_errbuff[256]; \ GWEN_Error_ToString(dbg_err,dbg_errbuff, sizeof(dbg_errbuff)); \ snprintf(dbg_buffer, sizeof(dbg_buffer)-1,\ __FILE__":%5d: %s" , __LINE__ , dbg_errbuff); \ dbg_buffer[sizeof(dbg_buffer)-1]=0; \ GWEN_Logger_Log(dbg_logger, GWEN_LoggerLevel_Warning, dbg_buffer);}; #ifndef NO_VARIADIC_MACROS # define DBG_NOTICE(dbg_logger, format, args...) \ if (GWEN_Logger_GetLevel(dbg_logger)>=GWEN_LoggerLevel_Notice) {\ char dbg_buffer[256]; \ snprintf(dbg_buffer, sizeof(dbg_buffer)-1,\ __FILE__":%5d: " format , __LINE__ , ## args); \ dbg_buffer[sizeof(dbg_buffer)-1]=0; \ GWEN_Logger_Log(dbg_logger, GWEN_LoggerLevel_Notice, dbg_buffer);}; #else /* #ifndef NO_VARIADIC_MACROS */ GWENHYWFAR_API void DBG_NOTICE(const char *logdomain, const char *format, ...); #endif /* #ifndef NO_VARIADIC_MACROS */ #define DBG_NOTICE_ERR(dbg_logger, dbg_err) \ if (GWEN_Logger_GetLevel(dbg_logger)>=GWEN_LoggerLevel_Notice) {\ char dbg_buffer[256]; \ char dbg_errbuff[256]; \ GWEN_Error_ToString(dbg_err,dbg_errbuff, sizeof(dbg_errbuff)); \ snprintf(dbg_buffer, sizeof(dbg_buffer)-1,\ __FILE__":%5d: %s" , __LINE__ , dbg_errbuff); \ dbg_buffer[sizeof(dbg_buffer)-1]=0; \ GWEN_Logger_Log(dbg_logger, GWEN_LoggerLevel_Notice, dbg_buffer);}; #ifndef NO_VARIADIC_MACROS # define DBG_INFO(dbg_logger, format, args...) \ if (GWEN_Logger_GetLevel(dbg_logger)>=GWEN_LoggerLevel_Info) {\ char dbg_buffer[256]; \ snprintf(dbg_buffer, sizeof(dbg_buffer)-1,\ __FILE__":%5d: " format , __LINE__ , ## args); \ dbg_buffer[sizeof(dbg_buffer)-1]=0; \ GWEN_Logger_Log(dbg_logger, GWEN_LoggerLevel_Info, dbg_buffer);}; #else /* #ifndef NO_VARIADIC_MACROS */ GWENHYWFAR_API void DBG_INFO(const char *logdomain, const char *format, ...); #endif /* #ifndef NO_VARIADIC_MACROS */ #define DBG_INFO_ERR(dbg_logger, dbg_err) \ if (GWEN_Logger_GetLevel(dbg_logger)>=GWEN_LoggerLevel_Info) {\ char dbg_buffer[256]; \ char dbg_errbuff[256]; \ GWEN_Error_ToString(dbg_err,dbg_errbuff, sizeof(dbg_errbuff)); \ snprintf(dbg_buffer, sizeof(dbg_buffer)-1,\ __FILE__":%5d: %s" , __LINE__ , dbg_errbuff); \ dbg_buffer[sizeof(dbg_buffer)-1]=0; \ GWEN_Logger_Log(dbg_logger, GWEN_LoggerLevel_Info, dbg_buffer);}; #ifndef DISABLE_DEBUGLOG # ifndef NO_VARIADIC_MACROS # define DBG_DEBUG(dbg_logger, format, args...) \ if (GWEN_Logger_GetLevel(dbg_logger)>=GWEN_LoggerLevel_Debug) {\ char dbg_buffer[256]; \ snprintf(dbg_buffer, sizeof(dbg_buffer)-1,\ __FILE__":%5d: " format , __LINE__ , ## args); \ dbg_buffer[sizeof(dbg_buffer)-1]=0; \ GWEN_Logger_Log(dbg_logger, GWEN_LoggerLevel_Debug, dbg_buffer);}; # define DBG_VERBOUS(dbg_logger, format, args...) \ if (GWEN_Logger_GetLevel(dbg_logger)>=GWEN_LoggerLevel_Verbous) {\ char dbg_buffer[256]; \ snprintf(dbg_buffer, sizeof(dbg_buffer)-1,\ __FILE__":%5d: " format , __LINE__ , ## args); \ dbg_buffer[sizeof(dbg_buffer)-1]=0; \ GWEN_Logger_Log(dbg_logger, GWEN_LoggerLevel_Verbous, dbg_buffer);}; # endif /* #ifndef NO_VARIADIC_MACROS */ # define DBG_DEBUG_ERR(dbg_logger, dbg_err) \ if (GWEN_Logger_GetLevel(dbg_logger)>=GWEN_LoggerLevel_Debug) {\ char dbg_buffer[256]; \ char dbg_errbuff[256]; \ GWEN_Error_ToString(dbg_err,dbg_errbuff, sizeof(dbg_errbuff)); \ snprintf(dbg_buffer, sizeof(dbg_buffer)-1,\ __FILE__":%5d: %s" , __LINE__ , dbg_errbuff); \ dbg_buffer[sizeof(dbg_buffer)-1]=0; \ GWEN_Logger_Log(dbg_logger, GWEN_LoggerLevel_Debug, dbg_buffer);}; # define DBG_VERBOUS_ERR(dbg_logger, dbg_err) \ if (GWEN_Logger_GetLevel(dbg_logger)>=GWEN_LoggerLevel_Verbous) {\ char dbg_buffer[256]; \ char dbg_errbuff[256]; \ GWEN_Error_ToString(dbg_err,dbg_errbuff, sizeof(dbg_errbuff)); \ snprintf(dbg_buffer, sizeof(dbg_buffer)-1,\ __FILE__":%5d: %s" , __LINE__ , dbg_errbuff); \ dbg_buffer[sizeof(dbg_buffer)-1]=0; \ GWEN_Logger_Log(dbg_logger, GWEN_LoggerLevel_Verbous, dbg_buffer);}; #else # ifndef NO_VARIADIC_MACROS # define DBG_DEBUG(dbg_logger, format, args...) # define DBG_VERBOUS(dbg_logger, format, args...) # endif /* ifndef NO_VARIADIC_MACROS */ # define DBG_DEBUG_ERR(dbg_logger, dbg_err) # define DBG_VERBOUS_ERR(dbg_logger, dbg_err) #endif /* DISABLE_DEBUGLOG */ #ifdef NO_VARIADIC_MACROS GWENHYWFAR_API void DBG_DEBUG(const char *logdomain, const char *format, ...); GWENHYWFAR_API void DBG_VERBOUS(const char *logdomain, const char *format, ...); #endif /* #ifdef NO_VARIADIC_MACROS */ #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/base/gwen_param_list2.tm20000644000175000017500000000033412425452307017127 00000000000000 GWEN_PARAM_LIST2 GWEN_Param_List2 gwenhywfar-4.15.2beta/src/base/plugin.c0000644000175000017500000004163112416477066014726 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Thu Apr 03 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "plugin_p.h" #include #include #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include #ifdef HAVE_STRINGS_H # include #endif #include #ifdef OS_WIN32 # include #endif static GWEN_PLUGIN_MANAGER_LIST *gwen_plugin_manager__list=0; GWEN_INHERIT_FUNCTIONS(GWEN_PLUGIN) GWEN_LIST_FUNCTIONS(GWEN_PLUGIN, GWEN_Plugin) GWEN_INHERIT_FUNCTIONS(GWEN_PLUGIN_MANAGER) GWEN_LIST_FUNCTIONS(GWEN_PLUGIN_MANAGER, GWEN_PluginManager) int GWEN_Plugin_ModuleInit(void) { gwen_plugin_manager__list=GWEN_PluginManager_List_new(); return 0; } int GWEN_Plugin_ModuleFini(void) { GWEN_PluginManager_List_free(gwen_plugin_manager__list); return 0; } GWEN_PLUGIN *GWEN_Plugin_new(GWEN_PLUGIN_MANAGER *pm, const char *name, const char *fileName) { GWEN_PLUGIN *p; assert(pm); assert(name); GWEN_NEW_OBJECT(GWEN_PLUGIN, p); DBG_MEM_INC("GWEN_PLUGIN", 0); p->refCount=1; GWEN_INHERIT_INIT(GWEN_PLUGIN, p); GWEN_LIST_INIT(GWEN_PLUGIN, p); p->manager=pm; p->name=strdup(name); if (fileName) p->fileName=strdup(fileName); return p; } void GWEN_Plugin_free(GWEN_PLUGIN *p) { if (p) { DBG_MEM_DEC("GWEN_PLUGIN"); assert(p->refCount); if (--(p->refCount)==0) { GWEN_INHERIT_FINI(GWEN_PLUGIN, p); free(p->name); free(p->fileName); if (p->libLoader) { GWEN_LibLoader_CloseLibrary(p->libLoader); GWEN_LibLoader_free(p->libLoader); } GWEN_LIST_FINI(GWEN_PLUGIN, p); GWEN_FREE_OBJECT(p); } /* if refCount reaches zero */ } /* if p */ } void GWEN_Plugin_Attach(GWEN_PLUGIN *p) { assert(p); assert(p->refCount); DBG_MEM_INC("GWEN_PLUGIN", 1); p->refCount++; } GWEN_PLUGIN_MANAGER *GWEN_Plugin_GetManager(const GWEN_PLUGIN *p) { assert(p); return p->manager; } const char *GWEN_Plugin_GetName(const GWEN_PLUGIN *p) { assert(p); return p->name; } const char *GWEN_Plugin_GetFileName(const GWEN_PLUGIN *p) { assert(p); return p->fileName; } GWEN_LIBLOADER *GWEN_Plugin_GetLibLoader(const GWEN_PLUGIN *p) { assert(p); return p->libLoader; } void GWEN_Plugin_SetLibLoader(GWEN_PLUGIN *p, GWEN_LIBLOADER *ll) { assert(p); p->libLoader=ll; } GWEN_PLUGIN_MANAGER *GWEN_PluginManager_new(const char *name, const char *destLib) { GWEN_PLUGIN_MANAGER *pm; assert(name); assert(destLib); GWEN_NEW_OBJECT(GWEN_PLUGIN_MANAGER, pm); DBG_MEM_INC("GWEN_PLUGIN_MANAGER", 0); GWEN_INHERIT_INIT(GWEN_PLUGIN_MANAGER, pm); GWEN_LIST_INIT(GWEN_PLUGIN_MANAGER, pm); pm->name=strdup(name); pm->destLib=strdup(destLib); pm->plugins=GWEN_Plugin_List_new(); return pm; } void GWEN_PluginManager_free(GWEN_PLUGIN_MANAGER *pm) { if (pm) { DBG_MEM_DEC("GWEN_PLUGIN_MANAGER"); GWEN_Plugin_List_free(pm->plugins); GWEN_INHERIT_FINI(GWEN_PLUGIN_MANAGER, pm); free(pm->destLib); free(pm->name); GWEN_LIST_FINI(GWEN_PLUGIN_MANAGER, pm); GWEN_FREE_OBJECT(pm); } } const char *GWEN_PluginManager_GetName(const GWEN_PLUGIN_MANAGER *pm) { assert(pm); return pm->name; } int GWEN_PluginManager_AddPath(GWEN_PLUGIN_MANAGER *pm, const char *callingLib, const char *s) { assert(pm); return GWEN_PathManager_AddPath(callingLib, pm->destLib, pm->name, s); } int GWEN_PluginManager_AddRelPath(GWEN_PLUGIN_MANAGER *pm, const char *callingLib, const char *s, GWEN_PATHMANAGER_RELMODE rm) { assert(pm); return GWEN_PathManager_AddRelPath(callingLib, pm->destLib, pm->name, s, rm); } int GWEN_PluginManager_InsertPath(GWEN_PLUGIN_MANAGER *pm, const char *callingLib, const char *s) { assert(pm); return GWEN_PathManager_InsertPath(callingLib, pm->destLib, pm->name, s); } int GWEN_PluginManager_InsertRelPath(GWEN_PLUGIN_MANAGER *pm, const char *callingLib, const char *relpath, GWEN_PATHMANAGER_RELMODE rm) { assert(pm); return GWEN_PathManager_InsertRelPath(callingLib, pm->destLib, pm->name, relpath, rm); } int GWEN_PluginManager_RemovePath(GWEN_PLUGIN_MANAGER *pm, const char *callingLib, const char *s) { assert(pm); return GWEN_PathManager_RemovePath(callingLib, pm->destLib, pm->name, s); } #ifdef OS_WIN32 int GWEN_PluginManager_AddPathFromWinReg(GWEN_PLUGIN_MANAGER *pm, const char *callingLib, const char *keypath, const char *varname) { HKEY hkey; TCHAR nbuffer[MAX_PATH]; BYTE vbuffer[MAX_PATH]; DWORD nsize; DWORD vsize; DWORD typ; int i; assert(pm); snprintf(nbuffer, sizeof(nbuffer), keypath); /* open the key */ if (RegOpenKey(HKEY_LOCAL_MACHINE, nbuffer, &hkey)) { DBG_INFO(GWEN_LOGDOMAIN, "RegOpenKey %s failed.", keypath); return 1; } /* find the variablename */ for (i=0;; i++) { nsize=sizeof(nbuffer); vsize=sizeof(vbuffer); if (ERROR_SUCCESS!=RegEnumValue(hkey, i, /* index */ nbuffer, &nsize, 0, /* reserved */ &typ, vbuffer, &vsize)) break; if (strcasecmp(nbuffer, varname)==0 && typ==REG_SZ) { /* variable found */ RegCloseKey(hkey); return GWEN_PathManager_AddPath(callingLib, pm->destLib, pm->name, (char*)vbuffer); } } /* for */ RegCloseKey(hkey); DBG_INFO(GWEN_LOGDOMAIN, "In RegKey \"%s\" the variable \"%s\" does not exist", keypath, varname); return 1; } #else /* OS_WIN32 */ int GWEN_PluginManager_AddPathFromWinReg(GWEN_UNUSED GWEN_PLUGIN_MANAGER *pm, GWEN_UNUSED const char *callingLib, GWEN_UNUSED const char *keypath, GWEN_UNUSED const char *varname) { return 0; } #endif /* OS_WIN32 */ GWEN_PLUGIN *GWEN_PluginManager_LoadPlugin(GWEN_PLUGIN_MANAGER *pm, const char *modname) { GWEN_LIBLOADER *ll; GWEN_PLUGIN *plugin; GWEN_PLUGIN_FACTORYFN fn; void *p; GWEN_BUFFER *nbuf; const char *s; const char *fname; int err; GWEN_STRINGLIST *sl; GWEN_STRINGLISTENTRY *se; assert(pm); ll=GWEN_LibLoader_new(); sl=GWEN_PathManager_GetPaths(pm->destLib, pm->name); if (sl==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No paths for plugins (%s)", pm->name); GWEN_LibLoader_free(ll); return NULL; } nbuf=GWEN_Buffer_new(0, 128, 0, 1); s=modname; while(*s) GWEN_Buffer_AppendByte(nbuf, tolower(*(s++))); se=GWEN_StringList_FirstEntry(sl); fname=0; while(se) { fname=GWEN_StringListEntry_Data(se); assert(fname); if (GWEN_LibLoader_OpenLibraryWithPath(ll, fname, GWEN_Buffer_GetStart(nbuf))==0) break; else { DBG_DEBUG(GWEN_LOGDOMAIN, "Could not load plugin \"%s\" from \"%s\"", modname, fname); } se=GWEN_StringListEntry_Next(se); } if (!se) { DBG_ERROR(GWEN_LOGDOMAIN, "Plugin \"%s\" not found.", modname); GWEN_Buffer_free(nbuf); GWEN_StringList_free(sl); GWEN_LibLoader_free(ll); return NULL; } GWEN_Buffer_free(nbuf); /* create name of init function */ nbuf=GWEN_Buffer_new(0, 128, 0, 1); s=pm->name; while(*s) GWEN_Buffer_AppendByte(nbuf, tolower(*(s++))); GWEN_Buffer_AppendByte(nbuf, '_'); s=modname; while(*s) GWEN_Buffer_AppendByte(nbuf, tolower(*(s++))); GWEN_Buffer_AppendString(nbuf, "_factory"); /* resolve name of factory function */ err=GWEN_LibLoader_Resolve(ll, GWEN_Buffer_GetStart(nbuf), &p); if (err) { DBG_ERROR_ERR(GWEN_LOGDOMAIN, err); GWEN_Buffer_free(nbuf); GWEN_LibLoader_CloseLibrary(ll); GWEN_StringList_free(sl); GWEN_LibLoader_free(ll); return 0; } GWEN_Buffer_free(nbuf); fn=(GWEN_PLUGIN_FACTORYFN)p; assert(fn); plugin=fn(pm, modname, fname); if (!plugin) { DBG_ERROR(GWEN_LOGDOMAIN, "Error in plugin: No plugin created"); GWEN_LibLoader_CloseLibrary(ll); GWEN_StringList_free(sl); GWEN_LibLoader_free(ll); return 0; } /* store libloader */ GWEN_StringList_free(sl); GWEN_Plugin_SetLibLoader(plugin, ll); return plugin; } GWEN_PLUGIN *GWEN_PluginManager_LoadPluginFile(GWEN_PLUGIN_MANAGER *pm, const char *modname, const char *fname) { GWEN_LIBLOADER *ll; GWEN_PLUGIN *plugin; GWEN_PLUGIN_FACTORYFN fn; void *p; GWEN_BUFFER *nbuf; const char *s; int err; ll=GWEN_LibLoader_new(); if (GWEN_LibLoader_OpenLibrary(ll, fname)) { DBG_INFO(GWEN_LOGDOMAIN, "Could not load plugin \"%s\" (%s)", modname, fname); GWEN_LibLoader_free(ll); return 0; } /* create name of init function */ nbuf=GWEN_Buffer_new(0, 128, 0, 1); s=pm->name; while(*s) GWEN_Buffer_AppendByte(nbuf, tolower(*(s++))); GWEN_Buffer_AppendByte(nbuf, '_'); s=modname; while(*s) GWEN_Buffer_AppendByte(nbuf, tolower(*(s++))); GWEN_Buffer_AppendString(nbuf, "_factory"); /* resolve name of factory function */ err=GWEN_LibLoader_Resolve(ll, GWEN_Buffer_GetStart(nbuf), &p); if (err) { DBG_INFO_ERR(GWEN_LOGDOMAIN, err); GWEN_Buffer_free(nbuf); GWEN_LibLoader_CloseLibrary(ll); GWEN_LibLoader_free(ll); return 0; } GWEN_Buffer_free(nbuf); fn=(GWEN_PLUGIN_FACTORYFN)p; assert(fn); plugin=fn(pm, modname, fname); if (!plugin) { DBG_INFO(GWEN_LOGDOMAIN, "Error in plugin: No plugin created"); GWEN_LibLoader_CloseLibrary(ll); GWEN_LibLoader_free(ll); return 0; } /* store libloader */ GWEN_Plugin_SetLibLoader(plugin, ll); return plugin; } GWEN_PLUGIN *GWEN_PluginManager__FindPlugin(GWEN_PLUGIN_MANAGER *pm, const char *s) { GWEN_PLUGIN *p; assert(pm); p=GWEN_Plugin_List_First(pm->plugins); while(p) { if (strcasecmp(p->name, s)==0) break; p=GWEN_Plugin_List_Next(p); } return p; } GWEN_PLUGIN *GWEN_PluginManager_GetPlugin(GWEN_PLUGIN_MANAGER *pm, const char *s) { GWEN_PLUGIN *p; p=GWEN_PluginManager__FindPlugin(pm, s); if (p) return p; p=GWEN_PluginManager_LoadPlugin(pm, s); if (p) { GWEN_Plugin_List_Add(p, pm->plugins); return p; } DBG_INFO(GWEN_LOGDOMAIN, "Plugin \"%s\" not found", s); return 0; } GWEN_PLUGIN_MANAGER *GWEN_PluginManager_FindPluginManager(const char *s) { GWEN_PLUGIN_MANAGER *pm; pm=GWEN_PluginManager_List_First(gwen_plugin_manager__list); while(pm) { if (strcasecmp(pm->name, s)==0) break; pm=GWEN_PluginManager_List_Next(pm); } return pm; } int GWEN_PluginManager_Register(GWEN_PLUGIN_MANAGER *pm) { GWEN_PLUGIN_MANAGER *tpm; int rv; assert(gwen_plugin_manager__list); assert(pm); tpm=GWEN_PluginManager_FindPluginManager(pm->name); if (tpm) { DBG_ERROR(GWEN_LOGDOMAIN, "Plugin type \"%s\" already registered", pm->name); return -1; } rv=GWEN_PathManager_DefinePath(pm->destLib, pm->name); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "Could not define path for plugin [%s:%s]", pm->destLib, pm->name); return rv; } GWEN_PluginManager_List_Add(pm, gwen_plugin_manager__list); DBG_INFO(GWEN_LOGDOMAIN, "Plugin type \"%s\" registered", pm->name); return 0; } int GWEN_PluginManager_Unregister(GWEN_PLUGIN_MANAGER *pm) { GWEN_PLUGIN_MANAGER *tpm; int rv; assert(gwen_plugin_manager__list); assert(pm); tpm=GWEN_PluginManager_FindPluginManager(pm->name); if (!tpm) { DBG_ERROR(GWEN_LOGDOMAIN, "Plugin type \"%s\" not registered", pm->name); return -1; } rv=GWEN_PathManager_UndefinePath(pm->destLib, pm->name); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "Could not undefine path for plugin [%s:%s]", pm->destLib, pm->name); return rv; } GWEN_PluginManager_List_Del(pm); DBG_INFO(GWEN_LOGDOMAIN, "Plugin type \"%s\" unregistered", pm->name); return 0; } GWEN_PLUGIN_DESCRIPTION_LIST2* GWEN_PluginManager_GetPluginDescrs(GWEN_PLUGIN_MANAGER *pm) { GWEN_PLUGIN_DESCRIPTION_LIST2 *pl; GWEN_STRINGLIST *sl; GWEN_STRINGLISTENTRY *se; sl=GWEN_PathManager_GetPaths(pm->destLib, pm->name); if (sl==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No paths for plugins (%s)", pm->name); return NULL; } se=GWEN_StringList_FirstEntry(sl); if (!se) { DBG_ERROR(GWEN_LOGDOMAIN, "No paths given"); GWEN_StringList_free(sl); return 0; } pl=GWEN_PluginDescription_List2_new(); while(se) { int rv; const char *path; path=GWEN_StringListEntry_Data(se); assert(path); rv=GWEN_LoadPluginDescrsByType(path, pm->name, pl); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "Error loading plugin description in \"%s\"", path); } se=GWEN_StringListEntry_Next(se); } /* while */ if (GWEN_PluginDescription_List2_GetSize(pl)==0) { GWEN_PluginDescription_List2_free(pl); GWEN_StringList_free(sl); return 0; } GWEN_StringList_free(sl); return pl; } GWEN_STRINGLIST *GWEN_PluginManager_GetPaths(const GWEN_PLUGIN_MANAGER *pm) { assert(pm); return GWEN_PathManager_GetPaths(pm->destLib, pm->name); } GWEN_PLUGIN_DESCRIPTION* GWEN_PluginManager_GetPluginDescr(GWEN_PLUGIN_MANAGER *pm, const char *modName) { GWEN_PLUGIN_DESCRIPTION_LIST2 *dl; dl=GWEN_PluginManager_GetPluginDescrs(pm); if (dl==0) return 0; else { GWEN_PLUGIN_DESCRIPTION_LIST2_ITERATOR *dit; dit=GWEN_PluginDescription_List2_First(dl); if (dit) { GWEN_PLUGIN_DESCRIPTION *d; d=GWEN_PluginDescription_List2Iterator_Data(dit); while(d) { if (strcasecmp(GWEN_PluginDescription_GetName(d), modName)==0) break; d=GWEN_PluginDescription_List2Iterator_Next(dit); } GWEN_PluginDescription_List2Iterator_free(dit); if (d) { d=GWEN_PluginDescription_dup(d); GWEN_PluginDescription_List2_freeAll(dl); return d; } } GWEN_PluginDescription_List2_freeAll(dl); } return 0; } void GWEN_PluginManager_AddPlugin(GWEN_PLUGIN_MANAGER *pm, GWEN_PLUGIN *p) { #if 0 DBG_ERROR(0, "Adding plugin [%s] of type [%s]", p->name, pm->name); #endif GWEN_Plugin_List_Add(p, pm->plugins); } gwenhywfar-4.15.2beta/src/base/idmap.c0000644000175000017500000002707312416477066014526 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: idlist.c 705 2005-02-23 02:16:57Z aquamaniac $ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "idmap_p.h" #include #include #include #include #include GWEN_IDMAP *GWEN_IdMap_new(GWEN_IDMAP_ALGO algo) { GWEN_IDMAP *map; GWEN_NEW_OBJECT(GWEN_IDMAP, map); map->algo=algo; switch(algo) { case GWEN_IdMapAlgo_Hex4: GWEN_IdMapHex4_Extend(map); break; case GWEN_IdMapAlgo_Unknown: default: DBG_ERROR(GWEN_LOGDOMAIN, "Unknown algo %d", algo); GWEN_IdMap_free(map); return 0; } return map; } void GWEN_IdMap_free(GWEN_IDMAP *map) { assert(map); if (map->freeDataFn) map->freeDataFn(map); GWEN_FREE_OBJECT(map); } GWEN_IDMAP_RESULT GWEN_IdMap_Insert(GWEN_IDMAP *map, uint32_t id, void *ptr) { assert(map); assert(ptr); assert(map->setPairFn); return map->setPairFn(map, id, ptr); } GWEN_IDMAP_RESULT GWEN_IdMap_Remove(GWEN_IDMAP *map, uint32_t id) { assert(map); assert(map->setPairFn); return map->setPairFn(map, id, 0); } void *GWEN_IdMap_Find(GWEN_IDMAP *map, uint32_t id) { assert(map); assert(map->getPairFn); return map->getPairFn(map, id); } GWEN_IDMAP_RESULT GWEN_IdMap_GetFirst(const GWEN_IDMAP *map, uint32_t *pid) { assert(map); assert(map->findFirstFn); return map->findFirstFn(map, pid); } GWEN_IDMAP_RESULT GWEN_IdMap_GetNext(const GWEN_IDMAP *map, uint32_t *pid) { assert(map); assert(map->findNextFn); return map->findNextFn(map, pid); } uint32_t GWEN_IdMap_GetSize(const GWEN_IDMAP *map) { assert(map); return map->count; } void GWEN_IdMap_Clear(GWEN_IDMAP *map) { assert(map); if (map->freeDataFn) map->freeDataFn(map); map->algoData=0; switch(map->algo) { case GWEN_IdMapAlgo_Hex4: GWEN_IdMapHex4_Extend(map); break; case GWEN_IdMapAlgo_Unknown: default: DBG_ERROR(GWEN_LOGDOMAIN, "Unknown algo %d", map->algo); } } void GWEN_IdMap_Dump(GWEN_IDMAP *map, FILE *f, int indent) { assert(map); if (map->dumpFn) map->dumpFn(map, f, indent); else { DBG_ERROR(GWEN_LOGDOMAIN, "No dump fn"); } } /* _________________________________________________________________________ * AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA * Algo: HEX4 * YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY */ void GWEN_IdMapHex4_Extend(GWEN_IDMAP *map) { GWEN_IDMAP_HEX4 *xmap; GWEN_NEW_OBJECT(GWEN_IDMAP_HEX4, xmap); xmap->table=GWEN_IdMapHex4Map_new(0, 0); map->algoData=(void*)xmap; map->setPairFn=GWEN_IdMapHex4_Insert; map->getPairFn=GWEN_IdMapHex4_Find; map->findFirstFn=GWEN_IdMapHex4_FindFirst; map->findNextFn=GWEN_IdMapHex4_FindNext; map->freeDataFn=GWEN_IdMapHex4_free; map->dumpFn=GWEN_IdMapHex4_Dump; } void GWEN_IdMapHex4_free(GWEN_IDMAP *map) { GWEN_IDMAP_HEX4 *xmap; xmap=(GWEN_IDMAP_HEX4*)map->algoData; GWEN_IdMapHex4Map_free(xmap->table); GWEN_FREE_OBJECT(xmap); } GWEN_IDMAP_HEX4_TABLE *GWEN_IdMapHex4Map_new(GWEN_IDMAP_HEX4_TABLE *p, int isPtrTable) { GWEN_IDMAP_HEX4_TABLE *t; GWEN_NEW_OBJECT(GWEN_IDMAP_HEX4_TABLE, t); t->parent=p; t->isPtrTable=isPtrTable; return t; } void GWEN_IdMapHex4Map_free(GWEN_IDMAP_HEX4_TABLE *t) { if (t) { if (!(t->isPtrTable)) { int i; for(i=0; i<16; i++) { if (t->ptrs[i]) GWEN_IdMapHex4Map_free(t->ptrs[i]); } } GWEN_FREE_OBJECT(t); } } GWEN_IDMAP_RESULT GWEN_IdMapHex4_Insert(GWEN_IDMAP *map, uint32_t id, void *ptr) { GWEN_IDMAP_HEX4 *xmap; void **p; GWEN_IDMAP_HEX4_TABLE *t; xmap=(GWEN_IDMAP_HEX4*)map->algoData; t=xmap->table; p=&(t->ptrs[(id>>28) & 0xf]); if (!*p) { if (ptr==0) return GWEN_IdMapResult_NotFound; *p=(void*)GWEN_IdMapHex4Map_new(t, 0); } t=(GWEN_IDMAP_HEX4_TABLE*) *p; p=&(t->ptrs[(id>>24) & 0xf]); if (!*p) { if (ptr==0) return GWEN_IdMapResult_NotFound; *p=(void*)GWEN_IdMapHex4Map_new(t, 0); } t=(GWEN_IDMAP_HEX4_TABLE*) *p; p=&(t->ptrs[(id>>20) & 0xf]); if (!*p) { if (ptr==0) return GWEN_IdMapResult_NotFound; *p=(void*)GWEN_IdMapHex4Map_new(t, 0); } t=(GWEN_IDMAP_HEX4_TABLE*) *p; p=&(t->ptrs[(id>>16) & 0xf]); if (!*p) { if (ptr==0) return GWEN_IdMapResult_NotFound; *p=(void*)GWEN_IdMapHex4Map_new(t, 0); } t=(GWEN_IDMAP_HEX4_TABLE*) *p; p=&(t->ptrs[(id>>12) & 0xf]); if (!*p) { if (ptr==0) return GWEN_IdMapResult_NotFound; *p=(void*)GWEN_IdMapHex4Map_new(t, 0); } t=(GWEN_IDMAP_HEX4_TABLE*) *p; p=&(t->ptrs[(id>>8) & 0xf]); if (!*p) { if (ptr==0) return GWEN_IdMapResult_NotFound; *p=(void*)GWEN_IdMapHex4Map_new(t, 0); } t=(GWEN_IDMAP_HEX4_TABLE*) *p; p=&(t->ptrs[(id>>4) & 0xf]); if (!*p) { if (ptr==0) return GWEN_IdMapResult_NotFound; *p=(void*)GWEN_IdMapHex4Map_new(t, 1); } t=(GWEN_IDMAP_HEX4_TABLE*) *p; p=&(t->ptrs[id & 0xf]); *p=ptr; if (ptr==0) { assert(map->count); map->count--; /* do some cleanup */ for (;;) { GWEN_IDMAP_HEX4_TABLE *parent; int i; parent=t->parent; id>>=4; if (parent==0) break; for (i=0; i<16; i++) { if (t->ptrs[i]!=0) break; } if (i<16) break; /* DBG_ERROR(0, "Deleting table %x", id); */ GWEN_IdMapHex4Map_free(t); parent->ptrs[id & 0xf]=0; t=parent; } } else map->count++; return GWEN_IdMapResult_Ok; } void *GWEN_IdMapHex4_Find(GWEN_IDMAP *map, uint32_t id) { GWEN_IDMAP_HEX4 *xmap; GWEN_IDMAP_HEX4_TABLE *t; xmap=(GWEN_IDMAP_HEX4*)map->algoData; t=xmap->table; if (!t) return 0; t=(GWEN_IDMAP_HEX4_TABLE*)(t->ptrs[(id>>28)&0xf]); if (!t) return 0; t=(GWEN_IDMAP_HEX4_TABLE*)(t->ptrs[(id>>24)&0xf]); if (!t) return 0; t=(GWEN_IDMAP_HEX4_TABLE*)(t->ptrs[(id>>20)&0xf]); if (!t) return 0; t=(GWEN_IDMAP_HEX4_TABLE*)(t->ptrs[(id>>16)&0xf]); if (!t) return 0; t=(GWEN_IDMAP_HEX4_TABLE*)(t->ptrs[(id>>12)&0xf]); if (!t) return 0; t=(GWEN_IDMAP_HEX4_TABLE*)(t->ptrs[(id>>8)&0xf]); if (!t) return 0; t=(GWEN_IDMAP_HEX4_TABLE*)(t->ptrs[(id>>4)&0xf]); if (!t) return 0; return (t->ptrs[id & 0xf]); } GWEN_IDMAP_HEX4_TABLE *GWEN_IdMapHex4__GetTable(GWEN_IDMAP_HEX4_TABLE *t, uint32_t id) { void **p; p=&(t->ptrs[(id>>28) & 0xf]); if (!*p) return 0; t=(GWEN_IDMAP_HEX4_TABLE*) *p; p=&(t->ptrs[(id>>24) & 0xf]); if (!*p) return 0; t=(GWEN_IDMAP_HEX4_TABLE*) *p; p=&(t->ptrs[(id>>20) & 0xf]); if (!*p) return 0; t=(GWEN_IDMAP_HEX4_TABLE*) *p; p=&(t->ptrs[(id>>16) & 0xf]); if (!*p) return 0; t=(GWEN_IDMAP_HEX4_TABLE*) *p; p=&(t->ptrs[(id>>12) & 0xf]); if (!*p) return 0; t=(GWEN_IDMAP_HEX4_TABLE*) *p; p=&(t->ptrs[(id>>8) & 0xf]); if (!*p) return 0; t=(GWEN_IDMAP_HEX4_TABLE*) *p; p=&(t->ptrs[(id>>4) & 0xf]); if (!*p) return 0; t=(GWEN_IDMAP_HEX4_TABLE*) *p; return t; } GWEN_IDMAP_HEX4_TABLE *GWEN_IdMapHex4__GetFirstTable(GWEN_IDMAP_HEX4_TABLE *t, uint32_t *pid) { uint32_t id; int i; /* id=*pid; */ id=0; for (i=0; i<16; i++) { if (t->ptrs[i]) { uint32_t lid; lid=(id<<4) | i; if (t->isPtrTable) { *pid=lid; return t; } else { GWEN_IDMAP_HEX4_TABLE *dt; dt=GWEN_IdMapHex4__GetFirstTable((GWEN_IDMAP_HEX4_TABLE*)(t->ptrs[i]), &lid); if (dt) { *pid=lid; return dt; } } } } return 0; } GWEN_IDMAP_HEX4_TABLE *GWEN_IdMapHex4__GetNextTable(GWEN_IDMAP_HEX4_TABLE *t, uint32_t *pid, int incr) { uint32_t id; id=*pid; while (t) { int i; if (incr) { while (t && (id & 0xf)==0xf) { t=t->parent; id>>=4; } if (!t) return 0; id++; } for (i=id & 0xf; i<16; i++) { if (t->ptrs[i]) { uint32_t lid; lid=((id & 0xfffffff0) | i); if (t->isPtrTable) { *pid=lid; return t; } else { GWEN_IDMAP_HEX4_TABLE *dt; lid=lid<<4; dt=GWEN_IdMapHex4__GetNextTable((GWEN_IDMAP_HEX4_TABLE*)(t->ptrs[i]), &lid, 0); if (dt) { *pid=lid; return dt; } } } } id>>=4; t=t->parent; } return 0; } GWEN_IDMAP_RESULT GWEN_IdMapHex4_FindFirst(const GWEN_IDMAP *map, uint32_t *pid) { GWEN_IDMAP_HEX4_TABLE *t; GWEN_IDMAP_HEX4 *xmap; uint32_t id; xmap=(GWEN_IDMAP_HEX4*)map->algoData; t=GWEN_IdMapHex4__GetFirstTable(xmap->table, &id); if (t) { *pid=id; return GWEN_IdMapResult_Ok; } return GWEN_IdMapResult_NotFound; } GWEN_IDMAP_RESULT GWEN_IdMapHex4_FindNext(const GWEN_IDMAP *map, uint32_t *pid) { GWEN_IDMAP_HEX4_TABLE *t; GWEN_IDMAP_HEX4 *xmap; uint32_t id; xmap=(GWEN_IDMAP_HEX4*)map->algoData; id=*pid; t=GWEN_IdMapHex4__GetTable(xmap->table, id); assert(t); t=GWEN_IdMapHex4__GetNextTable(t, &id, 1); if (t) { *pid=id; return GWEN_IdMapResult_Ok; } return GWEN_IdMapResult_NotFound; } void GWEN_IdMapHex4__Dump(GWEN_IDMAP_HEX4_TABLE *tbl, FILE *f, int indent) { int i; for (i=0; i<16; i++) { int j; if (tbl->ptrs[i]) { for (j=0; jptrs[i]); if (!(tbl->isPtrTable)) GWEN_IdMapHex4__Dump(tbl->ptrs[i], f, indent+2); } } } void GWEN_IdMapHex4_Dump(GWEN_IDMAP *map, FILE *f, int indent) { GWEN_IDMAP_HEX4 *xmap; xmap=(GWEN_IDMAP_HEX4*)map->algoData; GWEN_IdMapHex4__Dump(xmap->table, f, indent); } gwenhywfar-4.15.2beta/src/base/debug.c0000644000175000017500000003476212416477066014525 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sun Dec 04 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "debug_p.h" #include #include #include #ifdef HAVE_STRINGS_H # include #endif #include static GWEN_MEMORY_DEBUG_OBJECT *gwen_debug__memobjects=0; uint32_t GWEN_Debug_PrintDec(char *buffer, uint32_t size, uint32_t num, int leadingZero, uint32_t length) { uint32_t i; uint32_t j; uint32_t k; char numbuf[16]; int numOr; /* first convert number */ numOr=0; i=0; j=1000000000; while(j) { k=num/j; numOr|=k; if (numOr || leadingZero || j==1) { numbuf[i]=k+'0'; i++; } num-=(k*j); j/=10; } /* while j */ j=0; if (length) { if (i>length) i=length; /* fill left up to length-(sizeof number) */ k=length-i; while(k) { if (j>((j-1)*4))&0xf; numOr|=k; if (numOr || leadingZero || j==1) { if (k>9) { if (up) numbuf[i]=k+'0'+7; else numbuf[i]=k+'0'+7+32; } else numbuf[i]=k+'0'; i++; } j--; } /* while j */ j=0; if (length) { if (i>length) i=length; /* fill left up to length-(sizeof number) */ k=length-i; while(k) { if (j='0' && (*fmt)<='9') { /* read number */ if (*fmt=='0') { leadingZero=1; } while ((*fmt)>='0' && (*fmt)<='9') { length*=10; length+=*fmt-'0'; fmt++; } /* while */ } /* read type */ switch(*fmt) { /* decimal integer */ case 'c': case 'd': { int p; p=va_arg(arguments, int); if (p<0) { if (i=GWEN_LoggerLevelNotice) { va_list args; char dbg_buffer[256]; va_start(args, format); vsnprintf(dbg_buffer, sizeof(dbg_buffer)-1, format, args); dbg_buffer[sizeof(dbg_buffer)-1] = 0; GWEN_Logger_Log(dbg_logger, GWEN_LoggerLevelNotice, dbg_buffer); va_end(args); } } void DBG_INFO(const char *dbg_logger, const char *format, ...) { if (GWEN_Logger_GetLevel(dbg_logger)>=GWEN_LoggerLevelInfo) { va_list args; char dbg_buffer[256]; va_start(args, format); vsnprintf(dbg_buffer, sizeof(dbg_buffer)-1, format, args); dbg_buffer[sizeof(dbg_buffer)-1] = 0; GWEN_Logger_Log(dbg_logger, GWEN_LoggerLevelInfo, dbg_buffer); va_end(args); } } void DBG_DEBUG(const char *dbg_logger, const char *format, ...) { # ifndef DISABLE_DEBUGLOG if (GWEN_Logger_GetLevel(dbg_logger)>=GWEN_LoggerLevelDebug) { va_list args; char dbg_buffer[256]; va_start(args, format); vsnprintf(dbg_buffer, sizeof(dbg_buffer)-1, format, args); dbg_buffer[sizeof(dbg_buffer)-1] = 0; GWEN_Logger_Log(dbg_logger, GWEN_LoggerLevelDebug, dbg_buffer); va_end(args); } # endif /* DISABLE_DEBUGLOG */ } void DBG_VERBOUS(const char *dbg_logger, const char *format, ...) { # ifndef DISABLE_DEBUGLOG if (GWEN_Logger_GetLevel(dbg_logger)>=GWEN_LoggerLevelVerbous) { va_list args; char dbg_buffer[256]; va_start(args, format); vsnprintf(dbg_buffer, sizeof(dbg_buffer)-1, format, args); dbg_buffer[sizeof(dbg_buffer)-1] = 0; GWEN_Logger_Log(dbg_logger, GWEN_LoggerLevelVerbous, dbg_buffer); va_end(args); } # endif /* DISABLE_DEBUGLOG */ } #endif /* NO_VARIADIC_MACROS */ GWEN_MEMORY_DEBUG_ENTRY* GWEN_MemoryDebugEntry_new(GWEN_MEMORY_DEBUG_ENTRY_TYPE t, const char *wFile, int wLine) { GWEN_MEMORY_DEBUG_ENTRY *e; assert(wFile); assert(wLine); GWEN_NEW_OBJECT(GWEN_MEMORY_DEBUG_ENTRY, e); e->file=strdup(wFile); e->line=wLine; e->type=t; return e; } void GWEN_MemoryDebugEntry_free(GWEN_MEMORY_DEBUG_ENTRY *e) { if (e) { free(e->file); GWEN_FREE_OBJECT(e); } } GWEN_MEMORY_DEBUG_OBJECT *GWEN_MemoryDebugObject_new(const char *name) { GWEN_MEMORY_DEBUG_OBJECT *o; assert(name); GWEN_NEW_OBJECT(GWEN_MEMORY_DEBUG_OBJECT, o); o->name=strdup(name); return o; } void GWEN_MemoryDebugObject_free(GWEN_MEMORY_DEBUG_OBJECT *o) { if (o) { GWEN_MEMORY_DEBUG_ENTRY *e; e=o->entries; while(e) { GWEN_MEMORY_DEBUG_ENTRY *next; next=e->next; GWEN_MemoryDebugEntry_free(e); e=next; } free(o->name); GWEN_FREE_OBJECT(o); } } GWEN_MEMORY_DEBUG_OBJECT *GWEN_MemoryDebug__FindObject(const char *name) { GWEN_MEMORY_DEBUG_OBJECT *o; o=gwen_debug__memobjects; while(o) { assert(o->name); if (strcasecmp(o->name, name)==0) break; if (o->next==o) { DBG_ERROR(GWEN_LOGDOMAIN, "What ?? Pointing to myself ??"); abort(); } o=o->next; } return o; } void GWEN_MemoryDebug_Increment(const char *name, const char *wFile, int wLine, int attach) { GWEN_MEMORY_DEBUG_OBJECT *o; GWEN_MEMORY_DEBUG_ENTRY *e; assert(name); assert(wFile); assert(wLine); o=GWEN_MemoryDebug__FindObject(name); if (!o) { o=GWEN_MemoryDebugObject_new(name); GWEN_LIST_ADD(GWEN_MEMORY_DEBUG_OBJECT, o, &gwen_debug__memobjects); e=GWEN_MemoryDebugEntry_new(attach?GWEN_MemoryDebugEntryTypeAttach: GWEN_MemoryDebugEntryTypeCreate, wFile, wLine); GWEN_LIST_ADD(GWEN_MEMORY_DEBUG_ENTRY, e, &(o->entries)); o->count++; } else { e=GWEN_MemoryDebugEntry_new(attach?GWEN_MemoryDebugEntryTypeAttach: GWEN_MemoryDebugEntryTypeCreate, wFile, wLine); GWEN_LIST_ADD(GWEN_MEMORY_DEBUG_ENTRY, e, &(o->entries)); o->count++; } } void GWEN_MemoryDebug_Decrement(const char *name, const char *wFile, int wLine) { GWEN_MEMORY_DEBUG_OBJECT *o; GWEN_MEMORY_DEBUG_ENTRY *e; assert(name); assert(wFile); assert(wLine); o=GWEN_MemoryDebug__FindObject(name); if (!o) { DBG_ERROR(GWEN_LOGDOMAIN, "Object to be freed not found (%s at %s:%d)", name, wFile, wLine); o=GWEN_MemoryDebugObject_new(name); GWEN_LIST_ADD(GWEN_MEMORY_DEBUG_OBJECT, o, &gwen_debug__memobjects); e=GWEN_MemoryDebugEntry_new(GWEN_MemoryDebugEntryTypeFree, wFile, wLine); GWEN_LIST_ADD(GWEN_MEMORY_DEBUG_ENTRY, e, &(o->entries)); o->count--; } else { e=GWEN_MemoryDebugEntry_new(GWEN_MemoryDebugEntryTypeFree, wFile, wLine); GWEN_LIST_ADD(GWEN_MEMORY_DEBUG_ENTRY, e, &(o->entries)); o->count--; } } void GWEN_MemoryDebug__DumpObject(GWEN_MEMORY_DEBUG_OBJECT *o, uint32_t mode) { DBG_ERROR(0, "Object \"%s\" (count=%ld)", o->name, o->count); if (o->count!=0 || mode==GWEN_MEMORY_DEBUG_MODE_DETAILED) { GWEN_MEMORY_DEBUG_ENTRY *e; if (mode!=GWEN_MEMORY_DEBUG_MODE_SHORT) { e=o->entries; while(e) { const char *s; fprintf(stderr, " "); switch(e->type) { case GWEN_MemoryDebugEntryTypeCreate: s="created"; break; case GWEN_MemoryDebugEntryTypeAttach: s="attached"; break; case GWEN_MemoryDebugEntryTypeFree: s="freed"; break; default: s=""; break; } DBG_ERROR(0, " %s at %s:%d", s, e->file, e->line); e=e->next; } /* while e */ } } } void GWEN_MemoryDebug_DumpObject(const char *name, uint32_t mode) { GWEN_MEMORY_DEBUG_OBJECT *o; assert(name); o=GWEN_MemoryDebug__FindObject(name); if (!o) { DBG_ERROR(GWEN_LOGDOMAIN, "Object \"%s\" not found", name); } else GWEN_MemoryDebug__DumpObject(o, mode); } long int GWEN_MemoryDebug_GetObjectCount(const char *name) { GWEN_MEMORY_DEBUG_OBJECT *o; assert(name); o=GWEN_MemoryDebug__FindObject(name); if (!o) { DBG_ERROR(GWEN_LOGDOMAIN, "Object \"%s\" not found", name); return 0; } else return o->count; } void GWEN_MemoryDebug_Dump(uint32_t mode) { GWEN_MEMORY_DEBUG_OBJECT *o; DBG_ERROR(0, "Gwenhywfar Memory Debugger Statistics:"); DBG_ERROR(0, "====================================== begin\n"); o=gwen_debug__memobjects; while(o) { GWEN_MemoryDebug__DumpObject(o, mode); o=o->next; } DBG_ERROR(0, "====================================== end\n"); } void GWEN_MemoryDebug_CleanUp(void) { GWEN_MEMORY_DEBUG_OBJECT *o; o=gwen_debug__memobjects; while(o) { GWEN_MEMORY_DEBUG_OBJECT *next; next=o->next; GWEN_MemoryDebugObject_free(o); o=next; } gwen_debug__memobjects=0; } gwenhywfar-4.15.2beta/src/base/idlist64.h0000644000175000017500000001232412364015347015064 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /** @file idlist.h * @short A list of uint64_t objects */ #ifndef GWENHYWFAR_IDLIST64_H #define GWENHYWFAR_IDLIST64_H #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_IDLIST64 GWEN_IDLIST64; typedef struct GWEN_IDLIST64_ITERATOR GWEN_IDLIST64_ITERATOR; #ifdef __cplusplus } #endif #include #include #ifdef __cplusplus extern "C" { #endif /** * @defgroup MOD_IDLIST64 ID list module * @ingroup MOD_BASE * @short A list of uint64_t objects * * This is basically a list for uint64_t objects, * but since it uses tables instead of those list objects normally used * throughout Gwen it is less memory consuming. */ /*@{*/ /** * Constructor. */ GWENHYWFAR_API GWEN_IDLIST64 *GWEN_IdList64_new(void); /** * Destructor. */ GWENHYWFAR_API void GWEN_IdList64_free(GWEN_IDLIST64 *idl); GWENHYWFAR_API void GWEN_IdList64_Attach(GWEN_IDLIST64 *idl); /** * Returns a new id list which contains all the ids of the given list * in the same order. However, the list returned might be more * is compact (i.e. it has fewer wholes), so the positions of ids * within the list might have changed!. */ GWENHYWFAR_API GWEN_IDLIST64 *GWEN_IdList64_dup(const GWEN_IDLIST64 *idl); /** * Removes all ids from the list thus leaving it empty. */ GWENHYWFAR_API void GWEN_IdList64_Clear(GWEN_IDLIST64 *idl); /** * Adds an id to the list. This function does no doublecheck. */ GWENHYWFAR_API int GWEN_IdList64_AddId(GWEN_IDLIST64 *idl, uint64_t id); /** * Removes the first occurrence of the given id. * @return 0 if deleted, !=0 if the id wasn't found */ GWENHYWFAR_API int GWEN_IdList64_DelId(GWEN_IDLIST64 *idl, uint64_t id); /** * Checks whether the given id exists in the idlist. * @return 0 if found, !=0 otherwise */ GWENHYWFAR_API int GWEN_IdList64_HasId(const GWEN_IDLIST64 *idl, uint64_t id); /** * @deprecated * This function is deprecated, please use @ref GWEN_IdList64_Iterator_new * instead. */ GWENHYWFAR_API DEPRECATED uint64_t GWEN_IdList64_GetFirstId(GWEN_IDLIST64 *idl); /** * @deprecated * This function is deprecated, please use @ref GWEN_IdList64_Iterator_new * instead. */ GWENHYWFAR_API DEPRECATED uint64_t GWEN_IdList64_GetNextId(GWEN_IDLIST64 *idl); /** * @deprecated * This function is deprecated, please use @ref GWEN_IdList64_Iterator_new * instead. */ GWENHYWFAR_API DEPRECATED uint64_t GWEN_IdList64_GetFirstId2(const GWEN_IDLIST64 *idl, uint64_t *hdl); /** * @deprecated * This function is deprecated, please use @ref GWEN_IdList64_Iterator_new * instead. */ GWENHYWFAR_API DEPRECATED uint64_t GWEN_IdList64_GetNextId2(const GWEN_IDLIST64 *idl, uint64_t *hdl); /** * Sorts the ids in ascending order */ GWENHYWFAR_API int GWEN_IdList64_Sort(GWEN_IDLIST64 *idl); GWENHYWFAR_API int GWEN_IdList64_ReverseSort(GWEN_IDLIST64 *idl); /** * Always append id at the end of the list. */ GWENHYWFAR_API int GWEN_IdList64_AppendId(GWEN_IDLIST64 *idl, uint64_t id); GWENHYWFAR_API uint64_t GWEN_IdList64_GetIdAt(const GWEN_IDLIST64 *idl, uint64_t index); GWENHYWFAR_API uint64_t GWEN_IdList64_GetEntryCount(const GWEN_IDLIST64 *idl); /*@}*/ /** * @defgroup MOD_IDLIST64_ITERATOR Iterator for ID list module * @ingroup MOD_BASE * @short Iterator for a list of uint64_t objects * */ /*@{*/ GWENHYWFAR_API GWEN_IDLIST64_ITERATOR *GWEN_IdList64_Iterator_new(GWEN_IDLIST64 *idl); GWENHYWFAR_API void GWEN_IdList64_Iterator_free(GWEN_IDLIST64_ITERATOR *it); GWENHYWFAR_API uint64_t GWEN_IdList64_Iterator_GetFirstId(GWEN_IDLIST64_ITERATOR *it); GWENHYWFAR_API uint64_t GWEN_IdList64_Iterator_GetNextId(GWEN_IDLIST64_ITERATOR *it); /*@}*/ #ifdef __cplusplus } #endif #endif /* GWENHYWFAR_IDLIST64_H */ gwenhywfar-4.15.2beta/src/base/param_fns.c0000644000175000017500000001326212560445316015366 00000000000000/*************************************************************************** begin : Wed Sep 17 2014 copyright : (C) 2014 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #include #include int GWEN_Param_GetCurrentValueAsInt(const GWEN_PARAM *param) { const char *s; assert(param); s=param->currentValue; if (s && *s) { int b; int v; b=sscanf(s, "%i", &v); if (b==1) return v; /* fall through */ } s=param->defaultValue; if (s && *s) { int b; int v; b=sscanf(s, "%i", &v); if (b==1) return v; /* fall through */ } return 0; } void GWEN_Param_SetCurrentValueAsInt(GWEN_PARAM *param, int v) { char numbuf[64]; snprintf(numbuf, sizeof(numbuf)-1, "%i", v); numbuf[sizeof(numbuf)-1]=0; GWEN_Param_SetCurrentValue(param, numbuf); } double GWEN_Param_GetCurrentValueAsDouble(const GWEN_PARAM *param) { const char *s; assert(param); s=param->currentValue; if (s && *s) { double v; int b; b=GWEN_Text_StringToDouble(s, &v); if (b>=0) return v; /* fall through */ } s=param->defaultValue; if (s && *s) { double v; int b; b=GWEN_Text_StringToDouble(s, &v); if (b>=0) return v; /* fall through */ } return 0.0; } void GWEN_Param_SetCurrentValueAsDouble(GWEN_PARAM *param, double v) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 64, 0, 1); GWEN_Text_DoubleToBuffer(v, tbuf); GWEN_Param_SetCurrentValue(param, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } int GWEN_Param_List_GetCurrentValueAsInt(const GWEN_PARAM_LIST *pl, const char *name, int defVal) { GWEN_PARAM *p; p=GWEN_Param_List_GetByName(pl, name); if (p) return GWEN_Param_GetCurrentValueAsInt(p); return defVal; } void GWEN_Param_List_SetCurrentValueAsInt(GWEN_PARAM_LIST *pl, const char *name, int v) { GWEN_PARAM *p; p=GWEN_Param_List_GetByName(pl, name); if (p) GWEN_Param_SetCurrentValueAsInt(p, v); } double GWEN_Param_List_GetCurrentValueAsDouble(const GWEN_PARAM_LIST *pl, const char *name, double defVal) { GWEN_PARAM *p; p=GWEN_Param_List_GetByName(pl, name); if (p) return GWEN_Param_GetCurrentValueAsDouble(p); return defVal; } void GWEN_Param_List_SetCurrentValueAsDouble(GWEN_PARAM_LIST *pl, const char *name, double v) { GWEN_PARAM *p; p=GWEN_Param_List_GetByName(pl, name); if (p) GWEN_Param_SetCurrentValueAsDouble(p, v); } void GWEN_Param_List_WriteXml(const GWEN_PARAM_LIST *pl, GWEN_XMLNODE *xn) { const GWEN_PARAM *p; p=GWEN_Param_List_First(pl); while(p) { GWEN_XMLNODE *n; n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "param"); GWEN_Param_WriteXml(p, n); GWEN_XMLNode_AddChild(xn, n); /* next */ p=GWEN_Param_List_Next(p); } } void GWEN_Param_List_ReadXml(GWEN_PARAM_LIST *pl, GWEN_XMLNODE *xn) { GWEN_XMLNODE *n; n=GWEN_XMLNode_FindFirstTag(xn, "param", NULL, NULL); while(n) { GWEN_PARAM *p; p=GWEN_Param_fromXml(n); if (p) GWEN_Param_List_Add(p, pl); n=GWEN_XMLNode_FindNextTag(n, "param", NULL, NULL); } } void GWEN_Param_List_WriteValuesToXml(const GWEN_PARAM_LIST *pl, GWEN_XMLNODE *xn) { const GWEN_PARAM *p; p=GWEN_Param_List_First(pl); while(p) { const char *sName; const char *sValue; sName=GWEN_Param_GetName(p); sValue=GWEN_Param_GetCurrentValue(p); if (sName && *sName && sValue && *sValue) { GWEN_XMLNODE *n; n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "param"); GWEN_XMLNode_SetProperty(n, "name", sName); GWEN_XMLNode_SetCharValue(n, NULL, sValue); GWEN_XMLNode_AddChild(xn, n); } /* next */ p=GWEN_Param_List_Next(p); } } void GWEN_Param_List_ReadValuesFromXml(GWEN_PARAM_LIST *pl, GWEN_XMLNODE *xn) { GWEN_XMLNODE *n; n=GWEN_XMLNode_FindFirstTag(xn, "param", NULL, NULL); while(n) { const char *sName; const char *sValue; sName=GWEN_XMLNode_GetProperty(n, "name", NULL); sValue=GWEN_XMLNode_GetCharValue(n, NULL, NULL); if (sName && *sName) { GWEN_PARAM *p; p=GWEN_Param_List_GetByName(pl, sName); if (p) { GWEN_Param_SetCurrentValue(p, sValue); } else { DBG_WARN(GWEN_LOGDOMAIN, "Param \"%s\" not found, ignoring", sName); } } n=GWEN_XMLNode_FindNextTag(n, "param", NULL, NULL); } } gwenhywfar-4.15.2beta/src/base/args.h0000644000175000017500000001001312416477066014357 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sat Apr 24 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_ARGS_H #define GWENHYWFAR_ARGS_H #include #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_ARGS GWEN_ARGS; #ifdef __cplusplus } #endif #include #include #include #ifdef __cplusplus extern "C" { #endif #define GWEN_ARGS_FLAGS_HAS_ARGUMENT 0x00000001 #define GWEN_ARGS_FLAGS_LAST 0x00000002 #define GWEN_ARGS_FLAGS_HELP 0x00000004 #define GWEN_ARGS_MODE_ALLOW_FREEPARAM 0x00000001 #define GWEN_ARGS_MODE_STOP_AT_FREEPARAM 0x00000002 #define GWEN_ARGS_RESULT_ERROR (-1) #define GWEN_ARGS_RESULT_HELP (-2) typedef enum { GWEN_ArgsType_Char=0, GWEN_ArgsType_Int } GWEN_ARGS_TYPE; typedef enum { GWEN_ArgsOutType_Txt=0, GWEN_ArgsOutType_Html } GWEN_ARGS_OUTTYPE; /** * This is one of the very few structs inside Gwenhywfar whose * contents are available for direct access to the the program. * Developer's note: Please note that any change within this struct will * make it necessary to increment the SO_VERSION of the library ! */ struct GWEN_ARGS { uint32_t flags; GWEN_ARGS_TYPE type; const char *name; unsigned int minNum; unsigned int maxNum; const char *shortOption; const char *longOption; const char *shortDescription; const char *longDescription; }; /** * This function parses the given argument list. * Known options are stored within the given DB under their respective name. * Free parameters (which are arguments without leading "-"'s) are stored in * the variable "params" of the given db. */ GWENHYWFAR_API int GWEN_Args_Check(int argc, char **argv, int startAt, uint32_t mode, const GWEN_ARGS *args, GWEN_DB_NODE *db); /** Print a "usage" message into the given GWEN_BUFFER @c * ubuf. The message lists all available options. The * GWEN_ARGS_OUTTYPE argument is supposed to offer either text or * html as output format, but currently only text is * implemented. */ GWENHYWFAR_API int GWEN_Args_Usage(const GWEN_ARGS *args, GWEN_BUFFER *ubuf, GWEN_ARGS_OUTTYPE ot); /** Currently unimplemented; does nothing and returns zero. */ GWENHYWFAR_API int GWEN_Args_ShortUsage(const GWEN_ARGS *args, GWEN_BUFFER *ubuf, GWEN_ARGS_OUTTYPE ot); #ifdef __cplusplus } #endif #endif /* GWENHYWFAR_ARGS_H */ gwenhywfar-4.15.2beta/src/base/param_p.h0000644000175000017500000000270212425452307015037 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "param.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef PARAM_P_H #define PARAM_P_H #include "param.h" #ifdef __cplusplus extern "C" { #endif struct GWEN_PARAM { GWEN_LIST_ELEMENT(GWEN_PARAM) GWEN_TREE_ELEMENT(GWEN_PARAM) int _refCount; char *name; uint32_t flags; GWEN_PARAM_TYPE type; GWEN_PARAM_DATATYPE dataType; char *shortDescription; char *longDescription; char *currentValue; char *defaultValue; GWEN_STRINGLIST2 *choices; int internalIntValue; /* volatile */ double internalFloatValue; /* volatile */ uint32_t runtimeFlags; /* volatile */ }; /** Getter. * Use this function to get the member "internalIntValue" */ int GWEN_Param_GetInternalIntValue(const GWEN_PARAM *p_struct); /** Getter. * Use this function to get the member "internalFloatValue" */ double GWEN_Param_GetInternalFloatValue(const GWEN_PARAM *p_struct); /** Setter. * Use this function to set the member "internalIntValue" */ void GWEN_Param_SetInternalIntValue(GWEN_PARAM *p_struct, int p_src); /** Setter. * Use this function to set the member "internalFloatValue" */ void GWEN_Param_SetInternalFloatValue(GWEN_PARAM *p_struct, double p_src); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/base/plugin_l.h0000644000175000017500000000374412364015347015241 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Fri Sep 12 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_PLUGIN_L_H #define GWENHYWFAR_PLUGIN_L_H #include "plugin.h" #include GWEN_LIST_FUNCTION_DEFS(GWEN_PLUGIN, GWEN_Plugin) GWEN_LIST_FUNCTION_DEFS(GWEN_PLUGIN_MANAGER, GWEN_PluginManager) int GWEN_Plugin_ModuleInit(void); int GWEN_Plugin_ModuleFini(void); void GWEN_Plugin_Attach(GWEN_PLUGIN *p); #endif gwenhywfar-4.15.2beta/src/base/debug_p.h0000644000175000017500000000632612416477066015044 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sun Jan 04 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_DEBUG_P_H #define GWEN_DEBUG_P_H #include typedef enum { GWEN_MemoryDebugEntryTypeUnknown=0, GWEN_MemoryDebugEntryTypeCreate, GWEN_MemoryDebugEntryTypeAttach, GWEN_MemoryDebugEntryTypeFree } GWEN_MEMORY_DEBUG_ENTRY_TYPE; typedef struct GWEN_MEMORY_DEBUG_ENTRY GWEN_MEMORY_DEBUG_ENTRY; struct GWEN_MEMORY_DEBUG_ENTRY { GWEN_MEMORY_DEBUG_ENTRY *next; GWEN_MEMORY_DEBUG_ENTRY_TYPE type; char *file; int line; }; GWEN_MEMORY_DEBUG_ENTRY* GWEN_MemoryDebugEntry_new(GWEN_MEMORY_DEBUG_ENTRY_TYPE t, const char *wFile, int wLine); void GWEN_MemoryDebugEntry_free(GWEN_MEMORY_DEBUG_ENTRY *e); struct GWEN_MEMORY_DEBUG_OBJECT { GWEN_MEMORY_DEBUG_OBJECT *next; char *name; long int count; GWEN_MEMORY_DEBUG_ENTRY *entries; }; GWEN_MEMORY_DEBUG_OBJECT *GWEN_MemoryDebugObject_new(const char *name); void GWEN_MemoryDebugObject_free(GWEN_MEMORY_DEBUG_OBJECT *o); GWEN_MEMORY_DEBUG_OBJECT *GWEN_MemoryDebug__FindObject(const char *name); void GWEN_MemoryDebug__DumpObject(GWEN_MEMORY_DEBUG_OBJECT *o, uint32_t mode); uint32_t GWEN_Debug_PrintDec(char *buffer, uint32_t size, uint32_t num, int leadingZero, uint32_t length); uint32_t GWEN_Debug_PrintHex(char *buffer, uint32_t size, uint32_t num, int leadingZero, int up, uint32_t length); #endif gwenhywfar-4.15.2beta/src/base/inherit.h0000644000175000017500000002602312416477066015075 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sun Dec 05 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_INHERIT_H #define GWENHYWFAR_INHERIT_H #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_INHERITDATA GWEN_INHERITDATA; #ifdef __cplusplus } #endif #include #include #ifdef __cplusplus extern "C" { #endif /** @defgroup GWEN_MACRO_INHERIT Macros For Typesafe Inheritance * */ /*@{*/ typedef void GWENHYWFAR_CB (*GWEN_INHERIT_FREEDATAFN)(void *baseData, void *data); GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_INHERITDATA, GWEN_InheritData, GWENHYWFAR_API) /* No trailing semicolon because this is a macro call */ GWENHYWFAR_API GWEN_INHERITDATA *GWEN_InheritData_new(const char *t, uint32_t id, void *data, void *baseData, GWEN_INHERIT_FREEDATAFN fn); GWENHYWFAR_API void GWEN_InheritData_free(GWEN_INHERITDATA *d); GWENHYWFAR_API void GWEN_InheritData_freeData(GWEN_INHERITDATA *d); GWENHYWFAR_API void GWEN_InheritData_freeAllData(GWEN_INHERITDATA *d); GWENHYWFAR_API void GWEN_InheritData_clear(GWEN_INHERITDATA *d); GWENHYWFAR_API const char *GWEN_InheritData_GetTypeName(const GWEN_INHERITDATA *d); GWENHYWFAR_API uint32_t GWEN_InheritData_GetId(const GWEN_INHERITDATA *d); GWENHYWFAR_API void *GWEN_InheritData_GetData(const GWEN_INHERITDATA *d); GWENHYWFAR_API GWEN_INHERIT_FREEDATAFN GWEN_InheritData_GetFreeDataFn(const GWEN_INHERITDATA *d); GWENHYWFAR_API uint32_t GWEN_Inherit_MakeId(const char *typeName); GWENHYWFAR_API void* GWEN_Inherit_FindData(GWEN_INHERITDATA_LIST *l, uint32_t id, int wantCreate); GWENHYWFAR_API GWEN_INHERITDATA *GWEN_Inherit_FindEntry(GWEN_INHERITDATA_LIST *l, uint32_t id, int wantCreate); /** @name Macros To Be Used In Inherited Classes - Header Files * */ /*@{*/ /** * Use this macro inside the struct which you want to make inheritable. * This macro defines some new elements for the struct for administration * of inheritance. */ #define GWEN_INHERIT_ELEMENT(t) \ GWEN_INHERITDATA_LIST *INHERIT__list; /** * Use this macro in the header file of the base class. This defines * the prototypes of some inheritance functions. This macro should * be used in libraries with the __declspec(dllexport) as the @c * decl argument. * * You should not care about these functions here, since you should not use * them directly. Please use @ref GWEN_INHERIT_GETDATA and * @ref GWEN_INHERIT_SETDATA instead. */ #define GWEN_INHERIT_FUNCTION_LIB_DEFS(t, decl) \ decl void t##__INHERIT_SETDATA(t *element, \ const char *typeName,\ uint32_t id,\ void *data,\ GWEN_INHERIT_FREEDATAFN f);\ decl int t##__INHERIT_ISOFTYPE(const t *element, uint32_t id);\ decl GWEN_INHERITDATA_LIST *t##__INHERIT_GETLIST(const t *element);\ decl void t##__INHERIT_UNLINK(t *element, \ const char *typeName,\ uint32_t id); /** * Use this macro in the header file of the base class. This defines * the prototypes of some inheritance functions. This macro should * be used in applications, not in libraries. In libraries please * use the macro @ref GWEN_INHERIT_FUNCTION_LIB_DEFS. * * You should not care about these functions here, since you should not use * them directly. Please use @ref GWEN_INHERIT_GETDATA and * @ref GWEN_INHERIT_SETDATA instead. */ #define GWEN_INHERIT_FUNCTION_DEFS(t) \ GWEN_INHERIT_FUNCTION_LIB_DEFS(t, GWEN_DUMMY_EMPTY_ARG) /*@}*/ /** @name Macros To Be Used In Inherited Classes - C Files * */ /*@{*/ /** * Use this macro in the C file of the base class. It defines the * implementations of the inheritance functions. This macro MUST be * placed after the include statement which includes the classes header * file. */ #define GWEN_INHERIT_FUNCTIONS(t) \ GWEN_INHERITDATA_LIST *t##__INHERIT_GETLIST(const t *element) {\ assert(element);\ return element->INHERIT__list;\ }\ \ void t##__INHERIT_SETDATA(t *element, \ const char *typeName,\ uint32_t id,\ void *data,\ GWEN_INHERIT_FREEDATAFN f) {\ GWEN_INHERITDATA *d;\ void *p;\ \ assert(element);\ assert(element->INHERIT__list);\ \ p=GWEN_Inherit_FindData(element->INHERIT__list, id, 1);\ if (p) {\ fprintf(stderr,\ "ERROR: Type \"%s\" already inherits base type\n",\ typeName);\ abort();\ }\ d=GWEN_InheritData_new(typeName, id, data, (void*)element, f);\ GWEN_InheritData_List_Insert(d, element->INHERIT__list);\ }\ \ int t##__INHERIT_ISOFTYPE(const t *element, uint32_t id) {\ assert(element);\ assert(element->INHERIT__list);\ \ return (GWEN_Inherit_FindData(element->INHERIT__list, id, 1)!=0);\ }\ \ void t##__INHERIT_UNLINK(t *element, \ const char *typeName,\ uint32_t id) {\ GWEN_INHERITDATA *d;\ \ assert(element);\ assert(element->INHERIT__list);\ \ d=GWEN_Inherit_FindEntry(element->INHERIT__list, id, 1);\ if (!d) {\ fprintf(stderr, \ "ERROR: Type \"%s\" does not inherit base type\n",\ typeName);\ abort();\ }\ GWEN_InheritData_clear(d);\ GWEN_InheritData_List_Del(d);\ GWEN_InheritData_free(d);\ } /** * Use this macro in your C file in constructor functions for the base * class. This macro initializes the elements defined by the macro * @ref GWEN_INHERIT_ELEMENT. */ #define GWEN_INHERIT_INIT(t, element) {\ assert(element);\ element->INHERIT__list=GWEN_InheritData_List_new();\ } /** * Use this macro in your C file in destructor functions for the base * class. This macro deinitializes the elements defined by the macro * @ref GWEN_INHERIT_ELEMENT. This should be the first instruction in that * function, because it also gives inheriting classes the opportunity to * free their own data associated with the given element. It causes the * least problems if inheriting classes free their data before the base * class does. */ #define GWEN_INHERIT_FINI(t, element) {\ GWEN_INHERITDATA *inherit__data;\ \ assert(element);\ assert(element->INHERIT__list);\ \ while( (inherit__data=GWEN_InheritData_List_First(element->INHERIT__list)) ) {\ GWEN_InheritData_freeData(inherit__data); \ GWEN_InheritData_List_Del(inherit__data); \ GWEN_InheritData_free(inherit__data); \ } \ GWEN_InheritData_List_free(element->INHERIT__list);\ } /*@}*/ /** @name Macros To Be Used In Inheriting Classes * */ /*@{*/ /** * Use this in the C file of inheriting classes. It initializes a global * variable with a hash of the inheriting type name. This is used to speed * up inheritance functions. This variable will be filled with a value * upon the first invocation of the macro @ref GWEN_INHERIT_SETDATA. */ #define GWEN_INHERIT(bt, t) \ uint32_t t##__INHERIT_ID=0; /** * This macros returns the private data of an inheriting class associated * with an element of its base class. */ #define GWEN_INHERIT_GETDATA(bt, t, element) \ ((t*)GWEN_Inherit_FindData(bt##__INHERIT_GETLIST(element),t##__INHERIT_ID,0)) /** * This macro sets the private data of an inheriting class associated * with an element of its base class. The last argument is a pointer to a * function which frees the associated data. That function will be called * when the element of the base class given is freed or new data is to be * associated with the element. * The prototype of that function is this: * @code * typedef void (*function)(void *baseData, void *data); * @endcode * Please note that the argument to that function is a pointer to the * base type element. If you want to get the private data associated with * the base type element (and you probably do) you must call * @ref GWEN_INHERIT_GETDATA. * Every time the macro @ref GWEN_INHERIT_SETDATA is used the previously * associated data will be freed by calling the function whose prototype * you've just learned. */ #define GWEN_INHERIT_SETDATA(bt, t, element, data, fn) {\ if (!t##__INHERIT_ID)\ t##__INHERIT_ID=GWEN_Inherit_MakeId(__STRING(t));\ bt##__INHERIT_SETDATA(element, __STRING(t), t##__INHERIT_ID, data, fn);\ } /** * This macro checks whether the given element is of the given type. * @return !=0 if the pointer is of the expected type, 0 otherwise * @param bt base type * @param t derived type * @param element pointer which is to be checked */ #define GWEN_INHERIT_ISOFTYPE(bt, t, element) \ ((bt##__INHERIT_ISOFTYPE(element,\ ((t##__INHERIT_ID==0)?\ ((t##__INHERIT_ID=GWEN_Inherit_MakeId(__STRING(t)))):\ t##__INHERIT_ID)))?1:0) /** * This macro gives up the inheritance for the given type. After this * macro has been executed there is no link left between the type and * its base type. * @param bt base type * @param t derived type */ #define GWEN_INHERIT_UNLINK(bt, t, element) {\ if (!t##__INHERIT_ID)\ t##__INHERIT_ID=GWEN_Inherit_MakeId(__STRING(t));\ bt##__INHERIT_UNLINK(element, __STRING(t), t##__INHERIT_ID);\ } /*@}*/ /*@}*/ /* defgroup */ #ifdef __cplusplus } #endif #endif /* GWENHYWFAR_INHERIT_P_H */ gwenhywfar-4.15.2beta/src/base/refptr.h0000644000175000017500000001123612364015347014725 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sun Jan 25 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_REFPTR_H #define GWEN_REFPTR_H #include #include #define GWEN_REFPTR_FLAGS_AUTODELETE 0x00000001 #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_REFPTR_INFO GWEN_REFPTR_INFO; typedef struct GWEN_REFPTR GWEN_REFPTR; /** @defgroup MOD_REFPTR Pointer with Reference Counter * @ingroup MOD_BASE * * @brief This file contains functions which implement a smart pointer. * */ /*@{*/ /** @defgroup MOD_REFPTR_PTR Pointer Functions * @ingroup MOD_REFPTR * * @brief This group contains the definition of a GWEN_REFPTR. * */ /*@{*/ /** @name Constructor, Destructor, Copy, Duplicate functions * */ /*@{*/ GWENHYWFAR_API GWEN_REFPTR *GWEN_RefPtr_new(void *dp, GWEN_REFPTR_INFO *rpi); GWENHYWFAR_API GWEN_REFPTR *GWEN_RefPtr_dup(const GWEN_REFPTR *rp); GWENHYWFAR_API GWEN_REFPTR *GWEN_RefPtr_copy(const GWEN_REFPTR *rp); GWENHYWFAR_API void GWEN_RefPtr_free(GWEN_REFPTR *rp); /*@}*/ /** @name Data Functions * */ /*@{*/ GWENHYWFAR_API void *GWEN_RefPtr_GetData(const GWEN_REFPTR *rp); GWENHYWFAR_API void GWEN_RefPtr_SetData(GWEN_REFPTR *rp, void *dp, GWEN_REFPTR_INFO *rpi); /*@}*/ /** @name Getting and Setting Flags * */ /*@{*/ GWENHYWFAR_API uint32_t GWEN_RefPtr_GetFlags(const GWEN_REFPTR *rp); GWENHYWFAR_API void GWEN_RefPtr_SetFlags(GWEN_REFPTR *rp, uint32_t fl); GWENHYWFAR_API void GWEN_RefPtr_AddFlags(GWEN_REFPTR *rp, uint32_t fl); GWENHYWFAR_API void GWEN_RefPtr_DelFlags(GWEN_REFPTR *rp, uint32_t fl); /*@}*/ /*@}*/ /* defgroup */ /** @defgroup MOD_REFPTR_INFO Pointer Information Functions * @ingroup MOD_REFPTR * * @brief This group contains the definition of a GWEN_REFPTR_INFO object. * */ /*@{*/ /** @name Constructor, Destructor, Copy, Duplicate functions * */ /*@{*/ GWENHYWFAR_API GWEN_REFPTR_INFO *GWEN_RefPtrInfo_new(void); GWENHYWFAR_API void GWEN_RefPtrInfo_free(GWEN_REFPTR_INFO *rpi); GWENHYWFAR_API void GWEN_RefPtrInfo_Attach(GWEN_REFPTR_INFO *rpi); /*@}*/ /** @name Getting and Setting Flags * * These flags are used for newly created GWEN_REFPTR to provide a * default value. Please see @ref GWEN_REFPTR_FLAGS_AUTODELETE and * following. */ /*@{*/ GWENHYWFAR_API uint32_t GWEN_RefPtrInfo_GetFlags(const GWEN_REFPTR_INFO *rpi); GWENHYWFAR_API void GWEN_RefPtrInfo_SetFlags(GWEN_REFPTR_INFO *rpi, uint32_t fl); GWENHYWFAR_API void GWEN_RefPtrInfo_AddFlags(GWEN_REFPTR_INFO *rpi, uint32_t fl); GWENHYWFAR_API void GWEN_RefPtrInfo_DelFlags(GWEN_REFPTR_INFO *rpi, uint32_t fl); /*@}*/ /** @name Prototypes for Virtual Functions * */ /*@{*/ typedef void (*GWEN_REFPTR_INFO_FREE_FN)(void *dp); typedef void* (*GWEN_REFPTR_INFO_DUP_FN)(void *dp); /*@}*/ /** @name Setters for Virtual Functions * */ /*@{*/ GWENHYWFAR_API void GWEN_RefPtrInfo_SetFreeFn(GWEN_REFPTR_INFO *rpi, GWEN_REFPTR_INFO_FREE_FN f); GWENHYWFAR_API void GWEN_RefPtrInfo_SetDupFn(GWEN_REFPTR_INFO *rpi, GWEN_REFPTR_INFO_DUP_FN f); /*@}*/ /*@}*/ /* defgroup */ /*@}*/ /* defgroup */ #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/base/refptr_p.h0000644000175000017500000000442612364015347015247 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sun Jan 25 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_REFPTR_P_H #define GWEN_REFPTR_P_H #include typedef struct GWEN_REFPTR_POBJECT GWEN_REFPTR_POBJECT; struct GWEN_REFPTR_INFO { uint32_t refCount; uint32_t flags; GWEN_REFPTR_INFO_FREE_FN freeFn; GWEN_REFPTR_INFO_DUP_FN dupFn; }; struct GWEN_REFPTR_POBJECT { uint32_t refCount; uint32_t flags; GWEN_REFPTR_INFO *infoPtr; void *ptr; }; struct GWEN_REFPTR { GWEN_REFPTR_POBJECT *objectPtr; }; GWEN_REFPTR_POBJECT *GWEN_RefPtrObject_new(void *dp, GWEN_REFPTR_INFO *rpi); void GWEN_RefPtrObject_free(GWEN_REFPTR_POBJECT *rpo); void GWEN_RefPtrObject_Attach(GWEN_REFPTR_POBJECT *rpo); #endif gwenhywfar-4.15.2beta/src/base/buffer.h0000644000175000017500000004245512416477066014713 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Fri Sep 12 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_BUFFER_H #define GWENHYWFAR_BUFFER_H #include #ifdef __cplusplus extern "C" { #endif /** * @brief A dynamically resizeable text buffer. * * @ingroup MOD_BUFFER */ typedef struct GWEN_BUFFER GWEN_BUFFER; #ifdef __cplusplus } #endif #include #include #include /* This is needed for PalmOS, because it define some functions needed */ #include #ifdef __cplusplus extern "C" { #endif /** @defgroup MOD_BUFFER Buffer Management * @ingroup MOD_BASE * * @brief This file contains the definition of a GWEN_BUFFER, a * dynamically resizeable text buffer. * */ /*@{*/ #define GWEN_BUFFER_MAX_BOOKMARKS 64 #define GWEN_BUFFER_MODE_DYNAMIC 0x0001 #define GWEN_BUFFER_MODE_ABORT_ON_MEMFULL 0x0002 #define GWEN_BUFFER_MODE_USE_SYNCIO 0x0010 #define GWEN_BUFFER_MODE_READONLY 0x0020 #define GWEN_BUFFER_MODE_DEFAULT \ (\ GWEN_BUFFER_MODE_DYNAMIC | \ GWEN_BUFFER_MODE_ABORT_ON_MEMFULL\ ) /** * Creates a new GWEN_BUFFER, which is a dynamically resizeable * text buffer. * * @param buffer If non-NULL, then this buffer will be used as * actual storage space. Otherwise a new buffer will be allocated * (with @c size bytes) * * @param size If @c buffer was non-NULL, then this argument * must specifiy the size of that buffer. If @c buffer was * NULL, then this argument specifies the number of bytes that * will be allocated. * * @param used Number of bytes of the buffer actually used. This is * interesting when reading from a buffer. * * @param take_ownership If @c buffer was non-NULL and this * argument is nonzero, then the new GWEN_BUFFER object takes over * the ownership of the given @c buffer so that it will be freed * on GWEN_Buffer_free(). If this argument is zero, the given @c * buffer will not be freed. If @c buffer was NULL, this argument * has no effect. */ GWENHYWFAR_API GWEN_BUFFER *GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take_ownership); /** * Increases the internal reference counter. It is decreased by * @ref GWEN_Buffer_free(). */ GWENHYWFAR_API void GWEN_Buffer_Attach(GWEN_BUFFER *bf); /** Frees the given buffer. * * If the internal storage was allocated for this new buffer, then * it will freed here. If the internal storage is used from a * different @c buffer, then it will only be freed if the argument * @c take_ownership of GWEN_Buffer_new() was nonzero. */ GWENHYWFAR_API void GWEN_Buffer_free(GWEN_BUFFER *bf); /** Create a new copy as a duplicate of the buffer @c bf. */ GWENHYWFAR_API GWEN_BUFFER *GWEN_Buffer_dup(GWEN_BUFFER *bf); /** This function relinquishes ownership of the internal buffer * if possible. It returns an error if this object does not own the * buffer (it can't give you what it doesn't possess) or if the * internal pointer to the memory allocated does not match the internal * pointer to the current start of the buffer (this can be the case * when @ref GWEN_Buffer_ReserveBytes() of @ref GWEN_Buffer_Crop() * have been called). */ GWENHYWFAR_API int GWEN_Buffer_Relinquish(GWEN_BUFFER *bf); /** * Returns the current mode of the buffer * (such as @ref GWEN_BUFFER_MODE_DYNAMIC). */ GWENHYWFAR_API uint32_t GWEN_Buffer_GetMode(GWEN_BUFFER *bf); /** * Changes the current mode of the buffer * (such as @ref GWEN_BUFFER_MODE_DYNAMIC). */ GWENHYWFAR_API void GWEN_Buffer_SetMode(GWEN_BUFFER *bf, uint32_t mode); /** * Adds the give mode to the current mode of the buffer * (such as @ref GWEN_BUFFER_MODE_DYNAMIC). */ GWENHYWFAR_API void GWEN_Buffer_AddMode(GWEN_BUFFER *bf, uint32_t mode); /** * Removes the give mode from the current mode of the buffer * (such as @ref GWEN_BUFFER_MODE_DYNAMIC). */ GWENHYWFAR_API void GWEN_Buffer_SubMode(GWEN_BUFFER *bf, uint32_t mode); /** * Returns the hard limit. This is the maximum size of a GWEN_BUFFER in * dynamic mode. */ GWENHYWFAR_API uint32_t GWEN_Buffer_GetHardLimit(GWEN_BUFFER *bf); /** * Changes the hard limit. This is the maximum size of a GWEN_BUFFER in * dynamic mode. */ GWENHYWFAR_API void GWEN_Buffer_SetHardLimit(GWEN_BUFFER *bf, uint32_t l); /** * In dynamic mode, whenever there is new data to allocate then this value * specifies how much data to allocate in addition. * The allocated data in total for this buffer will be aligned to this value. */ GWENHYWFAR_API uint32_t GWEN_Buffer_GetStep(GWEN_BUFFER *bf); /** * In dynamic mode, whenever there is new data to allocate then this value * specifies how much data to allocate in addition. * The allocated data in total for this buffer will be aligned to this value. * 1024 is a reasonable value. This value NEEDS to be aligned 2^n (i.e. * only ONE bit must be set !) */ GWENHYWFAR_API void GWEN_Buffer_SetStep(GWEN_BUFFER *bf, uint32_t step); /** * Reserves the given amount of bytes at the beginning of the buffer. * Please note that this most likely results in a shift of the current * position inside the buffer, so after this call all pointers obtained * from this module (e.g. via @ref GWEN_Buffer_GetStart) are invalid ! * You can use this function to save some memory copy actions when * inserting bytes at the beginning of the buffer. */ GWENHYWFAR_API int GWEN_Buffer_ReserveBytes(GWEN_BUFFER *bf, uint32_t res); /** * Returns the start of the buffer. You can use the function * @ref GWEN_Buffer_GetPos to navigate within the buffer. */ GWENHYWFAR_API char *GWEN_Buffer_GetStart(const GWEN_BUFFER *bf); /** * Returns the size of the buffer (i.e. the number of bytes allocated). */ GWENHYWFAR_API uint32_t GWEN_Buffer_GetSize(const GWEN_BUFFER *bf); /** * Returns the current position within the buffer. This pointer is adjusted * by the various read and write functions. */ GWENHYWFAR_API uint32_t GWEN_Buffer_GetPos(const GWEN_BUFFER *bf); /** * @return 0 if ok, !=0 on error */ GWENHYWFAR_API int GWEN_Buffer_SetPos(GWEN_BUFFER *bf, uint32_t i); /** */ GWENHYWFAR_API uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf); /** * Returns the given bookmark */ GWENHYWFAR_API uint32_t GWEN_Buffer_GetBookmark(const GWEN_BUFFER *bf, unsigned int idx); /** * Set a bookmark. These bookmarks are not used by the GWEN_BUFFER functions, * but may be usefull for an application. */ GWENHYWFAR_API void GWEN_Buffer_SetBookmark(GWEN_BUFFER *bf, unsigned int idx, uint32_t v); /** * Copies the contents of the given buffer to this GWEN_BUFFER, if there is * enough room. * The position pointer is adjusted accordingly. * @return 0 if ok, !=0 on error */ GWENHYWFAR_API int GWEN_Buffer_AppendBytes(GWEN_BUFFER *bf, const char *buffer, uint32_t size); GWENHYWFAR_API int GWEN_Buffer_FillWithBytes(GWEN_BUFFER *bf, unsigned char c, uint32_t size); GWENHYWFAR_API int GWEN_Buffer_FillLeftWithBytes(GWEN_BUFFER *bf, unsigned char c, uint32_t size); /** * Appends a string to the buffer (without the trailing null char!) * The position pointer is adjusted accordingly. * @return 0 if ok, !=0 on error */ GWENHYWFAR_API int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer); /** * Appends a single byte to this GWEN_BUFFER, if there is * enough room. * The position pointer is adjusted accordingly. * @return 0 if ok, !=0 on error */ GWENHYWFAR_API int GWEN_Buffer_AppendByte(GWEN_BUFFER *bf, char c); /** * Inserts multiple bytes at the current position. * If the current position is 0 and there is reserved space at the beginning * of the buffer then that space will be used. * Otherwise the data at the current position will be moved out of the way * and the new bytes inserted. * The position pointer will not be altered, but all pointers obtained from * this module (e.g. via @ref GWEN_Buffer_GetStart) become invalid ! */ GWENHYWFAR_API int GWEN_Buffer_InsertBytes(GWEN_BUFFER *bf, const char *buffer, uint32_t size); /** * This function makes room for the given number of bytes at the current * buffer position. It moves any existing data at the current position * out of the way. * The position pointer will not be altered, but after calling this function * at that position there is the begin of the newly inserted room. * All pointers obtained from this module (e.g. via * @ref GWEN_Buffer_GetStart) become invalid ! * This function updates the bookmarks accordingly. */ GWENHYWFAR_API int GWEN_Buffer_InsertRoom(GWEN_BUFFER *bf, uint32_t size); /** * This function removes the given number of bytes at the current * buffer position. It moves any existing bytes behind the area to be removed * to the current position. * The position pointer will not be altered, but after calling this function * at that position there is the begin of the data behind the removed area. * All pointers obtained from this module (e.g. via * @ref GWEN_Buffer_GetStart) become invalid ! * This function updates the bookmarks accordingly. */ GWENHYWFAR_API int GWEN_Buffer_RemoveRoom(GWEN_BUFFER *bf, uint32_t size); /** * This function remplaces the given number of bytes at the current * buffer position with some new bytes. If the number of bytes to be replaced * does not equal the number of replacement bytes then the buffer is resized * accordingly (e.g. shrunk or extended). * The position pointer will not be altered. * All pointers obtained from this module (e.g. via * @ref GWEN_Buffer_GetStart) become invalid ! * This function updates the bookmarks accordingly. */ GWENHYWFAR_API int GWEN_Buffer_ReplaceBytes(GWEN_BUFFER *bf, uint32_t rsize, const char *buffer, uint32_t size); /** * Inserts the given string at the current position (without the trailing * null byte) * The position pointer will not be altered, but after calling this function * at that position there is the begin of the newly inserted string. * All pointers obtained from this module (e.g. via * @ref GWEN_Buffer_GetStart) become invalid ! * This function updates the bookmarks accordingly. */ GWENHYWFAR_API int GWEN_Buffer_InsertString(GWEN_BUFFER *bf, const char *buffer); /** * Inserts a byte at the current position. * If the current position is 0 and there is reserved space at the beginning * of the buffer then that space will be used. * Otherwise the data at the current position will be moved out of the way * and the new byte inserted. * The position pointer will not be altered, but after calling this function * at that position there is the begin of the newly inserted byte. * All pointers obtained from this module (e.g. via * @ref GWEN_Buffer_GetStart) become invalid ! * This function updates the bookmarks accordingly. */ GWENHYWFAR_API int GWEN_Buffer_InsertByte(GWEN_BUFFER *bf, char c); /** * Returns the byte from the current position. * The position pointer is adjusted accordingly. * @return -1 on error, read char otherwise (in low byte) */ GWENHYWFAR_API int GWEN_Buffer_ReadByte(GWEN_BUFFER *bf); /** * Returns the bytes from the current position. * The position pointer is adjusted accordingly. * @return -1 on error, 0 if ok */ GWENHYWFAR_API int GWEN_Buffer_ReadBytes(GWEN_BUFFER *bf, char *buffer, uint32_t *size); /** * Returns the byte from the current position without changing the * position pointer. So multiple calls to this function will result * in returning the same character. * @return -1 on error, read char otherwise (in low byte) */ GWENHYWFAR_API int GWEN_Buffer_PeekByte(GWEN_BUFFER *bf); /** Move the position pointer forward by the given number @c i. */ GWENHYWFAR_API int GWEN_Buffer_IncrementPos(GWEN_BUFFER *bf, uint32_t i); /** Move the position pointer backward by the given number @c i. */ GWENHYWFAR_API int GWEN_Buffer_DecrementPos(GWEN_BUFFER *bf, uint32_t i); /** * The functions @ref GWEN_Buffer_IncrementPos and @ref GWEN_Buffer_DecrementPos * only modify the internal position pointer. * This function here adjusts the number of used bytes to just before the internal * position pointer. This is often used to avoid copying, like in the following * example: * @code * * char *p; * int i; * * for (i=0; i<100; i++) { * GWEN_Buffer_AllocRoom(buffer, 512); * p=GWEN_Buffer_GetPosPtr(buffer); * READ_512_BYTES_TO_P; * GWEN_Buffer_IncrementPos(buffer, 512); * GWEN_Buffer_AdjustUsedBytes(buffer); * } * * @endcode * */ GWENHYWFAR_API int GWEN_Buffer_AdjustUsedBytes(GWEN_BUFFER *bf); /** Insert the content of the buffer @c sf into the buffer @c bf * at the position of its current position pointer. The size of @c * bf will be increased accordingly. Returns zero on success or * nonzero if this failed (e.g. because of out of memory * error). */ GWENHYWFAR_API int GWEN_Buffer_InsertBuffer(GWEN_BUFFER *bf, GWEN_BUFFER *sf); /** Append the content of the buffer @c sf at the end of the * buffer @c bf. The size of @c bf will be increased * accordingly. Returns zero on success or nonzero if this failed * (e.g. because of out of memory error). */ GWENHYWFAR_API int GWEN_Buffer_AppendBuffer(GWEN_BUFFER *bf, GWEN_BUFFER *sf); /** * Returns the maximum number of bytes which can be written to the buffer * at once (i.e. without reallocation). */ GWENHYWFAR_API uint32_t GWEN_Buffer_GetMaxUnsegmentedWrite(GWEN_BUFFER *bf); /** * Returns the number of bytes from pos to the end of the used area. */ GWENHYWFAR_API uint32_t GWEN_Buffer_GetBytesLeft(GWEN_BUFFER *bf); /** * Returns a pointer to the current position within the buffer. */ GWENHYWFAR_API char *GWEN_Buffer_GetPosPointer(const GWEN_BUFFER *bf); /** * Resets the position pointer and the byte counter. */ GWENHYWFAR_API void GWEN_Buffer_Reset(GWEN_BUFFER *bf); /** * Resets the pos pointer */ GWENHYWFAR_API void GWEN_Buffer_Rewind(GWEN_BUFFER *bf); /** * Make sure that the buffer has enough room for the given bytes. */ GWENHYWFAR_API int GWEN_Buffer_AllocRoom(GWEN_BUFFER *bf, uint32_t size); /* crops the buffer to the specified bytes */ GWENHYWFAR_API int GWEN_Buffer_Crop(GWEN_BUFFER *bf, uint32_t pos, uint32_t l); /* Overwrite complete buffer with a given value. * This does not only overwrite the used bytes but all the memory held * by this object. */ GWENHYWFAR_API void GWEN_Buffer_OverwriteContent(GWEN_BUFFER *bf, int c); /** * Sets the syncio to be used as a source. * This io layer is used when a byte is to be returned while the buffer is * empty (or the end of the buffer is reached). In such a case the missing * bytes are read from this io layer if the mode contains * @ref GWEN_BUFFER_MODE_USE_SYNCIO. */ GWENHYWFAR_API void GWEN_Buffer_SetSourceSyncIo(GWEN_BUFFER *bf, GWEN_SYNCIO *sio, int take); /** Print the current content of buffer @c bf into the file @c f. */ GWENHYWFAR_API void GWEN_Buffer_Dump(GWEN_BUFFER *bf, unsigned int insert); /** * This is a callback function to be used by GWEN_MULTICACHE (and only for that). * It internally calls @ref GWEN_Buffer_Attach(). */ GWENHYWFAR_API int GWENHYWFAR_CB GWEN_Buffer_CacheFn_Attach(void *ptr); /** * This is a callback function to be used by GWEN_MULTICACHE (and only for that). * It internally calls @ref GWEN_Buffer_free(). */ GWENHYWFAR_API int GWENHYWFAR_CB GWEN_Buffer_CacheFn_Free(void *ptr); /*@}*/ #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/base/misc2.h0000644000175000017500000000325312364015347014440 00000000000000/*************************************************************************** begin : Sat Jun 28 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /* now just a link to list2.h */ #ifndef GWENHYWFAR_MISC2_H #define GWENHYWFAR_MISC2_H #include #endif gwenhywfar-4.15.2beta/src/base/fastbuffer.h0000644000175000017500000003345612364015347015562 00000000000000/*************************************************************************** begin : Tue Apr 27 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_FASTBUFFER_H #define GWEN_FASTBUFFER_H #include #include #define GWEN_FAST_BUFFER_FLAGS_DOSMODE 0x00000001 /** * Do not use the fields of this struct directly!! Only use it via the functions and macros * in this module, because otherwise future versions of you application might not work. * Do not allocate such an object yourself, always use @ref GWEN_FastBuffer_new() otherwise * future versions of you application might not work! * This struct is not part of the API. */ typedef struct { GWEN_SYNCIO *io; uint32_t bufferSize; uint32_t bufferReadPos; uint32_t bufferWritePos; uint32_t flags; uint32_t bytesWritten; uint32_t bytesRead; uint8_t buffer[1]; } GWEN_FAST_BUFFER; #ifdef __cplusplus extern "C" { #endif GWENHYWFAR_API GWEN_FAST_BUFFER *GWEN_FastBuffer_new(uint32_t bsize, GWEN_SYNCIO *io); GWENHYWFAR_API void GWEN_FastBuffer_free(GWEN_FAST_BUFFER *fb); GWENHYWFAR_API uint32_t GWEN_FastBuffer_GetFlags(const GWEN_FAST_BUFFER *fb); GWENHYWFAR_API void GWEN_FastBuffer_SetFlags(GWEN_FAST_BUFFER *fb, uint32_t fl); GWENHYWFAR_API void GWEN_FastBuffer_AddFlags(GWEN_FAST_BUFFER *fb, uint32_t fl); GWENHYWFAR_API void GWEN_FastBuffer_SubFlags(GWEN_FAST_BUFFER *fb, uint32_t fl); GWENHYWFAR_API uint32_t GWEN_FastBuffer_GetBytesWritten(const GWEN_FAST_BUFFER *fb); GWENHYWFAR_API uint32_t GWEN_FastBuffer_GetBytesRead(const GWEN_FAST_BUFFER *fb); GWENHYWFAR_API int GWEN_FastBuffer_ReadLine(GWEN_FAST_BUFFER *fb, uint8_t *p, int len); GWENHYWFAR_API int GWEN_FastBuffer_ReadLineToBuffer(GWEN_FAST_BUFFER *fb, GWEN_BUFFER *buf); #ifdef __cplusplus } #endif /** * This macro peeks at the read buffer and returns the next available byte (if any). * Consecutive peeks will always return the same byte. Also, the next @ref GWEN_FASTBUFFER_READBYTE * will return the same byte as well. */ #define GWEN_FASTBUFFER_PEEKBYTE(fb, var) {\ if (fb->bufferReadPos>=fb->bufferWritePos) { \ int fb_peekbyte_rv; \ \ fb_peekbyte_rv=GWEN_SyncIo_Read(fb->io, fb->buffer, fb->bufferSize); \ if (fb_peekbyte_rv<0) { \ DBG_DEBUG(GWEN_LOGDOMAIN, "here (%d)", fb_peekbyte_rv); \ var=fb_peekbyte_rv; \ } \ else if (fb_peekbyte_rv==0) { \ DBG_DEBUG(GWEN_LOGDOMAIN, "EOF met"); \ var=GWEN_ERROR_EOF; \ } \ else { \ fb->bufferWritePos=fb_peekbyte_rv; \ fb->bufferReadPos=0; \ var=((int)((fb->buffer[fb->bufferReadPos])) & 0xff); \ } \ } \ else { \ var=((int)((fb->buffer[fb->bufferReadPos])) & 0xff); \ } \ } /** * Returns the next byte from the buffer (if any). That byte will be placed into "var". In case of an error * var will contain an error code instead. */ #define GWEN_FASTBUFFER_READBYTE(fb, var) {\ if (fb->bufferReadPos>=fb->bufferWritePos) { \ int fb_readbyte_rv; \ \ fb_readbyte_rv=GWEN_SyncIo_Read(fb->io, fb->buffer, fb->bufferSize); \ if (fb_readbyte_rv<0) { \ DBG_DEBUG(GWEN_LOGDOMAIN, "here (%d)", fb_readbyte_rv); \ var=fb_readbyte_rv; \ } \ else if (fb_readbyte_rv==0) { \ DBG_DEBUG(GWEN_LOGDOMAIN, "EOF met"); \ var=GWEN_ERROR_EOF; \ } \ else { \ fb->bufferWritePos=fb_readbyte_rv; \ fb->bufferReadPos=0; \ var=((int)((fb->buffer[fb->bufferReadPos++])) & 0xff); \ fb->bytesRead++; \ } \ } \ else { \ var=((int)((fb->buffer[fb->bufferReadPos++])) & 0xff); \ fb->bytesRead++; \ } \ } /** * Writes a byte into the buffer (flushing it if necessary) and returns the result of this operation * in "var". */ #define GWEN_FASTBUFFER_WRITEBYTE(fb, var, chr) {\ if (fb->bufferWritePos>=fb->bufferSize) { \ int fb_writeByte_rv; \ \ fb_writeByte_rv=GWEN_SyncIo_WriteForced(fb->io, fb->buffer, fb->bufferWritePos); \ if (fb_writeByte_rv<(int)(fb->bufferWritePos)) { \ DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", fb_writeByte_rv); \ var=fb_writeByte_rv; \ } \ else { \ var=0; \ fb->bufferWritePos=0; \ fb->buffer[fb->bufferWritePos++]=chr; \ fb->bytesWritten++; \ } \ } \ else { \ var=0; \ fb->buffer[fb->bufferWritePos++]=chr; \ fb->bytesWritten++; \ } \ } /** * Flushes the write buffer (i.e. write all remaining bytes from the buffer to the io layer with * the flag @ref GWEN_IO_REQUEST_FLAGS_FLUSH set). */ #define GWEN_FASTBUFFER_FLUSH(fb, var) {\ int fb_flush_rv; \ \ fb_flush_rv=GWEN_SyncIo_WriteForced(fb->io, fb->buffer, fb->bufferWritePos); \ if (fb_flush_rv<(int)(fb->bufferWritePos)) { \ DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", fb_flush_rv); \ var=fb_flush_rv; \ } \ else { \ var=0; \ fb->bufferWritePos=0; \ } \ } /** * Reads a number of bytes from the buffer and stores it at the given memory location. * @param fb fast buffer * @param var variable to receive the result (<0: error code, number of bytes read otherwise) * @param p pointer to the location to read the bytes to * @param len number of bytes to read */ #define GWEN_FASTBUFFER_READBYTES(fb, var, p, len) { \ int fb_readbyte_bytes;\ \ var=0; \ if (fb->bufferReadPos>=fb->bufferWritePos) { \ int fb_readbyte_rv; \ \ fb_readbyte_rv=GWEN_SyncIo_Read(fb->io, fb->buffer, fb->bufferSize); \ if (fb_readbyte_rv<0) { \ DBG_DEBUG(GWEN_LOGDOMAIN, "here (%d)", fb_readbyte_rv); \ var=fb_readbyte_rv; \ } \ else {\ fb->bufferWritePos=fb_readbyte_rv; \ fb->bufferReadPos=0; \ }\ }\ if (var==0) {\ fb_readbyte_bytes=fb->bufferWritePos-fb->bufferReadPos;\ if (fb_readbyte_bytes>len)\ fb_readbyte_bytes=len;\ if (fb_readbyte_bytes) {\ memmove(p, fb->buffer+fb->bufferReadPos, fb_readbyte_bytes);\ fb->bufferReadPos+=fb_readbyte_bytes;\ fb->bytesRead+=fb_readbyte_bytes; \ }\ var=fb_readbyte_bytes;\ }\ } #define GWEN_FASTBUFFER_READLINE(fb, var, p, len) {\ int fb_readline_bytes;\ \ var=0;\ if (fb->bufferReadPos>=fb->bufferWritePos) {\ int fb_readline_rv;\ \ fb_readline_rv=GWEN_SyncIo_Read(fb->io, fb->buffer, fb->bufferSize);\ if (fb_readline_rv<0) {\ DBG_DEBUG(GWEN_LOGDOMAIN, "here (%d)", fb_readline_rv);\ var=fb_readline_rv;\ }\ else {\ fb->bufferWritePos=fb_rv; \ fb->bufferReadPos=0; \ }\ }\ if (var==0) {\ fb_readline_bytes=fb->bufferWritePos-fb->bufferReadPos;\ if (fb_readline_bytes>len)\ fb_readline_bytes=len;\ if (fb_readline_bytes) {\ uint8_t *fb_readline_p;\ \ fb_readline_p=(uint8_t*)p;\ \ while(fb_readline_bytes) {\ uint8_t c;\ \ c=fb->buffer[fb->bufferReadPos++];\ fb->bytesRead++; \ fb_readline_bytes--;\ if (c==10) {\ *(fb_readline_p++)=c;\ var++;\ break;\ }\ else if (c!=13) {\ *(fb_readline_p++)=c;\ var++;\ }\ }\ }\ }\ } #define GWEN_FASTBUFFER_READLINEFORCED(fb, var, p, len) {\ int fb_readlineforced_len;\ uint8_t *fb_readlineforced_p;\ \ fb_readlineforced_len=len;\ fb_readlineforced_p=(uint8_t*)p;\ var=0;\ while(fb_readlineforced_len && var==0) {\ int fb_readlineforced_rv;\ \ GWEN_FASTBUFFER_READLINE(fb, fb_readlineforced_rv, fb_readlineforced_p, fb_readlineforced_len);\ if (fb_readlineforced_rv<0) {\ var=fb_readlineforced_rv;\ break;\ }\ else if (fb_readlineforced_rv==0) {\ var=GWEN_ERROR_EOF;\ break;\ }\ else {\ if (fb_readlineforced_p[fb_readlineforced_rv-1]==10) {\ fb_readlineforced_p[fb_readlineforced_rv-1]=0;\ var=fb_readlineforced_rv;\ break;\ }\ fb_readlineforced_len-=fb_readlineforced_rv;\ fb_readlineforced_p+=fb_readlineforced_rv;\ }\ }\ if (var==0) {\ DBG_INFO(GWEN_LOGDOMAIN, "No line within %d bytes", len);\ var=GWEN_ERROR_BAD_SIZE;\ }\ } #define GWEN_FASTBUFFER_READFORCED(fb, var, p, len) {\ int fb_readforced_len;\ uint8_t *fb_readforced_p;\ \ fb_readforced_len=len;\ fb_readforced_p=(uint8_t*)p;\ var=0;\ while(fb_readforced_len && var==0) {\ int fb_readforced_rv;\ \ GWEN_FASTBUFFER_READBYTES(fb, fb_readforced_rv, fb_readforced_p, fb_readforced_len);\ if (fb_readforced_rv<0) {\ var=fb_readforced_rv;\ break;\ }\ else if (fb_readforced_rv==0) {\ var=GWEN_ERROR_EOF;\ break;\ }\ else {\ fb_readforced_len-=fb_readforced_rv;\ fb_readforced_p+=fb_readforced_rv;\ }\ }\ } /** * Write a number of bytes to the buffer and stores it at the given memory location. * @param fb fast buffer * @param var variable to receive the result (<0: error code, number of bytes read otherwise) * @param p pointer to the location to write the bytes from * @param len number of bytes to write */ #define GWEN_FASTBUFFER_WRITEBYTES(fb, var, p, len) {\ int fb_writebytes_bytes;\ int fb_writebytes_len;\ \ fb_writebytes_len=len;\ if (fb_writebytes_len==-1)\ fb_writebytes_len=strlen((const char*)p);\ var=0; \ if (fb->bufferWritePos>=fb->bufferSize) { \ int fb_writebytes_rv; \ \ fb_writebytes_rv=GWEN_SyncIo_WriteForced(fb->io, fb->buffer, fb->bufferWritePos); \ if (fb_writebytes_rv<(int)(fb->bufferWritePos)) { \ DBG_DEBUG(GWEN_LOGDOMAIN, "here (%d)", fb_writebytes_rv); \ var=fb_writebytes_rv; \ } \ else {\ fb->bufferWritePos=0; \ }\ }\ if (var==0) {\ fb_writebytes_bytes=fb->bufferSize-fb->bufferWritePos;\ if (fb_writebytes_bytes>fb_writebytes_len)\ fb_writebytes_bytes=fb_writebytes_len;\ if (fb_writebytes_bytes) {\ memmove(fb->buffer+fb->bufferWritePos, p, fb_writebytes_bytes);\ fb->bufferWritePos+=fb_writebytes_bytes;\ fb->bytesWritten+=fb_writebytes_bytes; \ }\ var=fb_writebytes_bytes;\ }\ } /** * Write a number of bytes to the buffer and make sure that @b all bytes are written. * @param fb fast buffer * @param var variable to receive the result (<0: error code, 0 on success) * @param p pointer to the location to write the bytes from * @param len number of bytes to write */ #define GWEN_FASTBUFFER_WRITEFORCED(fb, var, p, len) {\ int fb_writeforced_len;\ const uint8_t *fb_writeforced_p;\ \ fb_writeforced_len=len;\ if (fb_writeforced_len==-1) \ fb_writeforced_len=strlen((const char*)p);\ fb_writeforced_p=(const uint8_t*)p;\ var=0;\ while(fb_writeforced_len && var==0) {\ int fb_writeforced_rv;\ \ GWEN_FASTBUFFER_WRITEBYTES(fb, fb_writeforced_rv, fb_writeforced_p, fb_writeforced_len);\ if (fb_writeforced_rv<0) {\ var=fb_writeforced_rv;\ break;\ }\ else if (fb_writeforced_rv==0) {\ var=GWEN_ERROR_EOF;\ break;\ }\ else {\ fb_writeforced_len-=fb_writeforced_rv;\ fb_writeforced_p+=fb_writeforced_rv;\ }\ }\ } #define GWEN_FASTBUFFER_WRITELINE(fb, var, p) {\ int fb_writeline_rv;\ int fb_writeline_len=strlen((const char*)p);\ \ GWEN_FASTBUFFER_WRITEFORCED(fb, fb_writeline_rv, p, fb_writeline_len);\ if (fb_writeline_rv<0)\ var=fb_writeline_rv;\ else {\ if (fb->flags & GWEN_FAST_BUFFER_FLAGS_DOSMODE) {\ GWEN_FASTBUFFER_WRITEFORCED(fb, fb_writeline_rv, "\r\n", 2);\ }\ else {\ GWEN_FASTBUFFER_WRITEFORCED(fb, fb_writeline_rv, "\n", 1);\ }\ if (fb_writeline_rv<0)\ var=fb_writeline_rv;\ else\ var=0;\ }\ } /** * Copy a number of bytes from one buffer to another one. * @param fb1 source fast buffer * @param fb2 destination fast buffer * @param var variable to receive the result (<0: error code, number of bytes read otherwise) * @param len number of bytes to copy */ #define GWEN_FASTBUFFER_COPYBYTES(fb1, fb2, var, len) { \ int fb_copybytes_bytes;\ \ var=0; \ if (fb1->bufferReadPos>=fb1->bufferWritePos) { \ int fb_copybytes_rv; \ \ fb_copybytes_rv=GWEN_SyncIo_Read(fb1->io, fb1->buffer, fb1->bufferSize); \ if (fb_copybytes_rv<0) { \ DBG_DEBUG(GWEN_LOGDOMAIN, "here (%d)", fb_copybytes_rv); \ var=fb_copybytes_rv; \ } \ else {\ fb1->bufferWritePos=fb_copybytes_rv; \ fb1->bufferReadPos=0; \ }\ }\ if (var==0) {\ fb_bytes=fb1->bufferWritePos-fb1->bufferReadPos;\ if (fb_copybytes_bytes>len)\ fb_copybytes_bytes=len;\ if (fb_copybytes_bytes) {\ int fb_copybytes_rv;\ \ GWEN_FASTBUFFER_WRITEBYTES(fb2, fb_copybytes_rv, (fb1->buffer+fb1->bufferReadPos), fb_bytes);\ var=fb_copybytes_rv;\ if (fb_copybytes_rv>0) {\ fb1->bufferReadPos+=fb_copybytes_rv;\ fb1->bytesRead+=fb_copybytes_rv; \ }\ }\ }\ } /** * Copy a number of bytes to the buffer and make sure that @b all bytes are copied. * @param fb1 source fast buffer * @param fb2 destination fast buffer * @param var variable to receive the result (<0: error code, 0 on success) * @param p pointer to the location to write the bytes from * @param len number of bytes to copy */ #define GWEN_FASTBUFFER_COPYFORCED(fb1, fb2, var, p, len) {\ int fb_copyforced_len;\ uint8_t *fb_copyforced_p;\ \ fb_copyforced_len=len;\ fb_copyforced_p=(uint8_t*)p;\ var=0;\ while(fb_copyforced_len && var==0) {\ int fb_copyforced_rv;\ \ GWEN_FASTBUFFER_COPYBYTES(fb1, fb2, fb_copyforced_rv, fb_copyforced_p, fb_copyforced_len);\ if (fb_copyforced_rv<0) {\ var=fb_copyforced_rv;\ break;\ }\ else if (fb_copyforced_rv==0)\ var=GWEN_ERROR_EOF;\ else {\ fb_len-=fb_copyforced_rv;\ fb_p+=fb_copyforced_rv;\ }\ }\ } #endif gwenhywfar-4.15.2beta/src/base/list.c0000644000175000017500000004353212416477066014405 00000000000000/*************************************************************************** begin : Sat Nov 15 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "list_p.h" #include #include GWEN_INHERIT_FUNCTIONS(GWEN_LIST) GWEN_LIST_ENTRY *GWEN_ListEntry_new(void) { GWEN_LIST_ENTRY *le; GWEN_NEW_OBJECT(GWEN_LIST_ENTRY, le); le->usage=1; return le; } void GWEN_ListEntry_free(GWEN_LIST_ENTRY *le) { if (le) { if (le->usage) { le->usage--; if (le->usage==0) { /* unlink */ le->previous=0; le->next=0; DBG_VERBOUS(GWEN_LOGDOMAIN, "Freeing entry"); GWEN_RefPtr_free(le->dataPtr); /* really free */ GWEN_FREE_OBJECT(le); } } } } GWEN__LISTPTR *GWEN__ListPtr_new(void) { GWEN__LISTPTR *lp; GWEN_NEW_OBJECT(GWEN__LISTPTR, lp); lp->refCount=1; return lp; } void GWEN__ListPtr_free(GWEN__LISTPTR *lp) { if (lp) { assert(lp->refCount); if (--(lp->refCount)==0) { GWEN__ListPtr_Clear(lp); GWEN_FREE_OBJECT(lp); } } } void GWEN__ListPtr_Attach(GWEN__LISTPTR *lp) { assert(lp); assert(lp->refCount); lp->refCount++; } void GWEN__ListPtr_Clear(GWEN__LISTPTR *lp) { GWEN_LIST_ENTRY *le; assert(lp); le=lp->first; while(le) { GWEN_LIST_ENTRY *nle; nle=le->next; GWEN_ListEntry_free(le); le=nle; } /* while */ lp->first=0; lp->last=0; lp->size=0; } GWEN__LISTPTR *GWEN__ListPtr_dup(GWEN__LISTPTR *lp) { GWEN__LISTPTR *nlp; GWEN_LIST_ENTRY *le; nlp=GWEN__ListPtr_new(); assert(lp); le=lp->first; while(le) { GWEN_LIST_ENTRY *nle; nle=GWEN_ListEntry_new(); if (le->dataPtr) nle->dataPtr=GWEN_RefPtr_dup(le->dataPtr); /* push back */ nle->previous=nlp->last; if (nlp->last) nlp->last->next=nle; nlp->last=nle; if (!(nlp->first)) nlp->first=nle; nlp->size++; nle->linkCount=le->linkCount; le=le->next; } /* while */ return nlp; } GWEN_LIST *GWEN_List_new(void) { GWEN_LIST *l; GWEN_NEW_OBJECT(GWEN_LIST, l); GWEN_INHERIT_INIT(GWEN_LIST, l); l->listPtr=GWEN__ListPtr_new(); return l; } void GWEN_List_free(GWEN_LIST *l) { if (l) { GWEN_INHERIT_FINI(GWEN_LIST, l); GWEN__ListPtr_free(l->listPtr); GWEN_RefPtrInfo_free(l->refPtrInfo); GWEN_FREE_OBJECT(l); } } GWEN_LIST *GWEN_List_dup(const GWEN_LIST *l) { GWEN_LIST *nl; assert(l); assert(l->listPtr); GWEN_NEW_OBJECT(GWEN_LIST, nl); GWEN_INHERIT_INIT(GWEN_LIST, nl); nl->listPtr=l->listPtr; GWEN__ListPtr_Attach(nl->listPtr); return nl; } GWEN_REFPTR_INFO *GWEN_List_GetRefPtrInfo(const GWEN_LIST *l) { assert(l); return l->refPtrInfo; } void GWEN_List_SetRefPtrInfo(GWEN_LIST *l, GWEN_REFPTR_INFO *rpi) { assert(l); if (rpi) GWEN_RefPtrInfo_Attach(rpi); GWEN_RefPtrInfo_free(l->refPtrInfo); l->refPtrInfo=rpi; } void GWEN_List_PushBackRefPtr(GWEN_LIST *l, GWEN_REFPTR *rp) { GWEN_LIST_ENTRY *le; GWEN__LISTPTR *lp; if (l->listPtr->refCount>1) { GWEN__LISTPTR *nlp; /* only copy the list if someone else is using it */ nlp=GWEN__ListPtr_dup(l->listPtr); GWEN__ListPtr_free(l->listPtr); l->listPtr=nlp; } lp=l->listPtr; le=GWEN_ListEntry_new(); le->dataPtr=rp; le->previous=lp->last; if (lp->last) lp->last->next=le; lp->last=le; if (!(lp->first)) lp->first=le; lp->size++; le->linkCount=1; } void GWEN_List_PushBack(GWEN_LIST *l, void *p) { GWEN_List_PushBackRefPtr(l, GWEN_RefPtr_new(p, l->refPtrInfo)); } void GWEN_List_PushFrontRefPtr(GWEN_LIST *l, GWEN_REFPTR *rp) { GWEN_LIST_ENTRY *le; GWEN__LISTPTR *lp; if (l->listPtr->refCount>1) { GWEN__LISTPTR *nlp; /* only copy the list if someone else is using it */ nlp=GWEN__ListPtr_dup(l->listPtr); GWEN__ListPtr_free(l->listPtr); l->listPtr=nlp; } lp=l->listPtr; le=GWEN_ListEntry_new(); le->dataPtr=rp; le->next=lp->first; if (lp->first) lp->first->previous=le; lp->first=le; if (!(lp->last)) lp->last=le; lp->size++; le->linkCount=1; } void GWEN_List_PushFront(GWEN_LIST *l, void *p) { GWEN_List_PushFrontRefPtr(l, GWEN_RefPtr_new(p, l->refPtrInfo)); } void *GWEN_List_GetFront(const GWEN_LIST *l) { assert(l); assert(l->listPtr); if (l->listPtr->first) return GWEN_RefPtr_GetData(l->listPtr->first->dataPtr); return 0; } GWEN_REFPTR *GWEN_List_GetFrontRefPtr(const GWEN_LIST *l) { assert(l); assert(l->listPtr); if (l->listPtr->first) return l->listPtr->first->dataPtr; return 0; } void *GWEN_List_GetBack(const GWEN_LIST *l) { assert(l); assert(l->listPtr); if (l->listPtr->last) return GWEN_RefPtr_GetData(l->listPtr->last->dataPtr); return 0; } GWEN_REFPTR *GWEN_List_GetBackRefPtr(const GWEN_LIST *l) { assert(l); assert(l->listPtr); if (l->listPtr->last) return l->listPtr->last->dataPtr; return 0; } unsigned int GWEN_List_GetSize(const GWEN_LIST *l) { assert(l); assert(l->listPtr); return l->listPtr->size; } int GWEN_List_IsEmpty(const GWEN_LIST *l) { return GWEN_List_GetSize(l) == 0; } void GWEN_List_PopBack(GWEN_LIST *l) { GWEN_LIST_ENTRY *le; GWEN__LISTPTR *lp; assert(l); assert(l->listPtr); if (l->listPtr->last==0) return; if (l->listPtr->refCount>1) { GWEN__LISTPTR *nlp; /* only copy the list if someone else is using it */ nlp=GWEN__ListPtr_dup(l->listPtr); GWEN__ListPtr_free(l->listPtr); l->listPtr=nlp; } lp=l->listPtr; le=lp->last; if (le) { le->linkCount=0; lp->last=le->previous; if (le->previous) { le->previous->next=0; } else { lp->last=0; lp->first=0; } GWEN_ListEntry_free(le); lp->size--; } } void GWEN_List_PopFront(GWEN_LIST *l) { GWEN_LIST_ENTRY *le; GWEN__LISTPTR *lp; assert(l); assert(l->listPtr); if (l->listPtr->first==0) return; if (l->listPtr->refCount>1) { GWEN__LISTPTR *nlp; /* only copy the list if someone else is using it */ nlp=GWEN__ListPtr_dup(l->listPtr); GWEN__ListPtr_free(l->listPtr); l->listPtr=nlp; } lp=l->listPtr; le=lp->first; if (le) { le->linkCount=0; lp->first=le->next; if (le->next) { le->next->previous=0; } else { lp->first=0; lp->last=0; } GWEN_ListEntry_free(le); lp->size--; } } void GWEN_List_Clear(GWEN_LIST *l) { /* GWEN__LISTPTR *lp; */ assert(l); if (l->listPtr->refCount>1) { GWEN__LISTPTR *nlp; /* only copy the list if someone else is using it */ nlp=GWEN__ListPtr_dup(l->listPtr); GWEN__ListPtr_free(l->listPtr); l->listPtr=nlp; } else GWEN__ListPtr_Clear(l->listPtr); } void *GWEN_List_ForEach(GWEN_LIST *l, GWEN_LIST_FOREACH_CB fn, void *user_data) { GWEN_LIST_ITERATOR *it; void *el; assert(l); it=GWEN_List_First(l); if (!it) return 0; el=GWEN_ListIterator_Data(it); while(el) { el=fn(el, user_data); if (el) { GWEN_ListIterator_free(it); return el; } el=GWEN_ListIterator_Next(it); } GWEN_ListIterator_free(it); return 0; } void GWEN_List_Unshare(GWEN_LIST *l) { if (l->listPtr->refCount>1) { GWEN__LISTPTR *nlp; /* only copy the list if someone else is using it */ nlp=GWEN__ListPtr_dup(l->listPtr); GWEN__ListPtr_free(l->listPtr); l->listPtr=nlp; } } void GWEN_List_Erase(GWEN_LIST *l, GWEN_LIST_ITERATOR *it) { GWEN_LIST_ENTRY *current; GWEN__LISTPTR *lp; assert(l); assert(l->listPtr); if (l->listPtr->refCount>1) { GWEN_LIST_ENTRY *tle; GWEN__LISTPTR *nlp; int i; /* find the position of the iterator within current list */ tle=it->current; assert(tle); i=0; while(tle->previous) { i++; tle=tle->previous; } /* copy the list */ nlp=GWEN__ListPtr_dup(l->listPtr); GWEN__ListPtr_free(l->listPtr); l->listPtr=nlp; /* seek and set the iterator position */ tle=l->listPtr->first; assert(tle); while(tle && i--) { tle=tle->next; } assert(tle); it->current=tle; } lp=l->listPtr; assert(it); if (it->current) { current=it->current; if (it->current->linkCount==1) { /* unlink from list */ if (lp->first==current) lp->first=current->next; if (lp->last==current) lp->last=current->previous; /* unlink from next */ if (current->next) { it->current=current->next; current->next->usage++; current->next->previous=current->previous; } else it->current=0; /* unlink from previous */ if (current->previous) current->previous->next=current->next; /* free */ current->usage--; GWEN_ListEntry_free(current); lp->size--; } else { /* move iterator forwards even if the current entry has not * been deleted. Thus making the return condition clear to the * caller. */ if (current->next) { it->current=current->next; current->next->usage++; } else it->current=0; current->usage--; it->current->linkCount--; } } } GWEN_LIST_ITERATOR *GWEN_List_FindIter(GWEN_LIST *l, const void *p) { GWEN_LIST_ITERATOR *li; li=GWEN_List_First(l); if (li) { void *d; d=GWEN_ListIterator_Data(li); while(d) { if (d==p) { return li; } d=GWEN_ListIterator_Next(li); } GWEN_ListIterator_free(li); } return 0; } const void *GWEN_List_Contains(GWEN_LIST *l, const void *p) { GWEN_LIST_ITERATOR *li; li = GWEN_List_FindIter(l, p); if (li) { GWEN_ListIterator_free(li); return p; } return 0; } void GWEN_List_Remove(GWEN_LIST *l, const void *p) { GWEN_LIST_ITERATOR *li; li = GWEN_List_FindIter(l, p); if (li) { GWEN_List_Erase(l, li); GWEN_ListIterator_free(li); } } GWEN_LIST_ITERATOR *GWEN_List_First(const GWEN_LIST *l) { GWEN_LIST_ITERATOR *li; assert(l); assert(l->listPtr); if (l->listPtr->first==0) return 0; li=GWEN_ListIterator_new(l); li->current=l->listPtr->first; if (li->current) { li->current->usage++; } return li; } GWEN_LIST_ITERATOR *GWEN_List_Last(const GWEN_LIST *l) { GWEN_LIST_ITERATOR *li; assert(l); assert(l->listPtr); if (l->listPtr->last==0) return 0; li=GWEN_ListIterator_new(l); li->current=l->listPtr->last; if (li->current) li->current->usage++; return li; } void GWEN_List_Dump(const GWEN_LIST *l, FILE *f, unsigned int indent) { GWEN_LIST_ENTRY *le; unsigned int i; fprintf(f, "List contains %d entries\n", l->listPtr->size); le=l->listPtr->first; while(le) { for (i=0; iusage); for (i=0; iprevious); for (i=0; inext); for (i=0; idataPtr)); le=le->next; } /* while */ } GWEN_LIST_ITERATOR *GWEN_ListIterator_new(const GWEN_LIST *l) { GWEN_LIST_ITERATOR *li; GWEN_NEW_OBJECT(GWEN_LIST_ITERATOR, li); li->list=l; return li; } void GWEN_ListIterator_free(GWEN_LIST_ITERATOR *li) { if (li) { if (li->current) GWEN_ListEntry_free(li->current); GWEN_FREE_OBJECT(li); } } void *GWEN_ListIterator_Previous(GWEN_LIST_ITERATOR *li) { GWEN_REFPTR *rp; assert(li); rp=GWEN_ListIterator_PreviousRefPtr(li); if (!rp) return 0; return GWEN_RefPtr_GetData(rp); } GWEN_REFPTR *GWEN_ListIterator_PreviousRefPtr(GWEN_LIST_ITERATOR *li) { GWEN_LIST_ENTRY *le; assert(li); le=li->current; if (le) le=le->previous; if (li->current) GWEN_ListEntry_free(li->current); li->current=le; if (le) { le->usage++; return le->dataPtr; } return 0; } void *GWEN_ListIterator_Next(GWEN_LIST_ITERATOR *li) { GWEN_REFPTR *rp; assert(li); rp=GWEN_ListIterator_NextRefPtr(li); if (!rp) return 0; return GWEN_RefPtr_GetData(rp); } GWEN_REFPTR *GWEN_ListIterator_NextRefPtr(GWEN_LIST_ITERATOR *li) { GWEN_LIST_ENTRY *le; assert(li); le=li->current; if (le) le=le->next; if (li->current) GWEN_ListEntry_free(li->current); li->current=le; if (le) { le->usage++; return le->dataPtr; } return 0; } void *GWEN_ListIterator_Data(GWEN_LIST_ITERATOR *li) { assert(li); if (li->current) return GWEN_RefPtr_GetData(li->current->dataPtr); return 0; } GWEN_REFPTR *GWEN_ListIterator_DataRefPtr(GWEN_LIST_ITERATOR *li) { assert(li); if (li->current) return li->current->dataPtr; return 0; } void GWEN_ListIterator_IncLinkCount(GWEN_LIST_ITERATOR *li) { assert(li); if (li->current) li->current->linkCount++; } unsigned int GWEN_ListIterator_GetLinkCount(const GWEN_LIST_ITERATOR *li) { assert(li); assert(li->current); return li->current->linkCount; } /* __________________________________________________________________________ * AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA * ConstList * YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY */ GWEN_CONSTLIST *GWEN_ConstList_new(void) { return GWEN_List_new(); } void GWEN_ConstList_free(GWEN_CONSTLIST *l) { GWEN_List_free(l); } void GWEN_ConstList_PushBack(GWEN_CONSTLIST *l, const void *p) { GWEN_List_PushBack(l, (void*)p); } void GWEN_ConstList_PushFront(GWEN_CONSTLIST *l, const void *p) { GWEN_List_PushFront(l, (void*)p); } const void *GWEN_ConstList_GetFront(const GWEN_CONSTLIST *l) { return GWEN_List_GetFront(l); } const void *GWEN_ConstList_GetBack(const GWEN_CONSTLIST *l) { return GWEN_List_GetBack(l); } unsigned int GWEN_ConstList_GetSize(const GWEN_CONSTLIST *l) { return GWEN_List_GetSize(l); } int GWEN_ConstList_IsEmpty(const GWEN_LIST *l) { return GWEN_ConstList_GetSize(l) == 0; } void GWEN_ConstList_PopBack(GWEN_CONSTLIST *l) { GWEN_List_PopBack(l); } void GWEN_ConstList_PopFront(GWEN_CONSTLIST *l) { GWEN_List_PopFront(l); } void GWEN_ConstList_Erase(GWEN_CONSTLIST *l, GWEN_CONSTLIST_ITERATOR *it) { GWEN_List_Erase(l, it); } void GWEN_ConstList_Clear(GWEN_CONSTLIST *l) { GWEN_List_Clear(l); } const void *GWEN_ConstList_ForEach(GWEN_CONSTLIST *l, GWEN_CONSTLIST_FOREACH_CB fn, void *user_data) { GWEN_LIST_ITERATOR *it; const void *el; assert(l); it = GWEN_List_First(l); if (!it) return 0; el = GWEN_ListIterator_Data(it); while(el) { el = fn(el, user_data); if (el) { GWEN_ListIterator_free(it); return el; } el = GWEN_ListIterator_Next(it); } GWEN_ListIterator_free(it); return 0; } GWEN_CONSTLIST_ITERATOR *GWEN_ConstList_FindIter(const GWEN_CONSTLIST *l, const void *p) { GWEN_CONSTLIST_ITERATOR *li; li=GWEN_ConstList_First(l); if (li) { const void *d; d=GWEN_ConstListIterator_Data(li); while(d) { if (d==p) { return li; } d=GWEN_ConstListIterator_Next(li); } GWEN_ConstListIterator_free(li); } return 0; } const void *GWEN_ConstList_Contains(const GWEN_CONSTLIST *l, const void *p) { GWEN_CONSTLIST_ITERATOR *li; li = GWEN_ConstList_FindIter(l, p); if (li) { GWEN_ConstListIterator_free(li); return p; } return 0; } void GWEN_ConstList_Remove(GWEN_CONSTLIST *l, const void *p) { GWEN_CONSTLIST_ITERATOR *li; li = GWEN_ConstList_FindIter(l, p); if (li) { GWEN_ConstList_Erase(l, li); } } GWEN_CONSTLIST_ITERATOR *GWEN_ConstList_First(const GWEN_CONSTLIST *l) { return GWEN_List_First(l); } GWEN_CONSTLIST_ITERATOR *GWEN_ConstList_Last(const GWEN_CONSTLIST *l) { return GWEN_List_Last(l); } GWEN_CONSTLIST_ITERATOR *GWEN_ConstListIterator_new(const GWEN_CONSTLIST *l) { return GWEN_ListIterator_new(l); } void GWEN_ConstListIterator_free(GWEN_CONSTLIST_ITERATOR *li) { GWEN_ListIterator_free(li); } const void *GWEN_ConstListIterator_Previous(GWEN_CONSTLIST_ITERATOR *li) { return GWEN_ListIterator_Previous(li); } const void *GWEN_ConstListIterator_Next(GWEN_CONSTLIST_ITERATOR *li) { return GWEN_ListIterator_Next(li); } const void *GWEN_ConstListIterator_Data(GWEN_CONSTLIST_ITERATOR *li) { return GWEN_ListIterator_Data(li); } gwenhywfar-4.15.2beta/src/base/i18n_l.h0000644000175000017500000000371212364015347014515 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Fri Sep 12 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_I18N_L_H #define GWENHYWFAR_I18N_L_H /* Internationalization */ #ifdef ENABLE_NLS # include # include #endif #include int GWEN_I18N_ModuleInit(); int GWEN_I18N_ModuleFini(); #define I18N(msg) GWEN_I18N_Translate(PACKAGE, msg) #define I18S(msg) msg #endif gwenhywfar-4.15.2beta/src/base/gwensignal.c0000644000175000017500000003667212416477066015577 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: stringlist.c 1067 2006-05-22 15:25:23Z christian $ begin : Thu Apr 03 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwensignal_p.h" #include #include #include #include #include #include GWEN_LIST2_FUNCTIONS(GWEN_SIGNAL, GWEN_Signal) GWEN_LIST2_FUNCTIONS(GWEN_SLOT, GWEN_Slot) GWEN_SIGNALOBJECT *GWEN_SignalObject_new(void) { GWEN_SIGNALOBJECT *so; GWEN_NEW_OBJECT(GWEN_SIGNALOBJECT, so); so->signalList=GWEN_Signal_List2_new(); so->slotList=GWEN_Slot_List2_new(); return so; } void GWEN_SignalObject_free(GWEN_SIGNALOBJECT *so) { if (so) { GWEN_Slot_List2_freeAll(so->slotList); GWEN_Signal_List2_freeAll(so->signalList); GWEN_FREE_OBJECT(so); } } uint32_t GWEN_SignalObject_MkTypeId(const char *typeName) { return GWEN_Inherit_MakeId(typeName); } GWEN_SIGNAL *GWEN_SignalObject__findSignal(const GWEN_SIGNALOBJECT *so, const char *name, uint32_t typeId1, uint32_t typeId2) { GWEN_SIGNAL_LIST2_ITERATOR *sit; assert(so); assert(name); sit=GWEN_Signal_List2_First(so->signalList); if (sit) { GWEN_SIGNAL *sig; sig=GWEN_Signal_List2Iterator_Data(sit); assert(sig); while(sig) { const char *s; s=sig->name; assert(s); if (strcasecmp(s, name)==0 && (typeId1==0 || typeId1==sig->typeOfArg1) && (typeId2==0 || typeId2==sig->typeOfArg2)) { GWEN_Signal_List2Iterator_free(sit); return sig; } sig=GWEN_Signal_List2Iterator_Next(sit); } GWEN_Signal_List2Iterator_free(sit); } return 0; } GWEN_SIGNAL *GWEN_SignalObject_FindSignal(const GWEN_SIGNALOBJECT *so, const char *name, const char *typeOfArg1, const char *typeOfArg2) { uint32_t typeId1=0; uint32_t typeId2=0; if (typeOfArg1) typeId1=GWEN_SignalObject_MkTypeId(typeOfArg1); if (typeOfArg2) typeId2=GWEN_SignalObject_MkTypeId(typeOfArg2); return GWEN_SignalObject__findSignal(so, name, typeId1, typeId2); } GWEN_SLOT *GWEN_SignalObject__findSlot(const GWEN_SIGNALOBJECT *so, const char *name, uint32_t typeId1, uint32_t typeId2) { GWEN_SLOT_LIST2_ITERATOR *sit; assert(so); assert(name); sit=GWEN_Slot_List2_First(so->slotList); if (sit) { GWEN_SLOT *slot; slot=GWEN_Slot_List2Iterator_Data(sit); assert(slot); while(slot) { const char *s; s=slot->name; assert(s); if (strcasecmp(s, name)==0 && (typeId1==0 || typeId1==slot->typeOfArg1) && (typeId2==0 || typeId2==slot->typeOfArg2)) { GWEN_Slot_List2Iterator_free(sit); return slot; } slot=GWEN_Slot_List2Iterator_Next(sit); } GWEN_Slot_List2Iterator_free(sit); } return 0; } GWEN_SLOT *GWEN_SignalObject_FindSlot(const GWEN_SIGNALOBJECT *so, const char *name, const char *typeOfArg1, const char *typeOfArg2) { uint32_t typeId1=0; uint32_t typeId2=0; if (typeOfArg1) typeId1=GWEN_SignalObject_MkTypeId(typeOfArg1); if (typeOfArg2) typeId2=GWEN_SignalObject_MkTypeId(typeOfArg2); return GWEN_SignalObject__findSlot(so, name, typeId1, typeId2); } int GWEN_SignalObject_AddSignal(GWEN_SIGNALOBJECT *so, GWEN_SIGNAL *sig) { if (GWEN_SignalObject__findSignal(so, sig->name, sig->typeOfArg1, sig->typeOfArg2)) { DBG_ERROR(GWEN_LOGDOMAIN, "Signal \"%s\" already exists", sig->name); return GWEN_ERROR_INVALID; } sig->signalObject=so; GWEN_Signal_List2_PushBack(so->signalList, sig); DBG_INFO(GWEN_LOGDOMAIN, "Added signal \"%s\"", sig->name); return 0; } int GWEN_SignalObject_AddSlot(GWEN_SIGNALOBJECT *so, GWEN_SLOT *slot) { if (GWEN_SignalObject__findSlot(so, slot->name, slot->typeOfArg1, slot->typeOfArg2)) { DBG_ERROR(GWEN_LOGDOMAIN, "Slot \"%s\" already exists", slot->name); return GWEN_ERROR_INVALID; } slot->signalObject=so; GWEN_Slot_List2_PushBack(so->slotList, slot); DBG_INFO(GWEN_LOGDOMAIN, "Added slot \"%s\"", slot->name); return 0; } void GWEN_SignalObject_RemoveForDerivedType(GWEN_SIGNALOBJECT *so, const char *derivedType) { uint32_t typeId=0; GWEN_SLOT_LIST2_ITERATOR *slotIt; GWEN_SIGNAL_LIST2_ITERATOR *sigIt; assert(so); if (derivedType) typeId=GWEN_SignalObject_MkTypeId(derivedType); slotIt=GWEN_Slot_List2_First(so->slotList); if (slotIt) { GWEN_SLOT *slot; slot=GWEN_Slot_List2Iterator_Data(slotIt); assert(slot); while(slot) { const char *s; s=slot->name; assert(s); if (typeId==0 || slot->derivedParentType==typeId) { GWEN_Slot_List2_Erase(so->slotList, slotIt); GWEN_Slot_free(slot); /* iterator now points to the next entry in any case (or NULL) */ slot=GWEN_Slot_List2Iterator_Data(slotIt); } else slot=GWEN_Slot_List2Iterator_Next(slotIt); } GWEN_Slot_List2Iterator_free(slotIt); } sigIt=GWEN_Signal_List2_First(so->signalList); if (sigIt) { GWEN_SIGNAL *sig; sig=GWEN_Signal_List2Iterator_Data(sigIt); assert(sig); while(sig) { const char *s; s=sig->name; assert(s); if (typeId==0 || sig->derivedParentType==typeId) { GWEN_Signal_List2_Erase(so->signalList, sigIt); GWEN_Signal_free(sig); /* iterator now points to the next entry in any case (or NULL) */ sig=GWEN_Signal_List2Iterator_Data(sigIt); } else sig=GWEN_Signal_List2Iterator_Next(sigIt); } GWEN_Signal_List2Iterator_free(sigIt); } } GWEN_SIGNAL *GWEN_Signal_new(GWEN_SIGNALOBJECT *so, const char *derivedType, const char *name, const char *typeOfArg1, const char *typeOfArg2) { GWEN_SIGNAL *sig; assert(so); assert(name); GWEN_NEW_OBJECT(GWEN_SIGNAL, sig) sig->_refCount=1; sig->connectedSlots=GWEN_Slot_List2_new(); sig->name=strdup(name); if (typeOfArg1) sig->typeOfArg1=GWEN_SignalObject_MkTypeId(typeOfArg1); if (typeOfArg2) sig->typeOfArg2=GWEN_SignalObject_MkTypeId(typeOfArg2); if (derivedType) sig->derivedParentType=GWEN_SignalObject_MkTypeId(derivedType); if (GWEN_SignalObject_AddSignal(so, sig)) { GWEN_Signal_free(sig); return 0; } return sig; } void GWEN_Signal_free(GWEN_SIGNAL *sig) { if (sig) { assert(sig->_refCount); if (sig->_refCount==1) { GWEN_SLOT_LIST2_ITERATOR *sit; /* remove from all connected slots */ sit=GWEN_Slot_List2_First(sig->connectedSlots); if (sit) { GWEN_SLOT *slot; slot=GWEN_Slot_List2Iterator_Data(sit); assert(slot); while(slot) { GWEN_SLOT *next; next=GWEN_Slot_List2Iterator_Next(sit); DBG_ERROR(GWEN_LOGDOMAIN, "Disconnecting signal \"%s\" from slot \"%s\"", sig->name, slot->name); GWEN_Signal_List2_Remove(slot->connectedSignals, sig); slot=next; } GWEN_Slot_List2Iterator_free(sit); } GWEN_Slot_List2_free(sig->connectedSlots); free(sig->name); sig->_refCount=0; GWEN_FREE_OBJECT(sig); } else sig->_refCount--; } } void GWEN_Signal_Attach(GWEN_SIGNAL *sig) { assert(sig); assert(sig->_refCount); sig->_refCount++; } GWEN_SIGNAL *GWEN_Signal__List2_freeAll_cb(GWEN_SIGNAL *sig, GWEN_UNUSED void *user_data) { GWEN_Signal_free(sig); return 0; } void GWEN_Signal_List2_freeAll(GWEN_SIGNAL_LIST2 *slist) { GWEN_Signal_List2_ForEach(slist, GWEN_Signal__List2_freeAll_cb, 0); GWEN_Signal_List2_free(slist); } GWEN_SIGNAL *GWEN_Signal__List2_hasSignal_cb(GWEN_SIGNAL *sig, void *user_data) { if ((void*)sig==user_data) return sig; return 0; } int GWEN_Signal_List2_HasSignal(GWEN_SIGNAL_LIST2 *slist, const GWEN_SIGNAL *sig) { if (GWEN_Signal_List2_ForEach(slist, GWEN_Signal__List2_hasSignal_cb, (void*)sig)) return 1; return 0; } GWEN_SIGNALOBJECT *GWEN_Signal_GetSignalObject(const GWEN_SIGNAL *sig) { assert(sig); return sig->signalObject; } int GWEN_Signal_Connect(GWEN_SIGNAL *sig, GWEN_SLOT *slot) { assert(sig); assert(slot); if (sig->typeOfArg1!=slot->typeOfArg1) { DBG_ERROR(GWEN_LOGDOMAIN, "Signal \"%s\" and slot \"%s\" use different types for " "argument 1", sig->name, slot->name); return GWEN_ERROR_INVALID; } if (sig->typeOfArg2!=slot->typeOfArg2) { DBG_ERROR(GWEN_LOGDOMAIN, "Signal \"%s\" and slot \"%s\" use different types for " "argument 2", sig->name, slot->name); return GWEN_ERROR_INVALID; } if (GWEN_Signal_List2_HasSignal(slot->connectedSignals, sig)) { DBG_ERROR(GWEN_LOGDOMAIN, "Signal \"%s\" and slot \"%s\" already connected", sig->name, slot->name); return GWEN_ERROR_INVALID; } if (GWEN_Slot_List2_HasSlot(sig->connectedSlots, slot)) { DBG_ERROR(GWEN_LOGDOMAIN, "Signal \"%s\" and slot \"%s\" already connected", sig->name, slot->name); return GWEN_ERROR_INVALID; } GWEN_Signal_List2_PushBack(slot->connectedSignals, sig); GWEN_Slot_List2_PushBack(sig->connectedSlots, slot); return 0; } int GWEN_Signal_Disconnect(GWEN_SIGNAL *sig, GWEN_SLOT *slot) { assert(sig); assert(slot); if (GWEN_Signal_List2_HasSignal(slot->connectedSignals, sig)==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Signal \"%s\" and slot \"%s\" are not connected", sig->name, slot->name); return GWEN_ERROR_INVALID; } if (GWEN_Slot_List2_HasSlot(sig->connectedSlots, slot)==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Signal \"%s\" and slot \"%s\" are not connected", sig->name, slot->name); return GWEN_ERROR_INVALID; } GWEN_Signal_List2_Remove(slot->connectedSignals, sig); GWEN_Slot_List2_Remove(sig->connectedSlots, slot); return 0; } int GWEN_Signal_Emit(GWEN_SIGNAL *sig, void *pArg1, void *pArg2, int iArg3, int iArg4) { GWEN_SLOT_LIST2_ITERATOR *sit; int result=0; assert(sig); sit=GWEN_Slot_List2_First(sig->connectedSlots); if (sit) { GWEN_SLOT *slot; slot=GWEN_Slot_List2Iterator_Data(sit); assert(slot); while(slot) { if (slot->func) { int rv; DBG_DEBUG(GWEN_LOGDOMAIN, "Sending signal \"%s\" to slot \"%s\" (%p)", sig->name, slot->name, slot); rv=slot->func(slot, slot->userData, pArg1, pArg2, iArg3, iArg4); if (rv>0) { DBG_DEBUG(GWEN_LOGDOMAIN, "Slot \"%s\" (%p) returned an error (%d)", slot->name, slot, rv); result=rv; } } slot=GWEN_Slot_List2Iterator_Next(sit); } GWEN_Slot_List2Iterator_free(sit); } return result; } GWEN_SLOT *GWEN_Slot_new(GWEN_SIGNALOBJECT *so, const char *derivedType, const char *name, const char *typeOfArg1, const char *typeOfArg2, GWEN_SLOT_FUNCTION fn, void *userData) { GWEN_SLOT *slot; assert(name); GWEN_NEW_OBJECT(GWEN_SLOT, slot) slot->_refCount=1; slot->connectedSignals=GWEN_Signal_List2_new(); slot->name=strdup(name); if (typeOfArg1) slot->typeOfArg1=GWEN_SignalObject_MkTypeId(typeOfArg1); if (typeOfArg2) slot->typeOfArg2=GWEN_SignalObject_MkTypeId(typeOfArg2); if (derivedType) slot->derivedParentType=GWEN_SignalObject_MkTypeId(derivedType); slot->func=fn; slot->userData=userData; if (GWEN_SignalObject_AddSlot(so, slot)) { GWEN_Slot_free(slot); return 0; } return slot; } void GWEN_Slot_free(GWEN_SLOT *slot) { if (slot) { assert(slot->_refCount); if (slot->_refCount==1) { GWEN_SIGNAL_LIST2_ITERATOR *sit; /* remove from all connected signals */ sit=GWEN_Signal_List2_First(slot->connectedSignals); if (sit) { GWEN_SIGNAL *sig; sig=GWEN_Signal_List2Iterator_Data(sit); assert(sig); while(sig) { DBG_ERROR(GWEN_LOGDOMAIN, "Disconnecting slot \"%s\" from signal \"%s\"", slot->name, sig->name); GWEN_Slot_List2_Remove(sig->connectedSlots, slot); sig=GWEN_Signal_List2Iterator_Next(sit); } GWEN_Signal_List2Iterator_free(sit); } GWEN_Signal_List2_free(slot->connectedSignals); free(slot->name); slot->_refCount=0; GWEN_FREE_OBJECT(slot); } else slot->_refCount--; } } void GWEN_Slot_Attach(GWEN_SLOT *slot) { assert(slot); assert(slot->_refCount); slot->_refCount++; } GWEN_SLOT *GWEN_Slot__List2_freeAll_cb(GWEN_SLOT *slot, GWEN_UNUSED void *user_data) { GWEN_Slot_free(slot); return 0; } void GWEN_Slot_List2_freeAll(GWEN_SLOT_LIST2 *slist) { GWEN_Slot_List2_ForEach(slist, GWEN_Slot__List2_freeAll_cb, 0); GWEN_Slot_List2_free(slist); } GWEN_SLOT *GWEN_Slot__List2_hasSlot_cb(GWEN_SLOT *slot, void *user_data) { if ((void*)slot==user_data) return slot; return 0; } int GWEN_Slot_List2_HasSlot(GWEN_SLOT_LIST2 *slist, const GWEN_SLOT *slot) { if (GWEN_Slot_List2_ForEach(slist, GWEN_Slot__List2_hasSlot_cb, (void*)slot)) return 1; return 0; } GWEN_SIGNALOBJECT *GWEN_Slot_GetSignalObject(const GWEN_SLOT *slot) { assert(slot); return slot->signalObject; } gwenhywfar-4.15.2beta/src/base/error_l.h0000644000175000017500000000361012364015347015064 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Tue Oct 02 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_ERROR_L_H #define GWENHYWFAR_ERROR_L_H #include /** * Initializes this module. */ int GWEN_Error_ModuleInit(void); /** * Deinitializes this module. */ int GWEN_Error_ModuleFini(void); #endif /* MOD_ERROR_L_H */ gwenhywfar-4.15.2beta/src/base/list1.c0000644000175000017500000002332712416477066014466 00000000000000/*************************************************************************** begin : Sat Nov 15 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "list1_p.h" #include #include static GWENHYWFAR_CB int GWEN_List1__defaultSortFn(const void *a, const void *b, int ascending) { return 0; } GWEN_LIST1 *GWEN_List1_new(void) { GWEN_LIST1 *l; GWEN_NEW_OBJECT(GWEN_LIST1, l); l->sortFunction=GWEN_List1__defaultSortFn; return l; } void GWEN_List1_free(GWEN_LIST1 *l) { if (l) { GWEN_FREE_OBJECT(l); } } int GWEN_List1_GetCount(const GWEN_LIST1 *l) { assert(l); return l->count; } int GWEN_List1_Add(GWEN_LIST1 *l, GWEN_LIST1_ELEMENT *el) { assert(l); assert(el); if (el->listPtr) { /* element is already part of another list */ DBG_ERROR(GWEN_LOGDOMAIN, "Element is already part of a list"); assert(0); return -1; } if (l->firstElement==0) l->firstElement=el; el->prevElement=l->lastElement; if (l->lastElement) l->lastElement->nextElement=el; l->lastElement=el; el->listPtr=l; l->count++; return 0; } int GWEN_List1_AddList(GWEN_LIST1 *dest, GWEN_LIST1 *l) { GWEN_LIST1_ELEMENT *el; assert(dest); assert(l); while((el=l->firstElement)) { GWEN_List1_Del(el); GWEN_List1_Add(dest, el); } return 0; } int GWEN_List1_Insert(GWEN_LIST1 *l, GWEN_LIST1_ELEMENT *el) { assert(l); assert(el); if (el->listPtr) { /* element is already part of another list */ DBG_ERROR(GWEN_LOGDOMAIN, "Element is already part of a list"); return -1; } el->nextElement=l->firstElement; l->firstElement=el; if (l->lastElement==0) l->lastElement=el; if (el->nextElement) el->nextElement->prevElement=el; el->listPtr=l; l->count++; return 0; } int GWEN_List1_Del(GWEN_LIST1_ELEMENT *el) { GWEN_LIST1 *l; assert(el); l=el->listPtr; if (l==0) { /* not part of any list */ DBG_ERROR(GWEN_LOGDOMAIN, "Element is not part of any list"); return -1; } /* unlink from previous */ if (el->prevElement) el->prevElement->nextElement=el->nextElement; /* unlink from next */ if (el->nextElement) el->nextElement->prevElement=el->prevElement; /* unlink from list */ if (l->firstElement==el) l->firstElement=el->nextElement; if (l->lastElement==el) l->lastElement=el->prevElement; l->count--; el->nextElement=0; el->prevElement=0; el->listPtr=0; return 0; } void *GWEN_List1_GetFirst(const GWEN_LIST1 *l) { if (l->firstElement) return l->firstElement->data; return 0; } void *GWEN_List1_GetLast(const GWEN_LIST1 *l) { if (l->lastElement) return l->lastElement->data; return 0; } GWEN_LIST1_ELEMENT *GWEN_List1Element_new(void *d) { GWEN_LIST1_ELEMENT *el; GWEN_NEW_OBJECT(GWEN_LIST1_ELEMENT, el); el->data=d; return el; } void GWEN_List1Element_free(GWEN_LIST1_ELEMENT *el) { if (el) { if (el->listPtr) GWEN_List1_Del(el); GWEN_FREE_OBJECT(el); } } void *GWEN_List1Element_GetData(const GWEN_LIST1_ELEMENT *el) { return el->data; } void *GWEN_List1Element_GetPrevious(const GWEN_LIST1_ELEMENT *el) { if (el->prevElement) return el->prevElement->data; return 0; } void *GWEN_List1Element_GetNext(const GWEN_LIST1_ELEMENT *el) { if (el->nextElement) return el->nextElement->data; return 0; } #if 0 static int GWEN_List1__compar_asc(const void *a, const void *b) { const GWEN_LIST1_ELEMENT * const * pse1 = a, * const * pse2 = b; const GWEN_LIST1_ELEMENT *se1 = *pse1, *se2 = *pse2; return (se1->listPtr->sortFunction)(se1->data, se2->data, 1); } static int GWEN_List1__compar_desc(const void *a, const void *b) { const GWEN_LIST1_ELEMENT * const * pse1 = a, * const * pse2 = b; const GWEN_LIST1_ELEMENT *se1 = *pse1, *se2 = *pse2; return (se1->listPtr->sortFunction)(se1->data, se2->data, 0); } GWEN_LIST1_SORT_FN GWEN_List1_SetSortFn(GWEN_LIST1 *l, GWEN_LIST1_SORT_FN fn) { GWEN_LIST1_SORT_FN oldFn; assert(l); oldFn=l->sortFunction; l->sortFunction=fn; return oldFn; } void GWEN_List1_Sort(GWEN_LIST1 *l, int ascending) { GWEN_LIST1_ELEMENT **tmpEntries; GWEN_LIST1_ELEMENT *sentry; GWEN_LIST1_ELEMENT **psentry; uint32_t count; uint32_t i; if (l->count<1) return; count=l->count; /* sort entries into a linear pointer list */ tmpEntries=(GWEN_LIST1_ELEMENT **)malloc((count+1)* sizeof(GWEN_LIST1_ELEMENT*)); assert(tmpEntries); psentry=tmpEntries; sentry=l->firstElement; while(sentry) { GWEN_LIST1_ELEMENT *next; *(psentry++)=sentry; next=sentry->nextElement; sentry->prevElement=NULL; sentry->nextElement=NULL; sentry->listPtr=l; sentry=next; } /* while */ *psentry=NULL; /* clear list */ l->count=0; l->firstElement=NULL; l->lastElement=NULL; /* sort */ if (ascending) qsort(tmpEntries, count, sizeof(GWEN_LIST1_ELEMENT*), GWEN_List1__compar_asc); else qsort(tmpEntries, count, sizeof(GWEN_LIST1_ELEMENT*), GWEN_List1__compar_desc); /* sort entries back into GWEN_LIST1 according to temporary list */ psentry=tmpEntries; /* we use "<=count" because the list contains count+1 elements */ for (i=0; i<=count; i++) { if (*psentry) { (*psentry)->listPtr=NULL; GWEN_List1_Add(l, *psentry); } psentry++; } /* for */ free(tmpEntries); } #endif /* ------------------------------------------------------------------------------------------------- * Sort * ------------------------------------------------------------------------------------------------- */ static int GWEN_List1__compar(const void *a, const void *b) { const GWEN_LIST1_SORT_ELEM * const * pse1 = a, * const * pse2 = b; const GWEN_LIST1_SORT_ELEM *se1 = *pse1, *se2 = *pse2; const GWEN_LIST1_SORT_CTX *ctx=se1->context; const GWEN_LIST1_ELEMENT * e1=se1->element; const GWEN_LIST1_ELEMENT * e2=se2->element; return (ctx->list->sortFunction)(e1->data, e2->data, ctx->param); } GWEN_LIST1_SORT_FN GWEN_List1_SetSortFn(GWEN_LIST1 *l, GWEN_LIST1_SORT_FN fn) { GWEN_LIST1_SORT_FN oldFn; assert(l); oldFn=l->sortFunction; l->sortFunction=fn; return oldFn; } GWEN_LIST1_SORT_CTX *GWEN_List1_SortCtx_new(GWEN_LIST1 *list, int param) { GWEN_LIST1_SORT_CTX *ctx; GWEN_NEW_OBJECT(GWEN_LIST1_SORT_CTX, ctx); ctx->list=list; ctx->param=param; return ctx; } void GWEN_List1_SortCtx_free(GWEN_LIST1_SORT_CTX *ctx) { if (ctx) { GWEN_FREE_OBJECT(ctx); } } GWEN_LIST1_SORT_ELEM *GWEN_List1_SortElem_new(GWEN_LIST1_SORT_CTX *ctx, GWEN_LIST1_ELEMENT *elem) { GWEN_LIST1_SORT_ELEM *e; GWEN_NEW_OBJECT(GWEN_LIST1_SORT_ELEM, e); e->context=ctx; e->element=elem; return e; } void GWEN_List1_SortElem_free(GWEN_LIST1_SORT_ELEM *e) { if (e) { GWEN_FREE_OBJECT(e); } } void GWEN_List1_Sort(GWEN_LIST1 *l, int ascending) { GWEN_LIST1_SORT_ELEM **tmpEntries; GWEN_LIST1_SORT_ELEM **psentry; GWEN_LIST1_ELEMENT *sentry; uint32_t count; uint32_t i; GWEN_LIST1_SORT_CTX *sortContext; if (l->count<1) return; count=l->count; sortContext=GWEN_List1_SortCtx_new(l, ascending); /* sort entries into a linear pointer list */ tmpEntries=(GWEN_LIST1_SORT_ELEM **)malloc((count+1)* sizeof(GWEN_LIST1_SORT_ELEM*)); assert(tmpEntries); psentry=tmpEntries; sentry=l->firstElement; while(sentry) { GWEN_LIST1_ELEMENT *next; GWEN_LIST1_SORT_ELEM *se; se=GWEN_List1_SortElem_new(sortContext, sentry); *(psentry++)=se; next=sentry->nextElement; sentry->prevElement=NULL; sentry->nextElement=NULL; sentry->listPtr=l; sentry=next; } /* while */ *psentry=NULL; /* clear list */ l->count=0; l->firstElement=NULL; l->lastElement=NULL; /* sort */ qsort(tmpEntries, count, sizeof(GWEN_LIST1_SORT_ELEM*), GWEN_List1__compar); /* sort entries back into GWEN_LIST1 according to temporary list */ psentry=tmpEntries; /* we use "<=count" because the list contains count+1 elements */ for (i=0; i<=count; i++) { GWEN_LIST1_SORT_ELEM *se; se=*psentry; if (se) { sentry=se->element; sentry->listPtr=NULL; GWEN_List1_Add(l, sentry); GWEN_List1_SortElem_free(se); *psentry=NULL; } psentry++; } /* for */ free(tmpEntries); GWEN_List1_SortCtx_free(sortContext); } gwenhywfar-4.15.2beta/src/base/idlist_p.h0000644000175000017500000000612312416477066015241 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_IDLIST_P_H #define GWENHYWFAR_IDLIST_P_H #include #include #include #define GWEN_IDTABLE_MAXENTRIES 32 typedef struct GWEN_IDTABLE GWEN_IDTABLE; GWEN_LIST_FUNCTION_DEFS(GWEN_IDTABLE, GWEN_IdTable) /* No trailing semicolon here because this is a macro call */ struct GWEN_IDTABLE { GWEN_LIST_ELEMENT(GWEN_IDTABLE) /* No trailing semicolon here because this is a macro call */ uint32_t freeEntries; uint32_t entries[GWEN_IDTABLE_MAXENTRIES]; uint32_t current; }; GWEN_IDTABLE *GWEN_IdTable_new(); void GWEN_IdTable_free(GWEN_IDTABLE *idt); int GWEN_IdTable_AddId(GWEN_IDTABLE *idt, uint32_t id); int GWEN_IdTable_HasId(const GWEN_IDTABLE *idt, uint32_t id); int GWEN_IdTable_DelId(GWEN_IDTABLE *idt, uint32_t id); int GWEN_IdTable_IsEmpty(const GWEN_IDTABLE *idt); int GWEN_IdTable_IsFull(const GWEN_IDTABLE *idt); uint32_t GWEN_IdTable_GetFirstId(GWEN_IDTABLE *idt); uint32_t GWEN_IdTable_GetNextId(GWEN_IDTABLE *idt); unsigned int GWEN_IdTable_GetCount(const GWEN_IDTABLE *idt); uint32_t GWEN_IdTable_GetFirstId2(const GWEN_IDTABLE *idt, uint32_t *tabIdx); uint32_t GWEN_IdTable_GetNextId2(const GWEN_IDTABLE *idt, uint32_t *tabIdx); void GWEN_IdList_Clean(GWEN_IDLIST *idl); struct GWEN_IDLIST { GWEN_IDTABLE_LIST *idTables; uint32_t entryCount; GWEN_IDTABLE *current; }; #endif /* GWENHYWFAR_IDLIST_P_H */ gwenhywfar-4.15.2beta/src/gwenhywfarapi.h0000644000175000017500000001237712416477066015403 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Wed Sep 02 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFARAPI_H #define GWENHYWFARAPI_H #include #ifdef GWENHYWFAR_IS_SUBPROJECT # define GWENHYWFAR_API # define GWENHYWFAR_EXPORT # define GWENHYWFAR_NOEXPORT # define GWEN_UNUSED #else # ifdef BUILDING_GWENHYWFAR /* building Gwenhywfar */ # if GWENHYWFAR_SYS_IS_WINDOWS /* for windows */ # ifdef __declspec # define GWENHYWFAR_API __declspec (dllexport) # else /* if __declspec */ # define GWENHYWFAR_API # endif /* if NOT __declspec */ # else /* for non-win32 */ # ifdef GCC_WITH_VISIBILITY_ATTRIBUTE # define GWENHYWFAR_API __attribute__((visibility("default"))) # else # define GWENHYWFAR_API # endif # endif # else /* not building Gwenhywfar */ # if GWENHYWFAR_SYS_IS_WINDOWS /* for windows */ # ifdef __declspec # define GWENHYWFAR_API __declspec (dllimport) # else /* if __declspec */ # define GWENHYWFAR_API # endif /* if NOT __declspec */ # else /* for non-win32 */ # define GWENHYWFAR_API # endif # endif # ifdef GCC_WITH_VISIBILITY_ATTRIBUTE # define GWENHYWFAR_EXPORT __attribute__((visibility("default"))) # define GWENHYWFAR_NOEXPORT __attribute__((visibility("hidden"))) # else # define GWENHYWFAR_EXPORT # define GWENHYWFAR_NOEXPORT # endif # ifdef __GNUC__ # define GWEN_UNUSED __attribute__((unused)) # else # define GWEN_UNUSED # endif #endif #if GWENHYWFAR_SYS_IS_WINDOWS # define GWENHYWFAR_CB __stdcall #else # define GWENHYWFAR_CB #endif #if GWENHYWFAR_SYS_IS_WINDOWS # define GWEN_DIR_SEPARATOR '\\' # define GWEN_DIR_SEPARATOR_S "\\" # define GWEN_SEARCHPATH_SEPARATOR ';' # define GWEN_SEARCHPATH_SEPARATOR_S ";" #else /** The directory separator character. This is '/' on UNIX machines and '\' under Windows. Since gwenhywfar-2.5.4. */ # define GWEN_DIR_SEPARATOR '/' /** The directory separator as a string. This is "/" on UNIX machines and "\" under Windows. Since gwenhywfar-2.5.4. */ # define GWEN_DIR_SEPARATOR_S "/" /** The search path separator character. This is ':' on UNIX machines and ';' under Windows. Since gwenhywfar-2.5.4. */ # define GWEN_SEARCHPATH_SEPARATOR ':' /** The search path separator as a string. This is ":" on UNIX machines and ";" under Windows. Since gwenhywfar-2.5.4. */ # define GWEN_SEARCHPATH_SEPARATOR_S ":" #endif /* Convenience macros to test the versions of glibc and gcc. Taken from which does not contain this on MinGW systems. */ #ifndef __GNUC_PREREQ # if defined __GNUC__ && defined __GNUC_MINOR__ # define __GNUC_PREREQ(maj, min) \ ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) # else # define __GNUC_PREREQ(maj, min) 0 # endif #endif /* __GNUC_PREREQ */ /* Taken from which does not contain this on MinGW systems. */ #ifndef __STRING # define __STRING(x) #x #endif /* __STRING */ /* This is needed for PalmOS, because it define some functions needed */ #include #include #if __GNUC_PREREQ(3, 0) /* Only available in gcc >= 3.0.x */ # define DEPRECATED __attribute__((deprecated)) # define GWEN_UNUSED __attribute__((unused)) # define GWEN_LIKELY(cond) __builtin_expect(!!(cond), 1) # define GWEN_UNLIKELY(cond) __builtin_expect(!!(cond), 0) #else # define DEPRECATED # define GWEN_UNUSED # define GWEN_LIKELY(cond) (!!(cond)) # define GWEN_UNLIKELY(cond) (!!(cond)) #endif /* __GNUC__ */ #if defined(__GNUC__) && !defined(__MINGW32__) # define GWEN_FORMAT(fmt, pos, argstart) \ __attribute__ ((format (fmt, pos, argstart))) #else # define GWEN_FORMAT(fmt, pos, argstart) #endif #define GWEN_TIMEOUT_NONE (0) #define GWEN_TIMEOUT_FOREVER (-1) #endif gwenhywfar-4.15.2beta/src/binreloc.h0000644000175000017500000000564112416477066014321 00000000000000/* * BinReloc - a library for creating relocatable executables * Written by: Hongli Lai * http://autopackage.org/ * * This source code is public domain. You can relicense this code * under whatever license you want. * * See http://autopackage.org/docs/binreloc/ for * more information and how to use this. */ #ifndef __BINRELOC_H__ #define __BINRELOC_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** These error codes can be returned by br_init(), br_init_lib(), gbr_init() or gbr_init_lib(). */ typedef enum { /** Cannot allocate memory. */ BR_INIT_ERROR_NOMEM, /** Unable to open /proc/self/maps; see errno for details. */ BR_INIT_ERROR_OPEN_MAPS, /** Unable to read from /proc/self/maps; see errno for details. */ BR_INIT_ERROR_READ_MAPS, /** The file format of /proc/self/maps is invalid; kernel bug? */ BR_INIT_ERROR_INVALID_MAPS, /** BinReloc is disabled (the ENABLE_BINRELOC macro is not defined). */ BR_INIT_ERROR_DISABLED } BrInitError; #ifndef BINRELOC_RUNNING_DOXYGEN /* Mangle symbol names to avoid symbol collisions with other ELF objects. */ #define br_init pkND64590836275372_br_init #define br_init_lib pkND64590836275372_br_init_lib #define br_find_exe pkND64590836275372_br_find_exe #define br_find_exe_dir pkND64590836275372_br_find_exe_dir #define br_find_prefix pkND64590836275372_br_find_prefix #define br_find_bin_dir pkND64590836275372_br_find_bin_dir #define br_find_sbin_dir pkND64590836275372_br_find_sbin_dir #define br_find_data_dir pkND64590836275372_br_find_data_dir #define br_find_locale_dir pkND64590836275372_br_find_locale_dir #define br_find_lib_dir pkND64590836275372_br_find_lib_dir #define br_find_libexec_dir pkND64590836275372_br_find_libexec_dir #define br_find_etc_dir pkND64590836275372_br_find_etc_dir #define br_strcat pkND64590836275372_br_strcat #define br_build_path pkND64590836275372_br_build_path #define br_dirname pkND64590836275372_br_dirname #endif int br_init (BrInitError *error); int br_init_lib (BrInitError *error); char *br_find_exe (const char *default_exe); char *br_find_exe_dir (const char *default_dir); char *br_find_prefix (const char *default_prefix); char *br_find_bin_dir (const char *default_bin_dir); char *br_find_sbin_dir (const char *default_sbin_dir); char *br_find_data_dir (const char *default_data_dir); char *br_find_locale_dir (const char *default_locale_dir); char *br_find_lib_dir (const char *default_lib_dir); char *br_find_libexec_dir (const char *default_libexec_dir); char *br_find_etc_dir (const char *default_etc_dir); /* Utility functions */ char *br_strcat (const char *str1, const char *str2); char *br_build_path (const char *dir, const char *file); char *br_dirname (const char *path); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __BINRELOC_H__ */ gwenhywfar-4.15.2beta/src/types.h0000644000175000017500000000370512634022442013651 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sun Jan 04 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_TYPES_H #define GWENHYWFAR_TYPES_H #include #define GWENHYWFAR_SYS_IS_WINDOWS 0 /* Watch out: This include *must* come after the definition of GWENHYWFAR_SYS_IS_WINDOWS or else the dllimport/export attributes will easily be messed up! */ #include #endif gwenhywfar-4.15.2beta/src/sar/0000755000175000017500000000000012643267237013211 500000000000000gwenhywfar-4.15.2beta/src/sar/gwen_sar_fileheader.c0000644000175000017500000002421512416477066017257 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "gwen_sar_fileheader.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwen_sar_fileheader_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(GWEN_SAR_FILEHEADER, GWEN_SarFileHeader) GWEN_LIST2_FUNCTIONS(GWEN_SAR_FILEHEADER, GWEN_SarFileHeader) GWEN_SAR_FILEHEADER_FTYPE GWEN_SarFileHeader_FType_fromString(const char *p_s) { if (p_s && *p_s) { if (strcasecmp(p_s, "none") == 0) return GWEN_SarFileHeader_FType_None; else if (strcasecmp(p_s, "file") == 0) return GWEN_SarFileHeader_FType_File; else if (strcasecmp(p_s, "dir") == 0) return GWEN_SarFileHeader_FType_Dir; else if (strcasecmp(p_s, "symLink") == 0) return GWEN_SarFileHeader_FType_SymLink; } return GWEN_SarFileHeader_FType_Unknown; } GWEN_SAR_FILEHEADER_STATUS GWEN_SarFileHeader_Status_fromString(const char *p_s) { if (p_s && *p_s) { if (strcasecmp(p_s, "active") == 0) return GWEN_SarFileHeader_Status_Active; else if (strcasecmp(p_s, "deleted") == 0) return GWEN_SarFileHeader_Status_Deleted; } return GWEN_SarFileHeader_Status_Unknown; } const char *GWEN_SarFileHeader_FType_toString(GWEN_SAR_FILEHEADER_FTYPE p_i) { switch(p_i) { case GWEN_SarFileHeader_FType_None: return "none"; case GWEN_SarFileHeader_FType_File: return "file"; case GWEN_SarFileHeader_FType_Dir: return "dir"; case GWEN_SarFileHeader_FType_SymLink: return "symLink"; default: return "unknown"; } } const char *GWEN_SarFileHeader_Status_toString(GWEN_SAR_FILEHEADER_STATUS p_i) { switch(p_i) { case GWEN_SarFileHeader_Status_Active: return "active"; case GWEN_SarFileHeader_Status_Deleted: return "deleted"; default: return "unknown"; } } GWEN_SAR_FILEHEADER *GWEN_SarFileHeader_new(void) { GWEN_SAR_FILEHEADER *p_struct; GWEN_NEW_OBJECT(GWEN_SAR_FILEHEADER, p_struct) p_struct->_refCount = 1; GWEN_LIST_INIT(GWEN_SAR_FILEHEADER, p_struct) /* members */ p_struct->status = 0; p_struct->flags = 0; p_struct->path = NULL; p_struct->fileType = 0; p_struct->permissions = 0; p_struct->atime = NULL; p_struct->mtime = NULL; p_struct->ctime = NULL; p_struct->fileSize = 0; p_struct->headerStartPos = 0; p_struct->headerSize = 0; p_struct->dataPos = 0; p_struct->dataSize = 0; p_struct->hashPos = 0; return p_struct; } void GWEN_SarFileHeader_free(GWEN_SAR_FILEHEADER *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount == 1) { GWEN_LIST_FINI(GWEN_SAR_FILEHEADER, p_struct) /* members */ free(p_struct->path); GWEN_Time_free(p_struct->atime); GWEN_Time_free(p_struct->mtime); GWEN_Time_free(p_struct->ctime); p_struct->_refCount = 0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void GWEN_SarFileHeader_Attach(GWEN_SAR_FILEHEADER *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } GWEN_SAR_FILEHEADER *GWEN_SarFileHeader_dup(const GWEN_SAR_FILEHEADER *p_src) { GWEN_SAR_FILEHEADER *p_struct; assert(p_src); p_struct = GWEN_SarFileHeader_new(); /* member "status" */ p_struct->status = p_src->status; /* member "flags" */ p_struct->flags = p_src->flags; /* member "path" */ if (p_struct->path) { free(p_struct->path); p_struct->path = NULL; } if (p_src->path) { p_struct->path = strdup(p_src->path); } /* member "fileType" */ p_struct->fileType = p_src->fileType; /* member "permissions" */ p_struct->permissions = p_src->permissions; /* member "atime" */ if (p_struct->atime) { GWEN_Time_free(p_struct->atime); p_struct->atime = NULL; } if (p_src->atime) { p_struct->atime = GWEN_Time_dup(p_src->atime); } /* member "mtime" */ if (p_struct->mtime) { GWEN_Time_free(p_struct->mtime); p_struct->mtime = NULL; } if (p_src->mtime) { p_struct->mtime = GWEN_Time_dup(p_src->mtime); } /* member "ctime" */ if (p_struct->ctime) { GWEN_Time_free(p_struct->ctime); p_struct->ctime = NULL; } if (p_src->ctime) { p_struct->ctime = GWEN_Time_dup(p_src->ctime); } /* member "fileSize" */ p_struct->fileSize = p_src->fileSize; /* member "headerStartPos" */ p_struct->headerStartPos = p_src->headerStartPos; /* member "headerSize" */ p_struct->headerSize = p_src->headerSize; /* member "dataPos" */ p_struct->dataPos = p_src->dataPos; /* member "dataSize" */ p_struct->dataSize = p_src->dataSize; /* member "hashPos" */ p_struct->hashPos = p_src->hashPos; return p_struct; } int GWEN_SarFileHeader_GetStatus(const GWEN_SAR_FILEHEADER *p_struct) { assert(p_struct); return p_struct->status; } uint32_t GWEN_SarFileHeader_GetFlags(const GWEN_SAR_FILEHEADER *p_struct) { assert(p_struct); return p_struct->flags; } const char *GWEN_SarFileHeader_GetPath(const GWEN_SAR_FILEHEADER *p_struct) { assert(p_struct); return p_struct->path; } int GWEN_SarFileHeader_GetFileType(const GWEN_SAR_FILEHEADER *p_struct) { assert(p_struct); return p_struct->fileType; } uint32_t GWEN_SarFileHeader_GetPermissions(const GWEN_SAR_FILEHEADER *p_struct) { assert(p_struct); return p_struct->permissions; } const GWEN_TIME *GWEN_SarFileHeader_GetAtime(const GWEN_SAR_FILEHEADER *p_struct) { assert(p_struct); return p_struct->atime; } const GWEN_TIME *GWEN_SarFileHeader_GetMtime(const GWEN_SAR_FILEHEADER *p_struct) { assert(p_struct); return p_struct->mtime; } const GWEN_TIME *GWEN_SarFileHeader_GetCtime(const GWEN_SAR_FILEHEADER *p_struct) { assert(p_struct); return p_struct->ctime; } uint64_t GWEN_SarFileHeader_GetFileSize(const GWEN_SAR_FILEHEADER *p_struct) { assert(p_struct); return p_struct->fileSize; } uint64_t GWEN_SarFileHeader_GetHeaderStartPos(const GWEN_SAR_FILEHEADER *p_struct) { assert(p_struct); return p_struct->headerStartPos; } uint64_t GWEN_SarFileHeader_GetHeaderSize(const GWEN_SAR_FILEHEADER *p_struct) { assert(p_struct); return p_struct->headerSize; } uint64_t GWEN_SarFileHeader_GetDataPos(const GWEN_SAR_FILEHEADER *p_struct) { assert(p_struct); return p_struct->dataPos; } uint64_t GWEN_SarFileHeader_GetDataSize(const GWEN_SAR_FILEHEADER *p_struct) { assert(p_struct); return p_struct->dataSize; } uint64_t GWEN_SarFileHeader_GetHashPos(const GWEN_SAR_FILEHEADER *p_struct) { assert(p_struct); return p_struct->hashPos; } void GWEN_SarFileHeader_SetStatus(GWEN_SAR_FILEHEADER *p_struct, int p_src) { assert(p_struct); p_struct->status = p_src; } void GWEN_SarFileHeader_AddStatus(GWEN_SAR_FILEHEADER *p_struct, int p_src) { assert(p_struct); p_struct->status |= p_src; } void GWEN_SarFileHeader_SubStatus(GWEN_SAR_FILEHEADER *p_struct, int p_src) { assert(p_struct); p_struct->status &= ~p_src; } void GWEN_SarFileHeader_SetFlags(GWEN_SAR_FILEHEADER *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags = p_src; } void GWEN_SarFileHeader_AddFlags(GWEN_SAR_FILEHEADER *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags |= p_src; } void GWEN_SarFileHeader_SubFlags(GWEN_SAR_FILEHEADER *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags &= ~p_src; } void GWEN_SarFileHeader_SetPath(GWEN_SAR_FILEHEADER *p_struct, const char *p_src) { assert(p_struct); if (p_struct->path) { free(p_struct->path); } if (p_src) { p_struct->path = strdup(p_src); } else { p_struct->path = NULL; } } void GWEN_SarFileHeader_SetFileType(GWEN_SAR_FILEHEADER *p_struct, int p_src) { assert(p_struct); p_struct->fileType = p_src; } void GWEN_SarFileHeader_SetPermissions(GWEN_SAR_FILEHEADER *p_struct, uint32_t p_src) { assert(p_struct); p_struct->permissions = p_src; } void GWEN_SarFileHeader_AddPermissions(GWEN_SAR_FILEHEADER *p_struct, uint32_t p_src) { assert(p_struct); p_struct->permissions |= p_src; } void GWEN_SarFileHeader_SubPermissions(GWEN_SAR_FILEHEADER *p_struct, uint32_t p_src) { assert(p_struct); p_struct->permissions &= ~p_src; } void GWEN_SarFileHeader_SetAtime(GWEN_SAR_FILEHEADER *p_struct, GWEN_TIME *p_src) { assert(p_struct); if (p_struct->atime) { GWEN_Time_free(p_struct->atime); } p_struct->atime = p_src; } void GWEN_SarFileHeader_SetMtime(GWEN_SAR_FILEHEADER *p_struct, GWEN_TIME *p_src) { assert(p_struct); if (p_struct->mtime) { GWEN_Time_free(p_struct->mtime); } p_struct->mtime = p_src; } void GWEN_SarFileHeader_SetCtime(GWEN_SAR_FILEHEADER *p_struct, GWEN_TIME *p_src) { assert(p_struct); if (p_struct->ctime) { GWEN_Time_free(p_struct->ctime); } p_struct->ctime = p_src; } void GWEN_SarFileHeader_SetFileSize(GWEN_SAR_FILEHEADER *p_struct, uint64_t p_src) { assert(p_struct); p_struct->fileSize = p_src; } void GWEN_SarFileHeader_SetHeaderStartPos(GWEN_SAR_FILEHEADER *p_struct, uint64_t p_src) { assert(p_struct); p_struct->headerStartPos = p_src; } void GWEN_SarFileHeader_SetHeaderSize(GWEN_SAR_FILEHEADER *p_struct, uint64_t p_src) { assert(p_struct); p_struct->headerSize = p_src; } void GWEN_SarFileHeader_SetDataPos(GWEN_SAR_FILEHEADER *p_struct, uint64_t p_src) { assert(p_struct); p_struct->dataPos = p_src; } void GWEN_SarFileHeader_SetDataSize(GWEN_SAR_FILEHEADER *p_struct, uint64_t p_src) { assert(p_struct); p_struct->dataSize = p_src; } void GWEN_SarFileHeader_SetHashPos(GWEN_SAR_FILEHEADER *p_struct, uint64_t p_src) { assert(p_struct); p_struct->hashPos = p_src; } GWEN_SAR_FILEHEADER_LIST *GWEN_SarFileHeader_List_dup(const GWEN_SAR_FILEHEADER_LIST *p_src) { GWEN_SAR_FILEHEADER_LIST *p_dest; GWEN_SAR_FILEHEADER *p_elem; assert(p_src); p_dest = GWEN_SarFileHeader_List_new(); p_elem = GWEN_SarFileHeader_List_First(p_src); while(p_elem) { GWEN_SAR_FILEHEADER *p_cpy; p_cpy = GWEN_SarFileHeader_dup(p_elem); GWEN_SarFileHeader_List_Add(p_cpy, p_dest); p_elem = GWEN_SarFileHeader_List_Next(p_elem); } return p_dest; } /* code headers */ gwenhywfar-4.15.2beta/src/sar/sar.c0000644000175000017500000017770012530645242014065 00000000000000/*************************************************************************** begin : Wed Jun 22 2011 copyright : (C) 2011 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "sar_p.h" #include "gwen_sar_fileheader_l.h" #include "i18n_l.h" #include #include #include #include #include #include #include #include #include #include #include GWEN_SAR *GWEN_Sar_new(void) { GWEN_SAR *sr; GWEN_NEW_OBJECT(GWEN_SAR, sr); sr->refCount=1; sr->headers=GWEN_SarFileHeader_List_new(); return sr; } void GWEN_Sar_Attach(GWEN_SAR *sr) { assert(sr); assert(sr->refCount); sr->refCount++; } void GWEN_Sar_free(GWEN_SAR *sr) { if (sr) { assert(sr->refCount); if (sr->refCount==1) { free(sr->archiveName); GWEN_SarFileHeader_List_free(sr->headers); GWEN_SyncIo_free(sr->archiveSio); sr->refCount=0; GWEN_FREE_OBJECT(sr); } else { sr->refCount--; } } } int GWEN_Sar_CreateArchive(GWEN_SAR *sr, const char *aname) { GWEN_SYNCIO *sio; int rv; assert(sr); assert(sr->refCount); assert(aname); if (sr->openMode!=GWEN_Sar_OpenMode_Closed) { DBG_ERROR(GWEN_LOGDOMAIN, "Archive already open"); return GWEN_ERROR_OPEN; } free(sr->archiveName); sr->archiveName=strdup(aname); sio=GWEN_SyncIo_File_new(aname, GWEN_SyncIo_File_CreationMode_CreateAlways); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE | GWEN_SYNCIO_FILE_FLAGS_UREAD | GWEN_SYNCIO_FILE_FLAGS_UWRITE | GWEN_SYNCIO_FILE_FLAGS_GREAD | GWEN_SYNCIO_FILE_FLAGS_GWRITE); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); return rv; } sr->archiveSio=sio; sr->openMode=GWEN_Sar_OpenMode_Created; sr->signaturePos=0; sr->signatureSize=0; return 0; } int GWEN_Sar_OpenArchive(GWEN_SAR *sr, const char *aname, GWEN_SYNCIO_FILE_CREATIONMODE cm, uint32_t acc) { GWEN_SYNCIO *sio; int rv; assert(sr); assert(sr->refCount); assert(aname); if (sr->openMode!=GWEN_Sar_OpenMode_Closed) { DBG_ERROR(GWEN_LOGDOMAIN, "Archive already open"); return GWEN_ERROR_OPEN; } free(sr->archiveName); sr->archiveName=strdup(aname); sio=GWEN_SyncIo_File_new(aname, cm); GWEN_SyncIo_AddFlags(sio, acc); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); return rv; } sr->archiveSio=sio; sr->openMode=GWEN_Sar_OpenMode_Opened; sr->signaturePos=0; sr->signatureSize=0; rv=GWEN_Sar_ScanFile(sr); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); sr->archiveSio=NULL; sr->openMode=GWEN_Sar_OpenMode_Closed; GWEN_SyncIo_free(sio); return rv; } return 0; } int GWEN_Sar_CloseArchive(GWEN_SAR *sr, int abandon) { int rv; assert(sr); assert(sr->refCount); if (sr->openMode!=GWEN_Sar_OpenMode_Opened && sr->openMode!=GWEN_Sar_OpenMode_Created) { DBG_ERROR(GWEN_LOGDOMAIN, "Archive not open"); return GWEN_ERROR_NOT_OPEN; } if (!abandon) { /* flush */ rv=GWEN_SyncIo_Flush(sr->archiveSio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_Disconnect(sr->archiveSio); GWEN_SyncIo_free(sr->archiveSio); sr->archiveSio=NULL; free(sr->archiveName); sr->archiveName=NULL; sr->openMode=GWEN_Sar_OpenMode_Closed; return rv; } } /* disconnect */ rv=GWEN_SyncIo_Disconnect(sr->archiveSio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sr->archiveSio); sr->archiveSio=NULL; free(sr->archiveName); sr->archiveName=NULL; sr->openMode=GWEN_Sar_OpenMode_Closed; return rv; } GWEN_SyncIo_free(sr->archiveSio); sr->archiveSio=NULL; free(sr->archiveName); sr->archiveName=NULL; sr->openMode=GWEN_Sar_OpenMode_Closed; return 0; } int GWEN_Sar_FileHeaderToTlv(const GWEN_SAR_FILEHEADER *fh, GWEN_BUFFER *tbuf) { const char *s; uint16_t v8; uint32_t v32; uint64_t v64; uint8_t hbuf[8]; const GWEN_TIME *ti; int rv; /* header version */ v32=GWEN_SAR_HEADER_VERSION; hbuf[0]=(v32>>24) & 0xff; hbuf[1]=(v32>>16) & 0xff; hbuf[2]=(v32>>8) & 0xff; hbuf[3]=v32 & 0xff; GWEN_TLV_DirectlyToBuffer(GWEN_SAR_TAG_HEADER_VERSION, 0x00, hbuf, 4, 1, tbuf); /* status */ v8=GWEN_SarFileHeader_GetStatus(fh) & 0xff; hbuf[0]=v8; GWEN_TLV_DirectlyToBuffer(GWEN_SAR_TAG_HEADER_STATUS, 0x00, hbuf, 1, 1, tbuf); /* flags */ v32=GWEN_SarFileHeader_GetFlags(fh); hbuf[0]=(v32>>24) & 0xff; hbuf[1]=(v32>>16) & 0xff; hbuf[2]=(v32>>8) & 0xff; hbuf[3]=v32 & 0xff; GWEN_TLV_DirectlyToBuffer(GWEN_SAR_TAG_HEADER_FLAGS, 0x00, hbuf, 4, 1, tbuf); /* path */ s=GWEN_SarFileHeader_GetPath(fh); if (s && *s) GWEN_TLV_DirectlyToBuffer(GWEN_SAR_TAG_HEADER_PATH, 0x00, s, strlen(s)+1, 1, tbuf); /* file type */ v8=GWEN_SarFileHeader_GetFileType(fh) & 0xff; hbuf[0]=v8; GWEN_TLV_DirectlyToBuffer(GWEN_SAR_TAG_HEADER_TYPE, 0x00, hbuf, 1, 1, tbuf); /* permissions */ v32=GWEN_SarFileHeader_GetPermissions(fh); hbuf[0]=(v32>>24) & 0xff; hbuf[1]=(v32>>16) & 0xff; hbuf[2]=(v32>>8) & 0xff; hbuf[3]=v32 & 0xff; GWEN_TLV_DirectlyToBuffer(GWEN_SAR_TAG_HEADER_PERM, 0x00, hbuf, 4, 1, tbuf); /* atime */ ti=GWEN_SarFileHeader_GetAtime(fh); if (ti) { GWEN_BUFFER *xbuf; xbuf=GWEN_Buffer_new(0, 32, 0, 1); rv=GWEN_Time_toUtcString(ti, "YYYYMMDDhhmmss", xbuf); if (rv>=0) GWEN_TLV_DirectlyToBuffer(GWEN_SAR_TAG_HEADER_ATIME, 0x00, GWEN_Buffer_GetStart(xbuf), GWEN_Buffer_GetUsedBytes(xbuf), 1, tbuf); GWEN_Buffer_free(xbuf); } /* mtime */ ti=GWEN_SarFileHeader_GetMtime(fh); if (ti) { GWEN_BUFFER *xbuf; xbuf=GWEN_Buffer_new(0, 32, 0, 1); rv=GWEN_Time_toUtcString(ti, "YYYYMMDDhhmmss", xbuf); if (rv>=0) GWEN_TLV_DirectlyToBuffer(GWEN_SAR_TAG_HEADER_MTIME, 0x00, GWEN_Buffer_GetStart(xbuf), GWEN_Buffer_GetUsedBytes(xbuf), 1, tbuf); GWEN_Buffer_free(xbuf); } /* ctime */ ti=GWEN_SarFileHeader_GetCtime(fh); if (ti) { GWEN_BUFFER *xbuf; xbuf=GWEN_Buffer_new(0, 32, 0, 1); rv=GWEN_Time_toUtcString(ti, "YYYYMMDDhhmmss", xbuf); if (rv>=0) GWEN_TLV_DirectlyToBuffer(GWEN_SAR_TAG_HEADER_CTIME, 0x00, GWEN_Buffer_GetStart(xbuf), GWEN_Buffer_GetUsedBytes(xbuf), 1, tbuf); GWEN_Buffer_free(xbuf); } /* file size */ v64=GWEN_SarFileHeader_GetFileSize(fh); hbuf[0]=(v64>>56) & 0xff; hbuf[1]=(v64>>48) & 0xff; hbuf[2]=(v64>>40) & 0xff; hbuf[3]=(v64>>32) & 0xff; hbuf[4]=(v64>>24) & 0xff; hbuf[5]=(v64>>16) & 0xff; hbuf[6]=(v64>>8) & 0xff; hbuf[7]=v64 & 0xff; GWEN_TLV_DirectlyToBuffer(GWEN_SAR_TAG_HEADER_SIZE, 0x00, hbuf, 8, 1, tbuf); return 0; } uint64_t GWEN_Sar_ReadUint64(const uint8_t *p, uint32_t bs) { uint64_t v=0; switch(bs) { case 8: v=(((uint64_t)(p[0]))<<56)+ (((uint64_t)(p[1]))<<48)+ (((uint64_t)(p[2]))<<40)+ (((uint64_t)(p[3]))<<32)+ (((uint64_t)(p[4]))<<24)+ (((uint64_t)(p[5]))<<16)+ (((uint64_t)(p[6]))<<8)+ ((uint64_t)(p[7])); break; case 7: v=(((uint64_t)(p[0]))<<48)+ (((uint64_t)(p[1]))<<40)+ (((uint64_t)(p[2]))<<32)+ (((uint64_t)(p[3]))<<24)+ (((uint64_t)(p[4]))<<16)+ (((uint64_t)(p[5]))<<8)+ ((uint64_t)(p[6])); break; case 6: v=(((uint64_t)(p[0]))<<40)+ (((uint64_t)(p[1]))<<32)+ (((uint64_t)(p[2]))<<24)+ (((uint64_t)(p[3]))<<16)+ (((uint64_t)(p[4]))<<8)+ ((uint64_t)(p[5])); break; case 5: v=(((uint64_t)(p[0]))<<32)+ (((uint64_t)(p[1]))<<24)+ (((uint64_t)(p[2]))<<16)+ (((uint64_t)(p[3]))<<8)+ ((uint64_t)(p[4])); break; case 4: v=(((uint64_t)(p[0]))<<24)+ (((uint64_t)(p[1]))<<16)+ (((uint64_t)(p[2]))<<8)+ ((uint64_t)(p[3])); break; case 3: v=(((uint64_t)(p[0]))<<16)+ (((uint64_t)(p[1]))<<8)+ ((uint64_t)(p[2])); break; case 2: v=(((uint64_t)(p[0]))<<8)+ ((uint64_t)(p[1])); break; case 1: v=((uint64_t)(p[0])); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Unsupported size of %d for uint32", bs); break; } return v; } int GWEN_Sar_TlvToFileHeader(GWEN_BUFFER *mbuf, GWEN_SAR_FILEHEADER *fh) { while(GWEN_Buffer_GetBytesLeft(mbuf)) { GWEN_TLV *tlv; tlv=GWEN_TLV_fromBuffer(mbuf, 1); if (tlv) { const uint8_t *p; uint32_t bs; uint64_t v; GWEN_TIME *ti; p=GWEN_TLV_GetTagData(tlv); bs=GWEN_TLV_GetTagLength(tlv); switch(GWEN_TLV_GetTagType(tlv)) { case GWEN_SAR_TAG_HEADER_VERSION: v=GWEN_Sar_ReadUint64(p, bs); DBG_DEBUG(GWEN_LOGDOMAIN, "File Header Version: %08x", (unsigned int) (v & 0xffffffff)); break; case GWEN_SAR_TAG_HEADER_STATUS: v=GWEN_Sar_ReadUint64(p, bs); GWEN_SarFileHeader_SetStatus(fh, v & 0xffffffff); break; case GWEN_SAR_TAG_HEADER_FLAGS: v=GWEN_Sar_ReadUint64(p, bs); GWEN_SarFileHeader_SetFlags(fh, v & 0xffffffff); break; case GWEN_SAR_TAG_HEADER_PATH: GWEN_SarFileHeader_SetPath(fh, (const char*)p); break; case GWEN_SAR_TAG_HEADER_TYPE: v=GWEN_Sar_ReadUint64(p, bs); GWEN_SarFileHeader_SetFileType(fh, v & 0xffffffff); break; case GWEN_SAR_TAG_HEADER_PERM: v=GWEN_Sar_ReadUint64(p, bs); GWEN_SarFileHeader_SetPermissions(fh, v & 0xffffffff); break; case GWEN_SAR_TAG_HEADER_ATIME: ti=GWEN_Time_fromUtcString((const char*) p, "YYYYMMDDhhmmss"); GWEN_SarFileHeader_SetAtime(fh, ti); break; case GWEN_SAR_TAG_HEADER_MTIME: ti=GWEN_Time_fromUtcString((const char*) p, "YYYYMMDDhhmmss"); GWEN_SarFileHeader_SetMtime(fh, ti); break; case GWEN_SAR_TAG_HEADER_CTIME: ti=GWEN_Time_fromUtcString((const char*) p, "YYYYMMDDhhmmss"); GWEN_SarFileHeader_SetCtime(fh, ti); break; case GWEN_SAR_TAG_HEADER_SIZE: v=GWEN_Sar_ReadUint64(p, bs); GWEN_SarFileHeader_SetFileSize(fh, v); break; default: DBG_WARN(GWEN_LOGDOMAIN, "Ignoring unknown tag %d", GWEN_TLV_GetTagType(tlv)); break; } } else { DBG_ERROR(GWEN_LOGDOMAIN, "No TLV in buffer"); return GWEN_ERROR_BAD_DATA; } } return 0; } int GWEN_Sar_AddAndDigestFileReg(GWEN_SAR *sr, const GWEN_SAR_FILEHEADER *fh, GWEN_MDIGEST *md) { int rv; const char *fname; uint64_t fsize; uint64_t bytesDone; GWEN_BUFFER *hbuf; assert(sr); assert(sr->refCount); fname=GWEN_SarFileHeader_GetPath(fh); assert(fname); fsize=GWEN_SarFileHeader_GetFileSize(fh); /* create TLV header */ hbuf=GWEN_Buffer_new(0, 32, 0, 1); rv=GWEN_TLV_WriteHeader(GWEN_SAR_TAG_FILE, 0x00, fsize, 1, hbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(hbuf); return rv; } /* write TLV header */ rv=GWEN_SyncIo_WriteForced(sr->archiveSio, (const uint8_t*) GWEN_Buffer_GetStart(hbuf), GWEN_Buffer_GetUsedBytes(hbuf)); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(hbuf); return rv; } GWEN_Buffer_free(hbuf); /* copy file if fsize>0 */ if (fsize>0) { GWEN_SYNCIO *sio; uint32_t pid; /* open input file */ sio=GWEN_SyncIo_File_new(fname, GWEN_SyncIo_File_CreationMode_OpenExisting); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); return rv; } pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_SHOW_ABORT | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS, I18N("File Operation"), I18N("Copying file into archive"), fsize, 0); bytesDone=0; while(fsize) { uint8_t fbuf[10240]; uint64_t bs; bs=fsize; if (bs>sizeof(fbuf)) bs=sizeof(fbuf); /* read from input */ rv=GWEN_SyncIo_Read(sio, fbuf, bs); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ProgressEnd(pid); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } bs=rv; /* digest data */ rv=GWEN_MDigest_Update(md, fbuf, bs); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ProgressEnd(pid); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } /* write to archive */ rv=GWEN_SyncIo_WriteForced(sr->archiveSio, fbuf, bs); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ProgressEnd(pid); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } if (bs>fsize) { DBG_ERROR(GWEN_LOGDOMAIN, "Internal error: bs>fsize (%lu>%lu)", (unsigned long int)bs, (unsigned long int) fsize); GWEN_Gui_ProgressEnd(pid); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } bytesDone+=bs; fsize-=bs; /* advance progress bar */ rv=GWEN_Gui_ProgressAdvance(pid, bytesDone); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ProgressEnd(pid); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } } /* while */ GWEN_Gui_ProgressEnd(pid); /* close input file */ GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); } return 0; } int GWEN_Sar_AddAndDigestFileLink(GWEN_SAR *sr, const GWEN_SAR_FILEHEADER *fh, GWEN_MDIGEST *md) { #if ((_BSD_SOURCE || _XOPEN_SOURCE >= 500 || (_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED) || _POSIX_C_SOURCE >= 200112L) && !defined(__MINGW32__)) || defined(OS_DARWIN) int rv; const char *fname; GWEN_BUFFER *hbuf; char lbuf[300]; int len; assert(sr); assert(sr->refCount); fname=GWEN_SarFileHeader_GetPath(fh); assert(fname); /* read link content */ rv=readlink(fname, lbuf, sizeof(lbuf)-1); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "readlink(%s): %d (%s)", fname, errno, strerror(errno)); return GWEN_ERROR_IO; } len=rv; lbuf[len]=0; /* create TLV header */ hbuf=GWEN_Buffer_new(0, rv+8, 0, 1); GWEN_TLV_DirectlyToBuffer(GWEN_SAR_TAG_FILE, 0x00, lbuf, len+1, 1, hbuf); /* write TLV */ rv=GWEN_SyncIo_WriteForced(sr->archiveSio, (const uint8_t*) GWEN_Buffer_GetStart(hbuf), GWEN_Buffer_GetUsedBytes(hbuf)); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(hbuf); return rv; } GWEN_Buffer_free(hbuf); /* digest data */ rv=GWEN_MDigest_Update(md, (const uint8_t*) lbuf, len+1); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; #else # warning "Function readlink() is not available" DBG_ERROR(GWEN_LOGDOMAIN, "Function readlink() is not available"); return GWEN_ERROR_IO; #endif } int GWEN_Sar_AddAndDigestFile(GWEN_SAR *sr, const GWEN_SAR_FILEHEADER *fh, GWEN_MDIGEST *md) { int rv; switch(GWEN_SarFileHeader_GetFileType(fh)) { case GWEN_SarFileHeader_FType_File: rv=GWEN_Sar_AddAndDigestFileReg(sr, fh, md); break; case GWEN_SarFileHeader_FType_Dir: rv=0; break; case GWEN_SarFileHeader_FType_SymLink: rv=GWEN_Sar_AddAndDigestFileLink(sr, fh, md); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "File type %d not supported", GWEN_SarFileHeader_GetFileType(fh)); return GWEN_ERROR_INVALID; } if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int GWEN_Sar_AddFile(GWEN_SAR *sr, const char *fname) { struct stat st; int rv; GWEN_SAR_FILEHEADER *fh; GWEN_TIME *ti; GWEN_BUFFER *hbuf; GWEN_BUFFER *xbuf; GWEN_MDIGEST *md; int64_t pos; assert(sr); assert(sr->refCount); /* stat file to be added */ #if _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED rv=lstat(fname, &st); #else rv=stat(fname, &st); #endif if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "stat(%s): %d (%s)", fname, errno, strerror(errno)); return GWEN_ERROR_IO; } /* create and setup file header */ fh=GWEN_SarFileHeader_new(); /* path */ GWEN_SarFileHeader_SetPath(fh, fname); /* file type */ switch(st.st_mode & S_IFMT) { #ifdef S_IFLNK case S_IFLNK: GWEN_SarFileHeader_SetFileType(fh, GWEN_SarFileHeader_FType_SymLink); break; #endif case S_IFREG: GWEN_SarFileHeader_SetFileType(fh, GWEN_SarFileHeader_FType_File); break; case S_IFDIR: GWEN_SarFileHeader_SetFileType(fh, GWEN_SarFileHeader_FType_Dir); break; default: GWEN_SarFileHeader_free(fh); return GWEN_ERROR_INVALID; } /* permissions */ if (st.st_mode & S_IRUSR) GWEN_SarFileHeader_AddPermissions(fh, GWEN_SYNCIO_FILE_FLAGS_UREAD); if (st.st_mode & S_IWUSR) GWEN_SarFileHeader_AddPermissions(fh, GWEN_SYNCIO_FILE_FLAGS_UWRITE); if (st.st_mode & S_IXUSR) GWEN_SarFileHeader_AddPermissions(fh, GWEN_SYNCIO_FILE_FLAGS_UEXEC); #ifdef S_IRGRP if (st.st_mode & S_IRGRP) GWEN_SarFileHeader_AddPermissions(fh, GWEN_SYNCIO_FILE_FLAGS_GREAD); #endif #ifdef S_IWGRP if (st.st_mode & S_IWGRP) GWEN_SarFileHeader_AddPermissions(fh, GWEN_SYNCIO_FILE_FLAGS_GWRITE); #endif #ifdef S_IXGRP if (st.st_mode & S_IXGRP) GWEN_SarFileHeader_AddPermissions(fh, GWEN_SYNCIO_FILE_FLAGS_GEXEC); #endif #ifdef S_IROTH if (st.st_mode & S_IROTH) GWEN_SarFileHeader_AddPermissions(fh, GWEN_SYNCIO_FILE_FLAGS_OREAD); #endif #ifdef S_IWOTH if (st.st_mode & S_IWOTH) GWEN_SarFileHeader_AddPermissions(fh, GWEN_SYNCIO_FILE_FLAGS_OWRITE); #endif #ifdef S_IXOTH if (st.st_mode & S_IXOTH) GWEN_SarFileHeader_AddPermissions(fh, GWEN_SYNCIO_FILE_FLAGS_OEXEC); #endif /* atime */ ti=GWEN_Time_fromSeconds(st.st_atime); GWEN_SarFileHeader_SetAtime(fh, ti); /* mtime */ ti=GWEN_Time_fromSeconds(st.st_mtime); GWEN_SarFileHeader_SetMtime(fh, ti); /* ctime */ ti=GWEN_Time_fromSeconds(st.st_ctime); GWEN_SarFileHeader_SetCtime(fh, ti); /* file size */ GWEN_SarFileHeader_SetFileSize(fh, st.st_size); /* prepare header */ hbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_ReserveBytes(hbuf, 16); rv=GWEN_Sar_FileHeaderToTlv(fh, hbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(hbuf); GWEN_SarFileHeader_free(fh); return rv; } /* create TLV header for file header */ xbuf=GWEN_Buffer_new(0, 16, 0, 1); rv=GWEN_TLV_WriteHeader(GWEN_SAR_TAG_HEADER, 0xe0, GWEN_Buffer_GetUsedBytes(hbuf), 1, xbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(xbuf); GWEN_Buffer_free(hbuf); GWEN_SarFileHeader_free(fh); return rv; } /* insert TLV header into file header buffer */ GWEN_Buffer_SetPos(hbuf, 0); GWEN_Buffer_InsertBytes(hbuf, GWEN_Buffer_GetStart(xbuf), GWEN_Buffer_GetUsedBytes(xbuf)); GWEN_Buffer_SetPos(hbuf, GWEN_Buffer_GetUsedBytes(hbuf)); GWEN_Buffer_free(xbuf); /* seek to end of file */ pos=GWEN_SyncIo_File_Seek(sr->archiveSio, 0, GWEN_SyncIo_File_Whence_End); if (pos<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", (int) pos); GWEN_Buffer_free(hbuf); GWEN_SarFileHeader_free(fh); return (int) pos; } /* write header into archive file */ rv=GWEN_SyncIo_WriteForced(sr->archiveSio, (const uint8_t*) GWEN_Buffer_GetStart(hbuf), GWEN_Buffer_GetUsedBytes(hbuf)); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(hbuf); GWEN_SarFileHeader_free(fh); return rv; } /* prepare digest */ md=GWEN_MDigest_Rmd160_new(); rv=GWEN_MDigest_Begin(md); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(hbuf); GWEN_SarFileHeader_free(fh); return rv; } /* digest header */ rv=GWEN_MDigest_Update(md, (const uint8_t*) GWEN_Buffer_GetStart(hbuf), GWEN_Buffer_GetUsedBytes(hbuf)); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(hbuf); GWEN_SarFileHeader_free(fh); return rv; } GWEN_Buffer_Reset(hbuf); /* copy file into archive */ rv=GWEN_Sar_AddAndDigestFile(sr, fh, md); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(hbuf); GWEN_SarFileHeader_free(fh); return rv; } /* finish hash */ rv=GWEN_MDigest_End(md); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(hbuf); GWEN_SarFileHeader_free(fh); return rv; } /* create hash TLV */ GWEN_TLV_DirectlyToBuffer(GWEN_SAR_TAG_HASH, 0x00, GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md), 1, hbuf); GWEN_MDigest_free(md); /* write hash into archive file */ rv=GWEN_SyncIo_WriteForced(sr->archiveSio, (const uint8_t*) GWEN_Buffer_GetStart(hbuf), GWEN_Buffer_GetUsedBytes(hbuf)); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(hbuf); GWEN_SarFileHeader_free(fh); return rv; } /* done */ GWEN_Buffer_free(hbuf); GWEN_SarFileHeader_free(fh); return 0; } int GWEN_Sar_ScanFile(GWEN_SAR *sr) { int rv; int64_t pos; GWEN_BUFFER *mbuf; GWEN_SAR_FILEHEADER *lastHeader=NULL; assert(sr); assert(sr->refCount); sr->signaturePos=0; sr->signatureSize=0; /* scan all TLV elements */ pos=0; mbuf=GWEN_Buffer_new(0, 1024, 0, 1); for (;;) { int64_t startOfTagHeader; int64_t startOfTagData; unsigned int tagType; uint32_t tagLength; uint32_t fullTagSize; uint32_t bs; GWEN_TLV *tlv; uint8_t buffer[32]; startOfTagHeader=pos; rv=GWEN_SyncIo_Read(sr->archiveSio, buffer, sizeof(buffer)); if (rv<0) { if (rv==GWEN_ERROR_EOF) break; DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(mbuf); return rv; } else if (rv==0) { DBG_VERBOUS(GWEN_LOGDOMAIN, "EOF met"); break; } bs=rv; /* read start of fileheader TLV */ tlv=GWEN_TLV_new(); rv=GWEN_TLV_ReadHeader(tlv, buffer, bs, 1); if (rv<2) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_TLV_free(tlv); GWEN_Buffer_free(mbuf); return rv; } /* got it, now calculate start of tag data */ startOfTagData=pos+rv; tagLength=GWEN_TLV_GetTagLength(tlv); tagType=GWEN_TLV_GetTagType(tlv); fullTagSize=GWEN_TLV_GetTagSize(tlv); GWEN_TLV_free(tlv); /* seek to start of header data */ pos=GWEN_SyncIo_File_Seek(sr->archiveSio, startOfTagData, GWEN_SyncIo_File_Whence_Set); if (pos<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", (int) pos); GWEN_Buffer_free(mbuf); return (int) pos; } /* now read or skip info */ if (tagType==GWEN_SAR_TAG_HEADER) { GWEN_SAR_FILEHEADER *fh; const char *s; /* alloc memory for data */ GWEN_Buffer_AllocRoom(mbuf, tagLength); /* read header data */ rv=GWEN_SyncIo_ReadForced(sr->archiveSio, (uint8_t*) GWEN_Buffer_GetStart(mbuf), tagLength); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(mbuf); return rv; } GWEN_Buffer_IncrementPos(mbuf, tagLength); GWEN_Buffer_AdjustUsedBytes(mbuf); GWEN_Buffer_Rewind(mbuf); /* now parse header */ fh=GWEN_SarFileHeader_new(); rv=GWEN_Sar_TlvToFileHeader(mbuf, fh); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SarFileHeader_free(fh); GWEN_Buffer_free(mbuf); return rv; } GWEN_SarFileHeader_SetHeaderStartPos(fh, startOfTagHeader); GWEN_SarFileHeader_SetHeaderSize(fh, fullTagSize); s=GWEN_SarFileHeader_GetPath(fh); DBG_DEBUG(GWEN_LOGDOMAIN, "Got entry [%s]", s?s:"(empty)"); GWEN_SarFileHeader_List_Add(fh, sr->headers); lastHeader=fh; } else if (tagType==GWEN_SAR_TAG_FILE) { if (lastHeader==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad file structure: No file header before data"); GWEN_Buffer_free(mbuf); return GWEN_ERROR_BAD_DATA; } if (GWEN_SarFileHeader_GetFileType(lastHeader)!=GWEN_SarFileHeader_FType_SymLink && GWEN_SarFileHeader_GetFileSize(lastHeader)!=tagLength) { DBG_ERROR(GWEN_LOGDOMAIN, "File size in header and in archive differ (%s: hs=%lu, ts=%lu)", GWEN_SarFileHeader_GetPath(lastHeader), (unsigned long int) GWEN_SarFileHeader_GetFileSize(lastHeader), (unsigned long int) tagLength); GWEN_Buffer_free(mbuf); return GWEN_ERROR_BAD_DATA; } /* only store position of file data */ GWEN_SarFileHeader_SetDataPos(lastHeader, startOfTagData); GWEN_SarFileHeader_SetDataSize(lastHeader, tagLength); /* skip data */ pos=GWEN_SyncIo_File_Seek(sr->archiveSio, tagLength, GWEN_SyncIo_File_Whence_Current); if (pos<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", (int) pos); GWEN_Buffer_free(mbuf); return (int) pos; } } else if (tagType==GWEN_SAR_TAG_HASH) { if (lastHeader==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad file structure: No file header before data"); GWEN_Buffer_free(mbuf); return GWEN_ERROR_BAD_DATA; } /* only store position of file data */ GWEN_SarFileHeader_SetHashPos(lastHeader, startOfTagData); /* skip data */ pos=GWEN_SyncIo_File_Seek(sr->archiveSio, tagLength, GWEN_SyncIo_File_Whence_Current); if (pos<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", (int) pos); GWEN_Buffer_free(mbuf); return (int) pos; } } else if (tagType==GWEN_SAR_TAG_SIGNATURE) { /* only store position of file data */ DBG_INFO(GWEN_LOGDOMAIN, "Signature found"); sr->signaturePos=startOfTagData; sr->signatureSize=tagLength; /* skip data */ pos=GWEN_SyncIo_File_Seek(sr->archiveSio, tagLength, GWEN_SyncIo_File_Whence_Current); if (pos<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", (int) pos); GWEN_Buffer_free(mbuf); return (int) pos; } } else { DBG_WARN(GWEN_LOGDOMAIN, "Unknown TAG %d, ignoring", (int) tagType); /* just skip data */ pos=GWEN_SyncIo_File_Seek(sr->archiveSio, tagLength, GWEN_SyncIo_File_Whence_Current); if (pos<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", (int) pos); GWEN_Buffer_free(mbuf); return (int) pos; } } GWEN_Buffer_Reset(mbuf); pos=startOfTagData+tagLength; } /* for */ /* done */ GWEN_Buffer_free(mbuf); return 0; } int GWEN_Sar_ExtractAndDigestFileReg(GWEN_SAR *sr, const GWEN_SAR_FILEHEADER *fh, int checkOnly) { int rv; const char *fname; uint32_t perms; uint64_t dpos; uint64_t fsize; uint64_t bytesDone; uint64_t hsize; uint64_t hpos; uint64_t mpos; int64_t pos; GWEN_MDIGEST *md; assert(sr); assert(sr->refCount); md=GWEN_MDigest_Rmd160_new(); rv=GWEN_MDigest_Begin(md); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); return rv; } fname=GWEN_SarFileHeader_GetPath(fh); assert(fname); perms=GWEN_SarFileHeader_GetPermissions(fh); fsize=GWEN_SarFileHeader_GetFileSize(fh); dpos=GWEN_SarFileHeader_GetDataPos(fh); hpos=GWEN_SarFileHeader_GetHeaderStartPos(fh); hsize=GWEN_SarFileHeader_GetHeaderSize(fh); if (hsize>0) { GWEN_BUFFER *mbuf; /* seek to start of header */ pos=GWEN_SyncIo_File_Seek(sr->archiveSio, hpos, GWEN_SyncIo_File_Whence_Set); if (pos<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", (int) pos); GWEN_MDigest_free(md); return (int) pos; } mbuf=GWEN_Buffer_new(0, hsize, 0, 1); rv=GWEN_SyncIo_ReadForced(sr->archiveSio, (uint8_t*) GWEN_Buffer_GetStart(mbuf), hsize); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(mbuf); GWEN_MDigest_free(md); return rv; } GWEN_Buffer_IncrementPos(mbuf, hsize); GWEN_Buffer_AdjustUsedBytes(mbuf); /* digest TLV */ rv=GWEN_MDigest_Update(md, (const uint8_t*) GWEN_Buffer_GetStart(mbuf), GWEN_Buffer_GetUsedBytes(mbuf)); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(mbuf); GWEN_MDigest_free(md); return rv; } GWEN_Buffer_free(mbuf); } /* copy file if fsize>0 */ if (1) { GWEN_SYNCIO *sio=NULL; uint32_t pid; /* open input file */ if (!checkOnly) { sio=GWEN_SyncIo_File_new(fname, GWEN_SyncIo_File_CreationMode_CreateNew); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE); GWEN_SyncIo_AddFlags(sio, perms); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); GWEN_MDigest_free(md); return rv; } } if (fsize>0) { /* seek to start of data */ pos=GWEN_SyncIo_File_Seek(sr->archiveSio, dpos, GWEN_SyncIo_File_Whence_Set); if (pos<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", (int) pos); if (!checkOnly) { GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); } GWEN_MDigest_free(md); return (int) pos; } /* start extracting */ pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_SHOW_ABORT | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS, I18N("File Operation"), I18N("Extracting file from archive"), fsize, 0); bytesDone=0; while(fsize) { uint8_t fbuf[10240]; uint64_t bs; bs=fsize; if (bs>sizeof(fbuf)) bs=sizeof(fbuf); /* read from input */ rv=GWEN_SyncIo_Read(sr->archiveSio, fbuf, bs); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ProgressEnd(pid); if (!checkOnly) { GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); } GWEN_MDigest_free(md); return rv; } bs=rv; /* digest data */ rv=GWEN_MDigest_Update(md, fbuf, bs); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ProgressEnd(pid); if (!checkOnly) { GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); } GWEN_MDigest_free(md); return rv; } if (!checkOnly) { /* write to archive */ rv=GWEN_SyncIo_WriteForced(sio, fbuf, bs); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ProgressEnd(pid); if (!checkOnly) { GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); } GWEN_MDigest_free(md); return rv; } } if (bs>fsize) { DBG_ERROR(GWEN_LOGDOMAIN, "Internal error: bs>fsize (%lu>%lu)", (unsigned long int)bs, (unsigned long int) fsize); GWEN_Gui_ProgressEnd(pid); if (!checkOnly) { GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); } GWEN_MDigest_free(md); return rv; } bytesDone+=bs; fsize-=bs; /* advance progress bar */ rv=GWEN_Gui_ProgressAdvance(pid, bytesDone); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ProgressEnd(pid); if (!checkOnly) { GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); } GWEN_MDigest_free(md); return rv; } } /* while */ GWEN_Gui_ProgressEnd(pid); } if (!checkOnly) { /* close output file */ GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); } /* finish hash */ rv=GWEN_MDigest_End(md); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); return rv; } /* read and check hash */ mpos=GWEN_SarFileHeader_GetHashPos(fh); if (mpos) { GWEN_BUFFER *mbuf; /* seek to end of file */ pos=GWEN_SyncIo_File_Seek(sr->archiveSio, mpos, GWEN_SyncIo_File_Whence_Set); if (pos<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", (int) pos); GWEN_MDigest_free(md); return (int) pos; } /* read 20 bytes of hash */ mbuf=GWEN_Buffer_new(0, 20, 0, 1); rv=GWEN_SyncIo_ReadForced(sr->archiveSio, (uint8_t*) GWEN_Buffer_GetStart(mbuf), 20); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(mbuf); GWEN_MDigest_free(md); return rv; } GWEN_Buffer_IncrementPos(mbuf, 20); GWEN_Buffer_AdjustUsedBytes(mbuf); if (memcmp(GWEN_MDigest_GetDigestPtr(md), GWEN_Buffer_GetStart(mbuf), 20)!=0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); DBG_ERROR(0, "Hash don't match:"); GWEN_Text_LogString((const char*) GWEN_MDigest_GetDigestPtr(md), 20, GWEN_LOGDOMAIN, GWEN_LoggerLevel_Error); GWEN_Text_LogString(GWEN_Buffer_GetStart(mbuf), 20, GWEN_LOGDOMAIN, GWEN_LoggerLevel_Error); GWEN_Buffer_free(mbuf); GWEN_MDigest_free(md); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_free(mbuf); } GWEN_MDigest_free(md); } return 0; } int GWEN_Sar_ExtractAndDigestFileLink(GWEN_SAR *sr, const GWEN_SAR_FILEHEADER *fh, int checkOnly) { #if ((_BSD_SOURCE || _XOPEN_SOURCE >= 500 || (_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED) || _POSIX_C_SOURCE >= 200112L) && !defined(__MINGW32__)) || defined(OS_DARWIN) int rv; const char *fname; uint32_t perms; uint64_t dpos; uint64_t fsize; uint64_t hsize; uint64_t hpos; uint64_t mpos; int64_t pos; GWEN_MDIGEST *md; assert(sr); assert(sr->refCount); md=GWEN_MDigest_Rmd160_new(); rv=GWEN_MDigest_Begin(md); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); return rv; } fname=GWEN_SarFileHeader_GetPath(fh); perms=GWEN_SarFileHeader_GetPermissions(fh); assert(fname); fsize=GWEN_SarFileHeader_GetDataSize(fh); /* not FileSize!! */ dpos=GWEN_SarFileHeader_GetDataPos(fh); hpos=GWEN_SarFileHeader_GetHeaderStartPos(fh); hsize=GWEN_SarFileHeader_GetHeaderSize(fh); if (hsize>0) { GWEN_BUFFER *mbuf; /* seek to header pos */ pos=GWEN_SyncIo_File_Seek(sr->archiveSio, hpos, GWEN_SyncIo_File_Whence_Set); if (pos<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", (int) pos); GWEN_MDigest_free(md); return (int) pos; } mbuf=GWEN_Buffer_new(0, hsize, 0, 1); rv=GWEN_SyncIo_ReadForced(sr->archiveSio, (uint8_t*) GWEN_Buffer_GetStart(mbuf), hsize); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(mbuf); GWEN_MDigest_free(md); return rv; } GWEN_Buffer_IncrementPos(mbuf, hsize); GWEN_Buffer_AdjustUsedBytes(mbuf); /* digest header TLV */ rv=GWEN_MDigest_Update(md, (const uint8_t*) GWEN_Buffer_GetStart(mbuf), GWEN_Buffer_GetUsedBytes(mbuf)); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(mbuf); GWEN_MDigest_free(md); return rv; } GWEN_Buffer_free(mbuf); } /* seek to data pos */ pos=GWEN_SyncIo_File_Seek(sr->archiveSio, dpos, GWEN_SyncIo_File_Whence_Set); if (pos<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", (int) pos); GWEN_MDigest_free(md); return (int) pos; } /* copy file if fsize>0 */ if (fsize>0) { /* fsize is the size of the file tag data */ GWEN_BUFFER *mbuf; mbuf=GWEN_Buffer_new(0, fsize, 0, 1); rv=GWEN_SyncIo_ReadForced(sr->archiveSio, (uint8_t*) GWEN_Buffer_GetStart(mbuf), fsize); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(mbuf); GWEN_MDigest_free(md); return rv; } GWEN_Buffer_IncrementPos(mbuf, fsize); GWEN_Buffer_AdjustUsedBytes(mbuf); /* digest TLV */ rv=GWEN_MDigest_Update(md, (const uint8_t*) GWEN_Buffer_GetStart(mbuf), GWEN_Buffer_GetUsedBytes(mbuf)); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(mbuf); GWEN_MDigest_free(md); return rv; } if (!checkOnly) { mode_t mode=0; if (symlink(GWEN_Buffer_GetStart(mbuf), fname)) { DBG_ERROR(GWEN_LOGDOMAIN, "symlink(%s, %s): %d (%s)", GWEN_Buffer_GetStart(mbuf), fname, errno, strerror(errno)); GWEN_Buffer_free(mbuf); GWEN_MDigest_free(md); return GWEN_ERROR_IO; } /* owner perms */ if (perms & GWEN_SYNCIO_FILE_FLAGS_UREAD) mode|=S_IRUSR; if (perms & GWEN_SYNCIO_FILE_FLAGS_UWRITE) mode|=S_IWUSR; if (perms & GWEN_SYNCIO_FILE_FLAGS_UEXEC) mode|=S_IXUSR; #if 0 /* CHMOD on symlinks doesn't work */ /* group perms */ #ifdef S_IRGRP if (perms & GWEN_SYNCIO_FILE_FLAGS_GREAD) mode|=S_IRGRP; #endif #ifdef S_IWGRP if (perms & GWEN_SYNCIO_FILE_FLAGS_GWRITE) mode|=S_IWGRP; #endif #ifdef S_IXGRP if (perms & GWEN_SYNCIO_FILE_FLAGS_GEXEC) mode|=S_IXGRP; #endif /* other perms */ #ifdef S_IROTH if (perms & GWEN_SYNCIO_FILE_FLAGS_OREAD) mode|=S_IROTH; #endif #ifdef S_IWOTH if (perms & GWEN_SYNCIO_FILE_FLAGS_OWRITE) mode|=S_IWOTH; #endif #ifdef S_IXOTH if (perms & GWEN_SYNCIO_FILE_FLAGS_OEXEC) mode|=S_IXOTH; #endif rv=chmod(fname, mode); if (rv<0) { DBG_WARN(GWEN_LOGDOMAIN, "chmod(%s): %d (%s), ignoring", fname, errno, strerror(errno)); } #endif } GWEN_Buffer_free(mbuf); } /* finish hash */ rv=GWEN_MDigest_End(md); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); return rv; } /* read and check hash */ mpos=GWEN_SarFileHeader_GetHashPos(fh); if (mpos) { GWEN_BUFFER *mbuf; /* seek to end of file */ pos=GWEN_SyncIo_File_Seek(sr->archiveSio, mpos, GWEN_SyncIo_File_Whence_Set); if (pos<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", (int) pos); GWEN_MDigest_free(md); return (int) pos; } /* read 20 bytes of hash */ mbuf=GWEN_Buffer_new(0, 20, 0, 1); rv=GWEN_SyncIo_ReadForced(sr->archiveSio, (uint8_t*) GWEN_Buffer_GetStart(mbuf), 20); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(mbuf); GWEN_MDigest_free(md); if (!checkOnly) unlink(fname); return rv; } GWEN_Buffer_IncrementPos(mbuf, 20); GWEN_Buffer_AdjustUsedBytes(mbuf); if (memcmp(GWEN_MDigest_GetDigestPtr(md), GWEN_Buffer_GetStart(mbuf), 20)!=0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(mbuf); GWEN_MDigest_free(md); if (!checkOnly) unlink(fname); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_free(mbuf); } GWEN_MDigest_free(md); return 0; #else # warning "Function symlink() is not available" DBG_ERROR(GWEN_LOGDOMAIN, "Function symlink() is not available"); return GWEN_ERROR_IO; #endif } int GWEN_Sar_ExtractAndDigestFileDir(GWEN_SAR *sr, const GWEN_SAR_FILEHEADER *fh, int checkOnly) { int rv; const char *fname; //uint64_t dpos; //uint64_t fsize; uint64_t hsize; uint64_t hpos; uint64_t mpos; int64_t pos; GWEN_MDIGEST *md; GWEN_BUFFER *mbuf; uint32_t perms; assert(sr); assert(sr->refCount); md=GWEN_MDigest_Rmd160_new(); rv=GWEN_MDigest_Begin(md); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); return rv; } fname=GWEN_SarFileHeader_GetPath(fh); assert(fname); perms=GWEN_SarFileHeader_GetPermissions(fh); //fsize=GWEN_SarFileHeader_GetDataSize(fh); /* not FileSize!! */ //dpos=GWEN_SarFileHeader_GetDataPos(fh); hpos=GWEN_SarFileHeader_GetHeaderStartPos(fh); hsize=GWEN_SarFileHeader_GetHeaderSize(fh); assert(hsize); /* seek to end of file */ pos=GWEN_SyncIo_File_Seek(sr->archiveSio, hpos, GWEN_SyncIo_File_Whence_Set); if (pos<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", (int) pos); GWEN_MDigest_free(md); return (int) pos; } mbuf=GWEN_Buffer_new(0, hsize, 0, 1); rv=GWEN_SyncIo_ReadForced(sr->archiveSio, (uint8_t*) GWEN_Buffer_GetStart(mbuf), hsize); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(mbuf); GWEN_MDigest_free(md); return rv; } GWEN_Buffer_IncrementPos(mbuf, hsize); GWEN_Buffer_AdjustUsedBytes(mbuf); /* digest TLV */ rv=GWEN_MDigest_Update(md, (const uint8_t*) GWEN_Buffer_GetStart(mbuf), GWEN_Buffer_GetUsedBytes(mbuf)); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(mbuf); GWEN_MDigest_free(md); return rv; } GWEN_Buffer_free(mbuf); /* finish hash */ rv=GWEN_MDigest_End(md); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); return rv; } /* read and check hash */ mpos=GWEN_SarFileHeader_GetHashPos(fh); if (mpos) { GWEN_BUFFER *mbuf; /* seek to end of file */ pos=GWEN_SyncIo_File_Seek(sr->archiveSio, mpos, GWEN_SyncIo_File_Whence_Set); if (pos<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", (int) pos); GWEN_MDigest_free(md); return (int) pos; } /* read 20 bytes of hash */ mbuf=GWEN_Buffer_new(0, 20, 0, 1); rv=GWEN_SyncIo_ReadForced(sr->archiveSio, (uint8_t*) GWEN_Buffer_GetStart(mbuf), 20); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(mbuf); GWEN_MDigest_free(md); unlink(fname); return rv; } GWEN_Buffer_IncrementPos(mbuf, 20); GWEN_Buffer_AdjustUsedBytes(mbuf); if (memcmp(GWEN_MDigest_GetDigestPtr(md), GWEN_Buffer_GetStart(mbuf), 20)!=0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(mbuf); GWEN_MDigest_free(md); unlink(fname); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_free(mbuf); } GWEN_MDigest_free(md); if (!checkOnly) { mode_t mode=0; /* owner perms */ if (perms & GWEN_SYNCIO_FILE_FLAGS_UREAD) mode|=S_IRUSR; if (perms & GWEN_SYNCIO_FILE_FLAGS_UWRITE) mode|=S_IWUSR; if (perms & GWEN_SYNCIO_FILE_FLAGS_UEXEC) mode|=S_IXUSR; /* group perms */ #ifdef S_IRGRP if (perms & GWEN_SYNCIO_FILE_FLAGS_GREAD) mode|=S_IRGRP; #endif #ifdef S_IWGRP if (perms & GWEN_SYNCIO_FILE_FLAGS_GWRITE) mode|=S_IWGRP; #endif #ifdef S_IXGRP if (perms & GWEN_SYNCIO_FILE_FLAGS_GEXEC) mode|=S_IXGRP; #endif /* other perms */ #ifdef S_IROTH if (perms & GWEN_SYNCIO_FILE_FLAGS_OREAD) mode|=S_IROTH; #endif #ifdef S_IWOTH if (perms & GWEN_SYNCIO_FILE_FLAGS_OWRITE) mode|=S_IWOTH; #endif #ifdef S_IXOTH if (perms & GWEN_SYNCIO_FILE_FLAGS_OEXEC) mode|=S_IXOTH; #endif /* create folder */ #ifndef OS_WIN32 rv=mkdir(fname, mode); #else rv=mkdir(fname); #endif if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "mkdir(%s): %d (%s)", fname, errno, strerror(errno)); return GWEN_ERROR_IO; } } return 0; } int GWEN_Sar_ExtractAndDigestFile(GWEN_SAR *sr, const GWEN_SAR_FILEHEADER *fh, int checkOnly) { int rv; switch(GWEN_SarFileHeader_GetFileType(fh)) { case GWEN_SarFileHeader_FType_File: rv=GWEN_Sar_ExtractAndDigestFileReg(sr, fh, checkOnly); break; case GWEN_SarFileHeader_FType_Dir: rv=GWEN_Sar_ExtractAndDigestFileDir(sr, fh, checkOnly); break; case GWEN_SarFileHeader_FType_SymLink: rv=GWEN_Sar_ExtractAndDigestFileLink(sr, fh, checkOnly); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "File type %d not supported", GWEN_SarFileHeader_GetFileType(fh)); return GWEN_ERROR_INVALID; } if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int GWEN_Sar_ExtractFile(GWEN_SAR *sr, const GWEN_SAR_FILEHEADER *fh) { int rv; rv=GWEN_Sar_ExtractAndDigestFile(sr, fh, 0); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } int GWEN_Sar_CheckFile(GWEN_SAR *sr, const GWEN_SAR_FILEHEADER *fh) { int rv; rv=GWEN_Sar_ExtractAndDigestFile(sr, fh, 1); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } const GWEN_SAR_FILEHEADER_LIST *GWEN_Sar_GetHeaders(GWEN_SAR *sr) { assert(sr); assert(sr->refCount); return sr->headers; } int GWEN_Sar__UnpackArchive(const char *inFile, const char *where) { GWEN_SAR *sr; int rv; const GWEN_SAR_FILEHEADER_LIST *fhl; /* open archive file */ sr=GWEN_Sar_new(); rv=GWEN_Sar_OpenArchive(sr, inFile, GWEN_SyncIo_File_CreationMode_OpenExisting, GWEN_SYNCIO_FILE_FLAGS_READ); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } /* change to "where" */ if (chdir(where)) { DBG_ERROR(GWEN_LOGDOMAIN, "chdir(%s): %s", where, strerror(errno)); GWEN_Sar_CloseArchive(sr, 1); GWEN_Sar_free(sr); return GWEN_ERROR_IO; } fhl=GWEN_Sar_GetHeaders(sr); if (fhl) { const GWEN_SAR_FILEHEADER *fh; uint32_t pid; pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_SHOW_ABORT | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS, I18N("File Operation"), I18N("Unpacking archive file"), GWEN_SarFileHeader_List_GetCount(fhl), 0); fh=GWEN_SarFileHeader_List_First(fhl); while(fh) { //const char *s; //s=GWEN_SarFileHeader_GetPath(fh); rv=GWEN_Sar_ExtractFile(sr, fh); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ProgressEnd(pid); GWEN_Sar_CloseArchive(sr, 1); GWEN_Sar_free(sr); } rv=GWEN_Gui_ProgressAdvance(pid, GWEN_GUI_PROGRESS_ONE); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ProgressEnd(pid); GWEN_Sar_CloseArchive(sr, 1); GWEN_Sar_free(sr); return rv; } fh=GWEN_SarFileHeader_List_Next(fh); } GWEN_Gui_ProgressEnd(pid); } rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { fprintf(stderr, "Error closing archive (%d)\n", rv); return 2; } return 0; } int GWEN_Sar_UnpackArchive(const char *inFile, const char *where) { char savedPwd[300]; int rv; /* get current working dir */ if (getcwd(savedPwd, sizeof(savedPwd)-1)==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "getcwd(): %s", strerror(errno)); return GWEN_ERROR_IO; } savedPwd[sizeof(savedPwd)-1]=0; rv=GWEN_Sar__UnpackArchive(inFile, where); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); } /* change back to previous pwd */ if (chdir(savedPwd)) { DBG_ERROR(GWEN_LOGDOMAIN, "chdir(%s): %s", savedPwd, strerror(errno)); return GWEN_ERROR_IO; } return rv; } int GWEN_Sar_Sign(GWEN_SAR *sr, GWEN_CRYPTMGR *cm) { int rv; GWEN_SAR_FILEHEADER_LIST *fhl; assert(sr); assert(sr->refCount); if (sr->openMode!=GWEN_Sar_OpenMode_Opened && sr->openMode!=GWEN_Sar_OpenMode_Created) { DBG_ERROR(GWEN_LOGDOMAIN, "Archive not open"); return GWEN_ERROR_NOT_OPEN; } if (sr->signaturePos!=0 || sr->signatureSize!=0) { DBG_ERROR(GWEN_LOGDOMAIN, "There already is a signature in the archive file"); return GWEN_ERROR_INVALID; } fhl=sr->headers; if (fhl) { GWEN_SAR_FILEHEADER *fh; uint32_t pid; GWEN_MDIGEST *md; uint8_t hashBuf[21]; GWEN_BUFFER *sbuf; GWEN_BUFFER *tbuf; int64_t pos; md=GWEN_MDigest_Rmd160_new(); rv=GWEN_MDigest_Begin(md); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); return rv; } /* clear SIGNED flags */ fh=GWEN_SarFileHeader_List_First(fhl); while(fh) { GWEN_SarFileHeader_SubFlags(fh, GWEN_SAR_FILEHEADER_FLAGS_SIGNED); fh=GWEN_SarFileHeader_List_Next(fh); } /* calculate hash over all file hashes */ pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_SHOW_ABORT | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS, I18N("File Operation"), I18N("Signing archive file"), GWEN_SarFileHeader_List_GetCount(fhl), 0); fh=GWEN_SarFileHeader_List_First(fhl); while(fh) { const char *s; uint64_t hpos; s=GWEN_SarFileHeader_GetPath(fh); hpos=GWEN_SarFileHeader_GetHashPos(fh); if (hpos==0) { DBG_WARN(GWEN_LOGDOMAIN, "File %s has no valid hash", s?s:"(unnamed)"); } else { /* seek to start of hash */ pos=GWEN_SyncIo_File_Seek(sr->archiveSio, hpos, GWEN_SyncIo_File_Whence_Set); if (pos<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", (int) pos); GWEN_Gui_ProgressEnd(pid); GWEN_MDigest_free(md); return (int) pos; } /* read hash */ rv=GWEN_SyncIo_ReadForced(sr->archiveSio, hashBuf, 20); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ProgressEnd(pid); GWEN_MDigest_free(md); return rv; } /* digest hash */ rv=GWEN_MDigest_Update(md, hashBuf, 20); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ProgressEnd(pid); GWEN_MDigest_free(md); return rv; } GWEN_SarFileHeader_AddFlags(fh, GWEN_SAR_FILEHEADER_FLAGS_SIGNED); } rv=GWEN_Gui_ProgressAdvance(pid, GWEN_GUI_PROGRESS_ONE); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ProgressEnd(pid); GWEN_MDigest_free(md); return rv; } fh=GWEN_SarFileHeader_List_Next(fh); } /* finish hash */ rv=GWEN_MDigest_End(md); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ProgressEnd(pid); GWEN_MDigest_free(md); return rv; } /* sign hash */ sbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_CryptMgr_Sign(cm, GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md), sbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(sbuf); GWEN_Gui_ProgressEnd(pid); GWEN_MDigest_free(md); return rv; } GWEN_MDigest_free(md); /* create signature TLV */ tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_TLV_DirectlyToBuffer(GWEN_SAR_TAG_SIGNATURE, 0x00, GWEN_Buffer_GetStart(sbuf), GWEN_Buffer_GetUsedBytes(sbuf), 1, tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(sbuf); GWEN_Gui_ProgressEnd(pid); return rv; } /* seek to end of file */ pos=GWEN_SyncIo_File_Seek(sr->archiveSio, 0, GWEN_SyncIo_File_Whence_End); if (pos<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", (int) pos); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(sbuf); GWEN_Gui_ProgressEnd(pid); return (int) pos; } /* write TLV into archive file */ rv=GWEN_SyncIo_WriteForced(sr->archiveSio, (const uint8_t*) GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf)); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(sbuf); GWEN_Gui_ProgressEnd(pid); return rv; } GWEN_Buffer_free(tbuf); GWEN_Buffer_free(sbuf); GWEN_Gui_ProgressEnd(pid); } return 0; } int GWEN_Sar_Verify(GWEN_SAR *sr, GWEN_CRYPTMGR *cm) { int rv; GWEN_SAR_FILEHEADER_LIST *fhl; assert(sr); assert(sr->refCount); if (sr->openMode!=GWEN_Sar_OpenMode_Opened && sr->openMode!=GWEN_Sar_OpenMode_Created) { DBG_ERROR(GWEN_LOGDOMAIN, "Archive not open"); return GWEN_ERROR_NOT_OPEN; } if (sr->signaturePos==0 || sr->signatureSize==0) { DBG_ERROR(GWEN_LOGDOMAIN, "No valid signature data in the archive file"); return GWEN_ERROR_INVALID; } fhl=sr->headers; if (fhl) { GWEN_SAR_FILEHEADER *fh; uint32_t pid; GWEN_MDIGEST *md; uint8_t hashBuf[21]; GWEN_BUFFER *sbuf; GWEN_BUFFER *hbuf; int64_t pos; md=GWEN_MDigest_Rmd160_new(); rv=GWEN_MDigest_Begin(md); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); return rv; } /* clear SIGNED flags */ fh=GWEN_SarFileHeader_List_First(fhl); while(fh) { GWEN_SarFileHeader_SubFlags(fh, GWEN_SAR_FILEHEADER_FLAGS_SIGNED); fh=GWEN_SarFileHeader_List_Next(fh); } /* calculate hash over all file hashes */ pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_SHOW_ABORT | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS, I18N("File Operation"), I18N("Signing archive file"), GWEN_SarFileHeader_List_GetCount(fhl), 0); fh=GWEN_SarFileHeader_List_First(fhl); while(fh) { const char *s; uint64_t hpos; s=GWEN_SarFileHeader_GetPath(fh); hpos=GWEN_SarFileHeader_GetHashPos(fh); if (hpos==0) { DBG_WARN(GWEN_LOGDOMAIN, "File %s has no valid hash", s?s:"(unnamed)"); } else { /* seek to start of hash */ pos=GWEN_SyncIo_File_Seek(sr->archiveSio, hpos, GWEN_SyncIo_File_Whence_Set); if (pos<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", (int) pos); GWEN_Gui_ProgressEnd(pid); GWEN_MDigest_free(md); return (int) pos; } /* read hash */ rv=GWEN_SyncIo_ReadForced(sr->archiveSio, hashBuf, 20); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ProgressEnd(pid); GWEN_MDigest_free(md); return rv; } /* digest hash */ rv=GWEN_MDigest_Update(md, hashBuf, 20); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ProgressEnd(pid); GWEN_MDigest_free(md); return rv; } GWEN_SarFileHeader_AddFlags(fh, GWEN_SAR_FILEHEADER_FLAGS_SIGNED); } rv=GWEN_Gui_ProgressAdvance(pid, GWEN_GUI_PROGRESS_ONE); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ProgressEnd(pid); GWEN_MDigest_free(md); return rv; } fh=GWEN_SarFileHeader_List_Next(fh); } /* finish hash */ rv=GWEN_MDigest_End(md); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ProgressEnd(pid); GWEN_MDigest_free(md); return rv; } /* seek to start of signature data */ pos=GWEN_SyncIo_File_Seek(sr->archiveSio, sr->signaturePos, GWEN_SyncIo_File_Whence_Set); if (pos<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", (int) pos); GWEN_Gui_ProgressEnd(pid); GWEN_MDigest_free(md); return (int) pos; } /* read signature data */ sbuf=GWEN_Buffer_new(0, sr->signatureSize, 0, 1); rv=GWEN_SyncIo_ReadForced(sr->archiveSio, (uint8_t*) GWEN_Buffer_GetStart(sbuf), sr->signatureSize); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(sbuf); GWEN_Gui_ProgressEnd(pid); GWEN_MDigest_free(md); return rv; } GWEN_Buffer_IncrementPos(sbuf, sr->signatureSize); GWEN_Buffer_AdjustUsedBytes(sbuf); /* verify signature */ hbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_CryptMgr_Verify(cm, (const uint8_t*) GWEN_Buffer_GetStart(sbuf), GWEN_Buffer_GetUsedBytes(sbuf), hbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(hbuf); GWEN_Buffer_free(sbuf); GWEN_Gui_ProgressEnd(pid); GWEN_MDigest_free(md); return rv; } GWEN_Buffer_free(sbuf); /* verify hash */ if (GWEN_Buffer_GetUsedBytes(hbuf)!=20) { DBG_ERROR(GWEN_LOGDOMAIN, "Invalid size of signed hash (%d)", GWEN_Buffer_GetUsedBytes(hbuf)); GWEN_Buffer_free(hbuf); GWEN_Gui_ProgressEnd(pid); GWEN_MDigest_free(md); return GWEN_ERROR_BAD_DATA; } if (memcmp(GWEN_Buffer_GetStart(hbuf), GWEN_MDigest_GetDigestPtr(md), 20)!=0) { DBG_ERROR(GWEN_LOGDOMAIN, "Invalid hash, data is invalid!"); GWEN_Buffer_free(hbuf); GWEN_Gui_ProgressEnd(pid); GWEN_MDigest_free(md); return GWEN_ERROR_VERIFY; } DBG_INFO(GWEN_LOGDOMAIN, "Signature is valid"); GWEN_MDigest_free(md); GWEN_Buffer_free(hbuf); GWEN_Gui_ProgressEnd(pid); } return 0; } int GWEN_Sar_VerifyArchive(const char *inFile, const char *signer, GWEN_CRYPT_KEY *key) { GWEN_SAR *sr; int rv; /* open archive file */ sr=GWEN_Sar_new(); rv=GWEN_Sar_OpenArchive(sr, inFile, GWEN_SyncIo_File_CreationMode_OpenExisting, GWEN_SYNCIO_FILE_FLAGS_READ); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Sar_free(sr); return rv; } else { GWEN_CRYPTMGR *cm; cm=GWEN_CryptMgrKeys_new(NULL, NULL, signer, key, 0); /* verify */ rv=GWEN_Sar_Verify(sr, cm); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_CryptMgr_free(cm); GWEN_Sar_CloseArchive(sr, 1); GWEN_Sar_free(sr); return rv; } GWEN_CryptMgr_free(cm); /* close archive */ rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Sar_CloseArchive(sr, 1); GWEN_Sar_free(sr); return rv; } GWEN_Sar_free(sr); return 0; } } int GWEN_Sar_SignArchive(const char *inFile, const char *signer, GWEN_CRYPT_KEY *key) { GWEN_SAR *sr; int rv; /* open archive file */ sr=GWEN_Sar_new(); rv=GWEN_Sar_OpenArchive(sr, inFile, GWEN_SyncIo_File_CreationMode_OpenExisting, GWEN_SYNCIO_FILE_FLAGS_READ); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Sar_free(sr); return rv; } else { GWEN_CRYPTMGR *cm; cm=GWEN_CryptMgrKeys_new(NULL, NULL, signer, key, 0); /* verify */ rv=GWEN_Sar_Sign(sr, cm); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_CryptMgr_free(cm); GWEN_Sar_CloseArchive(sr, 1); GWEN_Sar_free(sr); return rv; } GWEN_CryptMgr_free(cm); /* close archive */ rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Sar_CloseArchive(sr, 1); GWEN_Sar_free(sr); return rv; } GWEN_Sar_free(sr); return 0; } } int GWEN_Sar_CheckArchive(const char *inFile) { GWEN_SAR *sr; int rv; const GWEN_SAR_FILEHEADER_LIST *fhl; /* open archive file */ sr=GWEN_Sar_new(); rv=GWEN_Sar_OpenArchive(sr, inFile, GWEN_SyncIo_File_CreationMode_OpenExisting, GWEN_SYNCIO_FILE_FLAGS_READ); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } fhl=GWEN_Sar_GetHeaders(sr); if (fhl) { const GWEN_SAR_FILEHEADER *fh; uint32_t pid; pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_SHOW_ABORT | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS, I18N("File Operation"), I18N("Checking archive file"), GWEN_SarFileHeader_List_GetCount(fhl), 0); fh=GWEN_SarFileHeader_List_First(fhl); while(fh) { //const char *s; //s=GWEN_SarFileHeader_GetPath(fh); rv=GWEN_Sar_CheckFile(sr, fh); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ProgressEnd(pid); GWEN_Sar_CloseArchive(sr, 1); GWEN_Sar_free(sr); } rv=GWEN_Gui_ProgressAdvance(pid, GWEN_GUI_PROGRESS_ONE); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ProgressEnd(pid); GWEN_Sar_CloseArchive(sr, 1); GWEN_Sar_free(sr); return rv; } fh=GWEN_SarFileHeader_List_Next(fh); } GWEN_Gui_ProgressEnd(pid); } rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { fprintf(stderr, "Error closing archive (%d)\n", rv); return 2; } GWEN_Sar_free(sr); return 0; } gwenhywfar-4.15.2beta/src/sar/sar_p.h0000644000175000017500000000736512364015347014412 00000000000000/*************************************************************************** begin : Wed Jun 22 2011 copyright : (C) 2011 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_SAR_P_H #define GWEN_SAR_P_H #include #include #include #include #include #define GWEN_SAR_HEADER_VERSION ((uint32_t)0x01000000) #define GWEN_SAR_TAG_HEADER 0x01 # define GWEN_SAR_TAG_HEADER_VERSION 0x01 # define GWEN_SAR_TAG_HEADER_STATUS 0x02 # define GWEN_SAR_TAG_HEADER_FLAGS 0x03 # define GWEN_SAR_TAG_HEADER_PATH 0x04 # define GWEN_SAR_TAG_HEADER_TYPE 0x05 # define GWEN_SAR_TAG_HEADER_PERM 0x06 # define GWEN_SAR_TAG_HEADER_ATIME 0x07 # define GWEN_SAR_TAG_HEADER_MTIME 0x08 # define GWEN_SAR_TAG_HEADER_CTIME 0x09 # define GWEN_SAR_TAG_HEADER_SIZE 0x0a #define GWEN_SAR_TAG_FILE 0x02 #define GWEN_SAR_TAG_HASH 0x03 #define GWEN_SAR_TAG_SIGNATURE 0x04 enum { GWEN_Sar_OpenMode_Closed=0, GWEN_Sar_OpenMode_Created, GWEN_Sar_OpenMode_Opened }; struct GWEN_SAR { char *archiveName; GWEN_SYNCIO *archiveSio; uint64_t archiveSize; GWEN_SAR_FILEHEADER_LIST *headers; uint64_t signaturePos; uint64_t signatureSize; int openMode; int refCount; }; static uint64_t GWEN_Sar_ReadUint64(const uint8_t *p, uint32_t bs); static int GWEN_Sar_FileHeaderToTlv(const GWEN_SAR_FILEHEADER *fh, GWEN_BUFFER *tbuf); static int GWEN_Sar_TlvToFileHeader(GWEN_BUFFER *mbuf, GWEN_SAR_FILEHEADER *fh); static int GWEN_Sar_AddAndDigestFile(GWEN_SAR *sr, const GWEN_SAR_FILEHEADER *fh, GWEN_MDIGEST *md); static int GWEN_Sar_AddAndDigestFileReg(GWEN_SAR *sr, const GWEN_SAR_FILEHEADER *fh, GWEN_MDIGEST *md); static int GWEN_Sar_AddAndDigestFileLink(GWEN_SAR *sr, const GWEN_SAR_FILEHEADER *fh, GWEN_MDIGEST *md); static int GWEN_Sar_ExtractAndDigestFile(GWEN_SAR *sr, const GWEN_SAR_FILEHEADER *fh, int checkOnly); static int GWEN_Sar_ExtractAndDigestFileReg(GWEN_SAR *sr, const GWEN_SAR_FILEHEADER *fh, int checkOnly); static int GWEN_Sar_ExtractAndDigestFileLink(GWEN_SAR *sr, const GWEN_SAR_FILEHEADER *fh, int checkOnly); static int GWEN_Sar_ExtractAndDigestFileDir(GWEN_SAR *sr, const GWEN_SAR_FILEHEADER *fh, int checkOnly); static int GWEN_Sar_ScanFile(GWEN_SAR *sr); static int GWEN_Sar__UnpackArchive(const char *inFile, const char *where); #endif gwenhywfar-4.15.2beta/src/sar/gwen_sar_fileheader.xml0000644000175000017500000001044212364015347017622 00000000000000 GWEN_SAR_FILEHEADER GWEN_SarFileHeader with_list1 with_list2 with_refcount
gwenhywfar/syncio_file.h
gwenhywfar/gwentime.h
0 0 with_flags public 0 0 with_flags public NULL NULL public own const dup const 0 0 public 0 0 with_flags public AQDB_DataType_String public own nodup const NULL NULL AQDB_DataType_String public own nodup const NULL NULL AQDB_DataType_String public own nodup const NULL NULL 0 0 public 0 0 volatile lib 0 0 volatile lib 0 0 volatile lib 0 0 volatile lib 0 0 volatile lib
gwenhywfar-4.15.2beta/src/sar/Makefile.in0000644000175000017500000006356712634022415015202 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/sar DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(iheader_HEADERS) $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libsar_la_LIBADD = am__objects_1 = gwen_sar_fileheader.lo am_libsar_la_OBJECTS = $(am__objects_1) sar.lo libsar_la_OBJECTS = $(am_libsar_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libsar_la_SOURCES) DIST_SOURCES = $(libsar_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(iheaderdir)" HEADERS = $(iheader_HEADERS) $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/sio \ -I$(top_srcdir)/src/parser @all_includes@ AM_CFLAGS = @visibility_cflags@ -DBUILDING_GWENHYWFAR typefiles = \ gwen_sar_fileheader.xml built_sources = \ gwen_sar_fileheader.c build_headers_priv = \ gwen_sar_fileheader_l.h \ gwen_sar_fileheader_p.h build_headers_pub = \ gwen_sar_fileheader.h build_headers = $(build_headers_priv) $(build_headers_pub) noinst_LTLIBRARIES = libsar.la noinst_HEADERS = $(build_headers_priv)\ sar_p.h iheaderdir = $(gwenhywfar_headerdir_am)/gwenhywfar iheader_HEADERS = $(build_headers_pub)\ sar.h libsar_la_SOURCES = $(built_sources)\ sar.c EXTRA_DIST = $(typefiles) $(built_sources) $(build_headers) SUFFIXES = .xml .c all: all-am .SUFFIXES: .SUFFIXES: .xml .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/sar/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/sar/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libsar.la: $(libsar_la_OBJECTS) $(libsar_la_DEPENDENCIES) $(EXTRA_libsar_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libsar_la_OBJECTS) $(libsar_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gwen_sar_fileheader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sar.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-iheaderHEADERS: $(iheader_HEADERS) @$(NORMAL_INSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(iheaderdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(iheaderdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(iheaderdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(iheaderdir)" || exit $$?; \ done uninstall-iheaderHEADERS: @$(NORMAL_UNINSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(iheaderdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(iheaderdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iheaderHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iheaderHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am \ install-iheaderHEADERS install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-iheaderHEADERS build_sources: $(built_sources) list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d build_sources; \ done ; sources: for f in $(libsio_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done types: $(typefiles) typemaker2 -I $(top_srcdir)/tools/typemaker2/types/c -I $(srcdir) --destfolder="$(srcdir)" -D GWENHYWFAR_API $(typefiles) clean_build_files: rm -f $(built_sources) $(build_headers) format_build_files: for f in $(built_sources) $(build_headers); do \ astyle -s2 --min-conditional-indent=0 --indent-labels --pad=oper -a --suffix=none $$f; \ done %.c: %.xml typemaker2 -I $(top_srcdir)/tools/typemaker2/types/c -I $(srcdir) --destfolder="$(srcdir)" -D GWENHYWFAR_API $< astyle -s2 --min-conditional-indent=0 --indent-labels --pad=oper -a --suffix=none $@ %.h: %.xml typemaker2 -I $(top_srcdir)/tools/typemaker2/types/c -I $(srcdir) --destfolder="$(srcdir)" -D GWENHYWFAR_API $< astyle -s2 --min-conditional-indent=0 --indent-labels --pad=oper -a --suffix=none $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/src/sar/gwen_sar_fileheader.h0000644000175000017500000001404712364015347017256 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "gwen_sar_fileheader.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef GWEN_SAR_FILEHEADER_H #define GWEN_SAR_FILEHEADER_H #ifdef __cplusplus extern "C" { #endif /* define GWEN_SAR_FILEHEADER_FLAGS */ #define GWEN_SAR_FILEHEADER_FLAGS_SIGNED 0x00000001 /* needed system headers */ #include #include #include /* pre-headers */ #include #include typedef struct GWEN_SAR_FILEHEADER GWEN_SAR_FILEHEADER; GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_SAR_FILEHEADER, GWEN_SarFileHeader, GWENHYWFAR_API) GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_SAR_FILEHEADER, GWEN_SarFileHeader, GWENHYWFAR_API) typedef enum { GWEN_SarFileHeader_FType_Unknown = -1, GWEN_SarFileHeader_FType_None = 0, GWEN_SarFileHeader_FType_File, GWEN_SarFileHeader_FType_Dir, GWEN_SarFileHeader_FType_SymLink } GWEN_SAR_FILEHEADER_FTYPE; typedef enum { GWEN_SarFileHeader_Status_Unknown = -1, GWEN_SarFileHeader_Status_Active = 0, GWEN_SarFileHeader_Status_Deleted } GWEN_SAR_FILEHEADER_STATUS; /* post-headers */ GWENHYWFAR_API GWEN_SAR_FILEHEADER_FTYPE GWEN_SarFileHeader_FType_fromString(const char *p_s); GWENHYWFAR_API GWEN_SAR_FILEHEADER_STATUS GWEN_SarFileHeader_Status_fromString(const char *p_s); GWENHYWFAR_API const char *GWEN_SarFileHeader_FType_toString(GWEN_SAR_FILEHEADER_FTYPE p_i); GWENHYWFAR_API const char *GWEN_SarFileHeader_Status_toString(GWEN_SAR_FILEHEADER_STATUS p_i); /** Constructor. */ GWENHYWFAR_API GWEN_SAR_FILEHEADER *GWEN_SarFileHeader_new(void); /** Destructor. */ GWENHYWFAR_API void GWEN_SarFileHeader_free(GWEN_SAR_FILEHEADER *p_struct); GWENHYWFAR_API void GWEN_SarFileHeader_Attach(GWEN_SAR_FILEHEADER *p_struct); GWENHYWFAR_API GWEN_SAR_FILEHEADER *GWEN_SarFileHeader_dup(const GWEN_SAR_FILEHEADER *p_struct); /** Getter. * Use this function to get the member "status" */ GWENHYWFAR_API int GWEN_SarFileHeader_GetStatus(const GWEN_SAR_FILEHEADER *p_struct); /** Getter. * Use this function to get the member "flags" */ GWENHYWFAR_API uint32_t GWEN_SarFileHeader_GetFlags(const GWEN_SAR_FILEHEADER *p_struct); /** Getter. * Use this function to get the member "path" */ GWENHYWFAR_API const char *GWEN_SarFileHeader_GetPath(const GWEN_SAR_FILEHEADER *p_struct); /** Getter. * Use this function to get the member "fileType" */ GWENHYWFAR_API int GWEN_SarFileHeader_GetFileType(const GWEN_SAR_FILEHEADER *p_struct); /** Getter. * Use this function to get the member "permissions" */ GWENHYWFAR_API uint32_t GWEN_SarFileHeader_GetPermissions(const GWEN_SAR_FILEHEADER *p_struct); /** Getter. * Use this function to get the member "atime" */ GWENHYWFAR_API const GWEN_TIME *GWEN_SarFileHeader_GetAtime(const GWEN_SAR_FILEHEADER *p_struct); /** Getter. * Use this function to get the member "mtime" */ GWENHYWFAR_API const GWEN_TIME *GWEN_SarFileHeader_GetMtime(const GWEN_SAR_FILEHEADER *p_struct); /** Getter. * Use this function to get the member "ctime" */ GWENHYWFAR_API const GWEN_TIME *GWEN_SarFileHeader_GetCtime(const GWEN_SAR_FILEHEADER *p_struct); /** Getter. * Use this function to get the member "fileSize" */ GWENHYWFAR_API uint64_t GWEN_SarFileHeader_GetFileSize(const GWEN_SAR_FILEHEADER *p_struct); /** Setter. * Use this function to set the member "status" */ GWENHYWFAR_API void GWEN_SarFileHeader_SetStatus(GWEN_SAR_FILEHEADER *p_struct, int p_src); /** Add flags. * Use this function to add flags to the member "status" */ GWENHYWFAR_API void GWEN_SarFileHeader_AddStatus(GWEN_SAR_FILEHEADER *p_struct, int p_src); /** Sub flags. * Use this function to sub flags to the member "status" */ GWENHYWFAR_API void GWEN_SarFileHeader_SubStatus(GWEN_SAR_FILEHEADER *p_struct, int p_src); /** Setter. * Use this function to set the member "flags" */ GWENHYWFAR_API void GWEN_SarFileHeader_SetFlags(GWEN_SAR_FILEHEADER *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to the member "flags" */ GWENHYWFAR_API void GWEN_SarFileHeader_AddFlags(GWEN_SAR_FILEHEADER *p_struct, uint32_t p_src); /** Sub flags. * Use this function to sub flags to the member "flags" */ GWENHYWFAR_API void GWEN_SarFileHeader_SubFlags(GWEN_SAR_FILEHEADER *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "path" */ GWENHYWFAR_API void GWEN_SarFileHeader_SetPath(GWEN_SAR_FILEHEADER *p_struct, const char *p_src); /** Setter. * Use this function to set the member "fileType" */ GWENHYWFAR_API void GWEN_SarFileHeader_SetFileType(GWEN_SAR_FILEHEADER *p_struct, int p_src); /** Setter. * Use this function to set the member "permissions" */ GWENHYWFAR_API void GWEN_SarFileHeader_SetPermissions(GWEN_SAR_FILEHEADER *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to the member "permissions" */ GWENHYWFAR_API void GWEN_SarFileHeader_AddPermissions(GWEN_SAR_FILEHEADER *p_struct, uint32_t p_src); /** Sub flags. * Use this function to sub flags to the member "permissions" */ GWENHYWFAR_API void GWEN_SarFileHeader_SubPermissions(GWEN_SAR_FILEHEADER *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "atime" */ GWENHYWFAR_API void GWEN_SarFileHeader_SetAtime(GWEN_SAR_FILEHEADER *p_struct, GWEN_TIME *p_src); /** Setter. * Use this function to set the member "mtime" */ GWENHYWFAR_API void GWEN_SarFileHeader_SetMtime(GWEN_SAR_FILEHEADER *p_struct, GWEN_TIME *p_src); /** Setter. * Use this function to set the member "ctime" */ GWENHYWFAR_API void GWEN_SarFileHeader_SetCtime(GWEN_SAR_FILEHEADER *p_struct, GWEN_TIME *p_src); /** Setter. * Use this function to set the member "fileSize" */ GWENHYWFAR_API void GWEN_SarFileHeader_SetFileSize(GWEN_SAR_FILEHEADER *p_struct, uint64_t p_src); GWENHYWFAR_API GWEN_SAR_FILEHEADER_LIST *GWEN_SarFileHeader_List_dup(const GWEN_SAR_FILEHEADER_LIST *p_src); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/sar/Makefile.am0000644000175000017500000000346412364015347015165 00000000000000INCLUDES= -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/sio \ -I$(top_srcdir)/src/parser @all_includes@ AM_CFLAGS=@visibility_cflags@ -DBUILDING_GWENHYWFAR typefiles=\ gwen_sar_fileheader.xml built_sources= \ gwen_sar_fileheader.c build_headers_priv= \ gwen_sar_fileheader_l.h \ gwen_sar_fileheader_p.h build_headers_pub=\ gwen_sar_fileheader.h build_headers=$(build_headers_priv) $(build_headers_pub) noinst_LTLIBRARIES=libsar.la noinst_HEADERS=$(build_headers_priv)\ sar_p.h iheaderdir=$(gwenhywfar_headerdir_am)/gwenhywfar iheader_HEADERS=$(build_headers_pub)\ sar.h libsar_la_SOURCES=$(built_sources)\ sar.c EXTRA_DIST=$(typefiles) $(built_sources) $(build_headers) build_sources: $(built_sources) list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d build_sources; \ done ; sources: for f in $(libsio_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done types: $(typefiles) typemaker2 -I $(top_srcdir)/tools/typemaker2/types/c -I $(srcdir) --destfolder="$(srcdir)" -D GWENHYWFAR_API $(typefiles) clean_build_files: rm -f $(built_sources) $(build_headers) format_build_files: for f in $(built_sources) $(build_headers); do \ astyle -s2 --min-conditional-indent=0 --indent-labels --pad=oper -a --suffix=none $$f; \ done %.c: %.xml typemaker2 -I $(top_srcdir)/tools/typemaker2/types/c -I $(srcdir) --destfolder="$(srcdir)" -D GWENHYWFAR_API $< astyle -s2 --min-conditional-indent=0 --indent-labels --pad=oper -a --suffix=none $@ %.h: %.xml typemaker2 -I $(top_srcdir)/tools/typemaker2/types/c -I $(srcdir) --destfolder="$(srcdir)" -D GWENHYWFAR_API $< astyle -s2 --min-conditional-indent=0 --indent-labels --pad=oper -a --suffix=none $@ SUFFIXES = .xml .c gwenhywfar-4.15.2beta/src/sar/sar.h0000644000175000017500000000604612416477066014076 00000000000000/*************************************************************************** begin : Wed Jun 22 2011 copyright : (C) 2011 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_SAR_H #define GWEN_SAR_H #include #include #include #include typedef struct GWEN_SAR GWEN_SAR; GWENHYWFAR_API GWEN_SAR *GWEN_Sar_new(void); GWENHYWFAR_API void GWEN_Sar_Attach(GWEN_SAR *sr); GWENHYWFAR_API void GWEN_Sar_free(GWEN_SAR *sr); GWENHYWFAR_API int GWEN_Sar_CreateArchive(GWEN_SAR *sr, const char *aname); GWENHYWFAR_API int GWEN_Sar_OpenArchive(GWEN_SAR *sr, const char *aname, GWEN_SYNCIO_FILE_CREATIONMODE cm, uint32_t acc); GWENHYWFAR_API int GWEN_Sar_CloseArchive(GWEN_SAR *sr, int abandon); GWENHYWFAR_API int GWEN_Sar_AddFile(GWEN_SAR *sr, const char *fname); GWENHYWFAR_API const GWEN_SAR_FILEHEADER_LIST *GWEN_Sar_GetHeaders(GWEN_SAR *sr); GWENHYWFAR_API int GWEN_Sar_ExtractFile(GWEN_SAR *sr, const GWEN_SAR_FILEHEADER *fh); GWENHYWFAR_API int GWEN_Sar_CheckFile(GWEN_SAR *sr, const GWEN_SAR_FILEHEADER *fh); GWENHYWFAR_API int GWEN_Sar_Sign(GWEN_SAR *sr, GWEN_CRYPTMGR *cm); GWENHYWFAR_API int GWEN_Sar_Verify(GWEN_SAR *sr, GWEN_CRYPTMGR *cm); GWENHYWFAR_API int GWEN_Sar_UnpackArchive(const char *inFile, const char *where); GWENHYWFAR_API int GWEN_Sar_CheckArchive(const char *inFile); GWENHYWFAR_API int GWEN_Sar_VerifyArchive(const char *inFile, const char *signer, GWEN_CRYPT_KEY *key); GWENHYWFAR_API int GWEN_Sar_SignArchive(const char *inFile, const char *signer, GWEN_CRYPT_KEY *key); #endif gwenhywfar-4.15.2beta/src/sar/gwen_sar_fileheader_l.h0000644000175000017500000000372612364015347017573 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "gwen_sar_fileheader.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef GWEN_SAR_FILEHEADER_L_H #define GWEN_SAR_FILEHEADER_L_H #include "gwen_sar_fileheader.h" #ifdef __cplusplus extern "C" { #endif /** Getter. * Use this function to get the member "headerStartPos" */ uint64_t GWEN_SarFileHeader_GetHeaderStartPos(const GWEN_SAR_FILEHEADER *p_struct); /** Getter. * Use this function to get the member "headerSize" */ uint64_t GWEN_SarFileHeader_GetHeaderSize(const GWEN_SAR_FILEHEADER *p_struct); /** Getter. * Use this function to get the member "dataPos" */ uint64_t GWEN_SarFileHeader_GetDataPos(const GWEN_SAR_FILEHEADER *p_struct); /** Getter. * Use this function to get the member "dataSize" */ uint64_t GWEN_SarFileHeader_GetDataSize(const GWEN_SAR_FILEHEADER *p_struct); /** Getter. * Use this function to get the member "hashPos" */ uint64_t GWEN_SarFileHeader_GetHashPos(const GWEN_SAR_FILEHEADER *p_struct); /** Setter. * Use this function to set the member "headerStartPos" */ void GWEN_SarFileHeader_SetHeaderStartPos(GWEN_SAR_FILEHEADER *p_struct, uint64_t p_src); /** Setter. * Use this function to set the member "headerSize" */ void GWEN_SarFileHeader_SetHeaderSize(GWEN_SAR_FILEHEADER *p_struct, uint64_t p_src); /** Setter. * Use this function to set the member "dataPos" */ void GWEN_SarFileHeader_SetDataPos(GWEN_SAR_FILEHEADER *p_struct, uint64_t p_src); /** Setter. * Use this function to set the member "dataSize" */ void GWEN_SarFileHeader_SetDataSize(GWEN_SAR_FILEHEADER *p_struct, uint64_t p_src); /** Setter. * Use this function to set the member "hashPos" */ void GWEN_SarFileHeader_SetHashPos(GWEN_SAR_FILEHEADER *p_struct, uint64_t p_src); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/sar/gwen_sar_fileheader_p.h0000644000175000017500000000167612364015347017601 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "gwen_sar_fileheader.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef GWEN_SAR_FILEHEADER_P_H #define GWEN_SAR_FILEHEADER_P_H #include "gwen_sar_fileheader_l.h" #ifdef __cplusplus extern "C" { #endif struct GWEN_SAR_FILEHEADER { GWEN_LIST_ELEMENT(GWEN_SAR_FILEHEADER) int _refCount; int status; uint32_t flags; char *path; int fileType; uint32_t permissions; GWEN_TIME *atime; GWEN_TIME *mtime; GWEN_TIME *ctime; uint64_t fileSize; uint64_t headerStartPos; /* volatile */ uint64_t headerSize; /* volatile */ uint64_t dataPos; /* volatile */ uint64_t dataSize; /* volatile */ uint64_t hashPos; /* volatile */ }; #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/ressource.rc.in0000644000175000017500000000656512364015347015316 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Wed Mar 27 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /* Changes */ #include // Language: 407=DE, 409=US, 809=UK // German resources LANGUAGE LANG_GERMAN, SUBLANG_GERMAN #pragma code_page(1252) // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA // Version VS_VERSION_INFO VERSIONINFO FILEVERSION @GWENHYWFAR_VERSION_MAJOR@, @GWENHYWFAR_VERSION_MINOR@, @GWENHYWFAR_VERSION_PATCHLEVEL@, @GWENHYWFAR_VERSION_BUILD@ PRODUCTVERSION @GWENHYWFAR_VERSION_MAJOR@, @GWENHYWFAR_VERSION_MINOR@, @GWENHYWFAR_VERSION_PATCHLEVEL@, @GWENHYWFAR_VERSION_BUILD@ FILEFLAGSMASK 0x3fL FILEFLAGS 0x0L FILEOS 0x40004L // Windows NT FILETYPE 0x2L // DLL FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040704b0" BEGIN //VALUE "Comments", "\0" VALUE "CompanyName", " Aquamaniac\0" VALUE "FileDescription", "Multi purpose library\0" VALUE "FileVersion", "v@GWENHYWFAR_VERSION_RELEASE_STRING@\0" VALUE "InternalName", "Gwenhywfar\0" VALUE "LegalCopyright", "Copyright Š 2003 by Martin Preuss\0" VALUE "LegalTrademarks", "Aquamaniac\0" VALUE "OriginalFilename", "GWENHYWFAR32.DLL\0" //VALUE "PrivateBuild", "\0" VALUE "ProductName", "Gwenhywfar\0" VALUE "ProductVersion", "v@GWENHYWFAR_VERSION_FULL_STRING@\0" VALUE "Author", "Martin Preuss\0" VALUE "Email", "martin@libchipcard.de\0" VALUE "Homepage", "http://gwenhywfar.sf.net/\0" VALUE "Description", "OS abstraction, Crypto API, IPC Framework\0" VALUE "License", "LGPL\0" //VALUE "SpecialBuild", "\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x407, 1200 END END gwenhywfar-4.15.2beta/src/Makefile.in0000644000175000017500000013340112634022414014375 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = testlib$(EXEEXT) TESTS = testlib$(EXEEXT) subdir = src DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(srcdir)/types.h.in $(srcdir)/ressource.rc.in \ $(srcdir)/version.h.in $(top_srcdir)/depcomp \ $(iheader_HEADERS) $(noinst_HEADERS) $(top_srcdir)/test-driver ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = types.h ressource.rc version.h CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(iheaderdir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = libgwenhywfar_la_DEPENDENCIES = base/libbase.la crypt3/libcrypt3.la \ crypttoken/libcrypttoken.la cryptmsg/libcryptmsg.la \ sio/libsio.la os/libos.la parser/libparser.la \ html/libgwenhtml.la gui/libgui.la sar/libsar.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_libgwenhywfar_la_OBJECTS = binreloc.lo gwenhywfar.lo libgwenhywfar_la_OBJECTS = $(am_libgwenhywfar_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libgwenhywfar_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(libgwenhywfar_la_LDFLAGS) $(LDFLAGS) \ -o $@ PROGRAMS = $(noinst_PROGRAMS) am_testlib_OBJECTS = testlib.$(OBJEXT) testlib_OBJECTS = $(am_testlib_OBJECTS) testlib_DEPENDENCIES = libgwenhywfar.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgwenhywfar_la_SOURCES) $(testlib_SOURCES) DIST_SOURCES = $(libgwenhywfar_la_SOURCES) $(testlib_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(iheader_HEADERS) $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ check recheck distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ -DBUILDING_GWENHYWFAR -DGWEN_PREFIX_DIR=\"$(prefix)\" \ -DGWEN_SYSCONF_DIR=\"@gwenhywfar_cfg_searchdir@\" \ -DLOCALEDIR=\"@gwenhywfar_locale_searchdir@\" \ -DLIBDIR=\"$(libdir)\" \ -DGWENHYWFAR_SO_EFFECTIVE_STR=\"$(GWENHYWFAR_SO_EFFECTIVE)\" \ -DGWEN_DATADIR=\"$(gwenhywfar_data_searchdir)\" \ -DGWEN_SYSDATADIR=\"$(gwenhywfar_sysdata_searchdir)\" \ -DPLUGINDIR=\"$(gwenhywfar_plugin_searchdir)\" DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/html \ -I$(top_srcdir)/src/parser $(all_includes) AM_CFLAGS = $(visibility_cflags) SUBDIRS = base sio os parser crypt3 crypttoken gui cryptmsg html sar DIST_SUBDIRS = base sio os parser crypt3 crypttoken gui cryptmsg html sar gparser # Note: The symbol "DATADIR" is already used by some Windows header, # so we have to name this differently here. EXTRA_DIST = \ types.h.in \ version.h.in \ ressource.rc.in ressource.rc # Before compiling the sources, first built these files BUILT_SOURCES = types.h version.h iheaderdir = $(gwenhywfar_headerdir_am)/gwenhywfar iheader_HEADERS = \ gwenhywfar.h \ gwenhywfarapi.h \ types.h \ version.h noinst_HEADERS = \ binreloc.h lib_LTLIBRARIES = libgwenhywfar.la libgwenhywfar_la_SOURCES = \ binreloc.c \ gwenhywfar.c libgwenhywfar_la_LIBADD = \ base/libbase.la \ crypt3/libcrypt3.la \ crypttoken/libcrypttoken.la \ cryptmsg/libcryptmsg.la \ sio/libsio.la \ os/libos.la \ parser/libparser.la \ html/libgwenhtml.la \ gui/libgui.la \ sar/libsar.la $(i18n_libs) $(ICONV_LIBS) $(LIBGCRYPT_LIBS) $(LIBGNUTLS_LIBS) $(rt_libs) $(all_libraries) testlib_SOURCES = testlib.c testlib_LDADD = libgwenhywfar.la libgwenhywfar_la_LDFLAGS = \ -no-undefined $(STRIPALL) $(ressource_ldflags) \ -version-info \ $(GWENHYWFAR_SO_CURRENT):$(GWENHYWFAR_SO_REVISION):$(GWENHYWFAR_SO_AGE) all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): types.h: $(top_builddir)/config.status $(srcdir)/types.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ ressource.rc: $(top_builddir)/config.status $(srcdir)/ressource.rc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ version.h: $(top_builddir)/config.status $(srcdir)/version.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgwenhywfar.la: $(libgwenhywfar_la_OBJECTS) $(libgwenhywfar_la_DEPENDENCIES) $(EXTRA_libgwenhywfar_la_DEPENDENCIES) $(AM_V_CCLD)$(libgwenhywfar_la_LINK) -rpath $(libdir) $(libgwenhywfar_la_OBJECTS) $(libgwenhywfar_la_LIBADD) $(LIBS) clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list testlib$(EXEEXT): $(testlib_OBJECTS) $(testlib_DEPENDENCIES) $(EXTRA_testlib_DEPENDENCIES) @rm -f testlib$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testlib_OBJECTS) $(testlib_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/binreloc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gwenhywfar.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testlib.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-iheaderHEADERS: $(iheader_HEADERS) @$(NORMAL_INSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(iheaderdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(iheaderdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(iheaderdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(iheaderdir)" || exit $$?; \ done uninstall-iheaderHEADERS: @$(NORMAL_UNINSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(iheaderdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ else \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? testlib.log: testlib$(EXEEXT) @p='testlib$(EXEEXT)'; \ b='testlib'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(iheaderdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-recursive clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-iheaderHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-iheaderHEADERS uninstall-libLTLIBRARIES .MAKE: $(am__recursive_targets) all check check-am install install-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-TESTS check-am clean clean-generic clean-libLTLIBRARIES \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am \ install-iheaderHEADERS install-info install-info-am \ install-libLTLIBRARIES install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-iheaderHEADERS uninstall-libLTLIBRARIES sources: for f in $(libgwenhywfar_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done ; ressource.o: ressource.rc $(RC) -o $@ $< # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/src/version.h.in0000644000175000017500000000445312364015347014606 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Wed Sep 24 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_VERSION_H #define GWENHYWFAR_VERSION_H #define GWEN_VERSION_MAJOR @GWENHYWFAR_VERSION_MAJOR@ #define GWENHYWFAR_VERSION_MAJOR @GWENHYWFAR_VERSION_MAJOR@ #define GWENHYWFAR_VERSION_MINOR @GWENHYWFAR_VERSION_MINOR@ #define GWENHYWFAR_VERSION_PATCHLEVEL @GWENHYWFAR_VERSION_PATCHLEVEL@ #define GWENHYWFAR_VERSION_BUILD @GWENHYWFAR_VERSION_BUILD@ #define GWENHYWFAR_VERSION_TAG "@GWENHYWFAR_VERSION_TAG@" #define GWENHYWFAR_VERSION_FULL_STRING "@GWENHYWFAR_VERSION_FULL_STRING@" #define GWENHYWFAR_VERSION_STRING "@GWENHYWFAR_VERSION_STRING@" #define GWENHYWFAR_SO_EFFECTIVE @GWENHYWFAR_SO_EFFECTIVE@ #define GWENHYWFAR_SO_EFFECTIVE_STR "@GWENHYWFAR_SO_EFFECTIVE@" #endif /* GWENHYWFAR_VERSION_H */ gwenhywfar-4.15.2beta/src/types.h.in0000644000175000017500000000373712364015347014271 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sun Jan 04 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_TYPES_H #define GWENHYWFAR_TYPES_H #include #define GWENHYWFAR_SYS_IS_WINDOWS @gwenhywfar_sys_is_windows@ /* Watch out: This include *must* come after the definition of GWENHYWFAR_SYS_IS_WINDOWS or else the dllimport/export attributes will easily be messed up! */ #include #endif gwenhywfar-4.15.2beta/src/cryptmsg/0000755000175000017500000000000012643267236014273 500000000000000gwenhywfar-4.15.2beta/src/cryptmsg/cryptmgr.h0000644000175000017500000001316412364015347016232 00000000000000/*************************************************************************** begin : Mon Dec 01 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPTMGR_CRYPTMGR_H #define GWEN_CRYPTMGR_CRYPTMGR_H #include /** * @defgroup MOD_CRYPT_CRYPTMGR Cryptographic Object Manager * @ingroup MOD_CRYPT * @brief Framework for Signing, Verifying, Encrypting and Decrypting of data objects * * This group contains functions which operate on cryptographic objects. * These objects are signed objects and encrypted objects. Data can be wrapped * in those objects for secure transmission. * * Keys used by this group are identified by a name, number and version. * There is a local key (used for signing and decryption) and a peer key (used * for signature verification and encryption). * * This module handles the adminstration of signed objects and encrypted objects. * The cryptographic functions are performed using callbacks. Therefore you can't * instantiate an object of this group directly. You must call the constructor of * one of the implementations (like @ref GWEN_CryptMgrKeys_new). * * Signed objects and encrypted objects consist of modified TLV (Tag, Length, Value) * objects with the following structure: * * * * * *
PositionLengthDescription
01Type
12Length of the following value (or 0)
2nValue
* * A signed object is such a TLV object consisting of: *
    *
  • signature head (name, number and version of the key used, datetime etc)
  • *
  • signed data
  • *
  • signature tail containing the actual signature
  • *
* * Encrypted objects are another kind of TLVs containing: *
    *
  • crypt head (name, number and version of the key used, message key etc)
  • *
  • encrypted data
  • *
* */ /*@{*/ #define GWEN_CRYPTMGR_TLV_SIGNEDOBJECT 0x21 #define GWEN_CRYPTMGR_TLV_ENCRYPTEDOBJECT 0x22 typedef struct GWEN_CRYPTMGR GWEN_CRYPTMGR; typedef enum { GWEN_CryptProfile_None=0, /** * Padding for key : ISO 9796-2 * Encryption for key : RSA 2048 * Padding for data : ANSIX9_23 * Encryption for data: BLOWFISH-256 */ GWEN_CryptProfile_1=1 } GWEN_CRYPT_PROFILE; typedef enum { GWEN_SignatureProfile_None=0, /** * Hash: RMD-160 * Padd: ISO 9796-2 * Sign: RSA 2048 */ GWEN_SignatureProfile_1=1 } GWEN_SIGNATURE_PROFILE; #ifdef __cplusplus extern "C" { #endif GWENHYWFAR_API void GWEN_CryptMgr_free(GWEN_CRYPTMGR *cm); /** @name Information About the Local Key * */ /*@{*/ GWENHYWFAR_API const char *GWEN_CryptMgr_GetLocalKeyName(const GWEN_CRYPTMGR *cm); GWENHYWFAR_API int GWEN_CryptMgr_GetLocalKeyNumber(const GWEN_CRYPTMGR *cm); GWENHYWFAR_API int GWEN_CryptMgr_GetLocalKeyVersion(const GWEN_CRYPTMGR *cm); /*@}*/ /** @name Information About the Peer Key * */ /*@{*/ GWENHYWFAR_API const char *GWEN_CryptMgr_GetPeerKeyName(const GWEN_CRYPTMGR *cm); GWENHYWFAR_API int GWEN_CryptMgr_GetPeerKeyNumber(const GWEN_CRYPTMGR *cm); GWENHYWFAR_API int GWEN_CryptMgr_GetPeerKeyVersion(const GWEN_CRYPTMGR *cm); /*@}*/ /** @name Information About the Algorithms for Signing and Encrypting * */ /*@{*/ GWENHYWFAR_API int GWEN_CryptMgr_GetCryptProfile(const GWEN_CRYPTMGR *cm); GWENHYWFAR_API void GWEN_CryptMgr_SetCryptProfile(GWEN_CRYPTMGR *cm, int i); GWENHYWFAR_API int GWEN_CryptMgr_GetSignatureProfile(const GWEN_CRYPTMGR *cm); GWENHYWFAR_API void GWEN_CryptMgr_SetSignatureProfile(GWEN_CRYPTMGR *cm, int i); /*@}*/ /** @name Basic Cryptographic Functions * */ /*@{*/ /** * Sign the given data and create a signed object containing the signature and the given data. */ GWENHYWFAR_API int GWEN_CryptMgr_Sign(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf); /** * Encrypt the given data and create an encrypted object containing the encrypted data. */ GWENHYWFAR_API int GWEN_CryptMgr_Encrypt(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf); /** * Extract the data from a signed object and verify the signature. */ GWENHYWFAR_API int GWEN_CryptMgr_Verify(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf); /** * Extracts the data from an encrypted object and decrypts it. */ GWENHYWFAR_API int GWEN_CryptMgr_Decrypt(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf); /*@}*/ /** @name Complex Cryptographic Functions * * Functions of this group perform multiple operations in one setting (e.g. signing and encrypting * or decrypting and verifying a signature). */ /*@{*/ /** * Sign the given data (thus creating a signed object) and encrypt the result of that operation * (i.e. creating an encrypted object containing a signed object which actually contains the data). */ GWENHYWFAR_API int GWEN_CryptMgr_Encode(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf); /** * Decrypt the given data which is expected to be an encrypted object containing a signed object * which actually contains the data. The signature of the contained signed object is verified. */ GWENHYWFAR_API int GWEN_CryptMgr_Decode(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf); /*@}*/ #ifdef __cplusplus } #endif /*@}*/ /* defgroup */ #endif gwenhywfar-4.15.2beta/src/cryptmsg/sighead.c0000644000175000017500000001446512416477066015777 00000000000000/*************************************************************************** begin : Sun Nov 30 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "sighead_p.h" #include "i18n_l.h" #include #include #include GWEN_LIST_FUNCTIONS(GWEN_SIGHEAD, GWEN_SigHead) GWEN_SIGHEAD *GWEN_SigHead_new(void) { GWEN_SIGHEAD *sh; GWEN_NEW_OBJECT(GWEN_SIGHEAD, sh); GWEN_LIST_INIT(GWEN_SIGHEAD, sh); return sh; } void GWEN_SigHead_free(GWEN_SIGHEAD *sh) { if (sh) { GWEN_LIST_FINI(GWEN_SIGHEAD, sh); free(sh->keyName); GWEN_Time_free(sh->dateTime); GWEN_FREE_OBJECT(sh); } } GWEN_SIGHEAD *GWEN_SigHead_fromBuffer(const uint8_t *p, uint32_t l) { if (p==NULL || l<1) { DBG_INFO(GWEN_LOGDOMAIN, "Bad tag"); return NULL; } else { GWEN_SIGHEAD *sh; const uint8_t *sp; uint32_t sl; sh=GWEN_SigHead_new(); sp=p; sl=l; while(sl) { GWEN_TAG16 *subtag; uint32_t subtagLen; const char *subtagPtr; int i; subtag=GWEN_Tag16_fromBuffer2(sp, sl, 0); if (subtag==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Bad sub-tag"); GWEN_SigHead_free(sh); return NULL; } subtagLen=GWEN_Tag16_GetTagLength(subtag); subtagPtr=(const char*)GWEN_Tag16_GetTagData(subtag); if (subtagLen && subtagPtr) { switch(GWEN_Tag16_GetTagType(subtag)) { case GWEN_SIGHEAD_TLV_KEYNAME: sh->keyName=(char*)malloc(subtagLen+1); memmove(sh->keyName, subtagPtr, subtagLen); sh->keyName[subtagLen]=0; break; case GWEN_SIGHEAD_TLV_KEYNUM: if (sscanf(subtagPtr, "%d", &i)==1) sh->keyNumber=i; break; case GWEN_SIGHEAD_TLV_KEYVER: if (sscanf(subtagPtr, "%d", &i)==1) sh->keyVersion=i; break; case GWEN_SIGHEAD_TLV_DATETIME: if (subtagLen<128) { char dt[128]; dt[0]=0; strncpy(dt, (const char*) subtagPtr, sizeof(dt)-1); dt[sizeof(dt)-1]=0; sh->dateTime=GWEN_Time_fromUtcString(dt, "YYYYMMDD-hh:mm:ss"); if (sh->dateTime==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad format of dateTime [%s]", dt); GWEN_Tag16_free(subtag); GWEN_SigHead_free(sh); return NULL; } } else { DBG_ERROR(GWEN_LOGDOMAIN, "Data for dateTime too long (%d bytes)", subtagLen); GWEN_Tag16_free(subtag); GWEN_SigHead_free(sh); return NULL; } break; case GWEN_SIGHEAD_TLV_SIGPROFILE: if (sscanf(subtagPtr, "%d", &i)==1) sh->signatureProfile=i; break; case GWEN_SIGHEAD_TLV_SIGNUM: if (sscanf(subtagPtr, "%d", &i)==1) sh->signatureNumber=i; break; default: DBG_WARN(GWEN_LOGDOMAIN, "Unknown tag %02x", GWEN_Tag16_GetTagType(subtag)); } } sp+=GWEN_Tag16_GetTagSize(subtag); sl-=GWEN_Tag16_GetTagSize(subtag); GWEN_Tag16_free(subtag); } /* while */ return sh; } } int GWEN_SigHead_toBuffer(const GWEN_SIGHEAD *sh, GWEN_BUFFER *buf, uint8_t tagType) { char numbuf[32]; uint32_t pos; uint8_t *p; uint32_t l; GWEN_Buffer_AppendByte(buf, tagType); pos=GWEN_Buffer_GetPos(buf); GWEN_Buffer_AppendByte(buf, 0); GWEN_Buffer_AppendByte(buf, 0); if (sh->keyName) GWEN_Tag16_DirectlyToBuffer(GWEN_SIGHEAD_TLV_KEYNAME, sh->keyName, -1, buf); snprintf(numbuf, sizeof(numbuf), "%d", sh->keyNumber); GWEN_Tag16_DirectlyToBuffer(GWEN_SIGHEAD_TLV_KEYNUM, numbuf, -1, buf); snprintf(numbuf, sizeof(numbuf), "%d", sh->keyVersion); GWEN_Tag16_DirectlyToBuffer(GWEN_SIGHEAD_TLV_KEYVER, numbuf, -1, buf); if (sh->dateTime) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 32, 0, 1); GWEN_Time_toUtcString(sh->dateTime, "YYYYMMDD-hh:mm:ss", tbuf); GWEN_Tag16_DirectlyToBuffer(GWEN_SIGHEAD_TLV_DATETIME, GWEN_Buffer_GetStart(tbuf), -1, buf); GWEN_Buffer_free(tbuf); } snprintf(numbuf, sizeof(numbuf), "%d", sh->signatureProfile); GWEN_Tag16_DirectlyToBuffer(GWEN_SIGHEAD_TLV_SIGPROFILE, numbuf, -1, buf); snprintf(numbuf, sizeof(numbuf), "%d", sh->signatureNumber); GWEN_Tag16_DirectlyToBuffer(GWEN_SIGHEAD_TLV_SIGNUM, numbuf, -1, buf); /* write size */ l=GWEN_Buffer_GetPos(buf)-pos-2; p=(uint8_t*)GWEN_Buffer_GetStart(buf)+pos; *(p++)=l & 0xff; *p=(l>>8) & 0xff; return 0; } const char *GWEN_SigHead_GetKeyName(const GWEN_SIGHEAD *sh) { assert(sh); return sh->keyName; } void GWEN_SigHead_SetKeyName(GWEN_SIGHEAD *sh, const char *s) { assert(sh); free(sh->keyName); if (s) sh->keyName=strdup(s); else sh->keyName=NULL; } int GWEN_SigHead_GetKeyNumber(const GWEN_SIGHEAD *sh) { assert(sh); return sh->keyNumber; } void GWEN_SigHead_SetKeyNumber(GWEN_SIGHEAD *sh, int i) { assert(sh); sh->keyNumber=i; } int GWEN_SigHead_GetKeyVersion(const GWEN_SIGHEAD *sh) { assert(sh); return sh->keyVersion; } void GWEN_SigHead_SetKeyVersion(GWEN_SIGHEAD *sh, int i) { assert(sh); sh->keyVersion=i; } const GWEN_TIME *GWEN_SigHead_GetDateTime(const GWEN_SIGHEAD *sh) { assert(sh); return sh->dateTime; } void GWEN_SigHead_SetDateTime(GWEN_SIGHEAD *sh, const GWEN_TIME *ti) { assert(sh); GWEN_Time_free(sh->dateTime); if (ti) sh->dateTime=GWEN_Time_dup(ti); else sh->dateTime=NULL; } int GWEN_SigHead_GetSignatureProfile(const GWEN_SIGHEAD *sh) { assert(sh); return sh->signatureProfile; } void GWEN_SigHead_SetSignatureProfile(GWEN_SIGHEAD *sh, int i) { assert(sh); sh->signatureProfile=i; } int GWEN_SigHead_GetSignatureNumber(const GWEN_SIGHEAD *sh) { assert(sh); return sh->signatureNumber; } void GWEN_SigHead_SetSignatureNumber(GWEN_SIGHEAD *sh, int i) { assert(sh); sh->signatureNumber=i; } gwenhywfar-4.15.2beta/src/cryptmsg/crypthead.h0000644000175000017500000000365312364015347016350 00000000000000/*************************************************************************** begin : Mon Dec 01 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPTMGR_CRYPTHEAD_H #define GWEN_CRYPTMGR_CRYPTHEAD_H #include #include #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_CRYPTHEAD GWEN_CRYPTHEAD; GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_CRYPTHEAD, GWEN_CryptHead, GWENHYWFAR_API) GWENHYWFAR_API GWEN_CRYPTHEAD *GWEN_CryptHead_new(void); GWENHYWFAR_API void GWEN_CryptHead_free(GWEN_CRYPTHEAD *ch); GWENHYWFAR_API GWEN_CRYPTHEAD *GWEN_CryptHead_fromBuffer(const uint8_t *p, uint32_t l); GWENHYWFAR_API int GWEN_CryptHead_toBuffer(const GWEN_CRYPTHEAD *ch, GWEN_BUFFER *buf, uint8_t tagType); GWENHYWFAR_API const char *GWEN_CryptHead_GetKeyName(const GWEN_CRYPTHEAD *ch); GWENHYWFAR_API void GWEN_CryptHead_SetKeyName(GWEN_CRYPTHEAD *ch, const char *s); GWENHYWFAR_API int GWEN_CryptHead_GetKeyNumber(const GWEN_CRYPTHEAD *ch); GWENHYWFAR_API void GWEN_CryptHead_SetKeyNumber(GWEN_CRYPTHEAD *ch, int i); GWENHYWFAR_API int GWEN_CryptHead_GetKeyVersion(const GWEN_CRYPTHEAD *ch); GWENHYWFAR_API void GWEN_CryptHead_SetKeyVersion(GWEN_CRYPTHEAD *ch, int i); GWENHYWFAR_API int GWEN_CryptHead_GetCryptProfile(const GWEN_CRYPTHEAD *ch); GWENHYWFAR_API void GWEN_CryptHead_SetCryptProfile(GWEN_CRYPTHEAD *ch, int i); GWENHYWFAR_API const uint8_t *GWEN_CryptHead_GetKeyPtr(const GWEN_CRYPTHEAD *ch); GWENHYWFAR_API uint32_t GWEN_CryptHead_GetKeyLen(const GWEN_CRYPTHEAD *ch); GWENHYWFAR_API void GWEN_CryptHead_SetKey(GWEN_CRYPTHEAD *ch, const uint8_t *p, uint32_t l); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/cryptmsg/cryptmgrkeys_p.h0000644000175000017500000000317712416477066017460 00000000000000/*************************************************************************** begin : Mon Dec 01 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPTMGR_CRYPTMGR_KEYS_P_H #define GWEN_CRYPTMGR_CRYPTMGR_KEYS_P_H #include #include typedef struct GWEN_CRYPTMGR_KEYS GWEN_CRYPTMGR_KEYS; struct GWEN_CRYPTMGR_KEYS { GWEN_CRYPT_KEY *localKey; GWEN_CRYPT_KEY *peerKey; int ownLocalKey; int ownPeerKey; }; static GWENHYWFAR_CB void GWEN_CryptMgrKeys_FreeData(void *bp, void *p); static GWENHYWFAR_CB int GWEN_CryptMgrKeys_SignData(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf); static GWENHYWFAR_CB int GWEN_CryptMgrKeys_EncryptKey(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf); static GWENHYWFAR_CB int GWEN_CryptMgrKeys_VerifyData(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, const uint8_t *pSignature, uint32_t lSignature); static GWENHYWFAR_CB int GWEN_CryptMgrKeys_DecryptKey(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf); #endif gwenhywfar-4.15.2beta/src/cryptmsg/crypthead_p.h0000644000175000017500000000164612364015347016667 00000000000000/*************************************************************************** begin : Mon Dec 01 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPTMGR_CRYPTHEAD_P_H #define GWEN_CRYPTMGR_CRYPTHEAD_P_H #include "crypthead.h" #define GWEN_CRYPTHEAD_TLV_KEYNAME 0x01 #define GWEN_CRYPTHEAD_TLV_KEYNUM 0x02 #define GWEN_CRYPTHEAD_TLV_KEYVER 0x03 #define GWEN_CRYPTHEAD_TLV_CRYPTPROFILE 0x05 #define GWEN_CRYPTHEAD_TLV_KEY 0x06 struct GWEN_CRYPTHEAD { GWEN_LIST_ELEMENT(GWEN_CRYPTHEAD) char *keyName; int keyNumber; int keyVersion; int cryptProfile; uint8_t *pKey; uint32_t lKey; }; #endif gwenhywfar-4.15.2beta/src/cryptmsg/Makefile.in0000644000175000017500000006230112634022414016245 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/cryptmsg DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(iheader_HEADERS) $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libcryptmsg_la_LIBADD = am_libcryptmsg_la_OBJECTS = sighead.lo sigtail.lo crypthead.lo \ cryptmgr.lo cryptmgrkeys.lo libcryptmsg_la_OBJECTS = $(am_libcryptmsg_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libcryptmsg_la_SOURCES) DIST_SOURCES = $(libcryptmsg_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(iheaderdir)" HEADERS = $(iheader_HEADERS) $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/parser $(LIBGCRYPT_CFLAGS) @all_includes@ AM_CFLAGS = @visibility_cflags@ -DBUILDING_GWENHYWFAR iheaderdir = $(gwenhywfar_headerdir_am)/gwenhywfar iheader_HEADERS = \ sighead.h \ sigtail.h \ crypthead.h \ cryptmgr.h cryptmgr_be.h \ cryptmgrkeys.h noinst_LTLIBRARIES = libcryptmsg.la noinst_HEADERS = \ sighead_p.h \ sigtail_p.h \ crypthead_p.h \ cryptmgr_p.h \ cryptmgrkeys_p.h libcryptmsg_la_SOURCES = \ sighead.c \ sigtail.c \ crypthead.c \ cryptmgr.c \ cryptmgrkeys.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/cryptmsg/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/cryptmsg/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libcryptmsg.la: $(libcryptmsg_la_OBJECTS) $(libcryptmsg_la_DEPENDENCIES) $(EXTRA_libcryptmsg_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libcryptmsg_la_OBJECTS) $(libcryptmsg_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crypthead.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cryptmgr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cryptmgrkeys.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sighead.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigtail.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-iheaderHEADERS: $(iheader_HEADERS) @$(NORMAL_INSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(iheaderdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(iheaderdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(iheaderdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(iheaderdir)" || exit $$?; \ done uninstall-iheaderHEADERS: @$(NORMAL_UNINSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(iheaderdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(iheaderdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iheaderHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iheaderHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am \ install-iheaderHEADERS install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-iheaderHEADERS types: $(typefiles) typemaker -d GWENHYWFAR_API $(typefiles) sources: for f in $(libcryptmsg_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/src/cryptmsg/cryptmgr_be.h0000644000175000017500000000563312416477066016712 00000000000000/*************************************************************************** begin : Mon Dec 01 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPTMGR_CRYPTMGR_BE_H #define GWEN_CRYPTMGR_CRYPTMGR_BE_H #include #include #ifdef __cplusplus extern "C" { #endif GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_CRYPTMGR, GWENHYWFAR_API) typedef GWENHYWFAR_CB int (*GWEN_CRYPTMGR_SIGNDATA_FN)(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf); typedef GWENHYWFAR_CB int (*GWEN_CRYPTMGR_ENCRYPTKEY_FN)(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf); typedef GWENHYWFAR_CB int (*GWEN_CRYPTMGR_VERIFYDATA_FN)(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, const uint8_t *pSignature, uint32_t lSignature); typedef GWENHYWFAR_CB int (*GWEN_CRYPTMGR_DECRYPTKEY_FN)(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf); GWENHYWFAR_API GWEN_CRYPTMGR *GWEN_CryptMgr_new(void); GWENHYWFAR_API void GWEN_CryptMgr_SetLocalKeyName(GWEN_CRYPTMGR *cm, const char *s); GWENHYWFAR_API void GWEN_CryptMgr_SetLocalKeyNumber(GWEN_CRYPTMGR *cm, int i); GWENHYWFAR_API void GWEN_CryptMgr_SetLocalKeyVersion(GWEN_CRYPTMGR *cm, int i); GWENHYWFAR_API void GWEN_CryptMgr_SetPeerKeyName(GWEN_CRYPTMGR *cm, const char *s); GWENHYWFAR_API void GWEN_CryptMgr_SetPeerKeyNumber(GWEN_CRYPTMGR *cm, int i); GWENHYWFAR_API void GWEN_CryptMgr_SetPeerKeyVersion(GWEN_CRYPTMGR *cm, int i); GWENHYWFAR_API int GWEN_CryptMgr_SignData(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf); GWENHYWFAR_API int GWEN_CryptMgr_EncryptKey(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf); GWENHYWFAR_API int GWEN_CryptMgr_VerifyData(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, const uint8_t *pSignature, uint32_t lSignature); GWENHYWFAR_API int GWEN_CryptMgr_DecryptKey(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf); GWENHYWFAR_API GWEN_CRYPTMGR_SIGNDATA_FN GWEN_CryptMgr_SetSignDataFn(GWEN_CRYPTMGR *cm, GWEN_CRYPTMGR_SIGNDATA_FN f); GWENHYWFAR_API GWEN_CRYPTMGR_VERIFYDATA_FN GWEN_CryptMgr_SetVerifyDataFn(GWEN_CRYPTMGR *cm, GWEN_CRYPTMGR_VERIFYDATA_FN f); GWENHYWFAR_API GWEN_CRYPTMGR_ENCRYPTKEY_FN GWEN_CryptMgr_SetEncryptKeyFn(GWEN_CRYPTMGR *cm, GWEN_CRYPTMGR_ENCRYPTKEY_FN f); GWENHYWFAR_API GWEN_CRYPTMGR_DECRYPTKEY_FN GWEN_CryptMgr_SetDecryptKeyFn(GWEN_CRYPTMGR *cm, GWEN_CRYPTMGR_DECRYPTKEY_FN f); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/cryptmsg/sigtail.c0000644000175000017500000000771712416477066016031 00000000000000/*************************************************************************** begin : Sun Nov 30 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "sigtail_p.h" #include "i18n_l.h" #include #include #include GWEN_LIST_FUNCTIONS(GWEN_SIGTAIL, GWEN_SigTail) GWEN_SIGTAIL *GWEN_SigTail_new(void) { GWEN_SIGTAIL *st; GWEN_NEW_OBJECT(GWEN_SIGTAIL, st); GWEN_LIST_INIT(GWEN_SIGTAIL, st); return st; } void GWEN_SigTail_free(GWEN_SIGTAIL *st) { if (st) { GWEN_LIST_FINI(GWEN_SIGTAIL, st); if (st->pSignature && st->lSignature) free(st->pSignature); GWEN_FREE_OBJECT(st); } } GWEN_SIGTAIL *GWEN_SigTail_fromBuffer(const uint8_t *p, uint32_t l) { if (p==NULL || l<1) { DBG_INFO(GWEN_LOGDOMAIN, "Bad tag"); return NULL; } else { GWEN_SIGTAIL *st; const uint8_t *sp; uint32_t sl; st=GWEN_SigTail_new(); sp=p; sl=l; while(sl) { GWEN_TAG16 *subtag; uint32_t subtagLen; const char *subtagPtr; int i; subtag=GWEN_Tag16_fromBuffer2(sp, sl, 0); if (subtag==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Bad sub-tag"); GWEN_SigTail_free(st); return NULL; } subtagLen=GWEN_Tag16_GetTagLength(subtag); subtagPtr=(const char*)GWEN_Tag16_GetTagData(subtag); if (subtagLen && subtagPtr) { switch(GWEN_Tag16_GetTagType(subtag)) { case GWEN_SIGTAIL_TLV_SIGNATURE: st->pSignature=(uint8_t*)malloc(subtagLen); memmove(st->pSignature, subtagPtr, subtagLen); st->lSignature=subtagLen; break; case GWEN_SIGTAIL_TLV_SIGNUM: if (sscanf(subtagPtr, "%d", &i)==1) st->signatureNumber=i; break; default: DBG_WARN(GWEN_LOGDOMAIN, "Unknown tag %02x", GWEN_Tag16_GetTagType(subtag)); } } sp+=GWEN_Tag16_GetTagSize(subtag); sl-=GWEN_Tag16_GetTagSize(subtag); GWEN_Tag16_free(subtag); } /* while */ return st; } } int GWEN_SigTail_toBuffer(const GWEN_SIGTAIL *st, GWEN_BUFFER *buf, uint8_t tagType) { char numbuf[32]; uint32_t pos; uint8_t *p; uint32_t l; GWEN_Buffer_AppendByte(buf, tagType); pos=GWEN_Buffer_GetPos(buf); GWEN_Buffer_AppendByte(buf, 0); GWEN_Buffer_AppendByte(buf, 0); if (st->pSignature && st->lSignature) GWEN_Tag16_DirectlyToBuffer(GWEN_SIGTAIL_TLV_SIGNATURE, (const char*)st->pSignature, st->lSignature, buf); snprintf(numbuf, sizeof(numbuf), "%d", st->signatureNumber); GWEN_Tag16_DirectlyToBuffer(GWEN_SIGTAIL_TLV_SIGNUM, numbuf, -1, buf); /* write size */ l=GWEN_Buffer_GetPos(buf)-pos-2; p=(uint8_t*)GWEN_Buffer_GetStart(buf)+pos; *(p++)=l & 0xff; *p=(l>>8) & 0xff; return 0; } const uint8_t *GWEN_SigTail_GetSignaturePtr(const GWEN_SIGTAIL *st) { assert(st); return st->pSignature; } uint32_t GWEN_SigTail_GetSignatureLen(const GWEN_SIGTAIL *st) { assert(st); return st->lSignature; } void GWEN_SigTail_SetSignature(GWEN_SIGTAIL *st, const uint8_t *p, uint32_t l) { assert(st); if (st->pSignature && st->lSignature) free(st->pSignature); if (p && l) { st->pSignature=(uint8_t*)malloc(l); memmove(st->pSignature, p, l); st->lSignature=l; } else { st->pSignature=NULL; st->lSignature=0; } } int GWEN_SigTail_GetSignatureNumber(const GWEN_SIGTAIL *st) { assert(st); return st->signatureNumber; } void GWEN_SigTail_SetSignatureNumber(GWEN_SIGTAIL *st, int i) { assert(st); st->signatureNumber=i; } gwenhywfar-4.15.2beta/src/cryptmsg/cryptmgrkeys.h0000644000175000017500000000216612416477066017136 00000000000000/*************************************************************************** begin : Mon Dec 01 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPTMGR_CRYPTMGR_KEYS_H #define GWEN_CRYPTMGR_CRYPTMGR_KEYS_H #include #include #ifdef __cplusplus extern "C" { #endif GWENHYWFAR_API GWEN_CRYPTMGR *GWEN_CryptMgrKeys_new(const char *localName, GWEN_CRYPT_KEY *localKey, const char *peerName, GWEN_CRYPT_KEY *peerKey, int ownKeys); GWENHYWFAR_API void GWEN_CryptMgrKeys_SetPeerKey(GWEN_CRYPTMGR *mgr, GWEN_CRYPT_KEY *peerKey, int ownKey); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/cryptmsg/sighead.h0000644000175000017500000000373712364015347015774 00000000000000/*************************************************************************** begin : Sun Nov 30 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPTMGR_SIGHEAD_H #define GWEN_CRYPTMGR_SIGHEAD_H #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_SIGHEAD GWEN_SIGHEAD; GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_SIGHEAD, GWEN_SigHead, GWENHYWFAR_API) GWENHYWFAR_API GWEN_SIGHEAD *GWEN_SigHead_new(void); GWENHYWFAR_API void GWEN_SigHead_free(GWEN_SIGHEAD *sh); GWENHYWFAR_API GWEN_SIGHEAD *GWEN_SigHead_fromBuffer(const uint8_t *p, uint32_t l); GWENHYWFAR_API int GWEN_SigHead_toBuffer(const GWEN_SIGHEAD *sh, GWEN_BUFFER *buf, uint8_t tagType); GWENHYWFAR_API const char *GWEN_SigHead_GetKeyName(const GWEN_SIGHEAD *sh); GWENHYWFAR_API void GWEN_SigHead_SetKeyName(GWEN_SIGHEAD *sh, const char *s); GWENHYWFAR_API int GWEN_SigHead_GetKeyNumber(const GWEN_SIGHEAD *sh); GWENHYWFAR_API void GWEN_SigHead_SetKeyNumber(GWEN_SIGHEAD *sh, int i); GWENHYWFAR_API int GWEN_SigHead_GetKeyVersion(const GWEN_SIGHEAD *sh); GWENHYWFAR_API void GWEN_SigHead_SetKeyVersion(GWEN_SIGHEAD *sh, int i); GWENHYWFAR_API const GWEN_TIME *GWEN_SigHead_GetDateTime(const GWEN_SIGHEAD *sh); GWENHYWFAR_API void GWEN_SigHead_SetDateTime(GWEN_SIGHEAD *sh, const GWEN_TIME *ti); GWENHYWFAR_API int GWEN_SigHead_GetSignatureProfile(const GWEN_SIGHEAD *sh); GWENHYWFAR_API void GWEN_SigHead_SetSignatureProfile(GWEN_SIGHEAD *sh, int i); GWENHYWFAR_API int GWEN_SigHead_GetSignatureNumber(const GWEN_SIGHEAD *sh); GWENHYWFAR_API void GWEN_SigHead_SetSignatureNumber(GWEN_SIGHEAD *sh, int i); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/cryptmsg/Makefile.am0000644000175000017500000000153212364015347016242 00000000000000INCLUDES= -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/parser $(LIBGCRYPT_CFLAGS) @all_includes@ AM_CFLAGS=@visibility_cflags@ -DBUILDING_GWENHYWFAR iheaderdir=$(gwenhywfar_headerdir_am)/gwenhywfar iheader_HEADERS=\ sighead.h \ sigtail.h \ crypthead.h \ cryptmgr.h cryptmgr_be.h \ cryptmgrkeys.h noinst_LTLIBRARIES=libcryptmsg.la noinst_HEADERS=\ sighead_p.h \ sigtail_p.h \ crypthead_p.h \ cryptmgr_p.h \ cryptmgrkeys_p.h libcryptmsg_la_SOURCES=\ sighead.c \ sigtail.c \ crypthead.c \ cryptmgr.c \ cryptmgrkeys.c types: $(typefiles) typemaker -d GWENHYWFAR_API $(typefiles) sources: for f in $(libcryptmsg_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-4.15.2beta/src/cryptmsg/cryptmgrkeys.c0000644000175000017500000002351012416477066017125 00000000000000/*************************************************************************** begin : Mon Dec 01 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "cryptmgrkeys_p.h" #include "i18n_l.h" #include #include #include #include #include #include GWEN_INHERIT(GWEN_CRYPTMGR, GWEN_CRYPTMGR_KEYS); GWEN_CRYPTMGR *GWEN_CryptMgrKeys_new(const char *localName, GWEN_CRYPT_KEY *localKey, const char *peerName, GWEN_CRYPT_KEY *peerKey, int ownKeys) { GWEN_CRYPTMGR *cm; GWEN_CRYPTMGR_KEYS *xcm; cm=GWEN_CryptMgr_new(); GWEN_NEW_OBJECT(GWEN_CRYPTMGR_KEYS, xcm); GWEN_INHERIT_SETDATA(GWEN_CRYPTMGR, GWEN_CRYPTMGR_KEYS, cm, xcm, GWEN_CryptMgrKeys_FreeData); if (localKey) { xcm->localKey=localKey; GWEN_CryptMgr_SetLocalKeyNumber(cm, GWEN_Crypt_Key_GetKeyNumber(localKey)); GWEN_CryptMgr_SetLocalKeyVersion(cm, GWEN_Crypt_Key_GetKeyVersion(localKey)); xcm->ownLocalKey=ownKeys; } else xcm->ownLocalKey=0; if (peerKey) { xcm->peerKey=peerKey; GWEN_CryptMgr_SetPeerKeyNumber(cm, GWEN_Crypt_Key_GetKeyNumber(peerKey)); GWEN_CryptMgr_SetPeerKeyVersion(cm, GWEN_Crypt_Key_GetKeyVersion(peerKey)); xcm->ownPeerKey=ownKeys; } else xcm->ownPeerKey=0; if (localName) GWEN_CryptMgr_SetLocalKeyName(cm, localName); if (peerName) GWEN_CryptMgr_SetPeerKeyName(cm, peerName); GWEN_CryptMgr_SetSignDataFn(cm, GWEN_CryptMgrKeys_SignData); GWEN_CryptMgr_SetVerifyDataFn(cm, GWEN_CryptMgrKeys_VerifyData); GWEN_CryptMgr_SetEncryptKeyFn(cm, GWEN_CryptMgrKeys_EncryptKey); GWEN_CryptMgr_SetDecryptKeyFn(cm, GWEN_CryptMgrKeys_DecryptKey); return cm; } GWENHYWFAR_CB void GWEN_CryptMgrKeys_FreeData(GWEN_UNUSED void *bp, void *p) { GWEN_CRYPTMGR_KEYS *xcm; xcm=(GWEN_CRYPTMGR_KEYS*) p; if (xcm->ownLocalKey) GWEN_Crypt_Key_free(xcm->localKey); if (xcm->ownPeerKey) GWEN_Crypt_Key_free(xcm->peerKey); } void GWEN_CryptMgrKeys_SetPeerKey(GWEN_CRYPTMGR *cm, GWEN_CRYPT_KEY *peerKey, int ownKey) { GWEN_CRYPTMGR_KEYS *xcm; assert(cm); xcm=GWEN_INHERIT_GETDATA(GWEN_CRYPTMGR, GWEN_CRYPTMGR_KEYS, cm); assert(xcm); if (xcm->ownPeerKey) GWEN_Crypt_Key_free(xcm->peerKey); xcm->peerKey=peerKey; xcm->ownPeerKey=ownKey; } GWENHYWFAR_CB int GWEN_CryptMgrKeys_SignData(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf) { GWEN_CRYPTMGR_KEYS *xcm; GWEN_MDIGEST *md; int rv; GWEN_BUFFER *tbuf; int ksize; uint32_t signatureLen; assert(cm); xcm=GWEN_INHERIT_GETDATA(GWEN_CRYPTMGR, GWEN_CRYPTMGR_KEYS, cm); assert(xcm); if (xcm->localKey==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No local key"); return GWEN_ERROR_GENERIC; } ksize=GWEN_Crypt_Key_GetKeySize(xcm->localKey); /* hash pData */ md=GWEN_MDigest_Rmd160_new(); rv=GWEN_MDigest_Begin(md); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); return rv; } rv=GWEN_MDigest_Update(md, pData, lData); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); return rv; } rv=GWEN_MDigest_End(md); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); return rv; } /* padd */ tbuf=GWEN_Buffer_new(0, ksize, 0, 1); GWEN_Buffer_AppendBytes(tbuf, (const char*)GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md)); GWEN_MDigest_free(md); GWEN_Padd_PaddWithIso9796_2(tbuf, ksize); /* sign */ GWEN_Buffer_AllocRoom(dbuf, ksize); signatureLen=GWEN_Buffer_GetMaxUnsegmentedWrite(dbuf); rv=GWEN_Crypt_Key_Sign(xcm->localKey, (uint8_t*)GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf), (uint8_t*)GWEN_Buffer_GetPosPointer(dbuf), &signatureLen); GWEN_Buffer_free(tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } GWEN_Buffer_IncrementPos(dbuf, signatureLen); GWEN_Buffer_AdjustUsedBytes(dbuf); return 0; } GWENHYWFAR_CB int GWEN_CryptMgrKeys_VerifyData(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, const uint8_t *pSignature, uint32_t lSignature) { GWEN_CRYPTMGR_KEYS *xcm; GWEN_MDIGEST *md; int rv; GWEN_BUFFER *tbuf; int ksize; uint32_t l; assert(cm); xcm=GWEN_INHERIT_GETDATA(GWEN_CRYPTMGR, GWEN_CRYPTMGR_KEYS, cm); assert(xcm); if (xcm->peerKey==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No peer key"); return GWEN_ERROR_GENERIC; } ksize=GWEN_Crypt_Key_GetKeySize(xcm->peerKey); /* the padding algo uses random numbers, so we must use the encrypt function and * compare the decoded and unpadded signature with the hash of the source data */ tbuf=GWEN_Buffer_new(0, ksize+16, 0, 1); l=GWEN_Buffer_GetMaxUnsegmentedWrite(tbuf); rv=GWEN_Crypt_Key_Encipher(xcm->peerKey, pSignature, lSignature, (uint8_t*)GWEN_Buffer_GetPosPointer(tbuf), &l); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_IncrementPos(tbuf, l); GWEN_Buffer_AdjustUsedBytes(tbuf); /* unpadd */ rv=GWEN_Padd_UnpaddWithIso9796_2(tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } /* tbuf now contains the hash */ /* hash source data */ md=GWEN_MDigest_Rmd160_new(); rv=GWEN_MDigest_Begin(md); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(tbuf); return rv; } rv=GWEN_MDigest_Update(md, pData, lData); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(tbuf); return rv; } rv=GWEN_MDigest_End(md); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_MDigest_free(md); GWEN_Buffer_free(tbuf); return rv; } if (GWEN_MDigest_GetDigestSize(md)!=GWEN_Buffer_GetUsedBytes(tbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Invalid signature"); GWEN_MDigest_free(md); GWEN_Buffer_free(tbuf); return GWEN_ERROR_VERIFY; } if (memcmp(GWEN_MDigest_GetDigestPtr(md), GWEN_Buffer_GetStart(tbuf), GWEN_MDigest_GetDigestSize(md))!=0) { DBG_ERROR(GWEN_LOGDOMAIN, "Invalid signature"); GWEN_MDigest_free(md); GWEN_Buffer_free(tbuf); return GWEN_ERROR_VERIFY; } GWEN_MDigest_free(md); GWEN_Buffer_free(tbuf); return 0; } GWENHYWFAR_CB int GWEN_CryptMgrKeys_EncryptKey(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf) { GWEN_CRYPTMGR_KEYS *xcm; int rv; GWEN_BUFFER *tbuf; int ksize; uint32_t l; assert(cm); xcm=GWEN_INHERIT_GETDATA(GWEN_CRYPTMGR, GWEN_CRYPTMGR_KEYS, cm); assert(xcm); if (xcm->peerKey==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No peer key"); return GWEN_ERROR_GENERIC; } ksize=GWEN_Crypt_Key_GetKeySize(xcm->peerKey); /* padd key data */ tbuf=GWEN_Buffer_new(0, ksize, 0, 1); GWEN_Buffer_AppendBytes(tbuf, (const char*) pData, lData); rv=GWEN_Padd_PaddWithIso9796_2(tbuf, ksize); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AllocRoom(dbuf, ksize); l=GWEN_Buffer_GetMaxUnsegmentedWrite(dbuf); rv=GWEN_Crypt_Key_Encipher(xcm->peerKey, (const uint8_t*)GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf), (uint8_t*)GWEN_Buffer_GetPosPointer(dbuf), &l); GWEN_Buffer_free(tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } GWEN_Buffer_IncrementPos(dbuf, l); GWEN_Buffer_AdjustUsedBytes(dbuf); return 0; } GWENHYWFAR_CB int GWEN_CryptMgrKeys_DecryptKey(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf) { GWEN_CRYPTMGR_KEYS *xcm; int rv; GWEN_BUFFER *tbuf; int ksize; uint32_t l; assert(cm); xcm=GWEN_INHERIT_GETDATA(GWEN_CRYPTMGR, GWEN_CRYPTMGR_KEYS, cm); assert(xcm); if (xcm->localKey==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No local key"); return GWEN_ERROR_GENERIC; } ksize=GWEN_Crypt_Key_GetKeySize(xcm->localKey); tbuf=GWEN_Buffer_new(0, ksize, 0, 1); l=GWEN_Buffer_GetMaxUnsegmentedWrite(tbuf); rv=GWEN_Crypt_Key_Decipher(xcm->localKey, pData, lData, (uint8_t*)GWEN_Buffer_GetPosPointer(tbuf), &l); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_IncrementPos(tbuf, l); GWEN_Buffer_AdjustUsedBytes(tbuf); /* unpadd data */ rv=GWEN_Padd_UnpaddWithIso9796_2(tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendBuffer(dbuf, tbuf); GWEN_Buffer_free(tbuf); return 0; } gwenhywfar-4.15.2beta/src/cryptmsg/sigtail_p.h0000644000175000017500000000135012364015347016330 00000000000000/*************************************************************************** begin : Sun Nov 30 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPTMGR_SIGTAIL_P_H #define GWEN_CRYPTMGR_SIGTAIL_P_H #include "sigtail.h" #define GWEN_SIGTAIL_TLV_SIGNUM 0x01 #define GWEN_SIGTAIL_TLV_SIGNATURE 0x02 struct GWEN_SIGTAIL { GWEN_LIST_ELEMENT(GWEN_SIGTAIL) int signatureNumber; uint8_t *pSignature; uint32_t lSignature; }; #endif gwenhywfar-4.15.2beta/src/cryptmsg/sighead_p.h0000644000175000017500000000170112364015347016300 00000000000000/*************************************************************************** begin : Sun Nov 30 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPTMGR_SIGHEAD_P_H #define GWEN_CRYPTMGR_SIGHEAD_P_H #include "sighead.h" #define GWEN_SIGHEAD_TLV_KEYNAME 0x01 #define GWEN_SIGHEAD_TLV_KEYNUM 0x02 #define GWEN_SIGHEAD_TLV_KEYVER 0x03 #define GWEN_SIGHEAD_TLV_DATETIME 0x04 #define GWEN_SIGHEAD_TLV_SIGPROFILE 0x05 #define GWEN_SIGHEAD_TLV_SIGNUM 0x06 struct GWEN_SIGHEAD { GWEN_LIST_ELEMENT(GWEN_SIGHEAD) char *keyName; int keyNumber; int keyVersion; GWEN_TIME *dateTime; int signatureProfile; int signatureNumber; }; #endif gwenhywfar-4.15.2beta/src/cryptmsg/crypthead.c0000644000175000017500000001252712416477066016353 00000000000000/*************************************************************************** begin : Mon Dec 01 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "crypthead_p.h" #include "i18n_l.h" #include #include #include GWEN_LIST_FUNCTIONS(GWEN_CRYPTHEAD, GWEN_CryptHead) GWEN_CRYPTHEAD *GWEN_CryptHead_new(void) { GWEN_CRYPTHEAD *ch; GWEN_NEW_OBJECT(GWEN_CRYPTHEAD, ch); return ch; } void GWEN_CryptHead_free(GWEN_CRYPTHEAD *ch) { if (ch) { free(ch->keyName); if (ch->pKey &&ch->lKey) free(ch->pKey); GWEN_FREE_OBJECT(ch); } } GWEN_CRYPTHEAD *GWEN_CryptHead_fromBuffer(const uint8_t *p, uint32_t l) { if (p==NULL || l<1) { DBG_INFO(GWEN_LOGDOMAIN, "Bad tag"); return NULL; } else { GWEN_CRYPTHEAD *ch; const uint8_t *sp; uint32_t sl; ch=GWEN_CryptHead_new(); sp=p; sl=l; while(sl) { GWEN_TAG16 *subtag; uint32_t subtagLen; const char *subtagPtr; int i; subtag=GWEN_Tag16_fromBuffer2(sp, sl, 0); if (subtag==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Bad sub-tag"); GWEN_CryptHead_free(ch); return NULL; } subtagLen=GWEN_Tag16_GetTagLength(subtag); subtagPtr=(const char*)GWEN_Tag16_GetTagData(subtag); if (subtagLen && subtagPtr) { switch(GWEN_Tag16_GetTagType(subtag)) { case GWEN_CRYPTHEAD_TLV_KEYNAME: ch->keyName=(char*)malloc(subtagLen+1); memmove(ch->keyName, subtagPtr, subtagLen); ch->keyName[subtagLen]=0; break; case GWEN_CRYPTHEAD_TLV_KEYNUM: if (sscanf(subtagPtr, "%d", &i)==1) ch->keyNumber=i; break; case GWEN_CRYPTHEAD_TLV_KEYVER: if (sscanf(subtagPtr, "%d", &i)==1) ch->keyVersion=i; break; case GWEN_CRYPTHEAD_TLV_KEY: ch->pKey=(uint8_t*)malloc(subtagLen); assert(ch->pKey); memmove(ch->pKey, subtagPtr, subtagLen); ch->lKey=subtagLen; break; case GWEN_CRYPTHEAD_TLV_CRYPTPROFILE: if (sscanf(subtagPtr, "%d", &i)==1) ch->cryptProfile=i; break; default: DBG_WARN(GWEN_LOGDOMAIN, "Unknown tag %02x", GWEN_Tag16_GetTagType(subtag)); } } sp+=GWEN_Tag16_GetTagSize(subtag); sl-=GWEN_Tag16_GetTagSize(subtag); GWEN_Tag16_free(subtag); } /* while */ return ch; } } int GWEN_CryptHead_toBuffer(const GWEN_CRYPTHEAD *ch, GWEN_BUFFER *buf, uint8_t tagType) { char numbuf[32]; uint32_t pos; uint8_t *p; uint32_t l; GWEN_Buffer_AppendByte(buf, tagType); pos=GWEN_Buffer_GetPos(buf); GWEN_Buffer_AppendByte(buf, 0); GWEN_Buffer_AppendByte(buf, 0); if (ch->keyName) GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPTHEAD_TLV_KEYNAME, ch->keyName, -1, buf); snprintf(numbuf, sizeof(numbuf), "%d", ch->keyNumber); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPTHEAD_TLV_KEYNUM, numbuf, -1, buf); snprintf(numbuf, sizeof(numbuf), "%d", ch->keyVersion); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPTHEAD_TLV_KEYVER, numbuf, -1, buf); if (ch->pKey && ch->lKey) GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPTHEAD_TLV_KEY, (const char*)ch->pKey, ch->lKey, buf); snprintf(numbuf, sizeof(numbuf), "%d", ch->cryptProfile); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPTHEAD_TLV_CRYPTPROFILE, numbuf, -1, buf); /* write size */ l=GWEN_Buffer_GetPos(buf)-pos-2; p=(uint8_t*)GWEN_Buffer_GetStart(buf)+pos; *(p++)=l & 0xff; *p=(l>>8) & 0xff; return 0; } const char *GWEN_CryptHead_GetKeyName(const GWEN_CRYPTHEAD *ch) { assert(ch); return ch->keyName; } void GWEN_CryptHead_SetKeyName(GWEN_CRYPTHEAD *ch, const char *s) { assert(ch); free(ch->keyName); if (s) ch->keyName=strdup(s); else ch->keyName=NULL; } int GWEN_CryptHead_GetKeyNumber(const GWEN_CRYPTHEAD *ch) { assert(ch); return ch->keyNumber; } void GWEN_CryptHead_SetKeyNumber(GWEN_CRYPTHEAD *ch, int i) { assert(ch); ch->keyNumber=i; } int GWEN_CryptHead_GetKeyVersion(const GWEN_CRYPTHEAD *ch) { assert(ch); return ch->keyVersion; } void GWEN_CryptHead_SetKeyVersion(GWEN_CRYPTHEAD *ch, int i) { assert(ch); ch->keyVersion=i; } int GWEN_CryptHead_GetCryptProfile(const GWEN_CRYPTHEAD *ch) { assert(ch); return ch->cryptProfile; } void GWEN_CryptHead_SetCryptProfile(GWEN_CRYPTHEAD *ch, int i) { assert(ch); ch->cryptProfile=i; } const uint8_t *GWEN_CryptHead_GetKeyPtr(const GWEN_CRYPTHEAD *ch) { assert(ch); return ch->pKey; } uint32_t GWEN_CryptHead_GetKeyLen(const GWEN_CRYPTHEAD *ch) { assert(ch); return ch->lKey; } void GWEN_CryptHead_SetKey(GWEN_CRYPTHEAD *ch, const uint8_t *p, uint32_t l) { assert(ch); if (ch->pKey && ch->lKey) free(ch->pKey); if (p && l) { ch->pKey=(uint8_t*)malloc(l); assert(ch->pKey); memmove(ch->pKey, p, l); ch->lKey=l; } else { ch->pKey=NULL; ch->lKey=0; } } gwenhywfar-4.15.2beta/src/cryptmsg/sigtail.h0000644000175000017500000000252312364015347016014 00000000000000/*************************************************************************** begin : Sun Nov 30 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPTMGR_SIGTAIL_H #define GWEN_CRYPTMGR_SIGTAIL_H #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_SIGTAIL GWEN_SIGTAIL; GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_SIGTAIL, GWEN_SigTail, GWENHYWFAR_API) GWEN_SIGTAIL *GWEN_SigTail_new(void); void GWEN_SigTail_free(GWEN_SIGTAIL *st); GWEN_SIGTAIL *GWEN_SigTail_fromBuffer(const uint8_t *p, uint32_t l); int GWEN_SigTail_toBuffer(const GWEN_SIGTAIL *st, GWEN_BUFFER *buf, uint8_t tagType); const uint8_t *GWEN_SigTail_GetSignaturePtr(const GWEN_SIGTAIL *st); uint32_t GWEN_SigTail_GetSignatureLen(const GWEN_SIGTAIL *st); void GWEN_SigTail_SetSignature(GWEN_SIGTAIL *st, const uint8_t *p, uint32_t l); int GWEN_SigTail_GetSignatureNumber(const GWEN_SIGTAIL *st); void GWEN_SigTail_SetSignatureNumber(GWEN_SIGTAIL *st, int i); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/cryptmsg/cryptmgr.c0000644000175000017500000005142012416477066016232 00000000000000/*************************************************************************** begin : Mon Dec 01 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "cryptmgr_p.h" #include "i18n_l.h" #include #include #include #include #include #include #include #include #include GWEN_INHERIT_FUNCTIONS(GWEN_CRYPTMGR) GWEN_CRYPTMGR *GWEN_CryptMgr_new(void) { GWEN_CRYPTMGR *cm; GWEN_NEW_OBJECT(GWEN_CRYPTMGR, cm); GWEN_INHERIT_INIT(GWEN_CRYPTMGR, cm); return cm; } void GWEN_CryptMgr_free(GWEN_CRYPTMGR *cm) { if (cm) { GWEN_INHERIT_FINI(GWEN_CRYPTMGR, cm); free(cm->localKeyName); free(cm->peerKeyName); GWEN_FREE_OBJECT(cm); } } const char *GWEN_CryptMgr_GetLocalKeyName(const GWEN_CRYPTMGR *cm) { assert(cm); return cm->localKeyName; } void GWEN_CryptMgr_SetLocalKeyName(GWEN_CRYPTMGR *cm, const char *s) { assert(cm); free(cm->localKeyName); if (s) cm->localKeyName=strdup(s); else cm->localKeyName=NULL; } int GWEN_CryptMgr_GetLocalKeyNumber(const GWEN_CRYPTMGR *cm) { assert(cm); return cm->localKeyNumber; } void GWEN_CryptMgr_SetLocalKeyNumber(GWEN_CRYPTMGR *cm, int i) { assert(cm); cm->localKeyNumber=i; } int GWEN_CryptMgr_GetLocalKeyVersion(const GWEN_CRYPTMGR *cm) { assert(cm); return cm->localKeyVersion; } void GWEN_CryptMgr_SetLocalKeyVersion(GWEN_CRYPTMGR *cm, int i) { assert(cm); cm->localKeyVersion=i; } const char *GWEN_CryptMgr_GetPeerKeyName(const GWEN_CRYPTMGR *cm) { assert(cm); return cm->peerKeyName; } void GWEN_CryptMgr_SetPeerKeyName(GWEN_CRYPTMGR *cm, const char *s) { assert(cm); free(cm->peerKeyName); if (s) cm->peerKeyName=strdup(s); else cm->peerKeyName=NULL; } int GWEN_CryptMgr_GetPeerKeyNumber(const GWEN_CRYPTMGR *cm) { assert(cm); return cm->peerKeyNumber; } void GWEN_CryptMgr_SetPeerKeyNumber(GWEN_CRYPTMGR *cm, int i) { assert(cm); cm->peerKeyNumber=i; } int GWEN_CryptMgr_GetPeerKeyVersion(const GWEN_CRYPTMGR *cm) { assert(cm); return cm->peerKeyVersion; } void GWEN_CryptMgr_SetPeerKeyVersion(GWEN_CRYPTMGR *cm, int i) { assert(cm); cm->peerKeyVersion=i; } int GWEN_CryptMgr_GetCryptProfile(const GWEN_CRYPTMGR *cm) { assert(cm); return cm->cryptProfile; } void GWEN_CryptMgr_SetCryptProfile(GWEN_CRYPTMGR *cm, int i) { assert(cm); cm->cryptProfile=i; } int GWEN_CryptMgr_GetSignatureProfile(const GWEN_CRYPTMGR *cm) { assert(cm); return cm->signatureProfile; } void GWEN_CryptMgr_SetSignatureProfile(GWEN_CRYPTMGR *cm, int i) { assert(cm); cm->signatureProfile=i; } int GWEN_CryptMgr_SignData(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf) { assert(cm); if (cm->signDataFn) return cm->signDataFn(cm, pData, lData, dbuf); else return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_CryptMgr_EncryptKey(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf) { assert(cm); if (cm->encryptKeyFn) return cm->encryptKeyFn(cm, pData, lData, dbuf); else return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_CryptMgr_VerifyData(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, const uint8_t *pSignature, uint32_t lSignature) { assert(cm); if (cm->verifyDataFn) return cm->verifyDataFn(cm, pData, lData, pSignature, lSignature); else return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_CryptMgr_DecryptKey(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf) { assert(cm); if (cm->decryptKeyFn) return cm->decryptKeyFn(cm, pData, lData, dbuf); else return GWEN_ERROR_NOT_IMPLEMENTED; } GWEN_CRYPTMGR_SIGNDATA_FN GWEN_CryptMgr_SetSignDataFn(GWEN_CRYPTMGR *cm, GWEN_CRYPTMGR_SIGNDATA_FN f) { GWEN_CRYPTMGR_SIGNDATA_FN of; assert(cm); of=cm->signDataFn; cm->signDataFn=f; return of; } GWEN_CRYPTMGR_VERIFYDATA_FN GWEN_CryptMgr_SetVerifyDataFn(GWEN_CRYPTMGR *cm, GWEN_CRYPTMGR_VERIFYDATA_FN f) { GWEN_CRYPTMGR_VERIFYDATA_FN of; assert(cm); of=cm->verifyDataFn; cm->verifyDataFn=f; return of; } GWEN_CRYPTMGR_ENCRYPTKEY_FN GWEN_CryptMgr_SetEncryptKeyFn(GWEN_CRYPTMGR *cm, GWEN_CRYPTMGR_ENCRYPTKEY_FN f) { GWEN_CRYPTMGR_ENCRYPTKEY_FN of; assert(cm); of=cm->encryptKeyFn; cm->encryptKeyFn=f; return of; } GWEN_CRYPTMGR_DECRYPTKEY_FN GWEN_CryptMgr_SetDecryptKeyFn(GWEN_CRYPTMGR *cm, GWEN_CRYPTMGR_DECRYPTKEY_FN f) { GWEN_CRYPTMGR_DECRYPTKEY_FN of; assert(cm); of=cm->decryptKeyFn; cm->decryptKeyFn=f; return of; } int GWEN_CryptMgr_Sign(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf) { GWEN_SIGHEAD *sh; GWEN_SIGTAIL *st; GWEN_TIME *ti; uint32_t pos; uint32_t shPos; uint8_t *p; uint32_t l; int rv; GWEN_BUFFER *sigbuf; assert(cm); GWEN_Buffer_AppendByte(dbuf, GWEN_CRYPTMGR_TLV_SIGNEDOBJECT); pos=GWEN_Buffer_GetPos(dbuf); GWEN_Buffer_AppendByte(dbuf, 0); GWEN_Buffer_AppendByte(dbuf, 0); /* prepare signature head */ sh=GWEN_SigHead_new(); GWEN_SigHead_SetKeyName(sh, cm->localKeyName); GWEN_SigHead_SetKeyNumber(sh, cm->localKeyNumber); GWEN_SigHead_SetKeyVersion(sh, cm->localKeyVersion); ti=GWEN_CurrentTime(); GWEN_SigHead_SetDateTime(sh, ti); GWEN_Time_free(ti); GWEN_SigHead_SetSignatureProfile(sh, cm->signatureProfile); GWEN_SigHead_SetSignatureNumber(sh, 1); /* write signature head to buffer */ shPos=GWEN_Buffer_GetPos(dbuf); rv=GWEN_SigHead_toBuffer(sh, dbuf, GWEN_CRYPTMGR_TLV_SIGHEAD); GWEN_SigHead_free(sh); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } /* write data to buffer */ if (pData && lData) GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPTMGR_TLV_SIGDATA, (const char*)pData, lData, dbuf); /* sign data: signature head TLV + data TLV */ sigbuf=GWEN_Buffer_new(0, 300, 0, 1); p=((uint8_t*)GWEN_Buffer_GetStart(dbuf))+shPos; l=GWEN_Buffer_GetPos(dbuf)-shPos; rv=GWEN_CryptMgr_SignData(cm, p, l, sigbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(sigbuf); return rv; } /* create signature tail */ st=GWEN_SigTail_new(); GWEN_SigTail_SetSignature(st, (const uint8_t*)GWEN_Buffer_GetStart(sigbuf), GWEN_Buffer_GetUsedBytes(sigbuf)); GWEN_Buffer_free(sigbuf); GWEN_SigTail_SetSignatureNumber(st, 1); /* write signature tail */ rv=GWEN_SigTail_toBuffer(st, dbuf, GWEN_CRYPTMGR_TLV_SIGTAIL); GWEN_SigTail_free(st); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } /* write complete size */ l=GWEN_Buffer_GetPos(dbuf)-pos-2; p=(uint8_t*)GWEN_Buffer_GetStart(dbuf)+pos; *(p++)=l & 0xff; *p=(l>>8) & 0xff; return 0; } int GWEN_CryptMgr_Encrypt(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf) { GWEN_CRYPTHEAD *ch; uint32_t pos; uint8_t *p; uint32_t l; int rv; GWEN_BUFFER *cryptbuf; GWEN_BUFFER *tbuf; GWEN_CRYPT_KEY *mkey; assert(cm); /* generate a message key */ mkey=GWEN_Crypt_KeyBlowFish_Generate(GWEN_Crypt_CryptMode_Cbc, 256/8, 2); if (mkey==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Unable to generate BLOWFISH key"); return GWEN_ERROR_GENERIC; } GWEN_Buffer_AppendByte(dbuf, GWEN_CRYPTMGR_TLV_ENCRYPTEDOBJECT); pos=GWEN_Buffer_GetPos(dbuf); GWEN_Buffer_AppendByte(dbuf, 0); GWEN_Buffer_AppendByte(dbuf, 0); /* prepare signature head */ ch=GWEN_CryptHead_new(); GWEN_CryptHead_SetKeyName(ch, cm->peerKeyName); GWEN_CryptHead_SetKeyNumber(ch, cm->peerKeyNumber); GWEN_CryptHead_SetKeyVersion(ch, cm->peerKeyVersion); GWEN_CryptHead_SetCryptProfile(ch, cm->signatureProfile); /* encrypt key */ cryptbuf=GWEN_Buffer_new(0, lData+256, 0, 1); rv=GWEN_CryptMgr_EncryptKey(cm, GWEN_Crypt_KeyBlowFish_GetKeyDataPtr(mkey), GWEN_Crypt_KeyBlowFish_GetKeyDataLen(mkey), cryptbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(cryptbuf); GWEN_CryptHead_free(ch); GWEN_Crypt_Key_free(mkey); return rv; } GWEN_CryptHead_SetKey(ch, (const uint8_t*)GWEN_Buffer_GetStart(cryptbuf), GWEN_Buffer_GetUsedBytes(cryptbuf)); GWEN_Buffer_free(cryptbuf); /* write crypt head to buffer */ rv=GWEN_CryptHead_toBuffer(ch, dbuf, GWEN_CRYPTMGR_TLV_CRYPTHEAD); GWEN_CryptHead_free(ch); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Crypt_Key_free(mkey); return rv; } /* padd plain text data */ tbuf=GWEN_Buffer_new(0, lData+256, 0, 1); GWEN_Buffer_AppendBytes(tbuf, (const char*)pData, lData); GWEN_Padd_PaddWithAnsiX9_23(tbuf); /* encrypt with message key */ cryptbuf=GWEN_Buffer_new(0, lData+256, 0, 1); l=GWEN_Buffer_GetMaxUnsegmentedWrite(cryptbuf); rv=GWEN_Crypt_Key_Encipher(mkey, (const uint8_t*)GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf), (uint8_t*)GWEN_Buffer_GetStart(cryptbuf), &l); GWEN_Buffer_free(tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(cryptbuf); GWEN_Crypt_Key_free(mkey); return rv; } GWEN_Buffer_IncrementPos(cryptbuf, l); GWEN_Buffer_AdjustUsedBytes(cryptbuf); /* write encrypted data */ GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPTMGR_TLV_CRYPTDATA, GWEN_Buffer_GetStart(cryptbuf), GWEN_Buffer_GetUsedBytes(cryptbuf), dbuf); GWEN_Buffer_free(cryptbuf); GWEN_Crypt_Key_free(mkey); /* write complete size */ l=GWEN_Buffer_GetPos(dbuf)-pos-2; p=(uint8_t*)GWEN_Buffer_GetStart(dbuf)+pos; *(p++)=l & 0xff; *p=(l>>8) & 0xff; return 0; } int GWEN_CryptMgr_Verify(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf) { GWEN_TAG16 *tag; const uint8_t *p; uint32_t l; GWEN_SIGHEAD *sh=NULL; GWEN_SIGTAIL *st=NULL; const uint8_t *pSignedData=NULL; uint32_t lSignedData=0; int rv; assert(cm); if (lData<3) { DBG_ERROR(GWEN_LOGDOMAIN, "Too few bytes"); return GWEN_ERROR_BAD_DATA; } tag=GWEN_Tag16_fromBuffer2(pData, lData, 0); if (tag==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Data doesn't contain a valid TLV"); return GWEN_ERROR_BAD_DATA; } if (GWEN_Tag16_GetTagType(tag)!=GWEN_CRYPTMGR_TLV_SIGNEDOBJECT) { DBG_ERROR(GWEN_LOGDOMAIN, "Data does not contain asigned object"); GWEN_Tag16_free(tag); return GWEN_ERROR_BAD_DATA; } p=GWEN_Tag16_GetTagData(tag); l=GWEN_Tag16_GetTagLength(tag); /* read sighead */ if (l) { GWEN_TAG16 *subtag; subtag=GWEN_Tag16_fromBuffer2(p, l, 0); if (subtag) { if (GWEN_Tag16_GetTagType(subtag)==GWEN_CRYPTMGR_TLV_SIGHEAD) { sh=GWEN_SigHead_fromBuffer(GWEN_Tag16_GetTagData(subtag), GWEN_Tag16_GetTagLength(subtag)); if (sh) { pSignedData=p; lSignedData=GWEN_Tag16_GetTagSize(subtag); } } p+=GWEN_Tag16_GetTagSize(subtag); l-=GWEN_Tag16_GetTagSize(subtag); GWEN_Tag16_free(subtag); } } /* read and store signed data */ if (l) { GWEN_TAG16 *subtag; subtag=GWEN_Tag16_fromBuffer2(p, l, 0); if (subtag) { if (GWEN_Tag16_GetTagType(subtag)==GWEN_CRYPTMGR_TLV_SIGDATA) { GWEN_Buffer_AppendBytes(dbuf, GWEN_Tag16_GetTagData(subtag), GWEN_Tag16_GetTagLength(subtag)); if ((pSignedData+lSignedData)==p) { lSignedData+=GWEN_Tag16_GetTagSize(subtag); } else { DBG_ERROR(GWEN_LOGDOMAIN, "data TLV must follow sighead TLV"); GWEN_Tag16_free(subtag); GWEN_SigHead_free(sh); GWEN_Tag16_free(tag); return GWEN_ERROR_BAD_DATA; } } p+=GWEN_Tag16_GetTagSize(subtag); l-=GWEN_Tag16_GetTagSize(subtag); GWEN_Tag16_free(subtag); } } /* read sigtail (contains the signature) */ if (l) { GWEN_TAG16 *subtag; subtag=GWEN_Tag16_fromBuffer2(p, l, 0); if (subtag) { if (GWEN_Tag16_GetTagType(subtag)==GWEN_CRYPTMGR_TLV_SIGTAIL) { st=GWEN_SigTail_fromBuffer(GWEN_Tag16_GetTagData(subtag), GWEN_Tag16_GetTagLength(subtag)); } p+=GWEN_Tag16_GetTagSize(subtag); l-=GWEN_Tag16_GetTagSize(subtag); GWEN_Tag16_free(subtag); } } /* check for all needed components */ if (!(sh && st && pSignedData && lSignedData)) { DBG_ERROR(GWEN_LOGDOMAIN, "Signed object is not complete"); GWEN_SigTail_free(st); GWEN_SigHead_free(sh); GWEN_Tag16_free(tag); return GWEN_ERROR_BAD_DATA; } if (GWEN_SigHead_GetSignatureNumber(sh)!=GWEN_SigTail_GetSignatureNumber(st)) { DBG_ERROR(GWEN_LOGDOMAIN, "Sighead doesn't match sigtail"); GWEN_SigTail_free(st); GWEN_SigHead_free(sh); GWEN_Tag16_free(tag); return GWEN_ERROR_BAD_DATA; } /* store or check peer key info */ if (cm->peerKeyName==NULL) { /* store peer info */ GWEN_CryptMgr_SetPeerKeyName(cm, GWEN_SigHead_GetKeyName(sh)); GWEN_CryptMgr_SetPeerKeyNumber(cm, GWEN_SigHead_GetKeyNumber(sh)); GWEN_CryptMgr_SetPeerKeyVersion(cm, GWEN_SigHead_GetKeyVersion(sh)); } else { const char *s; /* compare peer info with expected info */ s=GWEN_SigHead_GetKeyName(sh); if (!(cm->peerKeyName && s && (strcasecmp(cm->peerKeyName, s)==0) && (cm->peerKeyNumber==GWEN_SigHead_GetKeyNumber(sh)) && (cm->peerKeyVersion==GWEN_SigHead_GetKeyVersion(sh)))) { DBG_ERROR(GWEN_LOGDOMAIN, "Unexpected peer key information in signature"); GWEN_SigTail_free(st); GWEN_SigHead_free(sh); GWEN_Tag16_free(tag); return GWEN_ERROR_BAD_DATA; } } /* verify signature */ rv=GWEN_CryptMgr_VerifyData(cm, pSignedData, lSignedData, GWEN_SigTail_GetSignaturePtr(st), GWEN_SigTail_GetSignatureLen(st)); GWEN_SigTail_free(st); GWEN_SigHead_free(sh); GWEN_Tag16_free(tag); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int GWEN_CryptMgr_Decrypt(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf) { GWEN_TAG16 *tag; const uint8_t *p; uint32_t l; GWEN_CRYPTHEAD *ch=NULL; const uint8_t *pEncryptedData=NULL; uint32_t lEncryptedData=0; int rv; GWEN_BUFFER *tbuf; GWEN_CRYPT_KEY *mkey; assert(cm); if (lData<3) { DBG_ERROR(GWEN_LOGDOMAIN, "Too few bytes"); return GWEN_ERROR_BAD_DATA; } tag=GWEN_Tag16_fromBuffer2(pData, lData, 0); if (tag==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Data doesn't contain a valid TLV"); return GWEN_ERROR_BAD_DATA; } if (GWEN_Tag16_GetTagType(tag)!=GWEN_CRYPTMGR_TLV_ENCRYPTEDOBJECT) { DBG_ERROR(GWEN_LOGDOMAIN, "Data does not contain an encrypted object"); GWEN_Tag16_free(tag); return GWEN_ERROR_BAD_DATA; } p=GWEN_Tag16_GetTagData(tag); l=GWEN_Tag16_GetTagLength(tag); /* read crypthead */ if (l) { GWEN_TAG16 *subtag; subtag=GWEN_Tag16_fromBuffer2(p, l, 0); if (subtag) { if (GWEN_Tag16_GetTagType(subtag)==GWEN_CRYPTMGR_TLV_CRYPTHEAD) { ch=GWEN_CryptHead_fromBuffer(GWEN_Tag16_GetTagData(subtag), GWEN_Tag16_GetTagLength(subtag)); } p+=GWEN_Tag16_GetTagSize(subtag); l-=GWEN_Tag16_GetTagSize(subtag); GWEN_Tag16_free(subtag); } } /* read encrypted data */ if (l) { GWEN_TAG16 *subtag; subtag=GWEN_Tag16_fromBuffer2(p, l, 0); if (subtag) { if (GWEN_Tag16_GetTagType(subtag)==GWEN_CRYPTMGR_TLV_CRYPTDATA) { pEncryptedData=GWEN_Tag16_GetTagData(subtag); lEncryptedData=GWEN_Tag16_GetTagLength(subtag); } p+=GWEN_Tag16_GetTagSize(subtag); l-=GWEN_Tag16_GetTagSize(subtag); GWEN_Tag16_free(subtag); } } /* check for all needed components */ if (!(ch && pEncryptedData && lEncryptedData)) { DBG_ERROR(GWEN_LOGDOMAIN, "Encrypted object is not complete"); GWEN_CryptHead_free(ch); GWEN_Tag16_free(tag); return GWEN_ERROR_BAD_DATA; } /* store or check peer key info */ if (cm->localKeyName) { const char *s; /* compare peer info with expected info */ s=GWEN_CryptHead_GetKeyName(ch); if (!(cm->localKeyName && s && (strcasecmp(cm->localKeyName, s)==0) && (cm->localKeyNumber==GWEN_CryptHead_GetKeyNumber(ch)) && (cm->localKeyVersion==GWEN_CryptHead_GetKeyVersion(ch)))) { DBG_ERROR(GWEN_LOGDOMAIN, "Unexpected local key information in signature"); GWEN_CryptHead_free(ch); GWEN_Tag16_free(tag); return GWEN_ERROR_BAD_DATA; } } /* decrypt message key */ tbuf=GWEN_Buffer_new(0, GWEN_CryptHead_GetKeyLen(ch), 0, 1); rv=GWEN_CryptMgr_DecryptKey(cm, GWEN_CryptHead_GetKeyPtr(ch), GWEN_CryptHead_GetKeyLen(ch), tbuf); GWEN_CryptHead_free(ch); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); GWEN_Tag16_free(tag); return rv; } /* create message key */ mkey=GWEN_Crypt_KeyBlowFish_fromData(GWEN_Crypt_CryptMode_Cbc, 256/8, (const uint8_t*) GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf)); GWEN_Buffer_free(tbuf); if (mkey==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Unable to create BLOWFISH key from received data"); GWEN_Tag16_free(tag); return GWEN_ERROR_BAD_DATA; } /* decrypt data with message key */ tbuf=GWEN_Buffer_new(0, lEncryptedData+256, 0, 1); l=GWEN_Buffer_GetMaxUnsegmentedWrite(tbuf); rv=GWEN_Crypt_Key_Decipher(mkey, pEncryptedData, lEncryptedData, (uint8_t*)GWEN_Buffer_GetStart(tbuf), &l); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); GWEN_Crypt_Key_free(mkey); GWEN_Tag16_free(tag); return rv; } GWEN_Buffer_IncrementPos(tbuf, l); GWEN_Buffer_AdjustUsedBytes(tbuf); /* unpadd data */ rv=GWEN_Padd_UnpaddWithAnsiX9_23(tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); GWEN_Crypt_Key_free(mkey); GWEN_Tag16_free(tag); return rv; } /* store data */ GWEN_Buffer_AppendBuffer(dbuf, tbuf); GWEN_Buffer_free(tbuf); GWEN_Crypt_Key_free(mkey); GWEN_Tag16_free(tag); return 0; } int GWEN_CryptMgr_Encode(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf) { GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, lData, 0, 1); /* create signed object */ DBG_INFO(GWEN_LOGDOMAIN, "Signing data"); rv=GWEN_CryptMgr_Sign(cm, pData, lData, tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } /* create encrypted object (containing a signed object in this case) */ DBG_INFO(GWEN_LOGDOMAIN, "Encrypting data"); rv=GWEN_CryptMgr_Encrypt(cm, (const uint8_t*)GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf), dbuf); GWEN_Buffer_free(tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int GWEN_CryptMgr_Decode(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf) { GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, lData, 0, 1); /* decrypt encrypted object */ DBG_INFO(GWEN_LOGDOMAIN, "Decrypting data"); rv=GWEN_CryptMgr_Decrypt(cm, pData, lData, tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } /* verify signature, copy signed data to dbuf in the process */ DBG_INFO(GWEN_LOGDOMAIN, "Verifying data"); rv=GWEN_CryptMgr_Verify(cm, (const uint8_t*)GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf), dbuf); GWEN_Buffer_free(tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } gwenhywfar-4.15.2beta/src/cryptmsg/cryptmgr_p.h0000644000175000017500000000222212364015347016542 00000000000000/*************************************************************************** begin : Mon Dec 01 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPTMSG_CRYPTMSG_P_H #define GWEN_CRYPTMSG_CRYPTMSG_P_H #define GWEN_CRYPTMGR_TLV_SIGHEAD 0x21 #define GWEN_CRYPTMGR_TLV_SIGTAIL 0x22 #define GWEN_CRYPTMGR_TLV_SIGDATA 0x23 #define GWEN_CRYPTMGR_TLV_CRYPTHEAD 0x21 #define GWEN_CRYPTMGR_TLV_CRYPTDATA 0x22 #include "cryptmgr_be.h" struct GWEN_CRYPTMGR { GWEN_INHERIT_ELEMENT(GWEN_CRYPTMGR) char *localKeyName; int localKeyNumber; int localKeyVersion; char *peerKeyName; int peerKeyNumber; int peerKeyVersion; int cryptProfile; int signatureProfile; GWEN_CRYPTMGR_SIGNDATA_FN signDataFn; GWEN_CRYPTMGR_ENCRYPTKEY_FN encryptKeyFn; GWEN_CRYPTMGR_VERIFYDATA_FN verifyDataFn; GWEN_CRYPTMGR_DECRYPTKEY_FN decryptKeyFn; }; #endif gwenhywfar-4.15.2beta/src/testlib.c0000644000175000017500000002125112416477066014160 00000000000000 #include #include #include #include #include #include #include #include #include #include "gwenhywfar.h" int check1() { const char *testString="01234567890123456789"; int rv; GWEN_BUFFER *buf1; GWEN_BUFFER *buf2; const char *p1, *p2; int i; int len; fprintf(stderr, "Check 1 ..."); buf1=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Base64_Encode((const unsigned char*)testString, strlen(testString), buf1, 0); if (rv) { fprintf(stderr, "FAILED: Could not encode.\n"); return 2; } buf2=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Base64_Decode((const unsigned char*)GWEN_Buffer_GetStart(buf1), 0, buf2); if (rv) { fprintf(stderr, "FAILED: Could not decode.\n"); return 2; } p1=testString; len=strlen(testString); p2=GWEN_Buffer_GetStart(buf2); if (GWEN_Buffer_GetUsedBytes(buf2)!=len) { fprintf(stderr, "Data differs in size\n"); return 3; } rv=0; for (i=0; i1) cmd=argv[1]; else cmd="check"; if (strcasecmp(cmd, "check")==0) { rv=check1() || check2() || test_gui(0) || check_directory() || check_list() || check_constlist() || print_paths() ; } else if (strcasecmp(cmd, "gui")==0) { rv=test_gui(1); } else { fprintf(stderr, "Unknown command \"%s\"\n", cmd); return 1; } return rv; } gwenhywfar-4.15.2beta/src/Makefile.am0000644000175000017500000000422412416477055014401 00000000000000INCLUDES= -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/html \ -I$(top_srcdir)/src/parser $(all_includes) AM_CFLAGS=$(visibility_cflags) SUBDIRS = base sio os parser crypt3 crypttoken gui cryptmsg html sar DIST_SUBDIRS=base sio os parser crypt3 crypttoken gui cryptmsg html sar gparser DEFS += \ -DBUILDING_GWENHYWFAR \ -DGWEN_PREFIX_DIR=\"$(prefix)\" \ -DGWEN_SYSCONF_DIR=\"@gwenhywfar_cfg_searchdir@\" \ -DLOCALEDIR=\"@gwenhywfar_locale_searchdir@\" \ -DLIBDIR=\"$(libdir)\" \ -DGWENHYWFAR_SO_EFFECTIVE_STR=\"$(GWENHYWFAR_SO_EFFECTIVE)\" \ -DGWEN_DATADIR=\"$(gwenhywfar_data_searchdir)\" \ -DGWEN_SYSDATADIR=\"$(gwenhywfar_sysdata_searchdir)\" \ -DPLUGINDIR=\"$(gwenhywfar_plugin_searchdir)\" # Note: The symbol "DATADIR" is already used by some Windows header, # so we have to name this differently here. EXTRA_DIST=\ types.h.in \ version.h.in \ ressource.rc.in ressource.rc # Before compiling the sources, first built these files BUILT_SOURCES = types.h version.h iheaderdir=$(gwenhywfar_headerdir_am)/gwenhywfar iheader_HEADERS=\ gwenhywfar.h \ gwenhywfarapi.h \ types.h \ version.h noinst_HEADERS=\ binreloc.h lib_LTLIBRARIES=libgwenhywfar.la libgwenhywfar_la_SOURCES=\ binreloc.c \ gwenhywfar.c libgwenhywfar_la_LIBADD=\ base/libbase.la \ crypt3/libcrypt3.la \ crypttoken/libcrypttoken.la \ cryptmsg/libcryptmsg.la \ sio/libsio.la \ os/libos.la \ parser/libparser.la \ html/libgwenhtml.la \ gui/libgui.la \ sar/libsar.la $(i18n_libs) $(ICONV_LIBS) $(LIBGCRYPT_LIBS) $(LIBGNUTLS_LIBS) $(rt_libs) $(all_libraries) noinst_PROGRAMS=testlib testlib_SOURCES=testlib.c testlib_LDADD=libgwenhywfar.la libgwenhywfar_la_LDFLAGS= \ -no-undefined $(STRIPALL) $(ressource_ldflags) \ -version-info \ $(GWENHYWFAR_SO_CURRENT):$(GWENHYWFAR_SO_REVISION):$(GWENHYWFAR_SO_AGE) TESTS = testlib sources: for f in $(libgwenhywfar_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done ; ressource.o: ressource.rc $(RC) -o $@ $< gwenhywfar-4.15.2beta/src/version.h0000644000175000017500000000407712634022442014175 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Wed Sep 24 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_VERSION_H #define GWENHYWFAR_VERSION_H #define GWEN_VERSION_MAJOR 4 #define GWENHYWFAR_VERSION_MAJOR 4 #define GWENHYWFAR_VERSION_MINOR 15 #define GWENHYWFAR_VERSION_PATCHLEVEL 2 #define GWENHYWFAR_VERSION_BUILD 0 #define GWENHYWFAR_VERSION_TAG "beta" #define GWENHYWFAR_VERSION_FULL_STRING "4.15.2beta-0" #define GWENHYWFAR_VERSION_STRING "4.15.2" #define GWENHYWFAR_SO_EFFECTIVE 60 #define GWENHYWFAR_SO_EFFECTIVE_STR "60" #endif /* GWENHYWFAR_VERSION_H */ gwenhywfar-4.15.2beta/src/crypttoken/0000755000175000017500000000000012643267236014625 500000000000000gwenhywfar-4.15.2beta/src/crypttoken/ct_keyinfo.h0000644000175000017500000001130012416477066017045 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: crypttoken.h 1113 2007-01-10 09:14:16Z martin $ begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPT_TOKEN_KEYINFO_H #define GWEN_CRYPT_TOKEN_KEYINFO_H #include #include typedef struct GWEN_CRYPT_TOKEN_KEYINFO GWEN_CRYPT_TOKEN_KEYINFO; #ifdef __cplusplus extern "C" { #endif GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_CRYPT_TOKEN_KEYINFO, GWEN_Crypt_Token_KeyInfo, GWENHYWFAR_API) GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_CRYPT_TOKEN_KEYINFO, GWEN_Crypt_Token_KeyInfo, GWENHYWFAR_API) #ifdef __cplusplus } #endif /** @name Key Status * */ /*@{*/ typedef enum { GWEN_Crypt_Token_KeyStatusUnknown=-1, GWEN_Crypt_Token_KeyStatusFree=0, GWEN_Crypt_Token_KeyStatusNew, GWEN_Crypt_Token_KeyStatusActive } GWEN_CRYPT_TOKEN_KEYSTATUS; /*@}*/ /** @name Key Flags * */ /*@{*/ #define GWEN_CRYPT_TOKEN_KEYFLAGS_HASSTATUS 0x00010000 #define GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS 0x00020000 #define GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT 0x00040000 #define GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS 0x00080000 #define GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION 0x00100000 #define GWEN_CRYPT_TOKEN_KEYFLAGS_HASSIGNCOUNTER 0x00200000 #define GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER 0x00400000 #define GWEN_CRYPT_TOKEN_KEYFLAGS_ACTIONMASK 0x0000000f #define GWEN_CRYPT_TOKEN_KEYFLAGS_CANSIGN 0x00000001 #define GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY 0x00000002 #define GWEN_CRYPT_TOKEN_KEYFLAGS_CANENCIPHER 0x00000004 #define GWEN_CRYPT_TOKEN_KEYFLAGS_CANDECIPHER 0x00000008 /*@}*/ #include #include #ifdef __cplusplus extern "C" { #endif GWENHYWFAR_API GWEN_CRYPT_TOKEN_KEYINFO *GWEN_Crypt_Token_KeyInfo_new(uint32_t kid, GWEN_CRYPT_CRYPTALGOID a, int keySize); GWENHYWFAR_API void GWEN_Crypt_Token_KeyInfo_free(GWEN_CRYPT_TOKEN_KEYINFO *ki); GWENHYWFAR_API GWEN_CRYPT_TOKEN_KEYINFO *GWEN_Crypt_Token_KeyInfo_dup(const GWEN_CRYPT_TOKEN_KEYINFO *ki); GWENHYWFAR_API uint32_t GWEN_Crypt_Token_KeyInfo_GetKeyId(const GWEN_CRYPT_TOKEN_KEYINFO *ki); GWENHYWFAR_API const char *GWEN_Crypt_Token_KeyInfo_GetKeyDescr(const GWEN_CRYPT_TOKEN_KEYINFO *ki); GWENHYWFAR_API void GWEN_Crypt_Token_KeyInfo_SetKeyDescr(GWEN_CRYPT_TOKEN_KEYINFO *ki, const char *s); GWENHYWFAR_API GWEN_CRYPT_CRYPTALGOID GWEN_Crypt_Token_KeyInfo_GetCryptAlgoId(const GWEN_CRYPT_TOKEN_KEYINFO *ki); GWENHYWFAR_API int GWEN_Crypt_Token_KeyInfo_GetKeySize(const GWEN_CRYPT_TOKEN_KEYINFO *ki); GWENHYWFAR_API void GWEN_Crypt_Token_KeyInfo_SetKeySize(GWEN_CRYPT_TOKEN_KEYINFO *ki, int i); GWENHYWFAR_API uint32_t GWEN_Crypt_Token_KeyInfo_GetFlags(const GWEN_CRYPT_TOKEN_KEYINFO *ki); GWENHYWFAR_API void GWEN_Crypt_Token_KeyInfo_SetFlags(GWEN_CRYPT_TOKEN_KEYINFO *ki, uint32_t f); GWENHYWFAR_API void GWEN_Crypt_Token_KeyInfo_AddFlags(GWEN_CRYPT_TOKEN_KEYINFO *ki, uint32_t f); GWENHYWFAR_API void GWEN_Crypt_Token_KeyInfo_SubFlags(GWEN_CRYPT_TOKEN_KEYINFO *ki, uint32_t f); GWENHYWFAR_API const uint8_t *GWEN_Crypt_Token_KeyInfo_GetModulusData(const GWEN_CRYPT_TOKEN_KEYINFO *ki); GWENHYWFAR_API uint32_t GWEN_Crypt_Token_KeyInfo_GetModulusLen(const GWEN_CRYPT_TOKEN_KEYINFO *ki); GWENHYWFAR_API void GWEN_Crypt_Token_KeyInfo_SetModulus(GWEN_CRYPT_TOKEN_KEYINFO *ki, const uint8_t *p, uint32_t len); GWENHYWFAR_API const uint8_t *GWEN_Crypt_Token_KeyInfo_GetExponentData(const GWEN_CRYPT_TOKEN_KEYINFO *ki); GWENHYWFAR_API uint32_t GWEN_Crypt_Token_KeyInfo_GetExponentLen(const GWEN_CRYPT_TOKEN_KEYINFO *ki); GWENHYWFAR_API void GWEN_Crypt_Token_KeyInfo_SetExponent(GWEN_CRYPT_TOKEN_KEYINFO *ki, const uint8_t *p, uint32_t len); GWENHYWFAR_API uint32_t GWEN_Crypt_Token_KeyInfo_GetKeyNumber(const GWEN_CRYPT_TOKEN_KEYINFO *ki); GWENHYWFAR_API void GWEN_Crypt_Token_KeyInfo_SetKeyNumber(GWEN_CRYPT_TOKEN_KEYINFO *ki, uint32_t i); GWENHYWFAR_API uint32_t GWEN_Crypt_Token_KeyInfo_GetKeyVersion(const GWEN_CRYPT_TOKEN_KEYINFO *ki); GWENHYWFAR_API void GWEN_Crypt_Token_KeyInfo_SetKeyVersion(GWEN_CRYPT_TOKEN_KEYINFO *ki, uint32_t i); GWENHYWFAR_API uint32_t GWEN_Crypt_Token_KeyInfo_GetSignCounter(const GWEN_CRYPT_TOKEN_KEYINFO *ki); GWENHYWFAR_API void GWEN_Crypt_Token_KeyInfo_SetSignCounter(GWEN_CRYPT_TOKEN_KEYINFO *ki, uint32_t i); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/crypttoken/ctfile_p.h0000644000175000017500000001275512416477066016517 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: crypttoken.h 1113 2007-01-10 09:14:16Z martin $ begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPT_TOKEN_FILE_P_H #define GWEN_CRYPT_TOKEN_FILE_P_H #include "ctfile_be.h" #include #include #include typedef struct GWEN_CRYPT_TOKEN_FILE GWEN_CRYPT_TOKEN_FILE; struct GWEN_CRYPT_TOKEN_FILE { GWEN_CRYPT_TOKEN_CONTEXT_LIST *contextList; time_t ctime; time_t mtime; mode_t keyfile_mode; int fd; GWEN_FSLOCK *lock; GWEN_CRYPT_TOKEN_FILE_READ_FN readFn; GWEN_CRYPT_TOKEN_FILE_WRITE_FN writeFn; }; static GWENHYWFAR_CB void GWEN_Crypt_TokenFile_freeData(void *bp, void *p); static int GWEN_Crypt_TokenFile__OpenFile(GWEN_CRYPT_TOKEN *ct, int wr, uint32_t gid); static int GWEN_Crypt_TokenFile__CloseFile(GWEN_CRYPT_TOKEN *ct, uint32_t gid); static int GWEN_Crypt_TokenFile__Read(GWEN_CRYPT_TOKEN *ct, uint32_t gid); static int GWEN_Crypt_TokenFile__Write(GWEN_CRYPT_TOKEN *ct, int cr, uint32_t gid); static int GWEN_Crypt_TokenFile__ReadFile(GWEN_CRYPT_TOKEN *ct, uint32_t gid); static int GWEN_Crypt_TokenFile__WriteFile(GWEN_CRYPT_TOKEN *ct, int cr, uint32_t gid); static int GWEN_Crypt_TokenFile__ReloadIfNeeded(GWEN_CRYPT_TOKEN *ct, uint32_t gid); static GWEN_CRYPT_KEY *GWEN_Crypt_TokenFile__GetKey(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid); static int GWENHYWFAR_CB GWEN_Crypt_TokenFile_Create(GWEN_CRYPT_TOKEN *ct, uint32_t gid); static int GWENHYWFAR_CB GWEN_Crypt_TokenFile_Open(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid); static int GWENHYWFAR_CB GWEN_Crypt_TokenFile_Close(GWEN_CRYPT_TOKEN *ct, int abandon, uint32_t gid); static int GWENHYWFAR_CB GWEN_Crypt_TokenFile__GetKeyIdList(GWEN_CRYPT_TOKEN *ct, uint32_t *pIdList, uint32_t *pCount, uint32_t gid); static const GWEN_CRYPT_TOKEN_KEYINFO* GWENHYWFAR_CB GWEN_Crypt_TokenFile__GetKeyInfo(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t flags, uint32_t gid); static int GWENHYWFAR_CB GWEN_Crypt_TokenFile__SetKeyInfo(GWEN_CRYPT_TOKEN *ct, uint32_t id, const GWEN_CRYPT_TOKEN_KEYINFO *ki, uint32_t gid); static int GWENHYWFAR_CB GWEN_Crypt_TokenFile__GetContextIdList(GWEN_CRYPT_TOKEN *ct, uint32_t *pIdList, uint32_t *pCount, uint32_t gid); static const GWEN_CRYPT_TOKEN_CONTEXT* GWENHYWFAR_CB GWEN_Crypt_TokenFile__GetContext(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid); static int GWENHYWFAR_CB GWEN_Crypt_TokenFile__SetContext(GWEN_CRYPT_TOKEN *ct, uint32_t id, const GWEN_CRYPT_TOKEN_CONTEXT *nctx, uint32_t gid); static int GWENHYWFAR_CB GWEN_Crypt_TokenFile__Sign(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, uint8_t *pSignatureData, uint32_t *pSignatureLen, uint32_t *pSeqCounter, uint32_t gid); static int GWENHYWFAR_CB GWEN_Crypt_TokenFile__Verify(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, const uint8_t *pSignatureData, uint32_t signatureLen, uint32_t seqCounter, uint32_t gid); static int GWENHYWFAR_CB GWEN_Crypt_TokenFile__Encipher(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen, uint32_t gid); static int GWENHYWFAR_CB GWEN_Crypt_TokenFile__Decipher(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen, uint32_t gid); static int GWENHYWFAR_CB GWEN_Crypt_TokenFile__GenerateKey(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, const GWEN_CRYPT_CRYPTALGO *a, uint32_t gid); #endif gwenhywfar-4.15.2beta/src/crypttoken/ctplugin_be.h0000644000175000017500000000271112416477066017214 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: crypttoken.h 1113 2007-01-10 09:14:16Z martin $ begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPT_TOKEN_PLUGIN_BE_H #define GWEN_CRYPT_TOKEN_PLUGIN_BE_H #include typedef GWEN_CRYPT_TOKEN* GWENHYWFAR_CB (*GWEN_CRYPT_TOKEN_PLUGIN_CREATETOKEN_FN)(GWEN_PLUGIN *pl, const char *name); typedef int GWENHYWFAR_CB (*GWEN_CRYPT_TOKEN_PLUGIN_CHECKTOKEN_FN)(GWEN_PLUGIN *pl, GWEN_BUFFER *name); #ifdef __cplusplus extern "C" { #endif GWENHYWFAR_API GWEN_PLUGIN *GWEN_Crypt_Token_Plugin_new(GWEN_PLUGIN_MANAGER *mgr, GWEN_CRYPT_TOKEN_DEVICE devType, const char *typeName, const char *fileName); GWENHYWFAR_API GWEN_CRYPT_TOKEN_PLUGIN_CREATETOKEN_FN GWEN_Crypt_Token_Plugin_SetCreateTokenFn(GWEN_PLUGIN *pl, GWEN_CRYPT_TOKEN_PLUGIN_CREATETOKEN_FN fn); GWENHYWFAR_API GWEN_CRYPT_TOKEN_PLUGIN_CHECKTOKEN_FN GWEN_Crypt_Token_Plugin_SetCheckTokenFn(GWEN_PLUGIN *pl, GWEN_CRYPT_TOKEN_PLUGIN_CHECKTOKEN_FN fn); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/crypttoken/ctf_context_p.h0000644000175000017500000000236012364015347017550 00000000000000/*************************************************************************** begin : Wed Mar 16 2005 copyright : (C) 2005-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CTF_CONTEXT_P_H #define GWEN_CTF_CONTEXT_P_H #include "ctf_context_be.h" typedef struct GWEN_CTF_CONTEXT GWEN_CTF_CONTEXT; struct GWEN_CTF_CONTEXT { GWEN_CRYPT_KEY *localSignKey; GWEN_CRYPT_TOKEN_KEYINFO *localSignKeyInfo; GWEN_CRYPT_KEY *localCryptKey; GWEN_CRYPT_TOKEN_KEYINFO *localCryptKeyInfo; GWEN_CRYPT_KEY *remoteSignKey; GWEN_CRYPT_TOKEN_KEYINFO *remoteSignKeyInfo; GWEN_CRYPT_KEY *remoteCryptKey; GWEN_CRYPT_TOKEN_KEYINFO *remoteCryptKeyInfo; GWEN_CRYPT_KEY *localAuthKey; GWEN_CRYPT_TOKEN_KEYINFO *localAuthKeyInfo; GWEN_CRYPT_KEY *remoteAuthKey; GWEN_CRYPT_TOKEN_KEYINFO *remoteAuthKeyInfo; GWEN_CRYPT_KEY *tempLocalSignKey; GWEN_CRYPT_TOKEN_KEYINFO *tempLocalSignKeyInfo; }; static GWENHYWFAR_CB void GWEN_CTF_Context_freeData(void *bp, void *p); #endif gwenhywfar-4.15.2beta/src/crypttoken/ct.c0000644000175000017500000006371712416477066015337 00000000000000/*************************************************************************** begin : Wed Mar 16 2005 copyright : (C) 2005-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "ct_p.h" #include "i18n_l.h" #include #include #include GWEN_INHERIT_FUNCTIONS(GWEN_CRYPT_TOKEN) GWEN_LIST_FUNCTIONS(GWEN_CRYPT_TOKEN, GWEN_Crypt_Token) GWEN_LIST2_FUNCTIONS(GWEN_CRYPT_TOKEN, GWEN_Crypt_Token) GWEN_CRYPT_TOKEN *GWEN_Crypt_Token_new(GWEN_CRYPT_TOKEN_DEVICE dev, const char *typeName, const char *tokenName) { GWEN_CRYPT_TOKEN *ct; assert(typeName); GWEN_NEW_OBJECT(GWEN_CRYPT_TOKEN, ct); ct->refCount=1; GWEN_INHERIT_INIT(GWEN_CRYPT_TOKEN, ct); GWEN_LIST_INIT(GWEN_CRYPT_TOKEN, ct); ct->device=dev; ct->typeName=strdup(typeName); if (tokenName) ct->tokenName=strdup(tokenName); return ct; } void GWEN_Crypt_Token_free(GWEN_CRYPT_TOKEN *ct) { if (ct) { assert(ct->refCount); if (ct->refCount==1) { GWEN_LIST_FINI(GWEN_CRYPT_TOKEN, ct); GWEN_INHERIT_FINI(GWEN_CRYPT_TOKEN, ct); free(ct->tokenName); free(ct->typeName); ct->refCount=0; GWEN_FREE_OBJECT(ct); } else { ct->refCount--; } } } GWEN_CRYPT_TOKEN_DEVICE GWEN_Crypt_Token_GetDevice(const GWEN_CRYPT_TOKEN *ct) { assert(ct); assert(ct->refCount); return ct->device; } const char *GWEN_Crypt_Token_GetTypeName(const GWEN_CRYPT_TOKEN *ct) { assert(ct); assert(ct->refCount); return ct->typeName; } const char *GWEN_Crypt_Token_GetTokenName(const GWEN_CRYPT_TOKEN *ct) { assert(ct); assert(ct->refCount); return ct->tokenName; } void GWEN_Crypt_Token_SetTokenName(GWEN_CRYPT_TOKEN *ct, const char *s) { assert(ct); assert(ct->refCount); assert(s); free(ct->tokenName); ct->tokenName=strdup(s); } const char *GWEN_Crypt_Token_GetFriendlyName(const GWEN_CRYPT_TOKEN *ct) { assert(ct); assert(ct->refCount); return ct->friendlyName; } void GWEN_Crypt_Token_SetFriendlyName(GWEN_CRYPT_TOKEN *ct, const char *s) { assert(ct); assert(ct->refCount); assert(s); free(ct->friendlyName); ct->friendlyName=strdup(s); } uint32_t GWEN_Crypt_Token_GetFlags(const GWEN_CRYPT_TOKEN *ct) { assert(ct); assert(ct->refCount); return ct->flags; } void GWEN_Crypt_Token_SetFlags(GWEN_CRYPT_TOKEN *ct, uint32_t f) { assert(ct); assert(ct->refCount); ct->flags=f; } void GWEN_Crypt_Token_AddFlags(GWEN_CRYPT_TOKEN *ct, uint32_t f) { assert(ct); assert(ct->refCount); ct->flags|=f; } void GWEN_Crypt_Token_SubFlags(GWEN_CRYPT_TOKEN *ct, uint32_t f) { assert(ct); assert(ct->refCount); ct->flags&=~f; } uint32_t GWEN_Crypt_Token_GetModes(const GWEN_CRYPT_TOKEN *ct) { assert(ct); assert(ct->refCount); return ct->modes; } void GWEN_Crypt_Token_SetModes(GWEN_CRYPT_TOKEN *ct, uint32_t f) { assert(ct); assert(ct->refCount); ct->modes=f; } void GWEN_Crypt_Token_AddModes(GWEN_CRYPT_TOKEN *ct, uint32_t f) { assert(ct); assert(ct->refCount); ct->modes|=f; } void GWEN_Crypt_Token_SubModes(GWEN_CRYPT_TOKEN *ct, uint32_t f) { assert(ct); assert(ct->refCount); ct->modes&=~f; } int GWEN_Crypt_Token_Open(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid) { int rv; assert(ct); assert(ct->refCount); if (ct->openCount) { ct->openCount++; return 0; } if (ct->openFn) rv=ct->openFn(ct, admin, gid); else rv=GWEN_ERROR_NOT_IMPLEMENTED; if (rv==0) ct->openCount++; return rv; } int GWEN_Crypt_Token_Create(GWEN_CRYPT_TOKEN *ct, uint32_t gid) { int rv; assert(ct); assert(ct->refCount); if (ct->createFn) rv=ct->createFn(ct, gid); else rv=GWEN_ERROR_NOT_IMPLEMENTED; if (rv==0) ct->openCount++; return rv; } int GWEN_Crypt_Token_Close(GWEN_CRYPT_TOKEN *ct, int abandon, uint32_t gid) { assert(ct); assert(ct->refCount); if (ct->openCount>1 && !abandon) { ct->openCount--; return 0; } if (ct->closeFn) { int rv; rv=ct->closeFn(ct, abandon, gid); if (abandon) ct->openCount=0; else if (rv==0) ct->openCount--; return rv; } else return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_Crypt_Token_IsOpen(const GWEN_CRYPT_TOKEN *ct) { assert(ct); assert(ct->refCount); return (ct->openCount!=0); } int GWEN_Crypt_Token_GetKeyIdList(GWEN_CRYPT_TOKEN *ct, uint32_t *pIdList, uint32_t *pCount, uint32_t gid) { assert(ct); assert(ct->refCount); if (ct->openCount<1) return GWEN_ERROR_NOT_OPEN; if (ct->getKeyIdListFn) return ct->getKeyIdListFn(ct, pIdList, pCount, gid); else return GWEN_ERROR_NOT_IMPLEMENTED; } const GWEN_CRYPT_TOKEN_KEYINFO* GWEN_Crypt_Token_GetKeyInfo(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t flags, uint32_t gid) { assert(ct); assert(ct->refCount); if (ct->openCount<1) { DBG_INFO(GWEN_LOGDOMAIN, "Token not open"); return NULL; } if (ct->getKeyInfoFn) return ct->getKeyInfoFn(ct, id, flags, gid); else return NULL; } int GWEN_Crypt_Token_SetKeyInfo(GWEN_CRYPT_TOKEN *ct, uint32_t id, const GWEN_CRYPT_TOKEN_KEYINFO *ki, uint32_t gid) { assert(ct); assert(ct->refCount); if (ct->openCount<1) return GWEN_ERROR_NOT_OPEN; if (ct->setKeyInfoFn) return ct->setKeyInfoFn(ct, id, ki, gid); else return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_Crypt_Token_GetContextIdList(GWEN_CRYPT_TOKEN *ct, uint32_t *pIdList, uint32_t *pCount, uint32_t gid) { assert(ct); assert(ct->refCount); if (ct->openCount<1) return GWEN_ERROR_NOT_OPEN; if (ct->getContextIdListFn) return ct->getContextIdListFn(ct, pIdList, pCount, gid); else return GWEN_ERROR_NOT_IMPLEMENTED; } const GWEN_CRYPT_TOKEN_CONTEXT* GWEN_Crypt_Token_GetContext(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid) { assert(ct); assert(ct->refCount); if (ct->openCount<1) { DBG_INFO(GWEN_LOGDOMAIN, "Token not open"); return NULL; } if (ct->getContextFn) return ct->getContextFn(ct, id, gid); else return NULL; } int GWEN_Crypt_Token_SetContext(GWEN_CRYPT_TOKEN *ct, uint32_t id, const GWEN_CRYPT_TOKEN_CONTEXT *ctx, uint32_t gid) { assert(ct); assert(ct->refCount); if (ct->openCount<1) return GWEN_ERROR_NOT_OPEN; if (ct->setContextFn) return ct->setContextFn(ct, id, ctx, gid); else return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_Crypt_Token_Sign(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, uint8_t *pSignatureData, uint32_t *pSignatureLen, uint32_t *pSeqCounter, uint32_t gid) { assert(ct); assert(ct->refCount); if (ct->openCount<1) return GWEN_ERROR_NOT_OPEN; if (ct->signFn) return ct->signFn(ct, keyId, a, pInData, inLen, pSignatureData, pSignatureLen, pSeqCounter, gid); else return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_Crypt_Token_Verify(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, const uint8_t *pSignatureData, uint32_t signatureLen, uint32_t seqCounter, uint32_t gid) { assert(ct); assert(ct->refCount); if (ct->openCount<1) return GWEN_ERROR_NOT_OPEN; if (ct->verifyFn) return ct->verifyFn(ct, keyId, a, pInData, inLen, pSignatureData, signatureLen, seqCounter, gid); else return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_Crypt_Token_Encipher(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen, uint32_t gid) { assert(ct); assert(ct->refCount); if (ct->openCount<1) return GWEN_ERROR_NOT_OPEN; if (ct->encipherFn) return ct->encipherFn(ct, keyId, a, pInData, inLen, pOutData, pOutLen, gid); else return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_Crypt_Token_Decipher(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen, uint32_t gid) { assert(ct); assert(ct->refCount); if (ct->openCount<1) return GWEN_ERROR_NOT_OPEN; if (ct->decipherFn) return ct->decipherFn(ct, keyId, a, pInData, inLen, pOutData, pOutLen, gid); else return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_Crypt_Token_GenerateKey(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, const GWEN_CRYPT_CRYPTALGO *a, uint32_t gid) { assert(ct); assert(ct->refCount); if (ct->openCount<1) return GWEN_ERROR_NOT_OPEN; if (ct->generateKeyFn) return ct->generateKeyFn(ct, keyId, a, gid); else return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_Crypt_Token_ChangePin(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid) { assert(ct); assert(ct->refCount); if (ct->openCount<1) return GWEN_ERROR_NOT_OPEN; if (ct->changePinFn) return ct->changePinFn(ct, admin, gid); else return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_Crypt_Token_ActivateKey(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid) { assert(ct); assert(ct->refCount); if (ct->openCount<1) return GWEN_ERROR_NOT_OPEN; if (ct->activateKeyFn) return ct->activateKeyFn(ct, id ,gid); else return GWEN_ERROR_NOT_IMPLEMENTED; } GWEN_CRYPT_TOKEN_OPEN_FN GWEN_Crypt_Token_SetOpenFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_OPEN_FN f) { GWEN_CRYPT_TOKEN_OPEN_FN of; assert(ct); assert(ct->refCount); of=ct->openFn; ct->openFn=f; return of; } GWEN_CRYPT_TOKEN_CREATE_FN GWEN_Crypt_Token_SetCreateFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_CREATE_FN f) { GWEN_CRYPT_TOKEN_CREATE_FN of; assert(ct); assert(ct->refCount); of=ct->createFn; ct->createFn=f; return of; } GWEN_CRYPT_TOKEN_CLOSE_FN GWEN_Crypt_Token_SetCloseFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_CLOSE_FN f) { GWEN_CRYPT_TOKEN_CLOSE_FN of; assert(ct); assert(ct->refCount); of=ct->closeFn; ct->closeFn=f; return of; } GWEN_CRYPT_TOKEN_GETKEYIDLIST_FN GWEN_Crypt_Token_SetGetKeyIdListFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_GETKEYIDLIST_FN f) { GWEN_CRYPT_TOKEN_GETKEYIDLIST_FN of; assert(ct); assert(ct->refCount); of=ct->getKeyIdListFn; ct->getKeyIdListFn=f; return of; } GWEN_CRYPT_TOKEN_GETKEYINFO_FN GWEN_Crypt_Token_SetGetKeyInfoFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_GETKEYINFO_FN f) { GWEN_CRYPT_TOKEN_GETKEYINFO_FN of; assert(ct); assert(ct->refCount); of=ct->getKeyInfoFn; ct->getKeyInfoFn=f; return of; } GWEN_CRYPT_TOKEN_SETKEYINFO_FN GWEN_Crypt_Token_SetSetKeyInfoFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_SETKEYINFO_FN f) { GWEN_CRYPT_TOKEN_SETKEYINFO_FN of; assert(ct); assert(ct->refCount); of=ct->setKeyInfoFn; ct->setKeyInfoFn=f; return of; } GWEN_CRYPT_TOKEN_GETCONTEXTIDLIST_FN GWEN_Crypt_Token_SetGetContextIdListFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_GETCONTEXTIDLIST_FN f) { GWEN_CRYPT_TOKEN_GETCONTEXTIDLIST_FN of; assert(ct); assert(ct->refCount); of=ct->getContextIdListFn; ct->getContextIdListFn=f; return of; } GWEN_CRYPT_TOKEN_GETCONTEXT_FN GWEN_Crypt_Token_SetGetContextFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_GETCONTEXT_FN f) { GWEN_CRYPT_TOKEN_GETCONTEXT_FN of; assert(ct); assert(ct->refCount); of=ct->getContextFn; ct->getContextFn=f; return of; } GWEN_CRYPT_TOKEN_SETCONTEXT_FN GWEN_Crypt_Token_SetSetContextFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_SETCONTEXT_FN f) { GWEN_CRYPT_TOKEN_SETCONTEXT_FN of; assert(ct); assert(ct->refCount); of=ct->setContextFn; ct->setContextFn=f; return of; } GWEN_CRYPT_TOKEN_SIGN_FN GWEN_Crypt_Token_SetSignFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_SIGN_FN f) { GWEN_CRYPT_TOKEN_SIGN_FN of; assert(ct); assert(ct->refCount); of=ct->signFn; ct->signFn=f; return of; } GWEN_CRYPT_TOKEN_VERIFY_FN GWEN_Crypt_Token_SetVerifyFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_VERIFY_FN f) { GWEN_CRYPT_TOKEN_VERIFY_FN of; assert(ct); assert(ct->refCount); of=ct->verifyFn; ct->verifyFn=f; return of; } GWEN_CRYPT_TOKEN_ENCIPHER_FN GWEN_Crypt_Token_SetEncipherFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_ENCIPHER_FN f) { GWEN_CRYPT_TOKEN_ENCIPHER_FN of; assert(ct); assert(ct->refCount); of=ct->encipherFn; ct->encipherFn=f; return of; } GWEN_CRYPT_TOKEN_DECIPHER_FN GWEN_Crypt_Token_SetDecipherFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_DECIPHER_FN f) { GWEN_CRYPT_TOKEN_DECIPHER_FN of; assert(ct); assert(ct->refCount); of=ct->decipherFn; ct->decipherFn=f; return of; } GWEN_CRYPT_TOKEN_GENERATEKEY_FN GWEN_Crypt_Token_SetGenerateKeyFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_GENERATEKEY_FN f) { GWEN_CRYPT_TOKEN_GENERATEKEY_FN of; assert(ct); assert(ct->refCount); of=ct->generateKeyFn; ct->generateKeyFn=f; return of; } GWEN_CRYPT_TOKEN_CHANGEPIN_FN GWEN_Crypt_Token_SetChangePinFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_CHANGEPIN_FN f) { GWEN_CRYPT_TOKEN_CHANGEPIN_FN of; assert(ct); assert(ct->refCount); of=ct->changePinFn; ct->changePinFn=f; return of; } GWEN_CRYPT_TOKEN_ACTIVATEKEY_FN GWEN_Crypt_Token_SetActivateKeyFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_ACTIVATEKEY_FN f) { GWEN_CRYPT_TOKEN_ACTIVATEKEY_FN of; assert(ct); assert(ct->refCount); of=ct->activateKeyFn; ct->activateKeyFn=f; return of; } int GWEN_Crypt_Token__CreatePasswordName(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_PINTYPE pt, GWEN_BUFFER *nbuf) { const char *tname; const char *dname; tname=GWEN_Crypt_Token_GetTypeName(ct); assert(tname); dname=GWEN_Crypt_Token_GetTokenName(ct); if (!dname) { DBG_ERROR(GWEN_LOGDOMAIN, "Token has no name"); return GWEN_ERROR_INVALID; } GWEN_Buffer_AppendString(nbuf, "PASSWORD_"); GWEN_Buffer_AppendString(nbuf, tname); GWEN_Buffer_AppendString(nbuf, "_"); GWEN_Buffer_AppendString(nbuf, dname); if (pt==GWEN_Crypt_PinType_Manage) GWEN_Buffer_AppendString(nbuf, ":MANAGE"); return 0; } int GWEN_Crypt_Token_GetPin(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_PINTYPE pt, GWEN_CRYPT_PINENCODING pe, uint32_t flags, unsigned char *pwbuffer, unsigned int minLength, unsigned int maxLength, unsigned int *pinLength, uint32_t gid) { int rv; const char *dname; const char *mode; const char *numeric_warning = ""; char buffer[512]; GWEN_BUFFER *nameBuffer; assert(ct); assert(ct->refCount); dname=GWEN_Crypt_Token_GetFriendlyName(ct); if (!dname || !*dname) dname=GWEN_Crypt_Token_GetTokenName(ct); if (pt==GWEN_Crypt_PinType_Access) mode=I18N("access password"); else if (pt==GWEN_Crypt_PinType_Manage) mode=I18N("manager password"); else mode=I18N("password"); buffer[0]=0; buffer[sizeof(buffer)-1]=0; if (flags & GWEN_GUI_INPUT_FLAGS_NUMERIC) { numeric_warning = I18N("\nYou must only enter numbers, not letters."); } if (flags & GWEN_GUI_INPUT_FLAGS_CONFIRM) { snprintf(buffer, sizeof(buffer)-1, I18N("Please enter a new %s for \n" "%s\n" "The password must be at least %d characters long.%s" "" "Please enter a new %s for %s. " "The password must be at least %d characters long.%s" ""), mode, dname, minLength, numeric_warning, mode, dname, minLength, numeric_warning); } else { snprintf(buffer, sizeof(buffer)-1, I18N("Please enter the %s for \n" "%s\n" "%s" "Please enter the %s for %s.%s" ""), mode, dname, numeric_warning, mode, dname, numeric_warning); } nameBuffer=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Crypt_Token__CreatePasswordName(ct, pt, nameBuffer); rv=GWEN_Gui_GetPassword(flags, GWEN_Buffer_GetStart(nameBuffer), I18N("Enter Password"), buffer, (char*)pwbuffer, minLength, maxLength, gid); GWEN_Buffer_free(nameBuffer); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } *pinLength=strlen((char*)pwbuffer); if (pe!=GWEN_Crypt_PinEncoding_Ascii) { rv=GWEN_Crypt_TransformPin(GWEN_Crypt_PinEncoding_Ascii, pe, pwbuffer, maxLength, pinLength); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } return 0; } int GWEN_Crypt_Token_SetPinStatus(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_PINTYPE pt, GWEN_CRYPT_PINENCODING pe, GWEN_UNUSED uint32_t flags, const unsigned char *buffer, unsigned int pinLength, int isOk, uint32_t gid) { GWEN_BUFFER *nameBuffer; int rv; unsigned char ibuffer[256]; assert(ct); assert(ct->refCount); if (pe!=GWEN_Crypt_PinEncoding_Ascii) { if (pinLength>=sizeof(ibuffer)) { DBG_ERROR(GWEN_LOGDOMAIN, "Pin too long"); return GWEN_ERROR_BUFFER_OVERFLOW; } memset(ibuffer, 0, sizeof(ibuffer)); memmove(ibuffer, buffer, pinLength); rv=GWEN_Crypt_TransformPin(pe, GWEN_Crypt_PinEncoding_Ascii, ibuffer, sizeof(ibuffer)-1, &pinLength); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } buffer=ibuffer; } nameBuffer=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Crypt_Token__CreatePasswordName(ct, pt, nameBuffer); rv=GWEN_Gui_SetPasswordStatus(GWEN_Buffer_GetStart(nameBuffer), (const char*)buffer, isOk?GWEN_Gui_PasswordStatus_Ok: GWEN_Gui_PasswordStatus_Bad, gid); memset(ibuffer, 0, sizeof(ibuffer)); GWEN_Buffer_free(nameBuffer); return rv; } uint32_t GWEN_Crypt_Token_BeginEnterPin(GWEN_CRYPT_TOKEN *ct, GWEN_UNUSED GWEN_CRYPT_PINTYPE pt, uint32_t gid) { char buffer[512]; assert(ct); assert(ct->refCount); buffer[0]=0; buffer[sizeof(buffer)-1]=0; snprintf(buffer, sizeof(buffer)-1, "%s", I18N("Please enter your PIN into the card reader." "" "Please enter your PIN into the card reader." "")); return GWEN_Gui_ShowBox(GWEN_GUI_SHOWBOX_FLAGS_BEEP, I18N("Secure PIN Input"), buffer, gid); } int GWEN_Crypt_Token_EndEnterPin(GWEN_CRYPT_TOKEN *ct, GWEN_UNUSED GWEN_CRYPT_PINTYPE pt, GWEN_UNUSED int ok, uint32_t id) { assert(ct); assert(ct->refCount); GWEN_Gui_HideBox(id); return 0; } int GWEN_Crypt_Token_InsertToken(GWEN_CRYPT_TOKEN *ct, uint32_t gid) { int rv; char buffer[512]; const char *dname; assert(ct); assert(ct->refCount); buffer[0]=0; buffer[sizeof(buffer)-1]=0; dname=GWEN_Crypt_Token_GetFriendlyName(ct); if (!dname || !*dname) dname=GWEN_Crypt_Token_GetTokenName(ct); if (GWEN_Crypt_Token_GetDevice(ct)==GWEN_Crypt_Token_Device_File) snprintf(buffer, sizeof(buffer)-1, I18N("Please insert the security disc\nfor %s" "" "Please insert the security disc for %s" ""), dname, dname); else snprintf(buffer, sizeof(buffer)-1, I18N("Please insert the chip card\nfor %s" "" "Please insert the chip card for %s" ""), dname, dname); rv=GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_TYPE_WARN | GWEN_GUI_MSG_FLAGS_SEVERITY_NORMAL | GWEN_GUI_MSG_FLAGS_CONFIRM_B1, I18N("Insert Medium"), buffer, I18N("OK"), I18N("Abort"), 0, gid); if (rv==2) { DBG_ERROR(GWEN_LOGDOMAIN, "User aborted"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Aborted by user.")); return GWEN_ERROR_USER_ABORTED; } else if (rv!=1) { GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_TYPE_ERROR | GWEN_GUI_MSG_FLAGS_SEVERITY_DANGEROUS | GWEN_GUI_MSG_FLAGS_CONFIRM_B1, I18N("Error"), I18N("An internal error occurred."), I18N("Dismiss"), 0, 0, gid); return -1; } return 0; } int GWEN_Crypt_Token_InsertCorrectToken(GWEN_CRYPT_TOKEN *ct, uint32_t gid) { int rv; char buffer[512]; const char *dname; assert(ct); assert(ct->refCount); buffer[0]=0; buffer[sizeof(buffer)-1]=0; dname=GWEN_Crypt_Token_GetFriendlyName(ct); if (!dname || !*dname) dname=GWEN_Crypt_Token_GetTokenName(ct); if (GWEN_Crypt_Token_GetDevice(ct)==GWEN_Crypt_Token_Device_File) snprintf(buffer, sizeof(buffer)-1, I18N("Please insert the correct security disc\nfor %s" "" "Please insert the correct security disc for %s" ""), dname, dname); else { if (dname && *dname) { snprintf(buffer, sizeof(buffer)-1, I18N("The wrong chipcard has been inserted.\n" "Please insert the chipcard with the number\n" " %s\n" "into the card reader.\n" "" "

The wrong card has been inserted.

" "

Please insert the chipcard with the number" "%s into the card reader.

" ""), dname, dname); } else snprintf(buffer, sizeof(buffer)-1, I18N("Please insert the correct chipcard\nfor %s" "" "Please insert the correct chipcard for %s" ""), dname, dname); } rv=GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_TYPE_WARN | GWEN_GUI_MSG_FLAGS_SEVERITY_DANGEROUS | GWEN_GUI_MSG_FLAGS_CONFIRM_B1, I18N("Insert Medium"), buffer, I18N("OK"), I18N("Abort"), 0, gid); if (rv==2) { DBG_ERROR(GWEN_LOGDOMAIN, "User aborted"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Aborted by user.")); return GWEN_ERROR_USER_ABORTED; } else if (rv!=1) { GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_TYPE_ERROR | GWEN_GUI_MSG_FLAGS_SEVERITY_DANGEROUS | GWEN_GUI_MSG_FLAGS_CONFIRM_B1, I18N("Error"), I18N("An internal error occurred."), I18N("Dismiss"), 0, 0, gid); return -1; } return 0; } GWEN_CRYPT_TOKEN_DEVICE GWEN_Crypt_Token_Device_fromString(const char *s) { assert(s); if (strcasecmp(s, "none")==0) return GWEN_Crypt_Token_Device_None; else if (strcasecmp(s, "file")==0) return GWEN_Crypt_Token_Device_File; else if (strcasecmp(s, "card")==0) return GWEN_Crypt_Token_Device_Card; else if (strcasecmp(s, "any")==0) return GWEN_Crypt_Token_Device_Any; return GWEN_Crypt_Token_Device_Unknown; } const char *GWEN_Crypt_Token_Device_toString(GWEN_CRYPT_TOKEN_DEVICE d) { switch(d) { case GWEN_Crypt_Token_Device_None: return "none"; case GWEN_Crypt_Token_Device_File: return "file"; case GWEN_Crypt_Token_Device_Card: return "card"; case GWEN_Crypt_Token_Device_Any: return "any"; default: return "unknown"; } } gwenhywfar-4.15.2beta/src/crypttoken/ctplugin.h0000644000175000017500000000524212416477066016550 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: crypttoken.h 1113 2007-01-10 09:14:16Z martin $ begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPT_TOKEN_PLUGIN_H #define GWEN_CRYPT_TOKEN_PLUGIN_H #include #include #include #define GWEN_CRYPT_TOKEN_PLUGIN_TYPENAME "ct" #define GWEN_CRYPT_TOKEN_FOLDER "ct" #ifdef __cplusplus extern "C" { #endif GWENHYWFAR_API GWEN_CRYPT_TOKEN *GWEN_Crypt_Token_Plugin_CreateToken(GWEN_PLUGIN *pl, const char *name); /** *

This function is used to let a crypt token plugin check whether it * supports a given plugin.

*

Initially the given buffers may contain some values to narrow the * search. For chip cards the name argument may contain the serial * number of the card (if known). For file based crypt tokens this argument * must contain the path to the file to check.

* * This function should return one of the following error codes: *
    *
  • GWEN_SUCCESS: CryptToken is supported by this plugin, the buffers * for typeName, subTypeName and name are updated accordingly
  • *
  • GWEN_ERROR_CT_NOT_IMPLEMENTED: function not implmented
  • *
  • GWEN_ERROR_CT_NOT_SUPPORTED: medium not supported by this plugin
  • *
  • GWEN_ERROR_CT_BAD_NAME: Medium is supported but the name doesn't * match that of the currently checked medium
  • *
  • GWEN_ERROR_CT_IO_ERROR: any type of IO error occurred
  • *
  • other codes as appropriate
  • *
*/ GWENHYWFAR_API int GWEN_Crypt_Token_Plugin_CheckToken(GWEN_PLUGIN *pl, GWEN_BUFFER *name); GWENHYWFAR_API GWEN_CRYPT_TOKEN_DEVICE GWEN_Crypt_Token_Plugin_GetDeviceType(const GWEN_PLUGIN *pl); /** @name CryptManager * */ /*@{*/ /** * This function tries to find a token plugin which is able to handle the * token given by the device type and name. */ GWENHYWFAR_API int GWEN_Crypt_Token_PluginManager_CheckToken(GWEN_PLUGIN_MANAGER *cm, GWEN_CRYPT_TOKEN_DEVICE devt, GWEN_BUFFER *typeName, GWEN_BUFFER *tokenName, uint32_t guiid); GWENHYWFAR_API GWEN_PLUGIN_DESCRIPTION_LIST2 *GWEN_Crypt_Token_PluginManager_GetPluginDescrs(GWEN_PLUGIN_MANAGER *pm, GWEN_CRYPT_TOKEN_DEVICE devt); /*@}*/ #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/crypttoken/ct_context.h0000644000175000017500000002063412364015347017067 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "ct_context.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef CT_CONTEXT_H #define CT_CONTEXT_H #ifdef __cplusplus extern "C" { #endif /* needed system headers */ #include #include #include #include #include #include /* pre-headers */ #include typedef struct GWEN_CRYPT_TOKEN_CONTEXT GWEN_CRYPT_TOKEN_CONTEXT; GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_Crypt_Token_Context, GWENHYWFAR_API) GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_Crypt_Token_Context, GWENHYWFAR_API) GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_CRYPT_TOKEN_CONTEXT, GWENHYWFAR_API) /* post-headers */ /** Constructor. */ GWENHYWFAR_API GWEN_CRYPT_TOKEN_CONTEXT *GWEN_Crypt_Token_Context_new(void); /** Destructor. */ GWENHYWFAR_API void GWEN_Crypt_Token_Context_free(GWEN_CRYPT_TOKEN_CONTEXT *p_struct); GWENHYWFAR_API void GWEN_Crypt_Token_Context_Attach(GWEN_CRYPT_TOKEN_CONTEXT *p_struct); GWENHYWFAR_API GWEN_CRYPT_TOKEN_CONTEXT *GWEN_Crypt_Token_Context_dup(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct); /** Getter. * Use this function to get the member "id" */ GWENHYWFAR_API uint32_t GWEN_Crypt_Token_Context_GetId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct); /** Getter. * Use this function to get the member "signKeyId" */ GWENHYWFAR_API uint32_t GWEN_Crypt_Token_Context_GetSignKeyId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct); /** Getter. * Use this function to get the member "verifyKeyId" */ GWENHYWFAR_API uint32_t GWEN_Crypt_Token_Context_GetVerifyKeyId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct); /** Getter. * Use this function to get the member "encipherKeyId" */ GWENHYWFAR_API uint32_t GWEN_Crypt_Token_Context_GetEncipherKeyId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct); /** Getter. * Use this function to get the member "decipherKeyId" */ GWENHYWFAR_API uint32_t GWEN_Crypt_Token_Context_GetDecipherKeyId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct); /** Getter. * Use this function to get the member "authSignKeyId" */ GWENHYWFAR_API uint32_t GWEN_Crypt_Token_Context_GetAuthSignKeyId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct); /** Getter. * Use this function to get the member "authVerifyKeyId" */ GWENHYWFAR_API uint32_t GWEN_Crypt_Token_Context_GetAuthVerifyKeyId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct); /** Getter. * Use this function to get the member "tempSignKeyId" */ GWENHYWFAR_API uint32_t GWEN_Crypt_Token_Context_GetTempSignKeyId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct); /** Getter. * Use this function to get the member "serviceId" */ GWENHYWFAR_API const char *GWEN_Crypt_Token_Context_GetServiceId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct); /** Getter. * Use this function to get the member "userId" */ GWENHYWFAR_API const char *GWEN_Crypt_Token_Context_GetUserId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct); /** Getter. * Use this function to get the member "customerId" */ GWENHYWFAR_API const char *GWEN_Crypt_Token_Context_GetCustomerId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct); /** Getter. * Use this function to get the member "userName" */ GWENHYWFAR_API const char *GWEN_Crypt_Token_Context_GetUserName(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct); /** Getter. * Use this function to get the member "peerId" */ GWENHYWFAR_API const char *GWEN_Crypt_Token_Context_GetPeerId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct); /** Getter. * Use this function to get the member "peerName" */ GWENHYWFAR_API const char *GWEN_Crypt_Token_Context_GetPeerName(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct); /** Getter. * Use this function to get the member "address" */ GWENHYWFAR_API const char *GWEN_Crypt_Token_Context_GetAddress(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct); /** Getter. * Use this function to get the member "port" */ GWENHYWFAR_API int GWEN_Crypt_Token_Context_GetPort(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct); /** Getter. * Use this function to get the member "systemId" */ GWENHYWFAR_API const char *GWEN_Crypt_Token_Context_GetSystemId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct); /** Setter. * Use this function to set the member "id" */ GWENHYWFAR_API void GWEN_Crypt_Token_Context_SetId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "signKeyId" */ GWENHYWFAR_API void GWEN_Crypt_Token_Context_SetSignKeyId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "verifyKeyId" */ GWENHYWFAR_API void GWEN_Crypt_Token_Context_SetVerifyKeyId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "encipherKeyId" */ GWENHYWFAR_API void GWEN_Crypt_Token_Context_SetEncipherKeyId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "decipherKeyId" */ GWENHYWFAR_API void GWEN_Crypt_Token_Context_SetDecipherKeyId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "authSignKeyId" */ GWENHYWFAR_API void GWEN_Crypt_Token_Context_SetAuthSignKeyId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "authVerifyKeyId" */ GWENHYWFAR_API void GWEN_Crypt_Token_Context_SetAuthVerifyKeyId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "tempSignKeyId" */ GWENHYWFAR_API void GWEN_Crypt_Token_Context_SetTempSignKeyId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "serviceId" */ GWENHYWFAR_API void GWEN_Crypt_Token_Context_SetServiceId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "userId" */ GWENHYWFAR_API void GWEN_Crypt_Token_Context_SetUserId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "customerId" */ GWENHYWFAR_API void GWEN_Crypt_Token_Context_SetCustomerId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "userName" */ GWENHYWFAR_API void GWEN_Crypt_Token_Context_SetUserName(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "peerId" */ GWENHYWFAR_API void GWEN_Crypt_Token_Context_SetPeerId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "peerName" */ GWENHYWFAR_API void GWEN_Crypt_Token_Context_SetPeerName(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "address" */ GWENHYWFAR_API void GWEN_Crypt_Token_Context_SetAddress(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "port" */ GWENHYWFAR_API void GWEN_Crypt_Token_Context_SetPort(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, int p_src); /** Setter. * Use this function to set the member "systemId" */ GWENHYWFAR_API void GWEN_Crypt_Token_Context_SetSystemId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, const char *p_src); GWENHYWFAR_API GWEN_CRYPT_TOKEN_CONTEXT_LIST *GWEN_Crypt_Token_Context_List_dup(const GWEN_CRYPT_TOKEN_CONTEXT_LIST *p_src); GWENHYWFAR_API void GWEN_Crypt_Token_Context_ReadDb(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, GWEN_DB_NODE *p_db); GWENHYWFAR_API int GWEN_Crypt_Token_Context_WriteDb(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct, GWEN_DB_NODE *p_db); GWENHYWFAR_API GWEN_CRYPT_TOKEN_CONTEXT *GWEN_Crypt_Token_Context_fromDb(GWEN_DB_NODE *p_db); GWENHYWFAR_API int GWEN_Crypt_Token_Context_toDb(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct, GWEN_DB_NODE *p_db); GWENHYWFAR_API void GWEN_Crypt_Token_Context_ReadXml(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, GWEN_XMLNODE *p_db); GWENHYWFAR_API void GWEN_Crypt_Token_Context_WriteXml(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct, GWEN_XMLNODE *p_db); GWENHYWFAR_API void GWEN_Crypt_Token_Context_toXml(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct, GWEN_XMLNODE *p_db); GWENHYWFAR_API GWEN_CRYPT_TOKEN_CONTEXT *GWEN_Crypt_Token_Context_fromXml(GWEN_XMLNODE *p_db); GWENHYWFAR_API GWEN_CRYPT_TOKEN_CONTEXT *GWEN_Crypt_Token_Context_List_GetById(const GWEN_CRYPT_TOKEN_CONTEXT_LIST *p_list, uint32_t p_cmp); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/crypttoken/ct_be.h0000644000175000017500000002116412416477066016000 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: crypttoken.h 1113 2007-01-10 09:14:16Z martin $ begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPT_CRYPTTOKEN_BE_H #define GWEN_CRYPT_CRYPTTOKEN_BE_H #include #include #include #include GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_CRYPT_TOKEN, GWENHYWFAR_API) /** @name Prototypes for Virtual Functions * */ /*@{*/ typedef int GWENHYWFAR_CB (*GWEN_CRYPT_TOKEN_OPEN_FN)(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid); typedef int GWENHYWFAR_CB (*GWEN_CRYPT_TOKEN_CREATE_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t gid); typedef int GWENHYWFAR_CB (*GWEN_CRYPT_TOKEN_CLOSE_FN)(GWEN_CRYPT_TOKEN *ct, int abandon, uint32_t gid); typedef int GWENHYWFAR_CB (*GWEN_CRYPT_TOKEN_GETKEYIDLIST_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t *pIdList, uint32_t *pCount, uint32_t gid); typedef const GWEN_CRYPT_TOKEN_KEYINFO* GWENHYWFAR_CB (*GWEN_CRYPT_TOKEN_GETKEYINFO_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t flags, uint32_t gid); typedef int GWENHYWFAR_CB (*GWEN_CRYPT_TOKEN_SETKEYINFO_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t id, const GWEN_CRYPT_TOKEN_KEYINFO *ki, uint32_t gid); typedef int GWENHYWFAR_CB (*GWEN_CRYPT_TOKEN_GETCONTEXTIDLIST_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t *pIdList, uint32_t *pCount, uint32_t gid); typedef const GWEN_CRYPT_TOKEN_CONTEXT* GWENHYWFAR_CB (*GWEN_CRYPT_TOKEN_GETCONTEXT_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid); typedef int GWENHYWFAR_CB (*GWEN_CRYPT_TOKEN_SETCONTEXT_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t id, const GWEN_CRYPT_TOKEN_CONTEXT *ctx, uint32_t gid); typedef int GWENHYWFAR_CB (*GWEN_CRYPT_TOKEN_SIGN_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, uint8_t *pSignatureData, uint32_t *pSignatureLen, uint32_t *pSeqCounter, uint32_t gid); typedef int GWENHYWFAR_CB (*GWEN_CRYPT_TOKEN_VERIFY_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, const uint8_t *pSignatureData, uint32_t signatureLen, uint32_t seqCounter, uint32_t gid); typedef int GWENHYWFAR_CB (*GWEN_CRYPT_TOKEN_ENCIPHER_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen, uint32_t gid); typedef int GWENHYWFAR_CB (*GWEN_CRYPT_TOKEN_DECIPHER_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen, uint32_t gid); typedef int GWENHYWFAR_CB (*GWEN_CRYPT_TOKEN_GENERATEKEY_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, const GWEN_CRYPT_CRYPTALGO *a, uint32_t gid); typedef int GWENHYWFAR_CB (*GWEN_CRYPT_TOKEN_CHANGEPIN_FN)(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid); typedef int GWENHYWFAR_CB (*GWEN_CRYPT_TOKEN_ACTIVATEKEY_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid); /*@}*/ /** @name Contructor * */ /*@{*/ GWENHYWFAR_API GWEN_CRYPT_TOKEN *GWEN_Crypt_Token_new(GWEN_CRYPT_TOKEN_DEVICE dev, const char *typeName, const char *tokenName); /*@}*/ /** @name Setting CryptToken Information * */ /*@{*/ GWENHYWFAR_API void GWEN_Crypt_Token_SetTokenName(GWEN_CRYPT_TOKEN *ct, const char *s); GWENHYWFAR_API void GWEN_Crypt_Token_SetFlags(GWEN_CRYPT_TOKEN *ct, uint32_t f); GWENHYWFAR_API void GWEN_Crypt_Token_AddFlags(GWEN_CRYPT_TOKEN *ct, uint32_t f); GWENHYWFAR_API void GWEN_Crypt_Token_SubFlags(GWEN_CRYPT_TOKEN *ct, uint32_t f); /*@}*/ /** @name Interactive Helper Functions * */ /*@{*/ GWENHYWFAR_API int GWEN_Crypt_Token_GetPin(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_PINTYPE pt, GWEN_CRYPT_PINENCODING pe, uint32_t flags, unsigned char *pwbuffer, unsigned int minLength, unsigned int maxLength, unsigned int *pinLength, uint32_t gid); GWENHYWFAR_API int GWEN_Crypt_Token_SetPinStatus(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_PINTYPE pt, GWEN_CRYPT_PINENCODING pe, uint32_t flags, const unsigned char *buffer, unsigned int pinLength, int isOk, uint32_t gid); GWENHYWFAR_API uint32_t GWEN_Crypt_Token_BeginEnterPin(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_PINTYPE pt, uint32_t gid); GWENHYWFAR_API int GWEN_Crypt_Token_EndEnterPin(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_PINTYPE pt, int ok, uint32_t id); GWENHYWFAR_API int GWEN_Crypt_Token_InsertToken(GWEN_CRYPT_TOKEN *ct, uint32_t gid); GWENHYWFAR_API int GWEN_Crypt_Token_InsertCorrectToken(GWEN_CRYPT_TOKEN *ct, uint32_t gid); /*@}*/ /** @name Setter for Virtual Functions * */ /*@{*/ GWENHYWFAR_API GWEN_CRYPT_TOKEN_OPEN_FN GWEN_Crypt_Token_SetOpenFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_OPEN_FN f); GWENHYWFAR_API GWEN_CRYPT_TOKEN_CREATE_FN GWEN_Crypt_Token_SetCreateFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_CREATE_FN f); GWENHYWFAR_API GWEN_CRYPT_TOKEN_CLOSE_FN GWEN_Crypt_Token_SetCloseFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_CLOSE_FN f); GWENHYWFAR_API GWEN_CRYPT_TOKEN_GETKEYIDLIST_FN GWEN_Crypt_Token_SetGetKeyIdListFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_GETKEYIDLIST_FN f); GWENHYWFAR_API GWEN_CRYPT_TOKEN_GETKEYINFO_FN GWEN_Crypt_Token_SetGetKeyInfoFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_GETKEYINFO_FN f); GWENHYWFAR_API GWEN_CRYPT_TOKEN_SETKEYINFO_FN GWEN_Crypt_Token_SetSetKeyInfoFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_SETKEYINFO_FN f); GWENHYWFAR_API GWEN_CRYPT_TOKEN_GETCONTEXTIDLIST_FN GWEN_Crypt_Token_SetGetContextIdListFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_GETCONTEXTIDLIST_FN f); GWENHYWFAR_API GWEN_CRYPT_TOKEN_GETCONTEXT_FN GWEN_Crypt_Token_SetGetContextFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_GETCONTEXT_FN f); GWENHYWFAR_API GWEN_CRYPT_TOKEN_SETCONTEXT_FN GWEN_Crypt_Token_SetSetContextFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_SETCONTEXT_FN f); GWENHYWFAR_API GWEN_CRYPT_TOKEN_SIGN_FN GWEN_Crypt_Token_SetSignFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_SIGN_FN f); GWENHYWFAR_API GWEN_CRYPT_TOKEN_VERIFY_FN GWEN_Crypt_Token_SetVerifyFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_VERIFY_FN f); GWENHYWFAR_API GWEN_CRYPT_TOKEN_ENCIPHER_FN GWEN_Crypt_Token_SetEncipherFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_ENCIPHER_FN f); GWENHYWFAR_API GWEN_CRYPT_TOKEN_DECIPHER_FN GWEN_Crypt_Token_SetDecipherFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_DECIPHER_FN f); GWENHYWFAR_API GWEN_CRYPT_TOKEN_GENERATEKEY_FN GWEN_Crypt_Token_SetGenerateKeyFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_GENERATEKEY_FN f); GWENHYWFAR_API GWEN_CRYPT_TOKEN_CHANGEPIN_FN GWEN_Crypt_Token_SetChangePinFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_CHANGEPIN_FN f); GWEN_CRYPT_TOKEN_ACTIVATEKEY_FN GWEN_Crypt_Token_SetActivateKeyFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_ACTIVATEKEY_FN f); /*@}*/ #endif gwenhywfar-4.15.2beta/src/crypttoken/Makefile.in0000644000175000017500000006321712634022415016607 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/crypttoken DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(iheader_HEADERS) $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libcrypttoken_la_LIBADD = am_libcrypttoken_la_OBJECTS = ct.lo ct_context.lo ctf_context.lo \ ctfile.lo ct_keyinfo.lo ctplugin.lo libcrypttoken_la_OBJECTS = $(am_libcrypttoken_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libcrypttoken_la_SOURCES) DIST_SOURCES = $(libcrypttoken_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(iheaderdir)" HEADERS = $(iheader_HEADERS) $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ \ -DLIBCHIPCARD_GWENHYWFAR_PLUGIN_PACKAGE=\"libchipcard-libgwenhywfar@GWENHYWFAR_SO_EFFECTIVE@-plugins\" DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt3 \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/parser @all_includes@ AM_CFLAGS = @visibility_cflags@ -DBUILDING_GWENHYWFAR typefiles = ct_context.xml #ct_keyinfo.xml iheaderdir = $(gwenhywfar_headerdir_am)/gwenhywfar iheader_HEADERS = \ ct.h \ ct_be.h \ ct_context.h \ ctf_context_be.h \ ctfile_be.h \ ct_keyinfo.h \ ctplugin_be.h \ ctplugin.h noinst_LTLIBRARIES = libcrypttoken.la noinst_HEADERS = \ ct_p.h \ ct_context_l.h \ ct_context_p.h \ ctf_context_p.h \ ctfile_p.h \ ct_keyinfo_p.h \ ctplugin_p.h \ ctplugin_l.h libcrypttoken_la_SOURCES = \ ct.c \ ct_context.c \ ctf_context.c \ ctfile.c \ ct_keyinfo.c \ ctplugin.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/crypttoken/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/crypttoken/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libcrypttoken.la: $(libcrypttoken_la_OBJECTS) $(libcrypttoken_la_DEPENDENCIES) $(EXTRA_libcrypttoken_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libcrypttoken_la_OBJECTS) $(libcrypttoken_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ct.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ct_context.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ct_keyinfo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctf_context.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctfile.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctplugin.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-iheaderHEADERS: $(iheader_HEADERS) @$(NORMAL_INSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(iheaderdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(iheaderdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(iheaderdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(iheaderdir)" || exit $$?; \ done uninstall-iheaderHEADERS: @$(NORMAL_UNINSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(iheaderdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(iheaderdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iheaderHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iheaderHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am \ install-iheaderHEADERS install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-iheaderHEADERS types: $(typefiles) typemaker2 -I $(top_srcdir)/tools/typemaker2/types/c -I $(srcdir) --destfolder="$(srcdir)" -D GWENHYWFAR_API $(typefiles) sources: for f in $(libcrypttoken_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/src/crypttoken/ctfile.c0000644000175000017500000017461112416477066016173 00000000000000/*************************************************************************** begin : Wed Mar 16 2005 copyright : (C) 2005-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "ctfile_p.h" #include "i18n_l.h" #include #include #include #include #include #include #include #include #include #include #include #include #include GWEN_INHERIT(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE) int GWEN_Crypt_TokenFile__OpenFile(GWEN_CRYPT_TOKEN *ct, int wr, uint32_t gid) { int fd; GWEN_CRYPT_TOKEN_FILE *lct; GWEN_FSLOCK_RESULT lres; const char *fname; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct); assert(lct); fname = GWEN_Crypt_Token_GetTokenName(ct); if (!fname) { DBG_ERROR(GWEN_LOGDOMAIN, "No name of the crypt token set - maybe you need to set the key file as token name? Cannot lock token."); return GWEN_ERROR_IO; } lct->lock=GWEN_FSLock_new(fname, GWEN_FSLock_TypeFile); lres=GWEN_FSLock_Lock(lct->lock, 10000, gid); if (lres!=GWEN_FSLock_ResultOk) { GWEN_FSLock_free(lct->lock); lct->lock=0; DBG_ERROR(GWEN_LOGDOMAIN, "Could not lock file"); if (lres==GWEN_FSLock_ResultUserAbort) return GWEN_ERROR_USER_ABORTED; else return GWEN_ERROR_IO; } else { DBG_INFO(GWEN_LOGDOMAIN, "Keyfile [%s] locked.", GWEN_Crypt_Token_GetTokenName(ct)); } if (wr) { /* write file */ fd=open(GWEN_Crypt_Token_GetTokenName(ct), O_RDWR|O_CREAT #ifdef OS_WIN32 | O_BINARY #endif , S_IRUSR|S_IWUSR | lct->keyfile_mode); } else { /* Remember the access permissions when opening the file */ struct stat statbuffer; if (!stat(GWEN_Crypt_Token_GetTokenName(ct), &statbuffer)) { /* Save the access mode, but masked by the bit masks for user/group/other permissions */ lct->keyfile_mode = statbuffer.st_mode & (S_IRWXU #ifndef OS_WIN32 | S_IRWXG | S_IRWXO #endif ); } else { DBG_ERROR(GWEN_LOGDOMAIN, "stat(%s): %s", GWEN_Crypt_Token_GetTokenName(ct), strerror(errno)); GWEN_FSLock_Unlock(lct->lock); GWEN_FSLock_free(lct->lock); lct->lock=0; DBG_INFO(GWEN_LOGDOMAIN, "Keyfile [%s] unlocked.", GWEN_Crypt_Token_GetTokenName(ct)); return GWEN_ERROR_IO; } /* and open the file */ fd=open(GWEN_Crypt_Token_GetTokenName(ct), O_RDONLY #ifdef OS_WIN32 | O_BINARY #endif ); } if (fd==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "open(%s): %s", GWEN_Crypt_Token_GetTokenName(ct), strerror(errno)); GWEN_FSLock_Unlock(lct->lock); GWEN_FSLock_free(lct->lock); lct->lock=0; DBG_INFO(GWEN_LOGDOMAIN, "Keyfile [%s] unlocked.", GWEN_Crypt_Token_GetTokenName(ct)); return GWEN_ERROR_IO; } lct->fd=fd; return 0; } int GWEN_Crypt_TokenFile__CloseFile(GWEN_CRYPT_TOKEN *ct, uint32_t gid) { GWEN_CRYPT_TOKEN_FILE *lct; GWEN_FSLOCK_RESULT lres; struct stat st; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct); assert(lct); if (lct->fd==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "Keyfile \"%s\"not open", GWEN_Crypt_Token_GetTokenName(ct)); return GWEN_ERROR_INTERNAL; } if (close(lct->fd)) { DBG_ERROR(GWEN_LOGDOMAIN, "close(%s): %s", GWEN_Crypt_Token_GetTokenName(ct), strerror(errno)); lct->fd=-1; GWEN_FSLock_Unlock(lct->lock); GWEN_FSLock_free(lct->lock); lct->lock=0; DBG_INFO(GWEN_LOGDOMAIN, "Keyfile [%s] unlocked.", GWEN_Crypt_Token_GetTokenName(ct)); return GWEN_ERROR_IO; } lct->fd=-1; lres=GWEN_FSLock_Unlock(lct->lock); if (lres!=GWEN_FSLock_ResultOk) { DBG_WARN(GWEN_LOGDOMAIN, "Error removing lock from \"%s\": %d", GWEN_Crypt_Token_GetTokenName(ct), lres); } GWEN_FSLock_free(lct->lock); lct->lock=0; DBG_INFO(GWEN_LOGDOMAIN, "Keyfile [%s] unlocked.", GWEN_Crypt_Token_GetTokenName(ct)); /* get times */ if (stat(GWEN_Crypt_Token_GetTokenName(ct), &st)) { DBG_ERROR(GWEN_LOGDOMAIN, "stat(%s): %s", GWEN_Crypt_Token_GetTokenName(ct), strerror(errno)); return GWEN_ERROR_IO; } #ifndef OS_WIN32 if (st.st_mode & 0007) { DBG_WARN(GWEN_LOGDOMAIN, "WARNING: Your keyfile \"%s\" is accessible by every user on your computer!\n" "Nobody but you should have access to the file. You \n" "should probably change this with \"chmod 600 %s\"", GWEN_Crypt_Token_GetTokenName(ct), GWEN_Crypt_Token_GetTokenName(ct)); GWEN_Gui_ProgressLog(gid, GWEN_LoggerLevel_Warning, "WARNING: Your keyfile is accessible ny every user on your computer!\n" "Nobody but you should have access to the file."); } #endif lct->mtime=st.st_mtime; lct->ctime=st.st_ctime; return 0; } int GWEN_Crypt_TokenFile__Read(GWEN_CRYPT_TOKEN *ct, uint32_t gid) { GWEN_CRYPT_TOKEN_FILE *lct; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct); assert(lct); assert(lct->readFn); if (lseek(lct->fd, 0, SEEK_SET)==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "lseek(%s): %s", GWEN_Crypt_Token_GetTokenName(ct), strerror(errno)); return GWEN_ERROR_IO; } return lct->readFn(ct, lct->fd, gid); } int GWEN_Crypt_TokenFile__Write(GWEN_CRYPT_TOKEN *ct, int cr, uint32_t gid) { GWEN_CRYPT_TOKEN_FILE *lct; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct); assert(lct); if (lct->writeFn==0) { DBG_WARN(GWEN_LOGDOMAIN, "No write function in crypt token type \"%s\"", GWEN_Crypt_Token_GetTypeName(ct)); return GWEN_ERROR_NOT_SUPPORTED; } if (lseek(lct->fd, 0, SEEK_SET)==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "lseek(%s): %s", GWEN_Crypt_Token_GetTokenName(ct), strerror(errno)); return GWEN_ERROR_IO; } return lct->writeFn(ct, lct->fd, cr, gid); } int GWEN_Crypt_TokenFile__ReadFile(GWEN_CRYPT_TOKEN *ct, uint32_t gid) { GWEN_CRYPT_TOKEN_FILE *lct; int rv; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct); assert(lct); /* clear context list, it will be reloaded */ GWEN_Crypt_Token_Context_List_Clear(lct->contextList); /* open file */ rv=GWEN_Crypt_TokenFile__OpenFile(ct, 0, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "Could not open keyfile for reading (%d)", rv); return rv; } /* read file */ rv=GWEN_Crypt_TokenFile__Read(ct, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "Error reading keyfile"); GWEN_Crypt_TokenFile__CloseFile(ct, gid); return rv; } /* close file */ rv=GWEN_Crypt_TokenFile__CloseFile(ct, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "Could not close keyfile"); return rv; } return 0; } int GWEN_Crypt_TokenFile__WriteFile(GWEN_CRYPT_TOKEN *ct, int cr, uint32_t gid) { GWEN_CRYPT_TOKEN_FILE *lct; int rv; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct); assert(lct); /* open file */ rv=GWEN_Crypt_TokenFile__OpenFile(ct, 1, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "Could not open keyfile for writing (%d)", rv); return rv; } /* write file */ rv=GWEN_Crypt_TokenFile__Write(ct, cr, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "Error writing keyfile"); GWEN_Crypt_TokenFile__CloseFile(ct, gid); return rv; } /* close file */ rv=GWEN_Crypt_TokenFile__CloseFile(ct, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "Could not close keyfile"); return rv; } return 0; } int GWEN_Crypt_TokenFile__ReloadIfNeeded(GWEN_CRYPT_TOKEN *ct, uint32_t gid) { GWEN_CRYPT_TOKEN_FILE *lct; struct stat st; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct); assert(lct); if (stat(GWEN_Crypt_Token_GetTokenName(ct), &st)) { DBG_ERROR(GWEN_LOGDOMAIN, "stat(%s): %s", GWEN_Crypt_Token_GetTokenName(ct), strerror(errno)); return -1; } if (lct->mtime!=st.st_mtime || lct->ctime!=st.st_ctime) { int rv; /* file has changed, reload it */ DBG_NOTICE(GWEN_LOGDOMAIN, "Keyfile changed externally, reloading it"); /* read file */ rv=GWEN_Crypt_TokenFile__ReadFile(ct, gid); if (rv) { DBG_WARN(GWEN_LOGDOMAIN, "Error reloading keyfile"); return rv; } } else { DBG_NOTICE(GWEN_LOGDOMAIN, "Keyfile unchanged, not reloading"); } return 0; } void GWEN_Crypt_TokenFile_AddContext(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_CONTEXT *ctx) { GWEN_CRYPT_TOKEN_FILE *lct; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct); assert(lct); /* make sure the context is a file context */ assert(GWEN_CTF_Context_IsOfThisType(ctx)); GWEN_Crypt_Token_Context_List_Add(ctx, lct->contextList); } GWEN_CRYPT_TOKEN_CONTEXT *GWEN_Crypt_TokenFile_GetContext(GWEN_CRYPT_TOKEN *ct, int idx) { GWEN_CRYPT_TOKEN_FILE *lct; GWEN_CRYPT_TOKEN_CONTEXT *ctx; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct); assert(lct); ctx=GWEN_Crypt_Token_Context_List_First(lct->contextList); while(ctx) { if (idx==0) return ctx; ctx=GWEN_Crypt_Token_Context_List_Next(ctx); idx--; } return NULL; } GWEN_CRYPT_TOKEN_FILE_READ_FN GWEN_Crypt_TokenFile_SetReadFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_FILE_READ_FN f) { GWEN_CRYPT_TOKEN_FILE *lct; GWEN_CRYPT_TOKEN_FILE_READ_FN of; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct); assert(lct); of=lct->readFn; lct->readFn=f; return of; } GWEN_CRYPT_TOKEN_FILE_WRITE_FN GWEN_Crypt_TokenFile_SetWriteFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_FILE_WRITE_FN f) { GWEN_CRYPT_TOKEN_FILE *lct; GWEN_CRYPT_TOKEN_FILE_WRITE_FN of; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct); assert(lct); of=lct->writeFn; lct->writeFn=f; return of; } int GWENHYWFAR_CB GWEN_Crypt_TokenFile_Create(GWEN_CRYPT_TOKEN *ct, uint32_t gid) { GWEN_CRYPT_TOKEN_FILE *lct; struct stat st; int fd; int rv; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct); assert(lct); if (!GWEN_Crypt_Token_GetTokenName(ct)) { DBG_ERROR(GWEN_LOGDOMAIN, "No medium name given"); return GWEN_ERROR_INVALID; } if (stat(GWEN_Crypt_Token_GetTokenName(ct), &st)) { if (errno!=ENOENT) { DBG_ERROR(GWEN_LOGDOMAIN, "Error trying to access key file \"%s\": %s", GWEN_Crypt_Token_GetTokenName(ct), strerror(errno)); return GWEN_ERROR_IO; } } else { DBG_ERROR(GWEN_LOGDOMAIN, "Keyfile \"%s\" already exists, will not create it", GWEN_Crypt_Token_GetTokenName(ct)); return GWEN_ERROR_INVALID; } /* create file */ fd=open(GWEN_Crypt_Token_GetTokenName(ct), O_RDWR | O_CREAT | O_EXCL #ifdef OS_WIN32 | O_BINARY #endif , S_IRUSR|S_IWUSR); if (fd==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "open(%s): %s", GWEN_Crypt_Token_GetTokenName(ct), strerror(errno)); return GWEN_ERROR_IO; } close(fd); rv=GWEN_Crypt_TokenFile__WriteFile(ct, 1, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return rv; } return 0; } int GWENHYWFAR_CB GWEN_Crypt_TokenFile_Open(GWEN_CRYPT_TOKEN *ct, GWEN_UNUSED int admin, uint32_t gid) { GWEN_CRYPT_TOKEN_FILE *lct; int rv; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct); assert(lct); rv=GWEN_Crypt_TokenFile__ReadFile(ct, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return rv; } return 0; } int GWENHYWFAR_CB GWEN_Crypt_TokenFile_Close(GWEN_CRYPT_TOKEN *ct, int abandon, uint32_t gid) { GWEN_CRYPT_TOKEN_FILE *lct; int rv; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct); assert(lct); if (!abandon) rv=GWEN_Crypt_TokenFile__WriteFile(ct, 0, gid); else rv=0; /* free/reset all data */ GWEN_Crypt_Token_Context_List_Clear(lct->contextList); lct->mtime=0; lct->ctime=0; return rv; } int GWENHYWFAR_CB GWEN_Crypt_TokenFile__GetKeyIdList(GWEN_CRYPT_TOKEN *ct, uint32_t *pIdList, uint32_t *pCount, uint32_t gid) { GWEN_CRYPT_TOKEN_FILE *lct; GWEN_CRYPT_TOKEN_CONTEXT *ctx; int i; int rv; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct); assert(lct); /* reload if needed */ rv=GWEN_Crypt_TokenFile__ReloadIfNeeded(ct, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } /* count keys */ i=0; ctx=GWEN_Crypt_Token_Context_List_First(lct->contextList); while(ctx) { i+=GWEN_CRYPT_TOKEN_CONTEXT_KEYS; ctx=GWEN_Crypt_Token_Context_List_Next(ctx); } /* if no buffer given just return number of keys */ if (pIdList==NULL) { *pCount=i; return 0; } if (*pCountcontextList); while(ctx) { int j; for (j=1; j<=GWEN_CRYPT_TOKEN_CONTEXT_KEYS; j++) *(pIdList++)=(i<<16)+j; ctx=GWEN_Crypt_Token_Context_List_Next(ctx); i++; } return 0; } const GWEN_CRYPT_TOKEN_KEYINFO* GWENHYWFAR_CB GWEN_Crypt_TokenFile__GetKeyInfo(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t flags, uint32_t gid) { GWEN_CRYPT_TOKEN_FILE *lct; GWEN_CRYPT_TOKEN_CONTEXT *ctx; GWEN_CRYPT_TOKEN_KEYINFO *ki; int i; int rv; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct); assert(lct); /* reload if needed */ rv=GWEN_Crypt_TokenFile__ReloadIfNeeded(ct, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return NULL; } i=id>>16; ctx=GWEN_Crypt_Token_Context_List_First(lct->contextList); while(ctx) { if (i==0) break; ctx=GWEN_Crypt_Token_Context_List_Next(ctx); i--; } if (ctx==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "No key by id [%x] known (context out of range)", id); return NULL; } switch(id & 0xffff) { case 1: ki=GWEN_CTF_Context_GetLocalSignKeyInfo(ctx); break; case 2: ki=GWEN_CTF_Context_GetLocalCryptKeyInfo(ctx); break; case 3: ki=GWEN_CTF_Context_GetRemoteSignKeyInfo(ctx); break; case 4: ki=GWEN_CTF_Context_GetRemoteCryptKeyInfo(ctx); break; case 5: ki=GWEN_CTF_Context_GetLocalAuthKeyInfo(ctx); break; case 6: ki=GWEN_CTF_Context_GetRemoteAuthKeyInfo(ctx); break; case 7: ki=GWEN_CTF_Context_GetTempLocalSignKeyInfo(ctx); break; default: DBG_INFO(GWEN_LOGDOMAIN, "No key by id [%x] known (key id out of range)", id); return NULL; } if (ki==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "No key info stored for key %d", id); return NULL; } return ki; } #if 0 int GWENHYWFAR_CB GWEN_Crypt_TokenFile__SetKeyInfo(GWEN_CRYPT_TOKEN *ct, uint32_t id, const GWEN_CRYPT_TOKEN_KEYINFO *ki, uint32_t gid) { GWEN_CRYPT_TOKEN_FILE *lct; GWEN_CRYPT_TOKEN_CONTEXT *ctx; int i; int rv; GWEN_CRYPT_TOKEN_KEYINFO *nki; GWEN_CRYPT_KEY *key; uint32_t flags; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct); assert(lct); flags=GWEN_Crypt_Token_KeyInfo_GetFlags(ki); /* reload if needed */ rv=GWEN_Crypt_TokenFile__ReloadIfNeeded(ct, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } i=id>>16; ctx=GWEN_Crypt_Token_Context_List_First(lct->contextList); while(ctx) { if (i==0) break; ctx=GWEN_Crypt_Token_Context_List_Next(ctx); i--; } if (ctx==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "No key by id [%x] known (context out of range)", id); return GWEN_ERROR_NOT_FOUND; } nki=GWEN_Crypt_Token_KeyInfo_dup(ki); assert(nki); switch(id & 0xffff) { case 1: GWEN_CTF_Context_SetLocalSignKeyInfo(ctx, nki); key=GWEN_CTF_Context_GetLocalSignKey(ctx); break; case 2: GWEN_CTF_Context_SetLocalCryptKeyInfo(ctx, nki); key=GWEN_CTF_Context_GetLocalCryptKey(ctx); break; case 3: GWEN_CTF_Context_SetRemoteSignKeyInfo(ctx, nki); key=GWEN_CTF_Context_GetRemoteSignKey(ctx); break; case 4: GWEN_CTF_Context_SetRemoteCryptKeyInfo(ctx, nki); key=GWEN_CTF_Context_GetRemoteCryptKey(ctx); break; case 5: GWEN_CTF_Context_SetLocalAuthKeyInfo(ctx, nki); key=GWEN_CTF_Context_GetLocalAuthKey(ctx); break; case 6: GWEN_CTF_Context_SetRemoteAuthKeyInfo(ctx, nki); key=GWEN_CTF_Context_GetRemoteAuthKey(ctx); break; default: DBG_INFO(GWEN_LOGDOMAIN, "No key by id [%x] known (key id out of range)", id); GWEN_Crypt_Token_KeyInfo_free(nki); return GWEN_ERROR_NOT_FOUND; } /* replace key if modulus and exponent are given */ if ((flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS) && (flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT) && id!=1 && /* don't change local keys */ id!=2 && id!=5) { GWEN_CRYPT_KEY *nkey; nkey=GWEN_Crypt_KeyRsa_fromModExp(GWEN_Crypt_Token_KeyInfo_GetKeySize(ki), GWEN_Crypt_Token_KeyInfo_GetModulusData(ki), GWEN_Crypt_Token_KeyInfo_GetModulusLen(ki), GWEN_Crypt_Token_KeyInfo_GetExponentData(ki), GWEN_Crypt_Token_KeyInfo_GetExponentLen(ki)); assert(nkey); if (flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER) GWEN_Crypt_Key_SetKeyNumber(nkey, GWEN_Crypt_Token_KeyInfo_GetKeyNumber(ki)); if (flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION) GWEN_Crypt_Key_SetKeyVersion(nkey, GWEN_Crypt_Token_KeyInfo_GetKeyVersion(ki)); /* replace public key */ switch(id & 0xffff) { case 3: /* remote sign key */ GWEN_CTF_Context_SetRemoteSignKey(ctx, nkey); break; case 4: /* remote crypt key */ GWEN_CTF_Context_SetRemoteCryptKey(ctx, nkey); break; case 6: /* remote auth key */ GWEN_CTF_Context_SetRemoteAuthKey(ctx, nkey); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Can't set modulus and exponent for private key"); GWEN_Crypt_Key_free(nkey); return GWEN_ERROR_INVALID; } GWEN_Gui_ProgressLog(gid, GWEN_LoggerLevel_Notice, I18N("Public key replaced")); } else { if (key) { if (flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER) GWEN_Crypt_Key_SetKeyNumber(key, GWEN_Crypt_Token_KeyInfo_GetKeyNumber(ki)); if (flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION) GWEN_Crypt_Key_SetKeyVersion(key, GWEN_Crypt_Token_KeyInfo_GetKeyVersion(ki)); } } rv=GWEN_Crypt_TokenFile__WriteFile(ct, 0, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "Unable to write file"); GWEN_Gui_ProgressLog(gid, GWEN_LoggerLevel_Error, I18N("Unable to write key file")); return rv; } GWEN_Gui_ProgressLog(gid, GWEN_LoggerLevel_Notice, I18N("Key file saved")); return 0; } #endif int GWENHYWFAR_CB GWEN_Crypt_TokenFile__SetKeyInfo(GWEN_CRYPT_TOKEN *ct, uint32_t id, const GWEN_CRYPT_TOKEN_KEYINFO *ski, uint32_t gid) { GWEN_CRYPT_TOKEN_FILE *lct; GWEN_CRYPT_TOKEN_CONTEXT *ctx; int i; int rv; GWEN_CRYPT_TOKEN_KEYINFO *ki; GWEN_CRYPT_KEY *key; uint32_t flags; uint32_t nflags; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct); assert(lct); flags=GWEN_Crypt_Token_KeyInfo_GetFlags(ski); /* reload if needed */ rv=GWEN_Crypt_TokenFile__ReloadIfNeeded(ct, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } i=id>>16; ctx=GWEN_Crypt_Token_Context_List_First(lct->contextList); while(ctx) { if (i==0) break; ctx=GWEN_Crypt_Token_Context_List_Next(ctx); i--; } if (ctx==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "No key by id [%x] known (context out of range)", id); return GWEN_ERROR_NOT_FOUND; } switch(id & 0xffff) { case 1: ki=GWEN_CTF_Context_GetLocalSignKeyInfo(ctx); key=GWEN_CTF_Context_GetLocalSignKey(ctx); break; case 2: ki=GWEN_CTF_Context_GetLocalCryptKeyInfo(ctx); key=GWEN_CTF_Context_GetLocalCryptKey(ctx); break; case 3: ki=GWEN_CTF_Context_GetRemoteSignKeyInfo(ctx); key=GWEN_CTF_Context_GetRemoteSignKey(ctx); break; case 4: ki=GWEN_CTF_Context_GetRemoteCryptKeyInfo(ctx); key=GWEN_CTF_Context_GetRemoteCryptKey(ctx); break; case 5: ki=GWEN_CTF_Context_GetLocalAuthKeyInfo(ctx); key=GWEN_CTF_Context_GetLocalAuthKey(ctx); break; case 6: ki=GWEN_CTF_Context_GetRemoteAuthKeyInfo(ctx); key=GWEN_CTF_Context_GetRemoteAuthKey(ctx); break; case 7: ki=GWEN_CTF_Context_GetTempLocalSignKeyInfo(ctx); key=GWEN_CTF_Context_GetTempLocalSignKey(ctx); break; default: DBG_INFO(GWEN_LOGDOMAIN, "No key by id [%x] known (key id out of range)", id); return GWEN_ERROR_NOT_FOUND; } assert(ki); nflags=GWEN_Crypt_Token_KeyInfo_GetFlags(ki); if (flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASSTATUS) { /* ignore for now */ } if (flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS) { nflags&=~GWEN_CRYPT_TOKEN_KEYFLAGS_ACTIONMASK; nflags|=(flags & GWEN_CRYPT_TOKEN_KEYFLAGS_ACTIONMASK); } if (flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION) { uint32_t i=GWEN_Crypt_Token_KeyInfo_GetKeyVersion(ski); GWEN_Crypt_Token_KeyInfo_SetKeyVersion(ki, i); nflags|=GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION; if (key) GWEN_Crypt_Key_SetKeyVersion(key, GWEN_Crypt_Token_KeyInfo_GetKeyVersion(ski)); DBG_INFO(GWEN_LOGDOMAIN, "Setting key version"); } if (flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASSIGNCOUNTER) { uint32_t i=GWEN_Crypt_Token_KeyInfo_GetSignCounter(ski); GWEN_Crypt_Token_KeyInfo_SetSignCounter(ki, i); nflags|=GWEN_CRYPT_TOKEN_KEYFLAGS_HASSIGNCOUNTER; DBG_INFO(GWEN_LOGDOMAIN, "Setting signature counter"); } if (flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER) { uint32_t i=GWEN_Crypt_Token_KeyInfo_GetKeyNumber(ski); GWEN_Crypt_Token_KeyInfo_SetKeyNumber(ki, i); nflags|=GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER; if (key) GWEN_Crypt_Key_SetKeyNumber(key, GWEN_Crypt_Token_KeyInfo_GetKeyNumber(ski)); DBG_INFO(GWEN_LOGDOMAIN, "Setting key number"); } /* replace key if modulus and exponent are given */ if ((flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS) && (flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT) && id!=1 && /* don't change local keys */ id!=2 && id!=5 && id!=7) { GWEN_CRYPT_KEY *nkey; GWEN_Crypt_Token_KeyInfo_SetKeySize(ki, GWEN_Crypt_Token_KeyInfo_GetKeySize(ski)); GWEN_Crypt_Token_KeyInfo_SetModulus(ki, GWEN_Crypt_Token_KeyInfo_GetModulusData(ski), GWEN_Crypt_Token_KeyInfo_GetModulusLen(ski)); nflags|=GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS; GWEN_Crypt_Token_KeyInfo_SetExponent(ki, GWEN_Crypt_Token_KeyInfo_GetExponentData(ski), GWEN_Crypt_Token_KeyInfo_GetExponentLen(ski)); nflags|=GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT; nkey=GWEN_Crypt_KeyRsa_fromModExp(GWEN_Crypt_Token_KeyInfo_GetKeySize(ski), GWEN_Crypt_Token_KeyInfo_GetModulusData(ski), GWEN_Crypt_Token_KeyInfo_GetModulusLen(ski), GWEN_Crypt_Token_KeyInfo_GetExponentData(ski), GWEN_Crypt_Token_KeyInfo_GetExponentLen(ski)); assert(nkey); if (nflags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER) GWEN_Crypt_Key_SetKeyNumber(nkey, GWEN_Crypt_Token_KeyInfo_GetKeyNumber(ki)); if (nflags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION) GWEN_Crypt_Key_SetKeyVersion(nkey, GWEN_Crypt_Token_KeyInfo_GetKeyVersion(ki)); /* replace public key */ switch(id & 0xffff) { case 3: /* remote sign key */ GWEN_CTF_Context_SetRemoteSignKey(ctx, nkey); break; case 4: /* remote crypt key */ GWEN_CTF_Context_SetRemoteCryptKey(ctx, nkey); break; case 6: /* remote auth key */ GWEN_CTF_Context_SetRemoteAuthKey(ctx, nkey); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Can't set modulus and exponent for private key"); GWEN_Crypt_Key_free(nkey); return GWEN_ERROR_INVALID; } GWEN_Gui_ProgressLog(gid, GWEN_LoggerLevel_Notice, I18N("Public key replaced")); } else { if (key) { if (flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER) GWEN_Crypt_Key_SetKeyNumber(key, GWEN_Crypt_Token_KeyInfo_GetKeyNumber(ki)); if (flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION) GWEN_Crypt_Key_SetKeyVersion(key, GWEN_Crypt_Token_KeyInfo_GetKeyVersion(ki)); } } GWEN_Crypt_Token_KeyInfo_SetFlags(ki, nflags); rv=GWEN_Crypt_TokenFile__WriteFile(ct, 0, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "Unable to write file"); GWEN_Gui_ProgressLog(gid, GWEN_LoggerLevel_Error, I18N("Unable to write key file")); return rv; } GWEN_Gui_ProgressLog(gid, GWEN_LoggerLevel_Notice, I18N("Key file saved")); return 0; } int GWENHYWFAR_CB GWEN_Crypt_TokenFile__ActivateKey(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid) { GWEN_CRYPT_TOKEN_FILE *lct; GWEN_CRYPT_TOKEN_CONTEXT *ctx; int rv; int i; uint32_t keyNum; uint8_t kbuf[GWEN_CRYPT_KEYRSA_MAX_KEYLENGTH]; uint32_t klen; GWEN_CRYPT_TOKEN_KEYINFO *cki=NULL; GWEN_CRYPT_TOKEN_KEYINFO *ki; GWEN_CRYPT_KEY *key; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct); assert(lct); /* reload if needed */ rv=GWEN_Crypt_TokenFile__ReloadIfNeeded(ct, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } keyNum=id & 0xffff; i=id>>16; ctx=GWEN_Crypt_Token_Context_List_First(lct->contextList); while(ctx) { if (i==0) break; ctx=GWEN_Crypt_Token_Context_List_Next(ctx); i--; } if (ctx==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "No key by id [%x] known (context out of range)", id); return GWEN_ERROR_NOT_FOUND; } key=GWEN_CTF_Context_GetTempLocalSignKey(ctx); if (key==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No temporary local sign key."); return GWEN_ERROR_NOT_FOUND; } key=GWEN_Crypt_KeyRsa_dup(key); /* set key */ if (keyNum==1) cki=GWEN_CTF_Context_GetLocalSignKeyInfo(ctx); else if (keyNum==6) cki=GWEN_CTF_Context_GetLocalAuthKeyInfo(ctx); else { GWEN_Gui_ProgressLog2(gid, GWEN_LoggerLevel_Error, I18N("Invalid key id %02x"), id); GWEN_Crypt_Key_free(key); return GWEN_ERROR_NO_DATA; } if (cki==NULL) { GWEN_Gui_ProgressLog(gid, GWEN_LoggerLevel_Error, I18N("No key info found")); GWEN_Crypt_Key_free(key); return GWEN_ERROR_NO_DATA; } /* update key info for the key */ ki=GWEN_Crypt_Token_KeyInfo_dup(cki); assert(ki); /* get modulus */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetModulus(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No modulus for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetModulus(ki, kbuf, klen); /* get exponent */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetExponent(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No exponent for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetExponent(ki, kbuf, klen); GWEN_Crypt_Token_KeyInfo_SetKeyNumber(ki, GWEN_Crypt_Key_GetKeyNumber(key)); GWEN_Crypt_Token_KeyInfo_SetKeyVersion(ki, GWEN_Crypt_Key_GetKeyVersion(key)); if (keyNum==1) { if (GWEN_Crypt_Token_GetModes(ct) & GWEN_CRYPT_TOKEN_MODE_DIRECT_SIGN) { DBG_DEBUG(GWEN_LOGDOMAIN, "Adding mode \"direct sign\" to key"); GWEN_Crypt_KeyRsa_AddFlags(key, GWEN_CRYPT_KEYRSA_FLAGS_DIRECTSIGN); } GWEN_CTF_Context_SetLocalSignKey(ctx, key); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASSIGNCOUNTER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY | GWEN_CRYPT_TOKEN_KEYFLAGS_CANSIGN); GWEN_Crypt_Token_KeyInfo_SetSignCounter(ki, 1); GWEN_CTF_Context_SetLocalSignKeyInfo(ctx, ki); } else if (keyNum==6) { if (GWEN_Crypt_Token_GetModes(ct) & GWEN_CRYPT_TOKEN_MODE_DIRECT_SIGN) { DBG_DEBUG(GWEN_LOGDOMAIN, "Adding mode \"direct sign\" to key"); GWEN_Crypt_KeyRsa_AddFlags(key, GWEN_CRYPT_KEYRSA_FLAGS_DIRECTSIGN); } GWEN_CTF_Context_SetLocalAuthKey(ctx, key); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASSIGNCOUNTER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY | GWEN_CRYPT_TOKEN_KEYFLAGS_CANSIGN); GWEN_Crypt_Token_KeyInfo_SetSignCounter(ki, 1); GWEN_CTF_Context_SetLocalAuthKeyInfo(ctx, ki); } rv=GWEN_Crypt_TokenFile__WriteFile(ct, 0, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "Unable to write file"); GWEN_Gui_ProgressLog(gid, GWEN_LoggerLevel_Error, I18N("Unable to write key file")); return rv; } GWEN_Gui_ProgressLog(gid, GWEN_LoggerLevel_Notice, I18N("Key file saved")); return 0; } int GWENHYWFAR_CB GWEN_Crypt_TokenFile__GetContextIdList(GWEN_CRYPT_TOKEN *ct, uint32_t *pIdList, uint32_t *pCount, uint32_t gid) { GWEN_CRYPT_TOKEN_FILE *lct; GWEN_CRYPT_TOKEN_CONTEXT *ctx; int i; int rv; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct); assert(lct); /* reload if needed */ rv=GWEN_Crypt_TokenFile__ReloadIfNeeded(ct, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } /* count keys */ i=0; ctx=GWEN_Crypt_Token_Context_List_First(lct->contextList); while(ctx) { i++; ctx=GWEN_Crypt_Token_Context_List_Next(ctx); } /* store number of entries */ *pCount=i; /* if no buffer given just return number of keys */ if (pIdList==NULL) return 0; if (*pCountcontextList); while(ctx) { *(pIdList++)=i; ctx=GWEN_Crypt_Token_Context_List_Next(ctx); i++; } return 0; } const GWEN_CRYPT_TOKEN_CONTEXT* GWENHYWFAR_CB GWEN_Crypt_TokenFile__GetContext(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid) { GWEN_CRYPT_TOKEN_FILE *lct; GWEN_CRYPT_TOKEN_CONTEXT *ctx; int rv; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct); assert(lct); /* reload if needed */ rv=GWEN_Crypt_TokenFile__ReloadIfNeeded(ct, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return NULL; } if (id==0) { DBG_INFO(GWEN_LOGDOMAIN, "Invalid context id 0"); return NULL; } ctx=GWEN_Crypt_Token_Context_List_First(lct->contextList); while(ctx) { if (GWEN_Crypt_Token_Context_GetId(ctx)==id) break; ctx=GWEN_Crypt_Token_Context_List_Next(ctx); } if (ctx==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "No context by id [%x] known", id); return NULL; } return ctx; } int GWENHYWFAR_CB GWEN_Crypt_TokenFile__SetContext(GWEN_CRYPT_TOKEN *ct, uint32_t id, const GWEN_CRYPT_TOKEN_CONTEXT *nctx, uint32_t gid) { GWEN_CRYPT_TOKEN_FILE *lct; GWEN_CRYPT_TOKEN_CONTEXT *ctx; int rv; const char *s; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct); assert(lct); if (id==0) { DBG_INFO(GWEN_LOGDOMAIN, "Invalid context id 0"); return GWEN_ERROR_INVALID; } /* reload if needed */ rv=GWEN_Crypt_TokenFile__ReloadIfNeeded(ct, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } ctx=GWEN_Crypt_Token_Context_List_First(lct->contextList); while(ctx) { if (GWEN_Crypt_Token_Context_GetId(ctx)==id) break; ctx=GWEN_Crypt_Token_Context_List_Next(ctx); } if (ctx==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "No context by id [%x] known", id); return GWEN_ERROR_NOT_FOUND; } /* copy user data from context */ s=GWEN_Crypt_Token_Context_GetServiceId(nctx); GWEN_Crypt_Token_Context_SetServiceId(ctx, s); s=GWEN_Crypt_Token_Context_GetUserId(nctx); GWEN_Crypt_Token_Context_SetUserId(ctx, s); s=GWEN_Crypt_Token_Context_GetUserName(nctx); GWEN_Crypt_Token_Context_SetUserName(ctx, s); s=GWEN_Crypt_Token_Context_GetPeerId(nctx); GWEN_Crypt_Token_Context_SetPeerId(ctx, s); s=GWEN_Crypt_Token_Context_GetAddress(nctx); GWEN_Crypt_Token_Context_SetAddress(ctx, s); GWEN_Crypt_Token_Context_SetPort(ctx, GWEN_Crypt_Token_Context_GetPort(nctx)); s=GWEN_Crypt_Token_Context_GetSystemId(nctx); GWEN_Crypt_Token_Context_SetSystemId(ctx, s); return 0; } GWEN_CRYPT_KEY *GWEN_Crypt_TokenFile__GetKey(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid) { GWEN_CRYPT_TOKEN_FILE *lct; GWEN_CRYPT_TOKEN_CONTEXT *ctx; int i; int rv; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct); assert(lct); /* reload if needed */ rv=GWEN_Crypt_TokenFile__ReloadIfNeeded(ct, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return NULL; } i=id>>16; ctx=GWEN_Crypt_Token_Context_List_First(lct->contextList); while(ctx) { if (i==0) break; ctx=GWEN_Crypt_Token_Context_List_Next(ctx); i--; } if (ctx==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "No key by id [%x] known (context out of range)", id); return NULL; } switch(id & 0xffff) { case 1: return GWEN_CTF_Context_GetLocalSignKey(ctx); case 2: return GWEN_CTF_Context_GetLocalCryptKey(ctx); case 3: return GWEN_CTF_Context_GetRemoteSignKey(ctx); case 4: return GWEN_CTF_Context_GetRemoteCryptKey(ctx); case 5: return GWEN_CTF_Context_GetLocalAuthKey(ctx); case 6: return GWEN_CTF_Context_GetRemoteAuthKey(ctx); default: DBG_INFO(GWEN_LOGDOMAIN, "No key by id [%x] known (key id out of range)", id); return NULL; } } int GWENHYWFAR_CB GWEN_Crypt_TokenFile__Sign(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, uint8_t *pSignatureData, uint32_t *pSignatureLen, uint32_t *pSeqCounter, uint32_t gid) { GWEN_CRYPT_TOKEN_FILE *lct; GWEN_CRYPT_TOKEN_CONTEXT *ctx; GWEN_CRYPT_KEY *k; int keyNum; GWEN_BUFFER *srcBuf; int i; int rv; GWEN_CRYPT_PADDALGOID aid; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct); assert(lct); DBG_INFO(GWEN_LOGDOMAIN, "Signing with key %d", keyId); aid=GWEN_Crypt_PaddAlgo_GetId(a); /* reload if needed */ rv=GWEN_Crypt_TokenFile__ReloadIfNeeded(ct, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } /* get context */ i=(keyId>>16); ctx=GWEN_Crypt_Token_Context_List_First(lct->contextList); if (ctx==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Token has no context"); return GWEN_ERROR_NOT_FOUND; } while(ctx) { if (i==0) break; DBG_ERROR(GWEN_LOGDOMAIN, "Checking token %d (i==%d)", GWEN_Crypt_Token_Context_GetId(ctx), i); ctx=GWEN_Crypt_Token_Context_List_Next(ctx); i--; } if (ctx==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "No context by id [%x] known", (keyId>>16) & 0xffff); return GWEN_ERROR_NOT_FOUND; } /* get key */ keyNum=keyId & 0xffff; if (keyNum!=1 && keyNum!=5) { /* neither localSignKey nor localAuthKey */ DBG_INFO(GWEN_LOGDOMAIN, "Bad key for signing (%x)", keyId); return GWEN_ERROR_INVALID; } k=GWEN_Crypt_TokenFile__GetKey(ct, keyId, gid); if (k==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Key not found"); return GWEN_ERROR_NOT_FOUND; } /* copy to a buffer for padding */ srcBuf=GWEN_Buffer_new(0, inLen, 0, 0); if (aid==GWEN_Crypt_PaddAlgoId_Pkcs1_Pss_Sha256) { const GWEN_CRYPT_TOKEN_KEYINFO *ki; int nbits; const uint8_t *modPtr; uint32_t modLen; GWEN_MDIGEST *md; switch(keyId & 0xffff) { case 1: ki=GWEN_CTF_Context_GetLocalSignKeyInfo(ctx); break; case 5: ki=GWEN_CTF_Context_GetLocalAuthKeyInfo(ctx); break; default: ki=NULL; } if (ki==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No information for key %d", keyNum); GWEN_Buffer_free(srcBuf); return GWEN_ERROR_GENERIC; } /* calculate real number of bits */ modPtr=GWEN_Crypt_Token_KeyInfo_GetModulusData(ki); modLen=GWEN_Crypt_Token_KeyInfo_GetModulusLen(ki); nbits=modLen*8; while(modLen && *modPtr==0) { nbits-=8; modLen--; modPtr++; } if (modLen) { uint8_t b=*modPtr; int i; uint8_t mask=0x80; for (i=0; i<8; i++) { if (b & mask) break; nbits--; mask>>=1; } } if (nbits==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Empty modulus"); GWEN_Buffer_free(srcBuf); return GWEN_ERROR_GENERIC; } md=GWEN_MDigest_Sha256_new(); GWEN_Buffer_AllocRoom(srcBuf, modLen); rv=GWEN_Padd_AddPkcs1Pss((uint8_t*) GWEN_Buffer_GetStart(srcBuf), GWEN_Buffer_GetMaxUnsegmentedWrite(srcBuf), nbits, pInData, inLen, inLen, md); GWEN_MDigest_free(md); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(srcBuf); return rv; } GWEN_Buffer_IncrementPos(srcBuf, rv); GWEN_Buffer_AdjustUsedBytes(srcBuf); } else { GWEN_Buffer_AppendBytes(srcBuf, (const char*)pInData, inLen); /* padd according to given algo */ rv=GWEN_Padd_ApplyPaddAlgo(a, srcBuf); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(srcBuf); return rv; } } /* sign with key */ rv=GWEN_Crypt_Key_Sign(k, (const uint8_t*)GWEN_Buffer_GetStart(srcBuf), GWEN_Buffer_GetUsedBytes(srcBuf), pSignatureData, pSignatureLen); GWEN_Buffer_free(srcBuf); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } if (pSeqCounter) { GWEN_CRYPT_TOKEN_KEYINFO *ki; /* signature sequence counter is to be incremented */ switch(keyId & 0xffff) { case 1: ki=GWEN_CTF_Context_GetLocalSignKeyInfo(ctx); break; case 5: ki=GWEN_CTF_Context_GetLocalAuthKeyInfo(ctx); break; default: ki=NULL; } if (ki && (GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASSIGNCOUNTER)) { unsigned int seq; seq=GWEN_Crypt_Token_KeyInfo_GetSignCounter(ki); *pSeqCounter=seq; GWEN_Crypt_Token_KeyInfo_SetSignCounter(ki, ++seq); rv=GWEN_Crypt_TokenFile__WriteFile(ct, 0, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "Unable to write file"); return rv; } } else { DBG_WARN(GWEN_LOGDOMAIN, "No sign counter for key %04x", keyId); *pSeqCounter=0; } } return 0; } int GWENHYWFAR_CB GWEN_Crypt_TokenFile__Verify(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, const uint8_t *pSignatureData, uint32_t signatureLen, uint32_t seqCounter, uint32_t gid) { GWEN_CRYPT_TOKEN_FILE *lct; GWEN_CRYPT_TOKEN_CONTEXT *ctx; GWEN_CRYPT_KEY *k; int keyNum; int i; int rv; GWEN_CRYPT_PADDALGOID aid; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct); assert(lct); DBG_INFO(GWEN_LOGDOMAIN, "Verifying with key %d", keyId); aid=GWEN_Crypt_PaddAlgo_GetId(a); /* reload if needed */ rv=GWEN_Crypt_TokenFile__ReloadIfNeeded(ct, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } /* get context */ i=(keyId>>16); ctx=GWEN_Crypt_Token_Context_List_First(lct->contextList); while(ctx) { if (i==0) break; ctx=GWEN_Crypt_Token_Context_List_Next(ctx); i--; } if (ctx==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "No context by id [%x] known", (keyId>>16) & 0xffff); return GWEN_ERROR_NOT_FOUND; } /* get key */ keyNum=keyId & 0xffff; if (keyNum!=1 && keyNum!=3 && keyNum!=6) { /* neither remoteSignKey nor remoteAuthKey */ DBG_INFO(GWEN_LOGDOMAIN, "Bad key for verifying (%x)", keyId); return GWEN_ERROR_INVALID; } k=GWEN_Crypt_TokenFile__GetKey(ct, keyId, gid); if (k==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Key not found"); return GWEN_ERROR_NO_KEY; } if (aid==GWEN_Crypt_PaddAlgoId_Iso9796_2 || aid==GWEN_Crypt_PaddAlgoId_Pkcs1_2 || aid==GWEN_Crypt_PaddAlgoId_Pkcs1_Pss_Sha256) { GWEN_BUFFER *tbuf; uint32_t l; /* these algos add random numbers, we must use encrypt fn here and * compare the decrypted and unpadded data with the source data */ tbuf=GWEN_Buffer_new(0, signatureLen+16, 0, 0); l=GWEN_Buffer_GetMaxUnsegmentedWrite(tbuf); rv=GWEN_Crypt_Key_Encipher(k, pSignatureData, signatureLen, (uint8_t*)GWEN_Buffer_GetStart(tbuf), &l); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_IncrementPos(tbuf, l); GWEN_Buffer_AdjustUsedBytes(tbuf); if (aid==GWEN_Crypt_PaddAlgoId_Pkcs1_Pss_Sha256) { const GWEN_CRYPT_TOKEN_KEYINFO *ki; int nbits; const uint8_t *modPtr; uint32_t modLen; GWEN_MDIGEST *md; if (keyNum==3) ki=GWEN_CTF_Context_GetRemoteSignKeyInfo(ctx); else ki=GWEN_CTF_Context_GetRemoteAuthKeyInfo(ctx); if (ki==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No information for key %d", keyNum); GWEN_Buffer_free(tbuf); return GWEN_ERROR_GENERIC; } /* calculate real number of bits */ modPtr=GWEN_Crypt_Token_KeyInfo_GetModulusData(ki); modLen=GWEN_Crypt_Token_KeyInfo_GetModulusLen(ki); nbits=modLen*8; while(modLen && *modPtr==0) { nbits-=8; modLen--; modPtr++; } if (modLen) { uint8_t b=*modPtr; int i; uint8_t mask=0x80; for (i=0; i<8; i++) { if (b & mask) break; nbits--; mask>>=1; } } if (nbits==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Empty modulus"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_GENERIC; } md=GWEN_MDigest_Sha256_new(); rv=GWEN_Padd_VerifyPkcs1Pss((const uint8_t*) GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf), nbits, pInData, inLen, inLen, md); GWEN_MDigest_free(md); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } } else { rv=GWEN_Padd_UnapplyPaddAlgo(a, tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } l=GWEN_Buffer_GetUsedBytes(tbuf); if (l!=inLen) { DBG_ERROR(GWEN_LOGDOMAIN, "Signature length doesn't match"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_VERIFY; } if (memcmp(pInData, GWEN_Buffer_GetStart(tbuf), l)!=0) { DBG_ERROR(GWEN_LOGDOMAIN, "Signature doesn't match:"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_VERIFY; } } GWEN_Buffer_free(tbuf); } else { GWEN_BUFFER *srcBuf; /* copy to a buffer for padding */ srcBuf=GWEN_Buffer_new(0, inLen, 0, 0); GWEN_Buffer_AppendBytes(srcBuf, (const char*)pInData, inLen); /* padd according to given algo */ rv=GWEN_Padd_ApplyPaddAlgo(a, srcBuf); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(srcBuf); return rv; } /* verify with key */ rv=GWEN_Crypt_Key_Verify(k, (const uint8_t*)GWEN_Buffer_GetStart(srcBuf), GWEN_Buffer_GetUsedBytes(srcBuf), pSignatureData, signatureLen); GWEN_Buffer_free(srcBuf); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } if (seqCounter) { GWEN_CRYPT_TOKEN_KEYINFO *ki; /* signature sequence counter is to be checked */ if (keyNum==3) ki=GWEN_CTF_Context_GetRemoteSignKeyInfo(ctx); else ki=GWEN_CTF_Context_GetRemoteAuthKeyInfo(ctx); if (ki && (GWEN_Crypt_Token_KeyInfo_GetFlags(ki) & GWEN_CRYPT_TOKEN_KEYFLAGS_HASSIGNCOUNTER)) { unsigned int seq; seq=GWEN_Crypt_Token_KeyInfo_GetSignCounter(ki); if (seq>=seqCounter) { DBG_WARN(GWEN_LOGDOMAIN, "Bad remote sequence counter (possibly replay attack!)"); return GWEN_ERROR_VERIFY; } GWEN_Crypt_Token_KeyInfo_SetSignCounter(ki, seqCounter); /* write file */ rv=GWEN_Crypt_TokenFile__WriteFile(ct, 0, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "Unable to write file"); return rv; } } else { DBG_WARN(GWEN_LOGDOMAIN, "No sign counter for key %04x", keyId); } } return 0; } int GWENHYWFAR_CB GWEN_Crypt_TokenFile__Encipher(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen, uint32_t gid) { GWEN_CRYPT_TOKEN_FILE *lct; GWEN_CRYPT_TOKEN_CONTEXT *ctx; GWEN_CRYPT_KEY *k; int keyNum; GWEN_BUFFER *srcBuf; int i; int rv; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct); assert(lct); DBG_INFO(GWEN_LOGDOMAIN, "Enciphering with key %d", keyId); /* reload if needed */ rv=GWEN_Crypt_TokenFile__ReloadIfNeeded(ct, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } /* get context */ i=(keyId>>16); ctx=GWEN_Crypt_Token_Context_List_First(lct->contextList); while(ctx) { if (i==0) break; ctx=GWEN_Crypt_Token_Context_List_Next(ctx); i--; } if (ctx==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "No context by id [%x] known", (keyId>>16) & 0xffff); return GWEN_ERROR_NOT_FOUND; } /* get key */ keyNum=keyId & 0xffff; if (keyNum!=2 && keyNum!=4) { /* not remoteCryptKey */ DBG_INFO(GWEN_LOGDOMAIN, "Bad key for encrypting (%x)", keyId); return GWEN_ERROR_INVALID; } k=GWEN_Crypt_TokenFile__GetKey(ct, keyId, gid); if (k==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Key %d not found", keyId); return GWEN_ERROR_NOT_FOUND; } /* copy to a buffer for padding */ srcBuf=GWEN_Buffer_new(0, inLen, 0, 0); GWEN_Buffer_AppendBytes(srcBuf, (const char*)pInData, inLen); GWEN_Buffer_Rewind(srcBuf); /* padd according to given algo */ rv=GWEN_Padd_ApplyPaddAlgo(a, srcBuf); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(srcBuf); return rv; } /* encipher with key */ rv=GWEN_Crypt_Key_Encipher(k, (const uint8_t*)GWEN_Buffer_GetStart(srcBuf), GWEN_Buffer_GetUsedBytes(srcBuf), pOutData, pOutLen); GWEN_Buffer_free(srcBuf); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int GWENHYWFAR_CB GWEN_Crypt_TokenFile__Decipher(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen, uint32_t gid) { GWEN_CRYPT_TOKEN_FILE *lct; GWEN_CRYPT_TOKEN_CONTEXT *ctx; GWEN_CRYPT_KEY *k; int keyNum; GWEN_BUFFER *tbuf; int i; int rv; uint32_t l; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct); assert(lct); DBG_INFO(GWEN_LOGDOMAIN, "Deciphering with key %d", keyId); /* reload if needed */ rv=GWEN_Crypt_TokenFile__ReloadIfNeeded(ct, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } /* get context */ i=(keyId>>16); ctx=GWEN_Crypt_Token_Context_List_First(lct->contextList); while(ctx) { if (i==0) break; ctx=GWEN_Crypt_Token_Context_List_Next(ctx); i--; } if (ctx==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "No context by id [%x] known", (keyId>>16) & 0xffff); return GWEN_ERROR_NOT_FOUND; } /* get key */ keyNum=keyId & 0xffff; if (keyNum!=2 && keyNum!=4) { /* not localCryptKey */ DBG_INFO(GWEN_LOGDOMAIN, "Bad key for decrypting (%x)", keyId); return GWEN_ERROR_INVALID; } k=GWEN_Crypt_TokenFile__GetKey(ct, keyId, gid); if (k==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Key not found"); return GWEN_ERROR_NOT_FOUND; } /* decipher with key */ tbuf=GWEN_Buffer_new(0, inLen+16, 0, 1); l=GWEN_Buffer_GetMaxUnsegmentedWrite(tbuf); rv=GWEN_Crypt_Key_Decipher(k, pInData, inLen, (uint8_t*)GWEN_Buffer_GetStart(tbuf), &l); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_IncrementPos(tbuf, l); GWEN_Buffer_AdjustUsedBytes(tbuf); /* unpadd according to given algo */ rv=GWEN_Padd_UnapplyPaddAlgo(a, tbuf); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } /* copy resulting data to given buffer */ l=GWEN_Buffer_GetUsedBytes(tbuf); if (l>*pOutLen) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BUFFER_OVERFLOW; } memmove(pOutData, GWEN_Buffer_GetStart(tbuf), l); *pOutLen=l; GWEN_Buffer_free(tbuf); return 0; } int GWENHYWFAR_CB GWEN_Crypt_TokenFile__GenerateKey(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, const GWEN_CRYPT_CRYPTALGO *a, uint32_t gid) { GWEN_CRYPT_TOKEN_FILE *lct; GWEN_CRYPT_KEY *pubKey; GWEN_CRYPT_KEY *secKey; int rv; uint32_t keyNum; GWEN_CRYPT_TOKEN_CONTEXT *ctx; int i; uint8_t kbuf[GWEN_CRYPT_KEYRSA_MAX_KEYLENGTH]; uint32_t klen; GWEN_CRYPT_TOKEN_KEYINFO *cki; GWEN_CRYPT_TOKEN_KEYINFO *ki; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct); assert(lct); /* reload if needed */ rv=GWEN_Crypt_TokenFile__ReloadIfNeeded(ct, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } keyNum=keyId & 0xffff; /* check key id */ if (keyNum!=1 && keyNum!=2 && keyNum!=5 && keyNum!=7) { DBG_INFO(GWEN_LOGDOMAIN, "Can only generate local keys."); GWEN_Gui_ProgressLog(gid, GWEN_LoggerLevel_Error, I18N("Can only generate local keys.")); return GWEN_ERROR_NOT_SUPPORTED; } /* check for algo */ if (GWEN_Crypt_CryptAlgo_GetId(a)!=GWEN_Crypt_CryptAlgoId_Rsa) { DBG_INFO(GWEN_LOGDOMAIN, "Only RSA keys supported."); GWEN_Gui_ProgressLog(gid, GWEN_LoggerLevel_Error, I18N("Only RSA keys supported.")); return GWEN_ERROR_NOT_SUPPORTED; } /* get context */ i=(keyId>>16); ctx=GWEN_Crypt_Token_Context_List_First(lct->contextList); while(ctx) { if (i==0) break; ctx=GWEN_Crypt_Token_Context_List_Next(ctx); i--; } /* generate key pair */ DBG_INFO(GWEN_LOGDOMAIN, "Creating key pair using %d bytes", GWEN_Crypt_CryptAlgo_GetChunkSize(a)); rv=GWEN_Crypt_KeyRsa_GeneratePair(GWEN_Crypt_CryptAlgo_GetChunkSize(a), (GWEN_Crypt_Token_GetModes(ct) & GWEN_CRYPT_TOKEN_MODE_EXP_65537)?1:0, &pubKey, &secKey); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Gui_ProgressLog(gid, GWEN_LoggerLevel_Error, I18N("Could not generate key")); return rv; } GWEN_Gui_ProgressLog(gid, GWEN_LoggerLevel_Notice, I18N("Key generated")); /* set key */ if (keyNum==1) cki=GWEN_CTF_Context_GetLocalSignKeyInfo(ctx); else if (keyNum==2) cki=GWEN_CTF_Context_GetLocalCryptKeyInfo(ctx); else if (keyNum==5) cki=GWEN_CTF_Context_GetLocalAuthKeyInfo(ctx); else if (keyNum==7) cki=GWEN_CTF_Context_GetTempLocalSignKeyInfo(ctx); else cki=NULL; if (cki==NULL) { GWEN_Gui_ProgressLog(gid, GWEN_LoggerLevel_Error, I18N("No key info found")); return GWEN_ERROR_NO_DATA; } /* update key info for the key */ ki=GWEN_Crypt_Token_KeyInfo_dup(cki); assert(ki); /* get modulus */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetModulus(pubKey, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No modulus for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(pubKey); return rv; } GWEN_Crypt_Token_KeyInfo_SetModulus(ki, kbuf, klen); /* get exponent */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetExponent(pubKey, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No exponent for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(pubKey); return rv; } GWEN_Crypt_Token_KeyInfo_SetExponent(ki, kbuf, klen); GWEN_Crypt_Token_KeyInfo_SetKeyNumber(ki, GWEN_Crypt_Key_GetKeyNumber(pubKey)); GWEN_Crypt_Token_KeyInfo_SetKeyVersion(ki, GWEN_Crypt_Key_GetKeyVersion(pubKey)); if (keyNum==1) { if (GWEN_Crypt_Token_GetModes(ct) & GWEN_CRYPT_TOKEN_MODE_DIRECT_SIGN) { DBG_DEBUG(GWEN_LOGDOMAIN, "Adding mode \"direct sign\" to key"); GWEN_Crypt_KeyRsa_AddFlags(secKey, GWEN_CRYPT_KEYRSA_FLAGS_DIRECTSIGN); } GWEN_CTF_Context_SetLocalSignKey(ctx, secKey); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASSIGNCOUNTER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY | GWEN_CRYPT_TOKEN_KEYFLAGS_CANSIGN); GWEN_Crypt_Token_KeyInfo_SetSignCounter(ki, 1); GWEN_CTF_Context_SetLocalSignKeyInfo(ctx, ki); } else if (keyNum==2) { GWEN_CTF_Context_SetLocalCryptKey(ctx, secKey); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASSIGNCOUNTER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANENCIPHER | GWEN_CRYPT_TOKEN_KEYFLAGS_CANDECIPHER); GWEN_CTF_Context_SetLocalCryptKeyInfo(ctx, ki); } else if (keyNum==5) { if (GWEN_Crypt_Token_GetModes(ct) & GWEN_CRYPT_TOKEN_MODE_DIRECT_SIGN) { DBG_DEBUG(GWEN_LOGDOMAIN, "Adding mode \"direct sign\" to key"); GWEN_Crypt_KeyRsa_AddFlags(secKey, GWEN_CRYPT_KEYRSA_FLAGS_DIRECTSIGN); } GWEN_CTF_Context_SetLocalAuthKey(ctx, secKey); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASSIGNCOUNTER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY | GWEN_CRYPT_TOKEN_KEYFLAGS_CANSIGN); GWEN_Crypt_Token_KeyInfo_SetSignCounter(ki, 1); GWEN_CTF_Context_SetLocalAuthKeyInfo(ctx, ki); } else if (keyNum==7) { if (GWEN_Crypt_Token_GetModes(ct) & GWEN_CRYPT_TOKEN_MODE_DIRECT_SIGN) { DBG_DEBUG(GWEN_LOGDOMAIN, "Adding mode \"direct sign\" to key"); GWEN_Crypt_KeyRsa_AddFlags(secKey, GWEN_CRYPT_KEYRSA_FLAGS_DIRECTSIGN); } GWEN_CTF_Context_SetTempLocalSignKey(ctx, secKey); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASSIGNCOUNTER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY | GWEN_CRYPT_TOKEN_KEYFLAGS_CANSIGN); GWEN_Crypt_Token_KeyInfo_SetSignCounter(ki, 1); GWEN_CTF_Context_SetTempLocalSignKeyInfo(ctx, ki); } /* the public key is not used */ GWEN_Crypt_Key_free(pubKey); rv=GWEN_Crypt_TokenFile__WriteFile(ct, 0, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "Unable to write file"); GWEN_Gui_ProgressLog(gid, GWEN_LoggerLevel_Error, I18N("Unable to write key file")); return rv; } GWEN_Gui_ProgressLog(gid, GWEN_LoggerLevel_Notice, I18N("Key generated and set")); return 0; } GWENHYWFAR_CB void GWEN_Crypt_TokenFile_freeData(GWEN_UNUSED void *bp, void *p) { GWEN_CRYPT_TOKEN_FILE *lct; lct=(GWEN_CRYPT_TOKEN_FILE*) p; GWEN_Crypt_Token_Context_List_free(lct->contextList); GWEN_FREE_OBJECT(lct); } GWEN_CRYPT_TOKEN *GWEN_Crypt_TokenFile_new(const char *typeName, const char *tokenName) { GWEN_CRYPT_TOKEN *ct; GWEN_CRYPT_TOKEN_FILE *lct; ct=GWEN_Crypt_Token_new(GWEN_Crypt_Token_Device_File, typeName, tokenName); assert(ct); GWEN_NEW_OBJECT(GWEN_CRYPT_TOKEN_FILE, lct); lct->contextList=GWEN_Crypt_Token_Context_List_new(); GWEN_INHERIT_SETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_FILE, ct, lct, GWEN_Crypt_TokenFile_freeData); GWEN_Crypt_Token_SetOpenFn(ct, GWEN_Crypt_TokenFile_Open); GWEN_Crypt_Token_SetCreateFn(ct, GWEN_Crypt_TokenFile_Create); GWEN_Crypt_Token_SetCloseFn(ct, GWEN_Crypt_TokenFile_Close); GWEN_Crypt_Token_SetGetKeyIdListFn(ct, GWEN_Crypt_TokenFile__GetKeyIdList); GWEN_Crypt_Token_SetGetKeyInfoFn(ct, GWEN_Crypt_TokenFile__GetKeyInfo); GWEN_Crypt_Token_SetSetKeyInfoFn(ct, GWEN_Crypt_TokenFile__SetKeyInfo); GWEN_Crypt_Token_SetGetContextIdListFn(ct, GWEN_Crypt_TokenFile__GetContextIdList); GWEN_Crypt_Token_SetGetContextFn(ct, GWEN_Crypt_TokenFile__GetContext); GWEN_Crypt_Token_SetSetContextFn(ct, GWEN_Crypt_TokenFile__SetContext); GWEN_Crypt_Token_SetSignFn(ct, GWEN_Crypt_TokenFile__Sign); GWEN_Crypt_Token_SetVerifyFn(ct, GWEN_Crypt_TokenFile__Verify); GWEN_Crypt_Token_SetEncipherFn(ct, GWEN_Crypt_TokenFile__Encipher); GWEN_Crypt_Token_SetDecipherFn(ct, GWEN_Crypt_TokenFile__Decipher); GWEN_Crypt_Token_SetGenerateKeyFn(ct, GWEN_Crypt_TokenFile__GenerateKey); GWEN_Crypt_Token_SetActivateKeyFn(ct, GWEN_Crypt_TokenFile__ActivateKey); return ct; } gwenhywfar-4.15.2beta/src/crypttoken/ct_context_p.h0000644000175000017500000000171512364015347017405 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "ct_context.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef CT_CONTEXT_P_H #define CT_CONTEXT_P_H #include "ct_context.h" #ifdef __cplusplus extern "C" { #endif struct GWEN_CRYPT_TOKEN_CONTEXT { GWEN_INHERIT_ELEMENT(GWEN_CRYPT_TOKEN_CONTEXT) GWEN_LIST_ELEMENT(GWEN_CRYPT_TOKEN_CONTEXT) int _refCount; uint32_t id; uint32_t signKeyId; uint32_t verifyKeyId; uint32_t encipherKeyId; uint32_t decipherKeyId; uint32_t authSignKeyId; uint32_t authVerifyKeyId; uint32_t tempSignKeyId; char *serviceId; char *userId; char *customerId; char *userName; char *peerId; char *peerName; char *address; int port; char *systemId; }; #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/crypttoken/ct_p.h0000644000175000017500000000321012364015347015631 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: crypttoken.h 1113 2007-01-10 09:14:16Z martin $ begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPT_CRYPTTOKEN_P_H #define GWEN_CRYPT_CRYPTTOKEN_P_H #include struct GWEN_CRYPT_TOKEN { GWEN_INHERIT_ELEMENT(GWEN_CRYPT_TOKEN) GWEN_LIST_ELEMENT(GWEN_CRYPT_TOKEN) GWEN_CRYPT_TOKEN_DEVICE device; char *typeName; char *tokenName; char *friendlyName; uint32_t modes; uint32_t flags; GWEN_CRYPT_TOKEN_OPEN_FN openFn; GWEN_CRYPT_TOKEN_CREATE_FN createFn; GWEN_CRYPT_TOKEN_CLOSE_FN closeFn; GWEN_CRYPT_TOKEN_GETKEYIDLIST_FN getKeyIdListFn; GWEN_CRYPT_TOKEN_GETKEYINFO_FN getKeyInfoFn; GWEN_CRYPT_TOKEN_SETKEYINFO_FN setKeyInfoFn; GWEN_CRYPT_TOKEN_GETCONTEXTIDLIST_FN getContextIdListFn; GWEN_CRYPT_TOKEN_GETCONTEXT_FN getContextFn; GWEN_CRYPT_TOKEN_SETCONTEXT_FN setContextFn; GWEN_CRYPT_TOKEN_SIGN_FN signFn; GWEN_CRYPT_TOKEN_VERIFY_FN verifyFn; GWEN_CRYPT_TOKEN_ENCIPHER_FN encipherFn; GWEN_CRYPT_TOKEN_DECIPHER_FN decipherFn; GWEN_CRYPT_TOKEN_CHANGEPIN_FN changePinFn; GWEN_CRYPT_TOKEN_GENERATEKEY_FN generateKeyFn; GWEN_CRYPT_TOKEN_ACTIVATEKEY_FN activateKeyFn; int openCount; int refCount; }; #endif gwenhywfar-4.15.2beta/src/crypttoken/ctf_context.c0000644000175000017500000002413312416477066017236 00000000000000/*************************************************************************** begin : Wed Mar 16 2005 copyright : (C) 2005-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "ctf_context_p.h" #include #include GWEN_INHERIT(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT) GWEN_CRYPT_TOKEN_CONTEXT *GWEN_CTF_Context_new() { GWEN_CRYPT_TOKEN_CONTEXT *ctx; GWEN_CTF_CONTEXT *fctx; ctx=GWEN_Crypt_Token_Context_new(); GWEN_NEW_OBJECT(GWEN_CTF_CONTEXT, fctx) GWEN_INHERIT_SETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx, fctx, GWEN_CTF_Context_freeData) return ctx; } int GWEN_CTF_Context_IsOfThisType(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) { assert(ctx); return GWEN_INHERIT_ISOFTYPE(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); } GWENHYWFAR_CB void GWEN_CTF_Context_freeData(GWEN_UNUSED void *bp, void *p) { GWEN_CTF_CONTEXT *fctx; fctx=(GWEN_CTF_CONTEXT*) p; GWEN_Crypt_Key_free(fctx->localSignKey); GWEN_Crypt_Key_free(fctx->localCryptKey); GWEN_Crypt_Key_free(fctx->remoteSignKey); GWEN_Crypt_Key_free(fctx->remoteCryptKey); GWEN_Crypt_Key_free(fctx->localAuthKey); GWEN_Crypt_Key_free(fctx->remoteAuthKey); GWEN_Crypt_Key_free(fctx->tempLocalSignKey); GWEN_Crypt_Token_KeyInfo_free(fctx->localSignKeyInfo); GWEN_Crypt_Token_KeyInfo_free(fctx->localCryptKeyInfo); GWEN_Crypt_Token_KeyInfo_free(fctx->remoteSignKeyInfo); GWEN_Crypt_Token_KeyInfo_free(fctx->remoteCryptKeyInfo); GWEN_Crypt_Token_KeyInfo_free(fctx->localAuthKeyInfo); GWEN_Crypt_Token_KeyInfo_free(fctx->remoteAuthKeyInfo); GWEN_Crypt_Token_KeyInfo_free(fctx->tempLocalSignKeyInfo); GWEN_FREE_OBJECT(fctx); } GWEN_CRYPT_KEY *GWEN_CTF_Context_GetLocalSignKey(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) { GWEN_CTF_CONTEXT *fctx; assert(ctx); fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); assert(fctx); return fctx->localSignKey; } void GWEN_CTF_Context_SetLocalSignKey(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *k) { GWEN_CTF_CONTEXT *fctx; assert(ctx); fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); assert(fctx); GWEN_Crypt_Key_free(fctx->localSignKey); fctx->localSignKey=k; } GWEN_CRYPT_TOKEN_KEYINFO*GWEN_CTF_Context_GetLocalSignKeyInfo(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) { GWEN_CTF_CONTEXT *fctx; assert(ctx); fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); assert(fctx); return fctx->localSignKeyInfo; } void GWEN_CTF_Context_SetLocalSignKeyInfo(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_TOKEN_KEYINFO *ki) { GWEN_CTF_CONTEXT *fctx; assert(ctx); fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); assert(fctx); GWEN_Crypt_Token_KeyInfo_free(fctx->localSignKeyInfo); fctx->localSignKeyInfo=ki; } GWEN_CRYPT_KEY *GWEN_CTF_Context_GetLocalCryptKey(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) { GWEN_CTF_CONTEXT *fctx; assert(ctx); fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); assert(fctx); return fctx->localCryptKey; } void GWEN_CTF_Context_SetLocalCryptKey(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *k) { GWEN_CTF_CONTEXT *fctx; assert(ctx); fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); assert(fctx); GWEN_Crypt_Key_free(fctx->localCryptKey); fctx->localCryptKey=k; } GWEN_CRYPT_TOKEN_KEYINFO *GWEN_CTF_Context_GetLocalCryptKeyInfo(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) { GWEN_CTF_CONTEXT *fctx; assert(ctx); fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); assert(fctx); return fctx->localCryptKeyInfo; } void GWEN_CTF_Context_SetLocalCryptKeyInfo(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_TOKEN_KEYINFO *ki) { GWEN_CTF_CONTEXT *fctx; assert(ctx); fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); assert(fctx); GWEN_Crypt_Token_KeyInfo_free(fctx->localCryptKeyInfo); fctx->localCryptKeyInfo=ki; } GWEN_CRYPT_KEY *GWEN_CTF_Context_GetRemoteSignKey(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) { GWEN_CTF_CONTEXT *fctx; assert(ctx); fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); assert(fctx); return fctx->remoteSignKey; } void GWEN_CTF_Context_SetRemoteSignKey(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *k) { GWEN_CTF_CONTEXT *fctx; assert(ctx); fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); assert(fctx); GWEN_Crypt_Key_free(fctx->remoteSignKey); fctx->remoteSignKey=k; } GWEN_CRYPT_TOKEN_KEYINFO *GWEN_CTF_Context_GetRemoteSignKeyInfo(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) { GWEN_CTF_CONTEXT *fctx; assert(ctx); fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); assert(fctx); return fctx->remoteSignKeyInfo; } void GWEN_CTF_Context_SetRemoteSignKeyInfo(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_TOKEN_KEYINFO *ki) { GWEN_CTF_CONTEXT *fctx; assert(ctx); fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); assert(fctx); GWEN_Crypt_Token_KeyInfo_free(fctx->remoteSignKeyInfo); fctx->remoteSignKeyInfo=ki; } GWEN_CRYPT_KEY *GWEN_CTF_Context_GetRemoteCryptKey(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) { GWEN_CTF_CONTEXT *fctx; assert(ctx); fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); assert(fctx); return fctx->remoteCryptKey; } void GWEN_CTF_Context_SetRemoteCryptKey(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *k) { GWEN_CTF_CONTEXT *fctx; assert(ctx); fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); assert(fctx); GWEN_Crypt_Key_free(fctx->remoteCryptKey); fctx->remoteCryptKey=k; } GWEN_CRYPT_TOKEN_KEYINFO *GWEN_CTF_Context_GetRemoteCryptKeyInfo(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) { GWEN_CTF_CONTEXT *fctx; assert(ctx); fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); assert(fctx); return fctx->remoteCryptKeyInfo; } void GWEN_CTF_Context_SetRemoteCryptKeyInfo(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_TOKEN_KEYINFO *ki) { GWEN_CTF_CONTEXT *fctx; assert(ctx); fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); assert(fctx); GWEN_Crypt_Token_KeyInfo_free(fctx->remoteCryptKeyInfo); fctx->remoteCryptKeyInfo=ki; } GWEN_CRYPT_KEY *GWEN_CTF_Context_GetLocalAuthKey(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) { GWEN_CTF_CONTEXT *fctx; assert(ctx); fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); assert(fctx); return fctx->localAuthKey; } void GWEN_CTF_Context_SetLocalAuthKey(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *k) { GWEN_CTF_CONTEXT *fctx; assert(ctx); fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); assert(fctx); GWEN_Crypt_Key_free(fctx->localAuthKey); fctx->localAuthKey=k; } GWEN_CRYPT_TOKEN_KEYINFO *GWEN_CTF_Context_GetLocalAuthKeyInfo(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) { GWEN_CTF_CONTEXT *fctx; assert(ctx); fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); assert(fctx); return fctx->localAuthKeyInfo; } void GWEN_CTF_Context_SetLocalAuthKeyInfo(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_TOKEN_KEYINFO *ki) { GWEN_CTF_CONTEXT *fctx; assert(ctx); fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); assert(fctx); GWEN_Crypt_Token_KeyInfo_free(fctx->localAuthKeyInfo); fctx->localAuthKeyInfo=ki; } GWEN_CRYPT_KEY *GWEN_CTF_Context_GetRemoteAuthKey(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) { GWEN_CTF_CONTEXT *fctx; assert(ctx); fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); assert(fctx); return fctx->remoteAuthKey; } void GWEN_CTF_Context_SetRemoteAuthKey(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *k) { GWEN_CTF_CONTEXT *fctx; assert(ctx); fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); assert(fctx); GWEN_Crypt_Key_free(fctx->remoteAuthKey); fctx->remoteAuthKey=k; } GWEN_CRYPT_TOKEN_KEYINFO *GWEN_CTF_Context_GetRemoteAuthKeyInfo(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) { GWEN_CTF_CONTEXT *fctx; assert(ctx); fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); assert(fctx); return fctx->remoteAuthKeyInfo; } void GWEN_CTF_Context_SetRemoteAuthKeyInfo(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_TOKEN_KEYINFO *ki) { GWEN_CTF_CONTEXT *fctx; assert(ctx); fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); assert(fctx); GWEN_Crypt_Token_KeyInfo_free(fctx->remoteAuthKeyInfo); fctx->remoteAuthKeyInfo=ki; } GWEN_CRYPT_KEY *GWEN_CTF_Context_GetTempLocalSignKey(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) { GWEN_CTF_CONTEXT *fctx; assert(ctx); fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); assert(fctx); return fctx->tempLocalSignKey; } void GWEN_CTF_Context_SetTempLocalSignKey(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *k) { GWEN_CTF_CONTEXT *fctx; assert(ctx); fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); assert(fctx); GWEN_Crypt_Key_free(fctx->tempLocalSignKey); fctx->tempLocalSignKey=k; } GWEN_CRYPT_TOKEN_KEYINFO*GWEN_CTF_Context_GetTempLocalSignKeyInfo(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) { GWEN_CTF_CONTEXT *fctx; assert(ctx); fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); assert(fctx); return fctx->tempLocalSignKeyInfo; } void GWEN_CTF_Context_SetTempLocalSignKeyInfo(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_TOKEN_KEYINFO *ki) { GWEN_CTF_CONTEXT *fctx; assert(ctx); fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx); assert(fctx); GWEN_Crypt_Token_KeyInfo_free(fctx->tempLocalSignKeyInfo); fctx->tempLocalSignKeyInfo=ki; } gwenhywfar-4.15.2beta/src/crypttoken/ct_keyinfo.c0000644000175000017500000001437012416477066017052 00000000000000/*************************************************************************** begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "ct_keyinfo_p.h" #include #include GWEN_LIST_FUNCTIONS(GWEN_CRYPT_TOKEN_KEYINFO, GWEN_Crypt_Token_KeyInfo) GWEN_LIST2_FUNCTIONS(GWEN_CRYPT_TOKEN_KEYINFO, GWEN_Crypt_Token_KeyInfo) GWEN_CRYPT_TOKEN_KEYINFO *GWEN_Crypt_Token_KeyInfo_new(uint32_t kid, GWEN_CRYPT_CRYPTALGOID a, int keySize) { GWEN_CRYPT_TOKEN_KEYINFO *ki; GWEN_NEW_OBJECT(GWEN_CRYPT_TOKEN_KEYINFO, ki) ki->refCount=1; GWEN_LIST_INIT(GWEN_CRYPT_TOKEN_KEYINFO, ki) ki->keyId=kid; ki->cryptAlgoId=a; ki->keySize=keySize; return ki; } void GWEN_Crypt_Token_KeyInfo_free(GWEN_CRYPT_TOKEN_KEYINFO *ki) { if (ki) { assert(ki->refCount); if (ki->refCount==1) { free(ki->keyDescr); if (ki->modulusData) free(ki->modulusData); ki->modulusData=NULL; if (ki->exponentData) free(ki->exponentData); ki->exponentData=NULL; ki->refCount=0; GWEN_LIST_FINI(GWEN_CRYPT_TOKEN_KEYINFO, ki); GWEN_FREE_OBJECT(ki); } else { ki->refCount--; } } } GWEN_CRYPT_TOKEN_KEYINFO *GWEN_Crypt_Token_KeyInfo_dup(const GWEN_CRYPT_TOKEN_KEYINFO *ki) { GWEN_CRYPT_TOKEN_KEYINFO *nki; nki=GWEN_Crypt_Token_KeyInfo_new(ki->keyId, ki->cryptAlgoId, ki->keySize); nki->flags=ki->flags; if (ki->modulusData && ki->modulusLen) { nki->modulusData=(uint8_t*)malloc(ki->modulusLen); assert(nki->modulusData); memmove(nki->modulusData, ki->modulusData, ki->modulusLen); nki->modulusLen=ki->modulusLen; } if (ki->exponentData && ki->exponentLen) { nki->exponentData=(uint8_t*)malloc(ki->exponentLen); assert(nki->exponentData); memmove(nki->exponentData, ki->exponentData, ki->exponentLen); nki->exponentLen=ki->exponentLen; } if (ki->keyDescr) nki->keyDescr=strdup(ki->keyDescr); nki->keyNumber=ki->keyNumber; nki->keyVersion=ki->keyVersion; nki->signCounter=ki->signCounter; return nki; } uint32_t GWEN_Crypt_Token_KeyInfo_GetKeyId(const GWEN_CRYPT_TOKEN_KEYINFO *ki) { assert(ki); assert(ki->refCount); return ki->keyId; } GWEN_CRYPT_CRYPTALGOID GWEN_Crypt_Token_KeyInfo_GetCryptAlgoId(const GWEN_CRYPT_TOKEN_KEYINFO *ki) { assert(ki); assert(ki->refCount); return ki->cryptAlgoId; } int GWEN_Crypt_Token_KeyInfo_GetKeySize(const GWEN_CRYPT_TOKEN_KEYINFO *ki) { assert(ki); assert(ki->refCount); return ki->keySize; } void GWEN_Crypt_Token_KeyInfo_SetKeySize(GWEN_CRYPT_TOKEN_KEYINFO *ki, int i) { assert(ki); assert(ki->refCount); ki->keySize=i; } uint32_t GWEN_Crypt_Token_KeyInfo_GetFlags(const GWEN_CRYPT_TOKEN_KEYINFO *ki) { assert(ki); assert(ki->refCount); return ki->flags; } void GWEN_Crypt_Token_KeyInfo_SetFlags(GWEN_CRYPT_TOKEN_KEYINFO *ki, uint32_t f) { assert(ki); assert(ki->refCount); ki->flags=f; } void GWEN_Crypt_Token_KeyInfo_AddFlags(GWEN_CRYPT_TOKEN_KEYINFO *ki, uint32_t f) { assert(ki); assert(ki->refCount); ki->flags|=f; } void GWEN_Crypt_Token_KeyInfo_SubFlags(GWEN_CRYPT_TOKEN_KEYINFO *ki, uint32_t f) { assert(ki); assert(ki->refCount); ki->flags&=~f; } const uint8_t *GWEN_Crypt_Token_KeyInfo_GetModulusData(const GWEN_CRYPT_TOKEN_KEYINFO *ki) { assert(ki); assert(ki->refCount); return ki->modulusData; } uint32_t GWEN_Crypt_Token_KeyInfo_GetModulusLen(const GWEN_CRYPT_TOKEN_KEYINFO *ki) { assert(ki); assert(ki->refCount); return ki->modulusLen; } void GWEN_Crypt_Token_KeyInfo_SetModulus(GWEN_CRYPT_TOKEN_KEYINFO *ki, const uint8_t *p, uint32_t len) { assert(ki); assert(ki->refCount); assert(p); assert(len); if (ki->modulusData) free(ki->modulusData); ki->modulusData=(uint8_t*) malloc(len); assert(ki->modulusData); memmove(ki->modulusData, p, len); ki->modulusLen=len; } const uint8_t *GWEN_Crypt_Token_KeyInfo_GetExponentData(const GWEN_CRYPT_TOKEN_KEYINFO *ki) { assert(ki); assert(ki->refCount); return ki->exponentData; } uint32_t GWEN_Crypt_Token_KeyInfo_GetExponentLen(const GWEN_CRYPT_TOKEN_KEYINFO *ki) { assert(ki); assert(ki->refCount); return ki->exponentLen; } void GWEN_Crypt_Token_KeyInfo_SetExponent(GWEN_CRYPT_TOKEN_KEYINFO *ki, const uint8_t *p, uint32_t len) { assert(ki); assert(ki->refCount); assert(p); assert(len); if (ki->exponentData) free(ki->exponentData); ki->exponentData=(uint8_t*) malloc(len); assert(ki->exponentData); memmove(ki->exponentData, p, len); ki->exponentLen=len; } uint32_t GWEN_Crypt_Token_KeyInfo_GetKeyVersion(const GWEN_CRYPT_TOKEN_KEYINFO *ki) { assert(ki); assert(ki->refCount); return ki->keyVersion; } void GWEN_Crypt_Token_KeyInfo_SetKeyVersion(GWEN_CRYPT_TOKEN_KEYINFO *ki, uint32_t i) { assert(ki); assert(ki->refCount); ki->keyVersion=i; } uint32_t GWEN_Crypt_Token_KeyInfo_GetKeyNumber(const GWEN_CRYPT_TOKEN_KEYINFO *ki) { assert(ki); assert(ki->refCount); return ki->keyNumber; } void GWEN_Crypt_Token_KeyInfo_SetKeyNumber(GWEN_CRYPT_TOKEN_KEYINFO *ki, uint32_t i) { assert(ki); assert(ki->refCount); ki->keyNumber=i; } uint32_t GWEN_Crypt_Token_KeyInfo_GetSignCounter(const GWEN_CRYPT_TOKEN_KEYINFO *ki) { assert(ki); assert(ki->refCount); return ki->signCounter; } void GWEN_Crypt_Token_KeyInfo_SetSignCounter(GWEN_CRYPT_TOKEN_KEYINFO *ki, uint32_t i) { assert(ki); assert(ki->refCount); ki->signCounter=i; } const char *GWEN_Crypt_Token_KeyInfo_GetKeyDescr(const GWEN_CRYPT_TOKEN_KEYINFO *ki) { assert(ki); assert(ki->refCount); return ki->keyDescr; } void GWEN_Crypt_Token_KeyInfo_SetKeyDescr(GWEN_CRYPT_TOKEN_KEYINFO *ki, const char *s) { assert(ki); assert(ki->refCount); free(ki->keyDescr); if (s) ki->keyDescr=strdup(s); else ki->keyDescr=NULL; } gwenhywfar-4.15.2beta/src/crypttoken/ctplugin_l.h0000644000175000017500000000137012364015347017051 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: crypttoken.h 1113 2007-01-10 09:14:16Z martin $ begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPT_TOKEN_PLUGIN_L_H #define GWEN_CRYPT_TOKEN_PLUGIN_L_H #include int GWEN_Crypt_Token_ModuleInit(void); int GWEN_Crypt_Token_ModuleFini(void); #endif gwenhywfar-4.15.2beta/src/crypttoken/Makefile.am0000644000175000017500000000230212364015347016570 00000000000000INCLUDES= -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt3 \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/parser @all_includes@ AM_CFLAGS=@visibility_cflags@ -DBUILDING_GWENHYWFAR typefiles=ct_context.xml #ct_keyinfo.xml iheaderdir=$(gwenhywfar_headerdir_am)/gwenhywfar iheader_HEADERS=\ ct.h \ ct_be.h \ ct_context.h \ ctf_context_be.h \ ctfile_be.h \ ct_keyinfo.h \ ctplugin_be.h \ ctplugin.h noinst_LTLIBRARIES=libcrypttoken.la noinst_HEADERS=\ ct_p.h \ ct_context_l.h \ ct_context_p.h \ ctf_context_p.h \ ctfile_p.h \ ct_keyinfo_p.h \ ctplugin_p.h \ ctplugin_l.h libcrypttoken_la_SOURCES=\ ct.c \ ct_context.c \ ctf_context.c \ ctfile.c \ ct_keyinfo.c \ ctplugin.c DEFS += -DLIBCHIPCARD_GWENHYWFAR_PLUGIN_PACKAGE=\"libchipcard-libgwenhywfar@GWENHYWFAR_SO_EFFECTIVE@-plugins\" types: $(typefiles) typemaker2 -I $(top_srcdir)/tools/typemaker2/types/c -I $(srcdir) --destfolder="$(srcdir)" -D GWENHYWFAR_API $(typefiles) sources: for f in $(libcrypttoken_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-4.15.2beta/src/crypttoken/ct_context.c0000644000175000017500000006173412416477066017100 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "ct_context.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "ct_context_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_Crypt_Token_Context) GWEN_LIST2_FUNCTIONS(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_Crypt_Token_Context) GWEN_INHERIT_FUNCTIONS(GWEN_CRYPT_TOKEN_CONTEXT) GWEN_CRYPT_TOKEN_CONTEXT *GWEN_Crypt_Token_Context_new(void) { GWEN_CRYPT_TOKEN_CONTEXT *p_struct; GWEN_NEW_OBJECT(GWEN_CRYPT_TOKEN_CONTEXT, p_struct) p_struct->_refCount=1; GWEN_INHERIT_INIT(GWEN_CRYPT_TOKEN_CONTEXT, p_struct) GWEN_LIST_INIT(GWEN_CRYPT_TOKEN_CONTEXT, p_struct) /* members */ p_struct->id=0; p_struct->signKeyId=0; p_struct->verifyKeyId=0; p_struct->encipherKeyId=0; p_struct->decipherKeyId=0; p_struct->authSignKeyId=0; p_struct->authVerifyKeyId=0; p_struct->tempSignKeyId=0; p_struct->serviceId=NULL; p_struct->userId=NULL; p_struct->customerId=NULL; p_struct->userName=NULL; p_struct->peerId=NULL; p_struct->peerName=NULL; p_struct->address=NULL; p_struct->port=0; p_struct->systemId=NULL; return p_struct; } void GWEN_Crypt_Token_Context_free(GWEN_CRYPT_TOKEN_CONTEXT *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_INHERIT_FINI(GWEN_CRYPT_TOKEN_CONTEXT, p_struct) GWEN_LIST_FINI(GWEN_CRYPT_TOKEN_CONTEXT, p_struct) /* members */ free(p_struct->serviceId); free(p_struct->userId); free(p_struct->customerId); free(p_struct->userName); free(p_struct->peerId); free(p_struct->peerName); free(p_struct->address); free(p_struct->systemId); p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void GWEN_Crypt_Token_Context_Attach(GWEN_CRYPT_TOKEN_CONTEXT *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } GWEN_CRYPT_TOKEN_CONTEXT *GWEN_Crypt_Token_Context_dup(const GWEN_CRYPT_TOKEN_CONTEXT *p_src) { GWEN_CRYPT_TOKEN_CONTEXT *p_struct; assert(p_src); p_struct=GWEN_Crypt_Token_Context_new(); /* member "id" */ p_struct->id=p_src->id; /* member "signKeyId" */ p_struct->signKeyId=p_src->signKeyId; /* member "verifyKeyId" */ p_struct->verifyKeyId=p_src->verifyKeyId; /* member "encipherKeyId" */ p_struct->encipherKeyId=p_src->encipherKeyId; /* member "decipherKeyId" */ p_struct->decipherKeyId=p_src->decipherKeyId; /* member "authSignKeyId" */ p_struct->authSignKeyId=p_src->authSignKeyId; /* member "authVerifyKeyId" */ p_struct->authVerifyKeyId=p_src->authVerifyKeyId; /* member "tempSignKeyId" */ p_struct->tempSignKeyId=p_src->tempSignKeyId; /* member "serviceId" */ if (p_struct->serviceId) { free(p_struct->serviceId); p_struct->serviceId=NULL; } if (p_src->serviceId) { p_struct->serviceId=strdup(p_src->serviceId); } /* member "userId" */ if (p_struct->userId) { free(p_struct->userId); p_struct->userId=NULL; } if (p_src->userId) { p_struct->userId=strdup(p_src->userId); } /* member "customerId" */ if (p_struct->customerId) { free(p_struct->customerId); p_struct->customerId=NULL; } if (p_src->customerId) { p_struct->customerId=strdup(p_src->customerId); } /* member "userName" */ if (p_struct->userName) { free(p_struct->userName); p_struct->userName=NULL; } if (p_src->userName) { p_struct->userName=strdup(p_src->userName); } /* member "peerId" */ if (p_struct->peerId) { free(p_struct->peerId); p_struct->peerId=NULL; } if (p_src->peerId) { p_struct->peerId=strdup(p_src->peerId); } /* member "peerName" */ if (p_struct->peerName) { free(p_struct->peerName); p_struct->peerName=NULL; } if (p_src->peerName) { p_struct->peerName=strdup(p_src->peerName); } /* member "address" */ if (p_struct->address) { free(p_struct->address); p_struct->address=NULL; } if (p_src->address) { p_struct->address=strdup(p_src->address); } /* member "port" */ p_struct->port=p_src->port; /* member "systemId" */ if (p_struct->systemId) { free(p_struct->systemId); p_struct->systemId=NULL; } if (p_src->systemId) { p_struct->systemId=strdup(p_src->systemId); } return p_struct; } uint32_t GWEN_Crypt_Token_Context_GetId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct) { assert(p_struct); return p_struct->id; } uint32_t GWEN_Crypt_Token_Context_GetSignKeyId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct) { assert(p_struct); return p_struct->signKeyId; } uint32_t GWEN_Crypt_Token_Context_GetVerifyKeyId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct) { assert(p_struct); return p_struct->verifyKeyId; } uint32_t GWEN_Crypt_Token_Context_GetEncipherKeyId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct) { assert(p_struct); return p_struct->encipherKeyId; } uint32_t GWEN_Crypt_Token_Context_GetDecipherKeyId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct) { assert(p_struct); return p_struct->decipherKeyId; } uint32_t GWEN_Crypt_Token_Context_GetAuthSignKeyId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct) { assert(p_struct); return p_struct->authSignKeyId; } uint32_t GWEN_Crypt_Token_Context_GetAuthVerifyKeyId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct) { assert(p_struct); return p_struct->authVerifyKeyId; } uint32_t GWEN_Crypt_Token_Context_GetTempSignKeyId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct) { assert(p_struct); return p_struct->tempSignKeyId; } const char *GWEN_Crypt_Token_Context_GetServiceId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct) { assert(p_struct); return p_struct->serviceId; } const char *GWEN_Crypt_Token_Context_GetUserId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct) { assert(p_struct); return p_struct->userId; } const char *GWEN_Crypt_Token_Context_GetCustomerId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct) { assert(p_struct); return p_struct->customerId; } const char *GWEN_Crypt_Token_Context_GetUserName(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct) { assert(p_struct); return p_struct->userName; } const char *GWEN_Crypt_Token_Context_GetPeerId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct) { assert(p_struct); return p_struct->peerId; } const char *GWEN_Crypt_Token_Context_GetPeerName(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct) { assert(p_struct); return p_struct->peerName; } const char *GWEN_Crypt_Token_Context_GetAddress(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct) { assert(p_struct); return p_struct->address; } int GWEN_Crypt_Token_Context_GetPort(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct) { assert(p_struct); return p_struct->port; } const char *GWEN_Crypt_Token_Context_GetSystemId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct) { assert(p_struct); return p_struct->systemId; } void GWEN_Crypt_Token_Context_SetId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->id=p_src; } void GWEN_Crypt_Token_Context_SetSignKeyId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->signKeyId=p_src; } void GWEN_Crypt_Token_Context_SetVerifyKeyId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->verifyKeyId=p_src; } void GWEN_Crypt_Token_Context_SetEncipherKeyId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->encipherKeyId=p_src; } void GWEN_Crypt_Token_Context_SetDecipherKeyId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->decipherKeyId=p_src; } void GWEN_Crypt_Token_Context_SetAuthSignKeyId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->authSignKeyId=p_src; } void GWEN_Crypt_Token_Context_SetAuthVerifyKeyId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->authVerifyKeyId=p_src; } void GWEN_Crypt_Token_Context_SetTempSignKeyId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->tempSignKeyId=p_src; } void GWEN_Crypt_Token_Context_SetServiceId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, const char *p_src) { assert(p_struct); if (p_struct->serviceId) { free(p_struct->serviceId); } if (p_src) { p_struct->serviceId=strdup(p_src); } else { p_struct->serviceId=NULL; } } void GWEN_Crypt_Token_Context_SetUserId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, const char *p_src) { assert(p_struct); if (p_struct->userId) { free(p_struct->userId); } if (p_src) { p_struct->userId=strdup(p_src); } else { p_struct->userId=NULL; } } void GWEN_Crypt_Token_Context_SetCustomerId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, const char *p_src) { assert(p_struct); if (p_struct->customerId) { free(p_struct->customerId); } if (p_src) { p_struct->customerId=strdup(p_src); } else { p_struct->customerId=NULL; } } void GWEN_Crypt_Token_Context_SetUserName(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, const char *p_src) { assert(p_struct); if (p_struct->userName) { free(p_struct->userName); } if (p_src) { p_struct->userName=strdup(p_src); } else { p_struct->userName=NULL; } } void GWEN_Crypt_Token_Context_SetPeerId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, const char *p_src) { assert(p_struct); if (p_struct->peerId) { free(p_struct->peerId); } if (p_src) { p_struct->peerId=strdup(p_src); } else { p_struct->peerId=NULL; } } void GWEN_Crypt_Token_Context_SetPeerName(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, const char *p_src) { assert(p_struct); if (p_struct->peerName) { free(p_struct->peerName); } if (p_src) { p_struct->peerName=strdup(p_src); } else { p_struct->peerName=NULL; } } void GWEN_Crypt_Token_Context_SetAddress(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, const char *p_src) { assert(p_struct); if (p_struct->address) { free(p_struct->address); } if (p_src) { p_struct->address=strdup(p_src); } else { p_struct->address=NULL; } } void GWEN_Crypt_Token_Context_SetPort(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, int p_src) { assert(p_struct); p_struct->port=p_src; } void GWEN_Crypt_Token_Context_SetSystemId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, const char *p_src) { assert(p_struct); if (p_struct->systemId) { free(p_struct->systemId); } if (p_src) { p_struct->systemId=strdup(p_src); } else { p_struct->systemId=NULL; } } GWEN_CRYPT_TOKEN_CONTEXT_LIST *GWEN_Crypt_Token_Context_List_dup(const GWEN_CRYPT_TOKEN_CONTEXT_LIST *p_src) { GWEN_CRYPT_TOKEN_CONTEXT_LIST *p_dest; GWEN_CRYPT_TOKEN_CONTEXT *p_elem; assert(p_src); p_dest=GWEN_Crypt_Token_Context_List_new(); p_elem=GWEN_Crypt_Token_Context_List_First(p_src); while(p_elem) { GWEN_CRYPT_TOKEN_CONTEXT *p_cpy; p_cpy=GWEN_Crypt_Token_Context_dup(p_elem); GWEN_Crypt_Token_Context_List_Add(p_cpy, p_dest); p_elem=GWEN_Crypt_Token_Context_List_Next(p_elem); } return p_dest; } void GWEN_Crypt_Token_Context_ReadDb(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, GWEN_DB_NODE *p_db) { assert(p_struct); /* member "id" */ p_struct->id=GWEN_DB_GetIntValue(p_db, "id", 0, 0); /* member "signKeyId" */ p_struct->signKeyId=GWEN_DB_GetIntValue(p_db, "signKeyId", 0, 0); /* member "verifyKeyId" */ p_struct->verifyKeyId=GWEN_DB_GetIntValue(p_db, "verifyKeyId", 0, 0); /* member "encipherKeyId" */ p_struct->encipherKeyId=GWEN_DB_GetIntValue(p_db, "encipherKeyId", 0, 0); /* member "decipherKeyId" */ p_struct->decipherKeyId=GWEN_DB_GetIntValue(p_db, "decipherKeyId", 0, 0); /* member "authSignKeyId" */ p_struct->authSignKeyId=GWEN_DB_GetIntValue(p_db, "authSignKeyId", 0, 0); /* member "authVerifyKeyId" */ p_struct->authVerifyKeyId=GWEN_DB_GetIntValue(p_db, "authVerifyKeyId", 0, 0); /* member "tempSignKeyId" */ p_struct->tempSignKeyId=GWEN_DB_GetIntValue(p_db, "tempSignKeyId", 0, 0); /* member "serviceId" */ if (p_struct->serviceId) { free(p_struct->serviceId); } { const char *s; s=GWEN_DB_GetCharValue(p_db, "serviceId", 0, NULL); if (s) p_struct->serviceId=strdup(s); } if (p_struct->serviceId==NULL) { p_struct->serviceId=NULL; } /* member "userId" */ if (p_struct->userId) { free(p_struct->userId); } { const char *s; s=GWEN_DB_GetCharValue(p_db, "userId", 0, NULL); if (s) p_struct->userId=strdup(s); } if (p_struct->userId==NULL) { p_struct->userId=NULL; } /* member "customerId" */ if (p_struct->customerId) { free(p_struct->customerId); } { const char *s; s=GWEN_DB_GetCharValue(p_db, "customerId", 0, NULL); if (s) p_struct->customerId=strdup(s); } if (p_struct->customerId==NULL) { p_struct->customerId=NULL; } /* member "userName" */ if (p_struct->userName) { free(p_struct->userName); } { const char *s; s=GWEN_DB_GetCharValue(p_db, "userName", 0, NULL); if (s) p_struct->userName=strdup(s); } if (p_struct->userName==NULL) { p_struct->userName=NULL; } /* member "peerId" */ if (p_struct->peerId) { free(p_struct->peerId); } { const char *s; s=GWEN_DB_GetCharValue(p_db, "peerId", 0, NULL); if (s) p_struct->peerId=strdup(s); } if (p_struct->peerId==NULL) { p_struct->peerId=NULL; } /* member "peerName" */ if (p_struct->peerName) { free(p_struct->peerName); } { const char *s; s=GWEN_DB_GetCharValue(p_db, "peerName", 0, NULL); if (s) p_struct->peerName=strdup(s); } if (p_struct->peerName==NULL) { p_struct->peerName=NULL; } /* member "address" */ if (p_struct->address) { free(p_struct->address); } { const char *s; s=GWEN_DB_GetCharValue(p_db, "address", 0, NULL); if (s) p_struct->address=strdup(s); } if (p_struct->address==NULL) { p_struct->address=NULL; } /* member "port" */ p_struct->port=GWEN_DB_GetIntValue(p_db, "port", 0, 0); /* member "systemId" */ if (p_struct->systemId) { free(p_struct->systemId); } { const char *s; s=GWEN_DB_GetCharValue(p_db, "systemId", 0, NULL); if (s) p_struct->systemId=strdup(s); } if (p_struct->systemId==NULL) { p_struct->systemId=NULL; } } int GWEN_Crypt_Token_Context_WriteDb(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "id" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "id", p_struct->id); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "signKeyId" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "signKeyId", p_struct->signKeyId); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "verifyKeyId" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "verifyKeyId", p_struct->verifyKeyId); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "encipherKeyId" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "encipherKeyId", p_struct->encipherKeyId); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "decipherKeyId" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "decipherKeyId", p_struct->decipherKeyId); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "authSignKeyId" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "authSignKeyId", p_struct->authSignKeyId); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "authVerifyKeyId" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "authVerifyKeyId", p_struct->authVerifyKeyId); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "tempSignKeyId" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "tempSignKeyId", p_struct->tempSignKeyId); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "serviceId" */ if (p_struct->serviceId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "serviceId", p_struct->serviceId); else { GWEN_DB_DeleteVar(p_db, "serviceId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "userId" */ if (p_struct->userId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "userId", p_struct->userId); else { GWEN_DB_DeleteVar(p_db, "userId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "customerId" */ if (p_struct->customerId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "customerId", p_struct->customerId); else { GWEN_DB_DeleteVar(p_db, "customerId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "userName" */ if (p_struct->userName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "userName", p_struct->userName); else { GWEN_DB_DeleteVar(p_db, "userName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "peerId" */ if (p_struct->peerId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "peerId", p_struct->peerId); else { GWEN_DB_DeleteVar(p_db, "peerId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "peerName" */ if (p_struct->peerName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "peerName", p_struct->peerName); else { GWEN_DB_DeleteVar(p_db, "peerName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "address" */ if (p_struct->address) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "address", p_struct->address); else { GWEN_DB_DeleteVar(p_db, "address"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "port" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "port", p_struct->port); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "systemId" */ if (p_struct->systemId) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "systemId", p_struct->systemId); else { GWEN_DB_DeleteVar(p_db, "systemId"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } return 0; } GWEN_CRYPT_TOKEN_CONTEXT *GWEN_Crypt_Token_Context_fromDb(GWEN_DB_NODE *p_db) { GWEN_CRYPT_TOKEN_CONTEXT *p_struct; p_struct=GWEN_Crypt_Token_Context_new(); GWEN_Crypt_Token_Context_ReadDb(p_struct, p_db); return p_struct; } int GWEN_Crypt_Token_Context_toDb(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct, GWEN_DB_NODE *p_db) { return GWEN_Crypt_Token_Context_WriteDb(p_struct, p_db); } void GWEN_Crypt_Token_Context_ReadXml(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "id" */ p_struct->id=GWEN_XMLNode_GetIntValue(p_db, "id", 0); /* member "signKeyId" */ p_struct->signKeyId=GWEN_XMLNode_GetIntValue(p_db, "signKeyId", 0); /* member "verifyKeyId" */ p_struct->verifyKeyId=GWEN_XMLNode_GetIntValue(p_db, "verifyKeyId", 0); /* member "encipherKeyId" */ p_struct->encipherKeyId=GWEN_XMLNode_GetIntValue(p_db, "encipherKeyId", 0); /* member "decipherKeyId" */ p_struct->decipherKeyId=GWEN_XMLNode_GetIntValue(p_db, "decipherKeyId", 0); /* member "authSignKeyId" */ p_struct->authSignKeyId=GWEN_XMLNode_GetIntValue(p_db, "authSignKeyId", 0); /* member "authVerifyKeyId" */ p_struct->authVerifyKeyId=GWEN_XMLNode_GetIntValue(p_db, "authVerifyKeyId", 0); /* member "tempSignKeyId" */ p_struct->tempSignKeyId=GWEN_XMLNode_GetIntValue(p_db, "tempSignKeyId", 0); /* member "serviceId" */ if (p_struct->serviceId) { free(p_struct->serviceId); } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "serviceId", NULL); if (s) p_struct->serviceId=strdup(s); } if (p_struct->serviceId==NULL) { /* member "serviceId" is volatile, just presetting */ p_struct->serviceId=NULL; } /* member "userId" */ if (p_struct->userId) { free(p_struct->userId); } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "userId", NULL); if (s) p_struct->userId=strdup(s); } if (p_struct->userId==NULL) { /* member "userId" is volatile, just presetting */ p_struct->userId=NULL; } /* member "customerId" */ if (p_struct->customerId) { free(p_struct->customerId); } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "customerId", NULL); if (s) p_struct->customerId=strdup(s); } if (p_struct->customerId==NULL) { /* member "customerId" is volatile, just presetting */ p_struct->customerId=NULL; } /* member "userName" */ if (p_struct->userName) { free(p_struct->userName); } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "userName", NULL); if (s) p_struct->userName=strdup(s); } if (p_struct->userName==NULL) { /* member "userName" is volatile, just presetting */ p_struct->userName=NULL; } /* member "peerId" */ if (p_struct->peerId) { free(p_struct->peerId); } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "peerId", NULL); if (s) p_struct->peerId=strdup(s); } if (p_struct->peerId==NULL) { /* member "peerId" is volatile, just presetting */ p_struct->peerId=NULL; } /* member "peerName" */ if (p_struct->peerName) { free(p_struct->peerName); } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "peerName", NULL); if (s) p_struct->peerName=strdup(s); } if (p_struct->peerName==NULL) { /* member "peerName" is volatile, just presetting */ p_struct->peerName=NULL; } /* member "address" */ if (p_struct->address) { free(p_struct->address); } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "address", NULL); if (s) p_struct->address=strdup(s); } if (p_struct->address==NULL) { /* member "address" is volatile, just presetting */ p_struct->address=NULL; } /* member "port" */ p_struct->port=GWEN_XMLNode_GetIntValue(p_db, "port", 0); /* member "systemId" */ if (p_struct->systemId) { free(p_struct->systemId); } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "systemId", NULL); if (s) p_struct->systemId=strdup(s); } if (p_struct->systemId==NULL) { /* member "systemId" is volatile, just presetting */ p_struct->systemId=NULL; } } void GWEN_Crypt_Token_Context_WriteXml(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "id" */ GWEN_XMLNode_SetIntValue(p_db, "id", p_struct->id); /* member "signKeyId" */ GWEN_XMLNode_SetIntValue(p_db, "signKeyId", p_struct->signKeyId); /* member "verifyKeyId" */ GWEN_XMLNode_SetIntValue(p_db, "verifyKeyId", p_struct->verifyKeyId); /* member "encipherKeyId" */ GWEN_XMLNode_SetIntValue(p_db, "encipherKeyId", p_struct->encipherKeyId); /* member "decipherKeyId" */ GWEN_XMLNode_SetIntValue(p_db, "decipherKeyId", p_struct->decipherKeyId); /* member "authSignKeyId" */ GWEN_XMLNode_SetIntValue(p_db, "authSignKeyId", p_struct->authSignKeyId); /* member "authVerifyKeyId" */ GWEN_XMLNode_SetIntValue(p_db, "authVerifyKeyId", p_struct->authVerifyKeyId); /* member "tempSignKeyId" */ GWEN_XMLNode_SetIntValue(p_db, "tempSignKeyId", p_struct->tempSignKeyId); /* member "serviceId" */ GWEN_XMLNode_SetCharValue(p_db, "serviceId", p_struct->serviceId); /* member "userId" */ GWEN_XMLNode_SetCharValue(p_db, "userId", p_struct->userId); /* member "customerId" */ GWEN_XMLNode_SetCharValue(p_db, "customerId", p_struct->customerId); /* member "userName" */ GWEN_XMLNode_SetCharValue(p_db, "userName", p_struct->userName); /* member "peerId" */ GWEN_XMLNode_SetCharValue(p_db, "peerId", p_struct->peerId); /* member "peerName" */ GWEN_XMLNode_SetCharValue(p_db, "peerName", p_struct->peerName); /* member "address" */ GWEN_XMLNode_SetCharValue(p_db, "address", p_struct->address); /* member "port" */ GWEN_XMLNode_SetIntValue(p_db, "port", p_struct->port); /* member "systemId" */ GWEN_XMLNode_SetCharValue(p_db, "systemId", p_struct->systemId); } void GWEN_Crypt_Token_Context_toXml(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct, GWEN_XMLNODE *p_db) { GWEN_Crypt_Token_Context_WriteXml(p_struct, p_db); } GWEN_CRYPT_TOKEN_CONTEXT *GWEN_Crypt_Token_Context_fromXml(GWEN_XMLNODE *p_db) { GWEN_CRYPT_TOKEN_CONTEXT *p_struct; p_struct=GWEN_Crypt_Token_Context_new(); GWEN_Crypt_Token_Context_ReadXml(p_struct, p_db); return p_struct; } GWEN_CRYPT_TOKEN_CONTEXT *GWEN_Crypt_Token_Context_List_GetById(const GWEN_CRYPT_TOKEN_CONTEXT_LIST *p_list, uint32_t p_cmp) { GWEN_CRYPT_TOKEN_CONTEXT *p_struct; assert(p_list); p_struct = GWEN_Crypt_Token_Context_List_First(p_list); while(p_struct) { int p_rv; if (p_struct->id==p_cmp) p_rv=0; else if (p_cmpid) p_rv=-1; else p_rv=1; if (p_rv == 0) return p_struct; p_struct = GWEN_Crypt_Token_Context_List_Next(p_struct); } return NULL; } /* code headers */ gwenhywfar-4.15.2beta/src/crypttoken/ct_keyinfo_p.h0000644000175000017500000000203612364015347017362 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: crypttoken.h 1113 2007-01-10 09:14:16Z martin $ begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPT_TOKEN_KEYINFO_P_H #define GWEN_CRYPT_TOKEN_KEYINFO_P_H #include "ct_keyinfo.h" struct GWEN_CRYPT_TOKEN_KEYINFO { GWEN_LIST_ELEMENT(GWEN_CRYPT_TOKEN_KEYINFO) uint32_t keyId; GWEN_CRYPT_CRYPTALGOID cryptAlgoId; int keySize; uint32_t flags; char *keyDescr; uint8_t *modulusData; uint32_t modulusLen; uint8_t *exponentData; uint32_t exponentLen; uint32_t keyNumber; uint32_t keyVersion; uint32_t signCounter; int refCount; }; #endif gwenhywfar-4.15.2beta/src/crypttoken/ctplugin_p.h0000644000175000017500000000174612364015347017064 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: crypttoken.h 1113 2007-01-10 09:14:16Z martin $ begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPT_TOKEN_PLUGIN_P_H #define GWEN_CRYPT_TOKEN_PLUGIN_P_H #include "ctplugin_be.h" typedef struct GWEN_CRYPT_TOKEN_PLUGIN GWEN_CRYPT_TOKEN_PLUGIN; struct GWEN_CRYPT_TOKEN_PLUGIN { GWEN_CRYPT_TOKEN_DEVICE devType; GWEN_CRYPT_TOKEN_PLUGIN_CREATETOKEN_FN createTokenFn; GWEN_CRYPT_TOKEN_PLUGIN_CHECKTOKEN_FN checkTokenFn; }; static void GWENHYWFAR_CB GWEN_Crypt_Token_Plugin_FreeData(void *bp, void *p); #endif gwenhywfar-4.15.2beta/src/crypttoken/ctplugin.c0000644000175000017500000003277412416477066016555 00000000000000/*************************************************************************** begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "ctplugin_p.h" #include "i18n_l.h" #include #include #include #include #include #ifdef OS_WIN32 # define DIRSEP "\\" #else # define DIRSEP "/" #endif GWEN_INHERIT(GWEN_PLUGIN, GWEN_CRYPT_TOKEN_PLUGIN) int GWEN_Crypt_Token_ModuleInit(void) { GWEN_PLUGIN_MANAGER *pm; int err; GWEN_STRINGLIST *sl; pm=GWEN_PluginManager_new(GWEN_CRYPT_TOKEN_PLUGIN_TYPENAME, GWEN_PM_LIBNAME); err=GWEN_PluginManager_Register(pm); if (err) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not register CryptToken plugin manager"); return err; } /* create plugin paths */ sl=GWEN_PathManager_GetPaths(GWEN_PM_LIBNAME, GWEN_PM_PLUGINDIR); if (sl) { GWEN_STRINGLISTENTRY *se; GWEN_BUFFER *pbuf; pbuf=GWEN_Buffer_new(0, 256, 0, 1); se=GWEN_StringList_FirstEntry(sl); while(se) { GWEN_Buffer_AppendString(pbuf, GWEN_StringListEntry_Data(se)); GWEN_Buffer_AppendString(pbuf, DIRSEP GWEN_CRYPT_TOKEN_FOLDER); DBG_INFO(GWEN_LOGDOMAIN, "Adding plugin path [%s]", GWEN_Buffer_GetStart(pbuf)); GWEN_PluginManager_AddPath(pm, GWEN_PM_LIBNAME, GWEN_Buffer_GetStart(pbuf)); GWEN_Buffer_Reset(pbuf); se=GWEN_StringListEntry_Next(se); } GWEN_Buffer_free(pbuf); GWEN_StringList_free(sl); } return 0; } int GWEN_Crypt_Token_ModuleFini(void) { GWEN_PLUGIN_MANAGER *pm; pm=GWEN_PluginManager_FindPluginManager(GWEN_CRYPT_TOKEN_PLUGIN_TYPENAME); if (pm) { int rv; rv=GWEN_PluginManager_Unregister(pm); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not unregister CryptToken plugin manager (%d)", rv); return rv; } else GWEN_PluginManager_free(pm); } return 0; } GWEN_PLUGIN *GWEN_Crypt_Token_Plugin_new(GWEN_PLUGIN_MANAGER *mgr, GWEN_CRYPT_TOKEN_DEVICE devType, const char *typeName, const char *fileName) { GWEN_PLUGIN *pl; GWEN_CRYPT_TOKEN_PLUGIN *xpl; pl=GWEN_Plugin_new(mgr, typeName, fileName); GWEN_NEW_OBJECT(GWEN_CRYPT_TOKEN_PLUGIN, xpl); GWEN_INHERIT_SETDATA(GWEN_PLUGIN, GWEN_CRYPT_TOKEN_PLUGIN, pl, xpl, GWEN_Crypt_Token_Plugin_FreeData); xpl->devType=devType; return pl; } GWENHYWFAR_CB void GWEN_Crypt_Token_Plugin_FreeData(GWEN_UNUSED void *bp, void *p) { GWEN_CRYPT_TOKEN_PLUGIN *xpl; xpl=(GWEN_CRYPT_TOKEN_PLUGIN*)p; GWEN_FREE_OBJECT(xpl); } GWEN_CRYPT_TOKEN *GWEN_Crypt_Token_Plugin_CreateToken(GWEN_PLUGIN *pl, const char *name) { GWEN_CRYPT_TOKEN_PLUGIN *xpl; assert(pl); xpl=GWEN_INHERIT_GETDATA(GWEN_PLUGIN, GWEN_CRYPT_TOKEN_PLUGIN, pl); assert(xpl); if (xpl->createTokenFn) return xpl->createTokenFn(pl, name); else { DBG_WARN(GWEN_LOGDOMAIN, "No createTokenFn"); return NULL; } } int GWEN_Crypt_Token_Plugin_CheckToken(GWEN_PLUGIN *pl, GWEN_BUFFER *name) { GWEN_CRYPT_TOKEN_PLUGIN *xpl; assert(pl); xpl=GWEN_INHERIT_GETDATA(GWEN_PLUGIN, GWEN_CRYPT_TOKEN_PLUGIN, pl); assert(xpl); if (xpl->checkTokenFn) return xpl->checkTokenFn(pl, name); else { DBG_INFO(GWEN_LOGDOMAIN, "No checkTokenFn"); return GWEN_ERROR_NOT_IMPLEMENTED; } } GWEN_CRYPT_TOKEN_DEVICE GWEN_Crypt_Token_Plugin_GetDeviceType(const GWEN_PLUGIN *pl) { GWEN_CRYPT_TOKEN_PLUGIN *xpl; assert(pl); xpl=GWEN_INHERIT_GETDATA(GWEN_PLUGIN, GWEN_CRYPT_TOKEN_PLUGIN, pl); assert(xpl); return xpl->devType; } GWEN_CRYPT_TOKEN_PLUGIN_CREATETOKEN_FN GWEN_Crypt_Token_Plugin_SetCreateTokenFn(GWEN_PLUGIN *pl, GWEN_CRYPT_TOKEN_PLUGIN_CREATETOKEN_FN fn) { GWEN_CRYPT_TOKEN_PLUGIN *xpl; GWEN_CRYPT_TOKEN_PLUGIN_CREATETOKEN_FN of; assert(pl); xpl=GWEN_INHERIT_GETDATA(GWEN_PLUGIN, GWEN_CRYPT_TOKEN_PLUGIN, pl); assert(xpl); of=xpl->createTokenFn; xpl->createTokenFn=fn; return of; } GWEN_CRYPT_TOKEN_PLUGIN_CHECKTOKEN_FN GWEN_Crypt_Token_Plugin_SetCheckTokenFn(GWEN_PLUGIN *pl, GWEN_CRYPT_TOKEN_PLUGIN_CHECKTOKEN_FN fn) { GWEN_CRYPT_TOKEN_PLUGIN *xpl; GWEN_CRYPT_TOKEN_PLUGIN_CHECKTOKEN_FN of; assert(pl); xpl=GWEN_INHERIT_GETDATA(GWEN_PLUGIN, GWEN_CRYPT_TOKEN_PLUGIN, pl); assert(xpl); of=xpl->checkTokenFn; xpl->checkTokenFn=fn; return of; } GWEN_PLUGIN_DESCRIPTION_LIST2 *GWEN_Crypt_Token_PluginManager_GetPluginDescrs(GWEN_PLUGIN_MANAGER *pm, GWEN_CRYPT_TOKEN_DEVICE devt) { GWEN_PLUGIN_DESCRIPTION_LIST2 *pl1; pl1=GWEN_PluginManager_GetPluginDescrs(pm); if (pl1) { GWEN_PLUGIN_DESCRIPTION_LIST2_ITERATOR *pit; GWEN_PLUGIN_DESCRIPTION_LIST2 *pl2; pl2=GWEN_PluginDescription_List2_new(); pit=GWEN_PluginDescription_List2_First(pl1); if (pit) { GWEN_PLUGIN_DESCRIPTION *pd; const char *ts; if (devt==GWEN_Crypt_Token_Device_Any) ts=NULL; else ts=GWEN_Crypt_Token_Device_toString(devt); pd=GWEN_PluginDescription_List2Iterator_Data(pit); while(pd) { GWEN_XMLNODE *node; const char *nts; int match=0; node=GWEN_PluginDescription_GetXmlNode(pd); assert(node); nts=GWEN_XMLNode_GetProperty(node, "device", 0); if (nts) { if (!ts || (ts && strcasecmp(ts, nts)==0)) match=1; } else if (!ts) match=1; if (match) { GWEN_PLUGIN_DESCRIPTION *pd2; pd2=GWEN_PluginDescription_dup(pd); GWEN_PluginDescription_List2_PushBack(pl2, pd2); } pd=GWEN_PluginDescription_List2Iterator_Next(pit); } GWEN_PluginDescription_List2Iterator_free(pit); } GWEN_PluginDescription_List2_freeAll(pl1); if (GWEN_PluginDescription_List2_GetSize(pl2)==0) { GWEN_PluginDescription_List2_freeAll(pl2); DBG_ERROR(GWEN_LOGDOMAIN, "No matching plugin descriptions for the given device type"); return NULL; } return pl2; } else { DBG_ERROR(GWEN_LOGDOMAIN, "No plugin descriptions at all"); } return NULL; } int GWEN_Crypt_Token_PluginManager_CheckToken(GWEN_PLUGIN_MANAGER *pm, GWEN_CRYPT_TOKEN_DEVICE devt, GWEN_BUFFER *typeName, GWEN_BUFFER *tokenName, uint32_t guiid) { GWEN_PLUGIN_DESCRIPTION_LIST2 *pdl; assert(pm); pdl=GWEN_Crypt_Token_PluginManager_GetPluginDescrs(pm, devt); if (pdl==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No plugin descriptions found for this device type"); GWEN_Gui_ProgressLog(guiid, GWEN_LoggerLevel_Error, I18N("No plugin found for this device type")); GWEN_Gui_ProgressLog(guiid, GWEN_LoggerLevel_Error, I18N("If you're using a Debian/Ubuntu based system " "please consider to install package " LIBCHIPCARD_GWENHYWFAR_PLUGIN_PACKAGE)); return GWEN_ERROR_NOT_FOUND; } else { GWEN_PLUGIN_DESCRIPTION_LIST2_ITERATOR *pit; pit=GWEN_PluginDescription_List2_First(pdl); if (pit) { GWEN_PLUGIN_DESCRIPTION *pd; uint32_t progressId; unsigned int pdcount; unsigned int cnt=0; pdcount=GWEN_PluginDescription_List2_GetSize(pdl); progressId=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_ALWAYS_SHOW_LOG | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Determining plugin module..."), NULL, pdcount, guiid); pd=GWEN_PluginDescription_List2Iterator_Data(pit); assert(pd); while(pd) { GWEN_XMLNODE *n; int err; GWEN_PLUGIN *pl; char logbuffer[256]; n=GWEN_PluginDescription_GetXmlNode(pd); assert(n); snprintf(logbuffer, sizeof(logbuffer)-1, I18N("Loading plugin \"%s\""), GWEN_PluginDescription_GetName(pd)); logbuffer[sizeof(logbuffer)-1]=0; GWEN_Gui_ProgressLog(progressId, GWEN_LoggerLevel_Notice, logbuffer); /* device type matches, check this plugin */ pl=GWEN_PluginManager_GetPlugin(pm, GWEN_PluginDescription_GetName(pd)); if (pl) { GWEN_BUFFER *lTokenName; int rv; lTokenName=GWEN_Buffer_dup(tokenName); snprintf(logbuffer, sizeof(logbuffer)-1, I18N("Checking plugin \"%s\""), GWEN_Plugin_GetName(pl)); logbuffer[sizeof(logbuffer)-1]=0; GWEN_Gui_ProgressLog(progressId, GWEN_LoggerLevel_Notice, logbuffer); DBG_INFO(GWEN_LOGDOMAIN, "Checking plugin \"%s\" for [%s]", GWEN_Plugin_GetName(pl), GWEN_Buffer_GetStart(lTokenName)); rv=GWEN_Crypt_Token_Plugin_CheckToken(pl, lTokenName); switch(rv) { case 0: /* responsive plugin found */ snprintf(logbuffer, sizeof(logbuffer)-1, I18N("Plugin \"%s\" supports this token"), GWEN_Plugin_GetName(pl)); logbuffer[sizeof(logbuffer)-1]=0; err=GWEN_Gui_ProgressLog(progressId, GWEN_LoggerLevel_Notice, logbuffer); if (err==GWEN_ERROR_USER_ABORTED) { GWEN_Gui_ProgressEnd(progressId); GWEN_Buffer_free(lTokenName); GWEN_PluginDescription_List2Iterator_free(pit); GWEN_PluginDescription_List2_freeAll(pdl); return err; } GWEN_Buffer_Reset(typeName); GWEN_Buffer_AppendString(typeName, GWEN_Plugin_GetName(pl)); GWEN_Buffer_Reset(tokenName); GWEN_Buffer_AppendBuffer(tokenName, lTokenName); GWEN_Buffer_free(lTokenName); GWEN_PluginDescription_List2Iterator_free(pit); GWEN_PluginDescription_List2_freeAll(pdl); GWEN_Gui_ProgressEnd(progressId); return 0; case GWEN_ERROR_NOT_IMPLEMENTED: snprintf(logbuffer, sizeof(logbuffer)-1, I18N("Plugin \"%s\": Function not implemented"), GWEN_Plugin_GetName(pl)); logbuffer[sizeof(logbuffer)-1]=0; GWEN_Gui_ProgressLog(progressId, GWEN_LoggerLevel_Notice, logbuffer); break; case GWEN_ERROR_NOT_SUPPORTED: snprintf(logbuffer, sizeof(logbuffer)-1, I18N("Plugin \"%s\" does not support this token"), GWEN_Plugin_GetName(pl)); logbuffer[sizeof(logbuffer)-1]=0; GWEN_Gui_ProgressLog(progressId, GWEN_LoggerLevel_Info, logbuffer); break; case GWEN_ERROR_BAD_NAME: snprintf(logbuffer, sizeof(logbuffer)-1, I18N("Plugin \"%s\" supports this token, but the name " "did not match"), GWEN_Plugin_GetName(pl)); logbuffer[sizeof(logbuffer)-1]=0; GWEN_Gui_ProgressLog(progressId, GWEN_LoggerLevel_Info, logbuffer); break; default: snprintf(logbuffer, sizeof(logbuffer)-1, I18N("Plugin \"%s\": Unexpected error (%d)"), GWEN_Plugin_GetName(pl), rv); logbuffer[sizeof(logbuffer)-1]=0; GWEN_Gui_ProgressLog(progressId, GWEN_LoggerLevel_Info, logbuffer); break; } /* switch */ } /* if plugin loaded */ else { snprintf(logbuffer, sizeof(logbuffer)-1, I18N("Could not load plugin \"%s\""), GWEN_PluginDescription_GetName(pd)); logbuffer[sizeof(logbuffer)-1]=0; GWEN_Gui_ProgressLog(progressId, GWEN_LoggerLevel_Warning, logbuffer); } cnt++; err=GWEN_Gui_ProgressAdvance(progressId, cnt); if (err) { DBG_INFO(GWEN_LOGDOMAIN, "User aborted"); GWEN_Gui_ProgressEnd(progressId); GWEN_PluginDescription_List2Iterator_free(pit); GWEN_PluginDescription_List2_freeAll(pdl); GWEN_Gui_ProgressEnd(progressId); return err; } pd=GWEN_PluginDescription_List2Iterator_Next(pit); } GWEN_Gui_ProgressEnd(progressId); GWEN_PluginDescription_List2Iterator_free(pit); } GWEN_PluginDescription_List2_freeAll(pdl); } return GWEN_ERROR_NOT_SUPPORTED; } gwenhywfar-4.15.2beta/src/crypttoken/ctf_context_be.h0000644000175000017500000000767712364015347017717 00000000000000/*************************************************************************** begin : Wed Mar 16 2005 copyright : (C) 2005-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CTF_CONTEXT_BE_H #define GWEN_CTF_CONTEXT_BE_H #include #include #include #define GWEN_CRYPT_TOKEN_CONTEXT_KEYS 7 #ifdef __cplusplus extern "C" { #endif GWENHYWFAR_API GWEN_CRYPT_TOKEN_CONTEXT *GWEN_CTF_Context_new(); GWENHYWFAR_API int GWEN_CTF_Context_IsOfThisType(const GWEN_CRYPT_TOKEN_CONTEXT *ctx); GWENHYWFAR_API GWEN_CRYPT_KEY *GWEN_CTF_Context_GetLocalSignKey(const GWEN_CRYPT_TOKEN_CONTEXT *ctx); GWENHYWFAR_API void GWEN_CTF_Context_SetLocalSignKey(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *k); GWENHYWFAR_API GWEN_CRYPT_TOKEN_KEYINFO *GWEN_CTF_Context_GetLocalSignKeyInfo(const GWEN_CRYPT_TOKEN_CONTEXT *ctx); GWENHYWFAR_API void GWEN_CTF_Context_SetLocalSignKeyInfo(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_TOKEN_KEYINFO *ki); GWENHYWFAR_API GWEN_CRYPT_KEY *GWEN_CTF_Context_GetLocalCryptKey(const GWEN_CRYPT_TOKEN_CONTEXT *ctx); GWENHYWFAR_API void GWEN_CTF_Context_SetLocalCryptKey(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *k); GWENHYWFAR_API GWEN_CRYPT_TOKEN_KEYINFO *GWEN_CTF_Context_GetLocalCryptKeyInfo(const GWEN_CRYPT_TOKEN_CONTEXT *ctx); GWENHYWFAR_API void GWEN_CTF_Context_SetLocalCryptKeyInfo(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_TOKEN_KEYINFO *ki); GWENHYWFAR_API GWEN_CRYPT_KEY *GWEN_CTF_Context_GetRemoteSignKey(const GWEN_CRYPT_TOKEN_CONTEXT *ctx); GWENHYWFAR_API void GWEN_CTF_Context_SetRemoteSignKey(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *k); GWENHYWFAR_API GWEN_CRYPT_TOKEN_KEYINFO *GWEN_CTF_Context_GetRemoteSignKeyInfo(const GWEN_CRYPT_TOKEN_CONTEXT *ctx); GWENHYWFAR_API void GWEN_CTF_Context_SetRemoteSignKeyInfo(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_TOKEN_KEYINFO *ki); GWENHYWFAR_API GWEN_CRYPT_KEY *GWEN_CTF_Context_GetRemoteCryptKey(const GWEN_CRYPT_TOKEN_CONTEXT *ctx); GWENHYWFAR_API void GWEN_CTF_Context_SetRemoteCryptKey(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *k); GWENHYWFAR_API GWEN_CRYPT_TOKEN_KEYINFO *GWEN_CTF_Context_GetRemoteCryptKeyInfo(const GWEN_CRYPT_TOKEN_CONTEXT *ctx); GWENHYWFAR_API void GWEN_CTF_Context_SetRemoteCryptKeyInfo(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_TOKEN_KEYINFO *ki); GWENHYWFAR_API GWEN_CRYPT_KEY *GWEN_CTF_Context_GetLocalAuthKey(const GWEN_CRYPT_TOKEN_CONTEXT *ctx); GWENHYWFAR_API void GWEN_CTF_Context_SetLocalAuthKey(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *k); GWENHYWFAR_API GWEN_CRYPT_TOKEN_KEYINFO *GWEN_CTF_Context_GetLocalAuthKeyInfo(const GWEN_CRYPT_TOKEN_CONTEXT *ctx); GWENHYWFAR_API void GWEN_CTF_Context_SetLocalAuthKeyInfo(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_TOKEN_KEYINFO *ki); GWENHYWFAR_API GWEN_CRYPT_KEY *GWEN_CTF_Context_GetRemoteAuthKey(const GWEN_CRYPT_TOKEN_CONTEXT *ctx); GWENHYWFAR_API void GWEN_CTF_Context_SetRemoteAuthKey(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *k); GWENHYWFAR_API GWEN_CRYPT_TOKEN_KEYINFO *GWEN_CTF_Context_GetRemoteAuthKeyInfo(const GWEN_CRYPT_TOKEN_CONTEXT *ctx); GWENHYWFAR_API void GWEN_CTF_Context_SetRemoteAuthKeyInfo(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_TOKEN_KEYINFO *ki); GWENHYWFAR_API GWEN_CRYPT_KEY *GWEN_CTF_Context_GetTempLocalSignKey(const GWEN_CRYPT_TOKEN_CONTEXT *ctx); GWENHYWFAR_API void GWEN_CTF_Context_SetTempLocalSignKey(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *k); GWENHYWFAR_API GWEN_CRYPT_TOKEN_KEYINFO *GWEN_CTF_Context_GetTempLocalSignKeyInfo(const GWEN_CRYPT_TOKEN_CONTEXT *ctx); GWENHYWFAR_API void GWEN_CTF_Context_SetTempLocalSignKeyInfo(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_TOKEN_KEYINFO *ki); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/crypttoken/ct_context_l.h0000644000175000017500000000213212416477066017403 00000000000000/* This file is auto-generated from "ct_context.xml" by the typemaker tool of Gwenhywfar. Do not edit this file -- all changes will be lost! */ #ifndef CT_CONTEXT_L_H #define CT_CONTEXT_L_H /** @page P_GWEN_CRYPT_TOKEN_CONTEXT_LIB GWEN_Crypt_Token_Context (lib) This page describes the properties of GWEN_CRYPT_TOKEN_CONTEXT

Key Ids

This group contains the ids of the keys for multiple given purposes which are to be used in this context.

User Information

This group contains some information about this context. With some crypt token user information might be available with a context.

*/ #include "ct_context.h" #ifdef __cplusplus extern "C" { #endif /** @name Key Ids * This group contains the ids of the keys for multiple given purposes which are to be used in this context.*/ /*@{*/ /*@}*/ /** @name User Information * This group contains some information about this context. With some crypt token user information might be available with a context.*/ /*@{*/ /*@}*/ #ifdef __cplusplus } /* __cplusplus */ #endif #endif /* CT_CONTEXT_L_H */ gwenhywfar-4.15.2beta/src/crypttoken/ctfile_be.h0000644000175000017500000000340112416477066016632 00000000000000/*************************************************************************** begin : Wed Mar 16 2005 copyright : (C) 2005-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPT_TOKEN_FILE_BE_H #define GWEN_CRYPT_TOKEN_FILE_BE_H #include typedef int GWENHYWFAR_CB (*GWEN_CRYPT_TOKEN_FILE_READ_FN)(GWEN_CRYPT_TOKEN *ct, int fd, uint32_t gid); typedef int GWENHYWFAR_CB (*GWEN_CRYPT_TOKEN_FILE_WRITE_FN)(GWEN_CRYPT_TOKEN *ct, int fd, int cre, uint32_t gid); /** * Key ids: The left 16 bits contain the context index, the right 16 bits contain the * key number: *
    *
  • xx01=localSignKey
  • *
  • xx02=localCryptKey
  • *
  • xx03=remoteSignKey
  • *
  • xx04=remoteCryptKey
  • *
  • xx05=localAuthKey
  • *
  • xx06=remoteAuthKey
  • *
  • xx07=tempLocalSignKey
  • *
*/ #ifdef __cplusplus extern "C" { #endif GWENHYWFAR_API GWEN_CRYPT_TOKEN *GWEN_Crypt_TokenFile_new(const char *typeName, const char *tokenName); GWENHYWFAR_API GWEN_CRYPT_TOKEN_FILE_READ_FN GWEN_Crypt_TokenFile_SetReadFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_FILE_READ_FN f); GWENHYWFAR_API GWEN_CRYPT_TOKEN_FILE_WRITE_FN GWEN_Crypt_TokenFile_SetWriteFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_FILE_WRITE_FN f); GWENHYWFAR_API void GWEN_Crypt_TokenFile_AddContext(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_CONTEXT *ctx); GWENHYWFAR_API GWEN_CRYPT_TOKEN_CONTEXT *GWEN_Crypt_TokenFile_GetContext(GWEN_CRYPT_TOKEN *ct, int idx); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/crypttoken/ct.h0000644000175000017500000001334412416477066015333 00000000000000/*************************************************************************** begin : Wed Mar 16 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPT_CRYPTTOKEN_H #define GWEN_CRYPT_CRYPTTOKEN_H #include #include typedef struct GWEN_CRYPT_TOKEN GWEN_CRYPT_TOKEN; #ifdef __cplusplus extern "C" { #endif GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_CRYPT_TOKEN, GWEN_Crypt_Token, GWENHYWFAR_API) GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_CRYPT_TOKEN, GWEN_Crypt_Token, GWENHYWFAR_API) #ifdef __cplusplus } #endif typedef enum { GWEN_Crypt_Token_Device_Unknown=-1, GWEN_Crypt_Token_Device_None=0, GWEN_Crypt_Token_Device_File, GWEN_Crypt_Token_Device_Card, GWEN_Crypt_Token_Device_Any=999 } GWEN_CRYPT_TOKEN_DEVICE; #ifdef __cplusplus extern "C" { #endif /** @name Converting Device Types to and from Strings * */ /*@{*/ GWENHYWFAR_API GWEN_CRYPT_TOKEN_DEVICE GWEN_Crypt_Token_Device_fromString(const char *s); GWENHYWFAR_API const char *GWEN_Crypt_Token_Device_toString(GWEN_CRYPT_TOKEN_DEVICE d); /*@}*/ #define GWEN_CRYPT_TOKEN_MODE_SECURE_PIN_ENTRY 0x00000001 #define GWEN_CRYPT_TOKEN_MODE_FORCE_PIN_ENTRY 0x00000002 /** this flag allows updating of old CryptToken files to newer versions */ #define GWEN_CRYPT_TOKEN_MODE_ALLOW_UPDATE 0x00000004 #define GWEN_CRYPT_TOKEN_MODE_EXP_65537 0x00000008 #define GWEN_CRYPT_TOKEN_MODE_DIRECT_SIGN 0x00000010 #define GWEN_CRYPT_TOKEN_FLAGS_MANAGES_SIGNSEQ 0x00000001 #include #include #include #include #include #include /** @name Basic Informations about a CryptToken * */ /*@{*/ GWENHYWFAR_API void GWEN_Crypt_Token_free(GWEN_CRYPT_TOKEN *ct); /*@}*/ /** @name Basic Informations about a CryptToken * */ /*@{*/ GWENHYWFAR_API uint32_t GWEN_Crypt_Token_GetFlags(const GWEN_CRYPT_TOKEN *ct); GWENHYWFAR_API uint32_t GWEN_Crypt_Token_GetModes(const GWEN_CRYPT_TOKEN *ct); GWENHYWFAR_API void GWEN_Crypt_Token_SetModes(GWEN_CRYPT_TOKEN *ct, uint32_t f); GWENHYWFAR_API void GWEN_Crypt_Token_AddModes(GWEN_CRYPT_TOKEN *ct, uint32_t f); GWENHYWFAR_API void GWEN_Crypt_Token_SubModes(GWEN_CRYPT_TOKEN *ct, uint32_t f); GWENHYWFAR_API GWEN_CRYPT_TOKEN_DEVICE GWEN_Crypt_Token_GetDevice(const GWEN_CRYPT_TOKEN *ct); GWENHYWFAR_API const char *GWEN_Crypt_Token_GetTokenName(const GWEN_CRYPT_TOKEN *ct); GWENHYWFAR_API const char *GWEN_Crypt_Token_GetTypeName(const GWEN_CRYPT_TOKEN *ct); GWENHYWFAR_API const char *GWEN_Crypt_Token_GetFriendlyName(const GWEN_CRYPT_TOKEN *ct); GWENHYWFAR_API void GWEN_Crypt_Token_SetFriendlyName(GWEN_CRYPT_TOKEN *ct, const char *s); /*@}*/ /** @name Open, Create and Close * */ /*@{*/ GWENHYWFAR_API int GWEN_Crypt_Token_Open(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid); GWENHYWFAR_API int GWEN_Crypt_Token_Create(GWEN_CRYPT_TOKEN *ct, uint32_t gid); GWENHYWFAR_API int GWEN_Crypt_Token_Close(GWEN_CRYPT_TOKEN *ct, int abandon, uint32_t gid); GWENHYWFAR_API int GWEN_Crypt_Token_IsOpen(const GWEN_CRYPT_TOKEN *ct); /*@}*/ /** @name Cryptographic Objects * */ /*@{*/ GWENHYWFAR_API int GWEN_Crypt_Token_GetKeyIdList(GWEN_CRYPT_TOKEN *ct, uint32_t *pIdList, uint32_t *pCount, uint32_t gid); GWENHYWFAR_API const GWEN_CRYPT_TOKEN_KEYINFO* GWEN_Crypt_Token_GetKeyInfo(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t flags, uint32_t gid); GWENHYWFAR_API int GWEN_Crypt_Token_SetKeyInfo(GWEN_CRYPT_TOKEN *ct, uint32_t id, const GWEN_CRYPT_TOKEN_KEYINFO *ki, uint32_t gid); GWENHYWFAR_API int GWEN_Crypt_Token_GetContextIdList(GWEN_CRYPT_TOKEN *ct, uint32_t *pIdList, uint32_t *pCount, uint32_t gid); GWENHYWFAR_API const GWEN_CRYPT_TOKEN_CONTEXT* GWEN_Crypt_Token_GetContext(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid); GWENHYWFAR_API int GWEN_Crypt_Token_SetContext(GWEN_CRYPT_TOKEN *ct, uint32_t id, const GWEN_CRYPT_TOKEN_CONTEXT *ctx, uint32_t gid); /*@}*/ /** @name Cryptographic Operations * */ /*@{*/ GWENHYWFAR_API int GWEN_Crypt_Token_Sign(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, uint8_t *pSignatureData, uint32_t *pSignatureLen, uint32_t *pSeqCounter, uint32_t gid); GWENHYWFAR_API int GWEN_Crypt_Token_Verify(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, const uint8_t *pSignatureData, uint32_t signatureLen, uint32_t seqCounter, uint32_t gid); GWENHYWFAR_API int GWEN_Crypt_Token_Encipher(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen, uint32_t gid); GWENHYWFAR_API int GWEN_Crypt_Token_Decipher(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen, uint32_t gid); /*@}*/ /** @name Administrative Operations * */ /*@{*/ GWENHYWFAR_API int GWEN_Crypt_Token_GenerateKey(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, const GWEN_CRYPT_CRYPTALGO *a, uint32_t gid); GWENHYWFAR_API int GWEN_Crypt_Token_ChangePin(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid); GWENHYWFAR_API int GWEN_Crypt_Token_ActivateKey(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid); /*@}*/ #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/ressource.rc0000644000175000017500000000617012634022442014673 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Wed Mar 27 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /* Changes */ #include // Language: 407=DE, 409=US, 809=UK // German resources LANGUAGE LANG_GERMAN, SUBLANG_GERMAN #pragma code_page(1252) // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA // Version VS_VERSION_INFO VERSIONINFO FILEVERSION 4, 15, 2, 0 PRODUCTVERSION 4, 15, 2, 0 FILEFLAGSMASK 0x3fL FILEFLAGS 0x0L FILEOS 0x40004L // Windows NT FILETYPE 0x2L // DLL FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040704b0" BEGIN //VALUE "Comments", "\0" VALUE "CompanyName", " Aquamaniac\0" VALUE "FileDescription", "Multi purpose library\0" VALUE "FileVersion", "v4.15.2beta\0" VALUE "InternalName", "Gwenhywfar\0" VALUE "LegalCopyright", "Copyright Š 2003 by Martin Preuss\0" VALUE "LegalTrademarks", "Aquamaniac\0" VALUE "OriginalFilename", "GWENHYWFAR32.DLL\0" //VALUE "PrivateBuild", "\0" VALUE "ProductName", "Gwenhywfar\0" VALUE "ProductVersion", "v4.15.2beta-0\0" VALUE "Author", "Martin Preuss\0" VALUE "Email", "martin@libchipcard.de\0" VALUE "Homepage", "http://gwenhywfar.sf.net/\0" VALUE "Description", "OS abstraction, Crypto API, IPC Framework\0" VALUE "License", "LGPL\0" //VALUE "SpecialBuild", "\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x407, 1200 END END gwenhywfar-4.15.2beta/src/html/0000755000175000017500000000000012643267237013370 500000000000000gwenhywfar-4.15.2beta/src/html/o_gridentry_p.h0000644000175000017500000000132412364015347016316 00000000000000/*************************************************************************** begin : Mon Feb 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTMLOBJECT_GRIDENTRY_P_H #define HTMLOBJECT_GRIDENTRY_P_H #include "o_gridentry_l.h" typedef struct OBJECT_GRIDENTRY OBJECT_GRIDENTRY; struct OBJECT_GRIDENTRY { int row; int column; int isHeader; }; static void GWENHYWFAR_CB HtmlObject_GridEntry_FreeData(void *bp, void *p); #endif gwenhywfar-4.15.2beta/src/html/g_box_l.h0000644000175000017500000000123012416477066015067 00000000000000/*************************************************************************** begin : Sat Feb 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTML_G_BOX_L_H #define HTML_G_BOX_L_H #include "htmlgroup_l.h" HTML_GROUP *HtmlGroup_Box_new(const char *groupName, HTML_GROUP *parent, GWEN_XML_CONTEXT *ctx); #endif gwenhywfar-4.15.2beta/src/html/o_image.c0000644000175000017500000000503112364015347015044 00000000000000/*************************************************************************** begin : Mon Feb 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "o_image_p.h" GWEN_INHERIT(HTML_OBJECT, OBJECT_IMAGE); static int HtmlObject_Image_Layout(HTML_OBJECT *o) { OBJECT_IMAGE *xo; assert(o); xo=GWEN_INHERIT_GETDATA(HTML_OBJECT, OBJECT_IMAGE, o); assert(xo); HtmlObject_SetWidth(o, xo->scaledWidth); HtmlObject_SetHeight(o, xo->scaledHeight); return 0; } HTML_OBJECT *HtmlObject_Image_new(GWEN_XML_CONTEXT *ctx) { HTML_OBJECT *o; OBJECT_IMAGE *xo; o=HtmlObject_new(ctx, HtmlObjectType_Image); GWEN_NEW_OBJECT(OBJECT_IMAGE, xo); GWEN_INHERIT_SETDATA(HTML_OBJECT, OBJECT_IMAGE, o, xo, HtmlObject_Image_FreeData); HtmlObject_SetLayoutFn(o, HtmlObject_Image_Layout); return o; } void GWENHYWFAR_CB HtmlObject_Image_FreeData(void *bp, void *p) { OBJECT_IMAGE *xo; xo=(OBJECT_IMAGE*) p; HtmlImage_free(xo->image); GWEN_FREE_OBJECT(xo); } int HtmlObject_Image_GetScaledWidth(const HTML_OBJECT *o) { OBJECT_IMAGE *xo; assert(o); xo=GWEN_INHERIT_GETDATA(HTML_OBJECT, OBJECT_IMAGE, o); assert(xo); return xo->scaledWidth; } void HtmlObject_Image_SetScaledWidth(HTML_OBJECT *o, int i) { OBJECT_IMAGE *xo; assert(o); xo=GWEN_INHERIT_GETDATA(HTML_OBJECT, OBJECT_IMAGE, o); assert(xo); xo->scaledWidth=i; } int HtmlObject_Image_GetScaledHeight(const HTML_OBJECT *o) { OBJECT_IMAGE *xo; assert(o); xo=GWEN_INHERIT_GETDATA(HTML_OBJECT, OBJECT_IMAGE, o); assert(xo); return xo->scaledHeight; } void HtmlObject_Image_SetScaledHeight(HTML_OBJECT *o, int i) { OBJECT_IMAGE *xo; assert(o); xo=GWEN_INHERIT_GETDATA(HTML_OBJECT, OBJECT_IMAGE, o); assert(xo); xo->scaledHeight=i; } HTML_IMAGE *HtmlObject_Image_GetImage(const HTML_OBJECT *o) { OBJECT_IMAGE *xo; assert(o); xo=GWEN_INHERIT_GETDATA(HTML_OBJECT, OBJECT_IMAGE, o); assert(xo); return xo->image; } void HtmlObject_Image_SetImage(HTML_OBJECT *o, HTML_IMAGE *img) { OBJECT_IMAGE *xo; assert(o); xo=GWEN_INHERIT_GETDATA(HTML_OBJECT, OBJECT_IMAGE, o); assert(xo); if (img) HtmlImage_Attach(img); HtmlImage_free(xo->image); xo->image=img; } gwenhywfar-4.15.2beta/src/html/o_grid.c0000644000175000017500000001324512416477066014725 00000000000000/*************************************************************************** begin : Mon Feb 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "o_grid_p.h" #include "o_gridentry_l.h" #include GWEN_INHERIT(HTML_OBJECT, OBJECT_GRID); #define MAX_COLUMN 32 #define COLUMN_SPACING 4 #define ROW_SPACING 4 static int HtmlObject_Grid_Layout(HTML_OBJECT *o) { OBJECT_GRID *xo; HTML_OBJECT *c; int w; //int h; int x; int y; int rv; int i; int j; int cw[MAX_COLUMN]; int maxLineHeight; int maxLineWidth; int currentRow; assert(o); xo=GWEN_INHERIT_GETDATA(HTML_OBJECT, OBJECT_GRID, o); assert(xo); w=HtmlObject_GetWidth(o); //h=HtmlObject_GetHeight(o); /* subtract spacing from available width */ if (w!=-1) w-=(xo->columns+1)*COLUMN_SPACING; /* determine the maximum width of each column */ for (i=0; icolumns; i++) cw[i]=0; c=HtmlObject_Tree_GetFirstChild(o); while(c) { int k; i=HtmlObject_GridEntry_GetColumn(c); HtmlObject_SetHeight(c, -1); HtmlObject_SetWidth(c, -1); rv=HtmlObject_Layout(c); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } k=HtmlObject_GetWidth(c); if (k>cw[i]) cw[i]=k; c=HtmlObject_Tree_GetNext(c); } if (w!=-1) { /* do the columns all fit into the width? */ x=0; for (i=0; icolumns; i++) x+=cw[i]; if (x>w) { int fullw[MAX_COLUMN]; int meanColumnWidth; int k; /* doesn't fit, so we need to adjust the columns */ meanColumnWidth=w/xo->columns; /* reset full width of every column */ for (i=0; icolumns; i++) fullw[i]=0; /* calculate full width of every column */ c=HtmlObject_Tree_GetFirstChild(o); while(c) { i=HtmlObject_GridEntry_GetColumn(c); k=HtmlObject_GetWidth(c); if (k>fullw[i]) fullw[i]=k; c=HtmlObject_Tree_GetNext(c); } for (i=0; icolumns; i++) cw[i]=0; /* set fixed widths to those columns which are smaller than fullWidth/columns */ k=0; for (i=0; icolumns; i++) { int p; p=fullw[i]; if (p<=meanColumnWidth) { k+=p; cw[i]=p; } } /* now get the remaining width */ j=0; k=w-k; for (i=0; icolumns; i++) { if (cw[i]==0) j+=fullw[i]; } if (j>0) { /* calculate percentual width of each remaining column */ for (i=0; icolumns; i++) { if (cw[i]==0) { int p; p=fullw[i]*100/j; cw[i]=p*k/100; } } } /* re-layout columns */ c=HtmlObject_Tree_GetFirstChild(o); while(c) { i=HtmlObject_GridEntry_GetColumn(c); HtmlObject_SetHeight(c, -1); HtmlObject_SetWidth(c, cw[i]); rv=HtmlObject_Layout(c); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } c=HtmlObject_Tree_GetNext(c); } } } /* now layout elements according to column sizes */ x=COLUMN_SPACING/2; y=ROW_SPACING/2; maxLineHeight=0; maxLineWidth=0; currentRow=0; c=HtmlObject_Tree_GetFirstChild(o); while(c) { int r; int ch; i=HtmlObject_GridEntry_GetColumn(c); r=HtmlObject_GridEntry_GetRow(c); if (r!=currentRow) { /* next row */ y+=maxLineHeight+ROW_SPACING; x=COLUMN_SPACING/2; currentRow=r; maxLineHeight=0; } HtmlObject_SetWidth(c, cw[i]); HtmlObject_Layout(c); /* place object */ HtmlObject_SetX(c, x); HtmlObject_SetY(c, y); /* calculate maximum height */ ch=HtmlObject_GetHeight(c); if (ch>maxLineHeight) maxLineHeight=ch; /* advance */ x+=cw[i]+COLUMN_SPACING; if (x>maxLineWidth) maxLineWidth=x; c=HtmlObject_Tree_GetNext(c); } y+=maxLineHeight+(ROW_SPACING/2); HtmlObject_SetWidth(o, maxLineWidth); HtmlObject_SetHeight(o, y); return 0; } HTML_OBJECT *HtmlObject_Grid_new(GWEN_XML_CONTEXT *ctx) { HTML_OBJECT *o; OBJECT_GRID *xo; o=HtmlObject_new(ctx, HtmlObjectType_Grid); GWEN_NEW_OBJECT(OBJECT_GRID, xo); GWEN_INHERIT_SETDATA(HTML_OBJECT, OBJECT_GRID, o, xo, HtmlObject_Grid_FreeData); HtmlObject_AddFlags(o, HTML_OBJECT_FLAGS_START_ON_NEWLINE | HTML_OBJECT_FLAGS_END_WITH_NEWLINE); HtmlObject_SetLayoutFn(o, HtmlObject_Grid_Layout); return o; } void GWENHYWFAR_CB HtmlObject_Grid_FreeData(void *bp, void *p) { OBJECT_GRID *xo; xo=(OBJECT_GRID*) p; GWEN_FREE_OBJECT(xo); } int HtmlObject_Grid_GetRows(const HTML_OBJECT *o) { OBJECT_GRID *xo; assert(o); xo=GWEN_INHERIT_GETDATA(HTML_OBJECT, OBJECT_GRID, o); assert(xo); return xo->rows; } void HtmlObject_Grid_SetRows(HTML_OBJECT *o, int i) { OBJECT_GRID *xo; assert(o); xo=GWEN_INHERIT_GETDATA(HTML_OBJECT, OBJECT_GRID, o); assert(xo); xo->rows=i; } int HtmlObject_Grid_GetColumns(const HTML_OBJECT *o) { OBJECT_GRID *xo; assert(o); xo=GWEN_INHERIT_GETDATA(HTML_OBJECT, OBJECT_GRID, o); assert(xo); return xo->columns; } void HtmlObject_Grid_SetColumns(HTML_OBJECT *o, int i) { OBJECT_GRID *xo; assert(o); xo=GWEN_INHERIT_GETDATA(HTML_OBJECT, OBJECT_GRID, o); assert(xo); xo->columns=i; } gwenhywfar-4.15.2beta/src/html/g_tablerow_l.h0000644000175000017500000000144012416477066016121 00000000000000/*************************************************************************** begin : Mon Feb 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTML_G_TABLEROW_L_H #define HTML_G_TABLEROW_L_H #include "htmlgroup_l.h" HTML_GROUP *HtmlGroup_TableRow_new(const char *groupName, HTML_GROUP *parent, GWEN_XML_CONTEXT *ctx); int HtmlGroup_TableRow_GetColumns(const HTML_GROUP *g); void HtmlGroup_TableRow_SetRow(HTML_GROUP *g, int row); #endif gwenhywfar-4.15.2beta/src/html/g_unorderedlist.c0000644000175000017500000000635312416477066016655 00000000000000/*************************************************************************** begin : Mon Feb 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "g_unorderedlist_p.h" #include "g_box_l.h" #include "g_generic_l.h" #include "htmlctx_l.h" #include "o_box_l.h" #include "o_grid_l.h" #include "o_gridentry_l.h" #include "o_word_l.h" #include GWEN_INHERIT(HTML_GROUP, GROUP_UNORDEREDLIST) HTML_GROUP *HtmlGroup_UnorderedList_new(const char *groupName, HTML_GROUP *parent, GWEN_XML_CONTEXT *ctx) { HTML_GROUP *g; GROUP_UNORDEREDLIST *xg; /* create base group */ g=HtmlGroup_Generic_new(groupName, parent, ctx); assert(g); /* inherit */ GWEN_NEW_OBJECT(GROUP_UNORDEREDLIST, xg); GWEN_INHERIT_SETDATA(HTML_GROUP, GROUP_UNORDEREDLIST, g, xg, HtmlGroup_UnorderedList_FreeData); /* set virtual functions */ HtmlGroup_SetStartTagFn(g, HtmlGroup_UnorderedList_StartTag); return g; } void GWENHYWFAR_CB HtmlGroup_UnorderedList_FreeData(void *bp, void *p) { GROUP_UNORDEREDLIST *xg; xg=(GROUP_UNORDEREDLIST*) p; GWEN_FREE_OBJECT(xg); } int HtmlGroup_UnorderedList_StartTag(HTML_GROUP *g, const char *tagName) { GROUP_UNORDEREDLIST *xg; HTML_GROUP *gNew=NULL; GWEN_XML_CONTEXT *ctx; assert(g); xg=GWEN_INHERIT_GETDATA(HTML_GROUP, GROUP_UNORDEREDLIST, g); assert(xg); ctx=HtmlGroup_GetXmlContext(g); if (strcasecmp(tagName, "li")==0) { HTML_OBJECT *o; HTML_OBJECT *oGrid; /* first column in the grid is "-" */ oGrid=HtmlObject_GridEntry_new(ctx); HtmlObject_GridEntry_SetColumn(oGrid, 0); HtmlObject_GridEntry_SetRow(oGrid, xg->row); HtmlObject_SetProperties(oGrid, HtmlGroup_GetProperties(g)); HtmlObject_Tree_AddChild(HtmlGroup_GetObject(g), oGrid); o=HtmlObject_Word_new(ctx, "-"); HtmlObject_SetProperties(o, HtmlGroup_GetProperties(g)); HtmlObject_Tree_AddChild(oGrid, o); /* Create new parser group with new properties but use the same object */ gNew=HtmlGroup_Box_new(tagName, g, ctx); HtmlGroup_SetProperties(gNew, HtmlGroup_GetProperties(g)); o=HtmlGroup_GetObject(g); assert(o); if (HtmlObject_GetObjectType(o)==HtmlObjectType_Grid) { int i; i=HtmlObject_Grid_GetRows(o); HtmlObject_Grid_SetRows(o, ++i); } /* second column is the content of li */ o=HtmlObject_GridEntry_new(ctx); HtmlObject_GridEntry_SetColumn(oGrid, 1); HtmlObject_GridEntry_SetRow(oGrid, xg->row); HtmlObject_SetProperties(o, HtmlGroup_GetProperties(g)); HtmlObject_Tree_AddChild(oGrid, o); HtmlGroup_SetObject(gNew, o); xg->row++; } else { DBG_ERROR(GWEN_LOGDOMAIN, "Unexpected group [%s]", tagName); return GWEN_ERROR_BAD_DATA; } if (gNew) { HtmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } gwenhywfar-4.15.2beta/src/html/htmlobject_p.h0000644000175000017500000000155112364015347016126 00000000000000/*************************************************************************** begin : Sat Feb 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTMLOBJECT_P_H #define HTMLOBJECT_P_H #include "htmlobject_be.h" struct HTML_OBJECT { GWEN_TREE_ELEMENT(HTML_OBJECT) GWEN_INHERIT_ELEMENT(HTML_OBJECT) GWEN_XML_CONTEXT *xmlCtx; HTML_OBJECT_TYPE objectType; HTML_PROPS *properties; int x; int y; int width; int height; uint32_t flags; int configuredWidth; int configuredHeight; char *text; HTML_OBJECT_LAYOUT_FN layoutFn; uint32_t refCount; }; #endif gwenhywfar-4.15.2beta/src/html/htmlgroup_l.h0000644000175000017500000000465212416477066016025 00000000000000/*************************************************************************** begin : Sat Feb 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTMLGROUP_L_H #define HTMLGROUP_L_H #include #include typedef struct HTML_GROUP HTML_GROUP; GWEN_INHERIT_FUNCTION_DEFS(HTML_GROUP) typedef int (*HTML_GROUP_STARTTAG_FN)(HTML_GROUP *g, const char *tagName); typedef int (*HTML_GROUP_ENDTAG_FN)(HTML_GROUP *g, const char *tagName); typedef int (*HTML_GROUP_ADDDATA_FN)(HTML_GROUP *g, const char *data); typedef int (*HTML_GROUP_ENDSUBGROUP_FN)(HTML_GROUP *g, HTML_GROUP *sg); #include "htmlobject_be.h" #include "htmlprops_be.h" HTML_GROUP *HtmlGroup_new(const char *groupName, HTML_GROUP *parent, GWEN_XML_CONTEXT *ctx); void HtmlGroup_free(HTML_GROUP *g); HTML_GROUP *HtmlGroup_GetParent(const HTML_GROUP *g); GWEN_XML_CONTEXT *HtmlGroup_GetXmlContext(const HTML_GROUP *g); const char *HtmlGroup_GetGroupName(const HTML_GROUP *g); HTML_OBJECT *HtmlGroup_GetObject(const HTML_GROUP *g); void HtmlGroup_SetObject(HTML_GROUP *g, HTML_OBJECT *o); HTML_PROPS *HtmlGroup_GetProperties(const HTML_GROUP *g); void HtmlGroup_SetProperties(HTML_GROUP *g, HTML_PROPS *pr); HTML_GROUP_STARTTAG_FN HtmlGroup_SetStartTagFn(HTML_GROUP *g, HTML_GROUP_STARTTAG_FN f); HTML_GROUP_ENDTAG_FN HtmlGroup_SetEndTagFn(HTML_GROUP *g, HTML_GROUP_ENDTAG_FN f); HTML_GROUP_ADDDATA_FN HtmlGroup_SetAddDataFn(HTML_GROUP *g, HTML_GROUP_ADDDATA_FN f); HTML_GROUP_ENDSUBGROUP_FN HtmlGroup_SetEndSubGroupFn(HTML_GROUP *g, HTML_GROUP_ENDSUBGROUP_FN f); int HtmlGroup_StartTag(HTML_GROUP *g, const char *tagName); /** * @return 1 if this tag ends the current group, 0 otherwise (<0 on error) */ int HtmlGroup_EndTag(HTML_GROUP *g, const char *tagName); int HtmlGroup_AddData(HTML_GROUP *g, const char *data); int HtmlGroup_EndSubGroup(HTML_GROUP *g, HTML_GROUP *sg); #endif gwenhywfar-4.15.2beta/src/html/g_generic_l.h0000644000175000017500000000125212416477066015717 00000000000000/*************************************************************************** begin : Sat Feb 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTML_G_GENERIC_L_H #define HTML_G_GENERIC_L_H #include "htmlgroup_l.h" HTML_GROUP *HtmlGroup_Generic_new(const char *groupName, HTML_GROUP *parent, GWEN_XML_CONTEXT *ctx); #endif gwenhywfar-4.15.2beta/src/html/htmlobject.c0000644000175000017500000001066512416477066015620 00000000000000/*************************************************************************** begin : Sat Feb 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "htmlobject_p.h" #include #include #include #include GWEN_TREE_FUNCTIONS(HTML_OBJECT, HtmlObject) GWEN_INHERIT_FUNCTIONS(HTML_OBJECT) HTML_OBJECT *HtmlObject_new(GWEN_XML_CONTEXT *ctx, HTML_OBJECT_TYPE t) { HTML_OBJECT *o; GWEN_NEW_OBJECT(HTML_OBJECT, o); o->refCount=1; o->objectType=t; o->xmlCtx=ctx; GWEN_TREE_INIT(HTML_OBJECT, o); GWEN_INHERIT_INIT(HTML_OBJECT, o); return o; } void HtmlObject_free(HTML_OBJECT *o) { if (o) { assert(o->refCount); if (o->refCount>1) o->refCount--; else { GWEN_TREE_FINI(HTML_OBJECT, o); GWEN_INHERIT_FINI(HTML_OBJECT, o); free(o->text); HtmlProps_free(o->properties); o->refCount=0; GWEN_FREE_OBJECT(o); } } } void HtmlObject_Attach(HTML_OBJECT *o) { assert(o); assert(o->refCount); o->refCount++; } GWEN_XML_CONTEXT *HtmlObject_GetXmlCtx(const HTML_OBJECT *o) { assert(o); assert(o->refCount); return o->xmlCtx; } HTML_OBJECT_TYPE HtmlObject_GetObjectType(const HTML_OBJECT *o) { assert(o); assert(o->refCount); return o->objectType; } void HtmlObject_SetObjectType(HTML_OBJECT *o, HTML_OBJECT_TYPE t) { assert(o); assert(o->refCount); o->objectType=t; } HTML_PROPS *HtmlObject_GetProperties(const HTML_OBJECT *o) { assert(o); assert(o->refCount); return o->properties; } void HtmlObject_SetProperties(HTML_OBJECT *o, HTML_PROPS *pr) { assert(o); assert(o->refCount); HtmlProps_Attach(pr); HtmlProps_free(o->properties); o->properties=pr; } int HtmlObject_GetX(const HTML_OBJECT *o) { assert(o); assert(o->refCount); return o->x; } void HtmlObject_SetX(HTML_OBJECT *o, int i) { assert(o); assert(o->refCount); o->x=i; } int HtmlObject_GetY(const HTML_OBJECT *o) { assert(o); assert(o->refCount); return o->y; } void HtmlObject_SetY(HTML_OBJECT *o, int i) { assert(o); assert(o->refCount); o->y=i; } int HtmlObject_GetWidth(const HTML_OBJECT *o) { assert(o); assert(o->refCount); return o->width; } void HtmlObject_SetWidth(HTML_OBJECT *o, int i) { assert(o); assert(o->refCount); o->width=i; } int HtmlObject_GetHeight(const HTML_OBJECT *o) { assert(o); assert(o->refCount); return o->height; } void HtmlObject_SetHeight(HTML_OBJECT *o, int i) { assert(o); assert(o->refCount); o->height=i; } int HtmlObject_GetConfiguredWidth(const HTML_OBJECT *o) { assert(o); assert(o->refCount); return o->configuredWidth; } void HtmlObject_SetConfiguredWidth(HTML_OBJECT *o, int i) { assert(o); assert(o->refCount); o->configuredWidth=i; } int HtmlObject_GetConfiguredHeight(const HTML_OBJECT *o) { assert(o); assert(o->refCount); return o->configuredHeight; } void HtmlObject_SetConfiguredHeight(HTML_OBJECT *o, int i) { assert(o); assert(o->refCount); o->configuredHeight=i; } const char *HtmlObject_GetText(const HTML_OBJECT *o) { assert(o); assert(o->refCount); return o->text; } void HtmlObject_SetText(HTML_OBJECT *o, const char *s) { assert(o); assert(o->refCount); free(o->text); if (s) o->text=strdup(s); else o->text=NULL; } uint32_t HtmlObject_GetFlags(const HTML_OBJECT *o) { assert(o); assert(o->refCount); return o->flags; } void HtmlObject_SetFlags(HTML_OBJECT *o, uint32_t fl) { assert(o); assert(o->refCount); o->flags=fl; } void HtmlObject_AddFlags(HTML_OBJECT *o, uint32_t fl) { assert(o); assert(o->refCount); o->flags|=fl; } void HtmlObject_SubFlags(HTML_OBJECT *o, uint32_t fl) { assert(o); assert(o->refCount); o->flags&=~fl; } int HtmlObject_Layout(HTML_OBJECT *o) { assert(o); assert(o->refCount); if (o->layoutFn) return o->layoutFn(o); else { o->width=0; o->height=0; return 0; } } HTML_OBJECT_LAYOUT_FN HtmlObject_SetLayoutFn(HTML_OBJECT *o, HTML_OBJECT_LAYOUT_FN fn) { HTML_OBJECT_LAYOUT_FN of; of=o->layoutFn; o->layoutFn=fn; return of; } gwenhywfar-4.15.2beta/src/html/o_image_p.h0000644000175000017500000000131412364015347015370 00000000000000/*************************************************************************** begin : Fri Jul 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTMLOBJECT_IMAGE_P_H #define HTMLOBJECT_IMAGE_P_H #include "o_image_be.h" typedef struct OBJECT_IMAGE OBJECT_IMAGE; struct OBJECT_IMAGE { int scaledWidth; int scaledHeight; HTML_IMAGE *image; }; static void GWENHYWFAR_CB HtmlObject_Image_FreeData(void *bp, void *p); #endif gwenhywfar-4.15.2beta/src/html/htmlimage_p.h0000644000175000017500000000123012364015347015734 00000000000000/*************************************************************************** begin : Fri Jul 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTMLIMAGE_P_H #define HTMLIMAGE_P_H #include "htmlimage_be.h" struct HTML_IMAGE { GWEN_INHERIT_ELEMENT(HTML_IMAGE) GWEN_LIST_ELEMENT(HTML_IMAGE) char *imageName; int width; int height; uint32_t refCount; }; #endif gwenhywfar-4.15.2beta/src/html/g_tablerow.c0000644000175000017500000001071712416477066015610 00000000000000/*************************************************************************** begin : Mon Feb 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "g_tablerow_p.h" #include "g_box_l.h" #include "g_generic_l.h" #include "htmlctx_l.h" #include "o_grid_l.h" #include "o_gridentry_l.h" #include GWEN_INHERIT(HTML_GROUP, GROUP_TABLEROW) HTML_GROUP *HtmlGroup_TableRow_new(const char *groupName, HTML_GROUP *parent, GWEN_XML_CONTEXT *ctx) { HTML_GROUP *g; GROUP_TABLEROW *xg; /* create base group */ g=HtmlGroup_Generic_new(groupName, parent, ctx); assert(g); GWEN_NEW_OBJECT(GROUP_TABLEROW, xg); GWEN_INHERIT_SETDATA(HTML_GROUP, GROUP_TABLEROW, g, xg, HtmlGroup_TableRow_FreeData); /* set virtual functions */ HtmlGroup_SetStartTagFn(g, HtmlGroup_TableRow_StartTag); return g; } void GWENHYWFAR_CB HtmlGroup_TableRow_FreeData(void *bp, void *p) { GROUP_TABLEROW *xg; xg=(GROUP_TABLEROW*) p; GWEN_FREE_OBJECT(xg); } int HtmlGroup_TableRow_GetColumns(const HTML_GROUP *g) { GROUP_TABLEROW *xg; assert(g); xg=GWEN_INHERIT_GETDATA(HTML_GROUP, GROUP_TABLEROW, g); assert(xg); return xg->columns; } int HtmlGroup_TableRow_StartTag(HTML_GROUP *g, const char *tagName) { GROUP_TABLEROW *xg; HTML_GROUP *gNew=NULL; GWEN_XML_CONTEXT *ctx; GWEN_DB_NODE *dbAttribs; assert(g); xg=GWEN_INHERIT_GETDATA(HTML_GROUP, GROUP_TABLEROW, g); assert(xg); ctx=HtmlGroup_GetXmlContext(g); dbAttribs=HtmlCtx_GetCurrentAttributes(ctx); if (strcasecmp(tagName, "th")==0) { HTML_OBJECT *o; HTML_PROPS *pr; HTML_FONT *fnt; /* create new parser group */ gNew=HtmlGroup_Box_new(tagName, g, ctx); pr=HtmlProps_dup(HtmlGroup_GetProperties(g)); fnt=HtmlProps_GetFont(pr); fnt=HtmlCtx_GetFont(ctx, HtmlFont_GetFontName(fnt), HtmlFont_GetFontSize(fnt), HtmlFont_GetFontFlags(fnt) | HTML_FONT_FLAGS_STRONG); if (fnt) { HtmlProps_SetFont(pr, fnt); //HtmlFont_free(fnt); } HtmlGroup_SetProperties(gNew, pr); HtmlProps_free(pr); o=HtmlObject_GridEntry_new(ctx); HtmlObject_SetProperties(o, HtmlGroup_GetProperties(g)); HtmlObject_GridEntry_SetColumn(o, xg->columns++); HtmlObject_GridEntry_SetRow(o, xg->row); HtmlObject_GridEntry_SetIsHeader(o, 1); if (dbAttribs) { const char *s; s=GWEN_DB_GetCharValue(dbAttribs, "align", 0, "left"); if (s) { if (strcasecmp(s, "right")==0) HtmlObject_AddFlags(o, HTML_OBJECT_FLAGS_JUSTIFY_RIGHT); else if (strcasecmp(s, "center")==0) HtmlObject_AddFlags(o, HTML_OBJECT_FLAGS_JUSTIFY_HCENTER); } } HtmlObject_Tree_AddChild(HtmlGroup_GetObject(g), o); HtmlGroup_SetObject(gNew, o); } else if (strcasecmp(tagName, "td")==0) { HTML_OBJECT *o; /* create new parser group */ gNew=HtmlGroup_Box_new(tagName, g, ctx); HtmlGroup_SetProperties(gNew, HtmlGroup_GetProperties(g)); o=HtmlObject_GridEntry_new(ctx); HtmlObject_SetProperties(o, HtmlGroup_GetProperties(g)); HtmlObject_GridEntry_SetColumn(o, xg->columns++); HtmlObject_GridEntry_SetRow(o, xg->row); HtmlObject_GridEntry_SetIsHeader(o, 0); if (dbAttribs) { const char *s; s=GWEN_DB_GetCharValue(dbAttribs, "align", 0, "left"); if (s) { if (strcasecmp(s, "right")==0) HtmlObject_AddFlags(o, HTML_OBJECT_FLAGS_JUSTIFY_RIGHT); else if (strcasecmp(s, "center")==0) HtmlObject_AddFlags(o, HTML_OBJECT_FLAGS_JUSTIFY_HCENTER); } } HtmlObject_Tree_AddChild(HtmlGroup_GetObject(g), o); HtmlGroup_SetObject(gNew, o); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Unexpected group [%s]", tagName); return GWEN_ERROR_BAD_DATA; } if (gNew) { HtmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } void HtmlGroup_TableRow_SetRow(HTML_GROUP *g, int row) { GROUP_TABLEROW *xg; assert(g); xg=GWEN_INHERIT_GETDATA(HTML_GROUP, GROUP_TABLEROW, g); assert(xg); xg->row=row; } gwenhywfar-4.15.2beta/src/html/o_grid_l.h0000644000175000017500000000142712364015347015234 00000000000000/*************************************************************************** begin : Mon Feb 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTMLOBJECT_GRID_L_H #define HTMLOBJECT_GRID_L_H #include "htmlobject_be.h" HTML_OBJECT *HtmlObject_Grid_new(GWEN_XML_CONTEXT *ctx); int HtmlObject_Grid_GetRows(const HTML_OBJECT *o); void HtmlObject_Grid_SetRows(HTML_OBJECT *o, int i); int HtmlObject_Grid_GetColumns(const HTML_OBJECT *o); void HtmlObject_Grid_SetColumns(HTML_OBJECT *o, int i); #endif gwenhywfar-4.15.2beta/src/html/g_table_p.h0000644000175000017500000000121312364015347015363 00000000000000/*************************************************************************** begin : Mon Feb 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTML_G_TABLE_P_H #define HTML_G_TABLE_P_H #include "g_table_l.h" static int HtmlGroup_Table_StartTag(HTML_GROUP *g, const char *tagName); static int HtmlGroup_Table_EndSubGroup(HTML_GROUP *g, HTML_GROUP *sg); #endif gwenhywfar-4.15.2beta/src/html/htmlprops_be.h0000644000175000017500000000246612364015347016160 00000000000000/*************************************************************************** begin : Sat Feb 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTMLPROPS_BE_H #define HTMLPROPS_BE_H typedef struct HTML_PROPS HTML_PROPS; #define HTML_PROPS_NOCOLOR 0xffffffff #include #ifdef __cplusplus extern "C" { #endif GWENHYWFAR_API HTML_PROPS *HtmlProps_new(void); GWENHYWFAR_API void HtmlProps_free(HTML_PROPS *pr); GWENHYWFAR_API void HtmlProps_Attach(HTML_PROPS *pr); GWENHYWFAR_API HTML_PROPS *HtmlProps_dup(const HTML_PROPS *pr); GWENHYWFAR_API HTML_FONT *HtmlProps_GetFont(const HTML_PROPS *pr); GWENHYWFAR_API void HtmlProps_SetFont(HTML_PROPS *pr, HTML_FONT *fnt); GWENHYWFAR_API uint32_t HtmlProps_GetForegroundColor(const HTML_PROPS *pr); GWENHYWFAR_API void HtmlProps_SetForegroundColor(HTML_PROPS *pr, uint32_t c); GWENHYWFAR_API uint32_t HtmlProps_GetBackgroundColor(const HTML_PROPS *pr); GWENHYWFAR_API void HtmlProps_SetBackgroundColor(HTML_PROPS *pr, uint32_t c); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/html/o_grid_p.h0000644000175000017500000000131112364015347015230 00000000000000/*************************************************************************** begin : Mon Feb 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTMLOBJECT_GRID_P_H #define HTMLOBJECT_GRID_P_H #include "o_grid_l.h" HTML_OBJECT *HtmlObject_Grid_new(); typedef struct OBJECT_GRID OBJECT_GRID; struct OBJECT_GRID { int rows; int columns; }; static void GWENHYWFAR_CB HtmlObject_Grid_FreeData(void *bp, void *p); #endif gwenhywfar-4.15.2beta/src/html/htmlgroup_p.h0000644000175000017500000000150612364015347016014 00000000000000/*************************************************************************** begin : Sat Feb 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTMLGROUP_P_H #define HTMLGROUP_P_H #include "htmlgroup_l.h" struct HTML_GROUP { GWEN_INHERIT_ELEMENT(HTML_GROUP) HTML_GROUP *parent; GWEN_XML_CONTEXT *xmlContext; HTML_PROPS *properties; char *groupName; HTML_GROUP_STARTTAG_FN startTagFn; HTML_GROUP_ENDTAG_FN endTagFn; HTML_GROUP_ADDDATA_FN addDataFn; HTML_GROUP_ENDSUBGROUP_FN endSubGroupFn; HTML_OBJECT *object; }; #endif gwenhywfar-4.15.2beta/src/html/o_word_l.h0000644000175000017500000000111612364015347015255 00000000000000/*************************************************************************** begin : Sat Feb 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTMLOBJECT_WORD_L_H #define HTMLOBJECT_WORD_L_H #include "htmlobject_be.h" HTML_OBJECT *HtmlObject_Word_new(GWEN_XML_CONTEXT *ctx, const char *s); #endif gwenhywfar-4.15.2beta/src/html/htmlctx_p.h0000644000175000017500000000272112416477066015466 00000000000000/*************************************************************************** begin : Sat Feb 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTMLXMLCTX_P_H #define HTMLXMLCTX_P_H #include "htmlctx_l.h" typedef struct HTML_XMLCTX HTML_XMLCTX; struct HTML_XMLCTX { HTML_GROUP *currentGroup; HTML_OBJECT_TREE *objects; char *currentTagName; GWEN_DB_NODE *dbCurrentAttribs; int resolutionX; int resolutionY; HTML_PROPS *standardProps; GWEN_STRINGLIST *mediaPaths; HTMLCTX_GET_TEXT_WIDTH_FN getTextWidthFn; HTMLCTX_GET_TEXT_HEIGHT_FN getTextHeightFn; HTMLCTX_GET_COLOR_FROM_NAME_FN getColorFromNameFn; HTMLCTX_GET_FONT_FN getFontFn; HTMLCTX_GET_IMAGE_FN getImageFn; }; static void GWENHYWFAR_CB HtmlCtx_FreeData(void *bp, void *p); static int HtmlCtx_StartTag(GWEN_XML_CONTEXT *ctx, const char *tagName); static int HtmlCtx_EndTag(GWEN_XML_CONTEXT *ctx, int closing); static int HtmlCtx_AddData(GWEN_XML_CONTEXT *ctx, const char *data); static int HtmlCtx_AddComment(GWEN_XML_CONTEXT *ctx, const char *data); static int HtmlCtx_AddAttr(GWEN_XML_CONTEXT *ctx, const char *attrName, const char *attrData); #endif gwenhywfar-4.15.2beta/src/html/g_box_p.h0000644000175000017500000000117712364015347015075 00000000000000/*************************************************************************** begin : Sat Feb 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTML_G_BOX_P_H #define HTML_G_BOX_P_H #include "g_box_l.h" static int HtmlGroup_Box_StartTag(HTML_GROUP *g, const char *tagName); static int HtmlGroup_Box_AddData(HTML_GROUP *g, const char *data); #endif gwenhywfar-4.15.2beta/src/html/Makefile.in0000644000175000017500000006456012634022415015353 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/html DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(iheader_HEADERS) $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgwenhtml_la_LIBADD = am_libgwenhtml_la_OBJECTS = g_box.lo g_generic.lo g_table.lo \ g_tablerow.lo g_unorderedlist.lo htmlctx.lo htmlfont.lo \ htmlimage.lo htmlgroup.lo htmlobject.lo htmlprops.lo o_box.lo \ o_grid.lo o_gridentry.lo o_image.lo o_word.lo libgwenhtml_la_OBJECTS = $(am_libgwenhtml_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgwenhtml_la_SOURCES) DIST_SOURCES = $(libgwenhtml_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(iheaderdir)" HEADERS = $(iheader_HEADERS) $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ -DPACKAGE=\"$(PACKAGE)\" -DBUILDING_GWENHYWFAR DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = -I$(gwenhywfar_symlinkdir) AM_CPPFLAGS = @visibility_cflags@ AM_CFLAGS = @visibility_cflags@ noinst_LTLIBRARIES = libgwenhtml.la libgwenhtml_la_SOURCES = \ g_box.c \ g_generic.c \ g_table.c \ g_tablerow.c \ g_unorderedlist.c \ htmlctx.c \ htmlfont.c \ htmlimage.c \ htmlgroup.c \ htmlobject.c \ htmlprops.c \ o_box.c \ o_grid.c \ o_gridentry.c \ o_image.c \ o_word.c iheaderdir = ${gwenhywfar_headerdir_am}/gwenhywfar iheader_HEADERS = \ htmlctx_be.h \ htmlfont_be.h \ htmlimage_be.h \ htmlobject_be.h \ htmlprops_be.h \ o_image_be.h noinst_HEADERS = \ g_box_l.h \ g_box_p.h \ g_generic_l.h \ g_generic_p.h \ g_table_l.h \ g_table_p.h \ g_tablerow_l.h \ g_tablerow_p.h \ g_unorderedlist_l.h \ g_unorderedlist_p.h \ htmlctx_l.h \ htmlctx_p.h \ htmlfont_p.h \ htmlimage_p.h \ htmlgroup_l.h \ htmlgroup_p.h \ htmlobject_p.h \ htmlprops_p.h \ o_box_l.h \ o_grid_l.h \ o_grid_p.h \ o_gridentry_l.h \ o_gridentry_p.h \ o_image_p.h \ o_word_l.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/html/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/html/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgwenhtml.la: $(libgwenhtml_la_OBJECTS) $(libgwenhtml_la_DEPENDENCIES) $(EXTRA_libgwenhtml_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgwenhtml_la_OBJECTS) $(libgwenhtml_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_box.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_generic.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_table.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_tablerow.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_unorderedlist.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htmlctx.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htmlfont.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htmlgroup.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htmlimage.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htmlobject.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htmlprops.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/o_box.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/o_grid.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/o_gridentry.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/o_image.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/o_word.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-iheaderHEADERS: $(iheader_HEADERS) @$(NORMAL_INSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(iheaderdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(iheaderdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(iheaderdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(iheaderdir)" || exit $$?; \ done uninstall-iheaderHEADERS: @$(NORMAL_UNINSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(iheaderdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(iheaderdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iheaderHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iheaderHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am \ install-iheaderHEADERS install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-iheaderHEADERS #noinst_PROGRAMS=libtest #libtest_SOURCES=libtest.c #libtest_LDADD=libgwenhtml.la # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/src/html/g_table.c0000644000175000017500000000455512416477066015063 00000000000000/*************************************************************************** begin : Mon Feb 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "g_table_p.h" #include "g_generic_l.h" #include "htmlctx_l.h" #include "o_grid_l.h" #include "g_tablerow_l.h" #include HTML_GROUP *HtmlGroup_Table_new(const char *groupName, HTML_GROUP *parent, GWEN_XML_CONTEXT *ctx) { HTML_GROUP *g; /* create base group */ g=HtmlGroup_Generic_new(groupName, parent, ctx); assert(g); /* set virtual functions */ HtmlGroup_SetStartTagFn(g, HtmlGroup_Table_StartTag); HtmlGroup_SetEndSubGroupFn(g, HtmlGroup_Table_EndSubGroup); return g; } int HtmlGroup_Table_StartTag(HTML_GROUP *g, const char *tagName) { HTML_GROUP *gNew=NULL; GWEN_XML_CONTEXT *ctx; assert(g); ctx=HtmlGroup_GetXmlContext(g); if (strcasecmp(tagName, "tr")==0) { HTML_OBJECT *o; int rows; o=HtmlGroup_GetObject(g); assert(o); rows=HtmlObject_Grid_GetRows(o); /* Create new parser group with new properties but use the same object */ gNew=HtmlGroup_TableRow_new(tagName, g, ctx); HtmlGroup_TableRow_SetRow(gNew, rows); HtmlGroup_SetProperties(gNew, HtmlGroup_GetProperties(g)); HtmlObject_Grid_SetRows(o, ++rows); HtmlGroup_SetObject(gNew, o); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Unexpected group [%s]", tagName); return GWEN_ERROR_BAD_DATA; } if (gNew) { HtmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } int HtmlGroup_Table_EndSubGroup(HTML_GROUP *g, HTML_GROUP *sg) { //GWEN_XML_CONTEXT *ctx; const char *s; assert(g); //ctx=HtmlGroup_GetXmlContext(g); s=HtmlGroup_GetGroupName(sg); if (strcasecmp(s, "tr")==0) { HTML_OBJECT *o; int i; int j; o=HtmlGroup_GetObject(g); i=HtmlObject_Grid_GetColumns(o); j=HtmlGroup_TableRow_GetColumns(sg); if (j>i) HtmlObject_Grid_SetColumns(o, j); } return 0; } gwenhywfar-4.15.2beta/src/html/htmlprops.c0000644000175000017500000000424412364015347015501 00000000000000/*************************************************************************** begin : Sat Feb 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "htmlprops_p.h" #include #include HTML_PROPS *HtmlProps_new(void) { HTML_PROPS *pr; GWEN_NEW_OBJECT(HTML_PROPS, pr); pr->refCount=1; pr->foregroundColor=HTML_PROPS_NOCOLOR; pr->backgroundColor=HTML_PROPS_NOCOLOR; return pr; } void HtmlProps_free(HTML_PROPS *pr) { if (pr) { assert(pr->refCount); if (pr->refCount>1) { pr->refCount--; } else { HtmlFont_free(pr->font); pr->refCount=0; GWEN_FREE_OBJECT(pr); } } } HTML_PROPS *HtmlProps_dup(const HTML_PROPS *pro) { HTML_PROPS *pr; pr=HtmlProps_new(); pr->font=pro->font; if (pr->font) HtmlFont_Attach(pr->font); pr->foregroundColor=pro->foregroundColor; pr->backgroundColor=pro->backgroundColor; return pr; } void HtmlProps_Attach(HTML_PROPS *pr) { assert(pr); assert(pr->refCount); pr->refCount++; } HTML_FONT *HtmlProps_GetFont(const HTML_PROPS *pr) { assert(pr); assert(pr->refCount); return pr->font; } void HtmlProps_SetFont(HTML_PROPS *pr, HTML_FONT *fnt) { assert(pr); assert(pr->refCount); HtmlFont_Attach(fnt); HtmlFont_free(pr->font); pr->font=fnt; } uint32_t HtmlProps_GetForegroundColor(const HTML_PROPS *pr) { assert(pr); assert(pr->refCount); return pr->foregroundColor; } void HtmlProps_SetForegroundColor(HTML_PROPS *pr, uint32_t c) { assert(pr); assert(pr->refCount); pr->foregroundColor=c; } uint32_t HtmlProps_GetBackgroundColor(const HTML_PROPS *pr) { assert(pr); assert(pr->refCount); return pr->backgroundColor; } void HtmlProps_SetBackgroundColor(HTML_PROPS *pr, uint32_t c) { assert(pr); assert(pr->refCount); pr->backgroundColor=c; } gwenhywfar-4.15.2beta/src/html/o_image_be.h0000644000175000017500000000271712364015347015527 00000000000000/*************************************************************************** begin : Mon Feb 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTMLOBJECT_IMAGE_BE_H #define HTMLOBJECT_IMAGE_BE_H #include #include #ifdef __cplusplus extern "C" { #endif GWENHYWFAR_API HTML_OBJECT *HtmlObject_Image_new(GWEN_XML_CONTEXT *ctx); GWENHYWFAR_API int HtmlObject_Image_GetScaledWidth(const HTML_OBJECT *o); GWENHYWFAR_API void HtmlObject_Image_SetScaledWidth(HTML_OBJECT *o, int i); GWENHYWFAR_API int HtmlObject_Image_GetScaledHeight(const HTML_OBJECT *o); GWENHYWFAR_API void HtmlObject_Image_SetScaledHeight(HTML_OBJECT *o, int i); GWENHYWFAR_API int HtmlObject_Image_GetOriginalWidth(const HTML_OBJECT *o); GWENHYWFAR_API void HtmlObject_Image_SetOriginalWidth(HTML_OBJECT *o, int i); GWENHYWFAR_API int HtmlObject_Image_GetOriginalHeight(const HTML_OBJECT *o); GWENHYWFAR_API void HtmlObject_Image_SetOriginalHeight(HTML_OBJECT *o, int i); GWENHYWFAR_API HTML_IMAGE *HtmlObject_Image_GetImage(const HTML_OBJECT *o); GWENHYWFAR_API void HtmlObject_Image_SetImage(HTML_OBJECT *o, HTML_IMAGE *img); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/html/g_table_l.h0000644000175000017500000000124212416477066015371 00000000000000/*************************************************************************** begin : Mon Feb 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTML_G_TABLE_L_H #define HTML_G_TABLE_L_H #include "htmlgroup_l.h" HTML_GROUP *HtmlGroup_Table_new(const char *groupName, HTML_GROUP *parent, GWEN_XML_CONTEXT *ctx); #endif gwenhywfar-4.15.2beta/src/html/htmlctx.c0000644000175000017500000004224312416477066015145 00000000000000/*************************************************************************** begin : Sat Feb 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "htmlctx_p.h" #include "o_box_l.h" #include "g_box_l.h" #include #include #include GWEN_INHERIT(GWEN_XML_CONTEXT, HTML_XMLCTX) GWEN_XML_CONTEXT *HtmlCtx_new(uint32_t flags) { GWEN_XML_CONTEXT *ctx; HTML_XMLCTX *xctx; HTML_GROUP *g; HTML_OBJECT *o; /* create base object */ ctx=GWEN_XmlCtx_new(flags); assert(ctx); /* create and assign extension */ GWEN_NEW_OBJECT(HTML_XMLCTX, xctx); assert(xctx); GWEN_INHERIT_SETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx, xctx, HtmlCtx_FreeData); /* set virtual functions */ GWEN_XmlCtx_SetStartTagFn(ctx, HtmlCtx_StartTag); GWEN_XmlCtx_SetEndTagFn(ctx, HtmlCtx_EndTag); GWEN_XmlCtx_SetAddDataFn(ctx, HtmlCtx_AddData); GWEN_XmlCtx_SetAddCommentFn(ctx, HtmlCtx_AddComment); GWEN_XmlCtx_SetAddAttrFn(ctx, HtmlCtx_AddAttr); xctx->objects=HtmlObject_Tree_new(); xctx->mediaPaths=GWEN_StringList_new(); xctx->resolutionX=75; xctx->resolutionY=75; /* create initial group */ g=HtmlGroup_Box_new("HTML_ROOT", NULL, ctx); assert(g); o=HtmlObject_Box_new(ctx); HtmlGroup_SetObject(g, o); HtmlObject_Tree_Add(xctx->objects, o); HtmlCtx_SetCurrentGroup(ctx, g); /* return base object */ return ctx; } GWENHYWFAR_CB void HtmlCtx_FreeData(void *bp, void *p) { HTML_XMLCTX *xctx; HTML_GROUP *g; xctx=(HTML_XMLCTX*)p; g=xctx->currentGroup; while (g) { HTML_GROUP *gParent; gParent=HtmlGroup_GetParent(g); HtmlGroup_free(g); g=gParent; } GWEN_DB_Group_free(xctx->dbCurrentAttribs); free(xctx->currentTagName); HtmlObject_Tree_free(xctx->objects); GWEN_StringList_free(xctx->mediaPaths); HtmlProps_free(xctx->standardProps); GWEN_FREE_OBJECT(xctx); } int HtmlCtx_GetResolutionX(const GWEN_XML_CONTEXT *ctx) { HTML_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); return xctx->resolutionX; } void HtmlCtx_SetResolutionX(GWEN_XML_CONTEXT *ctx, int i) { HTML_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); xctx->resolutionX=i; } int HtmlCtx_GetResolutionY(const GWEN_XML_CONTEXT *ctx) { HTML_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); return xctx->resolutionY; } void HtmlCtx_SetResolutionY(GWEN_XML_CONTEXT *ctx, int i) { HTML_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); xctx->resolutionY=i; } GWEN_STRINGLIST *HtmlCtx_GetMediaPaths(const GWEN_XML_CONTEXT *ctx) { HTML_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); return xctx->mediaPaths; } void HtmlCtx_AddMediaPath(GWEN_XML_CONTEXT *ctx, const char *s) { HTML_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); assert(s && *s); GWEN_StringList_AppendString(xctx->mediaPaths, s, 0, 1); } HTML_GROUP *HtmlCtx_GetCurrentGroup(const GWEN_XML_CONTEXT *ctx) { HTML_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); return xctx->currentGroup; } void HtmlCtx_SetCurrentGroup(GWEN_XML_CONTEXT *ctx, HTML_GROUP *g) { HTML_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); xctx->currentGroup=g; } const char *HtmlCtx_GetCurrentTagName(const GWEN_XML_CONTEXT *ctx) { HTML_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); return xctx->currentTagName; } void HtmlCtx_SetCurrentTagName(GWEN_XML_CONTEXT *ctx, const char *s) { HTML_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); free(xctx->currentTagName); if (s) xctx->currentTagName=strdup(s); else xctx->currentTagName=NULL; } GWEN_DB_NODE *HtmlCtx_GetCurrentAttributes(const GWEN_XML_CONTEXT *ctx) { HTML_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); return xctx->dbCurrentAttribs; } HTML_OBJECT_TREE *HtmlCtx_GetObjects(const GWEN_XML_CONTEXT *ctx) { HTML_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); return xctx->objects; } HTML_OBJECT_TREE *HtmlCtx_TakeObjects(const GWEN_XML_CONTEXT *ctx) { HTML_XMLCTX *xctx; HTML_OBJECT_TREE *t; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); t=xctx->objects; xctx->objects=NULL; return t; } HTML_OBJECT *HtmlCtx_GetRootObject(const GWEN_XML_CONTEXT *ctx) { HTML_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); return HtmlObject_Tree_GetFirst(xctx->objects); } int HtmlCtx_SanitizeData(GWEN_XML_CONTEXT *ctx, const char *data, GWEN_BUFFER *buf) { if (data && *data) { const uint8_t *p; uint8_t *dst; uint8_t *src; unsigned int size; unsigned int i; int lastWasBlank; uint8_t *lastBlankPos; uint32_t bStart=0; if (GWEN_Text_UnescapeXmlToBuffer(data, buf)) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return GWEN_ERROR_BAD_DATA; } if (GWEN_Buffer_GetUsedBytes(buf)==0) { DBG_INFO(GWEN_LOGDOMAIN, "Empty data."); return 0; } dst=(uint8_t*)GWEN_Buffer_GetStart(buf); src=dst; /* skip leading blanks */ while(*src && (*src<33 || *src==127)) src++; p=src; bStart=src-((uint8_t*)GWEN_Buffer_GetStart(buf)); size=GWEN_Buffer_GetUsedBytes(buf)-bStart; lastWasBlank=0; lastBlankPos=0; for (i=0; istandardProps; } void HtmlCtx_SetStandardProps(GWEN_XML_CONTEXT *ctx, HTML_PROPS *pr) { HTML_XMLCTX *xctx; HTML_OBJECT *o; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); HtmlProps_Attach(pr); HtmlProps_free(xctx->standardProps); xctx->standardProps=pr; if (pr) { if (xctx->currentGroup && HtmlGroup_GetParent(xctx->currentGroup)==NULL) HtmlGroup_SetProperties(xctx->currentGroup, pr); o=HtmlObject_Tree_GetFirst(xctx->objects); if (o && HtmlObject_GetProperties(o)==NULL) HtmlObject_SetProperties(o, pr); } } int HtmlCtx_StartTag(GWEN_XML_CONTEXT *ctx, const char *tagName) { HTML_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); DBG_DEBUG(GWEN_LOGDOMAIN, "Starting tag [%s]", tagName); /* store for later, do nothing more here */ HtmlCtx_SetCurrentTagName(ctx, tagName); GWEN_DB_Group_free(xctx->dbCurrentAttribs); xctx->dbCurrentAttribs=GWEN_DB_Group_new("attribs"); return 0; } int HtmlCtx_EndTag(GWEN_XML_CONTEXT *ctx, int closing) { HTML_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); if (closing) { /* just ignore empty tags which are closed immediately */ DBG_DEBUG(GWEN_LOGDOMAIN, "Closing empty tag [%s]", (xctx->currentTagName)?xctx->currentTagName:""); return 0; } if (xctx->currentTagName==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "No tag name, malformed HTML data"); return GWEN_ERROR_BAD_DATA; } DBG_DEBUG(GWEN_LOGDOMAIN, "Completed tag [%s]", xctx->currentTagName); if (xctx->currentGroup) { if (*(xctx->currentTagName)=='/') { int rv; /* it is a closing tag, call EndTagFn */ DBG_DEBUG(GWEN_LOGDOMAIN, "Calling %s->EndTag(%s)", HtmlGroup_GetGroupName(xctx->currentGroup), xctx->currentTagName); rv=HtmlGroup_EndTag(xctx->currentGroup, xctx->currentTagName+1); if (rv<0) { if (rv!=GWEN_ERROR_NOT_IMPLEMENTED) { DBG_INFO(GWEN_LOGDOMAIN, "Error in EndTag(%s) for [%s]", HtmlGroup_GetGroupName(xctx->currentGroup), xctx->currentTagName); return rv; } } else if (rv==1) { HTML_GROUP *g; HTML_GROUP *gParent; /* pop current group from stack */ g=xctx->currentGroup; gParent=HtmlGroup_GetParent(g); xctx->currentGroup=gParent; if (gParent) { DBG_DEBUG(GWEN_LOGDOMAIN, "Calling %s->EndSubGroup(%s)", HtmlGroup_GetGroupName(gParent), HtmlGroup_GetGroupName(g)); HtmlGroup_EndSubGroup(gParent, g); } HtmlGroup_free(g); GWEN_XmlCtx_DecDepth(ctx); } } else { int rv; /* it is an opening tag, call StartTagFn */ DBG_DEBUG(GWEN_LOGDOMAIN, "Calling %s->StartTag(%s)", HtmlGroup_GetGroupName(xctx->currentGroup), xctx->currentTagName); rv=HtmlGroup_StartTag(xctx->currentGroup, xctx->currentTagName); if (rv<0) { if (rv!=GWEN_ERROR_NOT_IMPLEMENTED) { DBG_INFO(GWEN_LOGDOMAIN, "Error in StartTag(%s) for [%s]", HtmlGroup_GetGroupName(xctx->currentGroup), xctx->currentTagName); return rv; } } } } return 0; } int HtmlCtx_AddData(GWEN_XML_CONTEXT *ctx, const char *data) { HTML_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); if (xctx->currentGroup) { int rv; DBG_DEBUG(GWEN_LOGDOMAIN, "Calling %s->AddData()", HtmlGroup_GetGroupName(xctx->currentGroup)); rv=HtmlGroup_AddData(xctx->currentGroup, data); if (rv<0) { if (rv!=GWEN_ERROR_NOT_IMPLEMENTED) { DBG_INFO(GWEN_LOGDOMAIN, "Error in AddData(%s)", HtmlGroup_GetGroupName(xctx->currentGroup)); return rv; } } } return 0; } int HtmlCtx_AddComment(GWEN_XML_CONTEXT *ctx, const char *data) { HTML_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); /* ignore comments */ return 0; } int HtmlCtx_AddAttr(GWEN_XML_CONTEXT *ctx, const char *attrName, const char *attrData) { HTML_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); if (xctx->currentGroup) { assert(xctx->dbCurrentAttribs); GWEN_DB_SetCharValue(xctx->dbCurrentAttribs, GWEN_DB_FLAGS_DEFAULT, attrName, attrData); } return 0; } int HtmlCtx_GetTextWidth(GWEN_XML_CONTEXT *ctx, HTML_FONT *fnt, const char *s) { HTML_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); if (xctx->getTextWidthFn) return xctx->getTextWidthFn(ctx, fnt, s); else return -1; } int HtmlCtx_GetTextHeight(GWEN_XML_CONTEXT *ctx, HTML_FONT *fnt, const char *s) { HTML_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); if (xctx->getTextHeightFn) return xctx->getTextHeightFn(ctx, fnt, s); else return -1; } uint32_t HtmlCtx_GetColorFromName(const GWEN_XML_CONTEXT *ctx, const char *name) { HTML_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); if (xctx->getColorFromNameFn) return xctx->getColorFromNameFn(ctx, name); else return 0xffffffff; } HTML_FONT *HtmlCtx_GetFont(GWEN_XML_CONTEXT *ctx, const char *fontName, int fontSize, uint32_t fontFlags) { HTML_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); if (xctx->getFontFn) return xctx->getFontFn(ctx, fontName, fontSize, fontFlags); else return NULL; } HTML_IMAGE *HtmlCtx_GetImage(GWEN_XML_CONTEXT *ctx, const char *imageName) { HTML_XMLCTX *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); if (xctx->getImageFn) return xctx->getImageFn(ctx, imageName); else return NULL; } HTMLCTX_GET_TEXT_WIDTH_FN HtmlCtx_SetGetTextWidthFn(GWEN_XML_CONTEXT *ctx, HTMLCTX_GET_TEXT_WIDTH_FN fn) { HTML_XMLCTX *xctx; HTMLCTX_GET_TEXT_WIDTH_FN of; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); of=xctx->getTextWidthFn; xctx->getTextWidthFn=fn; return of; } HTMLCTX_GET_TEXT_HEIGHT_FN HtmlCtx_SetGetTextHeightFn(GWEN_XML_CONTEXT *ctx, HTMLCTX_GET_TEXT_HEIGHT_FN fn) { HTML_XMLCTX *xctx; HTMLCTX_GET_TEXT_HEIGHT_FN of; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); of=xctx->getTextHeightFn; xctx->getTextHeightFn=fn; return of; } HTMLCTX_GET_COLOR_FROM_NAME_FN HtmlCtx_SetGetColorFromNameFn(GWEN_XML_CONTEXT *ctx, HTMLCTX_GET_COLOR_FROM_NAME_FN fn) { HTML_XMLCTX *xctx; HTMLCTX_GET_COLOR_FROM_NAME_FN of; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); of=xctx->getColorFromNameFn; xctx->getColorFromNameFn=fn; return of; } HTMLCTX_GET_FONT_FN HtmlCtx_SetGetFontFn(GWEN_XML_CONTEXT *ctx, HTMLCTX_GET_FONT_FN fn) { HTML_XMLCTX *xctx; HTMLCTX_GET_FONT_FN of; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); of=xctx->getFontFn; xctx->getFontFn=fn; return of; } HTMLCTX_GET_IMAGE_FN HtmlCtx_SetGetImageFn(GWEN_XML_CONTEXT *ctx, HTMLCTX_GET_IMAGE_FN fn) { HTML_XMLCTX *xctx; HTMLCTX_GET_IMAGE_FN of; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); of=xctx->getImageFn; xctx->getImageFn=fn; return of; } int HtmlCtx_Layout(GWEN_XML_CONTEXT *ctx, int width, int height) { HTML_XMLCTX *xctx; HTML_OBJECT *o; int rv; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); o=HtmlObject_Tree_GetFirst(xctx->objects); if (o==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No objects"); return 0; } HtmlObject_SetWidth(o, width); HtmlObject_SetHeight(o, height); rv=HtmlObject_Layout(o); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } void HtmlCtx_SetText(GWEN_XML_CONTEXT *ctx, const char *s) { HTML_XMLCTX *xctx; int rv; HTML_GROUP *g; HTML_OBJECT *o; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx); assert(xctx); /* reset */ HtmlObject_Tree_Clear(xctx->objects); /* create initial group */ g=HtmlGroup_Box_new("HTML_ROOT", NULL, ctx); assert(g); HtmlGroup_SetProperties(g, xctx->standardProps); o=HtmlObject_Box_new(ctx); HtmlObject_SetProperties(o, xctx->standardProps); HtmlGroup_SetObject(g, o); HtmlObject_Tree_Add(xctx->objects, o); HtmlCtx_SetCurrentGroup(ctx, g); if (s && *s) { rv=GWEN_XMLContext_ReadFromString(ctx, s); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); } } #if 0 fprintf(stderr, "============ Objects:\n"); fprintf(stderr, "String: [%s]\n", s); o=HtmlObject_Tree_GetFirst(xctx->objects); while(o) { const char *xx; xx=HtmlObject_GetText(o); fprintf(stderr, "Object(%d): [%s]\n", HtmlObject_GetObjectType(o), xx?xx:"(NULL)"); o=HtmlObject_Tree_GetBelow(o); } #endif } int HtmlCtx_GetWidth(const GWEN_XML_CONTEXT *ctx) { HTML_OBJECT *o; o=HtmlCtx_GetRootObject(ctx); if (o) return HtmlObject_GetWidth(o); else return -1; } int HtmlCtx_GetHeight(const GWEN_XML_CONTEXT *ctx) { HTML_OBJECT *o; o=HtmlCtx_GetRootObject(ctx); if (o) return HtmlObject_GetHeight(o); else return -1; } gwenhywfar-4.15.2beta/src/html/o_word.c0000644000175000017500000000242412364015347014740 00000000000000/*************************************************************************** begin : Sat Feb 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "o_word_l.h" #include "htmlctx_l.h" #include static int HtmlObject_Word_Layout(HTML_OBJECT *o) { const char *s; int w=0; int h=0; s=HtmlObject_GetText(o); if (s) { HTML_PROPS *pr; HTML_FONT *fnt; pr=HtmlObject_GetProperties(o); assert(pr); fnt=HtmlProps_GetFont(pr); w=HtmlCtx_GetTextWidth(HtmlObject_GetXmlCtx(o), fnt, s)+(HtmlFont_GetFontSize(fnt)/2); h=HtmlCtx_GetTextHeight(HtmlObject_GetXmlCtx(o), fnt, s); } HtmlObject_SetWidth(o, w); HtmlObject_SetHeight(o, h); return 0; } HTML_OBJECT *HtmlObject_Word_new(GWEN_XML_CONTEXT *ctx, const char *s) { HTML_OBJECT *o; o=HtmlObject_new(ctx, HtmlObjectType_Word); HtmlObject_SetText(o, s); HtmlObject_SetLayoutFn(o, HtmlObject_Word_Layout); return o; } gwenhywfar-4.15.2beta/src/html/htmlprops_p.h0000644000175000017500000000116212364015347016021 00000000000000/*************************************************************************** begin : Sat Feb 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTMLPROPS_P_H #define HTMLPROPS_P_H #include "htmlprops_be.h" struct HTML_PROPS { HTML_FONT *font; uint32_t foregroundColor; uint32_t backgroundColor; uint32_t refCount; }; #endif gwenhywfar-4.15.2beta/src/html/htmlobject_be.h0000644000175000017500000000712412416477066016267 00000000000000/*************************************************************************** begin : Sat Feb 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTMLOBJECT_BE_H #define HTMLOBJECT_BE_H #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct HTML_OBJECT HTML_OBJECT; GWEN_TREE_FUNCTION_LIB_DEFS(HTML_OBJECT, HtmlObject, GWENHYWFAR_API) GWEN_INHERIT_FUNCTION_LIB_DEFS(HTML_OBJECT, GWENHYWFAR_API) #define HTML_OBJECT_FLAGS_START_ON_NEWLINE 0x00000001 #define HTML_OBJECT_FLAGS_END_WITH_NEWLINE 0x00000002 #define HTML_OBJECT_FLAGS_JUSTIFY_LEFT 0x00000000 #define HTML_OBJECT_FLAGS_JUSTIFY_RIGHT 0x00000004 #define HTML_OBJECT_FLAGS_JUSTIFY_HCENTER 0x00000008 #define HTML_OBJECT_FLAGS_JUSTIFY_TOP 0x00000000 #define HTML_OBJECT_FLAGS_JUSTIFY_BOTTOM 0x00000010 #define HTML_OBJECT_FLAGS_JUSTIFY_VCENTER 0x00000020 typedef int (*HTML_OBJECT_LAYOUT_FN)(HTML_OBJECT *o); typedef enum { HtmlObjectType_Unknown=0, HtmlObjectType_Box, HtmlObjectType_Word, HtmlObjectType_OrderedList, HtmlObjectType_UnorderedList, HtmlObjectType_ListEntry, HtmlObjectType_Grid, HtmlObjectType_GridEntry, HtmlObjectType_Control, HtmlObjectType_Image, HtmlObjectType_Count } HTML_OBJECT_TYPE; #include #include GWENHYWFAR_API HTML_OBJECT *HtmlObject_new(GWEN_XML_CONTEXT *ctx, HTML_OBJECT_TYPE t); GWENHYWFAR_API void HtmlObject_free(HTML_OBJECT *o); GWENHYWFAR_API void HtmlObject_Attach(HTML_OBJECT *o); GWENHYWFAR_API GWEN_XML_CONTEXT *HtmlObject_GetXmlCtx(const HTML_OBJECT *o); GWENHYWFAR_API HTML_OBJECT_TYPE HtmlObject_GetObjectType(const HTML_OBJECT *o); GWENHYWFAR_API void HtmlObject_SetObjectType(HTML_OBJECT *o, HTML_OBJECT_TYPE t); GWENHYWFAR_API HTML_PROPS *HtmlObject_GetProperties(const HTML_OBJECT *o); GWENHYWFAR_API void HtmlObject_SetProperties(HTML_OBJECT *o, HTML_PROPS *pr); GWENHYWFAR_API int HtmlObject_GetX(const HTML_OBJECT *o); GWENHYWFAR_API void HtmlObject_SetX(HTML_OBJECT *o, int i); GWENHYWFAR_API int HtmlObject_GetY(const HTML_OBJECT *o); GWENHYWFAR_API void HtmlObject_SetY(HTML_OBJECT *o, int i); GWENHYWFAR_API int HtmlObject_GetWidth(const HTML_OBJECT *o); GWENHYWFAR_API void HtmlObject_SetWidth(HTML_OBJECT *o, int i); GWENHYWFAR_API int HtmlObject_GetHeight(const HTML_OBJECT *o); GWENHYWFAR_API void HtmlObject_SetHeight(HTML_OBJECT *o, int i); GWENHYWFAR_API int HtmlObject_GetConfiguredWidth(const HTML_OBJECT *o); GWENHYWFAR_API void HtmlObject_SetConfiguredWidth(HTML_OBJECT *o, int i); GWENHYWFAR_API int HtmlObject_GetConfiguredHeight(const HTML_OBJECT *o); GWENHYWFAR_API void HtmlObject_SetConfiguredHeight(HTML_OBJECT *o, int i); GWENHYWFAR_API const char *HtmlObject_GetText(const HTML_OBJECT *o); GWENHYWFAR_API void HtmlObject_SetText(HTML_OBJECT *o, const char *s); GWENHYWFAR_API int HtmlObject_Layout(HTML_OBJECT *o); GWENHYWFAR_API uint32_t HtmlObject_GetFlags(const HTML_OBJECT *o); GWENHYWFAR_API void HtmlObject_SetFlags(HTML_OBJECT *o, uint32_t fl); GWENHYWFAR_API void HtmlObject_AddFlags(HTML_OBJECT *o, uint32_t fl); GWENHYWFAR_API void HtmlObject_SubFlags(HTML_OBJECT *o, uint32_t fl); GWENHYWFAR_API HTML_OBJECT_LAYOUT_FN HtmlObject_SetLayoutFn(HTML_OBJECT *o, HTML_OBJECT_LAYOUT_FN fn); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/html/htmlgroup.c0000644000175000017500000000711412416477066015501 00000000000000/*************************************************************************** begin : Sat Feb 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "htmlgroup_p.h" #include #include GWEN_INHERIT_FUNCTIONS(HTML_GROUP) HTML_GROUP *HtmlGroup_new(const char *groupName, HTML_GROUP *parent, GWEN_XML_CONTEXT *ctx) { HTML_GROUP *g; GWEN_NEW_OBJECT(HTML_GROUP, g); GWEN_INHERIT_INIT(HTML_GROUP, g); g->parent=parent; g->xmlContext=ctx; if (groupName) g->groupName=strdup(groupName); if (g->xmlContext==NULL && g->parent) g->xmlContext=parent->xmlContext; return g; } void HtmlGroup_free(HTML_GROUP *g) { if (g) { GWEN_INHERIT_FINI(HTML_GROUP, g); HtmlProps_free(g->properties); free(g->groupName); GWEN_FREE_OBJECT(g); } } HTML_GROUP *HtmlGroup_GetParent(const HTML_GROUP *g) { assert(g); return g->parent; } GWEN_XML_CONTEXT *HtmlGroup_GetXmlContext(const HTML_GROUP *g) { assert(g); return g->xmlContext; } const char *HtmlGroup_GetGroupName(const HTML_GROUP *g) { assert(g); return g->groupName; } HTML_OBJECT *HtmlGroup_GetObject(const HTML_GROUP *g) { assert(g); return g->object; } void HtmlGroup_SetObject(HTML_GROUP *g, HTML_OBJECT *o) { assert(g); g->object=o; } HTML_PROPS *HtmlGroup_GetProperties(const HTML_GROUP *g) { assert(g); return g->properties; } void HtmlGroup_SetProperties(HTML_GROUP *g, HTML_PROPS *pr) { assert(g); HtmlProps_Attach(pr); HtmlProps_free(g->properties); g->properties=pr; } HTML_GROUP_STARTTAG_FN HtmlGroup_SetStartTagFn(HTML_GROUP *g, HTML_GROUP_STARTTAG_FN f) { HTML_GROUP_STARTTAG_FN oldFn; assert(g); oldFn=g->startTagFn; g->startTagFn=f; return oldFn; } HTML_GROUP_ENDTAG_FN HtmlGroup_SetEndTagFn(HTML_GROUP *g, HTML_GROUP_ENDTAG_FN f) { HTML_GROUP_ENDTAG_FN oldFn; assert(g); oldFn=g->endTagFn; g->endTagFn=f; return oldFn; } HTML_GROUP_ADDDATA_FN HtmlGroup_SetAddDataFn(HTML_GROUP *g, HTML_GROUP_ADDDATA_FN f) { HTML_GROUP_ADDDATA_FN oldFn; assert(g); oldFn=g->addDataFn; g->addDataFn=f; return oldFn; } HTML_GROUP_ENDSUBGROUP_FN HtmlGroup_SetEndSubGroupFn(HTML_GROUP *g, HTML_GROUP_ENDSUBGROUP_FN f) { HTML_GROUP_ENDSUBGROUP_FN oldFn; assert(g); oldFn=g->endSubGroupFn; g->endSubGroupFn=f; return oldFn; } int HtmlGroup_StartTag(HTML_GROUP *g, const char *tagName) { assert(g); if (g->startTagFn) return g->startTagFn(g, tagName); else return GWEN_ERROR_NOT_IMPLEMENTED; } int HtmlGroup_EndTag(HTML_GROUP *g, const char *tagName) { assert(g); if (g->endTagFn) return g->endTagFn(g, tagName); else return GWEN_ERROR_NOT_IMPLEMENTED; } int HtmlGroup_AddData(HTML_GROUP *g, const char *data) { assert(g); if (g->addDataFn) return g->addDataFn(g, data); else return GWEN_ERROR_NOT_IMPLEMENTED; } int HtmlGroup_EndSubGroup(HTML_GROUP *g, HTML_GROUP *sg) { assert(g); if (g->endSubGroupFn) return g->endSubGroupFn(g, sg); else return GWEN_ERROR_NOT_IMPLEMENTED; } gwenhywfar-4.15.2beta/src/html/htmlimage_be.h0000644000175000017500000000250512416477066016101 00000000000000/*************************************************************************** begin : Fri Jul 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTMLIMAGE_BE_H #define HTMLIMAGE_BE_H #include #include #ifdef __cplusplus extern "C" { #endif typedef struct HTML_IMAGE HTML_IMAGE; GWEN_INHERIT_FUNCTION_LIB_DEFS(HTML_IMAGE, GWENHYWFAR_API) GWEN_LIST_FUNCTION_LIB_DEFS(HTML_IMAGE, HtmlImage, GWENHYWFAR_API) GWENHYWFAR_API HTML_IMAGE *HtmlImage_new(void); GWENHYWFAR_API void HtmlImage_free(HTML_IMAGE *img); GWENHYWFAR_API void HtmlImage_Attach(HTML_IMAGE *img); GWENHYWFAR_API const char *HtmlImage_GetImageName(const HTML_IMAGE *img); GWENHYWFAR_API void HtmlImage_SetImageName(HTML_IMAGE *img, const char *s); GWENHYWFAR_API int HtmlImage_GetWidth(const HTML_IMAGE *img); GWENHYWFAR_API void HtmlImage_SetWidth(HTML_IMAGE *img, int i); GWENHYWFAR_API int HtmlImage_GetHeight(const HTML_IMAGE *img); GWENHYWFAR_API void HtmlImage_SetHeight(HTML_IMAGE *img, int i); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/html/htmlctx_l.h0000644000175000017500000000334112416477066015461 00000000000000/*************************************************************************** begin : Sat Feb 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTMLXMLCTX_L_H #define HTMLXMLCTX_L_H #include "htmlctx_be.h" #include "htmlgroup_l.h" #include HTML_OBJECT_TREE *HtmlCtx_GetObjects(const GWEN_XML_CONTEXT *ctx); HTML_OBJECT_TREE *HtmlCtx_TakeObjects(const GWEN_XML_CONTEXT *ctx); HTML_GROUP *HtmlCtx_GetCurrentGroup(const GWEN_XML_CONTEXT *ctx); void HtmlCtx_SetCurrentGroup(GWEN_XML_CONTEXT *ctx, HTML_GROUP *g); const char *HtmlCtx_GetCurrentTagName(const GWEN_XML_CONTEXT *ctx); void HtmlCtx_SetCurrentTagName(GWEN_XML_CONTEXT *ctx, const char *s); GWEN_DB_NODE *HtmlCtx_GetCurrentAttributes(const GWEN_XML_CONTEXT *ctx); HTML_FONT *HtmlCtx_FindFont(const GWEN_XML_CONTEXT *ctx, const char *fontName, int fontSize, uint32_t fontFlags); int HtmlCtx_SanitizeData(GWEN_XML_CONTEXT *ctx, const char *data, GWEN_BUFFER *buf); uint32_t HtmlCtx_GetColorFromName(const GWEN_XML_CONTEXT *ctx, const char *name); int HtmlCtx_GetTextWidth(GWEN_XML_CONTEXT *ctx, HTML_FONT *fnt, const char *s); int HtmlCtx_GetTextHeight(GWEN_XML_CONTEXT *ctx, HTML_FONT *fnt, const char *s); #endif gwenhywfar-4.15.2beta/src/html/Makefile.am0000644000175000017500000000215012364015347015333 00000000000000INCLUDES=-I$(gwenhywfar_symlinkdir) AM_CPPFLAGS= @visibility_cflags@ AM_CFLAGS=@visibility_cflags@ DEFS+=-DPACKAGE=\"$(PACKAGE)\" -DBUILDING_GWENHYWFAR noinst_LTLIBRARIES=libgwenhtml.la libgwenhtml_la_SOURCES=\ g_box.c \ g_generic.c \ g_table.c \ g_tablerow.c \ g_unorderedlist.c \ htmlctx.c \ htmlfont.c \ htmlimage.c \ htmlgroup.c \ htmlobject.c \ htmlprops.c \ o_box.c \ o_grid.c \ o_gridentry.c \ o_image.c \ o_word.c iheaderdir=${gwenhywfar_headerdir_am}/gwenhywfar iheader_HEADERS= \ htmlctx_be.h \ htmlfont_be.h \ htmlimage_be.h \ htmlobject_be.h \ htmlprops_be.h \ o_image_be.h noinst_HEADERS= \ g_box_l.h \ g_box_p.h \ g_generic_l.h \ g_generic_p.h \ g_table_l.h \ g_table_p.h \ g_tablerow_l.h \ g_tablerow_p.h \ g_unorderedlist_l.h \ g_unorderedlist_p.h \ htmlctx_l.h \ htmlctx_p.h \ htmlfont_p.h \ htmlimage_p.h \ htmlgroup_l.h \ htmlgroup_p.h \ htmlobject_p.h \ htmlprops_p.h \ o_box_l.h \ o_grid_l.h \ o_grid_p.h \ o_gridentry_l.h \ o_gridentry_p.h \ o_image_p.h \ o_word_l.h #noinst_PROGRAMS=libtest #libtest_SOURCES=libtest.c #libtest_LDADD=libgwenhtml.la gwenhywfar-4.15.2beta/src/html/g_unorderedlist_l.h0000644000175000017500000000131212416477066017163 00000000000000/*************************************************************************** begin : Mon Feb 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTML_G_UNORDEREDLIST_L_H #define HTML_G_UNORDEREDLIST_L_H #include "htmlgroup_l.h" HTML_GROUP *HtmlGroup_UnorderedList_new(const char *groupName, HTML_GROUP *parent, GWEN_XML_CONTEXT *ctx); #endif gwenhywfar-4.15.2beta/src/html/g_generic_p.h0000644000175000017500000000133212364015347015712 00000000000000/*************************************************************************** begin : Sat Feb 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTML_G_GENERIC_P_H #define HTML_G_GENERIC_P_H #include "g_generic_l.h" static int HtmlGroup_Generic_EndTag(HTML_GROUP *g, const char *tagName); static int HtmlGroup_Generic_AddData(HTML_GROUP *g, const char *data); static int HtmlGroup_Generic_EndSubGroup(HTML_GROUP *g, HTML_GROUP *sg); #endif gwenhywfar-4.15.2beta/src/html/htmlfont_p.h0000644000175000017500000000123412364015347015624 00000000000000/*************************************************************************** begin : Sat Feb 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTMLFONT_P_H #define HTMLFONT_P_H #include "htmlfont_be.h" struct HTML_FONT { GWEN_INHERIT_ELEMENT(HTML_FONT) GWEN_LIST_ELEMENT(HTML_FONT) char *fontName; int fontSize; uint32_t fontFlags; uint32_t refCount; }; #endif gwenhywfar-4.15.2beta/src/html/htmlfont.c0000644000175000017500000000431412364015347015302 00000000000000/*************************************************************************** begin : Sat Feb 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "htmlfont_p.h" GWEN_INHERIT_FUNCTIONS(HTML_FONT) GWEN_LIST_FUNCTIONS(HTML_FONT, HtmlFont) HTML_FONT *HtmlFont_new(void) { HTML_FONT *fnt; GWEN_NEW_OBJECT(HTML_FONT, fnt); fnt->refCount=1; GWEN_INHERIT_INIT(HTML_FONT, fnt); GWEN_LIST_INIT(HTML_FONT, fnt); return fnt; } void HtmlFont_free(HTML_FONT *fnt) { if (fnt) { assert(fnt->refCount); if (fnt->refCount>1) fnt->refCount--; else { GWEN_LIST_FINI(HTML_FONT, fnt); GWEN_INHERIT_FINI(HTML_FONT, fnt); free(fnt->fontName); fnt->refCount=0; GWEN_FREE_OBJECT(fnt); } } } void HtmlFont_Attach(HTML_FONT *fnt) { assert(fnt); assert(fnt->refCount); fnt->refCount++; } const char *HtmlFont_GetFontName(const HTML_FONT *fnt) { assert(fnt); assert(fnt->refCount); return fnt->fontName; } void HtmlFont_SetFontName(HTML_FONT *fnt, const char *s) { assert(fnt); assert(fnt->refCount); free(fnt->fontName); if (s) fnt->fontName=strdup(s); else fnt->fontName=NULL; } int HtmlFont_GetFontSize(const HTML_FONT *fnt) { assert(fnt); assert(fnt->refCount); return fnt->fontSize; } void HtmlFont_SetFontSize(HTML_FONT *fnt, int i) { assert(fnt); assert(fnt->refCount); fnt->fontSize=i; } uint32_t HtmlFont_GetFontFlags(const HTML_FONT *fnt) { assert(fnt); assert(fnt->refCount); return fnt->fontFlags; } void HtmlFont_SetFontFlags(HTML_FONT *fnt, uint32_t i) { assert(fnt); assert(fnt->refCount); fnt->fontFlags=i; } void HtmlFont_AddFontFlags(HTML_FONT *fnt, uint32_t i) { assert(fnt); assert(fnt->refCount); fnt->fontFlags|=i; } void HtmlFont_SubFontFlags(HTML_FONT *fnt, uint32_t i) { assert(fnt); assert(fnt->refCount); fnt->fontFlags&=~i; } gwenhywfar-4.15.2beta/src/html/g_generic.c0000644000175000017500000000332412416477066015401 00000000000000/*************************************************************************** begin : Sat Feb 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "g_generic_p.h" #include "htmlctx_l.h" #include #include HTML_GROUP *HtmlGroup_Generic_new(const char *groupName, HTML_GROUP *parent, GWEN_XML_CONTEXT *ctx) { HTML_GROUP *g; /* create base group */ g=HtmlGroup_new(groupName, parent, ctx); assert(g); /* set virtual functions */ HtmlGroup_SetEndTagFn(g, HtmlGroup_Generic_EndTag); HtmlGroup_SetAddDataFn(g, HtmlGroup_Generic_AddData); HtmlGroup_SetEndSubGroupFn(g, HtmlGroup_Generic_EndSubGroup); return g; } int HtmlGroup_Generic_EndTag(HTML_GROUP *g, const char *tagName) { assert(g); if (strcasecmp(HtmlGroup_GetGroupName(g), tagName)!=0) { DBG_INFO(GWEN_LOGDOMAIN, "Tag [%s] does not close [%s], ignoring", tagName, HtmlGroup_GetGroupName(g)); /*return GWEN_ERROR_BAD_DATA;*/ return 0; } /* always end this tag */ return 1; } int HtmlGroup_Generic_AddData(HTML_GROUP *g, const char *data) { assert(g); /* just ignore the data */ return 0; } int HtmlGroup_Generic_EndSubGroup(HTML_GROUP *g, HTML_GROUP *sg) { assert(g); /* just ignore the end of sub group */ return 0; } gwenhywfar-4.15.2beta/src/html/o_box.c0000644000175000017500000001250512416477066014566 00000000000000/*************************************************************************** begin : Sat Feb 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "o_box_l.h" #include "htmlctx_l.h" #include #define LINE_EXTRA_OFFSET_DIV 20 static int HtmlObject_Box_Layout(HTML_OBJECT *o) { HTML_OBJECT *c; HTML_OBJECT *cFirstInLine; GWEN_XML_CONTEXT *ctx; int w; //int h; int x=0; int y=0; int maxX=0; int lineHeight=0; int rv; //int resX; int resY; w=HtmlObject_GetWidth(o); //h=HtmlObject_GetHeight(o); ctx=HtmlObject_GetXmlCtx(o); //resX=HtmlCtx_GetResolutionX(ctx); resY=HtmlCtx_GetResolutionY(ctx); c=HtmlObject_Tree_GetFirstChild(o); cFirstInLine=c; while(c) { int th; if ((HtmlObject_GetFlags(c) & HTML_OBJECT_FLAGS_START_ON_NEWLINE) && x>0) { /* next line */ if (x>maxX) maxX=x; /* possibly justify */ if (w!=-1 && x>1; } if (diff) { HTML_OBJECT *ct; ct=cFirstInLine; while(ct) { HtmlObject_SetX(ct, HtmlObject_GetX(ct)+diff); if (ct==c) break; ct=HtmlObject_Tree_GetNext(ct); } } } x=0; y+=lineHeight+(resY/LINE_EXTRA_OFFSET_DIV); lineHeight=0; cFirstInLine=HtmlObject_Tree_GetNext(c); } HtmlObject_SetHeight(c, -1); if (w==-1) { HtmlObject_SetWidth(c, -1); rv=HtmlObject_Layout(c); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } else { int tw; tw=w-x; HtmlObject_SetWidth(c, tw); rv=HtmlObject_Layout(c); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } if (HtmlObject_GetWidth(c)>tw && x>0) { /* next line */ if (x>maxX) maxX=x; /* possibly justify */ if (x>1; } if (diff) { HTML_OBJECT *ct; ct=cFirstInLine; while(ct) { HtmlObject_SetX(ct, HtmlObject_GetX(ct)+diff); if (ct==c) break; ct=HtmlObject_Tree_GetNext(ct); } } } x=0; y+=lineHeight+(resY/LINE_EXTRA_OFFSET_DIV); lineHeight=0; cFirstInLine=HtmlObject_Tree_GetNext(c); } } HtmlObject_SetX(c, x); HtmlObject_SetY(c, y); th=HtmlObject_GetHeight(c); if (th>lineHeight) lineHeight=th; x+=HtmlObject_GetWidth(c); if ((HtmlObject_GetFlags(c) & HTML_OBJECT_FLAGS_END_WITH_NEWLINE)) { if (x>0) { /* next line */ if (x>maxX) maxX=x; /* possibly justify */ if (x>1; } if (diff) { HTML_OBJECT *ct; ct=cFirstInLine; while(ct) { HtmlObject_SetX(ct, HtmlObject_GetX(ct)+diff); if (ct==c) break; ct=HtmlObject_Tree_GetNext(ct); } } } } x=0; if (lineHeight==0) { HTML_PROPS *pr; HTML_FONT *fnt; pr=HtmlObject_GetProperties(o); assert(pr); fnt=HtmlProps_GetFont(pr); lineHeight=HtmlCtx_GetTextHeight(HtmlObject_GetXmlCtx(o), fnt, "ABCD"); } y+=lineHeight+(resY/LINE_EXTRA_OFFSET_DIV); lineHeight=0; cFirstInLine=HtmlObject_Tree_GetNext(c); } c=HtmlObject_Tree_GetNext(c); } if (x>0) { /* next line */ if (x>maxX) maxX=x; /* possibly justify */ if (x>1; } if (diff) { HTML_OBJECT *ct; ct=cFirstInLine; while(ct) { HtmlObject_SetX(ct, HtmlObject_GetX(ct)+diff); ct=HtmlObject_Tree_GetNext(ct); } } } x=0; y+=lineHeight+(resY/LINE_EXTRA_OFFSET_DIV); lineHeight=0; } /* finish layout */ HtmlObject_SetWidth(o, maxX+1); HtmlObject_SetHeight(o, y+1); return 0; } HTML_OBJECT *HtmlObject_Box_new(GWEN_XML_CONTEXT *ctx) { HTML_OBJECT *o; o=HtmlObject_new(ctx, HtmlObjectType_Box); HtmlObject_SetLayoutFn(o, HtmlObject_Box_Layout); return o; } gwenhywfar-4.15.2beta/src/html/o_gridentry.c0000644000175000017500000000445112364015347015776 00000000000000/*************************************************************************** begin : Mon Feb 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "o_gridentry_p.h" #include "o_box_l.h" GWEN_INHERIT(HTML_OBJECT, OBJECT_GRIDENTRY); HTML_OBJECT *HtmlObject_GridEntry_new(GWEN_XML_CONTEXT *ctx) { HTML_OBJECT *o; OBJECT_GRIDENTRY *xo; /* derived from box object */ o=HtmlObject_Box_new(ctx); /* extend box as grid entry */ HtmlObject_SetObjectType(o, HtmlObjectType_GridEntry); GWEN_NEW_OBJECT(OBJECT_GRIDENTRY, xo); GWEN_INHERIT_SETDATA(HTML_OBJECT, OBJECT_GRIDENTRY, o, xo, HtmlObject_GridEntry_FreeData); return o; } void GWENHYWFAR_CB HtmlObject_GridEntry_FreeData(void *bp, void *p) { OBJECT_GRIDENTRY *xo; xo=(OBJECT_GRIDENTRY*) p; GWEN_FREE_OBJECT(xo); } int HtmlObject_GridEntry_GetRow(const HTML_OBJECT *o) { OBJECT_GRIDENTRY *xo; assert(o); xo=GWEN_INHERIT_GETDATA(HTML_OBJECT, OBJECT_GRIDENTRY, o); assert(xo); return xo->row; } void HtmlObject_GridEntry_SetRow(HTML_OBJECT *o, int i) { OBJECT_GRIDENTRY *xo; assert(o); xo=GWEN_INHERIT_GETDATA(HTML_OBJECT, OBJECT_GRIDENTRY, o); assert(xo); xo->row=i; } int HtmlObject_GridEntry_GetColumn(const HTML_OBJECT *o) { OBJECT_GRIDENTRY *xo; assert(o); xo=GWEN_INHERIT_GETDATA(HTML_OBJECT, OBJECT_GRIDENTRY, o); assert(xo); return xo->column; } void HtmlObject_GridEntry_SetColumn(HTML_OBJECT *o, int i) { OBJECT_GRIDENTRY *xo; assert(o); xo=GWEN_INHERIT_GETDATA(HTML_OBJECT, OBJECT_GRIDENTRY, o); assert(xo); xo->column=i; } int HtmlObject_GridEntry_GetIsHeader(const HTML_OBJECT *o) { OBJECT_GRIDENTRY *xo; assert(o); xo=GWEN_INHERIT_GETDATA(HTML_OBJECT, OBJECT_GRIDENTRY, o); assert(xo); return xo->isHeader; } void HtmlObject_GridEntry_SetIsHeader(HTML_OBJECT *o, int i) { OBJECT_GRIDENTRY *xo; assert(o); xo=GWEN_INHERIT_GETDATA(HTML_OBJECT, OBJECT_GRIDENTRY, o); assert(xo); xo->isHeader=i; } gwenhywfar-4.15.2beta/src/html/g_box.c0000644000175000017500000003433512416477066014563 00000000000000/*************************************************************************** begin : Sat Feb 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "g_box_p.h" #include "g_generic_l.h" #include "g_table_l.h" #include "g_unorderedlist_l.h" #include "htmlctx_l.h" #include "o_box_l.h" #include "o_word_l.h" #include "o_grid_l.h" #include "o_image_be.h" #include #include #include HTML_GROUP *HtmlGroup_Box_new(const char *groupName, HTML_GROUP *parent, GWEN_XML_CONTEXT *ctx) { HTML_GROUP *g; /* create base group */ g=HtmlGroup_Generic_new(groupName, parent, ctx); assert(g); /* set virtual functions */ HtmlGroup_SetStartTagFn(g, HtmlGroup_Box_StartTag); HtmlGroup_SetAddDataFn(g, HtmlGroup_Box_AddData); return g; } int HtmlGroup_Box_StartTag(HTML_GROUP *g, const char *tagName) { HTML_GROUP *gNew=NULL; GWEN_XML_CONTEXT *ctx; GWEN_DB_NODE *dbAttribs; assert(g); ctx=HtmlGroup_GetXmlContext(g); dbAttribs=HtmlCtx_GetCurrentAttributes(ctx); if (strcasecmp(tagName, "b")==0) { /* Create new parser group with new properties but use the same object */ HTML_PROPS *pr; HTML_FONT *fnt; gNew=HtmlGroup_Box_new(tagName, g, ctx); pr=HtmlProps_dup(HtmlGroup_GetProperties(g)); fnt=HtmlProps_GetFont(pr); fnt=HtmlCtx_GetFont(ctx, HtmlFont_GetFontName(fnt), HtmlFont_GetFontSize(fnt), HtmlFont_GetFontFlags(fnt) | HTML_FONT_FLAGS_STRONG); if (fnt) { HtmlProps_SetFont(pr, fnt); //HtmlFont_free(fnt); } HtmlGroup_SetProperties(gNew, pr); HtmlProps_free(pr); HtmlGroup_SetObject(gNew, HtmlGroup_GetObject(g)); } else if (strcasecmp(tagName, "i")==0) { /* Create new parser group with new properties but use the same object */ HTML_PROPS *pr; HTML_FONT *fnt; gNew=HtmlGroup_Box_new(tagName, g, ctx); pr=HtmlProps_dup(HtmlGroup_GetProperties(g)); fnt=HtmlProps_GetFont(pr); fnt=HtmlCtx_GetFont(ctx, HtmlFont_GetFontName(fnt), HtmlFont_GetFontSize(fnt), HtmlFont_GetFontFlags(fnt) | HTML_FONT_FLAGS_ITALIC); if (fnt) { HtmlProps_SetFont(pr, fnt); //HtmlFont_free(fnt); } HtmlGroup_SetProperties(gNew, pr); HtmlProps_free(pr); HtmlGroup_SetObject(gNew, HtmlGroup_GetObject(g)); } else if (strcasecmp(tagName, "u")==0) { /* Create new parser group with new properties but use the same object */ HTML_PROPS *pr; HTML_FONT *fnt; gNew=HtmlGroup_Box_new(tagName, g, ctx); pr=HtmlProps_dup(HtmlGroup_GetProperties(g)); fnt=HtmlProps_GetFont(pr); fnt=HtmlCtx_GetFont(ctx, HtmlFont_GetFontName(fnt), HtmlFont_GetFontSize(fnt), HtmlFont_GetFontFlags(fnt) | HTML_FONT_FLAGS_UNDERLINE); if (fnt) { HtmlProps_SetFont(pr, fnt); //HtmlFont_free(fnt); } HtmlGroup_SetProperties(gNew, pr); HtmlProps_free(pr); HtmlGroup_SetObject(gNew, HtmlGroup_GetObject(g)); } else if (strcasecmp(tagName, "p")==0) { HTML_OBJECT *o; gNew=HtmlGroup_Box_new(tagName, g, ctx); HtmlGroup_SetProperties(gNew, HtmlGroup_GetProperties(g)); o=HtmlObject_Box_new(ctx); HtmlObject_AddFlags(o, HTML_OBJECT_FLAGS_START_ON_NEWLINE | HTML_OBJECT_FLAGS_END_WITH_NEWLINE); if (dbAttribs) { const char *s; s=GWEN_DB_GetCharValue(dbAttribs, "align", 0, "left"); if (s) { if (strcasecmp(s, "right")==0) HtmlObject_AddFlags(o, HTML_OBJECT_FLAGS_JUSTIFY_RIGHT); else if (strcasecmp(s, "center")==0) HtmlObject_AddFlags(o, HTML_OBJECT_FLAGS_JUSTIFY_HCENTER); } } HtmlObject_Tree_AddChild(HtmlGroup_GetObject(g), o); HtmlObject_SetProperties(o, HtmlGroup_GetProperties(g)); HtmlGroup_SetObject(gNew, o); } else if (strcasecmp(tagName, "right")==0) { HTML_OBJECT *o; gNew=HtmlGroup_Box_new(tagName, g, ctx); HtmlGroup_SetProperties(gNew, HtmlGroup_GetProperties(g)); o=HtmlObject_Box_new(ctx); HtmlObject_AddFlags(o, HTML_OBJECT_FLAGS_START_ON_NEWLINE | HTML_OBJECT_FLAGS_END_WITH_NEWLINE | HTML_OBJECT_FLAGS_JUSTIFY_RIGHT); HtmlObject_Tree_AddChild(HtmlGroup_GetObject(g), o); HtmlObject_SetProperties(o, HtmlGroup_GetProperties(g)); HtmlGroup_SetObject(gNew, o); } else if (strcasecmp(tagName, "br")==0) { HTML_OBJECT *o; /* just create and add a control object */ o=HtmlObject_new(ctx, HtmlObjectType_Control); HtmlObject_AddFlags(o, HTML_OBJECT_FLAGS_END_WITH_NEWLINE); HtmlObject_Tree_AddChild(HtmlGroup_GetObject(g), o); HtmlObject_SetProperties(o, HtmlGroup_GetProperties(g)); } else if (strcasecmp(tagName, "img")==0) { HTML_OBJECT *o; GWEN_DB_NODE *dbAttribs; o=HtmlObject_Image_new(ctx); HtmlObject_AddFlags(o, HTML_OBJECT_FLAGS_START_ON_NEWLINE | HTML_OBJECT_FLAGS_END_WITH_NEWLINE); dbAttribs=HtmlCtx_GetCurrentAttributes(ctx); if (dbAttribs) { const char *s; int w; int h; w=GWEN_DB_GetIntValue(dbAttribs, "width", 0, -1); h=GWEN_DB_GetIntValue(dbAttribs, "height", 0, -1); /* preset */ if (w!=-1) HtmlObject_Image_SetScaledWidth(o, w); if (h!=-1) HtmlObject_Image_SetScaledHeight(o, w); s=GWEN_DB_GetCharValue(dbAttribs, "src", 0, NULL); if (s && *s) { HTML_IMAGE *img; img=HtmlCtx_GetImage(ctx, s); if (img) { HtmlObject_Image_SetImage(o, img); /* adjust scaled width and height if not set by attributes */ if (w==-1) HtmlObject_Image_SetScaledWidth(o, HtmlImage_GetWidth(img)); if (h==-1) HtmlObject_Image_SetScaledHeight(o, HtmlImage_GetHeight(img)); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Image [%s] not found", s); } } else { DBG_ERROR(GWEN_LOGDOMAIN, "Missing image name in IMG element"); } } HtmlObject_Tree_AddChild(HtmlGroup_GetObject(g), o); HtmlObject_SetProperties(o, HtmlGroup_GetProperties(g)); } else if (strcasecmp(tagName, "table")==0) { HTML_OBJECT *o; gNew=HtmlGroup_Table_new(tagName, g, ctx); HtmlGroup_SetProperties(gNew, HtmlGroup_GetProperties(g)); o=HtmlObject_Grid_new(ctx); HtmlObject_SetProperties(o, HtmlGroup_GetProperties(g)); HtmlGroup_SetObject(gNew, o); HtmlObject_Tree_AddChild(HtmlGroup_GetObject(g), o); } else if (strcasecmp(tagName, "ul")==0) { HTML_OBJECT *o; gNew=HtmlGroup_UnorderedList_new(tagName, g, ctx); HtmlGroup_SetProperties(gNew, HtmlGroup_GetProperties(g)); o=HtmlObject_Grid_new(ctx); HtmlObject_Grid_SetColumns(o, 2); HtmlObject_SetProperties(o, HtmlGroup_GetProperties(g)); HtmlGroup_SetObject(gNew, o); HtmlObject_Tree_AddChild(HtmlGroup_GetObject(g), o); } else if (strcasecmp(tagName, "font")==0) { /* Create new parser group with new properties but use the same object */ HTML_PROPS *pr; GWEN_DB_NODE *dbAttribs; gNew=HtmlGroup_Box_new(tagName, g, ctx); pr=HtmlProps_dup(HtmlGroup_GetProperties(g)); dbAttribs=HtmlCtx_GetCurrentAttributes(ctx); if (dbAttribs) { HTML_FONT *fnt; const char *s; const char *fontName; int fontSize; uint32_t fontFlags; fnt=HtmlProps_GetFont(pr); fontName=GWEN_DB_GetCharValue(dbAttribs, "face", 0, NULL); if (fontName==NULL) fontName=HtmlFont_GetFontName(fnt); fontFlags=HtmlFont_GetFontFlags(fnt); fontSize=HtmlFont_GetFontSize(fnt); s=GWEN_DB_GetCharValue(dbAttribs, "size", 0, NULL); if (s && *s) { if (*s=='+') { int i; sscanf(s, "%d", &i); fontSize+=i*4; } else if (*s=='-') { int i; sscanf(s, "%d", &i); fontSize+=i*4; } else sscanf(s, "%d", &fontSize); } s=GWEN_DB_GetCharValue(dbAttribs, "color", 0, NULL); if (s && *s) { uint32_t color; color=HtmlCtx_GetColorFromName(ctx, s); HtmlProps_SetForegroundColor(pr, color); } fnt=HtmlCtx_GetFont(ctx, fontName, fontSize, fontFlags); if (fnt) { HtmlProps_SetFont(pr, fnt); //HtmlFont_free(fnt); } } HtmlGroup_SetProperties(gNew, pr); HtmlProps_free(pr); HtmlGroup_SetObject(gNew, HtmlGroup_GetObject(g)); } else if (strcasecmp(tagName, "h1")==0) { /* Create new parser group with new properties but use the same object */ HTML_PROPS *pr; HTML_FONT *fnt; HTML_OBJECT *o; gNew=HtmlGroup_Box_new(tagName, g, ctx); pr=HtmlProps_dup(HtmlGroup_GetProperties(g)); fnt=HtmlProps_GetFont(pr); fnt=HtmlCtx_GetFont(ctx, HtmlFont_GetFontName(fnt), HtmlFont_GetFontSize(fnt)*1.8, HtmlFont_GetFontFlags(fnt) | HTML_FONT_FLAGS_STRONG); if (fnt) { HtmlProps_SetFont(pr, fnt); //HtmlFont_free(fnt); } HtmlGroup_SetProperties(gNew, pr); o=HtmlObject_Box_new(ctx); HtmlObject_Tree_AddChild(HtmlGroup_GetObject(g), o); HtmlObject_AddFlags(o, HTML_OBJECT_FLAGS_START_ON_NEWLINE | HTML_OBJECT_FLAGS_END_WITH_NEWLINE); HtmlObject_SetProperties(o, pr); HtmlGroup_SetObject(gNew, o); HtmlProps_free(pr); } else if (strcasecmp(tagName, "h2")==0) { /* Create new parser group with new properties but use the same object */ HTML_PROPS *pr; HTML_FONT *fnt; HTML_OBJECT *o; gNew=HtmlGroup_Box_new(tagName, g, ctx); pr=HtmlProps_dup(HtmlGroup_GetProperties(g)); fnt=HtmlProps_GetFont(pr); fnt=HtmlCtx_GetFont(ctx, HtmlFont_GetFontName(fnt), HtmlFont_GetFontSize(fnt)*1.5, HtmlFont_GetFontFlags(fnt) | HTML_FONT_FLAGS_STRONG); if (fnt) { HtmlProps_SetFont(pr, fnt); //HtmlFont_free(fnt); } HtmlGroup_SetProperties(gNew, pr); o=HtmlObject_Box_new(ctx); HtmlObject_Tree_AddChild(HtmlGroup_GetObject(g), o); HtmlObject_AddFlags(o, HTML_OBJECT_FLAGS_START_ON_NEWLINE | HTML_OBJECT_FLAGS_END_WITH_NEWLINE); HtmlObject_SetProperties(o, pr); HtmlGroup_SetObject(gNew, o); HtmlProps_free(pr); } else if (strcasecmp(tagName, "h3")==0) { /* Create new parser group with new properties but use the same object */ HTML_PROPS *pr; HTML_FONT *fnt; HTML_OBJECT *o; gNew=HtmlGroup_Box_new(tagName, g, ctx); pr=HtmlProps_dup(HtmlGroup_GetProperties(g)); fnt=HtmlProps_GetFont(pr); fnt=HtmlCtx_GetFont(ctx, HtmlFont_GetFontName(fnt), HtmlFont_GetFontSize(fnt), HtmlFont_GetFontFlags(fnt) | HTML_FONT_FLAGS_STRONG); if (fnt) { HtmlProps_SetFont(pr, fnt); //HtmlFont_free(fnt); } HtmlGroup_SetProperties(gNew, pr); o=HtmlObject_Box_new(ctx); HtmlObject_Tree_AddChild(HtmlGroup_GetObject(g), o); HtmlObject_AddFlags(o, HTML_OBJECT_FLAGS_START_ON_NEWLINE | HTML_OBJECT_FLAGS_END_WITH_NEWLINE); HtmlObject_SetProperties(o, pr); HtmlGroup_SetObject(gNew, o); HtmlProps_free(pr); } else if (strcasecmp(tagName, "h4")==0) { /* Create new parser group with new properties but use the same object */ HTML_PROPS *pr; HTML_FONT *fnt; HTML_OBJECT *o; gNew=HtmlGroup_Box_new(tagName, g, ctx); pr=HtmlProps_dup(HtmlGroup_GetProperties(g)); fnt=HtmlProps_GetFont(pr); fnt=HtmlCtx_GetFont(ctx, HtmlFont_GetFontName(fnt), HtmlFont_GetFontSize(fnt), HtmlFont_GetFontFlags(fnt) | HTML_FONT_FLAGS_ITALIC); if (fnt) { HtmlProps_SetFont(pr, fnt); //HtmlFont_free(fnt); } HtmlGroup_SetProperties(gNew, pr); o=HtmlObject_Box_new(ctx); HtmlObject_Tree_AddChild(HtmlGroup_GetObject(g), o); HtmlObject_AddFlags(o, HTML_OBJECT_FLAGS_START_ON_NEWLINE | HTML_OBJECT_FLAGS_END_WITH_NEWLINE); HtmlObject_SetProperties(o, pr); HtmlGroup_SetObject(gNew, o); HtmlProps_free(pr); } else if (strcasecmp(tagName, "html")==0 || strcasecmp(tagName, "body")==0) { } else { DBG_WARN(GWEN_LOGDOMAIN, "Unknown group [%s], handling as normal box", tagName); gNew=HtmlGroup_Box_new(tagName, g, ctx); HtmlGroup_SetProperties(gNew, HtmlGroup_GetProperties(g)); HtmlGroup_SetObject(gNew, HtmlGroup_GetObject(g)); } if (gNew) { HtmlCtx_SetCurrentGroup(ctx, gNew); GWEN_XmlCtx_IncDepth(ctx); } return 0; } int HtmlGroup_Box_AddData(HTML_GROUP *g, const char *data) { GWEN_XML_CONTEXT *ctx; GWEN_BUFFER *buf; int rv; uint8_t *s; HTML_OBJECT *o; assert(g); ctx=HtmlGroup_GetXmlContext(g); if (data && *data) { buf=GWEN_Buffer_new(0, strlen(data), 0, 1); rv=HtmlCtx_SanitizeData(ctx, data, buf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } if (GWEN_Buffer_GetUsedBytes(buf)) { s=(uint8_t*)GWEN_Buffer_GetStart(buf); while(*s) { uint8_t *t; uint8_t c; /* find begin of word */ while(*s && isspace(*s)) s++; /* find end of word */ t=s; while(*t && !isspace(*t)) t++; c=*t; *t=0; o=HtmlObject_Word_new(ctx, (const char*) s); HtmlObject_SetProperties(o, HtmlGroup_GetProperties(g)); HtmlObject_Tree_AddChild(HtmlGroup_GetObject(g), o); *t=c; s=t; } } GWEN_Buffer_free(buf); } return 0; } gwenhywfar-4.15.2beta/src/html/o_box_l.h0000644000175000017500000000107212364015347015073 00000000000000/*************************************************************************** begin : Sat Feb 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTMLOBJECT_BOX_L_H #define HTMLOBJECT_BOX_L_H #include "htmlobject_be.h" HTML_OBJECT *HtmlObject_Box_new(GWEN_XML_CONTEXT *ctx); #endif gwenhywfar-4.15.2beta/src/html/g_tablerow_p.h0000644000175000017500000000140012364015347016111 00000000000000/*************************************************************************** begin : Mon Feb 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTML_G_TABLEROW_P_H #define HTML_G_TABLEROW_P_H #include "g_tablerow_l.h" typedef struct GROUP_TABLEROW GROUP_TABLEROW; struct GROUP_TABLEROW { int columns; int row; }; static void GWENHYWFAR_CB HtmlGroup_TableRow_FreeData(void *bp, void *p); static int HtmlGroup_TableRow_StartTag(HTML_GROUP *g, const char *tagName); #endif gwenhywfar-4.15.2beta/src/html/o_gridentry_l.h0000644000175000017500000000166212364015347016317 00000000000000/*************************************************************************** begin : Mon Feb 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTMLOBJECT_GRIDENTRY_L_H #define HTMLOBJECT_GRIDENTRY_L_H #include "htmlobject_be.h" HTML_OBJECT *HtmlObject_GridEntry_new(GWEN_XML_CONTEXT *ctx); int HtmlObject_GridEntry_GetRow(const HTML_OBJECT *o); void HtmlObject_GridEntry_SetRow(HTML_OBJECT *o, int i); int HtmlObject_GridEntry_GetColumn(const HTML_OBJECT *o); void HtmlObject_GridEntry_SetColumn(HTML_OBJECT *o, int i); int HtmlObject_GridEntry_GetIsHeader(const HTML_OBJECT *o); void HtmlObject_GridEntry_SetIsHeader(HTML_OBJECT *o, int i); #endif gwenhywfar-4.15.2beta/src/html/htmlfont_be.h0000644000175000017500000000321112416477066015760 00000000000000/*************************************************************************** begin : Sat Feb 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTMLFONT_BE_H #define HTMLFONT_BE_H #include #include #ifdef __cplusplus extern "C" { #endif typedef struct HTML_FONT HTML_FONT; GWEN_INHERIT_FUNCTION_LIB_DEFS(HTML_FONT, GWENHYWFAR_API) GWEN_LIST_FUNCTION_LIB_DEFS(HTML_FONT, HtmlFont, GWENHYWFAR_API) #define HTML_FONT_FLAGS_NONE 0x00000000 #define HTML_FONT_FLAGS_STRONG 0x00000001 #define HTML_FONT_FLAGS_ITALIC 0x00000002 #define HTML_FONT_FLAGS_UNDERLINE 0x00000004 GWENHYWFAR_API HTML_FONT *HtmlFont_new(void); GWENHYWFAR_API void HtmlFont_free(HTML_FONT *fnt); GWENHYWFAR_API void HtmlFont_Attach(HTML_FONT *fnt); GWENHYWFAR_API const char *HtmlFont_GetFontName(const HTML_FONT *fnt); GWENHYWFAR_API void HtmlFont_SetFontName(HTML_FONT *fnt, const char *s); GWENHYWFAR_API int HtmlFont_GetFontSize(const HTML_FONT *fnt); GWENHYWFAR_API void HtmlFont_SetFontSize(HTML_FONT *fnt, int i); GWENHYWFAR_API uint32_t HtmlFont_GetFontFlags(const HTML_FONT *fnt); GWENHYWFAR_API void HtmlFont_SetFontFlags(HTML_FONT *fnt, uint32_t i); GWENHYWFAR_API void HtmlFont_AddFontFlags(HTML_FONT *fnt, uint32_t i); GWENHYWFAR_API void HtmlFont_SubFontFlags(HTML_FONT *fnt, uint32_t i); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/html/g_unorderedlist_p.h0000644000175000017500000000143112364015347017161 00000000000000/*************************************************************************** begin : Mon Feb 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTML_G_UNORDEREDLIST_P_H #define HTML_G_UNORDEREDLIST_P_H #include "g_unorderedlist_l.h" typedef struct GROUP_UNORDEREDLIST GROUP_UNORDEREDLIST; struct GROUP_UNORDEREDLIST { int row; }; static void GWENHYWFAR_CB HtmlGroup_UnorderedList_FreeData(void *bp, void *p); static int HtmlGroup_UnorderedList_StartTag(HTML_GROUP *g, const char *tagName); #endif gwenhywfar-4.15.2beta/src/html/htmlimage.c0000644000175000017500000000372512364015347015423 00000000000000/*************************************************************************** begin : Fri Jul 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "htmlimage_p.h" GWEN_INHERIT_FUNCTIONS(HTML_IMAGE) GWEN_LIST_FUNCTIONS(HTML_IMAGE, HtmlImage) HTML_IMAGE *HtmlImage_new(void) { HTML_IMAGE *img; GWEN_NEW_OBJECT(HTML_IMAGE, img); img->refCount=1; GWEN_INHERIT_INIT(HTML_IMAGE, img); GWEN_LIST_INIT(HTML_IMAGE, img); return img; } void HtmlImage_free(HTML_IMAGE *img) { if (img) { assert(img->refCount); if (img->refCount>1) img->refCount--; else { GWEN_LIST_FINI(HTML_IMAGE, img); GWEN_INHERIT_FINI(HTML_IMAGE, img); free(img->imageName); img->refCount=0; GWEN_FREE_OBJECT(img); } } } void HtmlImage_Attach(HTML_IMAGE *img) { assert(img); assert(img->refCount); img->refCount++; } const char *HtmlImage_GetImageName(const HTML_IMAGE *img) { assert(img); assert(img->refCount); return img->imageName; } void HtmlImage_SetImageName(HTML_IMAGE *img, const char *s) { assert(img); assert(img->refCount); free(img->imageName); if (s) img->imageName=strdup(s); else img->imageName=NULL; } int HtmlImage_GetWidth(const HTML_IMAGE *img) { assert(img); assert(img->refCount); return img->width; } void HtmlImage_SetWidth(HTML_IMAGE *img, int i) { assert(img); assert(img->refCount); img->width=i; } int HtmlImage_GetHeight(const HTML_IMAGE *img) { assert(img); assert(img->refCount); return img->height; } void HtmlImage_SetHeight(HTML_IMAGE *img, int i) { assert(img); assert(img->refCount); img->height=i; } gwenhywfar-4.15.2beta/src/html/htmlctx_be.h0000644000175000017500000000640012416477066015613 00000000000000/*************************************************************************** begin : Mon Feb 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef HTMLXMLCTX_BE_H #define HTMLXMLCTX_BE_H #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif typedef int (*HTMLCTX_GET_TEXT_WIDTH_FN)(GWEN_XML_CONTEXT *ctx, HTML_FONT *fnt, const char *s); typedef int (*HTMLCTX_GET_TEXT_HEIGHT_FN)(GWEN_XML_CONTEXT *ctx, HTML_FONT *fnt, const char *s); typedef uint32_t (*HTMLCTX_GET_COLOR_FROM_NAME_FN)(const GWEN_XML_CONTEXT *ctx, const char *s); typedef HTML_FONT* (*HTMLCTX_GET_FONT_FN)(GWEN_XML_CONTEXT *ctx, const char *fontName, int fontSize, uint32_t fontFlags); typedef HTML_IMAGE* (*HTMLCTX_GET_IMAGE_FN)(GWEN_XML_CONTEXT *ctx, const char *imageName); GWENHYWFAR_API GWEN_XML_CONTEXT *HtmlCtx_new(uint32_t flags); GWENHYWFAR_API void HtmlCtx_SetText(GWEN_XML_CONTEXT *ctx, const char *s); GWENHYWFAR_API int HtmlCtx_Layout(GWEN_XML_CONTEXT *ctx, int width, int height); GWENHYWFAR_API HTML_OBJECT *HtmlCtx_GetRootObject(const GWEN_XML_CONTEXT *ctx); GWENHYWFAR_API HTML_FONT *HtmlCtx_GetFont(GWEN_XML_CONTEXT *ctx, const char *fontName, int fontSize, uint32_t fontFlags); /** * The implementation must set width and height in the image returned. */ GWENHYWFAR_API HTML_IMAGE *HtmlCtx_GetImage(GWEN_XML_CONTEXT *ctx, const char *imageName); GWENHYWFAR_API HTML_PROPS *HtmlCtx_GetStandardProps(const GWEN_XML_CONTEXT *ctx); GWENHYWFAR_API void HtmlCtx_SetStandardProps(GWEN_XML_CONTEXT *ctx, HTML_PROPS *pr); GWENHYWFAR_API int HtmlCtx_GetWidth(const GWEN_XML_CONTEXT *ctx); GWENHYWFAR_API int HtmlCtx_GetHeight(const GWEN_XML_CONTEXT *ctx); GWENHYWFAR_API int HtmlCtx_GetResolutionX(const GWEN_XML_CONTEXT *ctx); GWENHYWFAR_API void HtmlCtx_SetResolutionX(GWEN_XML_CONTEXT *ctx, int i); GWENHYWFAR_API int HtmlCtx_GetResolutionY(const GWEN_XML_CONTEXT *ctx); GWENHYWFAR_API void HtmlCtx_SetResolutionY(GWEN_XML_CONTEXT *ctx, int i); GWENHYWFAR_API GWEN_STRINGLIST *HtmlCtx_GetMediaPaths(const GWEN_XML_CONTEXT *ctx); GWENHYWFAR_API void HtmlCtx_AddMediaPath(GWEN_XML_CONTEXT *ctx, const char *s); GWENHYWFAR_API HTMLCTX_GET_TEXT_WIDTH_FN HtmlCtx_SetGetTextWidthFn(GWEN_XML_CONTEXT *ctx, HTMLCTX_GET_TEXT_WIDTH_FN fn); GWENHYWFAR_API HTMLCTX_GET_TEXT_HEIGHT_FN HtmlCtx_SetGetTextHeightFn(GWEN_XML_CONTEXT *ctx, HTMLCTX_GET_TEXT_HEIGHT_FN fn); GWENHYWFAR_API HTMLCTX_GET_COLOR_FROM_NAME_FN HtmlCtx_SetGetColorFromNameFn(GWEN_XML_CONTEXT *ctx, HTMLCTX_GET_COLOR_FROM_NAME_FN fn); GWENHYWFAR_API HTMLCTX_GET_FONT_FN HtmlCtx_SetGetFontFn(GWEN_XML_CONTEXT *ctx, HTMLCTX_GET_FONT_FN fn); GWENHYWFAR_API HTMLCTX_GET_IMAGE_FN HtmlCtx_SetGetImageFn(GWEN_XML_CONTEXT *ctx, HTMLCTX_GET_IMAGE_FN fn); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/gui/0000755000175000017500000000000012643267236013207 500000000000000gwenhywfar-4.15.2beta/src/gui/cgui.h0000644000175000017500000001176512416477066014243 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_GUI_CGUI_H #define GWEN_GUI_CGUI_H #include #ifdef __cplusplus extern "C" { #endif /** Force storing entered passwords in permanent password storage */ #define GWEN_CGUI_FLAGS_PERMPASSWORDS 0x00010000 /** @defgroup MOD_GUI_CGUI GUI Implementation for the Console * @ingroup MOD_GUI * * This is an implementation of GWEN_GUI for the console. It supports * interactive and non-interactive mode, provides a cache for passwords/pins * and TLS certificates. It converts UTF8 messages into other character sets * if requested (e.g. for consoles which do not support UTF8). */ /*@{*/ /** Constructor * */ GWENHYWFAR_API GWEN_GUI *GWEN_Gui_CGui_new(void); /** @name Character Set * * All messages and texts can be converted from UTF8 automatically. * This needs the name of the destination character set. * See output of iconv --list for a list of supported * character sets. */ /*@{*/ GWENHYWFAR_API DEPRECATED const char *GWEN_Gui_CGui_GetCharSet(const GWEN_GUI *gui); GWENHYWFAR_API DEPRECATED void GWEN_Gui_CGui_SetCharSet(GWEN_GUI *gui, const char *s); /*@}*/ /** @name Interactive/Non-interactive Mode * * This implementation can be used in interactive or non-interactive mode. * In non-interactive mode all input requests which can not be asked * automatically will return an error. * However, most questions concern input of pins and password, and for those * the password cache can be used. Another frequent source for input requests * is the acknowledging of TLS certificates which can also be handled * automatically by using the certificate cache (see below). * * Also, in non-interactive mode all calls to GWEN_GUI_MessageBox will be * handled different. If the severity of a message is * GWEN_GUI_MSG_FLAGS_SEVERITY_DANGEROUS or higher an error is returned. * Otherwise the default result (as indicated by the arguments of * @ref GWEN_GUI_MessageBox) is returned instead. * * These settings together allow for a non-interactive use. */ /*@{*/ GWENHYWFAR_API DEPRECATED int GWEN_Gui_CGui_GetIsNonInteractive(const GWEN_GUI *gui); GWENHYWFAR_API DEPRECATED void GWEN_Gui_CGui_SetIsNonInteractive(GWEN_GUI *gui, int i); /*@}*/ /** @name Password Cache * * This implementation provides a password cache. This will be * consulted upon @ref GWEN_Gui_GetPassword. The implementation of * @ref GWEN_Gui_SetPasswordStatus also accesses this password cache. * * Normally this cache is filled from password files (like those * specified via option -P of aqbanking-cli). */ /**@{*/ /** * Set the password DB. Takes over the given DB. * @param gui GUI object * @param dbPasswords password cache * @param persistent if !=0 then the passwords come from a password file * and a request to clear the password cache will be ignored. */ GWENHYWFAR_API DEPRECATED void GWEN_Gui_CGui_SetPasswordDb(GWEN_GUI *gui, GWEN_DB_NODE *dbPasswords, int persistent); /** * Returns a pointer to the internally used password cache. The GUI * object remains the owner of the object returned (if any). */ GWENHYWFAR_API DEPRECATED GWEN_DB_NODE *GWEN_Gui_CGui_GetPasswordDb(const GWEN_GUI *gui); /*@}*/ /** @name TLS Certificate Cache * * This implementation provides a certificate cache which takes * into account the fingerprint of a certificate offered and the * status text. This combination is hashed and the resulting hash is * the key into the internal cert db. * * Most AqBanking applications nowadays use the shared application data * "certs" as returned by AB_Banking_GetSharedData() to read and write * the certificate DB. */ /**@{*/ /** * Set the certificate DB. Takes over the given DB. */ GWENHYWFAR_API void GWEN_Gui_CGui_SetCertDb(GWEN_GUI *gui, GWEN_DB_NODE *dbCerts); /** * Returns a pointer to the internal certificate cache. The GUI * object remains the owner of the object returned (if any). */ GWENHYWFAR_API GWEN_DB_NODE *GWEN_Gui_CGui_GetCertDb(const GWEN_GUI *gui); /** * In non-interactive mode only known certificates are accepted. * If the parameter i unequals zero new certs are also accepted if they * are valid (which means signed by a known and trusted authority, not expired * etc). * Invalid certificates are always rejected in non-interactive mode. */ GWENHYWFAR_API DEPRECATED void GWEN_Gui_CGui_SetAcceptAllValidCerts(GWEN_GUI *gui, int i); /** * See @ref GWEN_Gui_CGui_SetAcceptAllValidCerts */ GWENHYWFAR_API DEPRECATED int GWEN_Gui_CGui_GetAcceptAllValidCerts(const GWEN_GUI *gui); /*@}*/ /*@}*/ /* defgroup */ #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/gui/dlg_progress_p.h0000644000175000017500000000204512416477066016314 00000000000000/*************************************************************************** begin : Tue Feb 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_GUI_DLG_PROGRESS_P_H #define GWEN_GUI_DLG_PROGRESS_P_H #include "dlg_progress_l.h" struct GWEN_DLGPROGRESS { GWEN_PROGRESS_DATA *firstProgress; GWEN_PROGRESS_DATA *secondProgress; int wasInit; int allowClose; int stayOpen; int showLog; GWEN_BUFFER *logBufferTxt; GWEN_BUFFER *logBufferHtml; int withLogWidth; int withLogHeight; }; typedef struct GWEN_DLGPROGRESS GWEN_DLGPROGRESS; static int GWENHYWFAR_CB GWEN_DlgProgress_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static void GWENHYWFAR_CB GWEN_DlgProgress_FreeData(void *bp, void *p); #endif gwenhywfar-4.15.2beta/src/gui/cprogress_p.h0000644000175000017500000000167612364015347015632 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: progress_p.h 409 2005-08-05 18:13:06Z aquamaniac $ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_GUI_CONSOLE_PROGRESS_H #define GWEN_GUI_CONSOLE_PROGRESS_H #define GWEN_GUI_CPROGRESS_CHAR_ABORT 27 #include "cprogress_l.h" #include struct GWEN_GUI_CPROGRESS { GWEN_LIST_ELEMENT(GWEN_GUI_CPROGRESS) GWEN_GUI *gui; uint32_t id; uint32_t flags; char *title; char *text; uint64_t total; uint64_t current; GWEN_BUFFER *logBuf; int aborted; int shown; time_t startTime; }; #endif gwenhywfar-4.15.2beta/src/gui/passwdstore.c0000644000175000017500000005014012416477066015653 00000000000000/*************************************************************************** begin : Sat Dec 16 2012 copyright : (C) 2012 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "passwdstore_p.h" #include "i18n_l.h" #include #include #include #include #include #include #include #include #include GWEN_PASSWD_STORE *GWEN_PasswordStore_new(const char *fname) { GWEN_PASSWD_STORE *sto; GWEN_NEW_OBJECT(GWEN_PASSWD_STORE, sto); if (fname) sto->fileName=strdup(fname); sto->dbPasswords=NULL; return sto; } void GWEN_PasswordStore_free(GWEN_PASSWD_STORE *sto) { if (sto) { memset(sto->pw, 0, sizeof(sto->pw)); if (sto->dbPasswords) { GWEN_DB_ModifyBranchFlagsDown(sto->dbPasswords, GWEN_DB_NODE_FLAGS_SAFE, GWEN_DB_NODE_FLAGS_SAFE); GWEN_DB_Group_free(sto->dbPasswords); sto->dbPasswords=NULL; } free(sto->fileName); GWEN_FREE_OBJECT(sto); } } void GWEN_PasswordStore_ClearStoragePasswd(GWEN_PASSWD_STORE *sto) { assert(sto); memset(sto->pw, 0, GWEN_PASSWDSTORE_PWLEN); if (sto->dbPasswords) { GWEN_DB_ModifyBranchFlagsDown(sto->dbPasswords, GWEN_DB_NODE_FLAGS_SAFE, GWEN_DB_NODE_FLAGS_SAFE); GWEN_DB_Group_free(sto->dbPasswords); sto->dbPasswords=NULL; } } static int readFile(const char *fname, GWEN_BUFFER *dbuf) { FILE *f; f=fopen(fname, "rb"); if (f) { while(!feof(f)) { uint32_t l; ssize_t s; char *p; GWEN_Buffer_AllocRoom(dbuf, 1024); l=GWEN_Buffer_GetMaxUnsegmentedWrite(dbuf); p=GWEN_Buffer_GetPosPointer(dbuf); s=fread(p, 1, l, f); if (s==0) break; if (s==(ssize_t)-1) { DBG_ERROR(GWEN_LOGDOMAIN, "fread(%s): %s", fname, strerror(errno)); fclose(f); return GWEN_ERROR_IO; } GWEN_Buffer_IncrementPos(dbuf, s); GWEN_Buffer_AdjustUsedBytes(dbuf); } fclose(f); return 0; } else { if (errno==ENOENT) { DBG_INFO(GWEN_LOGDOMAIN, "File [%s] does not exist", fname); return GWEN_ERROR_NOT_FOUND; } else { DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s): %s", fname, strerror(errno)); return GWEN_ERROR_IO; } } } static int writeToFile(FILE *f, const char *p, int len) { while(len>0) { ssize_t l; ssize_t s; l=1024; if (l>len) l=len; s=fwrite(p, 1, l, f); if (s==(ssize_t)-1 || s==0) { DBG_ERROR(GWEN_LOGDOMAIN, "fwrite: %s", strerror(errno)); return GWEN_ERROR_IO; } p+=s; len-=s; } return 0; } static int writeFile(const char *fname, const char *p, int len) { FILE *f; f=fopen(fname, "wb"); if (f) { int rv; rv=writeToFile(f, p, len); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "here (%d)", rv); fclose(f); return rv; } if (fclose(f)) { DBG_ERROR(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } else { DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s): %s", fname, strerror(errno)); return GWEN_ERROR_IO; } return 0; } static int GWEN_PasswordStore_Digest(const uint8_t *t, uint32_t size, GWEN_BUFFER *buf) { GWEN_MDIGEST *md; int rv; /* hash token and pin */ md=GWEN_MDigest_Rmd160_new(); rv=GWEN_MDigest_Begin(md); if (rv==0) rv=GWEN_MDigest_Update(md, (const uint8_t*)t, size); if (rv==0) rv=GWEN_MDigest_End(md); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Hash error (%d)", rv); GWEN_MDigest_free(md); return rv; } GWEN_Buffer_AppendBytes(buf, (const char*)GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md)); GWEN_MDigest_free(md); return 0; } static int GWEN_PasswordStore_CheckDigest(const uint8_t *t, uint32_t size, const uint8_t *h) { GWEN_MDIGEST *md; int rv; /* hash token and pin */ md=GWEN_MDigest_Rmd160_new(); rv=GWEN_MDigest_Begin(md); if (rv==0) rv=GWEN_MDigest_Update(md, (const uint8_t*)t, size); if (rv==0) rv=GWEN_MDigest_End(md); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Hash error (%d)", rv); GWEN_MDigest_free(md); return rv; } if (memcmp(h, GWEN_MDigest_GetDigestPtr(md), 20)) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad hash"); GWEN_MDigest_free(md); return GWEN_ERROR_BAD_DATA; } GWEN_MDigest_free(md); return 0; } static void GWEN_PasswordStore_SafeFreeDb(GWEN_PASSWD_STORE *sto) { if (sto->dbPasswords) { GWEN_DB_ModifyBranchFlagsDown(sto->dbPasswords, GWEN_DB_NODE_FLAGS_SAFE, GWEN_DB_NODE_FLAGS_SAFE); GWEN_DB_Group_free(sto->dbPasswords); sto->dbPasswords=NULL; } } static int GWEN_PasswordStore_ReadDecryptFile(GWEN_PASSWD_STORE *sto, GWEN_BUFFER *secbuf) { int rv; GWEN_BUFFER *sbuf; sbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=readFile(sto->fileName, sbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(sbuf); return rv; } if (GWEN_Buffer_GetUsedBytes(sbuf)<1) { DBG_INFO(GWEN_LOGDOMAIN, "Empty file"); GWEN_Buffer_free(sbuf); return GWEN_ERROR_NO_DATA; } for (;;) { GWEN_BUFFER *tbuf; uint32_t pos1; uint32_t pos2; uint32_t len; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, "PASSWORD_STORE_"); GWEN_Text_UnescapeToBufferTolerant(sto->fileName, tbuf); if (sto->pw[0]==0) { rv=GWEN_Gui_InputBox(GWEN_GUI_INPUT_FLAGS_DIRECT, I18N("Enter Password"), I18N("Please enter the password for the password store.\n" "" "Please enter the password for the password store.
" ""), sto->pw, 4, sizeof(sto->pw)-1, 0); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(sbuf); return rv; } } pos1=GWEN_Buffer_GetPos(secbuf); rv=GWEN_SmallTresor_Decrypt((const uint8_t*) GWEN_Buffer_GetStart(sbuf), GWEN_Buffer_GetUsedBytes(sbuf), sto->pw, secbuf, GWEN_PASSWDSTORE_PW_ITERATIONS, GWEN_PASSWDSTORE_CRYPT_ITERATIONS); GWEN_Buffer_free(tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); /* error, reset password */ memset(sto->pw, 0, sizeof(sto->pw)); } else { /* check and remove hash */ pos2=GWEN_Buffer_GetPos(secbuf); len=pos2-pos1; if (len>=20) { const uint8_t *p1; const uint8_t *p2; p1=(const uint8_t*)GWEN_Buffer_GetStart(secbuf)+pos1; /* start of decrypted data */ p2=(const uint8_t*)GWEN_Buffer_GetStart(secbuf)+(pos2-20); /* start of hash */ rv=GWEN_PasswordStore_CheckDigest(p1, len-20, p2); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(sbuf); return rv; } else { GWEN_Buffer_Crop(secbuf, 0, pos2-20); break; } } else { DBG_ERROR(GWEN_LOGDOMAIN, "Bad data size (smaller than 20 bytes)"); /* reset buffer */ GWEN_Buffer_Crop(secbuf, 0, pos1); GWEN_Buffer_free(sbuf); return rv; } } } /* for */ GWEN_Buffer_free(sbuf); return 0; } static int GWEN_PasswordStore_EncryptWriteFile(GWEN_PASSWD_STORE *sto, const uint8_t *sec, uint32_t len) { int rv; GWEN_BUFFER *sbuf; GWEN_BUFFER *tbuf; /* make sure the data dir exists */ DBG_ERROR(0, "Looking for [%s]", sto->fileName); rv=GWEN_Directory_GetPath(sto->fileName, GWEN_PATH_FLAGS_VARIABLE); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, "PASSWORD_STORE_"); GWEN_Text_UnescapeToBufferTolerant(sto->fileName, tbuf); /* ask for passwd if not already set */ if (sto->pw[0]==0) { if (sto->isNew) { rv=GWEN_Gui_InputBox(GWEN_GUI_INPUT_FLAGS_DIRECT | GWEN_GUI_INPUT_FLAGS_CONFIRM, I18N("Create New Password Store"), I18N( "You are about to create a new password store.\n" "Passwords you store here will be encrypted with a passphrase\n" "which you must enter now.\n" "\n" "Later you will only need to remember the passphrase for the\n" "password store, not all the individuell passwords.\n" "\n" "WARNING: Storing your passwords in the password store\n" "can be considered a security risk, especially if the passphrase protecting it\n" "is not strong enough!\n" "\n" "You can safely abort this step, in which case your passwords will not be stored.\n" "\n" "Please enter the passphrase for the password store to be created or abort.\n" "" "

You are about to create a new password store.

" "
" "

Passwords you store here will be encrypted with a passphrase " "which you must enter now.

" "

Later you will only need to remember the passphrase for the " "password store, not all the individuell passwords.

" "

" "Warning: Storing your passwords in the password store " "can be considered a security risk, especially if the passphrase protecting it " "is not strong enough!" "

" "

You can safely abort this step, in which case your passwords will not be stored.

" "
" "

Please enter the passphrase for the password store to be created or abort.

" ""), sto->pw, 4, sizeof(sto->pw)-1, 0); } else rv=GWEN_Gui_InputBox(GWEN_GUI_INPUT_FLAGS_DIRECT, I18N("Enter Password"), I18N("Please enter the password for the password store.\n" "" "Please enter the password for the password store.
" ""), sto->pw, 4, sizeof(sto->pw)-1, 0); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } } GWEN_Buffer_free(tbuf); /* prepare data to write */ sbuf=GWEN_Buffer_new(0, 256, 0, 1); tbuf=GWEN_Buffer_new(0, len+20, 0, 1); /* add clear text data */ GWEN_Buffer_AppendBytes(tbuf, (const char*) sec, len); /* add hash (20 bytes) */ rv=GWEN_PasswordStore_Digest((const uint8_t*) sec, len, tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(sbuf); return rv; } /* encrypt cleartext */ rv=GWEN_SmallTresor_Encrypt((const uint8_t*) GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf), sto->pw, sbuf, GWEN_PASSWDSTORE_PW_ITERATIONS, GWEN_PASSWDSTORE_CRYPT_ITERATIONS); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(sbuf); return rv; } GWEN_Buffer_OverwriteContent(tbuf, 0); GWEN_Buffer_free(tbuf); /* write file */ rv=writeFile(sto->fileName, GWEN_Buffer_GetStart(sbuf), GWEN_Buffer_GetUsedBytes(sbuf)); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(sbuf); return rv; } GWEN_Buffer_free(sbuf); return 0; } static int GWEN_PasswordStore_ReadFile(GWEN_PASSWD_STORE *sto) { GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_PasswordStore_ReadDecryptFile(sto, tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } sto->isNew=0; GWEN_PasswordStore_SafeFreeDb(sto); sto->dbPasswords=GWEN_DB_Group_new("passwords"); rv=GWEN_DB_ReadFromString(sto->dbPasswords, GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf), GWEN_DB_FLAGS_DEFAULT); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_OverwriteContent(tbuf, 0); GWEN_Buffer_free(tbuf); return rv; } GWEN_DB_ModifyBranchFlagsDown(sto->dbPasswords, GWEN_DB_NODE_FLAGS_SAFE, GWEN_DB_NODE_FLAGS_SAFE); GWEN_Buffer_OverwriteContent(tbuf, 0); GWEN_Buffer_free(tbuf); return 0; } static int GWEN_PasswordStore_WriteFile(GWEN_PASSWD_STORE *sto) { if (sto->dbPasswords) { GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_DB_WriteToBuffer(sto->dbPasswords, tbuf, GWEN_DB_FLAGS_DEFAULT); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_OverwriteContent(tbuf, 0); GWEN_Buffer_free(tbuf); return rv; } rv=GWEN_PasswordStore_EncryptWriteFile(sto, (const uint8_t*) GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf)); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_OverwriteContent(tbuf, 0); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_OverwriteContent(tbuf, 0); GWEN_Buffer_free(tbuf); return 0; } else { DBG_INFO(GWEN_LOGDOMAIN, "No password db"); return GWEN_ERROR_INTERNAL; } } static int GWEN_PasswordStore__SetPassword(GWEN_PASSWD_STORE *sto, const char *token, const char *secret) { GWEN_BUFFER *buf; buf=GWEN_Buffer_new(0, 64, 0, 1); GWEN_Text_EscapeToBufferTolerant(token, buf); if (secret==NULL) GWEN_DB_DeleteVar(sto->dbPasswords, GWEN_Buffer_GetStart(buf)); else GWEN_DB_SetCharValue(sto->dbPasswords, GWEN_DB_FLAGS_OVERWRITE_VARS, GWEN_Buffer_GetStart(buf), secret); GWEN_DB_ModifyBranchFlagsDown(sto->dbPasswords, GWEN_DB_NODE_FLAGS_SAFE, GWEN_DB_NODE_FLAGS_SAFE); GWEN_Buffer_free(buf); return 0; } static int GWEN_PasswordStore__GetPassword(GWEN_PASSWD_STORE *sto, const char *token, char *buffer, int minLen, int maxLen) { GWEN_BUFFER *buf; const char *s; buf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Text_EscapeToBufferTolerant(token, buf); s=GWEN_DB_GetCharValue(sto->dbPasswords, GWEN_Buffer_GetStart(buf), 0, NULL); if (s) { int i; i=strlen(s); if (i>=minLen && i < maxLen) { memmove(buffer, s, i+1); GWEN_Buffer_free(buf); return 0; } else { DBG_ERROR(GWEN_LOGDOMAIN, "Stored password [%s] is not within size limits (%d), rejecting.", GWEN_Buffer_GetStart(buf), i); } } GWEN_Buffer_free(buf); return GWEN_ERROR_NOT_FOUND; } int GWEN_PasswordStore_SetPassword(GWEN_PASSWD_STORE *sto, const char *token, const char *secret) { GWEN_FSLOCK *lck; GWEN_FSLOCK_RESULT rs; int rv; /* make sure path exists */ rv=GWEN_Directory_GetPath(sto->fileName, GWEN_PATH_FLAGS_VARIABLE); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } /* lock file */ lck=GWEN_FSLock_new(sto->fileName, GWEN_FSLock_TypeFile); rs=GWEN_FSLock_Lock(lck, 60*1000, 0); if (rs!=GWEN_FSLock_ResultOk) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rs); return GWEN_ERROR_IO; } /* read and decrypt file */ rv=GWEN_PasswordStore_ReadFile(sto); if (rv<0) { if (rv==GWEN_ERROR_NOT_FOUND || rv==GWEN_ERROR_NO_DATA) { DBG_INFO(GWEN_LOGDOMAIN, "Will create password store [%s]", sto->fileName); if (sto->dbPasswords==NULL) { sto->dbPasswords=GWEN_DB_Group_new("passwords"); GWEN_DB_ModifyBranchFlagsDown(sto->dbPasswords, GWEN_DB_NODE_FLAGS_SAFE, GWEN_DB_NODE_FLAGS_SAFE); } sto->isNew=1; } else { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_FSLock_Unlock(lck); GWEN_FSLock_free(lck); return rv; } } /* set password in db */ rv=GWEN_PasswordStore__SetPassword(sto, token, secret); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_FSLock_Unlock(lck); GWEN_FSLock_free(lck); return rv; } /* write file back */ rv=GWEN_PasswordStore_WriteFile(sto); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_FSLock_Unlock(lck); GWEN_FSLock_free(lck); return rv; } /* unlock file */ GWEN_FSLock_Unlock(lck); GWEN_FSLock_free(lck); /* release passwords */ GWEN_PasswordStore_SafeFreeDb(sto); return 0; } int GWEN_PasswordStore_GetPassword(GWEN_PASSWD_STORE *sto, const char *token, char *buffer, int minLen, int maxLen) { int rv; GWEN_FSLOCK *lck; GWEN_FSLOCK_RESULT rs; /* make sure path exists */ rv=GWEN_Directory_GetPath(sto->fileName, GWEN_PATH_FLAGS_VARIABLE); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } /* lock file */ lck=GWEN_FSLock_new(sto->fileName, GWEN_FSLock_TypeFile); rs=GWEN_FSLock_Lock(lck, 60*1000, 0); if (rs!=GWEN_FSLock_ResultOk) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rs); return GWEN_ERROR_IO; } /* read and decode file */ rv=GWEN_PasswordStore_ReadFile(sto); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_FSLock_Unlock(lck); GWEN_FSLock_free(lck); return rv; } /* unlock file */ GWEN_FSLock_Unlock(lck); GWEN_FSLock_free(lck); /* finally get password, if possible */ rv=GWEN_PasswordStore__GetPassword(sto, token, buffer, minLen, maxLen); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } /* release passwords */ GWEN_PasswordStore_SafeFreeDb(sto); return 0; } gwenhywfar-4.15.2beta/src/gui/progressdata_p.h0000644000175000017500000000153612364015347016314 00000000000000/*************************************************************************** begin : Tue Feb 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_GUI_PROGRESSDATA_P_H #define GWEN_GUI_PROGRESSDATA_P_H #include "progressdata_l.h" struct GWEN_PROGRESS_DATA { GWEN_TREE_ELEMENT(GWEN_PROGRESS_DATA); GWEN_GUI *gui; uint32_t id; uint32_t previousId; uint32_t flags; char *title; char *text; uint64_t total; uint64_t current; GWEN_BUFFER *logBuf; int aborted; int shown; time_t startTime; time_t checkTime; GWEN_DIALOG *dialog; }; #endif gwenhywfar-4.15.2beta/src/gui/widget_l.h0000644000175000017500000000352712364015347015077 00000000000000/*************************************************************************** begin : Wed Jan 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_GUI_WIDGET_L_H #define GWENHYWFAR_GUI_WIDGET_L_H #include #include GWEN_WIDGET *GWEN_Widget_new(GWEN_DIALOG *dlg); void GWEN_Widget_free(GWEN_WIDGET *w); int GWEN_Widget_ReadXml(GWEN_WIDGET *w, GWEN_XMLNODE *node); #endif gwenhywfar-4.15.2beta/src/gui/dlg_input_p.h0000644000175000017500000000163512416477066015613 00000000000000/*************************************************************************** begin : Wed Feb 17 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_GUI_DLG_INPUT_P_H #define GWEN_GUI_DLG_INPUT_P_H #include "dlg_input_l.h" struct GWEN_DLGINPUT { int wasInit; uint32_t flags; char *title; char *text; int minLen; int maxLen; char *response; int flagAllowStore; }; typedef struct GWEN_DLGINPUT GWEN_DLGINPUT; static int GWENHYWFAR_CB GWEN_DlgInput_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static void GWENHYWFAR_CB GWEN_DlgInput_FreeData(void *bp, void *p); #endif gwenhywfar-4.15.2beta/src/gui/dialog_be.h0000644000175000017500000001065212416477066015213 00000000000000/*************************************************************************** begin : Wed Jan 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_GUI_DIALOG_BE_H #define GWENHYWFAR_GUI_DIALOG_BE_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif typedef int GWENHYWFAR_CB (*GWEN_DIALOG_SETINTPROPERTY_FN)(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal); typedef int GWENHYWFAR_CB (*GWEN_DIALOG_GETINTPROPERTY_FN)(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue); typedef int GWENHYWFAR_CB (*GWEN_DIALOG_SETCHARPROPERTY_FN)(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal); typedef const char* GWENHYWFAR_CB (*GWEN_DIALOG_GETCHARPROPERTY_FN)(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue); GWENHYWFAR_API GWEN_DIALOG_SETINTPROPERTY_FN GWEN_Dialog_SetSetIntPropertyFn(GWEN_DIALOG *dlg, GWEN_DIALOG_SETINTPROPERTY_FN fn); GWENHYWFAR_API GWEN_DIALOG_GETINTPROPERTY_FN GWEN_Dialog_SetGetIntPropertyFn(GWEN_DIALOG *dlg, GWEN_DIALOG_GETINTPROPERTY_FN fn); GWENHYWFAR_API GWEN_DIALOG_SETCHARPROPERTY_FN GWEN_Dialog_SetSetCharPropertyFn(GWEN_DIALOG *dlg, GWEN_DIALOG_SETCHARPROPERTY_FN fn); GWENHYWFAR_API GWEN_DIALOG_GETCHARPROPERTY_FN GWEN_Dialog_SetGetCharPropertyFn(GWEN_DIALOG *dlg, GWEN_DIALOG_GETCHARPROPERTY_FN fn); GWENHYWFAR_API GWEN_WIDGET_TREE *GWEN_Dialog_GetWidgets(const GWEN_DIALOG *dlg); GWENHYWFAR_API GWEN_WIDGET *GWEN_Dialog_FindWidgetByName(const GWEN_DIALOG *dlg, const char *name); GWENHYWFAR_API GWEN_WIDGET *GWEN_Dialog_FindWidgetByImplData(const GWEN_DIALOG *dlg, int index, const void *ptr); GWENHYWFAR_API void GWEN_Dialog_SetGuiId(GWEN_DIALOG *dlg, uint32_t guiid); /** * The dialog remains the owner of the object returned (if any). */ GWENHYWFAR_API GWEN_STRINGLIST *GWEN_Dialog_GetMediaPaths(const GWEN_DIALOG *dlg); /** * Sends a signal to the signal handler of the given dialog. This does @b not send the signal * to sub-dialogs. Use @ref GWEN_Dialog_EmitSignalToAll for that. */ GWENHYWFAR_API int GWEN_Dialog_EmitSignal(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); /** * Emits signals to the given dialog and all its sub-dialogs. This should only be used * for signals like @ref GWEN_DialogEvent_TypeInit and @ref GWEN_DialogEvent_TypeFini. */ GWENHYWFAR_API int GWEN_Dialog_EmitSignalToAll(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); GWENHYWFAR_API GWEN_DIALOG *GWEN_Dialog_GetParentDialog(const GWEN_DIALOG *dlg); GWENHYWFAR_API void GWEN_Dialog_Dump(const GWEN_DIALOG *dlg, FILE *f, unsigned int indent); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/gui/cgui_p.h0000644000175000017500000000740312416477066014554 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: cbanking_p.h 409 2005-08-05 18:13:06Z aquamaniac $ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_GUI_CGUI_P_H #define GWEN_GUI_CGUI_P_H #define GWEN_GUI_CGUI_CHAR_ABORT 27 #define GWEN_GUI_CGUI_CHAR_DELETE 127 #define GWEN_GUI_CGUI_CHAR_ENTER 10 #include "cgui_l.h" #include "cprogress_l.h" #include #include typedef struct GWEN_GUI_CGUI GWEN_GUI_CGUI; struct GWEN_GUI_CGUI { GWEN_GUI_CPROGRESS_LIST *progressList; uint32_t nextBoxId; uint32_t nextProgressId; GWEN_GUI_CHECKCERT_FN checkCertFn; GWEN_DB_NODE *dbCerts; }; void GWENHYWFAR_CB GWEN_Gui_CGui_FreeData(void *bp, void *p); char GWEN_Gui_CGui__readCharFromStdin(int waitFor); int GWEN_Gui_CGui__input(GWEN_GUI *gui, uint32_t flags, char *buffer, int minLen, int maxLen, uint32_t guiid); GWEN_GUI_CPROGRESS *GWEN_Gui_CGui__findProgress(GWEN_GUI *gui, uint32_t id); int GWEN_Gui_CGui_MessageBox(GWEN_GUI *gui, uint32_t flags, const char *title, const char *text, const char *b1, const char *b2, const char *b3, uint32_t guiid); int GWEN_Gui_CGui_InputBox(GWEN_GUI *gui, uint32_t flags, const char *title, const char *text, char *buffer, int minLen, int maxLen, uint32_t guiid); uint32_t GWEN_Gui_CGui_ShowBox(GWEN_GUI *gui, uint32_t flags, const char *title, const char *text, uint32_t guiid); void GWEN_Gui_CGui_HideBox(GWEN_GUI *gui, uint32_t id); uint32_t GWEN_Gui_CGui_ProgressStart(GWEN_GUI *gui, uint32_t progressFlags, const char *title, const char *text, uint64_t total, uint32_t guiid); int GWEN_Gui_CGui_ProgressAdvance(GWEN_GUI *gui, uint32_t id, uint64_t progress); int GWEN_Gui_CGui_ProgressSetTotal(GWEN_GUI *gui, uint32_t id, uint64_t total); int GWEN_Gui_CGui_ProgressLog(GWEN_GUI *gui, uint32_t id, GWEN_LOGGER_LEVEL level, const char *text); int GWEN_Gui_CGui_ProgressEnd(GWEN_GUI *gui, uint32_t id); int GWEN_Gui_CGui_Print(GWEN_GUI *gui, const char *docTitle, const char *docType, const char *descr, const char *text, uint32_t guiid); int GWEN_Gui_CGui__HashPassword(const char *token, const char *pin, GWEN_BUFFER *buf); static int GWENHYWFAR_CB GWEN_Gui_CGui_CheckCert(GWEN_GUI *gui, const GWEN_SSLCERTDESCR *cd, GWEN_SYNCIO *sio, uint32_t guiid); #endif gwenhywfar-4.15.2beta/src/gui/passwdstore_p.h0000644000175000017500000000370512364015347016174 00000000000000/*************************************************************************** begin : Sat Dec 16 2012 copyright : (C) 2012 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_PASSWDSTORE_P_H #define GWENHYWFAR_PASSWDSTORE_P_H #include #include #define GWEN_PASSWDSTORE_PW_ITERATIONS 1467 #define GWEN_PASSWDSTORE_CRYPT_ITERATIONS 648 #define GWEN_PASSWDSTORE_PWLEN 129 struct GWEN_PASSWD_STORE { char *fileName; char pw[GWEN_PASSWDSTORE_PWLEN]; GWEN_DB_NODE *dbPasswords; int isNew; }; #endif gwenhywfar-4.15.2beta/src/gui/cprogress.c0000644000175000017500000001244212416477066015307 00000000000000 #ifdef HAVE_CONFIG_H # include #endif #include "cprogress_p.h" #include "cgui_l.h" #include #include #include #include #include #include #include #include #include GWEN_LIST_FUNCTIONS(GWEN_GUI_CPROGRESS, GWEN_Gui_CProgress) GWEN_GUI_CPROGRESS *GWEN_Gui_CProgress_new(GWEN_GUI *gui, uint32_t id, uint32_t progressFlags, const char *title, const char *text, uint64_t total) { GWEN_GUI_CPROGRESS *cp; GWEN_NEW_OBJECT(GWEN_GUI_CPROGRESS, cp); GWEN_LIST_INIT(GWEN_GUI_CPROGRESS, cp); cp->gui=gui; cp->id=id; cp->startTime=time(0); cp->flags=progressFlags; if (title) cp->title=strdup(title); if (text) cp->text=strdup(text); cp->total=total; cp->logBuf=GWEN_Buffer_new(0, 256, 0, 1); if (!(cp->flags & GWEN_GUI_PROGRESS_DELAY)) { GWEN_Gui_StdPrintf(gui, stderr, "===== %s =====\n", title); cp->shown=1; } return cp; } void GWEN_Gui_CProgress_free(GWEN_GUI_CPROGRESS *cp) { if (cp) { GWEN_LIST_FINI(GWEN_GUI_CPROGRESS, cp); GWEN_Buffer_free(cp->logBuf); free(cp->text); free(cp->title); GWEN_FREE_OBJECT(cp); } } GWEN_GUI *GWEN_Gui_CProgress_GetGui(const GWEN_GUI_CPROGRESS *cp) { assert(cp); return cp->gui; } uint32_t GWEN_Gui_CProgress_GetId(const GWEN_GUI_CPROGRESS *cp) { assert(cp); return cp->id; } const char *GWEN_Gui_CProgress_GetTitle(const GWEN_GUI_CPROGRESS *cp) { assert(cp); return cp->title; } const char *GWEN_Gui_CProgress_GetText(const GWEN_GUI_CPROGRESS *cp) { assert(cp); return cp->text; } uint64_t GWEN_Gui_CProgress_GetTotal(const GWEN_GUI_CPROGRESS *cp) { assert(cp); return cp->total; } void GWEN_Gui_CProgress_SetTotal(GWEN_GUI_CPROGRESS *cp, uint64_t i) { assert(cp); cp->total=i; } uint64_t GWEN_Gui_CProgress_GetCurrent(const GWEN_GUI_CPROGRESS *cp) { assert(cp); return cp->current; } const char *GWEN_Gui_CProgress_GetLogBuf(const GWEN_GUI_CPROGRESS *cp) { assert(cp); assert(cp->logBuf); return GWEN_Buffer_GetStart(cp->logBuf); } int GWEN_Gui_CProgress_GetAborted(const GWEN_GUI_CPROGRESS *cp) { assert(cp); return cp->aborted; } int GWEN_Gui_CProgress_Advance(GWEN_GUI_CPROGRESS *cp, uint64_t progress) { #ifndef OS_WIN32 int fl; #endif assert(cp); if (!cp->shown) { time_t t1; t1=time(0); if (difftime(t1, cp->startTime)>GWEN_GUI_DELAY_SECS) { if (!(GWEN_Gui_GetFlags(cp->gui) & GWEN_GUI_FLAGS_NONINTERACTIVE)) GWEN_Gui_StdPrintf(cp->gui, stderr, "%s: Started.\n", cp->title); cp->shown=1; } } if (progress==GWEN_GUI_PROGRESS_ONE) progress=cp->current+1; if (progress!=GWEN_GUI_PROGRESS_NONE) { if (progress!=cp->current) { if (cp->shown) { if (!(GWEN_Gui_GetFlags(cp->gui) & GWEN_GUI_FLAGS_NONINTERACTIVE)) { if (cp->total==GWEN_GUI_PROGRESS_NONE) GWEN_Gui_StdPrintf(cp->gui, stderr, "%s: %llu\n", cp->title, (long long unsigned)progress); else GWEN_Gui_StdPrintf(cp->gui, stderr, "%s: %llu of %llu\n", cp->title, (long long unsigned)progress, (long long unsigned)cp->total); } } cp->current=progress; } } if (cp->aborted) return GWEN_ERROR_USER_ABORTED; #ifndef OS_WIN32 if (!(GWEN_Gui_GetFlags(cp->gui) & GWEN_GUI_FLAGS_NONINTERACTIVE)) { /* check for abort */ fl=fcntl(fileno(stdin), F_GETFL); if (fl!=-1) { int chr; /* set stdin to nonblocking */ if (fcntl(fileno(stdin), F_SETFL, fl | O_NONBLOCK)) { DBG_INFO(GWEN_LOGDOMAIN, "fcntl(stdin): %s", strerror(errno)); return 0; } /* check whether there is a character */ chr=getchar(); /* set blocking mode to what we found before modification */ fcntl(fileno(stdin), F_SETFL, fl); if (chr==GWEN_GUI_CPROGRESS_CHAR_ABORT) { GWEN_Gui_StdPrintf(cp->gui, stderr, "------> ABORTED BY USER\n"); cp->aborted=1; return GWEN_ERROR_USER_ABORTED; } } } #endif return 0; } int GWEN_Gui_CProgress_Log(GWEN_GUI_CPROGRESS *cp, GWEN_UNUSED GWEN_LOGGER_LEVEL level, const char *text) { assert(cp); assert(text); if (!(GWEN_Gui_GetFlags(cp->gui) & GWEN_GUI_FLAGS_NONINTERACTIVE)) { GWEN_BUFFER *tbuf; const char *t; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Gui_GetRawText(cp->gui, text, tbuf); t=GWEN_Buffer_GetStart(tbuf); if (t[GWEN_Buffer_GetUsedBytes(tbuf)-1]!='\n') { GWEN_Buffer_AppendByte(tbuf, '\n'); /* Just in case the buffer has been reallocated */ t=GWEN_Buffer_GetStart(tbuf); } GWEN_Gui_StdPrintf(cp->gui, stderr, "%s", t); GWEN_Buffer_AppendString(cp->logBuf, t); GWEN_Buffer_free(tbuf); tbuf=0; if (cp->aborted) return GWEN_ERROR_USER_ABORTED; } return 0; } int GWEN_Gui_CProgress_End(GWEN_GUI_CPROGRESS *cp) { assert(cp); if (cp->shown) { if (!(GWEN_Gui_GetFlags(cp->gui) & GWEN_GUI_FLAGS_NONINTERACTIVE)) GWEN_Gui_StdPrintf(cp->gui, stderr, "%s: Finished.\n", cp->title); } if (cp->aborted) return GWEN_ERROR_USER_ABORTED; return 0; } gwenhywfar-4.15.2beta/src/gui/widget_be.h0000644000175000017500000002402112416477066015232 00000000000000/*************************************************************************** begin : Wed Jan 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_GUI_WIDGET_BE_H #define GWENHYWFAR_GUI_WIDGET_BE_H #include #include typedef struct GWEN_WIDGET GWEN_WIDGET; #ifdef __cplusplus extern "C" { #endif GWEN_TREE_FUNCTION_LIB_DEFS(GWEN_WIDGET, GWEN_Widget, GWENHYWFAR_API) GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_WIDGET, GWENHYWFAR_API) #define GWEN_WIDGET_TEXTCOUNT 4 #define GWEN_WIDGET_IMPLDATACOUNT 4 typedef enum { GWEN_Widget_TypeUnknown=-1, GWEN_Widget_TypeNone=0, GWEN_Widget_TypeLabel=1, GWEN_Widget_TypePushButton, GWEN_Widget_TypeLineEdit, GWEN_Widget_TypeTextEdit, GWEN_Widget_TypeComboBox, GWEN_Widget_TypeRadioButton, GWEN_Widget_TypeProgressBar, GWEN_Widget_TypeGroupBox, GWEN_Widget_TypeHSpacer, GWEN_Widget_TypeVSpacer, GWEN_Widget_TypeHLayout, GWEN_Widget_TypeVLayout, GWEN_Widget_TypeGridLayout, GWEN_Widget_TypeListBox, GWEN_Widget_TypeDialog, GWEN_Widget_TypeTabBook, GWEN_Widget_TypeTabPage, GWEN_Widget_TypeCheckBox, GWEN_Widget_TypeWidgetStack, GWEN_Widget_TypeScrollArea, GWEN_Widget_TypeHLine, GWEN_Widget_TypeVLine, GWEN_Widget_TypeTextBrowser, GWEN_Widget_TypeSpinBox } GWEN_WIDGET_TYPE; #ifdef __cplusplus } #endif /* other gwen headers */ #include #ifdef __cplusplus extern "C" { #endif typedef int GWENHYWFAR_CB (*GWEN_WIDGET_SETINTPROPERTY_FN)(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal); typedef int GWENHYWFAR_CB (*GWEN_WIDGET_GETINTPROPERTY_FN)(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue); typedef int GWENHYWFAR_CB (*GWEN_WIDGET_SETCHARPROPERTY_FN)(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal); typedef const char* GWENHYWFAR_CB (*GWEN_WIDGET_GETCHARPROPERTY_FN)(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue); typedef int GWENHYWFAR_CB (*GWEN_WIDGET_ADDCHILDGUIWIDGET_FN)(GWEN_WIDGET *w, GWEN_WIDGET *wChild); GWENHYWFAR_API void *GWEN_Widget_GetImplData(const GWEN_WIDGET *w, int index); /** * @brief Store a pointer with the widget. * * A widget can store up to 4 pointers. * It is up to the actual dialog framework implementation to decide what the pointers * really point to. Gwenhywfar will never access this pointer, but the implementation * might want to store pointers to the generated GUI objects. * * The GTK2 implementation for example stores at index 0 a pointer to the actually created * GUI object (e.g. the result of gtk_label_new() for labels). * * For container widgets (like groupbox etc) the GTK2 stores a pointer to the content widget * at index 1. But as written above: It is completely up to the implementation. * @param w pointer to the widget with which the pointer is to be stored * @param index position of the pointer (there can be up to 4 pointers with index ranging from 0 to 3) * @param ptr void* pointer to be stored. * Please note that the implementation still remains the owern of the pointer since the type * is void* Gwenhywfar wouldn't know how to free it anyway. However, most graphical toolkits (like * GTK, QT) take over created widget objects so with those toolkits you normally don't have to care * about freeing the pointers stored here. * * Example from the GTK2 implementation: * @code * #define GTK2_DIALOG_WIDGET_REAL 0 * #define GTK2_DIALOG_WIDGET_CONTENT 1 * * GtkWidget *g; * * g=gtk_label_new("Label"); * GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g); * GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g); * @endcode * */ GWENHYWFAR_API void GWEN_Widget_SetImplData(GWEN_WIDGET *w, int index, void *ptr); GWENHYWFAR_API GWEN_DIALOG *GWEN_Widget_GetDialog(const GWEN_WIDGET *w); GWENHYWFAR_API GWEN_DIALOG *GWEN_Widget_GetTopDialog(const GWEN_WIDGET *w); GWENHYWFAR_API const char *GWEN_Widget_GetName(const GWEN_WIDGET *w); GWENHYWFAR_API void GWEN_Widget_SetName(GWEN_WIDGET *w, const char *s); /** * Returns the flags of the given widget * (see @ref GWEN_WIDGET_FLAGS_FILLX and following). */ GWENHYWFAR_API uint32_t GWEN_Widget_GetFlags(const GWEN_WIDGET *w); GWENHYWFAR_API void GWEN_Widget_SetFlags(GWEN_WIDGET *w, uint32_t fl); GWENHYWFAR_API void GWEN_Widget_AddFlags(GWEN_WIDGET *w, uint32_t fl); GWENHYWFAR_API void GWEN_Widget_SubFlags(GWEN_WIDGET *w, uint32_t fl); /** * Returns the type of the widget (see @ref GWEN_Widget_TypeLabel and following). */ GWENHYWFAR_API GWEN_WIDGET_TYPE GWEN_Widget_GetType(const GWEN_WIDGET *w); GWENHYWFAR_API void GWEN_Widget_SetType(GWEN_WIDGET *w, GWEN_WIDGET_TYPE t); GWENHYWFAR_API int GWEN_Widget_GetColumns(const GWEN_WIDGET *w); GWENHYWFAR_API void GWEN_Widget_SetColumns(GWEN_WIDGET *w, int i); GWENHYWFAR_API int GWEN_Widget_GetRows(const GWEN_WIDGET *w); GWENHYWFAR_API void GWEN_Widget_SetRows(GWEN_WIDGET *w, int i); GWENHYWFAR_API int GWEN_Widget_GetGroupId(const GWEN_WIDGET *w); GWENHYWFAR_API void GWEN_Widget_SetGroupId(GWEN_WIDGET *w, int i); GWENHYWFAR_API int GWEN_Widget_GetWidth(const GWEN_WIDGET *w); GWENHYWFAR_API void GWEN_Widget_SetWidth(GWEN_WIDGET *w, int i); GWENHYWFAR_API int GWEN_Widget_GetHeight(const GWEN_WIDGET *w); GWENHYWFAR_API void GWEN_Widget_SetHeight(GWEN_WIDGET *w, int i); GWENHYWFAR_API const char *GWEN_Widget_GetText(const GWEN_WIDGET *w, int idx); GWENHYWFAR_API void GWEN_Widget_SetText(GWEN_WIDGET *w, int idx, const char *s); GWENHYWFAR_API const char *GWEN_Widget_GetIconFileName(const GWEN_WIDGET *w); GWENHYWFAR_API void GWEN_Widget_SetIconFileName(GWEN_WIDGET *w, const char *s); GWENHYWFAR_API const char *GWEN_Widget_GetImageFileName(const GWEN_WIDGET *w); GWENHYWFAR_API void GWEN_Widget_SetImageFileName(GWEN_WIDGET *w, const char *s); GWENHYWFAR_API GWEN_WIDGET_TYPE GWEN_Widget_Type_fromString(const char *s); GWENHYWFAR_API const char *GWEN_Widget_Type_toString(GWEN_WIDGET_TYPE t); GWENHYWFAR_API uint32_t GWEN_Widget_Flags_fromString(const char *s); /** * Set the handler for the SetIntProperty function (see @ref GWEN_WIDGET_SETINTPROPERTY_FN, * @ref GWEN_Widget_SetIntProperty and @ref GWEN_Dialog_SetIntProperty). */ GWENHYWFAR_API GWEN_WIDGET_SETINTPROPERTY_FN GWEN_Widget_SetSetIntPropertyFn(GWEN_WIDGET *w, GWEN_WIDGET_SETINTPROPERTY_FN fn); /** * Set the handler for the GetIntProperty function (see @ref GWEN_WIDGET_GETINTPROPERTY_FN, * @ref GWEN_Widget_GetIntProperty and @ref GWEN_Dialog_GetIntProperty). */ GWENHYWFAR_API GWEN_WIDGET_GETINTPROPERTY_FN GWEN_Widget_SetGetIntPropertyFn(GWEN_WIDGET *w, GWEN_WIDGET_GETINTPROPERTY_FN fn); /** * Set the handler for the SetCharProperty function (see @ref GWEN_WIDGET_SETCHARPROPERTY_FN, * @ref GWEN_Widget_SetCharProperty and @ref GWEN_Dialog_SetCharProperty). */ GWENHYWFAR_API GWEN_WIDGET_SETCHARPROPERTY_FN GWEN_Widget_SetSetCharPropertyFn(GWEN_WIDGET *w, GWEN_WIDGET_SETCHARPROPERTY_FN fn); /** * Set the handler for the GetCharProperty function (see @ref GWEN_WIDGET_GETCHARPROPERTY_FN, * @ref GWEN_Widget_GetCharProperty and @ref GWEN_Dialog_GetCharProperty). */ GWENHYWFAR_API GWEN_WIDGET_GETCHARPROPERTY_FN GWEN_Widget_SetGetCharPropertyFn(GWEN_WIDGET *w, GWEN_WIDGET_GETCHARPROPERTY_FN fn); /** * Sets the handler for the AddChildGuiWidget function (see @ref GWEN_WIDGET_ADDCHILDGUIWIDGET_FN). */ GWENHYWFAR_API GWEN_WIDGET_ADDCHILDGUIWIDGET_FN GWEN_Widget_SetAddChildGuiWidgetFn(GWEN_WIDGET *w, GWEN_WIDGET_ADDCHILDGUIWIDGET_FN fn); GWENHYWFAR_API int GWEN_Widget_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal); GWENHYWFAR_API int GWEN_Widget_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue); GWENHYWFAR_API int GWEN_Widget_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal); GWENHYWFAR_API const char* GWEN_Widget_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue); GWENHYWFAR_API int GWEN_Widget_AddChildGuiWidget(GWEN_WIDGET *w, GWEN_WIDGET *wChild); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/gui/dlg_message_p.h0000644000175000017500000000155512416477066016101 00000000000000/*************************************************************************** begin : Wed Feb 17 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_GUI_DLG_MESSAGE_P_H #define GWEN_GUI_DLG_MESSAGE_P_H #include "dlg_message_l.h" struct GWEN_DLGMSG { int wasInit; uint32_t flags; char *title; char *text; int response; }; typedef struct GWEN_DLGMSG GWEN_DLGMSG; static int GWENHYWFAR_CB GWEN_DlgMessage_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static void GWENHYWFAR_CB GWEN_DlgMessage_FreeData(void *bp, void *p); #endif gwenhywfar-4.15.2beta/src/gui/dlg_progress.dlg0000644000175000017500000000177712364015347016317 00000000000000 gwenhywfar-4.15.2beta/src/gui/cgui.c0000644000175000017500000005447612416477066014244 00000000000000/*************************************************************************** begin : Tue Oct 02 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "cgui_p.h" #include "i18n_l.h" #include #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_TERMIOS_H # include #endif #include #include #include #include #ifdef HAVE_SIGNAL_H # include #endif #ifdef HAVE_ICONV_H # include #endif #ifndef ICONV_CONST # define ICONV_CONST #endif GWEN_INHERIT(GWEN_GUI, GWEN_GUI_CGUI) GWEN_GUI *GWEN_Gui_CGui_new(void) { GWEN_GUI *gui; GWEN_GUI_CGUI *cgui; gui=GWEN_Gui_new(); GWEN_NEW_OBJECT(GWEN_GUI_CGUI, cgui); cgui->progressList=GWEN_Gui_CProgress_List_new(); GWEN_INHERIT_SETDATA(GWEN_GUI, GWEN_GUI_CGUI, gui, cgui, GWEN_Gui_CGui_FreeData); GWEN_Gui_SetMessageBoxFn(gui, GWEN_Gui_CGui_MessageBox); GWEN_Gui_SetInputBoxFn(gui, GWEN_Gui_CGui_InputBox); GWEN_Gui_SetShowBoxFn(gui, GWEN_Gui_CGui_ShowBox); GWEN_Gui_SetHideBoxFn(gui, GWEN_Gui_CGui_HideBox); GWEN_Gui_SetProgressStartFn(gui, GWEN_Gui_CGui_ProgressStart); GWEN_Gui_SetProgressAdvanceFn(gui, GWEN_Gui_CGui_ProgressAdvance); GWEN_Gui_SetProgressSetTotalFn(gui, GWEN_Gui_CGui_ProgressSetTotal); GWEN_Gui_SetProgressLogFn(gui, GWEN_Gui_CGui_ProgressLog); GWEN_Gui_SetProgressEndFn(gui, GWEN_Gui_CGui_ProgressEnd); cgui->checkCertFn=GWEN_Gui_SetCheckCertFn(gui, GWEN_Gui_CGui_CheckCert); cgui->dbCerts=GWEN_DB_Group_new("certs"); return gui; } void GWENHYWFAR_CB GWEN_Gui_CGui_FreeData(GWEN_UNUSED void *bp, void *p) { GWEN_GUI_CGUI *cgui; cgui=(GWEN_GUI_CGUI*)p; GWEN_Gui_CProgress_List_free(cgui->progressList); GWEN_DB_Group_free(cgui->dbCerts); GWEN_FREE_OBJECT(cgui); } const char *GWEN_Gui_CGui_GetCharSet(const GWEN_GUI *gui) { return GWEN_Gui_GetCharSet(gui); } void GWEN_Gui_CGui_SetCharSet(GWEN_GUI *gui, const char *s) { GWEN_Gui_SetCharSet(gui, s); } int GWEN_Gui_CGui_GetIsNonInteractive(const GWEN_GUI *gui) { return GWEN_Gui_GetFlags(gui) & GWEN_GUI_FLAGS_NONINTERACTIVE; } void GWEN_Gui_CGui_SetIsNonInteractive(GWEN_GUI *gui, int i) { if (i) GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_NONINTERACTIVE); else GWEN_Gui_SubFlags(gui, GWEN_GUI_FLAGS_NONINTERACTIVE); } int GWEN_Gui_CGui_GetAcceptAllValidCerts(const GWEN_GUI *gui) { return GWEN_Gui_GetFlags(gui) & GWEN_GUI_FLAGS_ACCEPTVALIDCERTS; } void GWEN_Gui_CGui_SetAcceptAllValidCerts(GWEN_GUI *gui, int i) { if (i) GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_ACCEPTVALIDCERTS); else GWEN_Gui_SubFlags(gui, GWEN_GUI_FLAGS_ACCEPTVALIDCERTS); } void GWEN_Gui_CGui_SetPasswordDb(GWEN_GUI *gui, GWEN_DB_NODE *dbPasswords, int persistent) { GWEN_Gui_SetPasswordDb(gui, dbPasswords, persistent); } GWEN_DB_NODE *GWEN_Gui_CGui_GetPasswordDb(const GWEN_GUI *gui) { return GWEN_Gui_GetPasswordDb(gui); } char GWEN_Gui_CGui__readCharFromStdin(int waitFor) { int chr; #ifdef HAVE_TERMIOS_H struct termios OldAttr, NewAttr; int AttrChanged = 0; #endif #if HAVE_DECL_SIGPROCMASK sigset_t snew, sold; #endif // disable canonical mode to receive a single character #if HAVE_DECL_SIGPROCMASK sigemptyset(&snew); sigaddset(&snew, SIGINT); sigaddset(&snew, SIGSTOP); sigprocmask(SIG_BLOCK, &snew, &sold); #endif #ifdef HAVE_TERMIOS_H if (0 == tcgetattr (fileno (stdin), &OldAttr)) { NewAttr = OldAttr; NewAttr.c_lflag &= ~ICANON; NewAttr.c_lflag &= ~ECHO; tcsetattr (fileno (stdin), TCSAFLUSH, &NewAttr); AttrChanged = !0; } #endif for (;;) { chr=getchar(); if (waitFor) { if (chr==-1 || chr==GWEN_GUI_CGUI_CHAR_ABORT || chr==GWEN_GUI_CGUI_CHAR_ENTER || chr==waitFor) break; } else break; } #ifdef HAVE_TERMIOS_H /* re-enable canonical mode (if previously disabled) */ if (AttrChanged) tcsetattr (fileno (stdin), TCSADRAIN, &OldAttr); #endif #if HAVE_DECL_SIGPROCMASK sigprocmask(SIG_BLOCK, &sold, 0); #endif return chr; } int GWEN_Gui_CGui__input(GWEN_UNUSED GWEN_GUI *gui, uint32_t flags, char *buffer, int minLen, int maxLen, uint32_t guiid) { #ifdef HAVE_TERMIOS_H struct termios OldInAttr, NewInAttr; struct termios OldOutAttr, NewOutAttr; int AttrInChanged = 0; int AttrOutChanged = 0; #endif int chr; unsigned int pos; char *pOutbuf; int rv; #if HAVE_DECL_SIGPROCMASK sigset_t snew, sold; #endif #ifdef HAVE_ICONV #define INBUFSIZE 6 char inbuf[INBUFSIZE]; iconv_t ic; size_t inLeft; size_t outLeft; size_t done; ICONV_CONST char *pInbuf; char *nextchr; nextchr=(char *)GWEN_Gui_GetCharSet(gui); if (!nextchr) nextchr="UTF-8"; ic=iconv_open("UTF-8", nextchr); if (ic==(iconv_t)-1) { DBG_ERROR(GWEN_LOGDOMAIN, "Cannot convert from \"%s\" to \"UTF-8\", %s", nextchr, strerror(errno)); return GWEN_ERROR_GENERIC; } pInbuf=inbuf; outLeft=maxLen; #endif /* if possible, disable echo from stdin to stderr during password * entry */ #if HAVE_DECL_SIGPROCMASK sigemptyset(&snew); sigaddset(&snew, SIGINT); sigaddset(&snew, SIGSTOP); sigprocmask(SIG_BLOCK, &snew, &sold); #endif #ifdef HAVE_TERMIOS_H if (0 == tcgetattr (fileno (stdin), &OldInAttr)) { NewInAttr = OldInAttr; NewInAttr.c_lflag &= ~ECHO; NewInAttr.c_lflag &= ~ICANON; tcsetattr (fileno (stdin), TCSAFLUSH, &NewInAttr); AttrInChanged = !0; } if (0 == tcgetattr (fileno (stderr), &OldOutAttr)) { NewOutAttr = OldOutAttr; NewOutAttr.c_lflag &= ~ICANON; tcsetattr (fileno (stderr), TCSAFLUSH, &NewOutAttr); AttrOutChanged = !0; } #endif pos=0; pOutbuf=buffer; for (;;) { #ifdef HAVE_ICONV nextchr=inbuf; pInbuf=inbuf; inLeft=0; outLeft=maxLen-pos; do { chr=getchar(); if (chr==EOF) break; *nextchr++=chr; inLeft++; done=iconv(ic, &pInbuf, &inLeft, &pOutbuf, &outLeft); } while (done==(size_t)-1 && errno==EINVAL && nextchr-inbufnextBoxId); } void GWEN_Gui_CGui_HideBox(GWEN_GUI *gui, GWEN_UNUSED uint32_t id) { GWEN_GUI_CGUI *cgui; assert(gui); cgui=GWEN_INHERIT_GETDATA(GWEN_GUI, GWEN_GUI_CGUI, gui); assert(cgui); /* nothing to do right now */ } uint32_t GWEN_Gui_CGui_ProgressStart(GWEN_GUI *gui, uint32_t progressFlags, const char *title, const char *text, uint64_t total, GWEN_UNUSED uint32_t guiid) { GWEN_GUI_CGUI *cgui; GWEN_GUI_CPROGRESS *cp; assert(gui); cgui=GWEN_INHERIT_GETDATA(GWEN_GUI, GWEN_GUI_CGUI, gui); assert(cgui); cp=GWEN_Gui_CProgress_new(gui, ++(cgui->nextProgressId), progressFlags, title, text, total); GWEN_Gui_CProgress_List_Insert(cp, cgui->progressList); return GWEN_Gui_CProgress_GetId(cp); } GWEN_GUI_CPROGRESS *GWEN_Gui_CGui__findProgress(GWEN_GUI *gui, uint32_t id) { GWEN_GUI_CGUI *cgui; GWEN_GUI_CPROGRESS *cp; assert(gui); cgui=GWEN_INHERIT_GETDATA(GWEN_GUI, GWEN_GUI_CGUI, gui); assert(cgui); cp=GWEN_Gui_CProgress_List_First(cgui->progressList); if (id==0) return cp; while(cp) { if (GWEN_Gui_CProgress_GetId(cp)==id) break; cp=GWEN_Gui_CProgress_List_Next(cp); } /* while */ return cp; } int GWEN_Gui_CGui_ProgressAdvance(GWEN_GUI *gui, uint32_t id, uint64_t progress) { GWEN_GUI_CGUI *cgui; GWEN_GUI_CPROGRESS *cp; assert(gui); cgui=GWEN_INHERIT_GETDATA(GWEN_GUI, GWEN_GUI_CGUI, gui); assert(cgui); cp=GWEN_Gui_CGui__findProgress(gui, id); if (!cp) { DBG_DEBUG(GWEN_LOGDOMAIN, "Progress object %u not found", id); return 0; } else { return GWEN_Gui_CProgress_Advance(cp, progress); } } int GWEN_Gui_CGui_ProgressSetTotal(GWEN_GUI *gui, uint32_t id, uint64_t total) { GWEN_GUI_CGUI *cgui; GWEN_GUI_CPROGRESS *cp; assert(gui); cgui=GWEN_INHERIT_GETDATA(GWEN_GUI, GWEN_GUI_CGUI, gui); assert(cgui); cp=GWEN_Gui_CGui__findProgress(gui, id); if (!cp) { DBG_DEBUG(GWEN_LOGDOMAIN, "Progress object %u not found", id); } else GWEN_Gui_CProgress_SetTotal(cp, total); return 0; } int GWEN_Gui_CGui_ProgressLog(GWEN_GUI *gui, uint32_t id, GWEN_LOGGER_LEVEL level, const char *text) { GWEN_GUI_CGUI *cgui; GWEN_GUI_CPROGRESS *cp; assert(gui); cgui=GWEN_INHERIT_GETDATA(GWEN_GUI, GWEN_GUI_CGUI, gui); assert(cgui); cp=GWEN_Gui_CGui__findProgress(gui, id); if (!cp) { DBG_DEBUG(GWEN_LOGDOMAIN, "Progress object %u not found", id); return 0; } else { return GWEN_Gui_CProgress_Log(cp, level, text); } } int GWEN_Gui_CGui_ProgressEnd(GWEN_GUI *gui,uint32_t id) { GWEN_GUI_CGUI *cgui; GWEN_GUI_CPROGRESS *cp; assert(gui); cgui=GWEN_INHERIT_GETDATA(GWEN_GUI, GWEN_GUI_CGUI, gui); assert(cgui); cp=GWEN_Gui_CGui__findProgress(gui, id); if (!cp) { DBG_DEBUG(GWEN_LOGDOMAIN, "Progress object %u not found", id); return 0; } else { int rv; rv=GWEN_Gui_CProgress_End(cp); GWEN_Gui_CProgress_List_Del(cp); GWEN_Gui_CProgress_free(cp); return rv; } } int GWEN_Gui_CGui_Print(GWEN_UNUSED GWEN_GUI *gui, GWEN_UNUSED const char *docTitle, GWEN_UNUSED const char *docType, GWEN_UNUSED const char *descr, GWEN_UNUSED const char *text, GWEN_UNUSED uint32_t guiid) { return GWEN_ERROR_NOT_SUPPORTED; } int GWEN_Gui_CGui__HashPair(const char *token, const char *pin, GWEN_BUFFER *buf) { GWEN_MDIGEST *md; int rv; /* hash token and pin */ md=GWEN_MDigest_Md5_new(); rv=GWEN_MDigest_Begin(md); if (rv==0) rv=GWEN_MDigest_Update(md, (const uint8_t*)token, strlen(token)); if (rv==0) rv=GWEN_MDigest_Update(md, (const uint8_t*)pin, strlen(pin)); if (rv==0) rv=GWEN_MDigest_End(md); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Hash error (%d)", rv); GWEN_MDigest_free(md); return rv; } GWEN_Text_ToHexBuffer((const char*)GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md), buf, 0, 0, 0); GWEN_MDigest_free(md); return 0; } int GWENHYWFAR_CB GWEN_Gui_CGui_CheckCert(GWEN_GUI *gui, const GWEN_SSLCERTDESCR *cd, GWEN_SYNCIO *sio, uint32_t guiid) { GWEN_GUI_CGUI *cgui; const char *hash; const char *status; GWEN_BUFFER *hbuf; int i; assert(gui); cgui=GWEN_INHERIT_GETDATA(GWEN_GUI, GWEN_GUI_CGUI, gui); assert(cgui); hash=GWEN_SslCertDescr_GetFingerPrint(cd); status=GWEN_SslCertDescr_GetStatusText(cd); hbuf=GWEN_Buffer_new(0, 64, 0, 1); GWEN_Gui_CGui__HashPair(hash, status, hbuf); i=GWEN_DB_GetIntValue(cgui->dbCerts, GWEN_Buffer_GetStart(hbuf), 0, 1); if (i==0) { DBG_NOTICE(GWEN_LOGDOMAIN, "Automatically accepting certificate [%s]", hash); GWEN_Buffer_free(hbuf); return 0; } if (GWEN_Gui_GetFlags(gui) & GWEN_GUI_FLAGS_NONINTERACTIVE) { uint32_t fl; fl=GWEN_SslCertDescr_GetStatusFlags(cd); if (fl==GWEN_SSL_CERT_FLAGS_OK && (GWEN_Gui_GetFlags(gui) & GWEN_GUI_FLAGS_ACCEPTVALIDCERTS)) { DBG_NOTICE(GWEN_LOGDOMAIN, "Automatically accepting valid new certificate [%s]", hash); GWEN_Buffer_free(hbuf); return 0; } else { DBG_ERROR(GWEN_LOGDOMAIN, "Automatically rejecting certificate [%s] (noninteractive)", hash); GWEN_Buffer_free(hbuf); return GWEN_ERROR_USER_ABORTED; } } if (cgui->checkCertFn) { i=cgui->checkCertFn(gui, cd, sio, guiid); if (i==0) { GWEN_DB_SetIntValue(cgui->dbCerts, GWEN_DB_FLAGS_OVERWRITE_VARS, GWEN_Buffer_GetStart(hbuf), i); } GWEN_Buffer_free(hbuf); return i; } else { GWEN_Buffer_free(hbuf); return GWEN_ERROR_NOT_SUPPORTED; } } void GWEN_Gui_CGui_SetCertDb(GWEN_GUI *gui, GWEN_DB_NODE *dbCerts) { GWEN_GUI_CGUI *cgui; assert(gui); cgui=GWEN_INHERIT_GETDATA(GWEN_GUI, GWEN_GUI_CGUI, gui); assert(cgui); GWEN_DB_Group_free(cgui->dbCerts); cgui->dbCerts=dbCerts; } GWEN_DB_NODE *GWEN_Gui_CGui_GetCertDb(const GWEN_GUI *gui) { GWEN_GUI_CGUI *cgui; assert(gui); cgui=GWEN_INHERIT_GETDATA(GWEN_GUI, GWEN_GUI_CGUI, gui); assert(cgui); return cgui->dbCerts; } gwenhywfar-4.15.2beta/src/gui/dlg_showbox.dlg0000644000175000017500000000045212364015347016131 00000000000000 gwenhywfar-4.15.2beta/src/gui/dlg_showbox.c0000644000175000017500000001146612416477066015624 00000000000000/*************************************************************************** begin : Wed Feb 17 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "dlg_showbox_p.h" #include #include #include #include #define DIALOG_MINWIDTH 200 #define DIALOG_MINHEIGHT 50 GWEN_INHERIT(GWEN_DIALOG, GWEN_DLGSHOWBOX) GWEN_DIALOG *GWEN_DlgShowBox_new(uint32_t flags, const char *title, const char *text) { GWEN_DIALOG *dlg; GWEN_DLGSHOWBOX *xdlg; GWEN_BUFFER *fbuf; int rv; dlg=GWEN_Dialog_new("dlg_gwen_showbox"); GWEN_NEW_OBJECT(GWEN_DLGSHOWBOX, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, GWEN_DLGSHOWBOX, dlg, xdlg, GWEN_DlgShowBox_FreeData); GWEN_Dialog_SetSignalHandler(dlg, GWEN_DlgShowBox_SignalHandler); /* get path of dialog description file */ fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_PathManager_FindFile(GWEN_PM_LIBNAME, GWEN_PM_SYSDATADIR, "gwenhywfar/dialogs/dlg_showbox.dlg", fbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Dialog description file not found (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } /* read dialog from dialog description file */ rv=GWEN_Dialog_ReadXmlFile(dlg, GWEN_Buffer_GetStart(fbuf)); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } GWEN_Buffer_free(fbuf); xdlg->flags=flags; if (title) xdlg->title=strdup(title); if (text) xdlg->text=strdup(text); return dlg; } void GWENHYWFAR_CB GWEN_DlgShowBox_FreeData(void *bp, void *p) { GWEN_DLGSHOWBOX *xdlg; xdlg=(GWEN_DLGSHOWBOX*) p; free(xdlg->title); free(xdlg->text); GWEN_FREE_OBJECT(xdlg); } void GWEN_DlgShowBox_Init(GWEN_DIALOG *dlg) { GWEN_DLGSHOWBOX *xdlg; int i; GWEN_DB_NODE *dbParams; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GWEN_DLGSHOWBOX, dlg); assert(xdlg); dbParams=GWEN_Dialog_GetPreferences(dlg); assert(dbParams); /* read width */ i=GWEN_DB_GetIntValue(dbParams, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbParams, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); /* special stuff */ if (xdlg->title) GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, xdlg->title, 0); if (xdlg->text) GWEN_Dialog_SetCharProperty(dlg, "descrLabel", GWEN_DialogProperty_Title, 0, xdlg->text, 0); xdlg->wasInit=1; } void GWEN_DlgShowBox_Fini(GWEN_DIALOG *dlg) { GWEN_DLGSHOWBOX *xdlg; int i; GWEN_DB_NODE *dbParams; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GWEN_DLGSHOWBOX, dlg); assert(xdlg); dbParams=GWEN_Dialog_GetPreferences(dlg); assert(dbParams); /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); if (i&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/gui DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(iheader_HEADERS) $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgui_la_LIBADD = am_libgui_la_OBJECTS = cgui.lo cprogress.lo dialog.lo gui.lo widget.lo \ progressdata.lo dlg_progress.lo dlg_input.lo dlg_message.lo \ dlg_showbox.lo passwdstore.lo libgui_la_OBJECTS = $(am_libgui_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgui_la_SOURCES) DIST_SOURCES = $(libgui_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(dlgdatadir)" "$(DESTDIR)$(iheaderdir)" DATA = $(dlgdata_DATA) HEADERS = $(iheader_HEADERS) $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/parser @all_includes@ AM_CFLAGS = @visibility_cflags@ -DBUILDING_GWENHYWFAR noinst_LTLIBRARIES = libgui.la noinst_HEADERS = \ cgui_p.h \ cprogress_l.h cprogress_p.h \ dialog_p.h \ gui_l.h gui_p.h cgui_l.h \ widget_l.h widget_p.h \ progressdata_l.h progressdata_p.h \ dlg_progress_l.h dlg_progress_p.h \ dlg_input_l.h dlg_input_p.h \ dlg_message_l.h dlg_message_p.h \ dlg_showbox_l.h dlg_showbox_p.h \ passwdstore_p.h iheaderdir = $(gwenhywfar_headerdir_am)/gwenhywfar iheader_HEADERS = \ cgui.h \ dialog.h dialog_be.h \ gui.h gui_be.h \ widget_be.h \ passwdstore.h libgui_la_SOURCES = \ cgui.c \ cprogress.c \ dialog.c \ gui.c \ widget.c \ progressdata.c \ dlg_progress.c \ dlg_input.c \ dlg_message.c \ dlg_showbox.c \ passwdstore.c dlgdatadir = $(pkgdatadir)/dialogs dlgdata_DATA = \ dlg_input.dlg \ dlg_message.dlg \ dlg_progress.dlg \ dlg_showbox.dlg EXTRA_DIST = $(dlgdata_DATA) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/gui/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/gui/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgui.la: $(libgui_la_OBJECTS) $(libgui_la_DEPENDENCIES) $(EXTRA_libgui_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgui_la_OBJECTS) $(libgui_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cgui.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cprogress.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dialog.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_input.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_message.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_progress.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_showbox.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gui.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/passwdstore.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/progressdata.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/widget.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dlgdataDATA: $(dlgdata_DATA) @$(NORMAL_INSTALL) @list='$(dlgdata_DATA)'; test -n "$(dlgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dlgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dlgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dlgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dlgdatadir)" || exit $$?; \ done uninstall-dlgdataDATA: @$(NORMAL_UNINSTALL) @list='$(dlgdata_DATA)'; test -n "$(dlgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(dlgdatadir)'; $(am__uninstall_files_from_dir) install-iheaderHEADERS: $(iheader_HEADERS) @$(NORMAL_INSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(iheaderdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(iheaderdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(iheaderdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(iheaderdir)" || exit $$?; \ done uninstall-iheaderHEADERS: @$(NORMAL_UNINSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(iheaderdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(dlgdatadir)" "$(DESTDIR)$(iheaderdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dlgdataDATA install-iheaderHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dlgdataDATA uninstall-iheaderHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dlgdataDATA install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-iheaderHEADERS install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-dlgdataDATA uninstall-iheaderHEADERS sources: for f in $(libgui_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dlgdata_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/dlgsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/src/gui/gui_be.h0000644000175000017500000003277712416477066014554 00000000000000/*************************************************************************** begin : Tue Oct 02 2002 copyright : (C) 2002-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_GUI_GUI_BE_H #define GWENHYWFAR_GUI_GUI_BE_H #include #ifdef __cplusplus extern "C" { #endif GWENHYWFAR_API void GWEN_Gui_SetName(GWEN_GUI *gui, const char *name); /** * This function converts the given text from UTF-8 to the character * set selected by @ref GWEN_Gui_SetCharSet before writing it to the * given buffer. */ GWENHYWFAR_API int GWEN_Gui_ConvertFromUtf8(const GWEN_GUI *gui, const char *text, int len, GWEN_BUFFER *tbuf); /** * This function converts the given text from UTF-8 to the character * set selected by @ref GWEN_Gui_SetCharSet before writing it to the * specified stream. It is intended to be used instead of fprintf() * for all output to the terminal (stdout, stderr). */ GWENHYWFAR_API int GWEN_Gui_StdPrintf(const GWEN_GUI *gui, FILE *stream, const char *fmt, ...) GWEN_FORMAT(printf, 3, 4); /** * This function extracts the raw text (i.e. the part outside a HTML * element) so it can, for example, be fed to @ref GWEN_Gui_StdPrintf * afterwards. */ GWENHYWFAR_API void GWEN_Gui_GetRawText(const GWEN_GUI *gui, const char *text, GWEN_BUFFER *tbuf); /** @name Prototypes For Virtual User Interaction Functions * */ /*@{*/ /** * This function is used to make the application print something. * The same restrictions noted above apply to the text parameter (utf-8, * maybe containing HTML). * Please see @ref GWEN_Gui_Print for details. */ typedef int GWENHYWFAR_CB (*GWEN_GUI_PRINT_FN)(GWEN_GUI *gui, const char *docTitle, const char *docType, const char *descr, const char *text, uint32_t guiid); /** * This function retrieves a pasword or pin. */ typedef int GWENHYWFAR_CB (*GWEN_GUI_GETPASSWORD_FN)(GWEN_GUI *gui, uint32_t flags, const char *token, const char *title, const char *text, char *buffer, int minLen, int maxLen, uint32_t guiid); /** * This functions sets the status of a password. */ typedef int GWENHYWFAR_CB (*GWEN_GUI_SETPASSWORDSTATUS_FN)(GWEN_GUI *gui, const char *token, const char *pin, GWEN_GUI_PASSWORD_STATUS status, uint32_t guiid); /** * This function is called at the beginning of @ref GWEN_Logger_Log() and my be used * to intercept log messages in general (e.g. to divert them to an internal * log mechanism of the application). * @return 1 if the message has been handled by the application, * 0 if the message should be handled as usual * @param gui pointer to the gui which receives this call * @param logDomain name of the logging domain (e.g. GWEN_LOGDOMAIN) * @param priority see @ref GWEN_Logger_Log * @param s the message to be logged (this is the raw message from the caller) * */ typedef int GWENHYWFAR_CB (*GWEN_GUI_LOG_HOOK_FN)(GWEN_GUI *gui, const char *logDomain, GWEN_LOGGER_LEVEL priority, const char *s); typedef int GWENHYWFAR_CB (*GWEN_GUI_WAITFORSOCKETS_FN)(GWEN_GUI *gui, GWEN_SOCKET_LIST2 *readSockets, GWEN_SOCKET_LIST2 *writeSockets, int msecs, uint32_t guiid); typedef int GWENHYWFAR_CB (*GWEN_GUI_CHECKCERT_FN)(GWEN_GUI *gui, const GWEN_SSLCERTDESCR *cert, GWEN_SYNCIO *sio, uint32_t guiid); typedef int GWENHYWFAR_CB (*GWEN_GUI_KEYDATAFROMTEXT_OPENSSL_FN)(GWEN_GUI *gui, const char *text, unsigned char *buffer, unsigned int bufLength); typedef int GWENHYWFAR_CB (*GWEN_GUI_EXEC_DIALOG_FN)(GWEN_GUI *gui, GWEN_DIALOG *dlg, uint32_t guiid); typedef int GWENHYWFAR_CB (*GWEN_GUI_OPEN_DIALOG_FN)(GWEN_GUI *gui, GWEN_DIALOG *dlg, uint32_t guiid); typedef int GWENHYWFAR_CB (*GWEN_GUI_CLOSE_DIALOG_FN)(GWEN_GUI *gui, GWEN_DIALOG *dlg); typedef int GWENHYWFAR_CB (*GWEN_GUI_RUN_DIALOG_FN)(GWEN_GUI *gui, GWEN_DIALOG *dlg, int timeout); typedef int GWENHYWFAR_CB (*GWEN_GUI_READ_DIALOG_PREFS_FN)(GWEN_GUI *gui, const char *groupName, const char *altName, GWEN_DB_NODE **pDb); typedef int GWENHYWFAR_CB (*GWEN_GUI_WRITE_DIALOG_PREFS_FN)(GWEN_GUI *gui, const char *groupName, GWEN_DB_NODE *db); typedef int GWENHYWFAR_CB (*GWEN_GUI_GET_FILENAME_FN)(GWEN_GUI *gui, const char *caption, GWEN_GUI_FILENAME_TYPE fnt, uint32_t flags, const char *patterns, GWEN_BUFFER *pathBuffer, uint32_t guiid); typedef int GWENHYWFAR_CB (*GWEN_GUI_GETSYNCIO_FN)(GWEN_GUI *gui, const char *url, const char *defaultProto, int defaultPort, GWEN_SYNCIO **pSio); /*@}*/ /** @name Setters For Virtual User Interaction Functions * * The functions in this group set the corresponding callback function * pointers. */ /*@{*/ GWENHYWFAR_API GWEN_GUI_PRINT_FN GWEN_Gui_SetPrintFn(GWEN_GUI *gui, GWEN_GUI_PRINT_FN f); GWENHYWFAR_API GWEN_GUI_GETPASSWORD_FN GWEN_Gui_SetGetPasswordFn(GWEN_GUI *gui, GWEN_GUI_GETPASSWORD_FN f); GWENHYWFAR_API GWEN_GUI_SETPASSWORDSTATUS_FN GWEN_Gui_SetSetPasswordStatusFn(GWEN_GUI *gui, GWEN_GUI_SETPASSWORDSTATUS_FN f); GWENHYWFAR_API GWEN_GUI_LOG_HOOK_FN GWEN_Gui_SetLogHookFn(GWEN_GUI *gui, GWEN_GUI_LOG_HOOK_FN f); GWENHYWFAR_API GWEN_GUI_WAITFORSOCKETS_FN GWEN_Gui_SetWaitForSocketsFn(GWEN_GUI *gui, GWEN_GUI_WAITFORSOCKETS_FN f); GWENHYWFAR_API GWEN_GUI_CHECKCERT_FN GWEN_Gui_SetCheckCertFn(GWEN_GUI *gui, GWEN_GUI_CHECKCERT_FN f); GWENHYWFAR_API GWEN_GUI_KEYDATAFROMTEXT_OPENSSL_FN GWEN_Gui_SetKeyDataFromTextOpenSslFn(GWEN_GUI *gui, GWEN_GUI_KEYDATAFROMTEXT_OPENSSL_FN f); GWENHYWFAR_API GWEN_GUI_EXEC_DIALOG_FN GWEN_Gui_SetExecDialogFn(GWEN_GUI *gui, GWEN_GUI_EXEC_DIALOG_FN f); GWENHYWFAR_API GWEN_GUI_OPEN_DIALOG_FN GWEN_Gui_SetOpenDialogFn(GWEN_GUI *gui, GWEN_GUI_OPEN_DIALOG_FN f); GWENHYWFAR_API GWEN_GUI_CLOSE_DIALOG_FN GWEN_Gui_SetCloseDialogFn(GWEN_GUI *gui, GWEN_GUI_CLOSE_DIALOG_FN f); GWENHYWFAR_API GWEN_GUI_RUN_DIALOG_FN GWEN_Gui_SetRunDialogFn(GWEN_GUI *gui, GWEN_GUI_RUN_DIALOG_FN f); GWENHYWFAR_API GWEN_GUI_READ_DIALOG_PREFS_FN GWEN_Gui_SetReadDialogPrefsFn(GWEN_GUI *gui, GWEN_GUI_READ_DIALOG_PREFS_FN f); GWENHYWFAR_API GWEN_GUI_WRITE_DIALOG_PREFS_FN GWEN_Gui_SetWriteDialogPrefsFn(GWEN_GUI *gui, GWEN_GUI_WRITE_DIALOG_PREFS_FN f); GWENHYWFAR_API GWEN_GUI_GET_FILENAME_FN GWEN_Gui_SetGetFileNameFn(GWEN_GUI *gui, GWEN_GUI_GET_FILENAME_FN f); GWENHYWFAR_API GWEN_GUI_GETSYNCIO_FN GWEN_Gui_SetGetSyncIoFn(GWEN_GUI *gui, GWEN_GUI_GETSYNCIO_FN f); /*@}*/ /** @name Dialog Related Functions * * These are obsoleted by the GWEN_DIALOG framework. */ /*@{*/ /** * The implementation should call this function if it implements the dialog framework. * It sets the obsoleted callbacks to use the GWEN_DIALOG framework. */ GWENHYWFAR_API void GWEN_Gui_UseDialogs(GWEN_GUI *gui); /** * Let the application read a GWEN_DB. This function is used by the platform-independent * dialogs to read GUI settings (e.g. width, height etc). * * This is implemented by AB_Gui, an extension of the GWEN_GUI in AqBanking using * AqBanking's shared configuration module to load/save dialog settings. * * @return 0 on success, error code on error * * @param groupName name of the db to load * * @param altName alternative name in case there is no group of the name @b groupName * * @param pDb pointer to receive the GWEN_DB read */ GWENHYWFAR_API int GWEN_Gui_ReadDialogPrefs(const char *groupName, const char *altName, GWEN_DB_NODE **pDb); /** * Let the application write a GWEN_DB. This function is used by the platform-independent * dialogs to write GUI settings (e.g. width, height etc). * * @return 0 on success, error code on error * * @param groupName name of the db to save * * @param pDb pointer to receive the GWEN_DB read */ GWENHYWFAR_API int GWEN_Gui_WriteDialogPrefs(const char *groupName, GWEN_DB_NODE *db); /*@}*/ /** @name Prototypes For Virtual Lowlevel User Interaction Functions * * Please note that these virtual functions are now obsolete * since the dialog framework is now able to handle them. * * If these functions are unchanged then the current dialog framework implementation * will handle them. Currently there are implementations for FOX1.6, QT3 and QT4. */ /*@{*/ /** * Please see @ref GWEN_Gui_MessageBox for details. * */ typedef int (*GWEN_GUI_MESSAGEBOX_FN)(GWEN_GUI *gui, uint32_t flags, const char *title, const char *text, const char *b1, const char *b2, const char *b3, uint32_t guiid); /** * Please see @ref GWEN_Gui_InputBox for details. * */ typedef int (*GWEN_GUI_INPUTBOX_FN)(GWEN_GUI *gui, uint32_t flags, const char *title, const char *text, char *buffer, int minLen, int maxLen, uint32_t guiid); /** * Please see @ref GWEN_Gui_ShowBox for details. * */ typedef uint32_t (*GWEN_GUI_SHOWBOX_FN)(GWEN_GUI *gui, uint32_t flags, const char *title, const char *text, uint32_t guiid); /** * Please see @ref GWEN_Gui_HideBox for details. * */ typedef void (*GWEN_GUI_HIDEBOX_FN)(GWEN_GUI *gui, uint32_t id); /** * Please see @ref GWEN_Gui_ProgressStart for details. * */ typedef uint32_t (*GWEN_GUI_PROGRESS_START_FN)(GWEN_GUI *gui, uint32_t progressFlags, const char *title, const char *text, uint64_t total, uint32_t guiid); /** * Please see @ref GWEN_Gui_ProgressAdvance for details. * */ typedef int (*GWEN_GUI_PROGRESS_ADVANCE_FN)(GWEN_GUI *gui, uint32_t id, uint64_t progress); /** * Please see @ref GWEN_Gui_ProgressSetTotal for details. * */ typedef int (*GWEN_GUI_PROGRESS_SETTOTAL_FN)(GWEN_GUI *gui, uint32_t id, uint64_t total); /** * Please see @ref GWEN_Gui_ProgressLog for details. * */ typedef int (*GWEN_GUI_PROGRESS_LOG_FN)(GWEN_GUI *gui, uint32_t id, GWEN_LOGGER_LEVEL level, const char *text); /** * Please see @ref GWEN_Gui_ProgressEnd for details. * */ typedef int (*GWEN_GUI_PROGRESS_END_FN)(GWEN_GUI *gui, uint32_t id); /*@}*/ /** @name Obsolete Setters For Virtual User Interaction Functions * * These are obsoleted by the GWEN_DIALOG framework. * * If your GWEN_GUI implementation supports the GWEN_DIALOG framework (as * the provided FOX16, QT3 and QT4 implementations do) it should call * @ref GWEN_Gui_UseDialogs to make GWEN_GUI uses platform independent * dialogs for the functions in this group. */ /*@{*/ GWENHYWFAR_API GWEN_GUI_MESSAGEBOX_FN GWEN_Gui_SetMessageBoxFn(GWEN_GUI *gui, GWEN_GUI_MESSAGEBOX_FN f); GWENHYWFAR_API GWEN_GUI_INPUTBOX_FN GWEN_Gui_SetInputBoxFn(GWEN_GUI *gui, GWEN_GUI_INPUTBOX_FN f); GWENHYWFAR_API GWEN_GUI_SHOWBOX_FN GWEN_Gui_SetShowBoxFn(GWEN_GUI *gui, GWEN_GUI_SHOWBOX_FN f); GWENHYWFAR_API GWEN_GUI_HIDEBOX_FN GWEN_Gui_SetHideBoxFn(GWEN_GUI *gui, GWEN_GUI_HIDEBOX_FN f); GWENHYWFAR_API GWEN_GUI_PROGRESS_START_FN GWEN_Gui_SetProgressStartFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_START_FN f); GWENHYWFAR_API GWEN_GUI_PROGRESS_ADVANCE_FN GWEN_Gui_SetProgressAdvanceFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_ADVANCE_FN f); GWENHYWFAR_API GWEN_GUI_PROGRESS_SETTOTAL_FN GWEN_Gui_SetProgressSetTotalFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_SETTOTAL_FN f); GWENHYWFAR_API GWEN_GUI_PROGRESS_LOG_FN GWEN_Gui_SetProgressLogFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_LOG_FN f); GWENHYWFAR_API GWEN_GUI_PROGRESS_END_FN GWEN_Gui_SetProgressEndFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_END_FN f); /*@}*/ #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/gui/widget_p.h0000644000175000017500000000445212364015347015101 00000000000000/*************************************************************************** begin : Wed Jan 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_GUI_WIDGET_P_H #define GWENHYWFAR_GUI_WIDGET_P_H #include "widget_l.h" struct GWEN_WIDGET { GWEN_INHERIT_ELEMENT(GWEN_WIDGET) GWEN_TREE_ELEMENT(GWEN_WIDGET) GWEN_DIALOG *dialog; uint32_t flags; GWEN_WIDGET_TYPE wtype; char *name; int columns; int rows; int groupId; int width; int height; char *text[GWEN_WIDGET_TEXTCOUNT]; char *iconFile; char *imageFile; void *impl_data[GWEN_WIDGET_IMPLDATACOUNT]; GWEN_WIDGET_SETINTPROPERTY_FN setIntPropertyFn; GWEN_WIDGET_GETINTPROPERTY_FN getIntPropertyFn; GWEN_WIDGET_SETCHARPROPERTY_FN setCharPropertyFn; GWEN_WIDGET_GETCHARPROPERTY_FN getCharPropertyFn; GWEN_WIDGET_ADDCHILDGUIWIDGET_FN addChildGuiWidgetFn; uint32_t refCount; }; #endif gwenhywfar-4.15.2beta/src/gui/dialog.h0000644000175000017500000004035012416477066014543 00000000000000/*************************************************************************** begin : Wed Jan 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_GUI_DIALOG_H #define GWENHYWFAR_GUI_DIALOG_H #include #include #include #include #include /** @defgroup MOD_DIALOG_DIALOG Dialogs * @ingroup MOD_DIALOG * * @brief This module contains the definition of GWEN_GUI dialogs. * * A dialog contains widgets which can be accessed by name. A dialog can contain multiple * subdialogs. Widgets of a dialog and its subdialogs should have unique names. */ /*@{*/ #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_DIALOG GWEN_DIALOG; GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_DIALOG, GWENHYWFAR_API) GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_DIALOG, GWEN_Dialog, GWENHYWFAR_API) GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_DIALOG, GWEN_Dialog, GWENHYWFAR_API) #define GWEN_WIDGET_FLAGS_NONE 0x00000000L #define GWEN_WIDGET_FLAGS_FILLX 0x80000000L #define GWEN_WIDGET_FLAGS_FILLY 0x40000000L #define GWEN_WIDGET_FLAGS_READONLY 0x20000000L #define GWEN_WIDGET_FLAGS_PASSWORD 0x10000000L #define GWEN_WIDGET_FLAGS_DEFAULT_WIDGET 0x08000000L #define GWEN_WIDGET_FLAGS_DECOR_SHRINKABLE 0x04000000L #define GWEN_WIDGET_FLAGS_DECOR_STRETCHABLE 0x02000000L #define GWEN_WIDGET_FLAGS_DECOR_MINIMIZE 0x01000000L #define GWEN_WIDGET_FLAGS_DECOR_MAXIMIZE 0x00800000L #define GWEN_WIDGET_FLAGS_DECOR_CLOSE 0x00400000L #define GWEN_WIDGET_FLAGS_DECOR_MENU 0x00200000L #define GWEN_WIDGET_FLAGS_FIXED_WIDTH 0x00100000L #define GWEN_WIDGET_FLAGS_FIXED_HEIGHT 0x00080000L #define GWEN_WIDGET_FLAGS_EQUAL_WIDTH 0x00040000L #define GWEN_WIDGET_FLAGS_EQUAL_HEIGHT 0x00020000L #define GWEN_WIDGET_FLAGS_JUSTIFY_LEFT 0x00010000L #define GWEN_WIDGET_FLAGS_JUSTIFY_RIGHT 0x00008000L #define GWEN_WIDGET_FLAGS_JUSTIFY_TOP 0x00004000L #define GWEN_WIDGET_FLAGS_JUSTIFY_BOTTOM 0x00002000L #define GWEN_WIDGET_FLAGS_JUSTIFY_CENTERX 0x00001000L #define GWEN_WIDGET_FLAGS_JUSTIFY_CENTERY 0x00000800L #define GWEN_WIDGET_FLAGS_NO_WORDWRAP 0x00000400L typedef enum { GWEN_DialogEvent_TypeInit=0, GWEN_DialogEvent_TypeFini, GWEN_DialogEvent_TypeValueChanged, GWEN_DialogEvent_TypeActivated, GWEN_DialogEvent_TypeEnabled, GWEN_DialogEvent_TypeDisabled, GWEN_DialogEvent_TypeClose, GWEN_DialogEvent_TypeLast } GWEN_DIALOG_EVENTTYPE; /** * These are the predefined result codes to be returned by a signal handler. * (Note: this is not a typedef because the signal handler has to be able to * return GWEN_ERROR codes as well). */ enum { GWEN_DialogEvent_ResultHandled=0, GWEN_DialogEvent_ResultNotHandled, GWEN_DialogEvent_ResultAccept, GWEN_DialogEvent_ResultReject }; /** * The signal handler should return one of the event result code * (see @ref GWEN_DialogEvent_ResultHandled and following) or a GWEN_ERROR * code. */ typedef int GWENHYWFAR_CB (*GWEN_DIALOG_SIGNALHANDLER)(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); GWENHYWFAR_API GWEN_DIALOG *GWEN_Dialog_new(const char *dialogId); GWENHYWFAR_API void GWEN_Dialog_free(GWEN_DIALOG *dlg); /** * Read dialog description from the given XML element. */ GWENHYWFAR_API int GWEN_Dialog_ReadXml(GWEN_DIALOG *dlg, GWEN_XMLNODE *node); /** * Read dialog description from the given XML file. */ GWENHYWFAR_API int GWEN_Dialog_ReadXmlFile(GWEN_DIALOG *dlg, const char *fname); /** * The dialog id is in most cases hardcoded into the describing XML * file. It is the unique name of the dialog. This name is used to * read/write dialog preferences. */ GWENHYWFAR_API const char*GWEN_Dialog_GetId(const GWEN_DIALOG *dlg); GWENHYWFAR_API uint32_t GWEN_Dialog_GetGuiId(const GWEN_DIALOG *dlg); /** * Add a path where to find media such as icons, images etc when used * e.g. with pushbuttons or images. */ GWENHYWFAR_API void GWEN_Dialog_AddMediaPath(GWEN_DIALOG *dlg, const char *s); /** * Add paths from the given path manager. * For each entry of the given path managers path list that entry is * concatenated with the relPath argument (if not NULL) and added to the * dialogs list of media paths. * @param dlg dialog to which media paths are to be added * @param destlib see the argument of the same name in @ref GWEN_PathManager_GetPaths * @param pathName see the argument of the same name in @ref GWEN_PathManager_GetPaths * @param relPath optional relative path to be added to each entry of the given * path manager's entry to form a media path for this dialog */ GWENHYWFAR_API void GWEN_Dialog_AddMediaPathsFromPathManager(GWEN_DIALOG *dlg, const char *destlib, const char *pathName, const char *relPath); /** * Inserts a sub-dialog into the given dialog. The widgets of the subdialog become * children of the main dialog below the widget referenced to by parentName. * Please take care that the subdialog doesn't contain widgets with the same name as * the main dialog. * This only works if @ref GWEN_Gui_ExecDialog has not been called yet! * Takes over ownership of the given subdialog. */ GWENHYWFAR_API int GWEN_Dialog_AddSubDialog(GWEN_DIALOG *dlg, const char *parentWidgetName, GWEN_DIALOG *subdlg); GWENHYWFAR_API int GWEN_Dialog_RemoveWidget(GWEN_DIALOG *dlg, const char *name); /** * Sets the signal handler of the dialog. Please note that this doesn't set the signal * handler of any sub-dialog, so each dialog will only receive its own signals. */ GWENHYWFAR_API GWEN_DIALOG_SIGNALHANDLER GWEN_Dialog_SetSignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_SIGNALHANDLER fn); typedef enum { GWEN_DialogProperty_None=0, GWEN_DialogProperty_Title, GWEN_DialogProperty_Value, GWEN_DialogProperty_MinValue, GWEN_DialogProperty_MaxValue, GWEN_DialogProperty_Enabled, GWEN_DialogProperty_AddValue, GWEN_DialogProperty_ClearValues, GWEN_DialogProperty_ValueCount, GWEN_DialogProperty_ColumnWidth, GWEN_DialogProperty_Width, GWEN_DialogProperty_Height, GWEN_DialogProperty_SelectionMode, GWEN_DialogProperty_SelectionState, GWEN_DialogProperty_Focus, /** value=direction, index=column */ GWEN_DialogProperty_SortDirection, GWEN_DialogProperty_Sort, GWEN_DialogProperty_Visibility, GWEN_DialogProperty_ToolTip, GWEN_DialogProperty_Unknown=-1 } GWEN_DIALOG_PROPERTY; typedef enum { GWEN_Dialog_SelectionMode_None=0, GWEN_Dialog_SelectionMode_Single, GWEN_Dialog_SelectionMode_Multi } GWEN_DIALOG_SELECTION_MODE; typedef enum { GWEN_DialogSortDirection_None=0, GWEN_DialogSortDirection_Up, GWEN_DialogSortDirection_Down } GWEN_DIALOG_SORT_DIRECTION; /** @name Functions Available After Init Event * * Functions in this group can only be called while in a @ref GWEN_Gui_ExecDialog * loop or between calls to @ref GWEN_Gui_OpenDialog() and @ref GWEN_Gui_CloseDialog() * because these functions directly manipulate GUI widgets which are only valid in the * intervals mentioned above. */ /*@{*/ /** * This function sets the value of an integer property. * @param dlg pointer to the dialog to be manipulated * @param name name of the widget of the dialog whose property is to be * manipulated. Use NULL or an empty string to select the dialog itself * @param prop property to modify (see @ref GWEN_DialogProperty_Title ff) * @param index for widgets with array like data this is the index into that * array. Normally this value is 0. However, there are examples when this * parameter does not equal 0. The property @ref GWEN_DialogProperty_ColumnWidth * of a @ref GWEN_Widget_TypeListBox is such an example. Here the index * selects the column whose width is to be changed. * @param value the value to set * @param doSignal some implementations send the @ref GWEN_DialogEvent_TypeValueChanged * signal when values are manipulated. Set this parameter to 0 if you don't need that. * However, this is just a hint for the implementation, you should not rely on it * actually being regarded by the implementation. So you might or might not get such * a signal upon manipulation of a property. */ GWENHYWFAR_API int GWEN_Dialog_SetIntProperty(GWEN_DIALOG *dlg, const char *name, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal); /** * This function returns the value of an integer property. * @param dlg pointer to the dialog to be inspected * @param name name of the widget of the dialog whose property is to be * read. Use NULL or an empty string to select the dialog itself * @param prop property to read (see @ref GWEN_DialogProperty_Title ff) * @param index (see @ref GWEN_Dialog_SetIntProperty for an explanation) * @param defaultValue default value to be returned if the real value is unavailable */ GWENHYWFAR_API int GWEN_Dialog_GetIntProperty(GWEN_DIALOG *dlg, const char *name, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue); /** * Modify a string property. * * This might invalidate a pointer previously returned via * @ref GWEN_Dialog_GetCharProperty. */ GWENHYWFAR_API int GWEN_Dialog_SetCharProperty(GWEN_DIALOG *dlg, const char *name, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal); /** * Returns a string property. * * If the pointer returned is not the @c defaultValue but rather a pointer * generated by the dialog framework implementation then the pointer is only * guaranteed to be valid until the next call with the same values of * @c name and @c property. * * Example: If you cycle through all entries of a listbox (by modifying @c index) * each successive call overwrites the string previously returned. * However, when you call this function once with the property * @ref GWEN_DialogProperty_Title and next time with a property of * @ref GWEN_DialogProperty_Value those two pointers will not influence * each other. * @param dlg pointer to the dialog to be inspected * @param name name of the widget of the dialog whose property is to be * read. Use NULL or an empty string to select the dialog itself * @param prop property to read (see @ref GWEN_DialogProperty_Title ff) * @param index (see @ref GWEN_Dialog_SetIntProperty for an explanation) * @param defaultValue default value to be returned if the real value is unavailable (e.g. * if the current value is an empty string) */ GWENHYWFAR_API const char *GWEN_Dialog_GetCharProperty(GWEN_DIALOG *dlg, const char *name, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue); /*@}*/ /** @name Functions Available After Construction * * These functions manipulate the descriptions of dialogs and widgets, the don't operate * on the GUI widgets. That's why they are immediately available after construction. */ /*@{*/ GWENHYWFAR_API uint32_t GWEN_Dialog_GetWidgetFlags(const GWEN_DIALOG *dlg, const char *name); GWENHYWFAR_API void GWEN_Dialog_SetWidgetFlags(GWEN_DIALOG *dlg, const char *name, uint32_t fl); GWENHYWFAR_API void GWEN_Dialog_AddWidgetFlags(GWEN_DIALOG *dlg, const char *name, uint32_t fl); GWENHYWFAR_API void GWEN_Dialog_SubWidgetFlags(GWEN_DIALOG *dlg, const char *name, uint32_t fl); /** * This is another attribute from the dialog description file. It is used with * widgets like @ref GWEN_Widget_TypeLineEdit to specify the widget width in * number of characters. It is also used for @ref GWEN_Widget_TypeGridLayout to specify * the number of columns. * @param dlg pointer to the dialog to be inspected * @param name name of the widget of the dialog whose attribute is to be read. */ GWENHYWFAR_API int GWEN_Dialog_GetWidgetColumns(const GWEN_DIALOG *dlg, const char *name); /** * Set the number of columns (see @ref GWEN_Dialog_GetWidgetColumns). */ GWENHYWFAR_API void GWEN_Dialog_SetWidgetColumns(GWEN_DIALOG *dlg, const char *name, int i); /** * This is another attribute from the dialog description file. It is used with * widgets @ref GWEN_Widget_TypeGridLayout to specify the number of rows. * @param dlg pointer to the dialog to be inspected * @param name name of the widget of the dialog whose attribute is to be read. */ GWENHYWFAR_API int GWEN_Dialog_GetWidgetRows(const GWEN_DIALOG *dlg, const char *name); /** * Set the number of columns (see @ref GWEN_Dialog_GetWidgetRows). */ GWENHYWFAR_API void GWEN_Dialog_SetWidgetRows(GWEN_DIALOG *dlg, const char *name, int i); GWENHYWFAR_API const char *GWEN_Dialog_GetWidgetText(const GWEN_DIALOG *dlg, const char *name); GWENHYWFAR_API void GWEN_Dialog_SetWidgetText(GWEN_DIALOG *dlg, const char *name, const char *t); /** * Returns a DB which can be used to read and store preference for the dialog. * Most dialogs in AqBanking use this to remember the dialog geometry or the widths * of columns in lists etc. * This DB is automatically read from within the constructor (@ref GWEN_Dialog_new) * and written from within the destructor (@ref GWEN_Dialog_free). This is achieved by * calling the virtual functions @ref GWEN_Gui_ReadDialogPrefs and @ref GWEN_Gui_WriteDialogPrefs * respectively. * However, the current GWEN_GUI implementation must implement these functions. Fortunately, * AqBanking's GUI implementation (use it with @ref AB_Gui_Extend) does that. It reads/writes * those dialog settings from/into its shared settings database. */ GWENHYWFAR_API GWEN_DB_NODE *GWEN_Dialog_GetPreferences(const GWEN_DIALOG *dlg); /*@}*/ /** @name Localisation * */ /*@{*/ /** * Set the I18N domain (see @ref GWEN_Dialog_GetI18nDomain). */ GWENHYWFAR_API void GWEN_Dialog_SetI18nDomain(GWEN_DIALOG *dlg, const char *s); /** * Returns the I18N domain of the dialog. This is normally taken from the dialog * description file (attribute "i18n" of the "dialog" element). * This domain is used to localize strings of the dialog description file by using * it as first argument to @ref GWEN_I18N_Translate(). * This allows for translation within the context of the dialog. AqBanking's dialogs * use "aqbanking" as I18N domain, so the translation for its dialogs also appear in * its pot files. */ GWENHYWFAR_API const char *GWEN_Dialog_GetI18nDomain(const GWEN_DIALOG *dlg); /** * Translates a string within the I18N domain of the dialog (see @ref GWEN_Dialog_GetI18nDomain). */ GWENHYWFAR_API const char *GWEN_Dialog_TranslateString(const GWEN_DIALOG *dlg, const char *s); /*@}*/ #ifdef __cplusplus } #endif /*@}*/ #endif gwenhywfar-4.15.2beta/src/gui/dialog_p.h0000644000175000017500000000473112416477066015065 00000000000000/*************************************************************************** begin : Wed Jan 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_GUI_DIALOG_P_H #define GWENHYWFAR_GUI_DIALOG_P_H #include struct GWEN_DIALOG { GWEN_INHERIT_ELEMENT(GWEN_DIALOG) GWEN_LIST_ELEMENT(GWEN_DIALOG) char *dialogId; uint32_t flags; GWEN_WIDGET_TREE *widgets; GWEN_DIALOG_SIGNALHANDLER signalHandler; GWEN_DIALOG_SETINTPROPERTY_FN setIntPropertyFn; GWEN_DIALOG_GETINTPROPERTY_FN getIntPropertyFn; GWEN_DIALOG_SETCHARPROPERTY_FN setCharPropertyFn; GWEN_DIALOG_GETCHARPROPERTY_FN getCharPropertyFn; GWEN_DIALOG *parentDialog; GWEN_DIALOG_LIST *subDialogs; GWEN_WIDGET *parentWidget; GWEN_WIDGET *firstSubWidget; uint32_t guiId; GWEN_DB_NODE *dbPreferences; GWEN_STRINGLIST *mediaPaths; char *i18nDomain; uint32_t refCount; }; static int GWEN_Dialog__ReadXmlWidget(GWEN_DIALOG *dlg, GWEN_WIDGET *wparent, GWEN_XMLNODE *node); #endif gwenhywfar-4.15.2beta/src/gui/gui_p.h0000644000175000017500000001325112416477066014407 00000000000000/*************************************************************************** begin : Tue Oct 02 2002 copyright : (C) 2002-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_GUI_GUI_P_H #define GWENHYWFAR_GUI_GUI_P_H #include "gui_l.h" #include "progressdata_l.h" #include struct GWEN_GUI { GWEN_INHERIT_ELEMENT(GWEN_GUI) GWEN_GUI_MESSAGEBOX_FN messageBoxFn; GWEN_GUI_INPUTBOX_FN inputBoxFn; GWEN_GUI_SHOWBOX_FN showBoxFn; GWEN_GUI_HIDEBOX_FN hideBoxFn; GWEN_GUI_PROGRESS_START_FN progressStartFn; GWEN_GUI_PROGRESS_ADVANCE_FN progressAdvanceFn; GWEN_GUI_PROGRESS_SETTOTAL_FN progressSetTotalFn; GWEN_GUI_PROGRESS_LOG_FN progressLogFn; GWEN_GUI_PROGRESS_END_FN progressEndFn; GWEN_GUI_PRINT_FN printFn; GWEN_GUI_GETPASSWORD_FN getPasswordFn; GWEN_GUI_SETPASSWORDSTATUS_FN setPasswordStatusFn; GWEN_GUI_LOG_HOOK_FN logHookFn; GWEN_GUI_WAITFORSOCKETS_FN waitForSocketsFn; GWEN_GUI_CHECKCERT_FN checkCertFn; GWEN_GUI_KEYDATAFROMTEXT_OPENSSL_FN keyDataFromTextOpenSslFn; GWEN_GUI_EXEC_DIALOG_FN execDialogFn; GWEN_GUI_OPEN_DIALOG_FN openDialogFn; GWEN_GUI_CLOSE_DIALOG_FN closeDialogFn; GWEN_GUI_RUN_DIALOG_FN runDialogFn; GWEN_GUI_READ_DIALOG_PREFS_FN readDialogPrefsFn; GWEN_GUI_WRITE_DIALOG_PREFS_FN writeDialogPrefsFn; GWEN_GUI_GET_FILENAME_FN getFileNameFn; GWEN_GUI_GETSYNCIO_FN getSyncIoFn; uint32_t flags; GWEN_PROGRESS_DATA_TREE *progressDataTree; GWEN_DIALOG_LIST *activeDialogs; uint32_t nextProgressId; uint32_t lastProgressId; uint32_t nextDialogId; char *name; char *charSet; int inLogHook; GWEN_DB_NODE *dbPasswords; GWEN_PASSWD_STORE *passwdStore; GWEN_STRINGLIST *badPasswords; int persistentPasswords; GWEN_LOGGER_LEVEL minProgressLogLevel; uint32_t refCount; }; static int GWENHYWFAR_CB GWEN_Gui_CheckCertBuiltIn(GWEN_GUI *gui, const GWEN_SSLCERTDESCR *cd, GWEN_SYNCIO *sio, uint32_t guiid); static void GWEN_Gui_Internal_CheckShow(GWEN_GUI *gui, GWEN_PROGRESS_DATA *pd); static uint32_t GWEN_Gui_Internal_ProgressStart(GWEN_GUI *gui, uint32_t progressFlags, const char *title, const char *text, uint64_t total, uint32_t guiid); static int GWEN_Gui_Internal_ProgressEnd(GWEN_GUI *gui, uint32_t pid); static int GWEN_Gui_Internal_ProgressAdvance(GWEN_GUI *gui, uint32_t pid, uint64_t progress); static int GWEN_Gui_Internal_ProgressSetTotal(GWEN_GUI *gui, uint32_t pid, uint64_t total); static int GWEN_Gui_Internal_ProgressLog(GWEN_GUI *gui, uint32_t pid, GWEN_LOGGER_LEVEL level, const char *text); static int GWEN_Gui_Internal_InputBox(GWEN_GUI *gui, uint32_t flags, const char *title, const char *text, char *buffer, int minLen, int maxLen, uint32_t guiid); static int GWEN_Gui_Internal_MessageBox(GWEN_GUI *gui, uint32_t flags, const char *title, const char *text, const char *b1, const char *b2, const char *b3, uint32_t guiid); static uint32_t GWEN_Gui_Internal_ShowBox(GWEN_GUI *gui, uint32_t flags, const char *title, const char *text, uint32_t guiid); static void GWEN_Gui_Internal_HideBox(GWEN_GUI *gui, uint32_t id); static int GWENHYWFAR_CB GWEN_Gui_Internal_GetSyncIo(GWEN_GUI *gui, const char *url, const char *defaultProto, int defaultPort, GWEN_SYNCIO **pSio); static int GWENHYWFAR_CB GWEN_Gui_Internal_SetPasswordStatus(GWEN_GUI *gui, const char *token, const char *pin, GWEN_GUI_PASSWORD_STATUS status, GWEN_UNUSED uint32_t guiid); static int GWENHYWFAR_CB GWEN_Gui_Internal_GetPassword(GWEN_GUI *gui, uint32_t flags, const char *token, const char *title, const char *text, char *buffer, int minLen, int maxLen, uint32_t guiid); static int GWEN_Gui__HashPair(const char *token, const char *pin, GWEN_BUFFER *buf); #endif gwenhywfar-4.15.2beta/src/gui/dlg_input.c0000644000175000017500000002302612416477066015265 00000000000000/*************************************************************************** begin : Wed Feb 17 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "dlg_input_p.h" #include #include #include #include GWEN_INHERIT(GWEN_DIALOG, GWEN_DLGINPUT) GWEN_DIALOG *GWEN_DlgInput_new(uint32_t flags, const char *title, const char *text, int minLen, int maxLen) { GWEN_DIALOG *dlg; GWEN_DLGINPUT *xdlg; GWEN_BUFFER *fbuf; GWEN_GUI *gui; uint32_t gflags=0; int n; int rv; char dlgNameBuf[128]; /* get GUI flags */ gui=GWEN_Gui_GetGui(); if (gui) gflags=GWEN_Gui_GetFlags(gui); /* setup dialog name */ n=0; if (flags & GWEN_GUI_INPUT_FLAGS_CONFIRM) n|=1; if ( (gflags & GWEN_GUI_FLAGS_PERMPASSWORDS) && !(flags & GWEN_GUI_INPUT_FLAGS_DIRECT) && !(flags & GWEN_GUI_INPUT_FLAGS_TAN) && !(flags & GWEN_GUI_INPUT_FLAGS_DIRECT) ) n|=2; snprintf(dlgNameBuf, sizeof(dlgNameBuf)-1, "dlg_gwen_input%d", n); dlgNameBuf[sizeof(dlgNameBuf)-1]=0; dlg=GWEN_Dialog_new(dlgNameBuf); GWEN_NEW_OBJECT(GWEN_DLGINPUT, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, GWEN_DLGINPUT, dlg, xdlg, GWEN_DlgInput_FreeData); GWEN_Dialog_SetSignalHandler(dlg, GWEN_DlgInput_SignalHandler); /* get path of dialog description file */ fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_PathManager_FindFile(GWEN_PM_LIBNAME, GWEN_PM_SYSDATADIR, "gwenhywfar/dialogs/dlg_input.dlg", fbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Dialog description file not found (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } /* read dialog from dialog description file */ rv=GWEN_Dialog_ReadXmlFile(dlg, GWEN_Buffer_GetStart(fbuf)); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } GWEN_Buffer_free(fbuf); xdlg->flags=flags; if (title) xdlg->title=strdup(title); if (text) xdlg->text=strdup(text); xdlg->minLen=minLen; xdlg->maxLen=maxLen; if (!(flags & GWEN_GUI_INPUT_FLAGS_SHOW)) { GWEN_Dialog_AddWidgetFlags(dlg, "input1", GWEN_WIDGET_FLAGS_PASSWORD); GWEN_Dialog_AddWidgetFlags(dlg, "input2", GWEN_WIDGET_FLAGS_PASSWORD); } if (maxLen>32) { GWEN_Dialog_SetWidgetColumns(dlg, "input1", 64); GWEN_Dialog_SetWidgetColumns(dlg, "input2", 64); } else { GWEN_Dialog_SetWidgetColumns(dlg, "input1", 32); GWEN_Dialog_SetWidgetColumns(dlg, "input2", 32); } if (!(flags & GWEN_GUI_INPUT_FLAGS_CONFIRM)) { GWEN_Dialog_RemoveWidget(dlg, "input2"); GWEN_Dialog_RemoveWidget(dlg, "label2"); } if (!(n & 2)) { GWEN_Dialog_RemoveWidget(dlg, "storePasswordCheck"); } return dlg; } void GWENHYWFAR_CB GWEN_DlgInput_FreeData(void *bp, void *p) { GWEN_DLGINPUT *xdlg; xdlg=(GWEN_DLGINPUT*) p; if (xdlg->response) { memset(xdlg->response, 0, strlen(xdlg->response)); xdlg->response=NULL; } free(xdlg->title); free(xdlg->text); GWEN_FREE_OBJECT(xdlg); } int GWEN_DlgInput_CheckInput(GWEN_DIALOG *dlg) { GWEN_DLGINPUT *xdlg; const char *s1; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GWEN_DLGINPUT, dlg); assert(xdlg); s1=GWEN_Dialog_GetCharProperty(dlg, "input1", GWEN_DialogProperty_Value, 0, NULL); if (xdlg->flags & GWEN_GUI_INPUT_FLAGS_CONFIRM) { const char *s2; s2=GWEN_Dialog_GetCharProperty(dlg, "input2", GWEN_DialogProperty_Value, 0, NULL); /* check for equality */ if (!s1 || !s2 || strcasecmp(s1, s2)!=0) return -1; } if (!s1) return -1; if (xdlg->minLen>=0) { if (strlen(s1)minLen) return -1; } return 0; } void GWEN_DlgInput_Init(GWEN_DIALOG *dlg) { GWEN_DLGINPUT *xdlg; GWEN_DB_NODE *dbParams; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GWEN_DLGINPUT, dlg); assert(xdlg); dbParams=GWEN_Dialog_GetPreferences(dlg); assert(dbParams); #if 0 /* read width */ i=GWEN_DB_GetIntValue(dbParams, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbParams, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); #endif /* special stuff */ if (xdlg->title) GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, xdlg->title, 0); if (xdlg->text) GWEN_Dialog_SetCharProperty(dlg, "descrLabel", GWEN_DialogProperty_Title, 0, xdlg->text, 0); GWEN_Dialog_SetIntProperty(dlg, "okButton", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "abortButton", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "input1", GWEN_DialogProperty_Focus, 0, 1, 0); xdlg->wasInit=1; } void GWEN_DlgInput_Fini(GWEN_DIALOG *dlg) { GWEN_DLGINPUT *xdlg; GWEN_DB_NODE *dbParams; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GWEN_DLGINPUT, dlg); assert(xdlg); dbParams=GWEN_Dialog_GetPreferences(dlg); assert(dbParams); if (xdlg->response) { memset(xdlg->response, 0, strlen(xdlg->response)); xdlg->response=NULL; } if (GWEN_DlgInput_CheckInput(dlg)==0) { const char *s; s=GWEN_Dialog_GetCharProperty(dlg, "input1", GWEN_DialogProperty_Value, 0, NULL); if (s) xdlg->response=strdup(s); xdlg->flagAllowStore=GWEN_Dialog_GetIntProperty(dlg, "storePasswordCheck", GWEN_DialogProperty_Value, 0, 0); } #if 0 /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); if (iresponse) { int l; l=strlen(xdlg->response); if ((l+1)>size) { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small"); return GWEN_ERROR_BUFFER_OVERFLOW; } /* buffer ok, copy */ memmove(buffer, xdlg->response, l+1); return 0; } return GWEN_ERROR_NO_DATA; } int GWEN_DlgInput_GetFlagAllowStore(GWEN_DIALOG *dlg) { GWEN_DLGINPUT *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GWEN_DLGINPUT, dlg); assert(xdlg); return xdlg->flagAllowStore; } gwenhywfar-4.15.2beta/src/gui/progressdata.c0000644000175000017500000001127512416477066016001 00000000000000/*************************************************************************** begin : Tue Feb 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "progressdata_p.h" #include #include GWEN_TREE_FUNCTIONS(GWEN_PROGRESS_DATA, GWEN_ProgressData) GWEN_PROGRESS_DATA *GWEN_ProgressData_new(GWEN_GUI *gui, uint32_t id, uint32_t progressFlags, const char *title, const char *text, uint64_t total) { GWEN_PROGRESS_DATA *pd; GWEN_NEW_OBJECT(GWEN_PROGRESS_DATA, pd); GWEN_TREE_INIT(GWEN_PROGRESS_DATA, pd); pd->gui=gui; pd->id=id; pd->flags=progressFlags; if (title) pd->title=strdup(title); if (text) pd->text=strdup(text); pd->total=total; pd->logBuf=GWEN_Buffer_new(0, 1024, 0, 1); pd->startTime=time(0); return pd; } void GWEN_ProgressData_free(GWEN_PROGRESS_DATA *pd) { if (pd) { GWEN_TREE_FINI(GWEN_PROGRESS_DATA, pd); free(pd->title); free(pd->text); GWEN_Buffer_free(pd->logBuf); GWEN_FREE_OBJECT(pd); } } GWEN_GUI *GWEN_ProgressData_GetGui(const GWEN_PROGRESS_DATA *pd) { assert(pd); return pd->gui; } uint32_t GWEN_ProgressData_GetId(const GWEN_PROGRESS_DATA *pd) { assert(pd); return pd->id; } uint32_t GWEN_ProgressData_GetPreviousId(const GWEN_PROGRESS_DATA *pd) { assert(pd); return pd->previousId; } void GWEN_ProgressData_SetPreviousId(GWEN_PROGRESS_DATA *pd, uint32_t i) { assert(pd); pd->previousId=i; } uint32_t GWEN_ProgressData_GetFlags(const GWEN_PROGRESS_DATA *pd) { assert(pd); return pd->flags; } void GWEN_ProgressData_AddFlags(GWEN_PROGRESS_DATA *pd, uint32_t fl) { assert(pd); pd->flags|=fl; } void GWEN_ProgressData_SubFlags(GWEN_PROGRESS_DATA *pd, uint32_t fl) { assert(pd); pd->flags&=~fl; } const char *GWEN_ProgressData_GetTitle(const GWEN_PROGRESS_DATA *pd) { assert(pd); return pd->title; } const char *GWEN_ProgressData_GetText(const GWEN_PROGRESS_DATA *pd) { assert(pd); return pd->text; } uint64_t GWEN_ProgressData_GetTotal(const GWEN_PROGRESS_DATA *pd) { assert(pd); return pd->total; } uint64_t GWEN_ProgressData_GetCurrent(const GWEN_PROGRESS_DATA *pd) { assert(pd); return pd->current; } void GWEN_ProgressData_SetCurrent(GWEN_PROGRESS_DATA *pd, uint64_t i) { assert(pd); pd->current=i; } void GWEN_ProgressData_SetTotal(GWEN_PROGRESS_DATA *pd, uint64_t i) { assert(pd); pd->total=i; } GWEN_BUFFER *GWEN_ProgressData_GetLogBuf(const GWEN_PROGRESS_DATA *pd) { assert(pd); return pd->logBuf; } const char *GWEN_ProgressData_GetLogText(const GWEN_PROGRESS_DATA *pd) { assert(pd); return GWEN_Buffer_GetStart(pd->logBuf); } void GWEN_ProgressData_ClearLogText(GWEN_PROGRESS_DATA *pd) { assert(pd); GWEN_Buffer_Reset(pd->logBuf); } void GWEN_ProgressData_AddLogText(GWEN_PROGRESS_DATA *pd, GWEN_LOGGER_LEVEL level, const char *s) { assert(pd); GWEN_Buffer_AppendString(pd->logBuf, s); } int GWEN_ProgressData_GetAborted(const GWEN_PROGRESS_DATA *pd) { assert(pd); return pd->aborted; } void GWEN_ProgressData_SetAborted(GWEN_PROGRESS_DATA *pd, int i) { assert(pd); pd->aborted=i; } int GWEN_ProgressData_GetShown(const GWEN_PROGRESS_DATA *pd) { assert(pd); return pd->shown; } void GWEN_ProgressData_SetShown(GWEN_PROGRESS_DATA *pd, int i) { assert(pd); pd->shown=i; } time_t GWEN_ProgressData_GetStartTime(const GWEN_PROGRESS_DATA *pd) { assert(pd); return pd->startTime; } void GWEN_ProgressData_SetStartTime(GWEN_PROGRESS_DATA *pd, time_t t) { assert(pd); pd->startTime=t; } time_t GWEN_ProgressData_GetCheckTime(const GWEN_PROGRESS_DATA *pd) { assert(pd); return pd->checkTime; } void GWEN_ProgressData_SetCheckTime(GWEN_PROGRESS_DATA *pd, time_t t) { assert(pd); pd->checkTime=t; } GWEN_DIALOG *GWEN_ProgressData_GetDialog(const GWEN_PROGRESS_DATA *pd) { assert(pd); return pd->dialog; } void GWEN_ProgressData_SetDialog(GWEN_PROGRESS_DATA *pd, GWEN_DIALOG *dlg) { assert(pd); pd->dialog=dlg; } GWEN_PROGRESS_DATA *GWEN_ProgressData_Tree_FindProgressById(GWEN_PROGRESS_DATA_TREE *pt, uint32_t id) { GWEN_PROGRESS_DATA *pd; pd=GWEN_ProgressData_Tree_GetFirst(pt); while(pd) { if (GWEN_ProgressData_GetId(pd)==id) break; pd=GWEN_ProgressData_Tree_GetBelow(pd); } return pd; } gwenhywfar-4.15.2beta/src/gui/progressdata_l.h0000644000175000017500000000562312416477066016321 00000000000000/*************************************************************************** begin : Tue Feb 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_GUI_PROGRESSDATA_L_H #define GWEN_GUI_PROGRESSDATA_L_H #include #include #include #include typedef struct GWEN_PROGRESS_DATA GWEN_PROGRESS_DATA; GWEN_TREE_FUNCTION_DEFS(GWEN_PROGRESS_DATA, GWEN_ProgressData) GWEN_PROGRESS_DATA *GWEN_ProgressData_new(GWEN_GUI *gui, uint32_t id, uint32_t progressFlags, const char *title, const char *text, uint64_t total); void GWEN_ProgressData_free(GWEN_PROGRESS_DATA *pd); GWEN_GUI *GWEN_ProgressData_GetGui(const GWEN_PROGRESS_DATA *pd); uint32_t GWEN_ProgressData_GetId(const GWEN_PROGRESS_DATA *pd); uint32_t GWEN_ProgressData_GetPreviousId(const GWEN_PROGRESS_DATA *pd); void GWEN_ProgressData_SetPreviousId(GWEN_PROGRESS_DATA *pd, uint32_t i); uint32_t GWEN_ProgressData_GetFlags(const GWEN_PROGRESS_DATA *pd); void GWEN_ProgressData_AddFlags(GWEN_PROGRESS_DATA *pd, uint32_t fl); void GWEN_ProgressData_SubFlags(GWEN_PROGRESS_DATA *pd, uint32_t fl); const char *GWEN_ProgressData_GetTitle(const GWEN_PROGRESS_DATA *pd); const char *GWEN_ProgressData_GetText(const GWEN_PROGRESS_DATA *pd); uint64_t GWEN_ProgressData_GetTotal(const GWEN_PROGRESS_DATA *pd); void GWEN_ProgressData_SetTotal(GWEN_PROGRESS_DATA *pd, uint64_t i); uint64_t GWEN_ProgressData_GetCurrent(const GWEN_PROGRESS_DATA *pd); void GWEN_ProgressData_SetCurrent(GWEN_PROGRESS_DATA *pd, uint64_t i); const char *GWEN_ProgressData_GetLogText(const GWEN_PROGRESS_DATA *pd); void GWEN_ProgressData_ClearLogText(GWEN_PROGRESS_DATA *pd); void GWEN_ProgressData_AddLogText(GWEN_PROGRESS_DATA *pd, GWEN_LOGGER_LEVEL level, const char *s); int GWEN_ProgressData_GetAborted(const GWEN_PROGRESS_DATA *pd); void GWEN_ProgressData_SetAborted(GWEN_PROGRESS_DATA *pd, int i); int GWEN_ProgressData_GetShown(const GWEN_PROGRESS_DATA *pd); void GWEN_ProgressData_SetShown(GWEN_PROGRESS_DATA *pd, int i); time_t GWEN_ProgressData_GetStartTime(const GWEN_PROGRESS_DATA *pd); void GWEN_ProgressData_SetStartTime(GWEN_PROGRESS_DATA *pd, time_t t); time_t GWEN_ProgressData_GetCheckTime(const GWEN_PROGRESS_DATA *pd); void GWEN_ProgressData_SetCheckTime(GWEN_PROGRESS_DATA *pd, time_t t); GWEN_PROGRESS_DATA *GWEN_ProgressData_Tree_FindProgressById(GWEN_PROGRESS_DATA_TREE *pt, uint32_t id); GWEN_DIALOG *GWEN_ProgressData_GetDialog(const GWEN_PROGRESS_DATA *pd); void GWEN_ProgressData_SetDialog(GWEN_PROGRESS_DATA *pd, GWEN_DIALOG *dlg); #endif gwenhywfar-4.15.2beta/src/gui/gui.c0000644000175000017500000017141112452070262014051 00000000000000/*************************************************************************** begin : Fri Feb 07 2003 copyright : (C) 2003-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #ifndef ICONV_CONST # define ICONV_CONST #endif #include "gui_p.h" #include "dlg_input_l.h" #include "dlg_message_l.h" #include "dlg_progress_l.h" #include "dlg_showbox_l.h" #include "i18n_l.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #if defined (HAVE_LANGINFO_H) # include #elif defined (HAVE_LOCALCHARSET_H) # include #endif #ifdef HAVE_ICONV_H # include #endif static GWEN_GUI *gwenhywfar_gui=NULL; GWEN_INHERIT_FUNCTIONS(GWEN_GUI) GWEN_GUI *GWEN_Gui_new(void) { GWEN_GUI *gui; GWEN_NEW_OBJECT(GWEN_GUI, gui); GWEN_INHERIT_INIT(GWEN_GUI, gui); gui->refCount=1; gui->checkCertFn=GWEN_Gui_CheckCertBuiltIn; gui->getSyncIoFn=GWEN_Gui_Internal_GetSyncIo; gui->getPasswordFn=GWEN_Gui_Internal_GetPassword; gui->setPasswordStatusFn=GWEN_Gui_Internal_SetPasswordStatus; gui->progressDataTree=GWEN_ProgressData_Tree_new(); gui->activeDialogs=GWEN_Dialog_List_new(); GWEN_Gui_SetCharSet(gui, ""); gui->dbPasswords=GWEN_DB_Group_new("passwords"); gui->badPasswords=GWEN_StringList_new(); gui->minProgressLogLevel=GWEN_LoggerLevel_Info; return gui; } void GWEN_Gui_free(GWEN_GUI *gui) { if (gui) { assert(gui->refCount); if ((--gui->refCount)==0) { GWEN_INHERIT_FINI(GWEN_GUI, gui); GWEN_Dialog_List_free(gui->activeDialogs); GWEN_ProgressData_Tree_free(gui->progressDataTree); free(gui->name); free(gui->charSet); GWEN_DB_Group_free(gui->dbPasswords); if (gui->passwdStore) GWEN_PasswordStore_free(gui->passwdStore); GWEN_StringList_free(gui->badPasswords); GWEN_FREE_OBJECT(gui); } } } void GWEN_Gui_UseDialogs(GWEN_GUI *gui) { assert(gui); DBG_INFO(GWEN_LOGDOMAIN, "Using own callbacks in gui %p", gui); gui->progressStartFn=GWEN_Gui_Internal_ProgressStart; gui->progressAdvanceFn=GWEN_Gui_Internal_ProgressAdvance; gui->progressSetTotalFn=GWEN_Gui_Internal_ProgressSetTotal; gui->progressLogFn=GWEN_Gui_Internal_ProgressLog; gui->progressEndFn=GWEN_Gui_Internal_ProgressEnd; gui->inputBoxFn=GWEN_Gui_Internal_InputBox; gui->messageBoxFn=GWEN_Gui_Internal_MessageBox; gui->showBoxFn=GWEN_Gui_Internal_ShowBox; gui->hideBoxFn=GWEN_Gui_Internal_HideBox; } void GWEN_Gui_Attach(GWEN_GUI *gui) { assert(gui); assert(gui->refCount); gui->refCount++; } void GWEN_Gui_SetGui(GWEN_GUI *gui) { if (gui) GWEN_Gui_Attach(gui); if (gwenhywfar_gui) GWEN_Gui_free(gwenhywfar_gui); gwenhywfar_gui=gui; } GWEN_GUI *GWEN_Gui_GetGui(void) { return gwenhywfar_gui; } int GWEN_Gui_ConvertString(const char *text, size_t len, GWEN_BUFFER *tbuf, const char *fromCs, const char *toCs) { #ifdef HAVE_ICONV int rv=0; iconv_t ic; assert(tbuf); ic=iconv_open(toCs, fromCs); if (ic==(iconv_t)-1) { DBG_ERROR(GWEN_LOGDOMAIN, "Cannot convert from \"%s\" to \"%s\", %s", fromCs, toCs, strerror(errno)); rv=GWEN_ERROR_GENERIC; } else { /* Some systems have iconv in libc, some have it in libiconv (OSF/1 and those with the standalone portable GNU libiconv installed). Check which one is available. The define ICONV_CONST will be "" or "const" accordingly. */ ICONV_CONST char *pInbuf; char *pOutbuf; size_t inLeft; size_t outLeft; size_t done; size_t space; /* convert */ pInbuf=(char*)text; inLeft=len; outLeft=GWEN_Buffer_GetMaxUnsegmentedWrite(tbuf); space=outLeft; retry: pOutbuf=GWEN_Buffer_GetPosPointer(tbuf); done=iconv(ic, &pInbuf, &inLeft, &pOutbuf, &outLeft); GWEN_Buffer_SetPos(tbuf, space-outLeft); GWEN_Buffer_AdjustUsedBytes(tbuf); if (done==(size_t)-1) { if (errno==E2BIG) { uint32_t room; room=2*inLeft; if (room<=outLeft) room+=outLeft; GWEN_Buffer_AllocRoom(tbuf, room); /* How much additional room has actually been allocated? */ room=GWEN_Buffer_GetMaxUnsegmentedWrite(tbuf)-outLeft; outLeft+=room; space+=room; goto retry; } DBG_ERROR(GWEN_LOGDOMAIN, "Error in conversion: %s (%d)", strerror(errno), errno); rv=GWEN_ERROR_GENERIC; } else { DBG_DEBUG(GWEN_LOGDOMAIN, "Conversion done."); } iconv_close(ic); } return rv; #else /* !HAVE_ICONV */ return GWEN_Buffer_AppendBytes(tbuf, text, len); #endif } int GWEN_Gui_ConvertFromUtf8(const GWEN_GUI *gui, const char *text, int len, GWEN_BUFFER *tbuf) { int rv; rv=GWEN_Gui_ConvertString(text, len, tbuf, "UTF-8", gui->charSet); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int GWEN_Gui_StdPrintf(const GWEN_GUI *gui, FILE *stream, const char *fmt, ...) { va_list args; int rv; assert(gui); va_start(args, fmt); #ifndef HAVE_ICONV rv=vfprintf(stream, fmt, args); #else if (!gui->charSet) rv=vfprintf(stderr, fmt, args); else { GWEN_BUFFER *tbuf; GWEN_BUFFER *outbuf; size_t space; tbuf=GWEN_Buffer_new(0, 256, 0, 1); space=vsnprintf(GWEN_Buffer_GetStart(tbuf), 256, fmt, args); if (space>=256) { GWEN_Buffer_AllocRoom(tbuf, space); va_end(args); va_start(args, fmt); vsprintf(GWEN_Buffer_GetStart(tbuf), fmt, args); } GWEN_Buffer_IncrementPos(tbuf, space); GWEN_Buffer_AdjustUsedBytes(tbuf); outbuf=GWEN_Buffer_new(0, 2*space, 0, 1); rv=GWEN_Gui_ConvertString(GWEN_Buffer_GetStart(tbuf), space, outbuf, "UTF-8", gui->charSet); if (rv) { GWEN_Buffer_free(outbuf); outbuf=tbuf; } else GWEN_Buffer_free(tbuf); /* let's try to return the same value as fprintf() would */ if (fputs(GWEN_Buffer_GetStart(outbuf), stderr)!=EOF) rv=space; else rv=EOF; GWEN_Buffer_free(outbuf); } #endif va_end(args); return rv; } int GWEN_Gui_ReadString(const char *text, GWEN_BUFFER *tbuf) { #ifdef HAVE_ICONV if (gwenhywfar_gui) { const char *fromCs; if (gwenhywfar_gui->charSet) fromCs=gwenhywfar_gui->charSet; else /* UTF-8 to UTF-8 conversion does not seem to make much sense, but * it is a convenient way to check whether the input text actually * is properly UTF-8 encoded. */ fromCs="UTF-8"; return GWEN_Gui_ConvertString(text, strlen(text), tbuf, fromCs, "UTF-8"); } else #endif /* HAVE_ICONV */ return GWEN_Buffer_AppendString(tbuf, text); } void GWEN_Gui_GetRawText(const GWEN_GUI *gui, const char *text, GWEN_BUFFER *tbuf) { size_t len; const char *p; assert(text); p=text; while ((p=strchr(p, '<'))) { const char *t; t=p; t++; if (toupper(*t)=='H') { t++; if (toupper(*t)=='T') { t++; if (toupper(*t)=='M') { t++; if (toupper(*t)=='L') { break; } } } } p++; } /* while */ if (p) len=p-text; else len=strlen(text); GWEN_Buffer_AppendBytes(tbuf, text, len); } GWEN_GUI_MESSAGEBOX_FN GWEN_Gui_SetMessageBoxFn(GWEN_GUI *gui, GWEN_GUI_MESSAGEBOX_FN f) { GWEN_GUI_MESSAGEBOX_FN of; assert(gui); of=gui->messageBoxFn; gui->messageBoxFn=f; return of; } GWEN_GUI_INPUTBOX_FN GWEN_Gui_SetInputBoxFn(GWEN_GUI *gui, GWEN_GUI_INPUTBOX_FN f) { GWEN_GUI_INPUTBOX_FN of; assert(gui); of=gui->inputBoxFn; gui->inputBoxFn=f; return of; } GWEN_GUI_SHOWBOX_FN GWEN_Gui_SetShowBoxFn(GWEN_GUI *gui, GWEN_GUI_SHOWBOX_FN f) { GWEN_GUI_SHOWBOX_FN of; assert(gui); of=gui->showBoxFn; gui->showBoxFn=f; return of; } GWEN_GUI_HIDEBOX_FN GWEN_Gui_SetHideBoxFn(GWEN_GUI *gui, GWEN_GUI_HIDEBOX_FN f) { GWEN_GUI_HIDEBOX_FN of; assert(gui); of=gui->hideBoxFn; gui->hideBoxFn=f; return of; } GWEN_GUI_PROGRESS_START_FN GWEN_Gui_SetProgressStartFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_START_FN f) { GWEN_GUI_PROGRESS_START_FN of; assert(gui); of=gui->progressStartFn; gui->progressStartFn=f; return of; } GWEN_GUI_PROGRESS_ADVANCE_FN GWEN_Gui_SetProgressAdvanceFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_ADVANCE_FN f) { GWEN_GUI_PROGRESS_ADVANCE_FN of; assert(gui); of=gui->progressAdvanceFn; gui->progressAdvanceFn=f; return of; } GWEN_GUI_PROGRESS_SETTOTAL_FN GWEN_Gui_SetProgressSetTotalFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_SETTOTAL_FN f) { GWEN_GUI_PROGRESS_SETTOTAL_FN of; assert(gui); of=gui->progressSetTotalFn; gui->progressSetTotalFn=f; return of; } GWEN_GUI_PROGRESS_LOG_FN GWEN_Gui_SetProgressLogFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_LOG_FN f) { GWEN_GUI_PROGRESS_LOG_FN of; assert(gui); of=gui->progressLogFn; gui->progressLogFn=f; return of; } GWEN_GUI_PROGRESS_END_FN GWEN_Gui_SetProgressEndFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_END_FN f) { GWEN_GUI_PROGRESS_END_FN of; assert(gui); of=gui->progressEndFn; gui->progressEndFn=f; return of; } GWEN_GUI_PRINT_FN GWEN_Gui_SetPrintFn(GWEN_GUI *gui, GWEN_GUI_PRINT_FN f) { GWEN_GUI_PRINT_FN of; assert(gui); of=gui->printFn; gui->printFn=f; return of; } GWEN_GUI_GETPASSWORD_FN GWEN_Gui_SetGetPasswordFn(GWEN_GUI *gui, GWEN_GUI_GETPASSWORD_FN f) { GWEN_GUI_GETPASSWORD_FN of; assert(gui); of=gui->getPasswordFn; gui->getPasswordFn=f; return of; } GWEN_GUI_SETPASSWORDSTATUS_FN GWEN_Gui_SetSetPasswordStatusFn(GWEN_GUI *gui, GWEN_GUI_SETPASSWORDSTATUS_FN f) { GWEN_GUI_SETPASSWORDSTATUS_FN of; assert(gui); of=gui->setPasswordStatusFn; gui->setPasswordStatusFn=f; return of; } GWEN_GUI_LOG_HOOK_FN GWEN_Gui_SetLogHookFn(GWEN_GUI *gui, GWEN_GUI_LOG_HOOK_FN f) { GWEN_GUI_LOG_HOOK_FN of; assert(gui); of=gui->logHookFn; gui->logHookFn=f; return of; } GWEN_GUI_WAITFORSOCKETS_FN GWEN_Gui_SetWaitForSocketsFn(GWEN_GUI *gui, GWEN_GUI_WAITFORSOCKETS_FN f) { GWEN_GUI_WAITFORSOCKETS_FN of; assert(gui); of=gui->waitForSocketsFn; gui->waitForSocketsFn=f; return of; } GWEN_GUI_CHECKCERT_FN GWEN_Gui_SetCheckCertFn(GWEN_GUI *gui, GWEN_GUI_CHECKCERT_FN f) { GWEN_GUI_CHECKCERT_FN of; assert(gui); of=gui->checkCertFn; gui->checkCertFn=f; return of; } GWEN_GUI_EXEC_DIALOG_FN GWEN_Gui_SetExecDialogFn(GWEN_GUI *gui, GWEN_GUI_EXEC_DIALOG_FN f) { GWEN_GUI_EXEC_DIALOG_FN of; assert(gui); of=gui->execDialogFn; gui->execDialogFn=f; return of; } GWEN_GUI_OPEN_DIALOG_FN GWEN_Gui_SetOpenDialogFn(GWEN_GUI *gui, GWEN_GUI_OPEN_DIALOG_FN f) { GWEN_GUI_OPEN_DIALOG_FN of; assert(gui); of=gui->openDialogFn; gui->openDialogFn=f; return of; } GWEN_GUI_CLOSE_DIALOG_FN GWEN_Gui_SetCloseDialogFn(GWEN_GUI *gui, GWEN_GUI_CLOSE_DIALOG_FN f) { GWEN_GUI_CLOSE_DIALOG_FN of; assert(gui); of=gui->closeDialogFn; gui->closeDialogFn=f; return of; } GWEN_GUI_RUN_DIALOG_FN GWEN_Gui_SetRunDialogFn(GWEN_GUI *gui, GWEN_GUI_RUN_DIALOG_FN f) { GWEN_GUI_RUN_DIALOG_FN of; assert(gui); of=gui->runDialogFn; gui->runDialogFn=f; return of; } GWEN_GUI_READ_DIALOG_PREFS_FN GWEN_Gui_SetReadDialogPrefsFn(GWEN_GUI *gui, GWEN_GUI_READ_DIALOG_PREFS_FN f) { GWEN_GUI_READ_DIALOG_PREFS_FN of; assert(gui); of=gui->readDialogPrefsFn; gui->readDialogPrefsFn=f; return of; } GWEN_GUI_WRITE_DIALOG_PREFS_FN GWEN_Gui_SetWriteDialogPrefsFn(GWEN_GUI *gui, GWEN_GUI_WRITE_DIALOG_PREFS_FN f) { GWEN_GUI_WRITE_DIALOG_PREFS_FN of; assert(gui); of=gui->writeDialogPrefsFn; gui->writeDialogPrefsFn=f; return of; } GWEN_GUI_GET_FILENAME_FN GWEN_Gui_SetGetFileNameFn(GWEN_GUI *gui, GWEN_GUI_GET_FILENAME_FN f) { GWEN_GUI_GET_FILENAME_FN of; assert(gui); of=gui->getFileNameFn; gui->getFileNameFn=f; return of; } GWEN_GUI_GETSYNCIO_FN GWEN_Gui_SetGetSyncIoFn(GWEN_GUI *gui, GWEN_GUI_GETSYNCIO_FN f) { GWEN_GUI_GETSYNCIO_FN of; assert(gui); of=gui->getSyncIoFn; gui->getSyncIoFn=f; return of; } GWEN_GUI_KEYDATAFROMTEXT_OPENSSL_FN GWEN_Gui_SetKeyDataFromTextOpenSslFn(GWEN_GUI *gui, GWEN_GUI_KEYDATAFROMTEXT_OPENSSL_FN f) { GWEN_GUI_KEYDATAFROMTEXT_OPENSSL_FN of; assert(gui); of=gui->keyDataFromTextOpenSslFn; gui->keyDataFromTextOpenSslFn=f; return of; } uint32_t GWEN_Gui_GetFlags(const GWEN_GUI *gui) { assert(gui); return gui->flags; } void GWEN_Gui_SetFlags(GWEN_GUI *gui, uint32_t fl) { assert(gui); gui->flags=fl; } void GWEN_Gui_AddFlags(GWEN_GUI *gui, uint32_t fl) { assert(gui); gui->flags|=fl; } void GWEN_Gui_SubFlags(GWEN_GUI *gui, uint32_t fl) { assert(gui); gui->flags&=~fl; } void GWEN_Gui_SetName(GWEN_GUI *gui, const char *name) { free(gui->name); if (name) gui->name=strdup(name); else gui->name=NULL; } const char *GWEN_Gui_GetName(void) { if (gwenhywfar_gui) return gwenhywfar_gui->name; return NULL; } const char *GWEN_Gui_GetCharSet(const GWEN_GUI *gui) { if (gui) return gui->charSet; return NULL; } void GWEN_Gui_SetCharSet(GWEN_GUI *gui, const char *s) { const char *cs; assert(gui); if (s) { if (!*s) { /* determine charset according to current locale */ #if defined(HAVE_LANGINFO_H) cs=nl_langinfo(CODESET); #elif defined(HAVE_LOCALCHARSET_H) cs=locale_charset(); #else /* just pass "" on to libiconv and hope for the best */ cs=s; #endif } else cs=s; if (strcasecmp(cs, "UTF-8")==0) cs=NULL; } else cs=s; #ifndef HAVE_ICONV if (cs) { DBG_INFO(GWEN_LOGDOMAIN, "Missing iconv, cannot convert between UTF-8 and \"%s\"", cs); } #else if (cs) { iconv_t ic; size_t len; char *p; /* Let iconv apply transliteration where necessary */ len=strlen(cs); p=(char *)malloc(len+11); assert(p); sprintf(p, "%s//TRANSLIT", cs); ic=iconv_open(p, "UTF-8"); if (ic==(iconv_t)-1) { DBG_ERROR(GWEN_LOGDOMAIN, "Charset conversion from \"UTF-8\" to \"%s\" failed: %s (%d)", p, strerror(errno), errno); free(p); return; } iconv_close(ic); cs=p; } if (gui->charSet) free(gui->charSet); gui->charSet=(char *)cs; #endif } GWEN_PASSWD_STORE *GWEN_Gui_GetPasswdStore(const GWEN_GUI *gui) { if (gui) return gui->passwdStore; return NULL; } void GWEN_Gui_SetPasswdStore(GWEN_GUI *gui, GWEN_PASSWD_STORE *sto) { if (gui) { if (gui->passwdStore && gui->passwdStore!=sto) GWEN_PasswordStore_free(gui->passwdStore); gui->passwdStore=sto; if (sto) gui->flags|=GWEN_GUI_FLAGS_PERMPASSWORDS; } } void GWEN_Gui_SetPasswordDb(GWEN_GUI *gui, GWEN_DB_NODE *dbPasswords, int persistent) { GWEN_DB_Group_free(gui->dbPasswords); gui->dbPasswords=dbPasswords; gui->persistentPasswords=persistent; } GWEN_DB_NODE *GWEN_Gui_GetPasswordDb(const GWEN_GUI *gui) { return gui->dbPasswords; } int GWEN_Gui_MessageBox(uint32_t flags, const char *title, const char *text, const char *b1, const char *b2, const char *b3, uint32_t guiid) { if (gwenhywfar_gui && gwenhywfar_gui->messageBoxFn) return gwenhywfar_gui->messageBoxFn(gwenhywfar_gui, flags, title, text, b1, b2, b3, guiid); return GWEN_ERROR_NOT_IMPLEMENTED; } void GWEN_Gui_ShowError(const char *title, const char *fmt, ...) { va_list list; char msgbuffer[2048]; int rv; /* prepare list for va_arg */ va_start(list, fmt); rv=vsnprintf(msgbuffer, sizeof(msgbuffer), fmt, list); if (rv<0 || rv>=(int)(sizeof(msgbuffer))) { DBG_WARN(GWEN_LOGDOMAIN, "Internal buffer too small for message, truncating (%d>%d)", rv, (int)(sizeof(msgbuffer))); } GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_SEVERITY_NORMAL | GWEN_GUI_MSG_FLAGS_TYPE_ERROR | GWEN_GUI_MSG_FLAGS_CONFIRM_B1, title, msgbuffer, I18N("Dismiss"), NULL, NULL, 0); } int GWEN_Gui_InputBox(uint32_t flags, const char *title, const char *text, char *buffer, int minLen, int maxLen, uint32_t guiid) { if (gwenhywfar_gui && gwenhywfar_gui->inputBoxFn) return gwenhywfar_gui->inputBoxFn(gwenhywfar_gui, flags, title, text, buffer, minLen, maxLen, guiid); return GWEN_ERROR_NOT_IMPLEMENTED; } uint32_t GWEN_Gui_ShowBox(uint32_t flags, const char *title, const char *text, uint32_t guiid) { if (gwenhywfar_gui && gwenhywfar_gui->showBoxFn) return gwenhywfar_gui->showBoxFn(gwenhywfar_gui, flags, title, text, guiid); return 0; } void GWEN_Gui_HideBox(uint32_t id) { if (gwenhywfar_gui && gwenhywfar_gui->hideBoxFn) return gwenhywfar_gui->hideBoxFn(gwenhywfar_gui, id); } uint32_t GWEN_Gui_ProgressStart(uint32_t progressFlags, const char *title, const char *text, uint64_t total, uint32_t guiid) { if (gwenhywfar_gui && gwenhywfar_gui->progressStartFn) return gwenhywfar_gui->progressStartFn(gwenhywfar_gui, progressFlags, title, text, total, guiid); return 0; } int GWEN_Gui_ProgressAdvance(uint32_t id, uint32_t progress) { if (gwenhywfar_gui && gwenhywfar_gui->progressAdvanceFn) return gwenhywfar_gui->progressAdvanceFn(gwenhywfar_gui, id, progress); return 0; } int GWEN_Gui_ProgressSetTotal(uint32_t id, uint64_t total) { if (gwenhywfar_gui && gwenhywfar_gui->progressSetTotalFn) return gwenhywfar_gui->progressSetTotalFn(gwenhywfar_gui, id, total); return 0; } int GWEN_Gui_ProgressLog(uint32_t id, GWEN_LOGGER_LEVEL level, const char *text) { if (gwenhywfar_gui && gwenhywfar_gui->progressLogFn) return gwenhywfar_gui->progressLogFn(gwenhywfar_gui, id, level, text); return 0; } int GWEN_Gui_ProgressLog2(uint32_t id, GWEN_LOGGER_LEVEL level, const char *fmt, ...) { va_list list; char msgbuffer[2048]; int rv; /* prepare list for va_arg */ va_start(list, fmt); rv=vsnprintf(msgbuffer, sizeof(msgbuffer), fmt, list); if (rv<0 || rv>=(int)(sizeof(msgbuffer))) { DBG_WARN(GWEN_LOGDOMAIN, "Internal buffer too small for message, truncating (%d>%d)", rv, (int)(sizeof(msgbuffer))); } return GWEN_Gui_ProgressLog(id, level, msgbuffer); } int GWEN_Gui_ProgressEnd(uint32_t id) { if (gwenhywfar_gui && gwenhywfar_gui->progressEndFn) return gwenhywfar_gui->progressEndFn(gwenhywfar_gui, id); return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_Gui_Print(const char *docTitle, const char *docType, const char *descr, const char *text, uint32_t guiid) { if (gwenhywfar_gui && gwenhywfar_gui->printFn) return gwenhywfar_gui->printFn(gwenhywfar_gui, docTitle, docType, descr, text, guiid); return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_Gui_GetPassword(uint32_t flags, const char *token, const char *title, const char *text, char *buffer, int minLen, int maxLen, uint32_t guiid) { if (gwenhywfar_gui) { if (gwenhywfar_gui->getPasswordFn) return gwenhywfar_gui->getPasswordFn(gwenhywfar_gui, flags, token, title, text, buffer, minLen, maxLen, guiid); else if (gwenhywfar_gui->inputBoxFn) return gwenhywfar_gui->inputBoxFn(gwenhywfar_gui, flags, title, text, buffer, minLen, maxLen, guiid); } return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_Gui_SetPasswordStatus(const char *token, const char *pin, GWEN_GUI_PASSWORD_STATUS status, uint32_t guiid) { if (gwenhywfar_gui && gwenhywfar_gui->setPasswordStatusFn) return gwenhywfar_gui->setPasswordStatusFn(gwenhywfar_gui, token, pin, status, guiid); return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_Gui_LogHook(const char *logDomain, GWEN_LOGGER_LEVEL priority, const char *s) { if (gwenhywfar_gui && gwenhywfar_gui->logHookFn) { if (priority>=GWEN_LoggerLevel_Debug && logDomain && strcasecmp(logDomain, "gwenhywfar")==0) /* don't send possibly sensitive data to the log function because * some application tend to store the messages indiscriminately. * In some cases sensitive information can be send to this function * which we don't want the application to store */ return 0; else { int rv; if (gwenhywfar_gui->inLogHook==0) { /* otherwise the log message seems to be uncritical, convey it */ gwenhywfar_gui->inLogHook++; rv=gwenhywfar_gui->logHookFn(gwenhywfar_gui, logDomain, priority, s); gwenhywfar_gui->inLogHook--; return rv; } else /* loghook recursion, don't convey */ return 0; } } else /* handle as usual */ return 0; } int GWEN_Gui_WaitForSockets(GWEN_SOCKET_LIST2 *readSockets, GWEN_SOCKET_LIST2 *writeSockets, uint32_t guiid, int msecs) { if (gwenhywfar_gui && gwenhywfar_gui->waitForSocketsFn) return gwenhywfar_gui->waitForSocketsFn(gwenhywfar_gui, readSockets, writeSockets, guiid, msecs); else { uint32_t pid; time_t t0; int wt; int dist; t0=time(0); if (msecs==GWEN_TIMEOUT_NONE) { wt=0; dist=0; } else if (msecs==GWEN_TIMEOUT_FOREVER) { wt=0; dist=500; } else { wt=msecs/1000; dist=500; } pid=GWEN_Gui_ProgressStart(((wt!=0)?GWEN_GUI_PROGRESS_SHOW_PROGRESS:0) | GWEN_GUI_PROGRESS_SHOW_ABORT | GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_ALLOW_EMBED, I18N("Waiting for Data"), "Waiting for data to become available", wt, 0); while(1) { GWEN_SOCKETSET *rset; GWEN_SOCKETSET *wset; GWEN_SOCKET_LIST2_ITERATOR *sit; rset=GWEN_SocketSet_new(); wset=GWEN_SocketSet_new(); /* fill read socket set */ if (readSockets) { sit=GWEN_Socket_List2_First(readSockets); if (sit) { GWEN_SOCKET *s; s=GWEN_Socket_List2Iterator_Data(sit); assert(s); while(s) { GWEN_SocketSet_AddSocket(rset, s); s=GWEN_Socket_List2Iterator_Next(sit); } GWEN_Socket_List2Iterator_free(sit); } } /* fill write socket set */ if (writeSockets) { sit=GWEN_Socket_List2_First(writeSockets); if (sit) { GWEN_SOCKET *s; s=GWEN_Socket_List2Iterator_Data(sit); assert(s); while(s) { GWEN_SocketSet_AddSocket(wset, s); s=GWEN_Socket_List2Iterator_Next(sit); } GWEN_Socket_List2Iterator_free(sit); } } if (GWEN_SocketSet_GetSocketCount(rset)==0 && GWEN_SocketSet_GetSocketCount(wset)==0) { /* no sockets to wait for, sleep for a few ms to keep cpu load down */ GWEN_SocketSet_free(wset); GWEN_SocketSet_free(rset); if (msecs) { /* only sleep if a timeout was given */ DBG_DEBUG(GWEN_LOGDOMAIN, "Sleeping (no socket)"); GWEN_Socket_Select(NULL, NULL, NULL, GWEN_GUI_CPU_TIMEOUT); } GWEN_Gui_ProgressEnd(pid); return GWEN_ERROR_TIMEOUT; } else { int rv; int v=0; rv=GWEN_Socket_Select(rset, wset, NULL, dist); GWEN_SocketSet_free(wset); GWEN_SocketSet_free(rset); if (rv!=GWEN_ERROR_TIMEOUT) { GWEN_Gui_ProgressEnd(pid); return rv; } if (wt) { time_t t1; t1=time(0); v=(int) difftime(t1, t0); if (v>wt) { GWEN_Gui_ProgressEnd(pid); return GWEN_ERROR_TIMEOUT; } } rv=GWEN_Gui_ProgressAdvance(pid, v); if (rv==GWEN_ERROR_USER_ABORTED) { GWEN_Gui_ProgressEnd(pid); return rv; } } } /* loop */ } } int GWEN_Gui_CheckCert(const GWEN_SSLCERTDESCR *cd, GWEN_SYNCIO *sio, uint32_t guiid) { if (gwenhywfar_gui && gwenhywfar_gui->checkCertFn) return gwenhywfar_gui->checkCertFn(gwenhywfar_gui, cd, sio, guiid); else return GWEN_ERROR_NOT_IMPLEMENTED; } int GWENHYWFAR_CB GWEN_Gui_CheckCertBuiltIn(GWEN_UNUSED GWEN_GUI *gui, const GWEN_SSLCERTDESCR *cd, GWEN_UNUSED GWEN_SYNCIO *sio, uint32_t guiid) { int rv; int isError; const char *hash; const char *status; //const char *ipAddr; const char *statusOn; const char *statusOff; char varName[128]; char dbuffer1[32]; char dbuffer2[32]; char buffer[8192]; const GWEN_TIME *ti; const char *unknown; const char *commonName; const char *organizationName; const char *organizationalUnitName; const char *countryName; const char *localityName; const char *stateOrProvinceName; char *msg=I18S( "The following certificate has been received:\n" "Name : %s\n" "Organisation: %s\n" "Department : %s\n" "Country : %s\n" "City : %s\n" "State : %s\n" "Valid after : %s\n" "Valid until : %s\n" "Hash : %s\n" "Status : %s\n" "Do you wish to accept this certificate?" "" "

" " The following certificate has been received:" "

" " " " " " " " " " " " " " " " " " " " " " " "
Name%s
Organisation%s
Department%s
Country%s
City%s
State%s
Valid after%s
Valid until%s
Hash%s
Status%s%s%s
" "

" " Do you wish to accept this certificate?" "

" "" ); memset(dbuffer1, 0, sizeof(dbuffer1)); memset(dbuffer2, 0, sizeof(dbuffer2)); memset(varName, 0, sizeof(varName)); isError=GWEN_SslCertDescr_GetIsError(cd); hash=GWEN_SslCertDescr_GetFingerPrint(cd); status=GWEN_SslCertDescr_GetStatusText(cd); //ipAddr=GWEN_SslCertDescr_GetIpAddress(cd); ti=GWEN_SslCertDescr_GetNotBefore(cd); if (ti) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 32, 0, 1); /* TRANSLATORS: This string is used as a template string to convert a given time into your local translated timeformat. The following characters are accepted in the template string: Y - digit of the year, M - digit of the month, D - digit of the day of month, h - digit of the hour, m - digit of the minute, s- digit of the second. All other characters are left unchanged. */ if (GWEN_Time_toString(ti, I18N("YYYY/MM/DD hh:mm:ss"), tbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not convert beforeDate to string"); abort(); } strncpy(dbuffer1, GWEN_Buffer_GetStart(tbuf), sizeof(dbuffer1)-1); GWEN_Buffer_free(tbuf); } ti=GWEN_SslCertDescr_GetNotAfter(cd); if (ti) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 32, 0, 1); if (GWEN_Time_toString(ti, I18N("YYYY/MM/DD hh:mm:ss"), tbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not convert untilDate to string"); abort(); } strncpy(dbuffer2, GWEN_Buffer_GetStart(tbuf), sizeof(dbuffer2)-1); GWEN_Buffer_free(tbuf); } if (isError) { statusOn=""; statusOff=""; } else { statusOn=""; statusOff=""; } unknown=I18N("unknown"); commonName=GWEN_SslCertDescr_GetCommonName(cd); if (!commonName) commonName=unknown; organizationName=GWEN_SslCertDescr_GetOrganizationName(cd); if (!organizationName) organizationName=unknown; organizationalUnitName=GWEN_SslCertDescr_GetOrganizationalUnitName(cd); if (!organizationalUnitName) organizationalUnitName=unknown; countryName=GWEN_SslCertDescr_GetCountryName(cd); if (!countryName) countryName=unknown; localityName=GWEN_SslCertDescr_GetLocalityName(cd); if (!localityName) localityName=unknown; stateOrProvinceName=GWEN_SslCertDescr_GetStateOrProvinceName(cd); if (!stateOrProvinceName) stateOrProvinceName=unknown; if (!status) status=unknown; snprintf(buffer, sizeof(buffer)-1, I18N(msg), commonName, organizationName, organizationalUnitName, countryName, localityName, stateOrProvinceName, dbuffer1, dbuffer2, hash, status, /* the same again for HTML */ commonName, organizationName, organizationalUnitName, countryName, localityName, stateOrProvinceName, dbuffer1, dbuffer2, hash, statusOn, status, statusOff ); rv=GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_TYPE_WARN | GWEN_GUI_MSG_FLAGS_CONFIRM_B1 | GWEN_GUI_MSG_FLAGS_SEVERITY_DANGEROUS, I18N("Certificate Received"), buffer, I18N("Yes"), I18N("No"), 0, guiid); if (rv==1) { return 0; } else { DBG_NOTICE(GWEN_LOGDOMAIN, "User rejected certificate"); return GWEN_ERROR_SSL_SECURITY; } } int GWEN_Gui_KeyDataFromText_OpenSSL(const char *text, unsigned char *buffer, unsigned int bufLength) { if (gwenhywfar_gui && gwenhywfar_gui->keyDataFromTextOpenSslFn) return gwenhywfar_gui->keyDataFromTextOpenSslFn(gwenhywfar_gui, text, buffer, bufLength); return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_Gui_ExecDialog(GWEN_DIALOG *dlg, uint32_t guiid) { if (gwenhywfar_gui && gwenhywfar_gui->execDialogFn) return gwenhywfar_gui->execDialogFn(gwenhywfar_gui, dlg, guiid); return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_Gui_OpenDialog(GWEN_DIALOG *dlg, uint32_t guiid) { if (gwenhywfar_gui && gwenhywfar_gui->openDialogFn) return gwenhywfar_gui->openDialogFn(gwenhywfar_gui, dlg, guiid); return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_Gui_CloseDialog(GWEN_DIALOG *dlg) { if (gwenhywfar_gui && gwenhywfar_gui->closeDialogFn) return gwenhywfar_gui->closeDialogFn(gwenhywfar_gui, dlg); return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_Gui_RunDialog(GWEN_DIALOG *dlg, int untilEnd) { if (gwenhywfar_gui && gwenhywfar_gui->runDialogFn) return gwenhywfar_gui->runDialogFn(gwenhywfar_gui, dlg, untilEnd); return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_Gui_GetFileName(const char *caption, GWEN_GUI_FILENAME_TYPE fnt, uint32_t flags, const char *patterns, GWEN_BUFFER *pathBuffer, uint32_t guiid) { if (gwenhywfar_gui && gwenhywfar_gui->getFileNameFn) return gwenhywfar_gui->getFileNameFn(gwenhywfar_gui, caption, fnt, flags, patterns, pathBuffer, guiid); return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_Gui_ReadDialogPrefs(const char *groupName, const char *altName, GWEN_DB_NODE **pDb) { if (gwenhywfar_gui && gwenhywfar_gui->readDialogPrefsFn) return gwenhywfar_gui->readDialogPrefsFn(gwenhywfar_gui, groupName, altName, pDb); return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_Gui_WriteDialogPrefs(const char *groupName, GWEN_DB_NODE *db) { if (gwenhywfar_gui && gwenhywfar_gui->writeDialogPrefsFn) return gwenhywfar_gui->writeDialogPrefsFn(gwenhywfar_gui, groupName, db); return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_Gui_GetSyncIo(const char *url, const char *defaultProto, int defaultPort, GWEN_SYNCIO **pSio) { if (gwenhywfar_gui && gwenhywfar_gui->getSyncIoFn) return gwenhywfar_gui->getSyncIoFn(gwenhywfar_gui, url, defaultProto, defaultPort, pSio); return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_Gui_ShowProgress(GWEN_PROGRESS_DATA *pd) { GWEN_PROGRESS_DATA *highest=NULL; GWEN_PROGRESS_DATA *t; GWEN_DIALOG *dlg=NULL; assert(gwenhywfar_gui); t=pd; while(t) { highest=t; t=GWEN_ProgressData_Tree_GetParent(t); } /* highest must always be visible */ if (GWEN_ProgressData_GetShown(highest)==0) GWEN_ProgressData_SetShown(highest, 1); dlg=GWEN_ProgressData_GetDialog(highest); if (dlg==NULL) { int rv; /* need to create dialog for it */ dlg=GWEN_DlgProgress_new(); if (dlg==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Unable to create progress dialog, maybe data not installed?"); return GWEN_ERROR_INTERNAL; } if (GWEN_ProgressData_GetFlags(pd) & GWEN_GUI_PROGRESS_KEEP_OPEN) GWEN_DlgProgress_SetStayOpen(dlg, 1); if (GWEN_ProgressData_GetFlags(pd) & GWEN_GUI_PROGRESS_SHOW_LOG) GWEN_DlgProgress_SetShowLog(dlg, 1); rv=GWEN_Gui_OpenDialog(dlg, 0); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Unable to openDialog: %d", rv); GWEN_Dialog_free(dlg); return rv; } DBG_INFO(GWEN_LOGDOMAIN, "Setting new firstprogress: %08x", GWEN_ProgressData_GetId(pd)); GWEN_DlgProgress_SetFirstProgress(dlg, highest); GWEN_ProgressData_SetDialog(highest, dlg); } if (pd!=highest) { DBG_INFO(GWEN_LOGDOMAIN, "Setting new second progress: %08x", GWEN_ProgressData_GetId(pd)); GWEN_DlgProgress_SetSecondProgress(dlg, pd); GWEN_ProgressData_SetDialog(pd, dlg); GWEN_ProgressData_SetShown(pd, 1); } GWEN_Gui_RunDialog(dlg, 0); return 0; } void GWEN_Gui_Internal_CheckShow(GWEN_GUI *gui, GWEN_PROGRESS_DATA *pd) { if (GWEN_ProgressData_GetShown(pd)==0) { if (GWEN_ProgressData_GetFlags(pd) & GWEN_GUI_PROGRESS_DELAY) { double dt; time_t t1; t1=time(0); dt=difftime(t1, GWEN_ProgressData_GetStartTime(pd)); if ((int)dt>=GWEN_GUI_DELAY_SECS) { DBG_INFO(GWEN_LOGDOMAIN, "Progress %08x open for %d secs, showing", GWEN_ProgressData_GetId(pd), (int) dt); GWEN_ProgressData_SetShown(pd, 1); } } else GWEN_ProgressData_SetShown(pd, 1); } if (GWEN_ProgressData_GetShown(pd)==1) { if (GWEN_ProgressData_GetDialog(pd)==NULL) { GWEN_Gui_ShowProgress(pd); } } } uint32_t GWEN_Gui_Internal_ProgressStart(GWEN_GUI *gui, uint32_t progressFlags, const char *title, const char *text, uint64_t total, uint32_t guiid) { GWEN_PROGRESS_DATA *pdParent=NULL; GWEN_PROGRESS_DATA *pd; uint32_t id; id=++(gui->nextProgressId); DBG_DEBUG(GWEN_LOGDOMAIN, "ProgressStart: flags=%08x, title=[%s], total=%08x, guiid=%08x", progressFlags, title?title:"(none)", (uint32_t) total, guiid); if (guiid==0) { guiid=gui->lastProgressId; } if (guiid) { pdParent=GWEN_ProgressData_Tree_FindProgressById(gui->progressDataTree, guiid); if (pdParent==NULL) { DBG_WARN(GWEN_LOGDOMAIN, "Parent progress by id %08x not found", guiid); DBG_DEBUG(GWEN_LOGDOMAIN, "Title: [%s], Text: [%s]", title?title:"no title", text?text:"no text"); } } pd=GWEN_ProgressData_new(gui, id, progressFlags, title, text, total); assert(pd); GWEN_ProgressData_SetPreviousId(pd, gui->lastProgressId); if (pdParent) GWEN_ProgressData_Tree_AddChild(pdParent, pd); else GWEN_ProgressData_Tree_Add(gui->progressDataTree, pd); GWEN_Gui_Internal_CheckShow(gui, pd); gui->lastProgressId=id; return id; } int GWEN_Gui_Internal_ProgressEnd(GWEN_GUI *gui, uint32_t pid) { GWEN_PROGRESS_DATA *pd; uint32_t parentPid=0; DBG_DEBUG(GWEN_LOGDOMAIN, "ProgressEnd: guiid=%08x", pid); if (pid==0) { pid=gui->lastProgressId; if (pid==0) { DBG_INFO(GWEN_LOGDOMAIN, "Last active progress not available"); return GWEN_ERROR_INVALID; } } pd=GWEN_ProgressData_Tree_FindProgressById(gui->progressDataTree, pid); if (pd==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Progress by id %08x not found", pid); return GWEN_ERROR_INVALID; } else { GWEN_DIALOG *dlg; GWEN_PROGRESS_DATA *previousPd; /* set previous progress id */ gui->lastProgressId=GWEN_ProgressData_GetPreviousId(pd); /* find next highest active progress */ previousPd=GWEN_ProgressData_Tree_GetParent(pd); if (previousPd) parentPid=GWEN_ProgressData_GetId(previousPd); while(previousPd) { if (GWEN_ProgressData_GetShown(previousPd)) break; previousPd=GWEN_ProgressData_Tree_GetParent(previousPd); } dlg=GWEN_ProgressData_GetDialog(pd); if (dlg) { GWEN_PROGRESS_DATA *primary; GWEN_PROGRESS_DATA *secondary; primary=GWEN_DlgProgress_GetFirstProgress(dlg); secondary=GWEN_DlgProgress_GetSecondProgress(dlg); /* force update of progress bar */ GWEN_DlgProgress_Advanced(dlg, pd); GWEN_Gui_RunDialog(dlg, 0); if (primary==pd) { int rv; DBG_DEBUG(GWEN_LOGDOMAIN, "Progress %08x is primary, closing dialog", GWEN_ProgressData_GetId(pd)); if (secondary) { DBG_WARN(GWEN_LOGDOMAIN, "There is still a secondary progress!"); GWEN_DlgProgress_SetSecondProgress(dlg, NULL); GWEN_ProgressData_SetDialog(secondary, NULL); } /* this is the primary progress, with this closed we can also * close the dialog */ DBG_INFO(GWEN_LOGDOMAIN, "Closing progress dialog"); GWEN_DlgProgress_AddLogText(dlg, GWEN_LoggerLevel_Info, I18N("Operation finished, you can now close this window.")); // run dialog until end, close then GWEN_DlgProgress_SetAllowClose(dlg, 1); if (GWEN_DlgProgress_GetStayOpen(dlg)) { rv=GWEN_Gui_RunDialog(dlg, 1); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Unable to runDialog: %d", rv); /*GWEN_Dialog_free(dlg); return rv;*/ } } rv=GWEN_Gui_CloseDialog(dlg); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Unable to closeDialog: %d", rv); GWEN_Dialog_free(dlg); return rv; } GWEN_Dialog_free(dlg); } else if (secondary==pd) { /* t is maybe the next higher progress, it will become the second progress */ if (previousPd && previousPd!=GWEN_DlgProgress_GetFirstProgress(dlg)) { DBG_DEBUG(GWEN_LOGDOMAIN, "Progress %08x becomes new second progress", GWEN_ProgressData_GetId(previousPd)); GWEN_DlgProgress_SetSecondProgress(dlg, pd); GWEN_ProgressData_SetDialog(pd, dlg); } else { DBG_INFO(GWEN_LOGDOMAIN, "No next secondary progress"); GWEN_DlgProgress_SetSecondProgress(dlg, NULL); } } else { DBG_ERROR(GWEN_LOGDOMAIN, "Progress %08x is neither primary nor secondary, SNH", GWEN_ProgressData_GetId(pd)); } } else { DBG_DEBUG(GWEN_LOGDOMAIN, "Progress %08x has no dialog", GWEN_ProgressData_GetId(pd)); } GWEN_ProgressData_SetDialog(pd, NULL); GWEN_ProgressData_Tree_Del(pd); GWEN_ProgressData_free(pd); } return 0; } int GWEN_Gui_Internal_ProgressAdvance(GWEN_GUI *gui, uint32_t pid, uint64_t progress) { GWEN_PROGRESS_DATA *pd; int aborted=0; if (pid==0) { pid=gui->lastProgressId; if (pid==0) { DBG_INFO(GWEN_LOGDOMAIN, "Last active progress not available"); return GWEN_ERROR_INVALID; } } pd=GWEN_ProgressData_Tree_FindProgressById(gui->progressDataTree, pid); if (pd==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Progress by id %08x not found", pid); return GWEN_ERROR_INVALID; } else { GWEN_DIALOG *dlg; if (progress==GWEN_GUI_PROGRESS_ONE) progress=GWEN_ProgressData_GetCurrent(pd)+1; else if (progress==GWEN_GUI_PROGRESS_NONE) progress=GWEN_ProgressData_GetCurrent(pd); GWEN_ProgressData_SetCurrent(pd, progress); GWEN_Gui_Internal_CheckShow(gui, pd); dlg=GWEN_ProgressData_GetDialog(pd); if (dlg) { time_t t0; time_t t1; t0=GWEN_ProgressData_GetCheckTime(pd); t1=time(0); if (t0!=t1) { GWEN_DlgProgress_Advanced(dlg, pd); GWEN_Gui_RunDialog(dlg, 0); GWEN_ProgressData_SetCheckTime(pd, t1); } } aborted=GWEN_ProgressData_GetAborted(pd); } if (aborted) return GWEN_ERROR_USER_ABORTED; return 0; } int GWEN_Gui_Internal_ProgressSetTotal(GWEN_GUI *gui, uint32_t pid, uint64_t total) { GWEN_PROGRESS_DATA *pd; int aborted=0; if (pid==0) { pid=gui->lastProgressId; if (pid==0) { DBG_INFO(GWEN_LOGDOMAIN, "Last active progress not available"); return GWEN_ERROR_INVALID; } } pd=GWEN_ProgressData_Tree_FindProgressById(gui->progressDataTree, pid); if (pd==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Progress by id %08x not found", pid); return GWEN_ERROR_INVALID; } else { GWEN_DIALOG *dlg; GWEN_ProgressData_SetTotal(pd, total); GWEN_Gui_Internal_CheckShow(gui, pd); dlg=GWEN_ProgressData_GetDialog(pd); if (dlg) { time_t t0; time_t t1; t0=GWEN_ProgressData_GetCheckTime(pd); t1=time(0); if (t0!=t1) { GWEN_DlgProgress_TotalChanged(dlg, pd); GWEN_Gui_RunDialog(dlg, 0); GWEN_ProgressData_SetCheckTime(pd, t1); } } aborted=GWEN_ProgressData_GetAborted(pd); } if (aborted) return GWEN_ERROR_USER_ABORTED; return 0; } int GWEN_Gui_Internal_ProgressLog(GWEN_GUI *gui, uint32_t pid, GWEN_LOGGER_LEVEL level, const char *text) { assert(gui); /* only show messages with log level lower or equal threshold */ if (level<=gui->minProgressLogLevel) { GWEN_PROGRESS_DATA *pd; int aborted=0; if (pid==0) { pid=gui->lastProgressId; if (pid==0) { DBG_INFO(GWEN_LOGDOMAIN, "Last active progress not available"); return GWEN_ERROR_INVALID; } } pd=GWEN_ProgressData_Tree_FindProgressById(gui->progressDataTree, pid); if (pd==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Progress by id %08x not found", pid); return GWEN_ERROR_INVALID; } else { GWEN_DIALOG *dlg; if (level<=GWEN_LoggerLevel_Notice) GWEN_ProgressData_SetShown(pd, 1); if (level<=GWEN_LoggerLevel_Warning) GWEN_ProgressData_AddFlags(pd, GWEN_GUI_PROGRESS_KEEP_OPEN); GWEN_Gui_Internal_CheckShow(gui, pd); dlg=GWEN_ProgressData_GetDialog(pd); if (dlg) { if (level<=GWEN_LoggerLevel_Warning) { GWEN_DlgProgress_SetStayOpen(dlg, 1); GWEN_DlgProgress_SetShowLog(dlg, 1); } GWEN_DlgProgress_AddLogText(dlg, level, text); GWEN_Gui_RunDialog(dlg, 0); } else GWEN_ProgressData_AddLogText(pd, level, text); aborted=GWEN_ProgressData_GetAborted(pd); } if (aborted) return GWEN_ERROR_USER_ABORTED; } return 0; } int GWEN_Gui_Internal_InputBox(GWEN_GUI *gui, uint32_t flags, const char *title, const char *text, char *buffer, int minLen, int maxLen, uint32_t guiid) { GWEN_DIALOG *dlg; int rv; dlg=GWEN_DlgInput_new(flags, title, text, minLen, maxLen); if (dlg==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not create dialog"); return GWEN_ERROR_INTERNAL; } rv=GWEN_Gui_ExecDialog(dlg, 0); if (rv==1) { rv=GWEN_DlgInput_CopyInput(dlg, buffer, maxLen); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Dialog_free(dlg); return rv; } if (GWEN_DlgInput_GetFlagAllowStore(dlg)) rv=1; else rv=0; GWEN_Dialog_free(dlg); return rv; } else { DBG_ERROR(GWEN_LOGDOMAIN, "User aborted"); GWEN_Dialog_free(dlg); return GWEN_ERROR_USER_ABORTED; } } int GWEN_Gui_Internal_MessageBox(GWEN_GUI *gui, uint32_t flags, const char *title, const char *text, const char *b1, const char *b2, const char *b3, uint32_t guiid) { GWEN_DIALOG *dlg; int rv; dlg=GWEN_DlgMessage_new(flags, title, text, b1, b2, b3); if (dlg==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not create dialog"); return GWEN_ERROR_INTERNAL; } GWEN_Gui_ExecDialog(dlg, 0); rv=GWEN_DlgMessage_GetResponse(dlg); GWEN_Dialog_free(dlg); return rv; } uint32_t GWEN_Gui_Internal_ShowBox(GWEN_GUI *gui, uint32_t flags, const char *title, const char *text, uint32_t guiid) { GWEN_DIALOG *dlg; int rv; uint32_t id; id=++(gui->nextDialogId); dlg=GWEN_DlgShowBox_new(flags, title, text); if (dlg==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not create dialog"); return 0; } GWEN_Dialog_SetGuiId(dlg, id); rv=GWEN_Gui_OpenDialog(dlg, guiid); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Dialog_free(dlg); return 0; } GWEN_Dialog_List_Add(dlg, gui->activeDialogs); return id; } void GWEN_Gui_Internal_HideBox(GWEN_GUI *gui, uint32_t id) { GWEN_DIALOG *dlg; if (id) { dlg=GWEN_Dialog_List_First(gui->activeDialogs); while(dlg) { if (GWEN_Dialog_GetGuiId(dlg)==id) break; dlg=GWEN_Dialog_List_Next(dlg); } } else dlg=GWEN_Dialog_List_Last(gui->activeDialogs); if (dlg) { int rv; rv=GWEN_Gui_CloseDialog(dlg); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); } GWEN_Dialog_List_Del(dlg); GWEN_Dialog_free(dlg); } } int GWENHYWFAR_CB GWEN_Gui_Internal_GetSyncIo(GWEN_GUI *gui, const char *url, const char *defaultProto, int defaultPort, GWEN_SYNCIO **pSio) { GWEN_URL *u; const char *s; int port; const char *addr; if (!(url && *url)) { DBG_ERROR(GWEN_LOGDOMAIN, "Empty URL"); return GWEN_ERROR_INVALID; } u=GWEN_Url_fromString(url); if (u==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Invalid URL [%s]", url); return GWEN_ERROR_INVALID; } /* determine protocol and port */ s=GWEN_Url_GetProtocol(u); if (!(s && *s)) s=defaultProto; if (!(s && *s)) s="http"; port=GWEN_Url_GetPort(u); if (port<1) port=defaultPort; if (port<1) port=80; addr=GWEN_Url_GetServer(u); if (!(addr && *addr)) { DBG_ERROR(GWEN_LOGDOMAIN, "Missing server in URL [%s]", url); GWEN_Url_free(u); return GWEN_ERROR_INVALID; } if (strcasecmp(s, "http")==0 || strcasecmp(s, "https")==0) { GWEN_SYNCIO *sio; GWEN_SYNCIO *baseLayer; GWEN_DB_NODE *db; GWEN_BUFFER *tbuf; int rv; /* create base io */ sio=GWEN_SyncIo_Socket_new(GWEN_SocketTypeTCP, GWEN_AddressFamilyIP); if (sio==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "here"); GWEN_Url_free(u); return GWEN_ERROR_GENERIC; } GWEN_SyncIo_Socket_SetAddress(sio, addr); GWEN_SyncIo_Socket_SetPort(sio, port); baseLayer=sio; if (strcasecmp(s, "https")==0) { /* create TLS layer */ sio=GWEN_SyncIo_Tls_new(baseLayer); if (sio==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "here"); GWEN_SyncIo_free(baseLayer); GWEN_Url_free(u); return GWEN_ERROR_GENERIC; } GWEN_SyncIo_Tls_SetRemoteHostName(sio, addr); baseLayer=sio; } /* create buffered layer as needed for HTTP */ sio=GWEN_SyncIo_Buffered_new(baseLayer); if (sio==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "here"); GWEN_SyncIo_free(baseLayer); GWEN_Url_free(u); return GWEN_ERROR_GENERIC; } baseLayer=sio; /* create HTTP layer */ sio=GWEN_SyncIo_Http_new(baseLayer); if (sio==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "here"); GWEN_SyncIo_free(baseLayer); GWEN_Url_free(u); return GWEN_ERROR_GENERIC; } /* setup default command and header */ tbuf=GWEN_Buffer_new(0, 256, 0, 1); db=GWEN_SyncIo_Http_GetDbCommandOut(sio); /* get command string (e.g. server-relative path plus variables) */ rv=GWEN_Url_toCommandString(u, tbuf); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Invalid path in URL, ignoring (%d)", rv); } else GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "url", GWEN_Buffer_GetStart(tbuf)); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "command", "GET"); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "protocol", "HTTP/1.0"); /* preset some headers */ db=GWEN_SyncIo_Http_GetDbHeaderOut(sio); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Host", addr); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Connection", "close"); /* done */ GWEN_Url_free(u); *pSio=sio; return 0; } else { GWEN_SYNCIO *sio; /* create base io */ sio=GWEN_SyncIo_Socket_new(GWEN_SocketTypeTCP, GWEN_AddressFamilyIP); if (sio==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "here"); GWEN_Url_free(u); return GWEN_ERROR_GENERIC; } GWEN_SyncIo_Socket_SetAddress(sio, addr); GWEN_SyncIo_Socket_SetPort(sio, port); /* done */ GWEN_Url_free(u); *pSio=sio; return 0; } } static int GWEN_Gui__HashPair(const char *token, const char *pin, GWEN_BUFFER *buf) { GWEN_MDIGEST *md; int rv; /* hash token and pin */ md=GWEN_MDigest_Md5_new(); rv=GWEN_MDigest_Begin(md); if (rv==0) rv=GWEN_MDigest_Update(md, (const uint8_t*)token, strlen(token)); if (rv==0) rv=GWEN_MDigest_Update(md, (const uint8_t*)pin, strlen(pin)); if (rv==0) rv=GWEN_MDigest_End(md); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Hash error (%d)", rv); GWEN_MDigest_free(md); return rv; } GWEN_Text_ToHexBuffer((const char*)GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md), buf, 0, 0, 0); GWEN_MDigest_free(md); return 0; } static int GWENHYWFAR_CB GWEN_Gui_Internal_GetPassword(GWEN_GUI *gui, uint32_t flags, const char *token, const char *title, const char *text, char *buffer, int minLen, int maxLen, uint32_t guiid) { if ((flags & GWEN_GUI_INPUT_FLAGS_TAN) || (flags & GWEN_GUI_INPUT_FLAGS_DIRECT) || (gui->dbPasswords==NULL) ) { return GWEN_Gui_InputBox(flags, title, text, buffer, minLen, maxLen, guiid); } else { GWEN_BUFFER *buf; int rv; const char *s; buf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Text_EscapeToBufferTolerant(token, buf); if (!(flags & GWEN_GUI_INPUT_FLAGS_CONFIRM)) { s=GWEN_DB_GetCharValue(gui->dbPasswords, GWEN_Buffer_GetStart(buf), 0, NULL); if (s) { int i; i=strlen(s); if (i>=minLen && i < maxLen) { memmove(buffer, s, i+1); GWEN_Buffer_free(buf); return 0; } else { DBG_ERROR(GWEN_LOGDOMAIN, "Stored password [%s] is not within size limits (%d), rejecting.", GWEN_Buffer_GetStart(buf), i); } } } /* passwd not in password cache, look for it in password storage */ if (gui->passwdStore) { rv=GWEN_PasswordStore_GetPassword(gui->passwdStore, token, buffer, minLen, maxLen); if (rv<0) { if (rv==GWEN_ERROR_NOT_FOUND || rv==GWEN_ERROR_NO_DATA) { DBG_INFO(GWEN_LOGDOMAIN, "Password not found in PasswordStore"); } else { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } } else { /* got password */ return 0; } } if (gui->flags & GWEN_GUI_FLAGS_NONINTERACTIVE) { DBG_ERROR(GWEN_LOGDOMAIN, "Password for [%s] missing in noninteractive mode, " "aborting", GWEN_Buffer_GetStart(buf)); GWEN_Buffer_free(buf); return GWEN_ERROR_USER_ABORTED; } for (;;) { int rv2; rv=GWEN_Gui_InputBox(flags, title, text, buffer, minLen, maxLen, guiid); if (rv<0) { GWEN_Buffer_free(buf); return rv; } else { GWEN_BUFFER *hbuf; int isBad=0; hbuf=GWEN_Buffer_new(0, 64, 0, 1); GWEN_Gui__HashPair(token, buffer, hbuf); isBad=GWEN_StringList_HasString(gui->badPasswords, GWEN_Buffer_GetStart(hbuf)); if (!isBad) { GWEN_Buffer_free(hbuf); break; } rv2=GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_TYPE_ERROR | GWEN_GUI_MSG_FLAGS_CONFIRM_B1 | GWEN_GUI_MSG_FLAGS_SEVERITY_DANGEROUS, I18N("Enforce PIN"), I18N( "You entered the same PIN twice.\n" "The PIN is marked as bad, do you want\n" "to use it anyway?" "" "

" "You entered the same PIN twice." "

" "

" "The PIN is marked as bad, " "do you want to use it anyway?" "

" ""), I18N("Yes, use anyway"), I18N("Re-enter"), 0, guiid); if (rv2==1) { /* accept this input */ GWEN_StringList_RemoveString(gui->badPasswords, GWEN_Buffer_GetStart(hbuf)); GWEN_Buffer_free(hbuf); break; } GWEN_Buffer_free(hbuf); } } /* for */ /* store in temporary cache */ GWEN_DB_SetCharValue(gui->dbPasswords, GWEN_DB_FLAGS_OVERWRITE_VARS, GWEN_Buffer_GetStart(buf), buffer); /* only store passwd in storage if allowed by the user */ if (rv==1 && gui->passwdStore) { rv=GWEN_PasswordStore_SetPassword(gui->passwdStore, token, buffer); if (rv<0) { DBG_WARN(GWEN_LOGDOMAIN, "Could not store password (%d)", rv); } } GWEN_Buffer_free(buf); return 0; } } static int GWENHYWFAR_CB GWEN_Gui_Internal_SetPasswordStatus(GWEN_GUI *gui, const char *token, const char *pin, GWEN_GUI_PASSWORD_STATUS status, GWEN_UNUSED uint32_t guiid) { if (token==NULL && pin==NULL && status==GWEN_Gui_PasswordStatus_Remove) { if (gui->passwdStore) GWEN_PasswordStore_ClearStoragePasswd(gui->passwdStore); if (gui->persistentPasswords==0) GWEN_DB_ClearGroup(gui->dbPasswords, NULL); } else { GWEN_BUFFER *hbuf; hbuf=GWEN_Buffer_new(0, 64, 0, 1); GWEN_Gui__HashPair(token, pin, hbuf); if (status==GWEN_Gui_PasswordStatus_Bad) { GWEN_StringList_AppendString(gui->badPasswords, GWEN_Buffer_GetStart(hbuf), 0, 1); /* remove from permanent passwd storage */ if (gui->passwdStore) { int rv; rv=GWEN_PasswordStore_SetPassword(gui->passwdStore, token, NULL); if (rv<0) { DBG_WARN(GWEN_LOGDOMAIN, "Could not remove password from storage (%d)", rv); } } } else if (status==GWEN_Gui_PasswordStatus_Ok || status==GWEN_Gui_PasswordStatus_Remove) { if (gui->persistentPasswords==0) GWEN_StringList_RemoveString(gui->badPasswords, GWEN_Buffer_GetStart(hbuf)); } GWEN_Buffer_free(hbuf); } return 0; } GWEN_LOGGER_LEVEL GWEN_Gui_GetMinProgressLogLevel(const GWEN_GUI *gui) { assert(gui); return gui->minProgressLogLevel; } void GWEN_Gui_SetMinProgressLogLevel(GWEN_GUI *gui, GWEN_LOGGER_LEVEL ll) { assert(gui); gui->minProgressLogLevel=ll; } gwenhywfar-4.15.2beta/src/gui/dlg_progress.c0000644000175000017500000003747012416477066016002 00000000000000/*************************************************************************** begin : Tue Feb 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "dlg_progress_p.h" #include #include #include #include #define DIALOG_MINWIDTH 520 #define DIALOG_MINHEIGHT 400 #define DIALOG_MINHEIGHT_NOLOG 100 GWEN_INHERIT(GWEN_DIALOG, GWEN_DLGPROGRESS) GWEN_DIALOG *GWEN_DlgProgress_new(void) { GWEN_DIALOG *dlg; GWEN_DLGPROGRESS *xdlg; GWEN_BUFFER *fbuf; int rv; dlg=GWEN_Dialog_new("dlg_gwen_progress"); GWEN_NEW_OBJECT(GWEN_DLGPROGRESS, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, GWEN_DLGPROGRESS, dlg, xdlg, GWEN_DlgProgress_FreeData); GWEN_Dialog_SetSignalHandler(dlg, GWEN_DlgProgress_SignalHandler); /* get path of dialog description file */ fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_PathManager_FindFile(GWEN_PM_LIBNAME, GWEN_PM_SYSDATADIR, "gwenhywfar/dialogs/dlg_progress.dlg", fbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Dialog description file not found (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } /* read dialog from dialog description file */ rv=GWEN_Dialog_ReadXmlFile(dlg, GWEN_Buffer_GetStart(fbuf)); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } GWEN_Buffer_free(fbuf); xdlg->logBufferTxt=GWEN_Buffer_new(0, 256, 0, 1); xdlg->logBufferHtml=GWEN_Buffer_new(0, 256, 0, 1); return dlg; } void GWENHYWFAR_CB GWEN_DlgProgress_FreeData(void *bp, void *p) { GWEN_DLGPROGRESS *xdlg; xdlg=(GWEN_DLGPROGRESS*) p; GWEN_Buffer_free(xdlg->logBufferHtml); GWEN_Buffer_free(xdlg->logBufferTxt); GWEN_FREE_OBJECT(xdlg); } void GWEN_DlgProgress_SetAllowClose(GWEN_DIALOG *dlg, int b) { GWEN_DLGPROGRESS *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GWEN_DLGPROGRESS, dlg); assert(xdlg); xdlg->allowClose=b; if (xdlg->wasInit) { GWEN_Dialog_SetIntProperty(dlg, "abortButton", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "closeButton", GWEN_DialogProperty_Enabled, 0, 1, 0); } } void GWEN_DlgProgress_SetStayOpen(GWEN_DIALOG *dlg, int b) { GWEN_DLGPROGRESS *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GWEN_DLGPROGRESS, dlg); assert(xdlg); xdlg->stayOpen=b; } int GWEN_DlgProgress_GetStayOpen(const GWEN_DIALOG *dlg) { GWEN_DLGPROGRESS *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GWEN_DLGPROGRESS, dlg); assert(xdlg); return xdlg->stayOpen; } void GWEN_DlgProgress_SetShowLog(GWEN_DIALOG *dlg, int b) { GWEN_DLGPROGRESS *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GWEN_DLGPROGRESS, dlg); assert(xdlg); if (xdlg->showLog!=b) { xdlg->showLog=b; if (xdlg->wasInit) { GWEN_Dialog_SetIntProperty(dlg, "logGroup", GWEN_DialogProperty_Visibility, 0, b, 0); if (b) { int i; i=xdlg->withLogWidth; if (iwithLogHeight; if (ifirstProgress; } void GWEN_DlgProgress_SetFirstProgress(GWEN_DIALOG *dlg, GWEN_PROGRESS_DATA *pd) { GWEN_DLGPROGRESS *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GWEN_DLGPROGRESS, dlg); assert(xdlg); xdlg->firstProgress=pd; if (xdlg->wasInit) { if (xdlg->firstProgress) { const char *s; s=GWEN_ProgressData_GetTitle(xdlg->firstProgress); if (s && *s) GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, s, 0); s=GWEN_ProgressData_GetText(xdlg->firstProgress); if (s && *s) GWEN_Dialog_SetCharProperty(dlg, "descrLabel", GWEN_DialogProperty_Title, 0, s, 0); GWEN_Dialog_SetIntProperty(dlg, "allProgress", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "allProgress", GWEN_DialogProperty_MaxValue, 0, GWEN_ProgressData_GetTotal(xdlg->firstProgress), 0); GWEN_Dialog_SetIntProperty(dlg, "allProgress", GWEN_DialogProperty_Value, 0, GWEN_ProgressData_GetCurrent(xdlg->firstProgress), 0); } else { /* let it show 100 % */ GWEN_Dialog_SetIntProperty(dlg, "allProgress", GWEN_DialogProperty_MaxValue, 0, 100, 0); GWEN_Dialog_SetIntProperty(dlg, "allProgress", GWEN_DialogProperty_Value, 0, 100, 0); } } } GWEN_PROGRESS_DATA *GWEN_DlgProgress_GetSecondProgress(const GWEN_DIALOG *dlg) { GWEN_DLGPROGRESS *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GWEN_DLGPROGRESS, dlg); assert(xdlg); return xdlg->secondProgress; } void GWEN_DlgProgress_SetSecondProgress(GWEN_DIALOG *dlg, GWEN_PROGRESS_DATA *pd) { GWEN_DLGPROGRESS *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GWEN_DLGPROGRESS, dlg); assert(xdlg); xdlg->secondProgress=pd; if (xdlg->wasInit) { if (xdlg->secondProgress) { GWEN_Dialog_SetIntProperty(dlg, "currentProgress", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "currentProgress", GWEN_DialogProperty_MaxValue, 0, GWEN_ProgressData_GetTotal(xdlg->secondProgress), 0); GWEN_Dialog_SetIntProperty(dlg, "currentProgress", GWEN_DialogProperty_Value, 0, GWEN_ProgressData_GetCurrent(xdlg->secondProgress), 0); } else { GWEN_Dialog_SetIntProperty(dlg, "currentProgress", GWEN_DialogProperty_Value, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "currentProgress", GWEN_DialogProperty_Enabled, 0, 0, 0); } } } void GWEN_DlgProgress_AddLogText(GWEN_DIALOG *dlg, GWEN_LOGGER_LEVEL level, const char *s) { GWEN_DLGPROGRESS *xdlg; GWEN_TIME *ti; int rv; GWEN_BUFFER *tbuf; const char *col; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GWEN_DLGPROGRESS, dlg); assert(xdlg); ti=GWEN_CurrentTime(); /* setup text string */ if (GWEN_Buffer_GetUsedBytes(xdlg->logBufferTxt)) GWEN_Buffer_AppendString(xdlg->logBufferTxt, "\n"); if (ti) rv=GWEN_Time_toString(ti, "hh:mm:ss", xdlg->logBufferTxt); else rv=GWEN_ERROR_GENERIC; if (rv<0) GWEN_Buffer_AppendString(xdlg->logBufferTxt, "??:??:??"); GWEN_Buffer_AppendString(xdlg->logBufferTxt, " "); if (s) GWEN_Buffer_AppendString(xdlg->logBufferTxt, s); /* setup HTML string */ GWEN_Buffer_AppendString(xdlg->logBufferHtml, ""); if (ti) rv=GWEN_Time_toString(ti, "hh:mm:ss", xdlg->logBufferHtml); else rv=GWEN_ERROR_GENERIC; if (rv<0) GWEN_Buffer_AppendString(xdlg->logBufferHtml, "??:??:??"); GWEN_Buffer_AppendString(xdlg->logBufferHtml, ""); if (level<=GWEN_LoggerLevel_Error) col="red"; else if (level==GWEN_LoggerLevel_Warning) col="blue"; else if (level==GWEN_LoggerLevel_Info) col="green"; else col=NULL; if (col) { GWEN_Buffer_AppendString(xdlg->logBufferHtml, "logBufferHtml, col); GWEN_Buffer_AppendString(xdlg->logBufferHtml,"\">"); } if (s) GWEN_Text_EscapeXmlToBuffer(s, xdlg->logBufferHtml); if (col) GWEN_Buffer_AppendString(xdlg->logBufferHtml, ""); GWEN_Buffer_AppendString(xdlg->logBufferHtml, ""); /* assemble full string, containing HTML and text log */ tbuf=GWEN_Buffer_new(0, GWEN_Buffer_GetUsedBytes(xdlg->logBufferHtml)+ GWEN_Buffer_GetUsedBytes(xdlg->logBufferTxt)+256, 0, 1); GWEN_Buffer_AppendString(tbuf, ""); GWEN_Buffer_AppendString(tbuf, GWEN_Buffer_GetStart(xdlg->logBufferHtml)); GWEN_Buffer_AppendString(tbuf, "
"); GWEN_Buffer_AppendString(tbuf, GWEN_Buffer_GetStart(xdlg->logBufferTxt)); GWEN_Dialog_SetCharProperty(dlg, "logText", GWEN_DialogProperty_Value, 0, GWEN_Buffer_GetStart(tbuf), 0); GWEN_Buffer_free(tbuf); } void GWEN_DlgProgress_Advanced(GWEN_DIALOG *dlg, GWEN_PROGRESS_DATA *pd) { GWEN_DLGPROGRESS *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GWEN_DLGPROGRESS, dlg); assert(xdlg); if (pd==xdlg->firstProgress) s="allProgress"; else if (pd==xdlg->secondProgress) s="currentProgress"; else { DBG_ERROR(GWEN_LOGDOMAIN, "Progress %08x is neither primary nor secondary", GWEN_ProgressData_GetId(pd)); return; } if (xdlg->wasInit) { GWEN_Dialog_SetIntProperty(dlg, s, GWEN_DialogProperty_Value, 0, GWEN_ProgressData_GetCurrent(pd), 0); } } void GWEN_DlgProgress_TotalChanged(GWEN_DIALOG *dlg, GWEN_PROGRESS_DATA *pd) { GWEN_DLGPROGRESS *xdlg; const char *s; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GWEN_DLGPROGRESS, dlg); assert(xdlg); if (pd==xdlg->firstProgress) s="allProgress"; else if (pd==xdlg->secondProgress) s="currentProgress"; else { DBG_ERROR(GWEN_LOGDOMAIN, "Progress %08x is neither primary nor secondary", GWEN_ProgressData_GetId(pd)); return; } if (xdlg->wasInit) { GWEN_Dialog_SetIntProperty(dlg, s, GWEN_DialogProperty_MaxValue, 0, GWEN_ProgressData_GetTotal(pd), 0); } } void GWEN_DlgProgress_Init(GWEN_DIALOG *dlg) { GWEN_DLGPROGRESS *xdlg; int i; GWEN_DB_NODE *dbParams; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GWEN_DLGPROGRESS, dlg); assert(xdlg); dbParams=GWEN_Dialog_GetPreferences(dlg); assert(dbParams); xdlg->withLogWidth=GWEN_DB_GetIntValue(dbParams, "dialog_width", 0, -1); xdlg->withLogHeight=GWEN_DB_GetIntValue(dbParams, "dialog_height", 0, -1); if (xdlg->showLog) { int i; i=xdlg->withLogWidth; if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); i=xdlg->withLogHeight; if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); GWEN_Dialog_SetIntProperty(dlg, "logGroup", GWEN_DialogProperty_Visibility, 0, 1, 0); } else { /* read width */ i=GWEN_DB_GetIntValue(dbParams, "dialog_width_nolog", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbParams, "dialog_height_nolog", 0, -1); if (i>=DIALOG_MINHEIGHT_NOLOG) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); GWEN_Dialog_SetIntProperty(dlg, "logGroup", GWEN_DialogProperty_Visibility, 0, 0, 0); } if (xdlg->firstProgress) { const char *s; s=GWEN_ProgressData_GetTitle(xdlg->firstProgress); if (s && *s) GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, s, 0); s=GWEN_ProgressData_GetText(xdlg->firstProgress); if (s && *s) GWEN_Dialog_SetCharProperty(dlg, "descrLabel", GWEN_DialogProperty_Title, 0, s, 0); GWEN_Dialog_SetIntProperty(dlg, "allProgress", GWEN_DialogProperty_MaxValue, 0, GWEN_ProgressData_GetTotal(xdlg->firstProgress), 0); GWEN_Dialog_SetIntProperty(dlg, "allProgress", GWEN_DialogProperty_Value, 0, GWEN_ProgressData_GetCurrent(xdlg->firstProgress), 0); } if (xdlg->secondProgress) { GWEN_Dialog_SetIntProperty(dlg, "currentProgress", GWEN_DialogProperty_MaxValue, 0, GWEN_ProgressData_GetTotal(xdlg->secondProgress), 0); GWEN_Dialog_SetIntProperty(dlg, "currentProgress", GWEN_DialogProperty_Value, 0, GWEN_ProgressData_GetCurrent(xdlg->secondProgress), 0); } GWEN_Dialog_SetIntProperty(dlg, "abortButton", GWEN_DialogProperty_Enabled, 0, 1, 0); GWEN_Dialog_SetIntProperty(dlg, "closeButton", GWEN_DialogProperty_Enabled, 0, 0, 0); xdlg->wasInit=1; } void GWEN_DlgProgress_Fini(GWEN_DIALOG *dlg) { GWEN_DLGPROGRESS *xdlg; int i; GWEN_DB_NODE *dbParams; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GWEN_DLGPROGRESS, dlg); assert(xdlg); dbParams=GWEN_Dialog_GetPreferences(dlg); assert(dbParams); /* store dialog width */ if (xdlg->showLog) { i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbParams, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbParams, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height", i); } else { i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); GWEN_DB_SetIntValue(dbParams, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_width_nolog", i); /* store dialog height */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, -1); GWEN_DB_SetIntValue(dbParams, GWEN_DB_FLAGS_OVERWRITE_VARS, "dialog_height_nolog", i); } } int GWEN_DlgProgress_HandleActivated(GWEN_DIALOG *dlg, const char *sender) { GWEN_DLGPROGRESS *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GWEN_DLGPROGRESS, dlg); assert(xdlg); if (strcasecmp(sender, "closeButton")==0) { return GWEN_DialogEvent_ResultAccept; } else if (strcasecmp(sender, "abortButton")==0) { if (xdlg->firstProgress) GWEN_ProgressData_SetAborted(xdlg->firstProgress, 1); if (xdlg->secondProgress) GWEN_ProgressData_SetAborted(xdlg->secondProgress, 1); xdlg->stayOpen=1; GWEN_Dialog_SetIntProperty(dlg, "abortButton", GWEN_DialogProperty_Enabled, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "closeButton", GWEN_DialogProperty_Enabled, 0, 1, 0); return GWEN_DialogEvent_ResultHandled; } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB GWEN_DlgProgress_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { GWEN_DLGPROGRESS *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GWEN_DLGPROGRESS, dlg); assert(xdlg); switch(t) { case GWEN_DialogEvent_TypeInit: GWEN_DlgProgress_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: GWEN_DlgProgress_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeValueChanged: break; case GWEN_DialogEvent_TypeActivated: return GWEN_DlgProgress_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: if (xdlg->allowClose==0) return GWEN_DialogEvent_ResultReject; else return GWEN_DialogEvent_ResultAccept; case GWEN_DialogEvent_TypeLast: return GWEN_DialogEvent_ResultNotHandled; } return GWEN_DialogEvent_ResultNotHandled; } gwenhywfar-4.15.2beta/src/gui/cgui_l.h0000644000175000017500000000123712364015347014537 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: cbanking_p.h 409 2005-08-05 18:13:06Z aquamaniac $ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_GUI_CGUI_L_H #define GWEN_GUI_CGUI_L_H #include "cgui.h" #include #include #endif gwenhywfar-4.15.2beta/src/gui/Makefile.am0000644000175000017500000000243312364015347015157 00000000000000INCLUDES= -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/parser @all_includes@ AM_CFLAGS=@visibility_cflags@ -DBUILDING_GWENHYWFAR noinst_LTLIBRARIES=libgui.la noinst_HEADERS=\ cgui_p.h \ cprogress_l.h cprogress_p.h \ dialog_p.h \ gui_l.h gui_p.h cgui_l.h \ widget_l.h widget_p.h \ progressdata_l.h progressdata_p.h \ dlg_progress_l.h dlg_progress_p.h \ dlg_input_l.h dlg_input_p.h \ dlg_message_l.h dlg_message_p.h \ dlg_showbox_l.h dlg_showbox_p.h \ passwdstore_p.h iheaderdir=$(gwenhywfar_headerdir_am)/gwenhywfar iheader_HEADERS=\ cgui.h \ dialog.h dialog_be.h \ gui.h gui_be.h \ widget_be.h \ passwdstore.h libgui_la_SOURCES=\ cgui.c \ cprogress.c \ dialog.c \ gui.c \ widget.c \ progressdata.c \ dlg_progress.c \ dlg_input.c \ dlg_message.c \ dlg_showbox.c \ passwdstore.c dlgdatadir=$(pkgdatadir)/dialogs dlgdata_DATA=\ dlg_input.dlg \ dlg_message.dlg \ dlg_progress.dlg \ dlg_showbox.dlg EXTRA_DIST=$(dlgdata_DATA) sources: for f in $(libgui_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dlgdata_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/dlgsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-4.15.2beta/src/gui/dlg_progress_l.h0000644000175000017500000000272112416477066016311 00000000000000/*************************************************************************** begin : Tue Feb 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_GUI_DLG_PROGRESS_L_H #define GWEN_GUI_DLG_PROGRESS_L_H #include "progressdata_l.h" #include GWEN_DIALOG *GWEN_DlgProgress_new(void); GWEN_PROGRESS_DATA *GWEN_DlgProgress_GetFirstProgress(const GWEN_DIALOG *dlg); void GWEN_DlgProgress_SetFirstProgress(GWEN_DIALOG *dlg, GWEN_PROGRESS_DATA *pd); GWEN_PROGRESS_DATA *GWEN_DlgProgress_GetSecondProgress(const GWEN_DIALOG *dlg); void GWEN_DlgProgress_SetSecondProgress(GWEN_DIALOG *dlg, GWEN_PROGRESS_DATA *pd); void GWEN_DlgProgress_AddLogText(GWEN_DIALOG *dlg, GWEN_LOGGER_LEVEL level, const char *s); void GWEN_DlgProgress_Advanced(GWEN_DIALOG *dlg, GWEN_PROGRESS_DATA *pd); void GWEN_DlgProgress_TotalChanged(GWEN_DIALOG *dlg, GWEN_PROGRESS_DATA *pd); void GWEN_DlgProgress_SetAllowClose(GWEN_DIALOG *dlg, int b); void GWEN_DlgProgress_SetStayOpen(GWEN_DIALOG *dlg, int b); int GWEN_DlgProgress_GetStayOpen(const GWEN_DIALOG *dlg); void GWEN_DlgProgress_SetShowLog(GWEN_DIALOG *dlg, int b); #endif gwenhywfar-4.15.2beta/src/gui/dlg_input_l.h0000644000175000017500000000157712416477066015614 00000000000000/*************************************************************************** begin : Wed Feb 17 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_GUI_DLG_INPUT_L_H #define GWEN_GUI_DLG_INPUT_L_H #include GWEN_DIALOG *GWEN_DlgInput_new(uint32_t flags, const char *title, const char *text, int minLen, int maxLen); int GWEN_DlgInput_CopyInput(GWEN_DIALOG *dlg, char *buffer, int size); int GWEN_DlgInput_GetFlagAllowStore(GWEN_DIALOG *dlg); #endif gwenhywfar-4.15.2beta/src/gui/cprogress_l.h0000644000175000017500000000265312416477066015632 00000000000000 #ifndef GWENHYWFAR_GUI_CPROGRESS_H #define GWENHYWFAR_GUI_CPROGRESS_H #include #include #include #include typedef struct GWEN_GUI_CPROGRESS GWEN_GUI_CPROGRESS; GWEN_LIST_FUNCTION_DEFS(GWEN_GUI_CPROGRESS, GWEN_Gui_CProgress) GWEN_GUI_CPROGRESS *GWEN_Gui_CProgress_new(GWEN_GUI *gui, uint32_t id, uint32_t progressFlags, const char *title, const char *text, uint64_t total); void GWEN_Gui_CProgress_free(GWEN_GUI_CPROGRESS *cp); GWEN_GUI *GWEN_Gui_CProgress_GetGui(const GWEN_GUI_CPROGRESS *cp); uint32_t GWEN_Gui_CProgress_GetId(const GWEN_GUI_CPROGRESS *cp); const char *GWEN_Gui_CProgress_GetTitle(const GWEN_GUI_CPROGRESS *cp); const char *GWEN_Gui_CProgress_GetText(const GWEN_GUI_CPROGRESS *cp); uint64_t GWEN_Gui_CProgress_GetTotal(const GWEN_GUI_CPROGRESS *cp); void GWEN_Gui_CProgress_SetTotal(GWEN_GUI_CPROGRESS *cp, uint64_t i); uint64_t GWEN_Gui_CProgress_GetCurrent(const GWEN_GUI_CPROGRESS *cp); const char *GWEN_Gui_CProgress_GetLogBuf(const GWEN_GUI_CPROGRESS *cp); int GWEN_Gui_CProgress_GetAborted(const GWEN_GUI_CPROGRESS *cp); int GWEN_Gui_CProgress_Advance(GWEN_GUI_CPROGRESS *cp, uint64_t progress); int GWEN_Gui_CProgress_Log(GWEN_GUI_CPROGRESS *cp, GWEN_LOGGER_LEVEL level, const char *text); int GWEN_Gui_CProgress_End(GWEN_GUI_CPROGRESS *cp); #endif gwenhywfar-4.15.2beta/src/gui/dlg_showbox_p.h0000644000175000017500000000155012416477066016141 00000000000000/*************************************************************************** begin : Wed Feb 17 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_GUI_DLG_SHOWBOX_P_H #define GWEN_GUI_DLG_SHOWBOX_P_H #include "dlg_showbox_l.h" struct GWEN_DLGSHOWBOX { int wasInit; uint32_t flags; char *title; char *text; }; typedef struct GWEN_DLGSHOWBOX GWEN_DLGSHOWBOX; static int GWENHYWFAR_CB GWEN_DlgShowBox_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); static void GWENHYWFAR_CB GWEN_DlgShowBox_FreeData(void *bp, void *p); #endif gwenhywfar-4.15.2beta/src/gui/dlg_message_l.h0000644000175000017500000000157612416477066016100 00000000000000/*************************************************************************** begin : Wed Feb 17 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_GUI_DLG_MESSAGE_L_H #define GWEN_GUI_DLG_MESSAGE_L_H #include GWEN_DIALOG *GWEN_DlgMessage_new(uint32_t flags, const char *title, const char *text, const char *b1, const char *b2, const char *b3); int GWEN_DlgMessage_GetResponse(const GWEN_DIALOG *dlg); #endif gwenhywfar-4.15.2beta/src/gui/dlg_message.dlg0000644000175000017500000000144412364015347016066 00000000000000 gwenhywfar-4.15.2beta/src/gui/dialog.c0000644000175000017500000004622712416477066014547 00000000000000/*************************************************************************** begin : Wed Jan 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "dialog_p.h" #include "widget_l.h" #include "gui_l.h" #include #include #include #include #include #include GWEN_INHERIT_FUNCTIONS(GWEN_DIALOG) GWEN_LIST_FUNCTIONS(GWEN_DIALOG, GWEN_Dialog) GWEN_LIST2_FUNCTIONS(GWEN_DIALOG, GWEN_Dialog) GWEN_DIALOG *GWEN_Dialog_new(const char *dialogId) { GWEN_DIALOG *dlg; int rv; GWEN_DB_NODE *db=NULL; GWEN_NEW_OBJECT(GWEN_DIALOG, dlg); dlg->refCount=1; GWEN_INHERIT_INIT(GWEN_DIALOG, dlg); GWEN_LIST_INIT(GWEN_DIALOG, dlg); if (dialogId && *dialogId) dlg->dialogId=strdup(dialogId); dlg->i18nDomain=strdup(PACKAGE); dlg->widgets=GWEN_Widget_Tree_new(); dlg->subDialogs=GWEN_Dialog_List_new(); /* try to load preferences */ rv=GWEN_Gui_ReadDialogPrefs(dialogId, NULL, &db); if (rv<0) { DBG_WARN(GWEN_LOGDOMAIN, "Could not read dialog preferences (%d)", rv); dlg->dbPreferences=GWEN_DB_Group_new("preferences"); } else { dlg->dbPreferences=db; } dlg->mediaPaths=GWEN_StringList_new(); return dlg; } void GWEN_Dialog_free(GWEN_DIALOG *dlg) { if (dlg) { assert(dlg->refCount); if (dlg->refCount>1) { dlg->refCount--; } else { int rv; /* try to save preferences */ rv=GWEN_Gui_WriteDialogPrefs(dlg->dialogId, dlg->dbPreferences); if (rv<0) { DBG_WARN(GWEN_LOGDOMAIN, "Could not write dialog preferences (%d)", rv); } GWEN_INHERIT_FINI(GWEN_DIALOG, dlg); GWEN_LIST_FINI(GWEN_DIALOG, dlg); GWEN_Widget_Tree_free(dlg->widgets); free(dlg->dialogId); free(dlg->i18nDomain); dlg->refCount=0; GWEN_Dialog_List_free(dlg->subDialogs); GWEN_DB_Group_free(dlg->dbPreferences); GWEN_StringList_free(dlg->mediaPaths); GWEN_FREE_OBJECT(dlg); } } } GWEN_DIALOG *GWEN_Dialog_GetParentDialog(const GWEN_DIALOG *dlg) { assert(dlg); assert(dlg->refCount); return dlg->parentDialog; } const char *GWEN_Dialog_GetId(const GWEN_DIALOG *dlg) { assert(dlg); assert(dlg->refCount); return dlg->dialogId; } uint32_t GWEN_Dialog_GetGuiId(const GWEN_DIALOG *dlg) { assert(dlg); assert(dlg->refCount); return dlg->guiId; } void GWEN_Dialog_SetGuiId(GWEN_DIALOG *dlg, uint32_t guiid) { assert(dlg); assert(dlg->refCount); dlg->guiId=guiid; } void GWEN_Dialog_SetI18nDomain(GWEN_DIALOG *dlg, const char *s) { assert(dlg); assert(dlg->refCount); free(dlg->i18nDomain); if (s) dlg->i18nDomain=strdup(s); else dlg->i18nDomain=strdup(PACKAGE); } const char *GWEN_Dialog_GetI18nDomain(const GWEN_DIALOG *dlg) { assert(dlg); assert(dlg->refCount); return dlg->i18nDomain; } const char *GWEN_Dialog_TranslateString(const GWEN_DIALOG *dlg, const char *s) { assert(dlg); assert(dlg->refCount); return GWEN_I18N_Translate(dlg->i18nDomain, s); } void GWEN_Dialog_AddMediaPath(GWEN_DIALOG *dlg, const char *s) { assert(dlg); assert(dlg->refCount); GWEN_StringList_AppendString(dlg->mediaPaths, s, 0, 1); } void GWEN_Dialog_AddMediaPathsFromPathManager(GWEN_DIALOG *dlg, const char *destlib, const char *pathName, const char *relPath) { GWEN_STRINGLIST *sl; sl=GWEN_PathManager_GetPaths(destlib, pathName); if (sl) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(sl); if (se) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); assert(s); if (relPath) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendString(tbuf, relPath); GWEN_StringList_AppendString(dlg->mediaPaths, GWEN_Buffer_GetStart(tbuf), 0, 1); GWEN_Buffer_Reset(tbuf); } else GWEN_StringList_AppendString(dlg->mediaPaths, s, 0, 1); se=GWEN_StringListEntry_Next(se); } GWEN_Buffer_free(tbuf); } GWEN_StringList_free(sl); } } GWEN_STRINGLIST *GWEN_Dialog_GetMediaPaths(const GWEN_DIALOG *dlg) { assert(dlg); assert(dlg->refCount); return dlg->mediaPaths; } GWEN_DIALOG_SIGNALHANDLER GWEN_Dialog_SetSignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_SIGNALHANDLER fn) { GWEN_DIALOG_SIGNALHANDLER oh; assert(dlg); assert(dlg->refCount); oh=dlg->signalHandler; dlg->signalHandler=fn; return oh; } int GWEN_Dialog_EmitSignal(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { assert(dlg); assert(dlg->refCount); if (dlg->signalHandler) return (dlg->signalHandler)(dlg, t, sender); else { DBG_WARN(GWEN_LOGDOMAIN, "No signal handler in dialog [%s]", (dlg->dialogId)?(dlg->dialogId):"-unnamed-"); return GWEN_DialogEvent_ResultNotHandled; } } int GWEN_Dialog_EmitSignalToAll(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { int rv; GWEN_DIALOG *subdlg; assert(dlg); assert(dlg->refCount); subdlg=GWEN_Dialog_List_First(dlg->subDialogs); while(subdlg) { rv=GWEN_Dialog_EmitSignalToAll(subdlg, t, sender); if (rv!=GWEN_DialogEvent_ResultHandled && rv!=GWEN_DialogEvent_ResultNotHandled) return rv; subdlg=GWEN_Dialog_List_Next(subdlg); } if (dlg->signalHandler) { rv=(dlg->signalHandler)(dlg, t, sender); if (rv!=GWEN_DialogEvent_ResultHandled && rv!=GWEN_DialogEvent_ResultNotHandled) return rv; } return GWEN_DialogEvent_ResultHandled; } int GWEN_Dialog_AddSubDialog(GWEN_DIALOG *dlg, const char *parentName, GWEN_DIALOG *subdlg) { GWEN_WIDGET *wparent; wparent=GWEN_Dialog_FindWidgetByName(dlg, parentName); if (wparent) { GWEN_WIDGET *subRoot; GWEN_WIDGET *cw; /* move all widgets from the below sub dialog's root widget to the parent dialog */ subRoot=GWEN_Widget_Tree_GetFirst(subdlg->widgets); if (subRoot) { while( (cw=GWEN_Widget_Tree_GetFirstChild(subRoot)) ) { if (subdlg->firstSubWidget==NULL) subdlg->firstSubWidget=cw; GWEN_Widget_Tree_Del(cw); GWEN_Widget_Tree_AddChild(wparent, cw); } } /* store pointer to parent widget in dialog */ subdlg->parentWidget=wparent; /* store pointer to parent dialog in dialog */ subdlg->parentDialog=dlg; GWEN_Dialog_List_Add(subdlg, dlg->subDialogs); return 0; } else { DBG_ERROR(GWEN_LOGDOMAIN, "Parent widget [%s] not found", parentName); return GWEN_ERROR_NOT_FOUND; } } int GWEN_Dialog__ReadXmlWidget(GWEN_DIALOG *dlg, GWEN_WIDGET *wparent, GWEN_XMLNODE *node) { GWEN_XMLNODE *n; GWEN_WIDGET *w; int rv; w=GWEN_Widget_new(dlg); rv=GWEN_Widget_ReadXml(w, node); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Widget_free(w); return rv; } if (wparent) GWEN_Widget_Tree_AddChild(wparent, w); else GWEN_Widget_Tree_Add(dlg->widgets, w); n=GWEN_XMLNode_FindFirstTag(node, "widget", NULL, NULL); while(n) { int rv; rv=GWEN_Dialog__ReadXmlWidget(dlg, w, n); if (rv<0) return rv; n=GWEN_XMLNode_FindNextTag(n, "widget", NULL, NULL); } return 0; } int GWEN_Dialog_ReadXml(GWEN_DIALOG *dlg, GWEN_XMLNODE *node) { int rv; const char *s; assert(dlg); assert(dlg->refCount); assert(dlg->widgets); GWEN_Widget_Tree_Clear(dlg->widgets); s=GWEN_XMLNode_GetProperty(node, "i18n", NULL); if (s && *s) GWEN_Dialog_SetI18nDomain(dlg, s); rv=GWEN_Dialog__ReadXmlWidget(dlg, NULL, node); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Widget_Tree_free(dlg->widgets); dlg->widgets=NULL; return rv; } return 0; } int GWEN_Dialog_ReadXmlFile(GWEN_DIALOG *dlg, const char *fname) { GWEN_XMLNODE *n; GWEN_XMLNODE *nDialog; int rv; n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); rv=GWEN_XML_ReadFile(n, fname, GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_HANDLE_HEADERS); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_XMLNode_free(n); return rv; } nDialog=GWEN_XMLNode_FindFirstTag(n, "dialog", NULL, NULL); if (nDialog==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Dialog element not found in XML file [%s]", fname); GWEN_XMLNode_free(n); return rv; } rv=GWEN_Dialog_ReadXml(dlg, nDialog); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_XMLNode_free(n); return rv; } GWEN_XMLNode_free(n); return 0; } GWEN_WIDGET *GWEN_Dialog_FindWidgetByName(const GWEN_DIALOG *dlg, const char *name) { GWEN_WIDGET *w; assert(dlg); assert(dlg->refCount); assert(dlg->widgets); #if 0 if (dlg->parentWidget) w=dlg->parentWidget; else w=GWEN_Widget_Tree_GetFirst(dlg->widgets); #else if (dlg->firstSubWidget) w=dlg->firstSubWidget; else { w=GWEN_Widget_Tree_GetFirst(dlg->widgets); /* empty name always corresponds to the root */ if (name==NULL || *name==0) return w; } #endif while(w) { const char *s; s=GWEN_Widget_GetName(w); if (s && *s && strcasecmp(s, name)==0) break; w=GWEN_Widget_Tree_GetBelow(w); } return w; } GWEN_WIDGET *GWEN_Dialog_FindWidgetByImplData(const GWEN_DIALOG *dlg, int index, const void *ptr) { GWEN_WIDGET *w; assert(dlg); assert(dlg->refCount); assert(dlg->widgets); if (dlg->parentWidget) w=dlg->parentWidget; else w=GWEN_Widget_Tree_GetFirst(dlg->widgets); while(w) { if (ptr==GWEN_Widget_GetImplData(w, index)) break; w=GWEN_Widget_Tree_GetBelow(w); } return w; } GWEN_WIDGET_TREE *GWEN_Dialog_GetWidgets(const GWEN_DIALOG *dlg) { assert(dlg); assert(dlg->refCount); assert(dlg->widgets); return dlg->widgets; } GWEN_DIALOG_SETINTPROPERTY_FN GWEN_Dialog_SetSetIntPropertyFn(GWEN_DIALOG *dlg, GWEN_DIALOG_SETINTPROPERTY_FN fn) { GWEN_DIALOG_SETINTPROPERTY_FN oh; assert(dlg); assert(dlg->refCount); oh=dlg->setIntPropertyFn; dlg->setIntPropertyFn=fn; return oh; } GWEN_DIALOG_GETINTPROPERTY_FN GWEN_Dialog_SetGetIntPropertyFn(GWEN_DIALOG *dlg, GWEN_DIALOG_GETINTPROPERTY_FN fn) { GWEN_DIALOG_GETINTPROPERTY_FN oh; assert(dlg); assert(dlg->refCount); oh=dlg->getIntPropertyFn; dlg->getIntPropertyFn=fn; return oh; } GWEN_DIALOG_SETCHARPROPERTY_FN GWEN_Dialog_SetSetCharPropertyFn(GWEN_DIALOG *dlg, GWEN_DIALOG_SETCHARPROPERTY_FN fn) { GWEN_DIALOG_SETCHARPROPERTY_FN oh; assert(dlg); assert(dlg->refCount); oh=dlg->setCharPropertyFn; dlg->setCharPropertyFn=fn; return oh; } GWEN_DIALOG_GETCHARPROPERTY_FN GWEN_Dialog_SetGetCharPropertyFn(GWEN_DIALOG *dlg, GWEN_DIALOG_GETCHARPROPERTY_FN fn) { GWEN_DIALOG_GETCHARPROPERTY_FN oh; assert(dlg); assert(dlg->refCount); oh=dlg->getCharPropertyFn; dlg->getCharPropertyFn=fn; return oh; } int GWEN_Dialog_SetIntProperty(GWEN_DIALOG *dlg, const char *name, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { GWEN_WIDGET *w; assert(dlg); assert(dlg->refCount); w=GWEN_Dialog_FindWidgetByName(dlg, name); if (w) { if (dlg->setIntPropertyFn) return dlg->setIntPropertyFn(dlg, w, prop, index, value, doSignal); else if (dlg->parentDialog && dlg->parentDialog->setIntPropertyFn) return dlg->parentDialog->setIntPropertyFn(dlg->parentDialog, w, prop, index, value, doSignal); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Widget [%s] not found", name); return GWEN_ERROR_NOT_FOUND; } DBG_ERROR(GWEN_LOGDOMAIN, "Function pointer not set"); return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_Dialog_GetIntProperty(GWEN_DIALOG *dlg, const char *name, GWEN_DIALOG_PROPERTY prop, int index, int defaultProperty) { GWEN_WIDGET *w; assert(dlg); assert(dlg->refCount); w=GWEN_Dialog_FindWidgetByName(dlg, name); if (w) { if (dlg->getIntPropertyFn) return dlg->getIntPropertyFn(dlg, w, prop, index, defaultProperty); else if (dlg->parentDialog && dlg->parentDialog->getIntPropertyFn) return dlg->parentDialog->getIntPropertyFn(dlg->parentDialog, w, prop, index, defaultProperty); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Widget [%s] not found", name); return defaultProperty; } DBG_ERROR(GWEN_LOGDOMAIN, "Function pointer not set"); return defaultProperty; } int GWEN_Dialog_SetCharProperty(GWEN_DIALOG *dlg, const char *name, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { GWEN_WIDGET *w; assert(dlg); assert(dlg->refCount); w=GWEN_Dialog_FindWidgetByName(dlg, name); if (w) { if (dlg->setCharPropertyFn) return dlg->setCharPropertyFn(dlg, w, prop, index, value, doSignal); else if (dlg->parentDialog && dlg->parentDialog->setCharPropertyFn) return dlg->parentDialog->setCharPropertyFn(dlg->parentDialog, w, prop, index, value, doSignal); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Widget [%s] not found", name); return GWEN_ERROR_NOT_FOUND; } DBG_ERROR(GWEN_LOGDOMAIN, "Function pointer not set"); return GWEN_ERROR_NOT_IMPLEMENTED; } const char *GWEN_Dialog_GetCharProperty(GWEN_DIALOG *dlg, const char *name, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultProperty) { GWEN_WIDGET *w; assert(dlg); assert(dlg->refCount); w=GWEN_Dialog_FindWidgetByName(dlg, name); if (w) { if (dlg->getCharPropertyFn) return dlg->getCharPropertyFn(dlg, w, prop, index, defaultProperty); else if (dlg->parentDialog && dlg->parentDialog->getCharPropertyFn) return dlg->parentDialog->getCharPropertyFn(dlg->parentDialog, w, prop, index, defaultProperty); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Widget [%s] not found", name); return defaultProperty; } DBG_ERROR(GWEN_LOGDOMAIN, "Function pointer not set"); return defaultProperty; } int GWEN_Dialog_RemoveWidget(GWEN_DIALOG *dlg, const char *name) { GWEN_WIDGET *w; w=GWEN_Dialog_FindWidgetByName(dlg, name); if (w) { GWEN_Widget_Tree_Del(w); GWEN_Widget_free(w); return 0; } return GWEN_ERROR_NOT_FOUND; } uint32_t GWEN_Dialog_GetWidgetFlags(const GWEN_DIALOG *dlg, const char *name) { GWEN_WIDGET *w; w=GWEN_Dialog_FindWidgetByName(dlg, name); if (w) { return GWEN_Widget_GetFlags(w); } return 0; } void GWEN_Dialog_SetWidgetFlags(GWEN_DIALOG *dlg, const char *name, uint32_t fl) { GWEN_WIDGET *w; w=GWEN_Dialog_FindWidgetByName(dlg, name); if (w) { GWEN_Widget_SetFlags(w, fl); } } void GWEN_Dialog_AddWidgetFlags(GWEN_DIALOG *dlg, const char *name, uint32_t fl) { GWEN_WIDGET *w; w=GWEN_Dialog_FindWidgetByName(dlg, name); if (w) { GWEN_Widget_AddFlags(w, fl); } } void GWEN_Dialog_SubWidgetFlags(GWEN_DIALOG *dlg, const char *name, uint32_t fl) { GWEN_WIDGET *w; w=GWEN_Dialog_FindWidgetByName(dlg, name); if (w) { GWEN_Widget_SubFlags(w, fl); } } int GWEN_Dialog_GetWidgetColumns(const GWEN_DIALOG *dlg, const char *name) { GWEN_WIDGET *w; w=GWEN_Dialog_FindWidgetByName(dlg, name); if (w) { return GWEN_Widget_GetColumns(w); } return -1; } void GWEN_Dialog_SetWidgetColumns(GWEN_DIALOG *dlg, const char *name, int i) { GWEN_WIDGET *w; w=GWEN_Dialog_FindWidgetByName(dlg, name); if (w) { GWEN_Widget_SetColumns(w, i); } } int GWEN_Dialog_GetWidgetRows(const GWEN_DIALOG *dlg, const char *name) { GWEN_WIDGET *w; w=GWEN_Dialog_FindWidgetByName(dlg, name); if (w) { return GWEN_Widget_GetRows(w); } return -1; } void GWEN_Dialog_SetWidgetRows(GWEN_DIALOG *dlg, const char *name, int i) { GWEN_WIDGET *w; w=GWEN_Dialog_FindWidgetByName(dlg, name); if (w) { GWEN_Widget_SetRows(w, i); } } void GWEN_Dialog_SetWidgetText(GWEN_DIALOG *dlg, const char *name, const char *t) { GWEN_WIDGET *w; w=GWEN_Dialog_FindWidgetByName(dlg, name); if (w) { GWEN_Widget_SetText(w, 0, t); } } const char *GWEN_Dialog_GetWidgetText(const GWEN_DIALOG *dlg, const char *name) { GWEN_WIDGET *w; w=GWEN_Dialog_FindWidgetByName(dlg, name); if (w) { return GWEN_Widget_GetText(w, 0); } return NULL; } static void GWEN_Dialog_DumpWidget(const GWEN_WIDGET *w, FILE *f, unsigned int indent) { int i; const char *s; const char *dname=NULL; GWEN_DIALOG *dlg; const GWEN_WIDGET *c; for (i=0; iwidgets); GWEN_Dialog_DumpWidget(w, f, indent); } GWEN_DB_NODE *GWEN_Dialog_GetPreferences(const GWEN_DIALOG *dlg) { assert(dlg); assert(dlg->refCount); return dlg->dbPreferences; } gwenhywfar-4.15.2beta/src/gui/widget.c0000644000175000017500000004413312416477066014565 00000000000000/*************************************************************************** begin : Wed Jan 20 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "widget_p.h" #include #include #include #include #include GWEN_TREE_FUNCTIONS(GWEN_WIDGET, GWEN_Widget) GWEN_INHERIT_FUNCTIONS(GWEN_WIDGET) GWEN_WIDGET *GWEN_Widget_new(GWEN_DIALOG *dlg) { GWEN_WIDGET *w; GWEN_NEW_OBJECT(GWEN_WIDGET, w); w->refCount=1; GWEN_INHERIT_INIT(GWEN_WIDGET, w); GWEN_TREE_INIT(GWEN_WIDGET, w); w->dialog=dlg; return w; } void GWEN_Widget_free(GWEN_WIDGET *w) { if (w) { assert(w->refCount); if (w->refCount>1) { w->refCount--; } else { int i; GWEN_TREE_FINI(GWEN_WIDGET, w); GWEN_INHERIT_FINI(GWEN_WIDGET, w); free(w->name); for (i=0; itext[i]); free(w->iconFile); free(w->imageFile); w->refCount=0; GWEN_FREE_OBJECT(w); } } } GWEN_DIALOG *GWEN_Widget_GetDialog(const GWEN_WIDGET *w) { assert(w); assert(w->refCount); return w->dialog; } GWEN_DIALOG *GWEN_Widget_GetTopDialog(const GWEN_WIDGET *w) { GWEN_DIALOG *dlg; GWEN_DIALOG *pdlg; assert(w); assert(w->refCount); dlg=w->dialog; if (dlg) { while( (pdlg=GWEN_Dialog_GetParentDialog(dlg)) ) dlg=pdlg; return w->dialog; } return NULL; } void *GWEN_Widget_GetImplData(const GWEN_WIDGET *w, int index) { assert(w); assert(w->refCount); if (indeximpl_data[index]; else { DBG_ERROR(GWEN_LOGDOMAIN, "Index out of range"); return NULL; } } void GWEN_Widget_SetImplData(GWEN_WIDGET *w, int index, void *ptr) { assert(w); assert(w->refCount); if (indeximpl_data[index]=ptr; else { DBG_ERROR(GWEN_LOGDOMAIN, "Index out of range"); } } uint32_t GWEN_Widget_GetFlags(const GWEN_WIDGET *w) { assert(w); assert(w->refCount); return w->flags; } void GWEN_Widget_SetFlags(GWEN_WIDGET *w, uint32_t fl) { assert(w); assert(w->refCount); w->flags=fl; } void GWEN_Widget_AddFlags(GWEN_WIDGET *w, uint32_t fl) { assert(w); assert(w->refCount); w->flags|=fl; } void GWEN_Widget_SubFlags(GWEN_WIDGET *w, uint32_t fl) { assert(w); assert(w->refCount); w->flags&=~fl; } GWEN_WIDGET_TYPE GWEN_Widget_GetType(const GWEN_WIDGET *w) { assert(w); assert(w->refCount); return w->wtype; } void GWEN_Widget_SetType(GWEN_WIDGET *w, GWEN_WIDGET_TYPE t) { assert(w); assert(w->refCount); w->wtype=t; } int GWEN_Widget_GetColumns(const GWEN_WIDGET *w) { assert(w); assert(w->refCount); return w->columns; } void GWEN_Widget_SetColumns(GWEN_WIDGET *w, int i) { assert(w); assert(w->refCount); w->columns=i; } int GWEN_Widget_GetRows(const GWEN_WIDGET *w) { assert(w); assert(w->refCount); return w->rows; } void GWEN_Widget_SetRows(GWEN_WIDGET *w, int i) { assert(w); assert(w->refCount); w->rows=i; } int GWEN_Widget_GetGroupId(const GWEN_WIDGET *w) { assert(w); assert(w->refCount); return w->groupId; } void GWEN_Widget_SetGroupId(GWEN_WIDGET *w, int i) { assert(w); assert(w->refCount); w->groupId=i; } int GWEN_Widget_GetWidth(const GWEN_WIDGET *w) { assert(w); assert(w->refCount); return w->width; } void GWEN_Widget_SetWidth(GWEN_WIDGET *w, int i) { assert(w); assert(w->refCount); w->width=i; } int GWEN_Widget_GetHeight(const GWEN_WIDGET *w) { assert(w); assert(w->refCount); return w->height; } void GWEN_Widget_SetHeight(GWEN_WIDGET *w, int i) { assert(w); assert(w->refCount); w->height=i; } const char *GWEN_Widget_GetText(const GWEN_WIDGET *w, int idx) { assert(w); assert(w->refCount); if (idx<0 || idx>=GWEN_WIDGET_TEXTCOUNT) return NULL; return w->text[idx]; } void GWEN_Widget_SetText(GWEN_WIDGET *w, int idx, const char *s) { assert(w); assert(w->refCount); if (idx>=0 && idxtext[idx]); if (s) w->text[idx]=strdup(s); else w->text[idx]=NULL; } } const char *GWEN_Widget_GetName(const GWEN_WIDGET *w) { assert(w); assert(w->refCount); return w->name; } void GWEN_Widget_SetName(GWEN_WIDGET *w, const char *s) { assert(w); assert(w->refCount); free(w->name); if (s) w->name=strdup(s); else w->name=NULL; } const char *GWEN_Widget_GetIconFileName(const GWEN_WIDGET *w) { assert(w); assert(w->refCount); return w->iconFile; } void GWEN_Widget_SetIconFileName(GWEN_WIDGET *w, const char *s) { assert(w); assert(w->refCount); free(w->iconFile); if (s) w->iconFile=strdup(s); else w->iconFile=NULL; } const char *GWEN_Widget_GetImageFileName(const GWEN_WIDGET *w) { assert(w); assert(w->refCount); return w->imageFile; } void GWEN_Widget_SetImageFileName(GWEN_WIDGET *w, const char *s) { assert(w); assert(w->refCount); free(w->imageFile); if (s) w->imageFile=strdup(s); else w->imageFile=NULL; } GWEN_WIDGET_TYPE GWEN_Widget_Type_fromString(const char *s) { if (s && *s) { if (strcasecmp(s, "unknown")==0) return GWEN_Widget_TypeUnknown; else if (strcasecmp(s, "none")==0) return GWEN_Widget_TypeNone; else if (strcasecmp(s, "label")==0) return GWEN_Widget_TypeLabel; else if (strcasecmp(s, "pushButton")==0) return GWEN_Widget_TypePushButton; else if (strcasecmp(s, "lineEdit")==0) return GWEN_Widget_TypeLineEdit; else if (strcasecmp(s, "textEdit")==0) return GWEN_Widget_TypeTextEdit; else if (strcasecmp(s, "comboBox")==0) return GWEN_Widget_TypeComboBox; else if (strcasecmp(s, "radioButton")==0) return GWEN_Widget_TypeRadioButton; else if (strcasecmp(s, "progressBar")==0) return GWEN_Widget_TypeProgressBar; else if (strcasecmp(s, "groupBox")==0) return GWEN_Widget_TypeGroupBox; else if (strcasecmp(s, "hSpacer")==0) return GWEN_Widget_TypeHSpacer; else if (strcasecmp(s, "vSpacer")==0) return GWEN_Widget_TypeVSpacer; else if (strcasecmp(s, "hLayout")==0) return GWEN_Widget_TypeHLayout; else if (strcasecmp(s, "vLayout")==0) return GWEN_Widget_TypeVLayout; else if (strcasecmp(s, "gridLayout")==0) return GWEN_Widget_TypeGridLayout; else if (strcasecmp(s, "listBox")==0) return GWEN_Widget_TypeListBox; else if (strcasecmp(s, "dialog")==0) return GWEN_Widget_TypeDialog; else if (strcasecmp(s, "tabBook")==0) return GWEN_Widget_TypeTabBook; else if (strcasecmp(s, "tabPage")==0) return GWEN_Widget_TypeTabPage; else if (strcasecmp(s, "widgetStack")==0) return GWEN_Widget_TypeWidgetStack; else if (strcasecmp(s, "checkBox")==0) return GWEN_Widget_TypeCheckBox; else if (strcasecmp(s, "scrollArea")==0) return GWEN_Widget_TypeScrollArea; else if (strcasecmp(s, "hLine")==0) return GWEN_Widget_TypeHLine; else if (strcasecmp(s, "vLine")==0) return GWEN_Widget_TypeVLine; else if (strcasecmp(s, "textBrowser")==0) return GWEN_Widget_TypeTextBrowser; else if (strcasecmp(s, "spinBox")==0) return GWEN_Widget_TypeSpinBox; else { DBG_ERROR(GWEN_LOGDOMAIN, "Unknown widget type [%s]", s); } } return GWEN_Widget_TypeUnknown; } const char *GWEN_Widget_Type_toString(GWEN_WIDGET_TYPE t) { switch(t) { case GWEN_Widget_TypeNone: return "none"; case GWEN_Widget_TypeLabel: return "label"; case GWEN_Widget_TypePushButton: return "pushButton"; case GWEN_Widget_TypeLineEdit: return "lineEdit"; case GWEN_Widget_TypeTextEdit: return "textEdit"; case GWEN_Widget_TypeComboBox: return "comboBox"; case GWEN_Widget_TypeRadioButton: return "radioButton"; case GWEN_Widget_TypeProgressBar: return "progressBar"; case GWEN_Widget_TypeGroupBox: return "groupBox"; case GWEN_Widget_TypeHSpacer: return "hSpacer"; case GWEN_Widget_TypeVSpacer: return "vSpacer"; case GWEN_Widget_TypeHLayout: return "hLayout"; case GWEN_Widget_TypeVLayout: return "vLayout"; case GWEN_Widget_TypeGridLayout: return "gridLayout"; case GWEN_Widget_TypeListBox: return "listBox"; case GWEN_Widget_TypeDialog: return "dialog"; case GWEN_Widget_TypeTabBook: return "tabBook"; case GWEN_Widget_TypeTabPage: return "tabPage"; case GWEN_Widget_TypeWidgetStack: return "widgetStack"; case GWEN_Widget_TypeCheckBox: return "checkBox"; case GWEN_Widget_TypeScrollArea: return "scrollArea"; case GWEN_Widget_TypeHLine: return "hLine"; case GWEN_Widget_TypeVLine: return "vLine"; case GWEN_Widget_TypeTextBrowser: return "textBrowser"; case GWEN_Widget_TypeSpinBox: return "spinBox"; case GWEN_Widget_TypeUnknown: return "unknown"; } return "unknown"; } uint32_t GWEN_Widget_Flags_fromString(const char *s) { uint32_t fl=0; if (s && *s) { char *copy; char *p; copy=strdup(s); p=copy; while(*p) { char *wstart; /* skip blanks */ while(*p && isspace(*p)) p++; /* save start of word */ wstart=p; /* find end of word */ while(*p && !(isspace(*p) || *p==',')) p++; if (*p) /* set blank or comma to 0, advance pointer */ *(p++)=0; /* parse flags */ if (strcasecmp(wstart, "fillX")==0) fl|=GWEN_WIDGET_FLAGS_FILLX; else if (strcasecmp(wstart, "fillY")==0) fl|=GWEN_WIDGET_FLAGS_FILLY; else if (strcasecmp(wstart, "readOnly")==0) fl|=GWEN_WIDGET_FLAGS_READONLY; else if (strcasecmp(wstart, "password")==0) fl|=GWEN_WIDGET_FLAGS_PASSWORD; else if (strcasecmp(wstart, "default")==0) fl|=GWEN_WIDGET_FLAGS_DEFAULT_WIDGET; else if (strcasecmp(wstart, "decorShrinkable")==0) fl|=GWEN_WIDGET_FLAGS_DECOR_SHRINKABLE; else if (strcasecmp(wstart, "decorStretchable")==0) fl|=GWEN_WIDGET_FLAGS_DECOR_STRETCHABLE; else if (strcasecmp(wstart, "decorMinimize")==0) fl|=GWEN_WIDGET_FLAGS_DECOR_MINIMIZE; else if (strcasecmp(wstart, "decorMaximize")==0) fl|=GWEN_WIDGET_FLAGS_DECOR_MAXIMIZE; else if (strcasecmp(wstart, "decorClose")==0) fl|=GWEN_WIDGET_FLAGS_DECOR_CLOSE; else if (strcasecmp(wstart, "decorMenu")==0) fl|=GWEN_WIDGET_FLAGS_DECOR_MENU; else if (strcasecmp(wstart, "fixedWidth")==0) fl|=GWEN_WIDGET_FLAGS_FIXED_WIDTH; else if (strcasecmp(wstart, "fixedHeight")==0) fl|=GWEN_WIDGET_FLAGS_FIXED_HEIGHT; else if (strcasecmp(wstart, "equalWidth")==0) fl|=GWEN_WIDGET_FLAGS_EQUAL_WIDTH; else if (strcasecmp(wstart, "equalHeight")==0) fl|=GWEN_WIDGET_FLAGS_EQUAL_HEIGHT; else if (strcasecmp(wstart, "justifyLeft")==0) fl|=GWEN_WIDGET_FLAGS_JUSTIFY_LEFT; else if (strcasecmp(wstart, "justifyRight")==0) fl|=GWEN_WIDGET_FLAGS_JUSTIFY_RIGHT; else if (strcasecmp(wstart, "justifyTop")==0) fl|=GWEN_WIDGET_FLAGS_JUSTIFY_TOP; else if (strcasecmp(wstart, "justifyBottom")==0) fl|=GWEN_WIDGET_FLAGS_JUSTIFY_BOTTOM; else if (strcasecmp(wstart, "justifyCenterX")==0) fl|=GWEN_WIDGET_FLAGS_JUSTIFY_CENTERX; else if (strcasecmp(wstart, "justifyCenterY")==0) fl|=GWEN_WIDGET_FLAGS_JUSTIFY_CENTERY; else if (strcasecmp(wstart, "noWordWrap")==0) fl|=GWEN_WIDGET_FLAGS_NO_WORDWRAP; } } return fl; } int GWEN_Widget_ReadXml(GWEN_WIDGET *w, GWEN_XMLNODE *node) { const char *s; s=GWEN_XMLNode_GetProperty(node, "name", NULL); if (s && *s) GWEN_Widget_SetName(w, s); s=GWEN_XMLNode_GetProperty(node, "type", "unknown"); if (s && *s) { w->wtype=GWEN_Widget_Type_fromString(s); if (w->wtype==GWEN_Widget_TypeUnknown) { DBG_ERROR(GWEN_LOGDOMAIN, "unknown type in node"); GWEN_XMLNode_Dump(node, 2); return GWEN_ERROR_BAD_DATA; } } else { DBG_ERROR(GWEN_LOGDOMAIN, "type property missing in node"); return GWEN_ERROR_BAD_DATA; } s=GWEN_XMLNode_GetProperty(node, "flags", NULL); if (s && *s) w->flags=GWEN_Widget_Flags_fromString(s); s=GWEN_XMLNode_GetProperty(node, "columns", NULL); if (s && *s) { if (1!=sscanf(s, "%d", &(w->columns))) { DBG_ERROR(GWEN_LOGDOMAIN, "Value [%s] is not an integer", s); return GWEN_ERROR_BAD_DATA; } } s=GWEN_XMLNode_GetProperty(node, "rows", NULL); if (s && *s) { if (1!=sscanf(s, "%d", &(w->rows))) { DBG_ERROR(GWEN_LOGDOMAIN, "Value [%s] is not an integer", s); return GWEN_ERROR_BAD_DATA; } } s=GWEN_XMLNode_GetProperty(node, "width", NULL); if (s && *s) { if (1!=sscanf(s, "%d", &(w->width))) { DBG_ERROR(GWEN_LOGDOMAIN, "Value [%s] is not an integer", s); return GWEN_ERROR_BAD_DATA; } } s=GWEN_XMLNode_GetProperty(node, "height", NULL); if (s && *s) { if (1!=sscanf(s, "%d", &(w->height))) { DBG_ERROR(GWEN_LOGDOMAIN, "Value [%s] is not an integer", s); return GWEN_ERROR_BAD_DATA; } } s=GWEN_XMLNode_GetProperty(node, "text", NULL); if (s && *s) GWEN_Widget_SetText(w, 0, GWEN_Dialog_TranslateString(w->dialog, s)); s=GWEN_XMLNode_GetProperty(node, "icon", NULL); if (s && *s) GWEN_Widget_SetIconFileName(w, s); s=GWEN_XMLNode_GetProperty(node, "image", NULL); if (s && *s) GWEN_Widget_SetImageFileName(w, s); s=GWEN_XMLNode_GetProperty(node, "groupId", NULL); if (s && *s) { if (1!=sscanf(s, "%d", &(w->groupId))) { DBG_ERROR(GWEN_LOGDOMAIN, "Value [%s] is not an integer", s); return GWEN_ERROR_BAD_DATA; } } return 0; } GWEN_WIDGET_SETINTPROPERTY_FN GWEN_Widget_SetSetIntPropertyFn(GWEN_WIDGET *w, GWEN_WIDGET_SETINTPROPERTY_FN fn) { GWEN_WIDGET_SETINTPROPERTY_FN of; assert(w); assert(w->refCount); of=w->setIntPropertyFn; w->setIntPropertyFn=fn; return of; } GWEN_WIDGET_GETINTPROPERTY_FN GWEN_Widget_SetGetIntPropertyFn(GWEN_WIDGET *w, GWEN_WIDGET_GETINTPROPERTY_FN fn) { GWEN_WIDGET_GETINTPROPERTY_FN of; assert(w); assert(w->refCount); of=w->getIntPropertyFn; w->getIntPropertyFn=fn; return of; } GWEN_WIDGET_SETCHARPROPERTY_FN GWEN_Widget_SetSetCharPropertyFn(GWEN_WIDGET *w, GWEN_WIDGET_SETCHARPROPERTY_FN fn) { GWEN_WIDGET_SETCHARPROPERTY_FN of; assert(w); assert(w->refCount); of=w->setCharPropertyFn; w->setCharPropertyFn=fn; return of; } GWEN_WIDGET_GETCHARPROPERTY_FN GWEN_Widget_SetGetCharPropertyFn(GWEN_WIDGET *w, GWEN_WIDGET_GETCHARPROPERTY_FN fn) { GWEN_WIDGET_GETCHARPROPERTY_FN of; assert(w); assert(w->refCount); of=w->getCharPropertyFn; w->getCharPropertyFn=fn; return of; } GWEN_WIDGET_ADDCHILDGUIWIDGET_FN GWEN_Widget_SetAddChildGuiWidgetFn(GWEN_WIDGET *w, GWEN_WIDGET_ADDCHILDGUIWIDGET_FN fn) { GWEN_WIDGET_ADDCHILDGUIWIDGET_FN of; assert(w); assert(w->refCount); of=w->addChildGuiWidgetFn; w->addChildGuiWidgetFn=fn; return of; } int GWEN_Widget_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { assert(w); assert(w->refCount); if (w->setIntPropertyFn) return w->setIntPropertyFn(w, prop, index, value, doSignal); else return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_Widget_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { assert(w); assert(w->refCount); if (w->getIntPropertyFn) return w->getIntPropertyFn(w, prop, index, defaultValue); else return defaultValue; } int GWEN_Widget_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { assert(w); assert(w->refCount); if (w->setCharPropertyFn) return w->setCharPropertyFn(w, prop, index, value, doSignal); else return GWEN_ERROR_NOT_IMPLEMENTED; } const char* GWEN_Widget_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { assert(w); assert(w->refCount); if (w->getCharPropertyFn) return w->getCharPropertyFn(w, prop, index, defaultValue); else return defaultValue; } int GWEN_Widget_AddChildGuiWidget(GWEN_WIDGET *w, GWEN_WIDGET *wChild) { assert(w); assert(w->refCount); if (w->addChildGuiWidgetFn) return w->addChildGuiWidgetFn(w, wChild); else return GWEN_ERROR_NOT_IMPLEMENTED; } gwenhywfar-4.15.2beta/src/gui/gui.h0000644000175000017500000010571212416477066014074 00000000000000/*************************************************************************** begin : Tue Oct 02 2002 copyright : (C) 2002-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_GUI_GUI_H #define GWENHYWFAR_GUI_GUI_H #include #include #include #include #include #include #include #include /** @defgroup MOD_GUI Graphical User Interface * * @brief This module contains the definition of GWEN_GUI. * * The concept of this module is to have a single GWEN_GUI object per * application which is created at the start of your application. * This GWEN_GUI object tells Gwenhywfar (and libraries using the GWEN_GUI-mechanism) how to handle user interaction. * * The GWEN_GUI object contains callbacks for message display, user * input, progress reports, SSL certificate checking etc. * * There are implementations of GWEN_GUI based on console, QT3, QT4 and FOX. * * GWEN_GUI uses flags to tell implementations what the caller needs of the GUI * implementation. * * Callbacks which might create windows when using graphical user interfaces like * QT or FOX return GUI IDs (like @ref GWEN_Gui_ProgressStart()). These ids can be * used to create window stacks. The implementation can freely choose how to generate those * ids. The only fixed definition is that a GUIID of 0 refers to the last opened context (opened by * e.g. @ref GWEN_Gui_ProgressStart()). * * A simple example of how GWEN_GUI is used: * * @code * uint32_t pid; * * pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_SHOW_PROGRESS, * "Progress-Title", * "This is an example progress with 2 steps", * 2, * 0); * GWEN_Gui_ProgressAdvance(pid, 1); * rv=GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_TYPE_INFO, * "MessageBox-Title", * "This message box should appear in the context of the open progress dialog", * "Button1", * "Button2", * "Button3", * pid); * GWEN_Gui_ProgressAdvance(pid, 2); * GWEN_Gui_ProgressEnd(pid); * @endcode * * In this example a progress context is started (with the GUIID stored in the variable pid). Then in this context * a message box is opened and finally the progress context is closed. * * As seen in the example above the GUI ID returned by @ref GWEN_Gui_ProgressStart() is used as argument GUIID of the * function @ref GWEN_Gui_MessageBox(). Effectively this makes the message box appear in the context of the open progress. * * An implementation which uses a graphical interface (QT, FOX) will most probably use windows for * @ref GWEN_Gui_ProgressStart() and @ref GWEN_Gui_MessageBox(). In such a case the GUI IDs shown above can be used to * establish a parental relationship between those windows. In the example above the message box will have the open * progress dialog as parent window. * * However applications can use additional mechanisms to determine parent windows. QBankManager for example uses its own * GWEN_GUI implementation based on QT3. It contains methods for maintaining a stack of parent windows. * So whenever QBankManager wants GWEN_GUI user interaction to appear in a special window it calls QGui::pushParentWidget() * just before calling Gwenhywfar or AqBanking functions which might need user interaction and QGui::popParentWidget() * directly therafter. * * This mechanism makes it unnecessary to have multiple GUI objects. In fact using multiple GWEN_GUI objects is strongly * discouraged. The implementation should use the GUIID parameter of each callback instead to establish a relationship * between multiple windows. */ /*@{*/ #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_GUI GWEN_GUI; GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_GUI, GWENHYWFAR_API) #define GWEN_GUI_CPU_TIMEOUT 200 #define GWEN_GUI_CHECK_PERIOD 750 #define GWEN_GUI_DELAY_SECS 2 /** @name Flags For GWEN_Gui_ProgressStart * * These flags are given to @ref GWEN_Gui_ProgressStart to modify its * behaviour. */ /*@{*/ #define GWEN_GUI_PROGRESS_DELAY 0x00000001 #define GWEN_GUI_PROGRESS_SHOW_LOG 0x00000002 #define GWEN_GUI_PROGRESS_SHOW_ABORT 0x00000004 #define GWEN_GUI_PROGRESS_ALLOW_SUBLEVELS 0x00000008 #define GWEN_GUI_PROGRESS_ALLOW_EMBED 0x00000010 #define GWEN_GUI_PROGRESS_SHOW_PROGRESS 0x00000020 #define GWEN_GUI_PROGRESS_KEEP_OPEN 0x00000040 #define GWEN_GUI_PROGRESS_ALWAYS_SHOW_LOG 0x00000080 /*@}*/ /** @name Flags For GWEN_Gui_InputBox * * These flags are given to @ref GWEN_Gui_InputBox to modify its * behaviour. */ /*@{*/ /** input must be confirmed (e.g. by asking for the same input twice) */ #define GWEN_GUI_INPUT_FLAGS_CONFIRM 0x00000001 /** input may be shown (otherwise it should be hidden, e.g. for passwords) */ #define GWEN_GUI_INPUT_FLAGS_SHOW 0x00000002 /** numeric input is requested (e.g. for PINs) */ #define GWEN_GUI_INPUT_FLAGS_NUMERIC 0x00000004 /** if set then this is a retry (esp. when getting a PIN) */ #define GWEN_GUI_INPUT_FLAGS_RETRY 0x00000008 /** allow a default value to be used instead of an entered one. * A graphical UI should add a "default" button to the dialog. */ #define GWEN_GUI_INPUT_FLAGS_ALLOW_DEFAULT 0x00000010 /** The input is a TAN (this is used by @ref GWEN_Gui_GetPassword) */ #define GWEN_GUI_INPUT_FLAGS_TAN 0x00000020 /** The input contains optical data encapsuled in "$OBEGIN$" and "$OEND$" (this is used by @ref GWEN_Gui_GetPassword) */ #define GWEN_GUI_INPUT_FLAGS_OPTICAL 0x00000040 /** The input MUST come via user input, not from some sort of password cache */ #define GWEN_GUI_INPUT_FLAGS_DIRECT 0x00000080 /*@}*/ /** @name Flags For GWEN_Gui_MessageBox * * These flags are given to @ref GWEN_Gui_MessageBox to modify its * behaviour. You may OR-combine the flags.
* Examples: *
    *
  • * normal error message, multiple buttons, first button confirms * @code * (GWEN_GUI_MSG_FLAGS_TYPE_ERROR | * GWEN_GUI_MSG_FLAGS_CONFIRM_B1 | * GWEN_GUI_MSG_FLAGS_SEVERITY_NORMAL) * @endcode *
  • *
  • * dangerous error message, multiple buttons, first button confirms * @code * (GWEN_GUI_MSG_FLAGS_TYPE_ERROR | * GWEN_GUI_MSG_FLAGS_CONFIRM_B1 | * GWEN_GUI_MSG_FLAGS_SEVERITY_DANGEROUS) * @endcode *
  • *
*

* A note about confirmation buttons: Gwenhywfar has been designed with * non-interactive applications in mind. For such an application it is * important to know what button-press it has to simulate upon catching of a * messagebox callback. This is what the confimation button flags are for. * For informative messages the application may simply return the number of * the confirmation button and be done. *

*

* However, non-interactive applications should return an error (value 0) * for messages classified as dangerous * (see @ref GWEN_GUI_MSG_FLAGS_SEVERITY_DANGEROUS) to avoid data loss. *

*/ /*@{*/ /** * Defines the mask to catch the message type. E.g. a check whether a * message is a warning could be performed by: * @code * if ( ( flags & GWEN_GUI_MSG_FLAGS_TYPE_MASK) == * GWEN_GUI_MSG_FLAGS_TYPE_WARN) { * fprintf(stderr, "This is a warning.\n"); * } * @endcode */ #define GWEN_GUI_MSG_FLAGS_TYPE_MASK 0x07 /** The message is a simple information. */ #define GWEN_GUI_MSG_FLAGS_TYPE_INFO 0 /** check whether the given flags represent an info message */ #define GWEN_GUI_MSG_FLAGS_TYPE_IS_INFO(fl) \ ((fl & GWEN_GUI_MSG_FLAGS_TYPE_MASK)==GWEN_GUI_MSG_FLAGS_TYPE_INFO) /** The message is a warning */ #define GWEN_GUI_MSG_FLAGS_TYPE_WARN 1 /** check whether the given flags represent a warning message */ #define GWEN_GUI_MSG_FLAGS_TYPE_IS_WARN(fl) \ ((fl & GWEN_GUI_MSG_FLAGS_TYPE_MASK)==GWEN_GUI_MSG_FLAGS_TYPE_WARN) /** The message is a error message */ #define GWEN_GUI_MSG_FLAGS_TYPE_ERROR 2 /** check whether the given flags represent an error message */ #define GWEN_GUI_MSG_FLAGS_TYPE_IS_ERROR \ ((fl & GWEN_GUI_MSG_FLAGS_TYPE_MASK)==GWEN_GUI_MSG_FLAGS_TYPE_ERROR) /** button 1 is the confirmation button */ #define GWEN_GUI_MSG_FLAGS_CONFIRM_B1 (1<<3) /** button 2 is the confirmation button */ #define GWEN_GUI_MSG_FLAGS_CONFIRM_B2 (2<<3) /** button 3 is the confirmation button */ #define GWEN_GUI_MSG_FLAGS_CONFIRM_B3 (3<<3) /** Determine which button is the confirmation button */ #define GWEN_GUI_MSG_FLAGS_CONFIRM_BUTTON(fl) (((fl)>>3) & 0x3) /** *

* Check for the severity of the message. This allows non-interactive * backends to react on the message accordingly. * The backend calling this function thus allows the frontend to detect * when the message is important regarding data security. * E.g. a message like "Shall I delete this file" should be considered * dangerous (since this might result in a data loss). However, the message * "Application started" is not that dangerous ;-) *

*

* The following example allows to determine whether a message is * dangerous: * @code * if ( ( flags & GWEN_GUI_MSG_FLAGS_SEVERITY_MASK) == * GWEN_GUI_MSG_FLAGS_SEVERITY_DANGEROUS) { * fprintf(stderr, "This is dangerous.\n"); * } * @endcode *

*/ #define GWEN_GUI_MSG_FLAGS_SEVERITY_MASK (0x7<<5) /** Message does not affect security or induce any problem to the system */ #define GWEN_GUI_MSG_FLAGS_SEVERITY_NORMAL (0x0<<5) #define GWEN_GUI_MSG_FLAGS_SEVERITY_IS_NORMAL(fl) \ ((fl & GWEN_GUI_MSG_FLAGS_SEVERITY_MASK)==\ GWEN_GUI_MSG_FLAGS_SEVERITY_NORMAL) /** Message is considered dangerous and thus should be attended to by a * humanoid ;-) */ #define GWEN_GUI_MSG_FLAGS_SEVERITY_DANGEROUS (0x1<<5) #define GWEN_GUI_MSG_FLAGS_SEVERITY_IS_DANGEROUS(fl) \ ((fl & GWEN_GUI_MSG_FLAGS_SEVERITY_MASK)==\ GWEN_GUI_MSG_FLAGS_SEVERITY_DANGEROUS) /*@}*/ /** @name Flags For GWEN_Gui_ShowBox * */ /*@{*/ /** * Make the frontend beep. This should rarely be used, and only in situations * where it is very important to get the users attention (e.g. when asking * for a PIN on a card reader). */ #define GWEN_GUI_SHOWBOX_FLAGS_BEEP 0x00000001 /*@}*/ /** @name Special Progress Values for GWEN_Gui_ProgressAdvance * */ /*@{*/ /** * This value is used with @ref GWEN_Gui_ProgressAdvance to flag that * there really was no progress since the last call to that function but * that that function should simply check for user interaction (without * the need of updating the progress bar). */ #define GWEN_GUI_PROGRESS_NONE (0xffffffffUL) /** * This value is used when the total number of steps is not known to the * caller and he just wants to advance the progress by one (e.g. backends * use this value when a job has been finished, but the backends do not know * how many jobs there still are in AqBanking's queue). */ #define GWEN_GUI_PROGRESS_ONE (0xfffffffeUL) /*@}*/ /** * This status is used for passwords, pins and tans, e.g. by the CryptToken * code. * It can be used by implementations to mark bad pins, used/unused tans etc. */ typedef enum { GWEN_Gui_PasswordStatus_Bad=-1, GWEN_Gui_PasswordStatus_Unknown, GWEN_Gui_PasswordStatus_Ok, GWEN_Gui_PasswordStatus_Used, GWEN_Gui_PasswordStatus_Unused, GWEN_Gui_PasswordStatus_Remove } GWEN_GUI_PASSWORD_STATUS; /** @name Constructor, Destructor etc * */ /*@{*/ GWENHYWFAR_API GWEN_GUI *GWEN_Gui_new(void); GWENHYWFAR_API void GWEN_Gui_free(GWEN_GUI *gui); GWENHYWFAR_API void GWEN_Gui_Attach(GWEN_GUI *gui); GWENHYWFAR_API void GWEN_Gui_SetGui(GWEN_GUI *gui); GWENHYWFAR_API GWEN_GUI *GWEN_Gui_GetGui(void); /*@}*/ /** @name Character Set * * All messages and texts can be converted from UTF8 automatically. * This needs the name of the destination character set. * See output of iconv --list for a list of supported * character sets. */ /*@{*/ GWENHYWFAR_API const char *GWEN_Gui_GetCharSet(const GWEN_GUI *gui); GWENHYWFAR_API void GWEN_Gui_SetCharSet(GWEN_GUI *gui, const char *s); GWENHYWFAR_API int GWEN_Gui_ConvertString(const char *text, size_t len, GWEN_BUFFER *tbuf, const char *fromCs, const char *toCs); /*@}*/ /** @name Virtual User Interaction Functions * *

* All text passed to the frontend via one of the following functions * is expected to be an UTF-8 string which may contain newlines but no other * control characters. * Text delivered as argument called text throughout the documentation * in this group may contain HTML tags. * If it does a non-HTML version must be supplied, too. * The text MUST begin with the non-HTML version, so that a frontend not * capable of parsing HTML can simply exclude the HTML part by cutting * before " *

* This is an example for HTML and non-HTML text: *

* @code * const char *text; * * text="This is the non-HTML text" * "" * "And this is the HTML version." * "" * @endcode *

* Frontends capable of parsing HTML (such as the KDE frontend) will * extract the HTML information and show only that part of the string. *

*

* Other frontends have to extract the non-HTML information and show only * that. *

*/ /*@{*/ /** *

* Show a message box with optional buttons. * The message box may either contain 1, 2 or three buttons. * If only one button is wanted then b1 should hold a pointer to the button * text (b2 and b3 must be NULL) * In two-button mode b1 and b2 must be valid (b3 must be NULL) * In three-button-mode b1, b2 and b3 must be valid pointers. * The return value tells which button the user pressed: *

    *
  • 1: button 1
  • *
  • 2: button 2
  • *
  • 3: button 3
  • *
* If the frontend can not determine which button has been pressed (e.g. if * no button was pressed but the user rather aborted the dialog by simply * closing the box) it should return @b 0. *

*

* This function is blocking. *

* @return the number of the button pressed (1=b1, 2=b2, 3=b3), any other * value should be considered an error, including 0) * @param flags flags, see @ref GWEN_GUI_MSG_FLAGS_TYPE_MASK ff. * @param title title of the message box * @param text Text of the box: UTF-8, with both a normal text and a HTML variant of the text in the same string. See text restrictions note above. * @param b1 text for the first button (required), should be something * like "Ok" (see text restrictions note above) * @param b2 text for the optional second button * @param b3 text for the optional third button * @param guiid id as returned by @ref GWEN_Gui_ProgressStart or @ref GWEN_Gui_ShowBox) */ GWENHYWFAR_API int GWEN_Gui_MessageBox(uint32_t flags, const char *title, const char *text, const char *b1, const char *b2, const char *b3, uint32_t guiid); /** * This is a convenience function which calls @ref GWEN_Gui_MessageBox showing the given * message and a single "Close" button. * It is especially well suited to show an error message. */ GWENHYWFAR_API void GWEN_Gui_ShowError(const char *title, const char *text, ...); /** *

* Ask the user for input. *

*

* This function is blocking. *

* @param flags flags, see @ref GWEN_GUI_INPUT_FLAGS_CONFIRM ff. * @param title title of the input box * @param text Text of the box: UTF-8, with both a normal text and a HTML variant of the text in the same string. See text restrictions note above. * @param buffer buffer to store the response in. Must have at least room for * @b maxLen bytes * @param minLen minimal length of input (if 0 then there is no low limit) * @param maxLen size of the buffer including the trailing NULL character. * This means that if you want to ask the user for a PIN of at most 4 * characters you need to supply a buffer of at least @b 5 bytes and provide * a 5 as maxLen. * @param guiid id as returned by @ref GWEN_Gui_ProgressStart or @ref GWEN_Gui_ShowBox) * * @return Zero on success, less than zero when the user requested abort or there was * any error. The special value AB_ERROR_DEFAULT_VALUE should be returned if * the flag GWEN_GUI_INPUT_FLAGS_ALLOW_DEFAULT was given and the user has * chosen to use the default value (e.g. pressed the "default" button in a * GUI). * A return value of "1" means the result may be stored by the application. This value is * returned when the user ticks the checkbox "Store permanently". */ GWENHYWFAR_API int GWEN_Gui_InputBox(uint32_t flags, const char *title, const char *text, char *buffer, int minLen, int maxLen, uint32_t guiid); /** *

* Shows a box with the given text. This function should return immediately, * it should especially NOT wait for user input. This is used to show very * important notices the user should see but which don't need user * interaction. The message box will be removed later via * @ref GWEN_Gui_HideBox. It is ok to allow the user to prematurely * close the box. *

*

* It is required for every call to this function to be followed later * by a corresponding call to @ref GWEN_Gui_HideBox. *

*

* This function MUST return immediately (non-blocking). *

* @return returns an id to be presented to @ref GWEN_Gui_HideBox. * @param ab banking interface * @param flags flags, see @ref GWEN_GUI_SHOWBOX_FLAGS_BEEP ff * @param title title of the box * @param text Text of the box: UTF-8, with both a normal text and a HTML variant of the text in the same string. See text restrictions note above. * @param guiid id as returned by @ref GWEN_Gui_ProgressStart or @ref GWEN_Gui_ShowBox) */ GWENHYWFAR_API uint32_t GWEN_Gui_ShowBox(uint32_t flags, const char *title, const char *text, uint32_t guiid); /** * Hides a message box previously shown by a call to @ref GWEN_Gui_ShowBox. *

* This function MUST return immediately (non-blocking). *

* @param ab banking interface * @param id id returned by @ref GWEN_Gui_ShowBox. If @b 0 then the last * message shown is referred to. */ GWENHYWFAR_API void GWEN_Gui_HideBox(uint32_t id); /** *

* This function is called when a long term operation is started. * Theoretically nesting is allowed, however, you should refrain from * opening multiple progress dialogs to avoid confusion of the user. *

*

* This function must return immediately (i.e. it MUST NOT wait for * user interaction). *

*

* On graphical user interfaces such a dialog should contain a widget * for the text presented here, a progress bar, a text widget to * collect the log messages received via @ref GWEN_Gui_ProgressLog and * a button to allow the user to abort the current operation monitored by * this dialog window. *

*

* Between a call to this function and one to @ref GWEN_Gui_ProgressEnd * the user should not be allowed to close the dialog window. *

*

* This function MUST return immediately (non-blocking). *

* @return id to be used with the other GWEN_Gui_Progress functions. * @param title title of the dialog * @param text Text of the box: UTF-8, with both a normal text and a HTML variant of the text in the same string. See text restrictions note above. * @param total total number of steps of the operation started (i.e. value * which represents 100%) * @param guiid id as returned by @ref GWEN_Gui_ProgressStart or @ref GWEN_Gui_ShowBox) */ GWENHYWFAR_API uint32_t GWEN_Gui_ProgressStart(uint32_t progressFlags, const char *title, const char *text, uint64_t total, uint32_t guiid); /** *

* Advances the progress bar an application might present to the user and * checks whether the user wants to abort the operation currently in progress. *

*

* On graphical user interfaces this function should also check for user * interaction and/or update the GUI (e.g. by calling qApp->processEvents() * when using QT/KDE). *

*

* This function MUST return immediately (non-blocking). *

* @return 0 if ok, !=0 if the current operation is to be aborted * @param id id assigned by @ref GWEN_Gui_ProgressStart (if 0 then the * last started progress dialog is referred to) * @param progress new value for progress. A special value is * GWEN_GUI_PROGRESS_NONE which means that the progress is unchanged. * This might be used as a keepalive call to a GUI. */ GWENHYWFAR_API int GWEN_Gui_ProgressAdvance(uint32_t id, uint32_t progress); GWENHYWFAR_API int GWEN_Gui_ProgressSetTotal(uint32_t id, uint64_t total); /** * Adds a log message to the referred process dialog. *

* This function MUST return immediately (non-blocking). *

* @param id id assigned by @ref GWEN_Gui_ProgressStart (if 0 then the * last started progress dialog is referred to) * @param level log level (see @ref GWEN_Gui_LogLevelPanic ff.) * @param text Text of the box: UTF-8, with both a normal text and a HTML variant of the text in the same string. See text restrictions note above. */ GWENHYWFAR_API int GWEN_Gui_ProgressLog(uint32_t id, GWEN_LOGGER_LEVEL level, const char *text); /** * Adds a log message to the referred process dialog and returns immediately. * * This is a convenience function to be used with variable number of arguments (like * printf). It uses the given arguments to prepare a buffer which is then handed to * @ref GWEN_Gui_ProgressLog. * @param id id assigned by @ref GWEN_Gui_ProgressStart (if 0 then the * last started progress dialog is referred to) * @param level log level (see @ref GWEN_Gui_LogLevelPanic ff.) * @param text Text of the box (possibly including printf format string characters): UTF-8, with both a normal text * and a HTML variant of the text in the same string. See text restrictions note above. */ GWENHYWFAR_API int GWEN_Gui_ProgressLog2(uint32_t id, GWEN_LOGGER_LEVEL level, const char *text, ...); /** *

* Flags the end of the current operation. In graphical user interfaces * this call should allow the user to close the progress dialog window. *

*

* On graphical user interfaces a call to this function should disable the * abort button. It would be best not to close the dialog on * receiption of this call but to simply enable a dialog closing (otherwise * the user will not be able to see the log messages). *

*

* Whether this function is blocking or not depends on the status of the * progress dialog and its initial flags. If the dialog needs to stay open * for the user to read the log messages etc then this function only needs to * return after the user manually closes the dialog. *

*

* If there is no reason to keep the dialog open then this function should simply * close the dialog window and return immediately. *

* @param id id assigned by @ref GWEN_Gui_ProgressStart (if 0 then the * last started progress dialog is referred to) */ GWENHYWFAR_API int GWEN_Gui_ProgressEnd(uint32_t id); /** * This function makes the application print something. * @param docTitle title of the document. This might be presented to the user * @param docType an unique identifier of the document to be printed. This can * be used by the application to separate printer settings for different * document types. The name itself has no meaning and can be choosen freely * by the caller. However, backends should append their name and a colon * to keep this argument unique. This argument should not be translated. * @param descr an optional description about what the document contains. This * might be shown to the user (see text restriction notes above). * @param text text to be printed (see text restriction notes above). * @param guiid id as returned by @ref GWEN_Gui_ProgressStart or @ref GWEN_Gui_ShowBox) */ GWENHYWFAR_API int GWEN_Gui_Print(const char *docTitle, const char *docType, const char *descr, const char *text, uint32_t guiid); /** * This function retrieves a password or pin. The implementation might want to use a cache or * a password file. The default implementation simply asks the user for input. * The function @ref GWEN_Gui_SetPasswordStatus() is used to communicate the status of a password. * So if this function here uses a password cache then the callback for @ref GWEN_Gui_SetPasswordStatus() * should also be implemented. * @param flags flags, see @ref GWEN_GUI_INPUT_FLAGS_CONFIRM ff. * @param token unique identification for the password or pin. This can be used to read the password from a cache or file. * @param title title of the input box * @param text Text of the box: UTF-8, with both a normal text and a HTML variant of the text in the same string. See text restrictions note above. * @param buffer buffer to store the response in. Must have at least room for * @b maxLen bytes * @param minLen minimal length of the password (if 0 then there is no low limit) * @param maxLen size of the buffer including the trailing NULL character. * This means that if you want to ask the user for a PIN of at most 4 * characters you need to supply a buffer of at least @b 5 bytes and provide * a 5 as maxLen. * @param guiid id as returned by @ref GWEN_Gui_ProgressStart or @ref GWEN_Gui_ShowBox) */ GWENHYWFAR_API int GWEN_Gui_GetPassword(uint32_t flags, const char *token, const char *title, const char *text, char *buffer, int minLen, int maxLen, uint32_t guiid); /** * This functions sets the status of a password. * @param guiid id as returned by @ref GWEN_Gui_ProgressStart or @ref GWEN_Gui_ShowBox) */ GWENHYWFAR_API int GWEN_Gui_SetPasswordStatus(const char *token, const char *pin, GWEN_GUI_PASSWORD_STATUS status, uint32_t guiid); /** * This function is called internally by @ref GWEN_Logger_Log. * PLEASE NOTE: If you save the information in a file make sure to ignore * messages from the log domain "gwenhywfar" with log level debug or higher, because * those might contain sensitive information! Information of that level is not supposed * to be saved to a file! * @param logDomain logdomain of the given log message (e.g. "gwenhywfar") * @param priority priority of the message * @param s string to log */ GWENHYWFAR_API int GWEN_Gui_LogHook(const char *logDomain, GWEN_LOGGER_LEVEL priority, const char *s); /** * This function waits for activity on the given sockets. it is called by @ref GWEN_Io_Manager_Wait(). * The default implementation uses GWEN_Socket_Select() for this purpose. * @param readSockets list of sockets to wait for to become readable * @param writeSockets list of sockets to wait for to become writeable * @param guiid id as returned by @ref GWEN_Gui_ProgressStart or @ref GWEN_Gui_ShowBox) * @param msecs time in milliseconds to wait for at max */ GWENHYWFAR_API int GWEN_Gui_WaitForSockets(GWEN_SOCKET_LIST2 *readSockets, GWEN_SOCKET_LIST2 *writeSockets, uint32_t guiid, int msecs); /** * This function checks the given certificate. * The default implementation just shows the given certificate to the user and asks whether to * accept it. * @param cert certificate description * @param io IO layer from which the certificate was received * @param guiid id as returned by @ref GWEN_Gui_ProgressStart or @ref GWEN_Gui_ShowBox) */ GWENHYWFAR_API int GWEN_Gui_CheckCert(const GWEN_SSLCERTDESCR *cert, GWEN_SYNCIO *sio, uint32_t guiid); /** * This function is not officially part of the API but is needed for some ancient OpenHBCI * keyfiles. * License issues forbid us to link against OpenSSL so we leave it up to the application * to implement this function. A converter tool might use this function once to convert * an anciant OpenHBCI key file. * @param text phrase to generate a key from * @param buffer buffer to write the keydata generated from the given passphrase * @param bufLengthr size of that buffer */ GWENHYWFAR_API int GWEN_Gui_KeyDataFromText_OpenSSL(const char *text, unsigned char *buffer, unsigned int bufLength); /** * This function shows and executes the given dialog and returns the result. * See @ref MOD_GUI_DIALOG for a description of the dialog framework. * @param guiid id as returned by @ref GWEN_Gui_ProgressStart, @ref GWEN_Gui_ShowBox or as can be found * via @ref GWEN_Dialog_GetGuiId()) * @return <0: error code, 0: aborted, 1: accepted (e.g. "Ok" pressed) */ GWENHYWFAR_API int GWEN_Gui_ExecDialog(GWEN_DIALOG *dlg, uint32_t guiid); GWENHYWFAR_API int GWEN_Gui_OpenDialog(GWEN_DIALOG *dlg, uint32_t guiid); GWENHYWFAR_API int GWEN_Gui_CloseDialog(GWEN_DIALOG *dlg); GWENHYWFAR_API int GWEN_Gui_RunDialog(GWEN_DIALOG *dlg, int untilEnd); typedef enum { GWEN_Gui_FileNameType_OpenFileName=0, GWEN_Gui_FileNameType_SaveFileName, GWEN_Gui_FileNameType_OpenDirectory } GWEN_GUI_FILENAME_TYPE; /** * This function is used to get the path and name of a single file or folder. * * @param caption title for the dialog * * @param fnt type of the operation (see @ref GWEN_Gui_FileNameType_OpenFileName and following) * * @param flags currently reserved, use 0 * * @param patterns multiple tab-separated entries like in: * "All Files (*)\tC++ Sources (*.cpp,*.cc)\tC++ Headers (*.hpp,*.hh,*.h)" * * @param pathBuffer upon call this may contain a preselected path/filename, upon return * this will contain the selected name * * @return 0 if ok, !=0 on error */ GWENHYWFAR_API int GWEN_Gui_GetFileName(const char *caption, GWEN_GUI_FILENAME_TYPE fnt, uint32_t flags, const char *patterns, GWEN_BUFFER *pathBuffer, uint32_t guiid); /** * This function creates a base layer GWEN_SYNCIO. * The idea is to allow applications to implement their own PROXY handling. * @param url url to which the caller wants to connect to. You should call @ref GWEN_Url_fromString() * to get the information required to determine the protocol and destination. * @param defaultProto default protocol name if not specified by the url (e.g. "http", "https", "hbci") * @param defaultPort default port if not specified by the url * @param pSio pointer to a variable to receive the created GWEN_SYNCIO. */ GWENHYWFAR_API int GWEN_Gui_GetSyncIo(const char *url, const char *defaultProto, int defaultPort, GWEN_SYNCIO **pSio); /*@}*/ /** @name Flags * * Functions in this group influence the behaviour of GWEN_GUI implementations. * These functions operate on a specific GUI object which applications create. */ /*@{*/ /** GUI is non-interactive */ #define GWEN_GUI_FLAGS_NONINTERACTIVE 0x00000001 /** GUI automatically accepts valid certs */ #define GWEN_GUI_FLAGS_ACCEPTVALIDCERTS 0x00000002 /** GUI automatically rejects invalid certs */ #define GWEN_GUI_FLAGS_REJECTINVALIDCERTS 0x00000004 /** GUI uses permanent password storage */ #define GWEN_GUI_FLAGS_PERMPASSWORDS 0x00000008 /** GUI implementation supports dialogs (see @ref MOD_GUI_DIALOG) */ #define GWEN_GUI_FLAGS_DIALOGSUPPORTED 0x80000000 GWENHYWFAR_API uint32_t GWEN_Gui_GetFlags(const GWEN_GUI *gui); GWENHYWFAR_API void GWEN_Gui_SetFlags(GWEN_GUI *gui, uint32_t fl); GWENHYWFAR_API void GWEN_Gui_AddFlags(GWEN_GUI *gui, uint32_t fl); GWENHYWFAR_API void GWEN_Gui_SubFlags(GWEN_GUI *gui, uint32_t fl); /*@}*/ GWENHYWFAR_API const char *GWEN_Gui_GetName(void); /** @name Password Cache * * This implementation provides a password cache. This will be * consulted upon @ref GWEN_Gui_GetPassword. The implementation of * @ref GWEN_Gui_SetPasswordStatus also accesses this password cache. * * Normally this cache is filled from password files (like those * specified via option -P of aqbanking-cli). */ /**@{*/ /** * Set the password DB. Takes over the given DB. * @param gui GUI object * @param dbPasswords password cache * @param persistent if !=0 then the passwords come from a password file * and a request to clear the password cache will be ignored. */ GWENHYWFAR_API void GWEN_Gui_SetPasswordDb(GWEN_GUI *gui, GWEN_DB_NODE *dbPasswords, int persistent); /** * Returns a pointer to the internally used password cache. The GUI * object remains the owner of the object returned (if any). */ GWENHYWFAR_API GWEN_DB_NODE *GWEN_Gui_GetPasswordDb(const GWEN_GUI *gui); /*@}*/ GWENHYWFAR_API GWEN_PASSWD_STORE *GWEN_Gui_GetPasswdStore(const GWEN_GUI *gui); GWENHYWFAR_API void GWEN_Gui_SetPasswdStore(GWEN_GUI *gui, GWEN_PASSWD_STORE *sto); /** Returns the minimum log level needed to show progress logs */ GWENHYWFAR_API GWEN_LOGGER_LEVEL GWEN_Gui_GetMinProgressLogLevel(const GWEN_GUI *gui); GWENHYWFAR_API void GWEN_Gui_SetMinProgressLogLevel(GWEN_GUI *gui, GWEN_LOGGER_LEVEL ll); #ifdef __cplusplus } #endif /*@}*/ #endif gwenhywfar-4.15.2beta/src/gui/dlg_showbox_l.h0000644000175000017500000000126112416477066016134 00000000000000/*************************************************************************** begin : Wed Feb 17 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_GUI_DLG_SHOWBOX_L_H #define GWEN_GUI_DLG_SHOWBOX_L_H #include GWEN_DIALOG *GWEN_DlgShowBox_new(uint32_t flags, const char *title, const char *text); #endif gwenhywfar-4.15.2beta/src/gui/dlg_message.c0000644000175000017500000001471312416477066015555 00000000000000/*************************************************************************** begin : Wed Feb 17 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "dlg_message_p.h" #include #include #include #include GWEN_INHERIT(GWEN_DIALOG, GWEN_DLGMSG) GWEN_DIALOG *GWEN_DlgMessage_new(uint32_t flags, const char *title, const char *text, const char *b1, const char *b2, const char *b3) { GWEN_DIALOG *dlg; GWEN_DLGMSG *xdlg; GWEN_BUFFER *fbuf; int rv; int confirmButton; dlg=GWEN_Dialog_new("dlg_gwen_message"); GWEN_NEW_OBJECT(GWEN_DLGMSG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, GWEN_DLGMSG, dlg, xdlg, GWEN_DlgMessage_FreeData); GWEN_Dialog_SetSignalHandler(dlg, GWEN_DlgMessage_SignalHandler); /* get path of dialog description file */ fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_PathManager_FindFile(GWEN_PM_LIBNAME, GWEN_PM_SYSDATADIR, "gwenhywfar/dialogs/dlg_message.dlg", fbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Dialog description file not found (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } /* read dialog from dialog description file */ rv=GWEN_Dialog_ReadXmlFile(dlg, GWEN_Buffer_GetStart(fbuf)); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } GWEN_Buffer_free(fbuf); confirmButton=GWEN_GUI_MSG_FLAGS_CONFIRM_BUTTON(flags); xdlg->flags=flags; if (title) xdlg->title=strdup(title); if (text) xdlg->text=strdup(text); if (b1 && *b1) { GWEN_Dialog_SetWidgetText(dlg, "button1", b1); if (confirmButton==1) GWEN_Dialog_AddWidgetFlags(dlg, "button1", GWEN_WIDGET_FLAGS_DEFAULT_WIDGET); } else GWEN_Dialog_RemoveWidget(dlg, "button1"); if (b2 && *b2) { GWEN_Dialog_SetWidgetText(dlg, "button2", b2); if (confirmButton==2) GWEN_Dialog_AddWidgetFlags(dlg, "button2", GWEN_WIDGET_FLAGS_DEFAULT_WIDGET); } else GWEN_Dialog_RemoveWidget(dlg, "button2"); if (b3 && *b3) { GWEN_Dialog_SetWidgetText(dlg, "button3", b3); if (confirmButton==3) GWEN_Dialog_AddWidgetFlags(dlg, "button3", GWEN_WIDGET_FLAGS_DEFAULT_WIDGET); } else GWEN_Dialog_RemoveWidget(dlg, "button3"); return dlg; } void GWENHYWFAR_CB GWEN_DlgMessage_FreeData(void *bp, void *p) { GWEN_DLGMSG *xdlg; xdlg=(GWEN_DLGMSG*) p; free(xdlg->title); free(xdlg->text); GWEN_FREE_OBJECT(xdlg); } int GWEN_DlgMessage_GetResponse(const GWEN_DIALOG *dlg) { GWEN_DLGMSG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GWEN_DLGMSG, dlg); assert(xdlg); return xdlg->response; } void GWEN_DlgMessage_Init(GWEN_DIALOG *dlg) { GWEN_DLGMSG *xdlg; GWEN_DB_NODE *dbParams; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GWEN_DLGMSG, dlg); assert(xdlg); dbParams=GWEN_Dialog_GetPreferences(dlg); assert(dbParams); #if 0 /* read width */ i=GWEN_DB_GetIntValue(dbParams, "dialog_width", 0, -1); if (i>=DIALOG_MINWIDTH) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, i, 0); /* read height */ i=GWEN_DB_GetIntValue(dbParams, "dialog_height", 0, -1); if (i>=DIALOG_MINHEIGHT) GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, i, 0); #endif /* special stuff */ if (xdlg->title) GWEN_Dialog_SetCharProperty(dlg, "", GWEN_DialogProperty_Title, 0, xdlg->title, 0); if (xdlg->text) GWEN_Dialog_SetCharProperty(dlg, "descrLabel", GWEN_DialogProperty_Title, 0, xdlg->text, 0); xdlg->wasInit=1; } void GWEN_DlgMessage_Fini(GWEN_DIALOG *dlg) { GWEN_DLGMSG *xdlg; GWEN_DB_NODE *dbParams; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GWEN_DLGMSG, dlg); assert(xdlg); dbParams=GWEN_Dialog_GetPreferences(dlg); assert(dbParams); #if 0 /* store dialog width */ i=GWEN_Dialog_GetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, -1); if (iresponse=1; return GWEN_DialogEvent_ResultAccept; } else if (strcasecmp(sender, "button2")==0) { xdlg->response=2; return GWEN_DialogEvent_ResultAccept; } else if (strcasecmp(sender, "button3")==0) { xdlg->response=3; return GWEN_DialogEvent_ResultAccept; } return GWEN_DialogEvent_ResultNotHandled; } int GWENHYWFAR_CB GWEN_DlgMessage_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { GWEN_DLGMSG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GWEN_DLGMSG, dlg); assert(xdlg); switch(t) { case GWEN_DialogEvent_TypeInit: GWEN_DlgMessage_Init(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeFini: GWEN_DlgMessage_Fini(dlg); return GWEN_DialogEvent_ResultHandled;; case GWEN_DialogEvent_TypeActivated: return GWEN_DlgMessage_HandleActivated(dlg, sender); case GWEN_DialogEvent_TypeValueChanged: case GWEN_DialogEvent_TypeEnabled: case GWEN_DialogEvent_TypeDisabled: case GWEN_DialogEvent_TypeClose: return GWEN_DialogEvent_ResultAccept; case GWEN_DialogEvent_TypeLast: return GWEN_DialogEvent_ResultNotHandled; } return GWEN_DialogEvent_ResultNotHandled; } gwenhywfar-4.15.2beta/src/gui/passwdstore.h0000644000175000017500000000440212364015347015650 00000000000000/*************************************************************************** begin : Sat Dec 16 2012 copyright : (C) 2012 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_PASSWDSTORE_H #define GWENHYWFAR_PASSWDSTORE_H #include #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_PASSWD_STORE GWEN_PASSWD_STORE; GWENHYWFAR_API GWEN_PASSWD_STORE *GWEN_PasswordStore_new(const char *fname); GWENHYWFAR_API void GWEN_PasswordStore_free(GWEN_PASSWD_STORE *sto); GWENHYWFAR_API void GWEN_PasswordStore_ClearStoragePasswd(GWEN_PASSWD_STORE *sto); GWENHYWFAR_API int GWEN_PasswordStore_SetPassword(GWEN_PASSWD_STORE *sto, const char *token, const char *secret); GWENHYWFAR_API int GWEN_PasswordStore_GetPassword(GWEN_PASSWD_STORE *sto, const char *token, char *buffer, int minLen, int maxLen); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/gui/dlg_input.dlg0000644000175000017500000000224412364015347015600 00000000000000 gwenhywfar-4.15.2beta/src/gui/gui_l.h0000644000175000017500000000333512364015347014375 00000000000000/*************************************************************************** begin : Tue Oct 02 2002 copyright : (C) 2002-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_GUI_GUI_L_H #define GWENHYWFAR_GUI_GUI_L_H #include int GWEN_Gui_ReadString(const char *text, GWEN_BUFFER *tbuf); #endif gwenhywfar-4.15.2beta/src/parser/0000755000175000017500000000000012643267236013717 500000000000000gwenhywfar-4.15.2beta/src/parser/url_l.h0000644000175000017500000000062412416477066015131 00000000000000/* This file is auto-generated from "url.xml" by the typemaker tool of Gwenhywfar. Do not edit this file -- all changes will be lost! */ #ifndef URL_L_H #define URL_L_H /** @page P_GWEN_URL_LIB GWEN_Url (lib) This page describes the properties of GWEN_URL */ #include "url.h" #ifdef __cplusplus extern "C" { #endif #ifdef __cplusplus } /* __cplusplus */ #endif #endif /* URL_L_H */ gwenhywfar-4.15.2beta/src/parser/xsdnode.c0000644000175000017500000001141612416477066015454 00000000000000/*************************************************************************** begin : Wed Feb 27 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "xsdnode_p.h" #include #include #include #include #include #include GWEN_INHERIT_FUNCTIONS(GWEN_XSD_NODE) GWEN_LIST_FUNCTIONS(GWEN_XSD_NODE, GWEN_XsdNode) GWEN_XSD_NODE *GWEN_XsdNode_new(GWEN_XSD_NODE *parent, GWEN_XSD_NODETYPE t, const char *name) { GWEN_XSD_NODE *xsdNode; GWEN_NEW_OBJECT(GWEN_XSD_NODE, xsdNode); GWEN_INHERIT_INIT(GWEN_XSD_NODE, xsdNode); GWEN_LIST_INIT(GWEN_XSD_NODE, xsdNode); xsdNode->nodeType=t; xsdNode->parent=parent; xsdNode->children=GWEN_XsdNode_List_new(); if (name) xsdNode->name=strdup(name); return xsdNode; } void GWEN_XsdNode_free(GWEN_XSD_NODE *xsdNode) { if (xsdNode) { GWEN_LIST_FINI(GWEN_XSD_NODE, xsdNode); GWEN_INHERIT_FINI(GWEN_XSD_NODE, xsdNode); GWEN_XsdNode_List_free(xsdNode->children); free(xsdNode->name); GWEN_FREE_OBJECT(xsdNode); } } GWEN_XSD_NODETYPE GWEN_XsdNode_GetNodeType(const GWEN_XSD_NODE *xsdNode) { assert(xsdNode); return xsdNode->nodeType; } const char *GWEN_XsdNode_GetName(const GWEN_XSD_NODE *xsdNode) { assert(xsdNode); return xsdNode->name; } uint32_t GWEN_XsdNode_GetFlags(const GWEN_XSD_NODE *xsdNode) { assert(xsdNode); return xsdNode->flags; } void GWEN_XsdNode_SetFlags(GWEN_XSD_NODE *xsdNode, uint32_t fl) { assert(xsdNode); xsdNode->flags=fl; } void GWEN_XsdNode_AddFlags(GWEN_XSD_NODE *xsdNode, uint32_t fl) { assert(xsdNode); xsdNode->flags|=fl; } void GWEN_XsdNode_SubFlags(GWEN_XSD_NODE *xsdNode, uint32_t fl) { assert(xsdNode); xsdNode->flags&=~fl; } GWEN_XSD_NODE *GWEN_XsdNode_GetParent(const GWEN_XSD_NODE *xsdNode) { assert(xsdNode); return xsdNode->parent; } GWEN_XSD_NODE_LIST *GWEN_XsdNode_GetChildren(const GWEN_XSD_NODE *xsdNode) { assert(xsdNode); return xsdNode->children; } void GWEN_XsdNode_AddChild(GWEN_XSD_NODE *xsdNode, GWEN_XSD_NODE *newChild) { assert(xsdNode); assert(newChild); GWEN_XsdNode_List_Add(newChild, xsdNode->children); newChild->parent=xsdNode; } void GWEN_XsdNode_Unlink(GWEN_XSD_NODE *xsdNode) { GWEN_XsdNode_List_Del(xsdNode); xsdNode->parent=NULL; } GWEN_XSDNODE_READ_FN GWEN_XsdNode_SetReadFn(GWEN_XSD_NODE *xsdNode, GWEN_XSDNODE_READ_FN fn) { GWEN_XSDNODE_READ_FN oldFn; assert(xsdNode); oldFn=xsdNode->readFn; xsdNode->readFn=fn; return oldFn; } GWEN_XSDNODE_WRITE_FN GWEN_XsdNode_SetWriteFn(GWEN_XSD_NODE *xsdNode, GWEN_XSDNODE_WRITE_FN fn) { GWEN_XSDNODE_WRITE_FN oldFn; assert(xsdNode); oldFn=xsdNode->writeFn; xsdNode->writeFn=fn; return oldFn; } int GWEN_XsdNode_Read(GWEN_XSD_NODE *xsdNode, GWEN_XMLNODE *xmlNode, GWEN_DB_NODE *db) { assert(xsdNode); if (xsdNode->readFn) return xsdNode->readFn(xsdNode, xmlNode, db); else return GWEN_ERROR_NOT_SUPPORTED; } int GWEN_XsdNode_Write(GWEN_XSD_NODE *xsdNode, GWEN_XMLNODE *xmlNode, GWEN_DB_NODE *db) { assert(xsdNode); if (xsdNode->writeFn) return xsdNode->writeFn(xsdNode, xmlNode, db); else return GWEN_ERROR_NOT_SUPPORTED; } gwenhywfar-4.15.2beta/src/parser/dbrw.c0000644000175000017500000007361712416477066014761 00000000000000/*************************************************************************** begin : Tue Sep 09 2003 copyright : (C) 2003-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /* This file is included from db.c */ int GWEN_DB_EscapeToBufferTolerant(const char *src, GWEN_BUFFER *buf) { while(*src) { unsigned char x; x=(unsigned char)*src; if (!( (x>='A' && x<='Z') || (x>='a' && x<='z') || (x>='0' && x<='9') || x=='%' || x=='.' || x==',' || x=='.' || x=='_' || x=='-' || x=='*' || x=='?' )) { unsigned char c; GWEN_Buffer_AppendByte(buf, '&'); c=(((unsigned char)(*src))>>4)&0xf; if (c>9) c+=7; c+='0'; GWEN_Buffer_AppendByte(buf, c); c=((unsigned char)(*src))&0xf; if (c>9) c+=7; c+='0'; GWEN_Buffer_AppendByte(buf, c); } else GWEN_Buffer_AppendByte(buf, *src); src++; } /* while */ return 0; } int GWEN_DB_UnescapeToBufferTolerant(const char *src, GWEN_BUFFER *buf) { while(*src) { int charHandled; charHandled=0; if (*src=='&') { if (strlen(src)>2) { unsigned char d1, d2; unsigned char c; if (isxdigit((int)src[1]) && isxdigit((int)src[2])) { /* skip '%' */ src++; /* read first digit */ d1=(unsigned char)(toupper(*src)); /* get second digit */ src++; d2=(unsigned char)(toupper(*src)); /* compute character */ d1-='0'; if (d1>9) d1-=7; c=(d1<<4)&0xf0; d2-='0'; if (d2>9) d2-=7; c+=(d2&0xf); /* store character */ GWEN_Buffer_AppendByte(buf, (char)c); charHandled=1; } } } if (!charHandled) GWEN_Buffer_AppendByte(buf, *src); src++; } /* while */ return 0; } int GWEN_DB_ReadFileAs(GWEN_DB_NODE *db, const char *fname, const char *type, GWEN_DB_NODE *params, uint32_t dbflags) { GWEN_SYNCIO *sio; GWEN_DBIO *dbio; int rv; dbio=GWEN_DBIO_GetPlugin(type); if (!dbio) { DBG_ERROR(GWEN_LOGDOMAIN, "Plugin \"%s\" is not supported", type); return GWEN_ERROR_NOT_SUPPORTED; } sio=GWEN_SyncIo_File_new(fname, GWEN_SyncIo_File_CreationMode_OpenExisting); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); return rv; } rv=GWEN_DBIO_Import(dbio, sio, db, params, dbflags); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); } GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } int GWEN_DB_WriteFileAs(GWEN_DB_NODE *db, const char *fname, const char *type, GWEN_DB_NODE *params, uint32_t dbflags) { int rv; GWEN_DBIO *dbio; dbio=GWEN_DBIO_GetPlugin(type); if (!dbio) { DBG_ERROR(GWEN_LOGDOMAIN, "Plugin \"%s\" is not supported", type); return GWEN_ERROR_NOT_SUPPORTED; } rv=GWEN_DBIO_ExportToFile(dbio, fname, db, params, dbflags); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int GWEN_DB_WriteGroupToIoLayer(GWEN_DB_NODE *node, GWEN_FAST_BUFFER *fb, uint32_t dbflags, int insert) { GWEN_DB_NODE *n; GWEN_DB_NODE *cn; int i; int err; int lastWasVar; lastWasVar=0; n=GWEN_DB_Node_List_First(node->children); while(n) { if (!(n->nodeFlags & GWEN_DB_NODE_FLAGS_VOLATILE)) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Writing node"); switch(n->typ) { case GWEN_DB_NodeType_Group: if (dbflags & GWEN_DB_FLAGS_WRITE_SUBGROUPS) { GWEN_BUFFER *tbuf; if (dbflags & GWEN_DB_FLAGS_ADD_GROUP_NEWLINES) { if (lastWasVar) { /* only insert newline if the last one before this group was a * variable */ GWEN_FASTBUFFER_WRITELINE(fb, err, ""); if (err<0) { DBG_INFO(GWEN_LOGDOMAIN, "called from here"); return err; } } } /* indend */ if (dbflags & GWEN_DB_FLAGS_INDEND) { for (i=0; idata.dataName, tbuf); if (err<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", err); GWEN_Buffer_free(tbuf); return err; } GWEN_FASTBUFFER_WRITEFORCED(fb, err, GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf)); GWEN_Buffer_free(tbuf); if (err<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", err); return err; } GWEN_FASTBUFFER_WRITELINE(fb, err, " {"); if (err<0) { DBG_INFO(GWEN_LOGDOMAIN, "called from here"); return err; } err=GWEN_DB_WriteGroupToIoLayer(n, fb, dbflags, insert+2); if (err<0) return err; /* indend */ if (dbflags & GWEN_DB_FLAGS_INDEND) { for (i=0; idata.dataName); if (err<0) { DBG_INFO(GWEN_LOGDOMAIN, "called from here"); return err; } } /* if detailed groups */ else { GWEN_FASTBUFFER_WRITELINE(fb, err, "}"); if (err<0) { DBG_INFO(GWEN_LOGDOMAIN, "called from here"); return err; } } if (dbflags & GWEN_DB_FLAGS_ADD_GROUP_NEWLINES) { if (GWEN_DB_Node_List_Next(n)) { /* only insert newline if something * is following on the same level */ GWEN_FASTBUFFER_WRITELINE(fb, err, ""); if (err<0) { DBG_INFO(GWEN_LOGDOMAIN, "called from here"); return err; } } } } lastWasVar=0; break; case GWEN_DB_NodeType_Var: cn=GWEN_DB_Node_List_First(n->children); if (cn) { char *typname; int namewritten; int values; typname=0; namewritten=0; values=0; while(cn) { char numbuffer[32]; char *binbuffer=NULL; unsigned int bbsize; const char *pvalue=NULL; GWEN_BUFFER *vbuf=NULL; switch(cn->typ) { case GWEN_DB_NodeType_ValueChar: typname="char "; pvalue=cn->data.dataChar; if (dbflags & GWEN_DB_FLAGS_ESCAPE_CHARVALUES) { vbuf=GWEN_Buffer_new(0, strlen(pvalue)+32, 0, 1); if (GWEN_Text_EscapeToBufferTolerant(pvalue, vbuf)) { DBG_INFO(GWEN_LOGDOMAIN, "called from here"); GWEN_Buffer_free(vbuf); return 1; } pvalue=GWEN_Buffer_GetStart(vbuf); } break; case GWEN_DB_NodeType_ValueInt: typname="int "; if (GWEN_Text_NumToString(cn->data.dataInt, numbuffer, sizeof(numbuffer)-1, 0)<1) { DBG_ERROR(GWEN_LOGDOMAIN, "Error writing numeric value"); return GWEN_ERROR_GENERIC; } pvalue=numbuffer; break; case GWEN_DB_NodeType_ValueBin: bbsize=cn->dataSize*2+1; binbuffer=(char*)GWEN_Memory_malloc(bbsize); assert(binbuffer); typname="bin "; if (!GWEN_Text_ToHex(cn->data.dataBin, cn->dataSize, binbuffer, bbsize)) { DBG_ERROR(GWEN_LOGDOMAIN, "Error writing binary value"); return GWEN_ERROR_GENERIC; } pvalue=binbuffer; break; case GWEN_DB_NodeType_ValuePtr: DBG_DEBUG(GWEN_LOGDOMAIN, "Not writing ptr type"); break; default: DBG_DEBUG(GWEN_LOGDOMAIN, "Unhandled type [%d]", cn->typ); break; } if (pvalue) { if (!namewritten) { /* write name */ /* indend */ if (dbflags & GWEN_DB_FLAGS_INDEND) { for (i=0; idata.dataName, -1); if (err<0) { DBG_INFO(GWEN_LOGDOMAIN, "called from here"); GWEN_Memory_dealloc(binbuffer); GWEN_Buffer_free(vbuf); return 1; } if (dbflags & GWEN_DB_FLAGS_QUOTE_VARNAMES) { GWEN_FASTBUFFER_WRITEBYTE(fb, err, '\"'); if (err<0) { DBG_INFO(GWEN_LOGDOMAIN, "called from here"); GWEN_Memory_dealloc(binbuffer); GWEN_Buffer_free(vbuf); return 1; } } GWEN_FASTBUFFER_WRITEFORCED(fb, err, ((dbflags & GWEN_DB_FLAGS_USE_COLON)?": ":"="), -1); if (err<0) { DBG_INFO(GWEN_LOGDOMAIN, "called from here"); GWEN_Memory_dealloc(binbuffer); GWEN_Buffer_free(vbuf); return 1; } namewritten=1; } /* if !namewritten */ if (values) { GWEN_FASTBUFFER_WRITEFORCED(fb, err, ", ", -1); if (err<0) { DBG_INFO(GWEN_LOGDOMAIN, "called from here"); GWEN_Memory_dealloc(binbuffer); GWEN_Buffer_free(vbuf); return 1; } } values++; if (dbflags & GWEN_DB_FLAGS_QUOTE_VALUES) { GWEN_FASTBUFFER_WRITEBYTE(fb, err, '\"'); if (err<0) { DBG_INFO(GWEN_LOGDOMAIN, "called from here"); GWEN_Memory_dealloc(binbuffer); GWEN_Buffer_free(vbuf); return 1; } } GWEN_FASTBUFFER_WRITEFORCED(fb, err, pvalue, -1); if (err<0) { DBG_INFO(GWEN_LOGDOMAIN, "called from here"); GWEN_Memory_dealloc(binbuffer); GWEN_Buffer_free(vbuf); return 1; } if (dbflags & GWEN_DB_FLAGS_QUOTE_VALUES) { GWEN_FASTBUFFER_WRITEBYTE(fb, err, '\"'); if (err<0) { DBG_INFO(GWEN_LOGDOMAIN, "called from here"); GWEN_Memory_dealloc(binbuffer); GWEN_Buffer_free(vbuf); return 1; } } } /* if pvalue */ GWEN_Memory_dealloc(binbuffer); GWEN_Buffer_free(vbuf); cn=GWEN_DB_Node_List_Next(cn); } /* while cn */ if (namewritten) { GWEN_FASTBUFFER_WRITELINE(fb, err, ""); if (err<0) { DBG_INFO(GWEN_LOGDOMAIN, "called from here"); return GWEN_ERROR_GENERIC; } } } /* if children */ lastWasVar=1; break; default: DBG_WARN(GWEN_LOGDOMAIN, "[unhandled node type %d]", n->typ); } /* switch */ } /* if not volatile */ else { DBG_DEBUG(GWEN_LOGDOMAIN, "Node is volatile, not writing it"); } n=GWEN_DB_Node_List_Next(n); } /* while */ return 0; } int GWEN_DB_WriteToFastBuffer(GWEN_DB_NODE *node, GWEN_FAST_BUFFER *fb, uint32_t dbflags) { int rv; rv=GWEN_DB_WriteGroupToIoLayer(node, fb, dbflags, 0); if (rv<0) { return rv; } GWEN_FASTBUFFER_FLUSH(fb, rv); return rv; } int GWEN_DB_WriteToIo(GWEN_DB_NODE *node, GWEN_SYNCIO *sio, uint32_t dbflags) { int rv; GWEN_FAST_BUFFER *fb; fb=GWEN_FastBuffer_new(512, sio); if (dbflags & GWEN_DB_FLAGS_DOSMODE) GWEN_FastBuffer_AddFlags(fb, GWEN_FAST_BUFFER_FLAGS_DOSMODE); rv=GWEN_DB_WriteGroupToIoLayer(node, fb, dbflags, 0); if (rv<0) { GWEN_FastBuffer_free(fb); return rv; } GWEN_FASTBUFFER_FLUSH(fb, rv); GWEN_FastBuffer_free(fb); return rv; } int GWEN_DB_WriteFile(GWEN_DB_NODE *n, const char *fname, uint32_t dbflags) { int rv; GWEN_FSLOCK *lck=0; GWEN_SYNCIO *sio; /* if locking requested */ if (dbflags & GWEN_DB_FLAGS_LOCKFILE) { GWEN_FSLOCK_RESULT res; lck=GWEN_FSLock_new(fname, GWEN_FSLock_TypeFile); assert(lck); res=GWEN_FSLock_Lock(lck, GWEN_DB_DEFAULT_LOCK_TIMEOUT, 0); if (res!=GWEN_FSLock_ResultOk) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not apply lock to file \"%s\" (%d)", fname, res); GWEN_FSLock_free(lck); return -1; } } /* open file */ sio=GWEN_SyncIo_File_new(fname, GWEN_SyncIo_File_CreationMode_CreateAlways); if (dbflags & GWEN_DB_FLAGS_APPEND_FILE) GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_APPEND); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE | GWEN_SYNCIO_FILE_FLAGS_UREAD | GWEN_SYNCIO_FILE_FLAGS_UWRITE); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); if (lck) { GWEN_FSLock_Unlock(lck); GWEN_FSLock_free(lck); } return rv; } rv=GWEN_DB_WriteToIo(n, sio, dbflags); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); if (lck) { GWEN_FSLock_Unlock(lck); GWEN_FSLock_free(lck); } return rv; } rv=GWEN_SyncIo_Disconnect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); if (lck) { GWEN_FSLock_Unlock(lck); GWEN_FSLock_free(lck); } return rv; } GWEN_SyncIo_free(sio); /* remove lock, if any */ if (lck) { GWEN_FSLOCK_RESULT res; res=GWEN_FSLock_Unlock(lck); if (res!=GWEN_FSLock_ResultOk) { DBG_WARN(GWEN_LOGDOMAIN, "Could not remove lock on file \"%s\" (%d)", fname, res); } GWEN_FSLock_free(lck); } return 0; } int GWEN_DB__ReadValues(GWEN_DB_NODE *n, uint32_t dbflags, const char *typeName, const char *varName, uint8_t *p) { GWEN_DB_NODE_TYPE nodeType=GWEN_DB_NodeType_ValueChar; GWEN_DB_NODE *dbVar; GWEN_BUFFER *wbuf; uint8_t *pDebug; pDebug=p; if (typeName==NULL) typeName="char"; if (strcasecmp(typeName, "int")==0) nodeType=GWEN_DB_NodeType_ValueInt; else if (strcasecmp(typeName, "char")==0) nodeType=GWEN_DB_NodeType_ValueChar; else if (strcasecmp(typeName, "bin")==0) nodeType=GWEN_DB_NodeType_ValueBin; else { DBG_ERROR(GWEN_LOGDOMAIN, "Unknown type \"%s\"", typeName); return GWEN_ERROR_BAD_DATA; } dbVar=GWEN_DB_GetNode(n, varName, dbflags | GWEN_PATH_FLAGS_VARIABLE); if (dbVar==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Variable [%s] is not available", varName); return GWEN_ERROR_GENERIC; } wbuf=GWEN_Buffer_new(0, 32, 0, 1); for (;;) { int quotes=0; GWEN_DB_NODE *dbVal=NULL; const char *v; while(*p && isspace(*p)) p++; if (!*p) { DBG_INFO(GWEN_LOGDOMAIN, "Missing value"); GWEN_Buffer_free(wbuf); return GWEN_ERROR_BAD_DATA; } if (*p=='"') { quotes=1; p++; } while(*p) { if (*p=='%') { uint8_t c; uint8_t cHex; /* get first nibble */ p++; if (!*p) { DBG_INFO(GWEN_LOGDOMAIN, "Incomplete escape sequence"); GWEN_Buffer_free(wbuf); return GWEN_ERROR_BAD_DATA; } c=toupper(*p)-'0'; if (c>9) c-=7; cHex=c<<4; p++; if (!*p) { DBG_INFO(GWEN_LOGDOMAIN, "Incomplete escape sequence"); GWEN_Buffer_free(wbuf); return GWEN_ERROR_BAD_DATA; } c=toupper(*p)-'0'; if (c>9) c-=7; cHex|=c; GWEN_Buffer_AppendByte(wbuf, cHex); } else if (quotes) { if (*p=='"') { p++; break; } else GWEN_Buffer_AppendByte(wbuf, *p); } else { if (*p==',' || *p==';' || *p=='#') break; else if (*p=='"') { DBG_INFO(GWEN_LOGDOMAIN, "Unexpected quotation mark (Line: [%s], parsed: [%s]", pDebug, GWEN_Buffer_GetStart(wbuf)); GWEN_Buffer_free(wbuf); return GWEN_ERROR_BAD_DATA; } else GWEN_Buffer_AppendByte(wbuf, *p); } p++; } v=GWEN_Buffer_GetStart(wbuf); if (nodeType==GWEN_DB_NodeType_ValueInt) { int i; if (1!=sscanf(v, "%d", &i)) { DBG_INFO(GWEN_LOGDOMAIN, "Not an integer value [%s]", v); GWEN_Buffer_free(wbuf); return GWEN_ERROR_BAD_DATA; } dbVal=GWEN_DB_ValueInt_new(i); } else if (nodeType==GWEN_DB_NodeType_ValueChar) dbVal=GWEN_DB_ValueChar_new(v); else if (nodeType==GWEN_DB_NodeType_ValueBin) { GWEN_BUFFER *bbuf; int rv; bbuf=GWEN_Buffer_new(0, (GWEN_Buffer_GetUsedBytes(wbuf)/2)+1, 0, 1); rv=GWEN_Text_FromHexBuffer(v, bbuf); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "Bad bin value [%s]", v); GWEN_Buffer_free(bbuf); GWEN_Buffer_free(wbuf); return GWEN_ERROR_BAD_DATA; } dbVal=GWEN_DB_ValueBin_new(GWEN_Buffer_GetStart(bbuf), GWEN_Buffer_GetUsedBytes(bbuf)); GWEN_Buffer_free(bbuf); } else { /* should never reach this point */ assert(0); } GWEN_DB_Node_Append(dbVar, dbVal); /* skip blanks if any */ while(*p && isspace(*p)) p++; if (!*p || *p==';' || *p=='#') break; else if (*p!=',') { DBG_INFO(GWEN_LOGDOMAIN, "Unexpected character [%s]", p); GWEN_Buffer_free(wbuf); return GWEN_ERROR_BAD_DATA; } p++; GWEN_Buffer_Reset(wbuf); } GWEN_Buffer_free(wbuf); return 0; } int GWEN_DB_ReadFromFastBuffer(GWEN_DB_NODE *n, GWEN_FAST_BUFFER *fb, uint32_t dbflags) { GWEN_BUFFER *lbuf; GWEN_BUFFER *tbuf; int level=0; int someLinesRead=0; lbuf=GWEN_Buffer_new(0, 128, 0, 1); tbuf=GWEN_Buffer_new(0, 128, 0, 1); for (;;) { int rv; uint8_t *p; rv=GWEN_FastBuffer_ReadLineToBuffer(fb, lbuf); if (rv<0) { if (rv==GWEN_ERROR_EOF) { if (!someLinesRead && !(dbflags & GWEN_DB_FLAGS_ALLOW_EMPTY_STREAM)) { DBG_INFO(GWEN_LOGDOMAIN, "Unexpected EOF (%d)", rv); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(lbuf); return rv; } break; } DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(lbuf); return rv; } if (GWEN_Buffer_GetUsedBytes(lbuf)==0) { if (dbflags & GWEN_DB_FLAGS_UNTIL_EMPTY_LINE) { break; } } else { someLinesRead=1; p=(uint8_t*)GWEN_Buffer_GetStart(lbuf); while(*p && isspace(*p)) p++; if (*p) { uint8_t *p1begin=NULL, *p1end=NULL; uint8_t *p2begin=NULL, *p2end=NULL; /* non-empty line */ if (*p=='}') { /* found end of current group */ if (level<1) { DBG_INFO(GWEN_LOGDOMAIN, "Unbalanced number of curly bracket"); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(lbuf); return GWEN_ERROR_BAD_DATA; } n=n->parent; assert(n); /* internal error if parent not found */ assert(n->typ==GWEN_DB_NodeType_Group); /* internal error if parent is not a group */ level--; } else if (*p=='#') { /* comment only line */ } else { p1begin=p; /* read first token */ while(*p && !isspace(*p) && *p!='{' && *p!=((dbflags & GWEN_DB_FLAGS_USE_COLON)?':':'=') && *p!='}' && *p!=',' && *p!=';') p++; if (!*p) { DBG_INFO(GWEN_LOGDOMAIN, "Missing 2nd token (first: \"%s\")", p1begin); GWEN_Buffer_Dump(lbuf, 2); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(lbuf); return GWEN_ERROR_BAD_DATA; } p1end=p; /* get to start of 2nd token */ while(*p && isspace(*p)) p++; if (!*p) { DBG_INFO(GWEN_LOGDOMAIN, "Missing 2nd token"); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(lbuf); return GWEN_ERROR_BAD_DATA; } if (*p=='{') { GWEN_DB_NODE *newGr; /* found start of group */ *p1end=0; rv=GWEN_DB_UnescapeToBufferTolerant((const char*)p1begin, tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(lbuf); return rv; } newGr=GWEN_DB_GetGroup(n, dbflags, GWEN_Buffer_GetStart(tbuf)); if (newGr==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Could not create group [%s]", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(lbuf); return GWEN_ERROR_GENERIC; } GWEN_Buffer_Reset(tbuf); n=newGr; level++; } else if (*p=='=' || *p==':') { /* found short variable definition */ *p1end=0; p++; rv=GWEN_DB__ReadValues(n, dbflags, NULL, (const char*)p1begin, p); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(lbuf); return rv; } } else if (*p==',' || *p==';') { DBG_INFO(GWEN_LOGDOMAIN, "Unexpected delimiter found"); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(lbuf); return GWEN_ERROR_BAD_DATA; } else { /* 2nd token, so this should be a standard variable definition */ p2begin=p; while(*p && !isspace(*p) && *p!='{' && *p!=((dbflags & GWEN_DB_FLAGS_USE_COLON)?':':'=') && *p!='}' && *p!=',' && *p!=';') p++; if (!*p) { DBG_INFO(GWEN_LOGDOMAIN, "Missing 2nd token [%s], [%s]", p1begin, p2begin); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(lbuf); return GWEN_ERROR_BAD_DATA; } p2end=p; if (isspace(*p)) { while(*p && isspace(*p)) p++; if (!*p) { DBG_INFO(GWEN_LOGDOMAIN, "Missing 2nd token"); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(lbuf); return GWEN_ERROR_BAD_DATA; } } if (*p!='=' && *p!=':') { DBG_INFO(GWEN_LOGDOMAIN, "Equation mark expected"); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(lbuf); return GWEN_ERROR_BAD_DATA; } p++; *p1end=0; *p2end=0; rv=GWEN_DB__ReadValues(n, dbflags, (const char*)p1begin, (const char*)p2begin, p); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(lbuf); return rv; } } } } } GWEN_Buffer_Reset(lbuf); } if (level) { DBG_INFO(GWEN_LOGDOMAIN, "Unbalanced number of curly bracket (too few)"); GWEN_Buffer_free(tbuf); GWEN_Buffer_free(lbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_free(tbuf); GWEN_Buffer_free(lbuf); return 0; } int GWEN_DB_ReadFromIo(GWEN_DB_NODE *n, GWEN_SYNCIO *sio, uint32_t dbflags) { GWEN_FAST_BUFFER *fb; int rv; /* prepare fast buffer */ fb=GWEN_FastBuffer_new(1024, sio); if (dbflags & GWEN_DB_FLAGS_DOSMODE) GWEN_FastBuffer_AddFlags(fb, GWEN_FAST_BUFFER_FLAGS_DOSMODE); /* read from it */ rv=GWEN_DB_ReadFromFastBuffer(n, fb, dbflags); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_FastBuffer_free(fb); return rv; } GWEN_FastBuffer_free(fb); return 0; } int GWEN_DB_ReadFile(GWEN_DB_NODE *n, const char *fname, uint32_t dbflags) { GWEN_SYNCIO *sio; int rv; sio=GWEN_SyncIo_File_new(fname, GWEN_SyncIo_File_CreationMode_OpenExisting); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); return rv; } /* read from it */ rv=GWEN_DB_ReadFromIo(n, sio, dbflags); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return 0; } int GWEN_DB_ReadFromString(GWEN_DB_NODE *n, const char *str, int len, uint32_t dbflags) { GWEN_SYNCIO *sio; int rv; if (len==0) len=strlen(str); sio=GWEN_SyncIo_Memory_fromBuffer((const uint8_t*) str, len); rv=GWEN_DB_ReadFromIo(n, sio, dbflags); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_free(sio); return 0; } int GWEN_DB_WriteToBuffer(GWEN_DB_NODE *n, GWEN_BUFFER *buf, uint32_t dbflags) { GWEN_SYNCIO *sio; int rv; /* create SyncIO, don't take over buf */ sio=GWEN_SyncIo_Memory_new(buf, 0); rv=GWEN_DB_WriteToIo(n, sio, dbflags); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_free(sio); return 0; } gwenhywfar-4.15.2beta/src/parser/text.h0000644000175000017500000003007312416477066015001 00000000000000/*************************************************************************** begin : Sat Jun 28 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_TEXT_H #define GWENHYWFAR_TEXT_H #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif #define GWEN_TEXT_FUZZY_SHIFT 10 #define GWEN_TEXT_FLAGS_DEL_LEADING_BLANKS 0x00000001 #define GWEN_TEXT_FLAGS_DEL_TRAILING_BLANKS 0x00000002 #define GWEN_TEXT_FLAGS_DEL_MULTIPLE_BLANKS 0x00000004 #define GWEN_TEXT_FLAGS_NEED_DELIMITER 0x00000008 #define GWEN_TEXT_FLAGS_NULL_IS_DELIMITER 0x00000010 #define GWEN_TEXT_FLAGS_DEL_QUOTES 0x00000020 #define GWEN_TEXT_FLAGS_CHECK_BACKSLASH 0x00000040 /** * This function cuts out a word from a given string. * @return address of the new word, 0 on error * @param src pointer to the beginning of the source string * @param delims pointer to a string containing all delimiters * @param buffer pointer to the destination buffer * @param maxsize length of the buffer. Actually up to this number of * characters are copied to the buffer. If after this number of chars no * delimiter follows the string will be terminated. You will have to check * whether there is a delimiter directly after the copied string * @param flags defines how the source string is to be processed * @param next pointer to a pointer to receive the address up to which the * source string has been handled. You can use this to continue with the * source string behind the word we've just cut out. This variable is only * modified upon successfull return */ GWENHYWFAR_API char *GWEN_Text_GetWord(const char *src, const char *delims, char *buffer, unsigned int maxsize, uint32_t flags, const char **next); GWENHYWFAR_API int GWEN_Text_GetWordToBuffer(const char *src, const char *delims, GWEN_BUFFER *buf, uint32_t flags, const char **next); /** * This function does escaping like it is used for HTTP URL encoding. * All characters which are not alphanumeric are escaped by %XX where * XX ist the hexadecimal code of the character. */ GWENHYWFAR_API char *GWEN_Text_Escape(const char *src, char *buffer, unsigned int maxsize); GWENHYWFAR_API char *GWEN_Text_Unescape(const char *src, char *buffer, unsigned int maxsize); GWENHYWFAR_API char *GWEN_Text_UnescapeN(const char *src, unsigned int srclen, char *buffer, unsigned int maxsize); GWENHYWFAR_API char *GWEN_Text_EscapeTolerant(const char *src, char *buffer, unsigned int maxsize); GWENHYWFAR_API char *GWEN_Text_UnescapeTolerant(const char *src, char *buffer, unsigned int maxsize); GWENHYWFAR_API char *GWEN_Text_UnescapeTolerantN(const char *src, unsigned int srclen, char *buffer, unsigned int maxsize); GWENHYWFAR_API int GWEN_Text_EscapeToBuffer(const char *src, GWEN_BUFFER *buf); GWENHYWFAR_API int GWEN_Text_UnescapeToBuffer(const char *src, GWEN_BUFFER *buf); /** * Does the same as @ref GWEN_Text_EscapeToBuffer does, but this version * here does not escape some characters generally accepted within strings * (such as space, comma, decimal point etc). */ GWENHYWFAR_API int GWEN_Text_EscapeToBufferTolerant(const char *src, GWEN_BUFFER *buf); GWENHYWFAR_API int GWEN_Text_EscapeToBufferTolerant2(GWEN_BUFFER *src, GWEN_BUFFER *buf); /** * This function does the same as @ref GWEN_Text_UnescapeToBuffer but it * doesn't complain about unescaped characters in the source string. */ GWENHYWFAR_API int GWEN_Text_UnescapeToBufferTolerant(const char *src, GWEN_BUFFER *buf); GWENHYWFAR_API char *GWEN_Text_ToHex(const char *src, unsigned l, char *buffer, unsigned int maxsize); /** * Writes the given binary data as a hex string to the destination buffer. * @param groupsize if !=0 then after this many characters in the destination * buffer the delimiter is inserted * @param delimiter character to write after groupsize characters * @param skipLeadingZeroes if !=0 then leading zeroes are suppressed */ GWENHYWFAR_API int GWEN_Text_ToHexBuffer(const char *src, unsigned l, GWEN_BUFFER *buf, unsigned int groupsize, char delimiter, int skipLeadingZeroes); /** * Converts a string to Hex. After "groupsize" bytes the "delimiter" is * inserted. */ GWENHYWFAR_API char *GWEN_Text_ToHexGrouped(const char *src, unsigned l, char *buffer, unsigned maxsize, unsigned int groupsize, char delimiter, int skipLeadingZeros); GWENHYWFAR_API int GWEN_Text_FromHex(const char *src, char *buffer, unsigned maxsize); /** * Reads hex bytes and stores them in the given buffer. */ GWENHYWFAR_API int GWEN_Text_FromHexBuffer(const char *src, GWEN_BUFFER *buf); /** * Reads bcd bytes and stores them in the given buffer. */ GWENHYWFAR_API int GWEN_Text_FromBcdBuffer(const char *src, GWEN_BUFFER *buf); /** * Writes the given BCD data as a hex string to the destination buffer. * @param groupsize if !=0 then after this many characters in the destination * buffer the delimiter is inserted * @param delimiter character to write after groupsize characters * @param skipLeadingZeroes if !=0 then leading zeroes are suppressed */ GWENHYWFAR_API int GWEN_Text_ToBcdBuffer(const char *src, unsigned l, GWEN_BUFFER *buf, unsigned int groupsize, char delimiter, int skipLeadingZeroes); /** * @return number of bytes in the buffer (-1 on error) * @param fillchar if 0 then no filling takes place, positive values * extend to the right, negative values to the left. */ GWENHYWFAR_API int GWEN_Text_NumToString(int num, char *buffer, unsigned int bufsize, int fillchar); /** * This functions transforms a string into a double float value. * It always uses a decimal point (".") regardless of the current locale settings. * This makes sure that a value can always be parsed regardless of the * country settings of the producer of that string. */ GWENHYWFAR_API int GWEN_Text_DoubleToBuffer(double num, GWEN_BUFFER *buf); /** * This functions transforms a double float value into a string. * It always uses a decimal point (".") regardless of the current locale settings. * This makes sure that a value can always be parsed regardless of the * country settings of the producer of that string. */ GWENHYWFAR_API int GWEN_Text_StringToDouble(const char *s, double *num); /** * Compares two strings. If either of them is given but empty, that string * will be treaten as not given. This way a string NOT given equals a string * which is given but empty. * @param ign set to !=0 to ignore cases */ GWENHYWFAR_API int GWEN_Text_Compare(const char *s1, const char *s2, int ign); /** * This function provides the functionality of strcasestr() which is not available * on some systems. */ GWENHYWFAR_API const char *GWEN_Text_StrCaseStr(const char *haystack, const char *needle); /** * This function compares two string and returns the number of matches or * -1 on error. * @param w string to compare * @param p pattern to compare against * @param sensecase if 0 then cases are ignored */ GWENHYWFAR_API int GWEN_Text_ComparePattern(const char *w, const char *p, int sensecase); /** * This is used for debugging purposes and it shows the given data as a * classical hexdump. */ GWENHYWFAR_API void GWEN_Text_DumpString(const char *s, unsigned int l, unsigned int insert); GWENHYWFAR_API void GWEN_Text_DumpString2Buffer(const char *s, unsigned int l, GWEN_BUFFER *mbuf, unsigned int insert); GWENHYWFAR_API void GWEN_Text_LogString(const char *s, unsigned int l, const char *logDomain, GWEN_LOGGER_LEVEL lv); /** * Condenses a buffer containing chars. * This means removing unnecessary spaces. */ GWENHYWFAR_API void GWEN_Text_CondenseBuffer(GWEN_BUFFER *buf); /** * This function counts the number of characters in the given UTF-8 buffer. * @param s pointer to a buffer which contains UTF-8 characters * @param len number of bytes (if 0 then all bytes up to a zero byte are * counted) */ GWENHYWFAR_API int GWEN_Text_CountUtf8Chars(const char *s, int len); /** * Replaces special characters which are used by XML (like "<", "&" etc) * by known sequences (like "&"). */ GWENHYWFAR_API int GWEN_Text_EscapeXmlToBuffer(const char *src, GWEN_BUFFER *buf); /** * Replaces special character sequences to their coresponding character. */ GWENHYWFAR_API int GWEN_Text_UnescapeXmlToBuffer(const char *src, GWEN_BUFFER *buf); /** * Compares two strings and returns the percentage of their equality. * It is calculated by this formula: * matches*100 / ((length of s1)+(length of s2)) * Each match is weight like this: *
    *
  • *s1==*s2: 2
  • *
  • toupper(*s1)==toupper(*s2): 2 if ign, 1 otherwise
  • *
  • isalnum(*s1)==isalnum(*s2): 1 *
* @return percentage of equality between both strings * @param s1 1st of two strings to compare * @param s2 2nd of two strings to compare * @param ign if !=0 then the cases are ignored */ GWENHYWFAR_API double GWEN_Text_CheckSimilarity(const char *s1, const char *s2, int ign); /** * This function converts a given text from one charset to another one. * Currently, iconv is used for this conversion. * * @param fromCharset charset of the source text * @param toCharset charset of the source text * @param text text to convert * @param len length of the text (excluding trailing 0) * @param tbuf destination buffer for the converted text */ GWENHYWFAR_API int GWEN_Text_ConvertCharset(const char *fromCharset, const char *toCharset, const char *text, int len, GWEN_BUFFER *tbuf); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/parser/urlfns.h0000644000175000017500000000246612364015347015323 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Fri May 07 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_URLFNS_H #define GWEN_URLFNS_H #include #include #ifdef __cplusplus extern "C" { #endif /** * Parses the given string and returns an URL object (if the string is ok). */ GWENHYWFAR_API GWEN_URL *GWEN_Url_fromString(const char *str); GWENHYWFAR_API int GWEN_Url_toString(const GWEN_URL *url, GWEN_BUFFER *buf); GWENHYWFAR_API GWEN_URL *GWEN_Url_fromCommandString(const char *str); GWENHYWFAR_API int GWEN_Url_toCommandString(const GWEN_URL *url, GWEN_BUFFER *buf); /** * Creates a short string for user interface output. This means no password or * user id is shown, and no URL vars either. */ GWENHYWFAR_API void GWEN_Url_toUiShortString(const GWEN_URL *url, GWEN_BUFFER *buf); #ifdef __cplusplus } /* __cplusplus */ #endif #endif /* HTTPURLFNS_H */ gwenhywfar-4.15.2beta/src/parser/configmgr_be.h0000644000175000017500000001036012416477066016433 00000000000000/*************************************************************************** begin : Mon Aug 11 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_CONFIGMGR_BE_H #define GWENHYWFAR_CONFIGMGR_BE_H #include #include GWENHYWFAR_API GWEN_CONFIGMGR *GWEN_ConfigMgr_new(const char *url); typedef int (*GWEN_CONFIGMGR_GETGROUP_FN)(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName, GWEN_DB_NODE **pDb); typedef int (*GWEN_CONFIGMGR_SETGROUP_FN)(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName, GWEN_DB_NODE *db); typedef int (*GWEN_CONFIGMGR_LOCKGROUP_FN)(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName); typedef int (*GWEN_CONFIGMGR_UNLOCKGROUP_FN)(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName); typedef int (*GWEN_CONFIGMGR_GETUNIQUEID_FN)(GWEN_CONFIGMGR *mgr, const char *groupName, char *buffer, uint32_t bufferLen); typedef int (*GWEN_CONFIGMGR_DELETEGROUP_FN)(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName); typedef int (*GWEN_CONFIGMGR_LISTGROUPS_FN)(GWEN_CONFIGMGR *mgr, GWEN_STRINGLIST *sl); typedef int (*GWEN_CONFIGMGR_LISTSUBGROUPS_FN)(GWEN_CONFIGMGR *mgr, const char *groupName, GWEN_STRINGLIST *sl); GWENHYWFAR_API GWEN_CONFIGMGR_GETGROUP_FN GWEN_ConfigMgr_SetGetGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_GETGROUP_FN f); GWENHYWFAR_API GWEN_CONFIGMGR_SETGROUP_FN GWEN_ConfigMgr_SetSetGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_SETGROUP_FN f); GWENHYWFAR_API GWEN_CONFIGMGR_LOCKGROUP_FN GWEN_ConfigMgr_SetLockGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_LOCKGROUP_FN f); GWENHYWFAR_API GWEN_CONFIGMGR_UNLOCKGROUP_FN GWEN_ConfigMgr_SetUnlockGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_UNLOCKGROUP_FN f); GWENHYWFAR_API GWEN_CONFIGMGR_GETUNIQUEID_FN GWEN_ConfigMgr_SetGetUniqueIdFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_GETUNIQUEID_FN f); GWENHYWFAR_API GWEN_CONFIGMGR_DELETEGROUP_FN GWEN_ConfigMgr_SetDeleteGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_DELETEGROUP_FN f); GWENHYWFAR_API GWEN_CONFIGMGR_LISTGROUPS_FN GWEN_ConfigMgr_SetListGroupsFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_LISTGROUPS_FN f); GWENHYWFAR_API GWEN_CONFIGMGR_LISTSUBGROUPS_FN GWEN_ConfigMgr_SetListSubGroupsFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_LISTSUBGROUPS_FN f); typedef GWEN_CONFIGMGR* (*GWEN_CONFIGMGR_PLUGIN_FACTORYFN)(GWEN_PLUGIN *pl, const char *url); GWENHYWFAR_API GWEN_PLUGIN *GWEN_ConfigMgr_Plugin_new(GWEN_PLUGIN_MANAGER *pm, const char *name, const char *fileName); GWENHYWFAR_API void GWEN_ConfigMgr_Plugin_SetFactoryFn(GWEN_PLUGIN *pl, GWEN_CONFIGMGR_PLUGIN_FACTORYFN f); #endif gwenhywfar-4.15.2beta/src/parser/xmlglobalize.c0000644000175000017500000001533612416477066016506 00000000000000/*************************************************************************** begin : Wed Feb 27 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ GWEN_XMLNODE_NAMESPACE *GWEN_XMLGL__FindNameSpaceByUrl(GWEN_XMLNODE_NAMESPACE_LIST *l, const char *s) { GWEN_XMLNODE_NAMESPACE *ns; assert(l); ns=GWEN_XMLNode_NameSpace_List_First(l); while(ns) { const char *d; d=GWEN_XMLNode_NameSpace_GetUrl(ns); if (d && strcasecmp(d, s)==0) return ns; ns=GWEN_XMLNode_NameSpace_List_Next(ns); } return NULL; } GWEN_XMLNODE_NAMESPACE *GWEN_XMLGL__GetNameSpaceByPrefix(GWEN_XMLNODE *n, const char *prefix) { while(n) { if (n->type==GWEN_XMLNodeTypeTag) { GWEN_XMLNODE_NAMESPACE *ns; DBG_ERROR(0, "Checking in node [%s]", GWEN_XMLNode_GetData(n)); ns=GWEN_XMLNode_NameSpace_List_First(n->nameSpaces); while(ns) { const char *d; d=GWEN_XMLNode_NameSpace_GetName(ns); if (d && strcasecmp(d, prefix)==0) return ns; ns=GWEN_XMLNode_NameSpace_List_Next(ns); } } n=n->parent; } return NULL; } int GWEN_XMLGL__TranslateName(GWEN_XMLNODE *n, GWEN_XMLNODE_NAMESPACE_LIST *l, char **pValue) { GWEN_XMLNODE_NAMESPACE *ns; char *dcopy=NULL; char *v; const char *prefix; const char *name; /* split into prefix and value */ dcopy=strdup(*pValue); v=strchr(dcopy, ':'); if (v) { *v=0; prefix=dcopy; name=v+1; } else { prefix=""; name=dcopy; } /* find definition for namespace in this and parent nodes */ ns=GWEN_XMLGL__GetNameSpaceByPrefix(n, prefix); if (ns) { GWEN_XMLNODE_NAMESPACE *newNs; /* find new namespace in list of redefined namespaces */ newNs=GWEN_XMLGL__FindNameSpaceByUrl(l, GWEN_XMLNode_NameSpace_GetUrl(ns)); if (newNs) { char *newValue; /* translate prefix part of the name */ newValue=(char*)malloc(strlen(GWEN_XMLNode_NameSpace_GetName(newNs))+ strlen(name)+1+1); assert(newValue); strcpy(newValue, GWEN_XMLNode_NameSpace_GetName(newNs)); strcat(newValue, ":"); strcat(newValue, name); free(*pValue); *pValue=newValue; } else { DBG_ERROR(GWEN_LOGDOMAIN, "Namespace for [%s] not in list, should not happen.", GWEN_XMLNode_NameSpace_GetUrl(ns)); abort(); } free(dcopy); } else { DBG_ERROR(GWEN_LOGDOMAIN, "No definition for namespace \"%s\" found", prefix); free(dcopy); return GWEN_ERROR_NO_DATA; } return 0; } int GWEN_XMLGL__SampleNameSpaces(GWEN_XMLNODE *n, GWEN_XMLNODE_NAMESPACE_LIST *l, uint32_t *pLastId) { GWEN_XMLNODE *nn; if (n->type==GWEN_XMLNodeTypeTag) { GWEN_XMLNODE_NAMESPACE *ns; GWEN_XMLPROPERTY *pr; int rv; ns=GWEN_XMLNode_NameSpace_List_First(n->nameSpaces); while(ns) { const char *url; url=GWEN_XMLNode_NameSpace_GetUrl(ns); if (url) { if (GWEN_XMLGL__FindNameSpaceByUrl(l, url)==NULL) { char namebuf[32]; GWEN_XMLNODE_NAMESPACE *newNs; snprintf(namebuf, sizeof(namebuf)-1, "_%d_", ++(*pLastId)); newNs=GWEN_XMLNode_NameSpace_new(namebuf, url); GWEN_XMLNode_NameSpace_List_Add(newNs, l); } } ns=GWEN_XMLNode_NameSpace_List_Next(ns); } /* translate some properties */ pr=n->properties; while(pr) { if (pr->name && pr->value) { if (strcasecmp(pr->name, "type")==0 || strcasecmp(pr->name, "ref")==0 || strcasecmp(pr->name, "base")==0) { rv=GWEN_XMLGL__TranslateName(n, l, &(pr->value)); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } } pr=pr->next; } /* translate this node */ if (n->data) { rv=GWEN_XMLGL__TranslateName(n, l, &(n->data)); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } } /* sample and rename children */ nn=GWEN_XMLNode_List_First(n->children); while(nn) { int rv; rv=GWEN_XMLGL__SampleNameSpaces(nn, l, pLastId); if (rv) return rv; nn=GWEN_XMLNode_List_Next(nn); } return 0; } void GWEN_XMLGL__ClearNameSpaces(GWEN_XMLNODE *n) { GWEN_XMLNODE *nn; GWEN_XMLNode_NameSpace_List_Clear(n->nameSpaces); nn=GWEN_XMLNode_List_First(n->children); while(nn) { GWEN_XMLGL__ClearNameSpaces(nn); nn=GWEN_XMLNode_List_Next(nn); } } int GWEN_XMLNode_GlobalizeWithList(GWEN_XMLNODE *n, GWEN_XMLNODE_NAMESPACE_LIST *l, uint32_t *pLastId) { int rv; rv=GWEN_XMLGL__SampleNameSpaces(n, l, pLastId); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } GWEN_XMLGL__ClearNameSpaces(n); return 0; } int GWEN_XMLNode_Globalize(GWEN_XMLNODE *n) { GWEN_XMLNODE_NAMESPACE_LIST *l; uint32_t lastId=0; int rv; l=GWEN_XMLNode_NameSpace_List_new(); rv=GWEN_XMLNode_GlobalizeWithList(n, l, &lastId); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_XMLNode_NameSpace_List_free(l); return rv; } GWEN_XMLNode_NameSpace_List_free(n->nameSpaces); n->nameSpaces=l; return 0; } gwenhywfar-4.15.2beta/src/parser/tag16.h0000644000175000017500000000301412416477066014732 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: tag16_l.h 790 2005-07-23 09:32:08Z aquamaniac $ begin : Sun Jun 13 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWENHYWFAR_OHBCI_TAG16_H #define GWENHYWFAR_OHBCI_TAG16_H #include #include typedef struct GWEN_TAG16 GWEN_TAG16; GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_TAG16, GWEN_Tag16, GWENHYWFAR_API) GWENHYWFAR_API GWEN_TAG16 *GWEN_Tag16_new(void); GWENHYWFAR_API void GWEN_Tag16_DirectlyToBuffer(unsigned int tagType, const char *p, int size, GWEN_BUFFER *buf); GWENHYWFAR_API void GWEN_Tag16_free(GWEN_TAG16 *tlv); GWENHYWFAR_API GWEN_TAG16 *GWEN_Tag16_fromBuffer(GWEN_BUFFER *mbuf, int isBerTlv); GWENHYWFAR_API GWEN_TAG16 *GWEN_Tag16_fromBuffer2(const uint8_t *p, uint32_t l, int doCopy); GWENHYWFAR_API unsigned int GWEN_Tag16_GetTagType(const GWEN_TAG16 *tlv); GWENHYWFAR_API unsigned int GWEN_Tag16_GetTagLength(const GWEN_TAG16 *tlv); GWENHYWFAR_API const void *GWEN_Tag16_GetTagData(const GWEN_TAG16 *tlv); GWENHYWFAR_API unsigned int GWEN_Tag16_GetTagSize(const GWEN_TAG16 *tlv); #endif /* GWENHYWFAR_OHBCI_TAG16_H */ gwenhywfar-4.15.2beta/src/parser/url.h0000644000175000017500000001110112416477066014606 00000000000000/* This file is auto-generated from "url.xml" by the typemaker tool of Gwenhywfar. Do not edit this file -- all changes will be lost! */ #ifndef URL_H #define URL_H /** @page P_GWEN_URL_PUBLIC GWEN_Url (public) This page describes the properties of GWEN_URL @anchor GWEN_URL_Protocol

Protocol

Set this property with @ref GWEN_Url_SetProtocol, get it with @ref GWEN_Url_GetProtocol

@anchor GWEN_URL_Server

Server

Set this property with @ref GWEN_Url_SetServer, get it with @ref GWEN_Url_GetServer

@anchor GWEN_URL_Port

Port

Set this property with @ref GWEN_Url_SetPort, get it with @ref GWEN_Url_GetPort

@anchor GWEN_URL_Path

Path

Set this property with @ref GWEN_Url_SetPath, get it with @ref GWEN_Url_GetPath

@anchor GWEN_URL_UserName

UserName

Set this property with @ref GWEN_Url_SetUserName, get it with @ref GWEN_Url_GetUserName

@anchor GWEN_URL_Password

Password

Set this property with @ref GWEN_Url_SetPassword, get it with @ref GWEN_Url_GetPassword

@anchor GWEN_URL_Vars

Vars

Set this property with @ref GWEN_Url_SetVars, get it with @ref GWEN_Url_GetVars

*/ #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_URL GWEN_URL; #ifdef __cplusplus } /* __cplusplus */ #endif #include #include #include /* headers */ #include #include #ifdef __cplusplus extern "C" { #endif GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_URL, GWEN_Url, GWENHYWFAR_API) GWENHYWFAR_API GWEN_URL_LIST *GWEN_Url_List_dup(const GWEN_URL_LIST *stl); GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_URL, GWEN_Url, GWENHYWFAR_API) /** Destroys all objects stored in the given LIST2 and the list itself */ GWENHYWFAR_API void GWEN_Url_List2_freeAll(GWEN_URL_LIST2 *stl); /** Creates a new object. */ GWENHYWFAR_API GWEN_URL *GWEN_Url_new(void); /** Creates an object from the data in the given GWEN_DB_NODE */ GWENHYWFAR_API GWEN_URL *GWEN_Url_fromDb(GWEN_DB_NODE *db); /** Creates and returns a deep copy of thegiven object. */ GWENHYWFAR_API GWEN_URL *GWEN_Url_dup(const GWEN_URL*st); /** Destroys the given object. */ GWENHYWFAR_API void GWEN_Url_free(GWEN_URL *st); /** Increments the usage counter of the given object, so an additional free() is needed to destroy the object. */ GWENHYWFAR_API void GWEN_Url_Attach(GWEN_URL *st); /** Reads data from a GWEN_DB. */ GWENHYWFAR_API int GWEN_Url_ReadDb(GWEN_URL *st, GWEN_DB_NODE *db); /** Stores an object in the given GWEN_DB_NODE */ GWENHYWFAR_API int GWEN_Url_toDb(const GWEN_URL*st, GWEN_DB_NODE *db); /** Returns 0 if this object has not been modified, !=0 otherwise */ GWENHYWFAR_API int GWEN_Url_IsModified(const GWEN_URL *st); /** Sets the modified state of the given object */ GWENHYWFAR_API void GWEN_Url_SetModified(GWEN_URL *st, int i); /** * Returns the property @ref GWEN_URL_Protocol */ GWENHYWFAR_API const char *GWEN_Url_GetProtocol(const GWEN_URL *el); /** * Set the property @ref GWEN_URL_Protocol */ GWENHYWFAR_API void GWEN_Url_SetProtocol(GWEN_URL *el, const char *d); /** * Returns the property @ref GWEN_URL_Server */ GWENHYWFAR_API const char *GWEN_Url_GetServer(const GWEN_URL *el); /** * Set the property @ref GWEN_URL_Server */ GWENHYWFAR_API void GWEN_Url_SetServer(GWEN_URL *el, const char *d); /** * Returns the property @ref GWEN_URL_Port */ GWENHYWFAR_API int GWEN_Url_GetPort(const GWEN_URL *el); /** * Set the property @ref GWEN_URL_Port */ GWENHYWFAR_API void GWEN_Url_SetPort(GWEN_URL *el, int d); /** * Returns the property @ref GWEN_URL_Path */ GWENHYWFAR_API const char *GWEN_Url_GetPath(const GWEN_URL *el); /** * Set the property @ref GWEN_URL_Path */ GWENHYWFAR_API void GWEN_Url_SetPath(GWEN_URL *el, const char *d); /** * Returns the property @ref GWEN_URL_UserName */ GWENHYWFAR_API const char *GWEN_Url_GetUserName(const GWEN_URL *el); /** * Set the property @ref GWEN_URL_UserName */ GWENHYWFAR_API void GWEN_Url_SetUserName(GWEN_URL *el, const char *d); /** * Returns the property @ref GWEN_URL_Password */ GWENHYWFAR_API const char *GWEN_Url_GetPassword(const GWEN_URL *el); /** * Set the property @ref GWEN_URL_Password */ GWENHYWFAR_API void GWEN_Url_SetPassword(GWEN_URL *el, const char *d); /** * Returns the property @ref GWEN_URL_Vars */ GWENHYWFAR_API GWEN_DB_NODE *GWEN_Url_GetVars(const GWEN_URL *el); /** * Set the property @ref GWEN_URL_Vars */ GWENHYWFAR_API void GWEN_Url_SetVars(GWEN_URL *el, GWEN_DB_NODE *d); #ifdef __cplusplus } /* __cplusplus */ #endif #endif /* URL_H */ gwenhywfar-4.15.2beta/src/parser/xml_p.h0000644000175000017500000001232312416477066015132 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sat Jun 28 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_XML_P_H #define GWENHYWFAR_XML_P_H #include "xml_l.h" #include #define GWEN_XML_FLAGS__INTERNAL 0xf0000000 #define GWEN_XML_FLAGS__DATA 0x10000000 #define GWEN_XML_MAX_DEPTH 32 struct GWEN__XMLPROPERTY { GWEN_XMLPROPERTY *next; char *name; char *value; char *nameSpace; }; GWEN_XMLPROPERTY *GWEN_XMLProperty_new(const char *name, const char *value); void GWEN_XMLProperty_free(GWEN_XMLPROPERTY *p); GWEN_XMLPROPERTY *GWEN_XMLProperty_dup(const GWEN_XMLPROPERTY *p); void GWEN_XMLProperty_freeAll(GWEN_XMLPROPERTY *p); void GWEN_XMLProperty_add(GWEN_XMLPROPERTY *p, GWEN_XMLPROPERTY **head); void GWEN_XMLProperty_insert(GWEN_XMLPROPERTY *p, GWEN_XMLPROPERTY **head); void GWEN_XMLProperty_del(GWEN_XMLPROPERTY *p, GWEN_XMLPROPERTY **head); struct GWEN__XMLNODE { GWEN_LIST_ELEMENT(GWEN_XMLNODE) GWEN_XMLNODE_LIST *children; GWEN_XMLNODE *parent; GWEN_XMLNODE_LIST *headers; GWEN_XMLNODE_NAMESPACE_LIST *nameSpaces; GWEN_XMLNODE_TYPE type; GWEN_XMLPROPERTY *properties; uint32_t usage; char *data; char *nameSpace; }; struct GWEN_XMLNODE_PATH { unsigned int pos; GWEN_XMLNODE *nodes[GWEN_XML_MAX_DEPTH]; }; struct GWEN_XMLNODE_NAMESPACE { GWEN_LIST_ELEMENT(GWEN_XMLNODE_NAMESPACE) char *name; char *url; }; static void GWEN_XMLNode__SetProperty(GWEN_XMLNODE *n, const char *name, const char *value, int doInsert); static int GWEN_XMLNode__WriteToStream(const GWEN_XMLNODE *n, GWEN_FAST_BUFFER *fb, uint32_t flags, unsigned int ind); static GWEN_XMLNODE *GWEN_XMLNode_GetFirstOfType(const GWEN_XMLNODE *n, GWEN_XMLNODE_TYPE t); static GWEN_XMLNODE *GWEN_XMLNode_GetNextOfType(const GWEN_XMLNODE *n, GWEN_XMLNODE_TYPE t); static GWEN_XMLNODE *GWEN_XMLNode_FindTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue); /** * Removes all namespace declarations which have been declared in a higher * level. */ static int GWEN_XMLNode__CheckNameSpaceDecls1(GWEN_XMLNODE *n, GWEN_STRINGLIST2 *sl, const char *currentNameSpace); /** * Moves all namespace declarations from this node to the nodes * of first use */ static int GWEN_XMLNode__CheckNameSpaceDecls3(GWEN_XMLNODE *n); static int GWEN_XMLNode__SetNameSpaces(GWEN_XMLNODE *n, const char *prefix, const char *nspace); static int GWEN_XMLNode__CheckAndSetNameSpace(GWEN_XMLNODE *n, const char *prefix, const char *nspace); static int GWEN_XML__ReadData(GWEN_XML_CONTEXT *ctx, GWEN_FAST_BUFFER *fb, uint32_t flags); static int GWEN_XML__ReadTag(GWEN_XML_CONTEXT *ctx, GWEN_FAST_BUFFER *fb, uint32_t flags, GWEN_BUFFER *workBuf); static int GWEN_XML__ReadAllFromIo(GWEN_XML_CONTEXT *ctx, GWEN_SYNCIO *sio); static GWEN_XMLNODE_NAMESPACE *GWEN_XMLGL__GetNameSpaceByPrefix(GWEN_XMLNODE *n, const char *prefix); static int GWEN_XMLGL__SampleNameSpaces(GWEN_XMLNODE *n, GWEN_XMLNODE_NAMESPACE_LIST *l, uint32_t *pLastId); static void GWEN_XMLGL__ClearNameSpaces(GWEN_XMLNODE *n); static int GWEN_XMLGL__TranslateName(GWEN_XMLNODE *n, GWEN_XMLNODE_NAMESPACE_LIST *l, char **pValue); #endif gwenhywfar-4.15.2beta/src/parser/xsdnode.h0000644000175000017500000000651612416477066015466 00000000000000/*************************************************************************** begin : Wed Feb 27 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_XSDNODE_H #define GWENHYWFAR_XSDNODE_H typedef struct GWEN_XSD_NODE GWEN_XSD_NODE; #include #include GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_XSD_NODE, GWENHYWFAR_API) GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_XSD_NODE, GWEN_XsdNode, GWENHYWFAR_API) #include #include typedef enum { GWEN_Xsd_NodeType_Unknown=0, GWEN_Xsd_NodeType_Any, GWEN_Xsd_NodeType_Element, GWEN_Xsd_NodeType_Attribute, GWEN_Xsd_NodeType_ComplexType, GWEN_Xsd_NodeType_SimpleType, GWEN_Xsd_NodeType_Group, GWEN_Xsd_NodeType_AttributeGroup, GWEN_Xsd_NodeType_Facet } GWEN_XSD_NODETYPE; GWEN_XSD_NODE *GWEN_XsdNode_new(GWEN_XSD_NODE *parent, GWEN_XSD_NODETYPE t, const char *name); void GWEN_XsdNode_free(GWEN_XSD_NODE *xsdNode); GWEN_XSD_NODETYPE GWEN_XsdNode_GetNodeType(const GWEN_XSD_NODE *xsdNode); const char *GWEN_XsdNode_GetName(const GWEN_XSD_NODE *xsdNode); GWEN_XSD_NODE *GWEN_XsdNode_GetParent(const GWEN_XSD_NODE *xsdNode); GWEN_XSD_NODE_LIST *GWEN_XsdNode_GetChildren(const GWEN_XSD_NODE *xsdNode); void GWEN_XsdNode_AddChild(GWEN_XSD_NODE *xsdNode, GWEN_XSD_NODE *newChild); void GWEN_XsdNode_Unlink(GWEN_XSD_NODE *xsdNode); uint32_t GWEN_XsdNode_GetFlags(const GWEN_XSD_NODE *xsdNode); void GWEN_XsdNode_SetFlags(GWEN_XSD_NODE *xsdNode, uint32_t fl); void GWEN_XsdNode_AddFlags(GWEN_XSD_NODE *xsdNode, uint32_t fl); void GWEN_XsdNode_SubFlags(GWEN_XSD_NODE *xsdNode, uint32_t fl); int GWEN_XsdNode_Read(GWEN_XSD_NODE *xsdNode, GWEN_XMLNODE *xmlNode, GWEN_DB_NODE *db); int GWEN_XsdNode_Write(GWEN_XSD_NODE *xsdNode, GWEN_XMLNODE *xmlNode, GWEN_DB_NODE *db); #endif gwenhywfar-4.15.2beta/src/parser/text.c0000644000175000017500000012760212416477066015001 00000000000000/*************************************************************************** begin : Sat Jun 28 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "text.h" #include #include #include #include #include #ifdef HAVE_LOCALE_H # include #endif #ifndef ICONV_CONST # define ICONV_CONST #endif #ifdef HAVE_ICONV_H # include #endif #include #include #include typedef struct { int character; const char *replace; } GWEN_TEXT_ESCAPE_ENTRY; static const GWEN_TEXT_ESCAPE_ENTRY gwen_text__xml_escape_chars[]= { {'&', "&"}, {'<', "<"}, {'>', ">"}, {'\'', "'"}, {'\"', """}, {0, 0} }; char *GWEN_Text_GetWord(const char *src, const char *delims, char *buffer, unsigned int maxsize, uint32_t flags, const char **next) { unsigned int size; int lastWasBlank; int lastBlankPos; int insideQuotes; int lastWasEscape; assert(maxsize); /* skip leading blanks, if wanted */ if (flags & GWEN_TEXT_FLAGS_DEL_LEADING_BLANKS) { while(*src && (unsigned char)(*src)<33) src++; } /* get word */ size=0; lastWasBlank=0; lastBlankPos=-1; lastWasEscape=0; insideQuotes=0; if (*src=='"') { insideQuotes=1; if (flags & GWEN_TEXT_FLAGS_DEL_QUOTES) src++; } while(*src && size<(maxsize-1)) { if (lastWasEscape) { buffer[size]=*src; size++; lastWasEscape=0; lastWasBlank=0; lastBlankPos=-1; } else { if (*src=='\\' && (flags & GWEN_TEXT_FLAGS_CHECK_BACKSLASH)) { lastWasEscape=1; lastWasBlank=0; lastBlankPos=-1; } else { if (!insideQuotes && strchr(delims, *src)!=0) break; if (*src=='"') { if (insideQuotes) { insideQuotes=0; src++; break; } else { DBG_DEBUG(GWEN_LOGDOMAIN, "Found a closing \" without an opening one " "(consider using a backslash to escape)"); return 0; } } if (insideQuotes || !lastWasBlank || (lastWasBlank && !(flags & GWEN_TEXT_FLAGS_DEL_MULTIPLE_BLANKS))) { /* only copy if last char was NOT blank or * last was blank but the caller does not want to have multiple * blanks removed */ buffer[size]=*src; size++; } /* remember next loop whether this char was a blank */ if (isspace((int)((unsigned char)*src)) && !lastWasEscape) { lastWasBlank=1; lastBlankPos=size; } else { lastWasBlank=0; lastBlankPos=-1; } } /* if this is not a backslash */ } /* !lastWasEscape */ /* advance source pointer */ src++; } /* while */ /* add trailing null to correctly terminate the buffer */ buffer[size]=0; if (insideQuotes) { DBG_DEBUG(GWEN_LOGDOMAIN, "Missing \" after word"); return 0; } /* check whether the source string was correctly terminated */ if (flags & GWEN_TEXT_FLAGS_NEED_DELIMITER) { if (*src) { if (strchr(delims, *src)==0) { DBG_ERROR(GWEN_LOGDOMAIN, "No delimiter found within specified length"); return 0; } } else { if (!(flags & GWEN_TEXT_FLAGS_NULL_IS_DELIMITER)) { DBG_ERROR(GWEN_LOGDOMAIN, "String ends without delimiter"); return 0; } } } /* remove trailing blanks, if wanted */ if (flags & GWEN_TEXT_FLAGS_DEL_TRAILING_BLANKS) { if (lastBlankPos!=-1) buffer[lastBlankPos]=0; } *next=src; return buffer; } int GWEN_Text_GetWordToBuffer(const char *src, const char *delims, GWEN_BUFFER *buf, uint32_t flags, const char **next) { const char *savedSrc=src; int lastWasBlank; int lastBlankPos; int insideQuotes; int lastWasEscape; /* skip leading blanks, if wanted */ if (flags & GWEN_TEXT_FLAGS_DEL_LEADING_BLANKS) { while(*src && (unsigned char)(*src)<33) { if (strchr(delims, *src)) { *next=src; return 0; } src++; } } /* get word */ lastWasBlank=0; lastBlankPos=-1; lastWasEscape=0; insideQuotes=0; if (*src=='"') { insideQuotes=1; if (flags & GWEN_TEXT_FLAGS_DEL_QUOTES) src++; } while(*src) { if (lastWasEscape) { GWEN_Buffer_AppendByte(buf, *src); lastWasEscape=0; lastWasBlank=0; lastBlankPos=-1; } else { if (*src=='\\' && (flags & GWEN_TEXT_FLAGS_CHECK_BACKSLASH)) { lastWasEscape=1; lastWasBlank=0; lastBlankPos=-1; } else { if (!insideQuotes && strchr(delims, *src)!=0) break; if (*src=='"') { if (insideQuotes) { insideQuotes=0; src++; break; } else { DBG_ERROR(GWEN_LOGDOMAIN, "Found a closing \" without an opening one " "(consider using a backslash to escape)"); return -1; } } if (insideQuotes || !lastWasBlank || (lastWasBlank && !(flags & GWEN_TEXT_FLAGS_DEL_MULTIPLE_BLANKS))) { /* only copy if last char was NOT blank or * last was blank but the caller does not want to have multiple * blanks removed */ GWEN_Buffer_AppendByte(buf, *src); } /* remember next loop whether this char was a blank */ if (!lastWasEscape && *((unsigned char*)src)<33) { lastWasBlank=1; lastBlankPos=GWEN_Buffer_GetPos(buf); } else { lastWasBlank=0; lastBlankPos=-1; } } /* if this is not a backslash */ } /* !lastWasEscape */ /* advance source pointer */ src++; } /* while */ if (insideQuotes) { DBG_ERROR(GWEN_LOGDOMAIN, "Missing \" after word (at %d: [%s])", (int)(src-savedSrc), savedSrc); return -1; } /* check whether the source string was correctly terminated */ if (flags & GWEN_TEXT_FLAGS_NEED_DELIMITER) { if (*src) { if (strchr(delims, *src)==0) { DBG_ERROR(GWEN_LOGDOMAIN, "No delimiter found within specified length"); return -1; } } else { if (!(flags & GWEN_TEXT_FLAGS_NULL_IS_DELIMITER)) { DBG_ERROR(GWEN_LOGDOMAIN, "String ends without delimiter"); return -1; } } } /* remove trailing blanks, if wanted */ if (flags & GWEN_TEXT_FLAGS_DEL_TRAILING_BLANKS) { if (lastBlankPos!=-1) GWEN_Buffer_Crop(buf, 0, lastBlankPos); } *next=src; return 0; } char *GWEN_Text_Escape(const char *src, char *buffer, unsigned int maxsize) { unsigned int size; size=0; while(*src) { unsigned char x; x=(unsigned char)*src; if (!( (x>='A' && x<='Z') || (x>='a' && x<='z') || (x>='0' && x<='9'))) { unsigned char c; if ((maxsize-1)>4)&0xf; if (c>9) c+=7; c+='0'; buffer[size++]=c; c=((unsigned char)(*src))&0xf; if (c>9) c+=7; c+='0'; buffer[size++]=c; } else { if (size<(maxsize-1)) buffer[size++]=*src; else { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small"); return 0; } } src++; } /* while */ buffer[size]=0; return buffer; } char *GWEN_Text_EscapeTolerant(const char *src, char *buffer, unsigned int maxsize) { unsigned int size; size=0; while(*src) { unsigned char x; x=(unsigned char)*src; if (!( (x>='A' && x<='Z') || (x>='a' && x<='z') || (x>='0' && x<='9') || x==' ' || x=='.' || x==',' || x=='.' || x=='*' || x=='?' )) { unsigned char c; if ((maxsize-1)>4)&0xf; if (c>9) c+=7; c+='0'; buffer[size++]=c; c=((unsigned char)(*src))&0xf; if (c>9) c+=7; c+='0'; buffer[size++]=c; } else { if (size<(maxsize-1)) buffer[size++]=*src; else { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small"); return 0; } } src++; } /* while */ buffer[size]=0; return buffer; } char *GWEN_Text_UnescapeN(const char *src, unsigned int srclen, char *buffer, unsigned int maxsize) { unsigned int size; size=0; while(*src && srclen>0) { unsigned char x; x=(unsigned char)*src; if ( (x>='A' && x<='Z') || (x>='a' && x<='z') || (x>='0' && x<='9')) { if (size<(maxsize-1)) buffer[size++]=*src; else { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small"); return 0; } } else { if (*src=='%') { unsigned char d1, d2; unsigned char c; if (srclen<3) { DBG_ERROR(GWEN_LOGDOMAIN, "Incomplete escape sequence (EOLN met)"); return 0; } /* skip '%' */ src++; if (!(*src) || !isxdigit((int)*src)) { DBG_ERROR(GWEN_LOGDOMAIN, "Incomplete escape sequence (no digits)"); return 0; } /* read first digit */ d1=(unsigned char)(toupper(*src)); /* get second digit */ src++; if (!(*src) || !isxdigit((int)*src)) { DBG_ERROR(GWEN_LOGDOMAIN, "Incomplete escape sequence (only 1 digit)"); return 0; } d2=(unsigned char)(toupper(*src)); /* compute character */ d1-='0'; if (d1>9) d1-=7; c=(d1<<4)&0xf0; d2-='0'; if (d2>9) d2-=7; c+=(d2&0xf); /* store character */ if (size<(maxsize-1)) buffer[size++]=(char)c; else { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small"); return 0; } srclen-=2; } else { DBG_ERROR(GWEN_LOGDOMAIN, "Found non-alphanum " "characters in escaped string (\"%s\")", src); return 0; } } srclen--; src++; } /* while */ buffer[size]=0; return buffer; } char *GWEN_Text_Unescape(const char *src, char *buffer, unsigned int maxsize) { unsigned int srclen; srclen=strlen(src); return GWEN_Text_UnescapeN(src, srclen, buffer, maxsize); } char *GWEN_Text_UnescapeTolerantN(const char *src, unsigned int srclen, char *buffer, unsigned int maxsize) { unsigned int size; size=0; while(*src && srclen>0) { unsigned char x; x=(unsigned char)*src; if ( (x>='A' && x<='Z') || (x>='a' && x<='z') || (x>='0' && x<='9') || x==' ' || x=='.' || x==',' || x=='.' || x=='*' || x=='?' ) { if (size<(maxsize-1)) buffer[size++]=*src; else { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small"); return 0; } } else { if (*src=='%') { unsigned char d1, d2; unsigned char c; if (srclen<3) { DBG_ERROR(GWEN_LOGDOMAIN, "Incomplete escape sequence (EOLN met)"); return 0; } /* skip '%' */ src++; if (!(*src) || !isxdigit((int)*src)) { DBG_ERROR(GWEN_LOGDOMAIN, "Incomplete escape sequence (no digits)"); return 0; } /* read first digit */ d1=(unsigned char)(toupper(*src)); /* get second digit */ src++; if (!(*src) || !isxdigit((int)*src)) { DBG_ERROR(GWEN_LOGDOMAIN, "Incomplete escape sequence (only 1 digit)"); return 0; } d2=(unsigned char)(toupper(*src)); /* compute character */ d1-='0'; if (d1>9) d1-=7; c=(d1<<4)&0xf0; d2-='0'; if (d2>9) d2-=7; c+=(d2&0xf); /* store character */ if (size<(maxsize-1)) buffer[size++]=(char)c; else { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small"); return 0; } srclen-=2; } else { DBG_ERROR(GWEN_LOGDOMAIN, "Found non-alphanum " "characters in escaped string (\"%s\")", src); return 0; } } srclen--; src++; } /* while */ buffer[size]=0; return buffer; } char *GWEN_Text_UnescapeTolerant(const char *src, char *buffer, unsigned int maxsize) { unsigned int srclen; srclen=strlen(src); return GWEN_Text_UnescapeTolerantN(src, srclen, buffer, maxsize); } char *GWEN_Text_ToHex(const char *src, unsigned l, char *buffer, unsigned int maxsize) { unsigned int pos; unsigned int size; if ((l*2)+1 > maxsize) { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small"); return 0; } pos=0; size=0; while(pos>4)&0xf; if (c>9) c+=7; c+='0'; buffer[size++]=c; c=((unsigned char)(src[pos]))&0xf; if (c>9) c+=7; c+='0'; buffer[size++]=c; pos++; } buffer[size]=0; return buffer; } char *GWEN_Text_ToHexGrouped(const char *src, unsigned l, char *buffer, unsigned maxsize, unsigned int groupsize, char delimiter, int skipLeadingZeroes) { unsigned int pos; unsigned int size; unsigned int j; j=0; pos=0; size=0; j=0; while(pos>4)&0xf; if (skipLeadingZeroes) { if (c==0) skipThis=1; else skipLeadingZeroes=0; } if (c>9) c+=7; c+='0'; if (!skipThis) { if (size+1>=maxsize) { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small"); return 0; } buffer[size++]=c; j++; if (j==groupsize) { if (size+1>=maxsize) { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small"); return 0; } buffer[size++]=delimiter; j=0; } } skipThis=0; c=((unsigned char)(src[pos]))&0xf; if (skipLeadingZeroes) { if (c==0 && pos+19) c+=7; c+='0'; if (size+1>=maxsize) { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small"); return 0; } if (!skipThis) { buffer[size++]=c; j++; if (j==groupsize) { if (pos+1=maxsize) { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small"); return 0; } buffer[size++]=delimiter; } j=0; } } pos++; } buffer[size]=0; return buffer; } int GWEN_Text_ToHexBuffer(const char *src, unsigned l, GWEN_BUFFER *buf, unsigned int groupsize, char delimiter, int skipLeadingZeroes) { unsigned int pos = 0; unsigned int j = 0; while(pos>4)&0xf; if (skipLeadingZeroes) { if (c==0) skipThis=1; else skipLeadingZeroes=0; } if (c>9) c+=7; c+='0'; if (!skipThis) { if (GWEN_Buffer_AppendByte(buf, c)) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return -1; } j++; if (groupsize && j==groupsize) { if (GWEN_Buffer_AppendByte(buf, delimiter)) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return -1; } j=0; } } skipThis=0; c=((unsigned char)(src[pos]))&0xf; if (skipLeadingZeroes) { if (c==0 && pos+19) c+=7; c+='0'; if (!skipThis) { if (GWEN_Buffer_AppendByte(buf, c)) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return -1; } j++; if (groupsize && j==groupsize) { if (pos+19) d1-=7; c=(d1<<4)&0xf0; d2-='0'; if (d2>9) d2-=7; c+=(d2&0xf); /* store character */ if (size<(maxsize)) buffer[size++]=(char)c; else { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small (maxsize=%d)", maxsize); return -1; } } /* while */ return size; } int GWEN_Text_FromHexBuffer(const char *src, GWEN_BUFFER *buf) { while(*src) { unsigned char d1, d2; unsigned char c; /* read first digit */ if (isspace((int)*src)) { src++; } else { if (!isxdigit((int)*src)) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad char in hex string"); return -1; } d1=(unsigned char)(toupper(*src)); /* get second digit */ src++; if (!(*src) || !isxdigit((int)*src)) { DBG_ERROR(GWEN_LOGDOMAIN, "Incomplete hex byte (only 1 digit)"); return -1; } d2=(unsigned char)(toupper(*src)); src++; /* compute character */ d1-='0'; if (d1>9) d1-=7; c=(d1<<4)&0xf0; d2-='0'; if (d2>9) d2-=7; c+=(d2&0xf); /* store character */ GWEN_Buffer_AppendByte(buf, (char)c); } } /* while */ return 0; } int GWEN_Text_FromBcdBuffer(const char *src, GWEN_BUFFER *buf) { unsigned int l; int fakeByte; l=strlen(src); fakeByte=(l%2); while(*src) { unsigned char d1, d2; unsigned char c; if (fakeByte) { d1=0; fakeByte=0; } else { /* read first digit */ if (!isdigit((int)*src)) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad char in bcd string"); return -1; } d1=(unsigned char)(*src); src++; } /* get second digit */ if (!(*src) || !isxdigit((int)*src)) { DBG_ERROR(GWEN_LOGDOMAIN, "Incomplete BCD byte (only 1 digit)"); return -1; } d2=(unsigned char)(*src); src++; /* compute character */ d1-='0'; c=(d1<<4)&0xf0; d2-='0'; c+=(d2&0xf); /* store character */ GWEN_Buffer_AppendByte(buf, (char)c); } /* while */ return 0; } int GWEN_Text_ToBcdBuffer(const char *src, unsigned l, GWEN_BUFFER *buf, unsigned int groupsize, char delimiter, int skipLeadingZeroes) { unsigned int pos; unsigned int j; j=0; pos=0; j=0; while(pos>4)&0xf; if (skipLeadingZeroes) { if (c==0) skipThis=1; else skipLeadingZeroes=0; } c+='0'; if (!skipThis) { if (GWEN_Buffer_AppendByte(buf, c)) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return -1; } j++; if (groupsize && j==groupsize) { if (GWEN_Buffer_AppendByte(buf, delimiter)) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return -1; } j=0; } } skipThis=0; c=((unsigned char)(src[pos]))&0xf; if (skipLeadingZeroes) { if (c==0 && pos+1=wlength && _ppos=plength) return matches; /* skip '*' in pattern */ ppos++; /* if pattern ends behind '*' the word matches */ if (ppos>=plength) return matches; /* find next matching segment */ if (!GWEN_Text__findSegment(w,&wpos,p,&ppos,sensecase,&matches)) { return -1; } } /* while */ /* I know, we'll never get to here ;-) */ return -1; } int GWEN_Text_NumToString(int num, char *buffer, unsigned int bufsize, int fillchar) { char lbuffer[128]; unsigned int i; sprintf(lbuffer,"%d", num); i=strlen(lbuffer); if (i>=bufsize) { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small (%d>=%d)", i, bufsize); return -1; } if (fillchar>0) { /* fill right, but first copy chars */ strcpy(buffer, lbuffer); while(i=l) j=l; /* show hex dump */ for (i=pos; i=l) j=l; /* show hex dump */ for (i=pos; i='A' && x<='Z') || (x>='a' && x<='z') || (x>='0' && x<='9'))) { unsigned char c; GWEN_Buffer_AppendByte(buf, '%'); c=(((unsigned char)(*src))>>4)&0xf; if (c>9) c+=7; c+='0'; GWEN_Buffer_AppendByte(buf, c); c=((unsigned char)(*src))&0xf; if (c>9) c+=7; c+='0'; GWEN_Buffer_AppendByte(buf, c); } else GWEN_Buffer_AppendByte(buf, *src); src++; } /* while */ return 0; } int GWEN_Text_UnescapeToBuffer(const char *src, GWEN_BUFFER *buf) { while(*src) { unsigned char x; x=(unsigned char)*src; if ( (x>='A' && x<='Z') || (x>='a' && x<='z') || (x>='0' && x<='9')) { GWEN_Buffer_AppendByte(buf, *src); } else { if (*src=='%') { unsigned char d1, d2; unsigned char c; /* skip '%' */ src++; if (!(*src) || !isxdigit((int)*src)) { DBG_ERROR(GWEN_LOGDOMAIN, "Incomplete escape sequence (no digits)"); return 0; } /* read first digit */ d1=(unsigned char)(toupper(*src)); /* get second digit */ src++; if (!(*src) || !isxdigit((int)*src)) { DBG_ERROR(GWEN_LOGDOMAIN, "Incomplete escape sequence (only 1 digit)"); return 0; } d2=(unsigned char)(toupper(*src)); /* compute character */ d1-='0'; if (d1>9) d1-=7; c=(d1<<4)&0xf0; d2-='0'; if (d2>9) d2-=7; c+=(d2&0xf); /* store character */ GWEN_Buffer_AppendByte(buf, (char)c); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Found non-alphanum " "characters in escaped string (\"%s\")", src); return -1; } } src++; } /* while */ return 0; } int GWEN_Text_EscapeToBufferTolerant(const char *src, GWEN_BUFFER *buf) { while(*src) { unsigned char x; x=(unsigned char)*src; if (!( (x>='A' && x<='Z') || (x>='a' && x<='z') || (x>='0' && x<='9') || x==' ' || x=='.' || x==',' || x=='.' || x=='_' || x=='-' || x=='*' || x=='?' )) { unsigned char c; GWEN_Buffer_AppendByte(buf, '%'); c=(((unsigned char)(*src))>>4)&0xf; if (c>9) c+=7; c+='0'; GWEN_Buffer_AppendByte(buf, c); c=((unsigned char)(*src))&0xf; if (c>9) c+=7; c+='0'; GWEN_Buffer_AppendByte(buf, c); } else GWEN_Buffer_AppendByte(buf, *src); src++; } /* while */ return 0; } int GWEN_Text_UnescapeToBufferTolerant(const char *src, GWEN_BUFFER *buf) { while(*src) { //const char *srcBak=src; int charHandled=0; if (*src=='%') { if (strlen(src)>2) { unsigned char d1, d2; unsigned char c; if (isxdigit((int)src[1]) && isxdigit((int)src[2])) { /* skip '%' */ src++; /* read first digit */ d1=(unsigned char)(toupper(*src)); /* get second digit */ src++; d2=(unsigned char)(toupper(*src)); /* compute character */ d1-='0'; if (d1>9) d1-=7; c=(d1<<4)&0xf0; d2-='0'; if (d2>9) d2-=7; c+=(d2&0xf); /* store character */ GWEN_Buffer_AppendByte(buf, (char)c); charHandled=1; } } } if (!charHandled) GWEN_Buffer_AppendByte(buf, *src); src++; } /* while */ return 0; } int GWEN_Text_EscapeToBufferTolerant2(GWEN_BUFFER *src, GWEN_BUFFER *buf) { while(GWEN_Buffer_GetBytesLeft(src)) { int z; unsigned char x; z=GWEN_Buffer_ReadByte(src); if (z==-1) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return -1; } x=(unsigned char)z; if (!( (x>='A' && x<='Z') || (x>='a' && x<='z') || (x>='0' && x<='9') || x==' ' || x=='.' || x==',' || x=='.' || x=='*' || x=='?' )) { unsigned char c; GWEN_Buffer_AppendByte(buf, '%'); c=(((unsigned char)x)>>4)&0xf; if (c>9) c+=7; c+='0'; GWEN_Buffer_AppendByte(buf, c); c=((unsigned char)x)&0xf; if (c>9) c+=7; c+='0'; GWEN_Buffer_AppendByte(buf, c); } else GWEN_Buffer_AppendByte(buf, x); } /* while */ return 0; } void GWEN_Text_LogString(const char *s, unsigned int l, const char *logDomain, GWEN_LOGGER_LEVEL lv) { GWEN_BUFFER *mbuf; mbuf=GWEN_Buffer_new(0, ((l*16)<1024)?1024:l*16, 0, 1); GWEN_Text_DumpString2Buffer(s, l, mbuf, 0); GWEN_Logger_Log(logDomain, lv, GWEN_Buffer_GetStart(mbuf)); GWEN_Buffer_free(mbuf); } void GWEN_Text_CondenseBuffer(GWEN_BUFFER *buf) { const char *p; char *dst; unsigned int size; unsigned int i; int lastWasBlank; char *lastBlankPos; dst=GWEN_Buffer_GetStart(buf); p=dst; size=GWEN_Buffer_GetUsedBytes(buf); lastWasBlank=0; lastBlankPos=0; for (i=0; i=sizeof(numbuf)) return -1; GWEN_Buffer_AppendString(buf, numbuf); return 0; } int GWEN_Text_StringToDouble(const char *s, double *num) { int rv; #ifdef HAVE_SETLOCALE const char *orig_locale = setlocale(LC_NUMERIC, NULL); char *currentLocale = strdup(orig_locale ? orig_locale : "C"); setlocale(LC_NUMERIC,"C"); #endif rv=sscanf(s, "%lf", num); #ifdef HAVE_SETLOCALE setlocale(LC_NUMERIC, currentLocale); free(currentLocale); #endif if (rv!=1) return -1; return 0; } double GWEN_Text__CheckSimilarity(const char *s1, const char *s2, int ign) { int nboth; int nmatch; double pc; nboth=strlen(s1)+strlen(s2); nmatch=0; if (ign) { while(*s1 && *s2) { const char *t; int lmatch; /* find next equal in s2 */ t=s2; lmatch=0; while(*t) { if (toupper(*s1)==toupper(*t)) { lmatch=2; break; } if (isalnum((int)*s1) && isalnum((int)*t)) { lmatch=1; break; } t++; } /* while */ if (lmatch) { nmatch+=lmatch; s2=t+1; } s1++; } /* while */ } else { while(*s1 && *s2) { const char *t; int lmatch; /* find next equal in s2 */ t=s2; lmatch=0; while(*t) { if (*s1==*t) { lmatch=2; break; } if (toupper(*s1)==toupper(*t)) { lmatch=1; break; } if (isalnum((int)*s1) && isalnum((int)*t)) { lmatch=1; break; } t++; } /* while */ if (lmatch) { nmatch+=lmatch; s2=t+1; } s1++; } /* while */ } pc=(nmatch*100)/nboth; return pc; } double GWEN_Text_CheckSimilarity(const char *s1, const char *s2, int ign) { double pc1, pc2; pc1=GWEN_Text__CheckSimilarity(s1, s2, ign); pc2=GWEN_Text__CheckSimilarity(s2, s1, ign); if (pc2>pc1) return pc2; return pc1; } int GWEN_Text_CountUtf8Chars(const char *s, int len) { int count; int handled; if (len==0) len=strlen(s); count=0; handled=0; while(handledlen) { DBG_ERROR(GWEN_LOGDOMAIN, "Incomplete UTF8 sequence at pos %d", handled); return -1; } s++; if (i) { int j; for (j=0; jreplace) { int l; l=strlen(e->replace); if (strncasecmp(src, e->replace, l)==0) { GWEN_TEXT__APPENDCHAR(e->character); //GWEN_Buffer_AppendByte(buf, e->character); src+=l; match=1; break; } e++; } /* while */ } } if (!match) { GWEN_TEXT__APPENDCHAR(*(src++)); } } /* while */ if (bytesAdded) { GWEN_Buffer_IncrementPos(buf, bytesAdded); GWEN_Buffer_AdjustUsedBytes(buf); } return 0; #undef GWEN_TEXT__APPENDCHAR } int GWEN_Text_EscapeXmlToBuffer(const char *src, GWEN_BUFFER *buf) { while(*src) { unsigned char x; const GWEN_TEXT_ESCAPE_ENTRY *e; int match; match=0; x=(unsigned char)*src; e=gwen_text__xml_escape_chars; while(e->replace) { if (x==e->character) { GWEN_Buffer_AppendString(buf, e->replace); match=1; break; } e++; } /* while */ if (!match) { if (0 && x>127) { /* disabled */ char numbuf[32]; snprintf(numbuf, sizeof(numbuf), "&#%d;", x); GWEN_Buffer_AppendString(buf, numbuf); } else GWEN_Buffer_AppendByte(buf, *src); } src++; } /* while */ return 0; } int GWEN_Text_ConvertCharset(const char *fromCharset, const char *toCharset, const char *text, int len, GWEN_BUFFER *tbuf) { if (len) { if (fromCharset && *fromCharset && toCharset && *toCharset && strcasecmp(fromCharset, toCharset)!=0) { #ifndef HAVE_ICONV DBG_INFO(GWEN_LOGDOMAIN, "iconv not available, can not convert from \"%s\" to \"%s\"", fromCharset, toCharset); #else iconv_t ic; ic=iconv_open(toCharset, fromCharset); if (ic==((iconv_t)-1)) { DBG_ERROR(GWEN_LOGDOMAIN, "Charset \"%s\" or \"%s\" not available", fromCharset, toCharset); } else { char *outbuf; char *pOutbuf; /* Some systems have iconv in libc, some have it in libiconv (OSF/1 and those with the standalone portable GNU libiconv installed). Check which one is available. The define ICONV_CONST will be "" or "const" accordingly. */ ICONV_CONST char *pInbuf; size_t inLeft; size_t outLeft; size_t done; size_t space; /* convert */ pInbuf=(char*)text; outLeft=len*2; space=outLeft; outbuf=(char*)malloc(outLeft); assert(outbuf); inLeft=len; pInbuf=(char*)text; pOutbuf=outbuf; done=iconv(ic, &pInbuf, &inLeft, &pOutbuf, &outLeft); if (done==(size_t)-1) { DBG_ERROR(GWEN_LOGDOMAIN, "Error in conversion: %s (%d)", strerror(errno), errno); free(outbuf); iconv_close(ic); return GWEN_ERROR_GENERIC; } GWEN_Buffer_AppendBytes(tbuf, outbuf, space-outLeft); free(outbuf); DBG_DEBUG(GWEN_LOGDOMAIN, "Conversion done."); iconv_close(ic); return 0; } #endif } GWEN_Buffer_AppendBytes(tbuf, text, len); } return 0; } gwenhywfar-4.15.2beta/src/parser/xml_l.h0000644000175000017500000000522212416477066015126 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sat Jun 28 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_XML_L_H #define GWENHYWFAR_XML_L_H #include #include /** The type of a property of a tag (in XML notation this would be called the attribute of an element). */ typedef struct GWEN__XMLPROPERTY GWEN_XMLPROPERTY; GWEN_XMLPROPERTY *GWEN_XMLNode_GetFirstProperty(const GWEN_XMLNODE *n); GWEN_XMLPROPERTY *GWEN_XMLNode_GetNextProperty(const GWEN_XMLNODE *n, const GWEN_XMLPROPERTY *pr); const char *GWEN_XMLProperty_GetName(const GWEN_XMLPROPERTY *pr); const char *GWEN_XMLProperty_GetValue(const GWEN_XMLPROPERTY *pr); int GWEN_XML_AddNameSpace(GWEN_STRINGLIST2 *sl, const char *prefix, const char *name); const char *GWEN_XML_FindNameSpaceByPrefix(GWEN_STRINGLIST2 *sl, const char *s); const char *GWEN_XML_FindNameSpaceByName(GWEN_STRINGLIST2 *sl, const char *s); const char *GWEN_XML_FindNameSpace(GWEN_STRINGLIST2 *sl, const char *prefix, const char *name); #endif gwenhywfar-4.15.2beta/src/parser/dbio.h0000644000175000017500000001336412416477066014736 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Wed Mar 31 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /** @file dbio.h * @short This file provides the GWEN DB import/export framework. */ #ifndef GWENHYWFAR_DBIO_H #define GWENHYWFAR_DBIO_H #include #include #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_DBIO GWEN_DBIO; #ifdef __cplusplus } #endif #define GWEN_DBIO_PLUGIN_NAME "dbio" /** * name of the folder below Gwen's PLUGIN folder which holds DBIO plugins */ #define GWEN_DBIO_FOLDER "dbio" #include #include #include #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_DBIO, GWEN_DBIO, GWENHYWFAR_API) GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_DBIO, GWENHYWFAR_API) /* No trailing semicolon here because this is a macro call */ typedef enum { GWEN_DBIO_CheckFileResultOk=0, GWEN_DBIO_CheckFileResultNotOk, GWEN_DBIO_CheckFileResultUnknown } GWEN_DBIO_CHECKFILE_RESULT; /** @name GWEN_DBIO plugins * */ /*@{*/ typedef GWEN_DBIO* (*GWEN_DBIO_PLUGIN_FACTORYFN)(GWEN_PLUGIN *pl); GWENHYWFAR_API GWEN_DBIO *GWEN_DBIO_Plugin_Factory(GWEN_PLUGIN *pl); /*@}*/ /** @name Functions To Be Used By Applications * */ /*@{*/ /** * Reads data from the given io layer and stores the data read * into the given DB. The stream represented by the buffered io is expected * to have the format for this particular GWEN_DBIO. */ GWENHYWFAR_API int GWEN_DBIO_Import(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *db, GWEN_DB_NODE *params, uint32_t flags); GWENHYWFAR_API int GWEN_DBIO_ImportFromFile(GWEN_DBIO *dbio, const char *fname, GWEN_DB_NODE *db, GWEN_DB_NODE *params, uint32_t flags); /** * Writes data to the given GWEN_BUFFEREDIO in the format of this particular * GWEN_DBIO. */ GWENHYWFAR_API int GWEN_DBIO_Export(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *db, GWEN_DB_NODE *params, uint32_t flags); GWENHYWFAR_API int GWEN_DBIO_ExportToFile(GWEN_DBIO *dbio, const char *fname, GWEN_DB_NODE *db, GWEN_DB_NODE *params, uint32_t flags); GWENHYWFAR_API int GWEN_DBIO_ExportToBuffer(GWEN_DBIO *dbio, GWEN_BUFFER *buf, GWEN_DB_NODE *db, GWEN_DB_NODE *params, uint32_t flags); /** * Checks whether the given file is supported by the given DBIO. */ GWENHYWFAR_API GWEN_DBIO_CHECKFILE_RESULT GWEN_DBIO_CheckFile(GWEN_DBIO *dbio, const char *fname); /** * Releases the ressources associated with the given GWEN_DBIO if the usage * counter reaches zero. */ GWENHYWFAR_API void GWEN_DBIO_free(GWEN_DBIO *dbio); /** * Increments the internal usage counter. This counter is decremented * upon @ref GWEN_DBIO_free. */ GWENHYWFAR_API void GWEN_DBIO_Attach(GWEN_DBIO *dbio); /** * Returns the name of a GWEN_DBIO. */ GWENHYWFAR_API const char *GWEN_DBIO_GetName(const GWEN_DBIO *dbio); /** * Returns a descriptive text about this particular GWEN_DBIO. */ GWENHYWFAR_API const char *GWEN_DBIO_GetDescription(const GWEN_DBIO *dbio); /*@}*/ /** @name Functions To Be Used By Administration Functions * * Functions in this group are to be used for administration purposes * only. */ /*@{*/ /** * This function creates a GWEN_DBIO of the given name. It therefore loads * the appropriate plugin if necessary. * The caller becomes the owner of the object returned, so he/she is * responsible for freeing it (Note: Previous version kept the ownership * so that the caller was not allowed to free the object. This has changed). */ GWENHYWFAR_API GWEN_DBIO *GWEN_DBIO_GetPlugin(const char *modname); /*@}*/ #ifdef __cplusplus } #endif #endif /* GWENHYWFAR_DBIO_H */ gwenhywfar-4.15.2beta/src/parser/tlv.h0000644000175000017500000000615012416477066014621 00000000000000/*************************************************************************** begin : Sun Jun 13 2004 copyright : (C) 2004-2011 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWENHYWFAR_TLV_H #define GWENHYWFAR_TLV_H #include #include typedef struct GWEN_TLV GWEN_TLV; GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_TLV, GWEN_TLV, GWENHYWFAR_API) GWENHYWFAR_API GWEN_TLV *GWEN_TLV_new(void); GWENHYWFAR_API void GWEN_TLV_free(GWEN_TLV *tlv); GWENHYWFAR_API GWEN_TLV *GWEN_TLV_create(unsigned int tagType, unsigned int tagMode, const void *p, unsigned int dlen, int isBerTlv); GWENHYWFAR_API GWEN_TLV *GWEN_TLV_fromBuffer(GWEN_BUFFER *mbuf, int isBerTlv); GWENHYWFAR_API int GWEN_TLV_toBuffer(GWEN_TLV *tlv, GWEN_BUFFER *mbuf); GWENHYWFAR_API int GWEN_TLV_DirectlyToBuffer(unsigned int tagType, unsigned int tagMode, const void *tagData, int tagLength, int isBerTlv, GWEN_BUFFER *mbuf); GWENHYWFAR_API int GWEN_TLV_IsBerTlv(const GWEN_TLV *tlv); GWENHYWFAR_API unsigned int GWEN_TLV_GetTagType(const GWEN_TLV *tlv); GWENHYWFAR_API unsigned int GWEN_TLV_GetTagLength(const GWEN_TLV *tlv); GWENHYWFAR_API const void *GWEN_TLV_GetTagData(const GWEN_TLV *tlv); GWENHYWFAR_API int GWEN_TLV_IsContructed(const GWEN_TLV *tlv); GWENHYWFAR_API unsigned int GWEN_TLV_GetClass(const GWEN_TLV *tlv); GWENHYWFAR_API unsigned int GWEN_TLV_GetTagSize(const GWEN_TLV *tlv); /** * Reads a TLV header from a buffer (tag and length) and returns the number of bytes * used by the header. * @return number of bytes used to specify tag and length (i.e. TLV size without the data part) * @param tlv TLV to read the header into * @param p pointer to a buffer containing at least the header * @param size siez of the buffer pointed to by @b p * @param isBerTlv if !=0 then the TLV is supposed to be a BER-TLV object */ GWENHYWFAR_API int GWEN_TLV_ReadHeader(GWEN_TLV *tlv, const uint8_t *p, uint32_t size, int isBerTlv); /** * Directly writes a TLV header (tag and length) to the given buffer. * @return 0 if ok, error code otherwise * @param tagType tag id * @param tagMode bits 5, 6 and 7 of the first TLV byte (bits 6/7: class, bit 5: constructed) * @param tagLength length of the data part introduced by the TLV header * @param isBerTlv if !=0 then the TLV is supposed to be a BER-TLV object * @param mbuf buffer to receive the TLV header */ GWENHYWFAR_API int GWEN_TLV_WriteHeader(unsigned int tagType, unsigned int tagMode, uint64_t tagLength, int isBerTlv, GWEN_BUFFER *mbuf); #endif /* GWENHYWFAR_TLV_H */ gwenhywfar-4.15.2beta/src/parser/urlfns.c0000644000175000017500000002170012416477066015316 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Fri May 07 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "url_p.h" #include "urlfns.h" #include #include // for isalpha() GWEN_URL *GWEN_Url_fromString(const char *str) { GWEN_URL *url; GWEN_DB_NODE *dbVars; const char *s; const char *p; int starts_with_drive_letter = 0; url=GWEN_Url_new(); dbVars=GWEN_DB_Group_new("vars"); GWEN_Url_SetVars(url, dbVars); GWEN_DB_Group_free(dbVars); dbVars=0; s=str; /* Check for a drive letter, which occurs on windows, but this will always be one single alpha character followed by a colon followed by a directory separator. */ if (s && isalpha(s[0]) && s[1] == ':' && (s[2] == '/' || s[2] == '\\')) { starts_with_drive_letter = 1; } /* read protocol (if any) */ p = starts_with_drive_letter ? s : strchr(s, ':'); if (p) { if (p[1]=='/' && p[2]=='/') { char *buf; /* got protocol settings */ buf=(char*)malloc(p-s+1); assert(buf); memmove(buf, s, p-s+1); buf[p-s]=0; GWEN_Url_SetProtocol(url, buf); free(buf); s=p+3; } } if (!*s) { DBG_ERROR(GWEN_LOGDOMAIN, "No server or path given in url \"%s\"", str); GWEN_Url_free(url); return 0; } /* read user/password */ p=strchr(s, '@'); if (p) { char *upw; char *pw; char *pat; upw=(char*)malloc(p-s+1); assert(upw); memmove(upw, s, p-s); upw[p-s]=0; pw=strchr(upw, ':'); if (pw) { /* there is also a password */ *pw=0; pw++; } pat=strchr(upw, '%'); if (pat) *pat='@'; GWEN_Url_SetUserName(url, upw); if (pw) GWEN_Url_SetPassword(url, pw); free(upw); s=p+1; } /* Do we now have a drive letter? (After the protocol?) */ if (!starts_with_drive_letter && s && isalpha(s[0]) && s[1] == ':' && (s[2] == '/' || s[2] == '\\')) { starts_with_drive_letter = 1; } /* read server */ if (!*s) { DBG_ERROR(GWEN_LOGDOMAIN, "No server given in url \"%s\"", str); GWEN_Url_free(url); return 0; } p=s; while(!starts_with_drive_letter && *p && *p!=':' && *p!='/' && *p!='?') p++; if (p!=s) { char *buf; /* got server */ buf=(char*)malloc(p-s+1); assert(buf); memmove(buf, s, p-s+1); buf[p-s]=0; GWEN_Url_SetServer(url, buf); DBG_DEBUG(GWEN_LOGDOMAIN, "Server: [%s]", buf); free(buf); s=p; } /* get port */ if (*s==':') { p=++s; while(*p && *p!='?' && *p!='/') p++; if (p!=s) { char *buf; int port; /* got port */ buf=(char*)malloc(p-s+1); assert(buf); memmove(buf, s, p-s+1); buf[p-s]=0; if (sscanf(buf, "%d", &port)!=1) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad port (%s) in url \"%s\"", buf, str); free(buf); GWEN_Url_free(url); return 0; } url->port=port; free(buf); s=p; } } else { if (url->protocol) { if (strcasecmp(url->protocol, "http")==0) url->port=80; else if (strcasecmp(url->protocol, "https")==0) url->port=443; } } /* get path */ if (starts_with_drive_letter || *s=='/') { p=s; while(*p && *p!='?') p++; if (p!=s) { char *buf; /* got path */ buf=(char*)malloc(p-s+1); assert(buf); memmove(buf, s, p-s+1); buf[p-s]=0; GWEN_Url_SetPath(url, buf); DBG_DEBUG(GWEN_LOGDOMAIN, "Path: [%s]", buf); free(buf); s=p; } } else { GWEN_Url_SetPath(url, "/"); if (*s) s++; } /* read vars */ while(*s && *s=='?') { GWEN_BUFFER *bName; GWEN_BUFFER *bValue; bName=GWEN_Buffer_new(0, 256, 0, 1); bValue=GWEN_Buffer_new(0, 256, 0, 1); s++; p=s; while(*p && *p!='?' && *p!='=') p++; if (p!=s) GWEN_Buffer_AppendBytes(bName, s, (p-s)); s=p; if (*p=='=') { s++; p=s; while(*p && *p!='?') p++; if (p!=s) GWEN_Buffer_AppendBytes(bValue, s, (p-s)); s=p; } /* store variable/value pair */ if (GWEN_Buffer_GetUsedBytes(bName)) GWEN_DB_SetCharValue(GWEN_Url_GetVars(url), GWEN_DB_FLAGS_DEFAULT, GWEN_Buffer_GetStart(bName), GWEN_Buffer_GetStart(bValue)); GWEN_Buffer_free(bValue); GWEN_Buffer_free(bName); } url->url=strdup(str); url->_modified=0; return url; } int GWEN_Url_toString(const GWEN_URL *url, GWEN_BUFFER *buf) { assert(url); if (!url->_modified && !(url->url==0 || url->url[0]==0)) { GWEN_Buffer_AppendString(buf, url->url); } else { GWEN_DB_NODE *dbV; if (url->protocol) { GWEN_Buffer_AppendString(buf, url->protocol); GWEN_Buffer_AppendString(buf, "://"); } if (url->server) { GWEN_Buffer_AppendString(buf, url->server); } if (url->port) { char numbuf[32]; snprintf(numbuf, sizeof(numbuf), "%d", url->port); GWEN_Buffer_AppendString(buf, ":"); GWEN_Buffer_AppendString(buf, numbuf); } if (url->path) { GWEN_Buffer_AppendString(buf, url->path); } if (url->vars) { dbV=GWEN_DB_GetFirstVar(url->vars); while(dbV) { const char *s; s=GWEN_DB_VariableName(dbV); if (s) { GWEN_DB_NODE *dbVal; GWEN_Buffer_AppendString(buf, "?"); GWEN_Buffer_AppendString(buf, s); dbVal=GWEN_DB_GetFirstValue(dbV); if (dbVal) { s=GWEN_DB_GetCharValueFromNode(dbVal); if (s) { GWEN_Buffer_AppendString(buf, "="); GWEN_Buffer_AppendString(buf, s); } } } dbV=GWEN_DB_GetNextVar(dbV); } /* while */ } } return 0; } void GWEN_Url_toUiShortString(const GWEN_URL *url, GWEN_BUFFER *buf) { assert(url); if (url->protocol) { GWEN_Buffer_AppendString(buf, url->protocol); GWEN_Buffer_AppendString(buf, "://"); } if (url->server) { GWEN_Buffer_AppendString(buf, url->server); } if (url->port) { char numbuf[32]; snprintf(numbuf, sizeof(numbuf), "%d", url->port); GWEN_Buffer_AppendString(buf, ":"); GWEN_Buffer_AppendString(buf, numbuf); } if (url->path) { GWEN_Buffer_AppendString(buf, url->path); } } GWEN_URL *GWEN_Url_fromCommandString(const char *str) { GWEN_URL *url; GWEN_DB_NODE *dbVars; const char *s; const char *p; url=GWEN_Url_new(); dbVars=GWEN_DB_Group_new("vars"); GWEN_Url_SetVars(url, dbVars); GWEN_DB_Group_free(dbVars); dbVars=0; s=str; /* get path */ if (*s=='/') { p=s; while(*p && *p!='?') p++; if (p!=s) { char *buf; /* got path */ buf=(char*)malloc(p-s+1); assert(buf); memmove(buf, s, p-s+1); buf[p-s]=0; GWEN_Url_SetPath(url, buf); free(buf); s=p; } } else { GWEN_Url_SetPath(url, "/"); if (*s) s++; } /* read vars */ while(*s && *s=='?') { GWEN_BUFFER *bName; GWEN_BUFFER *bValue; bName=GWEN_Buffer_new(0, 256, 0, 1); bValue=GWEN_Buffer_new(0, 256, 0, 1); s++; p=s; while(*p && *p!='?' && *p!='=') p++; if (p!=s) GWEN_Buffer_AppendBytes(bName, s, (p-s)); s=p; if (*p=='=') { s++; p=s; while(*p && *p!='?') p++; if (p!=s) GWEN_Buffer_AppendBytes(bValue, s, (p-s)); s=p; } /* store variable/value pair */ if (GWEN_Buffer_GetUsedBytes(bName)) GWEN_DB_SetCharValue(GWEN_Url_GetVars(url), GWEN_DB_FLAGS_DEFAULT, GWEN_Buffer_GetStart(bName), GWEN_Buffer_GetStart(bValue)); GWEN_Buffer_free(bValue); GWEN_Buffer_free(bName); } url->url=strdup(str); return url; } int GWEN_Url_toCommandString(const GWEN_URL *url, GWEN_BUFFER *buf) { GWEN_DB_NODE *dbV; assert(url); if (url->path) { GWEN_Buffer_AppendString(buf, url->path); } if (url->vars) { dbV=GWEN_DB_GetFirstVar(url->vars); while(dbV) { const char *s; s=GWEN_DB_VariableName(dbV); if (s) { GWEN_DB_NODE *dbVal; GWEN_Buffer_AppendString(buf, "?"); GWEN_Buffer_AppendString(buf, s); dbVal=GWEN_DB_GetFirstValue(dbV); if (dbVal) { s=GWEN_DB_GetCharValueFromNode(dbVal); if (s) { GWEN_Buffer_AppendString(buf, "="); GWEN_Buffer_AppendString(buf, s); } } } dbV=GWEN_DB_GetNextVar(dbV); } } return 0; } gwenhywfar-4.15.2beta/src/parser/db_p.h0000644000175000017500000001142512416477066014721 00000000000000/*************************************************************************** begin : Tue Sep 09 2003 copyright : (C) 2003-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_DB_P_H #define GWENHYWFAR_DB_P_H #include #include #include GWEN_LIST_FUNCTION_DEFS(GWEN_DB_NODE, GWEN_DB_Node) typedef union GWEN_DB_NODE_VALUE_UNION GWEN_DB_NODE_VALUE_UNION; union GWEN_DB_NODE_VALUE_UNION { char *dataName; char *dataChar; void *dataBin; int dataInt; void *dataPtr; }; struct GWEN_DB_NODE { GWEN_LIST_ELEMENT(GWEN_DB_NODE) GWEN_DB_NODE *parent; GWEN_DB_NODE_LIST *children; GWEN_DB_NODE_TYPE typ; uint32_t nodeFlags; GWEN_DB_NODE_VALUE_UNION data; uint32_t dataSize; }; static GWEN_DB_NODE *GWEN_DB_Node_new(GWEN_DB_NODE_TYPE t); static void GWEN_DB_Node_free(GWEN_DB_NODE *n); static GWEN_DB_NODE *GWEN_DB_ValueBin_new(const void *data, unsigned int datasize); static GWEN_DB_NODE *GWEN_DB_ValueInt_new(int data); static GWEN_DB_NODE *GWEN_DB_ValueChar_new(const char *data); static GWEN_DB_NODE *GWEN_DB_ValuePtr_new(void *data); static GWEN_DB_NODE *GWEN_DB_Var_new(const char *name); static GWEN_DB_NODE *GWEN_DB_Node_dup(const GWEN_DB_NODE *n); static void GWEN_DB_Node_Append(GWEN_DB_NODE *parent, GWEN_DB_NODE *n); static void GWEN_DB_Node_Insert(GWEN_DB_NODE *parent, GWEN_DB_NODE *n); static void GWEN_DB_Node_Unlink(GWEN_DB_NODE *n); /** * Used with GWEN_Path */ static void *GWEN_DB_HandlePath(const char *entry, void *data, int idx, uint32_t flags); static GWEN_DB_NODE *GWEN_DB_FindGroup(GWEN_DB_NODE *n, const char *name, int idx); static GWEN_DB_NODE *GWEN_DB_FindVar(GWEN_DB_NODE *n, const char *name, int idx); static GWEN_DB_NODE *GWEN_DB_GetNode(GWEN_DB_NODE *n, const char *path, uint32_t flags); static GWEN_DB_NODE *GWEN_DB_GetValue(GWEN_DB_NODE *n, const char *path, int idx); static void GWEN_DB_ClearNode(GWEN_DB_NODE *n); static void *GWEN_DB_count_cb(GWEN_DB_NODE *node, void *user_data); static void GWEN_DB_Node_Append_UnDirty(GWEN_DB_NODE *parent, GWEN_DB_NODE *n); static void GWEN_DB_Node_InsertUnDirty(GWEN_DB_NODE *parent, GWEN_DB_NODE *n); static void GWEN_DB_Node_Unlink_UnDirty(GWEN_DB_NODE *n); static int GWEN_DB__ReadValues(GWEN_DB_NODE *n, uint32_t dbflags, const char *typeName, const char *varName, uint8_t *p); static int GWEN_DB_WriteGroupToIoLayer(GWEN_DB_NODE *node, GWEN_FAST_BUFFER *fb, uint32_t dbflags, int insert); static int GWEN_DB_EscapeToBufferTolerant(const char *src, GWEN_BUFFER *buf); static int GWEN_DB_UnescapeToBufferTolerant(const char *src, GWEN_BUFFER *buf); #endif gwenhywfar-4.15.2beta/src/parser/xsdnode_l.h0000644000175000017500000000427012416477066015774 00000000000000/*************************************************************************** begin : Wed Feb 27 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_XSDNODE_L_H #define GWENHYWFAR_XSDNODE_L_H #include typedef int (*GWEN_XSDNODE_READ_FN)(GWEN_XSD_NODE *xsdNode, GWEN_XMLNODE *xmlNode, GWEN_DB_NODE *db); typedef int (*GWEN_XSDNODE_WRITE_FN)(GWEN_XSD_NODE *xsdNode, GWEN_XMLNODE *xmlNode, GWEN_DB_NODE *db); GWEN_XSDNODE_READ_FN GWEN_XsdNode_SetReadFn(GWEN_XSD_NODE *xsdNode, GWEN_XSDNODE_READ_FN fn); GWEN_XSDNODE_WRITE_FN GWEN_XsdNode_SetWriteFn(GWEN_XSD_NODE *xsdNode, GWEN_XSDNODE_WRITE_FN fn); #endif gwenhywfar-4.15.2beta/src/parser/path.c0000644000175000017500000002717712416477066014757 00000000000000/*************************************************************************** begin : Tue Sep 09 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "path.h" #include "gwenhywfar/debug.h" #include "gwenhywfar/misc.h" #include "gwenhywfar/text.h" #include void *GWEN_Path_Handle(const char *path, void *data, uint32_t flags, GWEN_PATHHANDLERPTR elementFunction) { GWEN_BUFFER *buf1; unsigned int origflags; int startAtRoot; origflags=flags; buf1=GWEN_Buffer_new(0, 128, 0, 1); /* skip leading blanks */ while (*path && isspace((int)*path)) path++; /* skip leading slashes */ startAtRoot=0; while (*path && (*path=='/' || *path=='\\')) { if (origflags & GWEN_PATH_FLAGS_CHECKROOT) startAtRoot=1; path++; } /* while */ while (*path) { GWEN_Buffer_Reset(buf1); flags=origflags & ~GWEN_PATH_FLAGS_INTERNAL & ~GWEN_PATH_FLAGS_VARIABLE; /* copy element into buffer */ if (startAtRoot) { GWEN_Buffer_AppendByte(buf1, '/'); flags|=GWEN_PATH_FLAGS_ROOT; } while (*path && !(*path=='/' || *path=='\\')) GWEN_Buffer_AppendByte(buf1, *(path++)); /* check for group or entry */ if (*path) { /* skip slashes */ path++; while (*path && (*path=='/' || *path=='\\')) path++; /* check if delimiter is followed by #0 */ if (!*path) { /* it is so do some more tests */ if (origflags & GWEN_PATH_FLAGS_VARIABLE) { /* a trailing slash indicates that the current entry is * supposed to be a group. If the flags indicate that an entry * is to be found then this would be an error, because the path * ends in a group instead of an entry */ DBG_DEBUG(GWEN_LOGDOMAIN, "Path ends with a group while an entry is wanted"); return 0; } /* other wise simply mark this element as the last one */ flags|=GWEN_PATH_FLAGS_LAST; } } /* if *path */ else { /* path ends here with #0 */ flags|=GWEN_PATH_FLAGS_LAST; if (origflags & GWEN_PATH_FLAGS_VARIABLE) { /* path ends with #0, caller wants a variable so this * last element is one */ flags|=GWEN_PATH_FLAGS_VARIABLE; } } /* escape or unescape if wanted */ if (!(flags & GWEN_PATH_FLAGS_LAST) || ((flags & GWEN_PATH_FLAGS_LAST) && (flags & GWEN_PATH_FLAGS_CONVERT_LAST))) { if (flags & GWEN_PATH_FLAGS_ESCAPE) { GWEN_BUFFER *buf2; const char *p; int rv; buf2=GWEN_Buffer_new(0, 64, 0, 1); GWEN_Buffer_SetStep(buf2, 128); p=GWEN_Buffer_GetStart(buf1); if (startAtRoot) { p++; GWEN_Buffer_AppendByte(buf2, '/'); } if (flags & GWEN_PATH_FLAGS_TOLERANT_ESCAPE) rv=GWEN_Text_EscapeToBufferTolerant(p, buf2); else rv=GWEN_Text_EscapeToBuffer(p, buf2); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not escape path element"); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); return 0; } GWEN_Buffer_free(buf1); buf1=buf2; } else if (flags & GWEN_PATH_FLAGS_UNESCAPE) { GWEN_BUFFER *buf2; const char *p; int rv; buf2=GWEN_Buffer_new(0, 64, 0, 1); GWEN_Buffer_SetStep(buf2, 128); p=GWEN_Buffer_GetStart(buf1); if (startAtRoot) { p++; GWEN_Buffer_AppendByte(buf2, '/'); } if (flags & GWEN_PATH_FLAGS_TOLERANT_ESCAPE) rv=GWEN_Text_UnescapeToBufferTolerant(p, buf2); else rv=GWEN_Text_UnescapeToBuffer(p, buf2); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not unescape path element"); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); return 0; } GWEN_Buffer_free(buf1); buf1=buf2; } } /* call function */ if (elementFunction) { data=(elementFunction)(GWEN_Buffer_GetStart(buf1), data, flags); if (!data) { DBG_DEBUG(GWEN_LOGDOMAIN, "Error on path element \"%s\"", GWEN_Buffer_GetStart(buf1)); GWEN_Buffer_free(buf1); return 0; } } DBG_DEBUG(GWEN_LOGDOMAIN, "Successfully handled element \"%s\"", GWEN_Buffer_GetStart(buf1)); if (startAtRoot) startAtRoot=0; } /* while (*path) */ GWEN_Buffer_free(buf1); return data; } void *GWEN_Path_HandleWithIdx(const char *path, void *data, uint32_t flags, GWEN_PATHIDXHANDLERPTR elementFunction) { GWEN_BUFFER *buf1; unsigned int origflags; int startAtRoot; origflags=flags; buf1=GWEN_Buffer_new(0, 128, 0, 1); /* skip leading blanks */ while (*path && isspace((int)*path)) path++; /* skip leading slashes */ startAtRoot=0; while (*path && (*path=='/' || *path=='\\')) { if (origflags & GWEN_PATH_FLAGS_CHECKROOT) startAtRoot=1; path++; } /* while */ while (*path) { char *p; int idx; idx=0; GWEN_Buffer_Reset(buf1); flags=origflags & ~GWEN_PATH_FLAGS_INTERNAL & ~GWEN_PATH_FLAGS_VARIABLE; /* copy element into buffer */ if (startAtRoot) { GWEN_Buffer_AppendByte(buf1, '/'); flags|=GWEN_PATH_FLAGS_ROOT; } while (*path && !(*path=='/' || *path=='\\')) GWEN_Buffer_AppendByte(buf1, *(path++)); /* now buffer contains the element, check for index */ if (!(flags & GWEN_PATH_FLAGS_NO_IDX)) { p=strchr(GWEN_Buffer_GetStart(buf1), '['); if (p) { char *p2; int x; *p=0; p++; p2=strchr(p, ']'); if (!p2) { DBG_ERROR(GWEN_LOGDOMAIN, "Closing bracket missing"); GWEN_Buffer_free(buf1); return 0; } *p2=0; if (sscanf(p, "%d", &x)!=1) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad or missing index in element (%s)", p); GWEN_Buffer_free(buf1); return 0; } idx=x; } } /* check for group or entry */ if (*path) { /* skip slashes */ path++; while (*path && (*path=='/' || *path=='\\')) path++; /* check if delimiter is followed by #0 */ if (!*path) { /* it is so do some more tests */ if (origflags & GWEN_PATH_FLAGS_VARIABLE) { /* a trailing slash indicates that the current entry is * supposed to be a group. If the flags indicate that an entry * is to be found then this would be an error, because the path * ends in a group instead of an entry */ DBG_DEBUG(GWEN_LOGDOMAIN, "Path ends with a group while an entry is wanted"); return 0; } /* other wise simply mark this element as the last one */ flags|=GWEN_PATH_FLAGS_LAST; } } /* if *path */ else { /* path ends here with #0 */ flags|=GWEN_PATH_FLAGS_LAST; if (origflags & GWEN_PATH_FLAGS_VARIABLE) { /* path ends with #0, caller wants a variable so this * last element is one */ flags|=GWEN_PATH_FLAGS_VARIABLE; } } /* escape or unescape if wanted */ if (!(flags & GWEN_PATH_FLAGS_LAST) || ((flags & GWEN_PATH_FLAGS_LAST) && (flags & GWEN_PATH_FLAGS_CONVERT_LAST))) { if (flags & GWEN_PATH_FLAGS_ESCAPE) { GWEN_BUFFER *buf2; const char *p; int rv; buf2=GWEN_Buffer_new(0, 64, 0, 1); GWEN_Buffer_SetStep(buf2, 128); p=GWEN_Buffer_GetStart(buf1); if (startAtRoot) { p++; GWEN_Buffer_AppendByte(buf2, '/'); } if (flags & GWEN_PATH_FLAGS_TOLERANT_ESCAPE) rv=GWEN_Text_EscapeToBufferTolerant(p, buf2); else rv=GWEN_Text_EscapeToBuffer(p, buf2); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not escape path element"); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); return 0; } GWEN_Buffer_free(buf1); buf1=buf2; } else if (flags & GWEN_PATH_FLAGS_UNESCAPE) { GWEN_BUFFER *buf2; const char *p; int rv; buf2=GWEN_Buffer_new(0, 64, 0, 1); GWEN_Buffer_SetStep(buf2, 128); p=GWEN_Buffer_GetStart(buf1); if (startAtRoot) { p++; GWEN_Buffer_AppendByte(buf2, '/'); } if (flags & GWEN_PATH_FLAGS_TOLERANT_ESCAPE) rv=GWEN_Text_UnescapeToBufferTolerant(p, buf2); else rv=GWEN_Text_UnescapeToBuffer(p, buf2); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not unescape path element"); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); return 0; } GWEN_Buffer_free(buf1); buf1=buf2; } } /* call function */ if (elementFunction) { data=(elementFunction)(GWEN_Buffer_GetStart(buf1), data, idx, flags); if (!data) { DBG_DEBUG(GWEN_LOGDOMAIN, "Error on path element \"%s\"", GWEN_Buffer_GetStart(buf1)); GWEN_Buffer_free(buf1); return 0; } } DBG_DEBUG(GWEN_LOGDOMAIN, "Successfully handled element \"%s\"", GWEN_Buffer_GetStart(buf1)); if (startAtRoot) startAtRoot=0; } /* while (*path) */ GWEN_Buffer_free(buf1); return data; } void *GWEN_Path_AppendPathElement(const char *entry, void *data, unsigned int flags) { GWEN_BUFFER *ebuf; ebuf=(GWEN_BUFFER*)data; GWEN_Buffer_AppendString(ebuf, entry); if (!(flags & GWEN_PATH_FLAGS_LAST) || !(flags & GWEN_PATH_FLAGS_VARIABLE)) GWEN_Buffer_AppendByte(ebuf, '/'); GWEN_Buffer_AllocRoom(ebuf, 1); GWEN_Buffer_GetPosPointer(ebuf)[0]=0; return data; } int GWEN_Path_Convert(const char *path, GWEN_BUFFER *buffer, uint32_t flags) { void *p; p=GWEN_Path_Handle(path, buffer, flags, GWEN_Path_AppendPathElement); if (!p) { return -1; } return 0; } gwenhywfar-4.15.2beta/src/parser/xmlctx.h0000644000175000017500000001072212416477066015333 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: xsd.h 898 2005-11-03 09:51:39Z cstim $ begin : Sat Jun 28 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_XMLCTX_H #define GWENHYWFAR_XMLCTX_H #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_XML_CONTEXT GWEN_XML_CONTEXT; GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_XML_CONTEXT, GWENHYWFAR_API) #include typedef int (*GWEN_XMLCTX_STARTTAG_FN)(GWEN_XML_CONTEXT *ctx, const char *tagName); typedef int (*GWEN_XMLCTX_ENDTAG_FN)(GWEN_XML_CONTEXT *ctx, int closing); typedef int (*GWEN_XMLCTX_ADDDATA_FN)(GWEN_XML_CONTEXT *ctx, const char *data); typedef int (*GWEN_XMLCTX_ADDCOMMENT_FN)(GWEN_XML_CONTEXT *ctx, const char *data); typedef int (*GWEN_XMLCTX_ADDATTR_FN)(GWEN_XML_CONTEXT *ctx, const char *attrName, const char *attrData); GWENHYWFAR_API GWEN_XML_CONTEXT *GWEN_XmlCtx_new(uint32_t flags); GWENHYWFAR_API void GWEN_XmlCtx_free(GWEN_XML_CONTEXT *ctx); GWENHYWFAR_API void GWEN_XmlCtx_Attach(GWEN_XML_CONTEXT *ctx); GWENHYWFAR_API uint32_t GWEN_XmlCtx_GetFlags(const GWEN_XML_CONTEXT *ctx); GWENHYWFAR_API void GWEN_XmlCtx_SetFlags(GWEN_XML_CONTEXT *ctx, uint32_t f); GWENHYWFAR_API uint32_t GWEN_XmlCtx_GetFinishedElement(const GWEN_XML_CONTEXT *ctx); GWENHYWFAR_API void GWEN_XmlCtx_IncFinishedElement(GWEN_XML_CONTEXT *ctx); GWENHYWFAR_API void GWEN_XmlCtx_ResetFinishedElement(GWEN_XML_CONTEXT *ctx); GWENHYWFAR_API int GWEN_XmlCtx_GetDepth(const GWEN_XML_CONTEXT *ctx); GWENHYWFAR_API void GWEN_XmlCtx_SetDepth(GWEN_XML_CONTEXT *ctx, int i); GWENHYWFAR_API void GWEN_XmlCtx_IncDepth(GWEN_XML_CONTEXT *ctx); GWENHYWFAR_API int GWEN_XmlCtx_DecDepth(GWEN_XML_CONTEXT *ctx); GWENHYWFAR_API void GWEN_XmlCtx_SetCurrentNode(GWEN_XML_CONTEXT *ctx, GWEN_XMLNODE *n); GWENHYWFAR_API GWEN_XMLNODE *GWEN_XmlCtx_GetCurrentNode(const GWEN_XML_CONTEXT *ctx); GWENHYWFAR_API void GWEN_XmlCtx_SetCurrentHeader(GWEN_XML_CONTEXT *ctx, GWEN_XMLNODE *n); GWENHYWFAR_API GWEN_XMLNODE *GWEN_XmlCtx_GetCurrentHeader(const GWEN_XML_CONTEXT *ctx); GWENHYWFAR_API GWEN_XMLCTX_STARTTAG_FN GWEN_XmlCtx_SetStartTagFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_STARTTAG_FN f); GWENHYWFAR_API GWEN_XMLCTX_ENDTAG_FN GWEN_XmlCtx_SetEndTagFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_ENDTAG_FN f); GWENHYWFAR_API GWEN_XMLCTX_ADDDATA_FN GWEN_XmlCtx_SetAddDataFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_ADDDATA_FN f); GWENHYWFAR_API GWEN_XMLCTX_ADDCOMMENT_FN GWEN_XmlCtx_SetAddCommentFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_ADDCOMMENT_FN f); GWENHYWFAR_API GWEN_XMLCTX_ADDATTR_FN GWEN_XmlCtx_SetAddAttrFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_ADDATTR_FN f); GWENHYWFAR_API GWEN_XML_CONTEXT *GWEN_XmlCtxStore_new(GWEN_XMLNODE *n, uint32_t flags); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/parser/msgengine.c0000644000175000017500000033100612416477066015764 00000000000000/*************************************************************************** begin : Fri Jul 04 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include #include #include #include #include #include #include #include #include #include #include #include GWEN_INHERIT_FUNCTIONS(GWEN_MSGENGINE) GWEN_MSGENGINE *GWEN_MsgEngine_new(void) { GWEN_MSGENGINE *e; GWEN_NEW_OBJECT(GWEN_MSGENGINE, e); GWEN_INHERIT_INIT(GWEN_MSGENGINE, e); e->charsToEscape=strdup(GWEN_MSGENGINE_CHARSTOESCAPE); e->delimiters=strdup(GWEN_MSGENGINE_DEFAULT_DELIMITERS); e->globalValues=GWEN_DB_Group_new("globalvalues"); e->escapeChar='\\'; e->usage=1; return e; } void GWEN_MsgEngine_free(GWEN_MSGENGINE *e) { if (e) { assert(e->usage); if (--(e->usage)==0) { GWEN_INHERIT_FINI(GWEN_MSGENGINE, e); if (e->inheritorData && e->freeDataPtr) e->freeDataPtr(e); if (e->ownDefs) GWEN_XMLNode_free(e->defs); free(e->charsToEscape); free(e->delimiters); GWEN_DB_Group_free(e->globalValues); if (e->trustInfos) { /* free trustInfos */ GWEN_MSGENGINE_TRUSTEDDATA *td, *tdn; td=e->trustInfos; while(td) { tdn=td->next; GWEN_MsgEngine_TrustedData_free(td); td=tdn; } /* while */ } GWEN_FREE_OBJECT(e); } } } void GWEN_MsgEngine_Attach(GWEN_MSGENGINE *e) { assert(e); e->usage++; } void GWEN_MsgEngine_SetEscapeChar(GWEN_MSGENGINE *e, char c) { assert(e); e->escapeChar=c; } char GWEN_MsgEngine_GetEscapeChar(GWEN_MSGENGINE *e) { assert(e); return e->escapeChar; } void GWEN_MsgEngine_SetCharsToEscape(GWEN_MSGENGINE *e, const char *c) { assert(e); free(e->charsToEscape); e->charsToEscape=strdup(c); } const char *GWEN_MsgEngine_GetCharsToEscape(GWEN_MSGENGINE *e) { assert(e); return e->charsToEscape; } void GWEN_MsgEngine_SetDelimiters(GWEN_MSGENGINE *e, const char *s) { assert(e); free(e->delimiters); if (s) e->delimiters=strdup(s); else e->delimiters=strdup(GWEN_MSGENGINE_DEFAULT_DELIMITERS); } const char *GWEN_MsgEngine_GetDelimiters(GWEN_MSGENGINE *e) { assert(e); return e->delimiters; } void GWEN_MsgEngine_SetMode(GWEN_MSGENGINE *e, const char *mode) { GWEN_DB_NODE *db; assert(e); db=GWEN_MsgEngine__GetGlobalValues(e); if (mode) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "engine/secmode", mode); else GWEN_DB_DeleteVar(db, "engine/secmode"); } const char *GWEN_MsgEngine_GetMode(GWEN_MSGENGINE *e) { GWEN_DB_NODE *db; assert(e); db=GWEN_MsgEngine__GetGlobalValues(e); return GWEN_DB_GetCharValue(db, "engine/secmode", 0, 0); } GWEN_DB_NODE *GWEN_MsgEngine__GetGlobalValues(GWEN_MSGENGINE *e) { GWEN_DB_NODE *globalValues; assert(e); if (e->getGlobalValuesPtr) { globalValues=e->getGlobalValuesPtr(e); if (!globalValues) globalValues=e->globalValues; } else { globalValues=e->globalValues; } assert(globalValues); return globalValues; } unsigned int GWEN_MsgEngine_GetProtocolVersion(GWEN_MSGENGINE *e) { GWEN_DB_NODE *db; assert(e); db=GWEN_MsgEngine__GetGlobalValues(e); return GWEN_DB_GetIntValue(db, "engine/pversion", 0, 0); } void GWEN_MsgEngine_SetProtocolVersion(GWEN_MSGENGINE *e, unsigned int p) { GWEN_DB_NODE *db; assert(e); db=GWEN_MsgEngine__GetGlobalValues(e); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "engine/pversion", p); } GWEN_XMLNODE *GWEN_MsgEngine_GetDefinitions(GWEN_MSGENGINE *e) { assert(e); return e->defs; } void GWEN_MsgEngine_SetDefinitions(GWEN_MSGENGINE *e, GWEN_XMLNODE *n, int take) { assert(e); if (e->ownDefs) GWEN_XMLNode_free(e->defs); e->defs=n; e->ownDefs=take; } void GWEN_MsgEngine_SetGetGlobalValuesFunction(GWEN_MSGENGINE *e, GWEN_MSGENGINE_GETGLOBALVALUES_PTR p) { assert(e); e->getGlobalValuesPtr=p; } GWEN_MSGENGINE_GETGLOBALVALUES_PTR GWEN_MsgEngine_GetGetGlobalValuesFunction(GWEN_MSGENGINE *e) { assert(e); return e->getGlobalValuesPtr; } void GWEN_MsgEngine_SetTypeReadFunction(GWEN_MSGENGINE *e, GWEN_MSGENGINE_TYPEREAD_PTR p) { assert(e); e->typeReadPtr=p; } GWEN_MSGENGINE_TYPEREAD_PTR GWEN_MsgEngine_GetTypeReadFunction(GWEN_MSGENGINE *e) { assert(e); return e->typeReadPtr; } void GWEN_MsgEngine_SetTypeWriteFunction(GWEN_MSGENGINE *e, GWEN_MSGENGINE_TYPEWRITE_PTR p) { assert(e); e->typeWritePtr=p; } GWEN_MSGENGINE_TYPEWRITE_PTR GWEN_MsgEngine_GetTypeWriteFunction(GWEN_MSGENGINE *e) { assert(e); return e->typeWritePtr; } void GWEN_MsgEngine_SetTypeCheckFunction(GWEN_MSGENGINE *e, GWEN_MSGENGINE_TYPECHECK_PTR p) { assert(e); e->typeCheckPtr=p; } GWEN_MSGENGINE_TYPECHECK_PTR GWEN_MsgEngine_GetTypeCheckFunction(GWEN_MSGENGINE *e) { assert(e); return e->typeCheckPtr; } void GWEN_MsgEngine_SetBinTypeReadFunction(GWEN_MSGENGINE *e, GWEN_MSGENGINE_BINTYPEREAD_PTR p) { assert(e); e->binTypeReadPtr=p; } GWEN_MSGENGINE_BINTYPEREAD_PTR GWEN_MsgEngine_GetBinTypeReadFunction(GWEN_MSGENGINE *e) { assert(e); return e->binTypeReadPtr; } void GWEN_MsgEngine_SetBinTypeWriteFunction(GWEN_MSGENGINE *e, GWEN_MSGENGINE_BINTYPEWRITE_PTR p) { assert(e); e->binTypeWritePtr=p; } GWEN_MSGENGINE_BINTYPEWRITE_PTR GWEN_MsgEngine_GetBinTypeWriteFunction(GWEN_MSGENGINE *e) { assert(e); return e->binTypeWritePtr; } void GWEN_MsgEngine_SetGetCharValueFunction(GWEN_MSGENGINE *e, GWEN_MSGENGINE_GETCHARVALUE_PTR p) { assert(e); e->getCharValuePtr=p; } void GWEN_MsgEngine_SetGetIntValueFunction(GWEN_MSGENGINE *e, GWEN_MSGENGINE_GETINTVALUE_PTR p) { assert(e); e->getIntValuePtr=p; } void GWEN_MsgEngine_SetFreeDataFunction(GWEN_MSGENGINE *e, GWEN_MSGENGINE_FREEDATA_PTR p) { assert(e); DBG_WARN(GWEN_LOGDOMAIN, "GWEN_MsgEngine_SetFreeDataFunction: Deprecated"); e->freeDataPtr=p; } void *GWEN_MsgEngine_GetInheritorData(const GWEN_MSGENGINE *e) { assert(e); return e->inheritorData; } void GWEN_MsgEngine_SetInheritorData(GWEN_MSGENGINE *e, void *d) { assert(e); DBG_WARN(GWEN_LOGDOMAIN, "GWEN_MsgEngine_SetInheritorData: Deprecated"); if (e->inheritorData && e->freeDataPtr) e->freeDataPtr(e); e->inheritorData=d; } int GWEN_MsgEngine__WriteValue(GWEN_MSGENGINE *e, GWEN_BUFFER *gbuf, GWEN_BUFFER *data, GWEN_XMLNODE *node) { unsigned int minsize; unsigned int maxsize; unsigned int fixSize; unsigned int startPos; int filler; const char *type; const char *name; int rv; /* get some sizes */ minsize=atoi(GWEN_XMLNode_GetProperty(node, "minsize","0")); maxsize=atoi(GWEN_XMLNode_GetProperty(node, "maxsize","0")); fixSize=atoi(GWEN_XMLNode_GetProperty(node, "size","0")); filler=atoi(GWEN_XMLNode_GetProperty(node, "filler","0")); type=GWEN_XMLNode_GetProperty(node, "type","ASCII"); name=GWEN_XMLNode_GetProperty(node, "name",""); startPos=GWEN_Buffer_GetPos(gbuf); /* check sizes */ if (minsize && GWEN_Buffer_GetUsedBytes(data)maxsize) { DBG_ERROR(GWEN_LOGDOMAIN, "Data too long (maxsize is %d)", maxsize); return -1; } rv=1; if (e->typeWritePtr) { rv=e->typeWritePtr(e, gbuf, data, node); } if (rv==-1) { DBG_INFO(GWEN_LOGDOMAIN, "External type writing failed"); return -1; } else if (rv==1) { int i; /* type not handled externally, so handle it myself */ if (strcasecmp(type, "bin")==0) { DBG_DEBUG(GWEN_LOGDOMAIN, "Writing binary data (%d bytes added to %d bytes)", GWEN_Buffer_GetUsedBytes(data), GWEN_Buffer_GetUsedBytes(gbuf)); if (GWEN_Buffer_AllocRoom(gbuf, 10+GWEN_Buffer_GetUsedBytes(data))) { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small"); return -1; } sprintf(GWEN_Buffer_GetPosPointer(gbuf), "@%d@", GWEN_Buffer_GetUsedBytes(data)); i=strlen(GWEN_Buffer_GetPosPointer(gbuf)); GWEN_Buffer_IncrementPos(gbuf, i); GWEN_Buffer_AdjustUsedBytes(gbuf); GWEN_Buffer_AppendBuffer(gbuf, data); } /* if type is "bin" */ else if (strcasecmp(type, "num")==0) { //int num; unsigned int len; unsigned int lj; //num=atoi(GWEN_Buffer_GetPosPointer(data)); len=strlen(GWEN_Buffer_GetPosPointer(data)); if (atoi(GWEN_XMLNode_GetProperty(node, "leftfill","0"))) { if (GWEN_Buffer_AllocRoom(gbuf, maxsize+1)) { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small"); return -1; } /* fill left */ for (lj=0; lj<(maxsize-len); lj++) GWEN_Buffer_AppendByte(gbuf, '0'); /* write value */ for (lj=0; ljescapeChar) needsEscape=1; else { if (e->charsToEscape) if (strchr(e->charsToEscape, c)) needsEscape=1; } if (needsEscape) { /* write escape char */ if (GWEN_Buffer_AppendByte(gbuf, e->escapeChar)) { return -1; } } if (GWEN_Buffer_AppendByte(gbuf, c)) { return -1; } } p++; pcount++; } /* while */ if (pcountfixSize) { DBG_ERROR(GWEN_LOGDOMAIN, "Data too long (size is %d, fixed size is %d)", bs, fixSize); return -1; } for (j=bs; jtypeCheckPtr) { GWEN_DB_NODE_TYPE vt; vt=e->typeCheckPtr(e, type); if (vt!=GWEN_DB_NodeType_Unknown) { if (vt==GWEN_DB_NodeType_ValueChar) return 1; } } return (strcasecmp(type, "alpha")==0) || (strcasecmp(type, "ascii")==0) || (strcasecmp(type, "an")==0) || (strcasecmp(type, "float")==0); } int GWEN_MsgEngine__IsIntTyp(GWEN_MSGENGINE *e, const char *type) { if (e->typeCheckPtr) { GWEN_DB_NODE_TYPE vt; vt=e->typeCheckPtr(e, type); if (vt!=GWEN_DB_NodeType_Unknown) { if (vt==GWEN_DB_NodeType_ValueInt) return 1; } } return (strcasecmp(type, "num")==0); } int GWEN_MsgEngine__IsBinTyp(GWEN_MSGENGINE *e, const char *type) { if (e->typeCheckPtr) { GWEN_DB_NODE_TYPE vt; vt=e->typeCheckPtr(e, type); if (vt!=GWEN_DB_NodeType_Unknown) { if (vt==GWEN_DB_NodeType_ValueBin) return 1; } } return (strcasecmp(type, "bin")==0); } int GWEN_MsgEngine__GetInline(GWEN_MSGENGINE *e, GWEN_XMLNODE *node, GWEN_BUFFER *mbuf) { /* get data from within the XML node */ GWEN_XMLNODE *n; const char *type; type=GWEN_XMLNode_GetProperty(node, "type", "ascii"); DBG_DEBUG(GWEN_LOGDOMAIN, "Getting data of type \"%s\" from within XML file", type); n=GWEN_XMLNode_GetFirstData(node); if (!n) { DBG_DEBUG(GWEN_LOGDOMAIN, "No child"); return 1; } if (GWEN_MsgEngine__IsBinTyp(e, type)) { const char *dp; //unsigned int dplen; const char *stype; stype=GWEN_XMLNode_GetProperty(node, "storedAs", type); if (GWEN_MsgEngine__IsBinTyp(e, stype)) { dp=GWEN_XMLNode_GetData(n); //dplen=strlen(dp); if (GWEN_Text_FromHexBuffer(dp, mbuf)) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return -1; } } /* if stored as bin */ else { /* stored as char */ GWEN_Buffer_AppendString(mbuf, GWEN_XMLNode_GetData(n)); } } /* if binType */ else { GWEN_Buffer_AppendString(mbuf, GWEN_XMLNode_GetData(n)); } return 0; } int GWEN_MsgEngine__WriteElement(GWEN_MSGENGINE *e, GWEN_BUFFER *gbuf, GWEN_XMLNODE *node, GWEN_XMLNODE *rnode, GWEN_DB_NODE *gr, int loopNr, int isOptional, GWEN_XMLNODE_PATH *nodePath) { const char *name; const char *type; //unsigned int minsize; //unsigned int maxsize; char numbuffer[256]; const char *pdata; unsigned int datasize; GWEN_BUFFER *data; GWEN_BUFFER *tdata; int handled; pdata=0; handled=0; data=0; tdata=0; /* get type */ type=GWEN_XMLNode_GetProperty(node, "type","ASCII"); DBG_DEBUG(GWEN_LOGDOMAIN, "Type is \"%s\"", type); /* get some sizes */ //minsize=atoi(GWEN_XMLNode_GetProperty(node, "minsize","0")); //maxsize=atoi(GWEN_XMLNode_GetProperty(node, "maxsize","0")); if (e->binTypeWritePtr && GWEN_MsgEngine__IsBinTyp(e, type) && atoi(GWEN_XMLNode_GetProperty(node, "writebin", "1"))) { int rv; data=GWEN_Buffer_new(0, 64, 0, 1); rv=e->binTypeWritePtr(e, node, gr, data); if (rv==-1) { /* error */ DBG_INFO(GWEN_LOGDOMAIN, "called from here"); return -1; } else if (rv==0) { handled=1; } else if (rv==1) { GWEN_Buffer_free(data); data=0; } } if (!handled) { /* get name */ name=GWEN_XMLNode_GetProperty(node, "name", 0); if (!name) { int rv; /* get data from within the XML node */ tdata=GWEN_Buffer_new(0, 32, 0, 1); GWEN_Buffer_SetStep(tdata, 256); rv=GWEN_MsgEngine__GetInline(e, node, tdata); if (rv==0) { pdata=GWEN_Buffer_GetStart(tdata); datasize=GWEN_Buffer_GetUsedBytes(tdata); } else { GWEN_Buffer_free(tdata); tdata=0; pdata=""; datasize=0; } } /* if (!name) */ else { const char *nptr; DBG_DEBUG(GWEN_LOGDOMAIN, "Name provided (%s), loop is %d", name, loopNr); nptr=name; if (gr) { GWEN_DB_NODE_TYPE vt; int idata; /* Variable type of DB takes precedence */ vt=GWEN_DB_GetValueTypeByPath(gr, nptr, loopNr); if (vt==GWEN_DB_NodeType_Unknown) { if (GWEN_MsgEngine__IsCharTyp(e, type)) vt=GWEN_DB_NodeType_ValueChar; else if (GWEN_MsgEngine__IsIntTyp(e, type)) vt=GWEN_DB_NodeType_ValueInt; else if (GWEN_MsgEngine__IsBinTyp(e, type)) vt=GWEN_DB_NodeType_ValueBin; else { DBG_INFO(GWEN_LOGDOMAIN, "Unable to determine parameter " "type (%s), assuming \"char\" for this matter", type); vt=GWEN_DB_NodeType_ValueChar; } } /* get the value of the given var from the db */ switch(vt) { case GWEN_DB_NodeType_ValueChar: DBG_DEBUG(GWEN_LOGDOMAIN, "Type of \"%s\" is char", name); pdata=GWEN_DB_GetCharValue(gr, nptr, loopNr, 0); if (pdata) { DBG_DEBUG(GWEN_LOGDOMAIN, "Value of \"%s\" is %s", nptr, pdata); datasize=strlen(pdata); } else datasize=0; break; case GWEN_DB_NodeType_ValueInt: DBG_DEBUG(GWEN_LOGDOMAIN, "Type of \"%s\" is int", name); if (GWEN_DB_ValueExists(gr, nptr, loopNr)) { idata=GWEN_DB_GetIntValue(gr, nptr, loopNr, 0); if (-1==GWEN_Text_NumToString(idata, numbuffer, sizeof(numbuffer),0)) { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small"); GWEN_Buffer_free(data); return -1; } DBG_DEBUG(GWEN_LOGDOMAIN, "Value of \"%s\" is %d", nptr, idata); pdata=numbuffer; datasize=strlen(numbuffer); } break; case GWEN_DB_NodeType_ValueBin: DBG_DEBUG(GWEN_LOGDOMAIN, "Type of \"%s\" is bin", name); pdata=GWEN_DB_GetBinValue(gr, nptr, loopNr, 0, 0, &datasize); break; default: DBG_WARN(GWEN_LOGDOMAIN, "Unsupported parameter type (%d)", vt); break; } /* switch vt */ } /* if gr */ if (!pdata) { GWEN_XMLNODE_PATH *copyOfNodePath; copyOfNodePath=GWEN_XMLNode_Path_dup(nodePath); /* still no data, try to get it from the XML file */ DBG_DEBUG(GWEN_LOGDOMAIN, "Searching for value of \"%s\"", name); pdata=GWEN_MsgEngine__SearchForValue(e, node, copyOfNodePath, nptr, &datasize); GWEN_XMLNode_Path_free(copyOfNodePath); if (pdata) { DBG_DEBUG(GWEN_LOGDOMAIN, "Found value of \"%s\"", name); } } if (!pdata) { int rv; /* get data from within the XML node */ tdata=GWEN_Buffer_new(0, 32, 0, 1); GWEN_Buffer_SetStep(tdata, 256); rv=GWEN_MsgEngine__GetInline(e, node, tdata); if (rv==0) { pdata=GWEN_Buffer_GetStart(tdata); datasize=GWEN_Buffer_GetUsedBytes(tdata); } else { GWEN_Buffer_free(tdata); tdata=0; } } if (pdata==0) { if (isOptional) { DBG_INFO(GWEN_LOGDOMAIN, "Value not found, omitting element \"%s[%d]\"", name, loopNr); GWEN_Buffer_free(data); return 1; } else { DBG_ERROR(GWEN_LOGDOMAIN, "Value for element \"%s[%d]\" (mode \"%s\") not found", name, loopNr, GWEN_MsgEngine_GetMode(e)); GWEN_DB_Dump(gr, 4); GWEN_Buffer_free(data); return -1; } } } if (!data) data=GWEN_Buffer_new((char*)pdata, datasize, datasize, 0 /* dont take ownership*/ ); } /* write value */ if (GWEN_MsgEngine__WriteValue(e, gbuf, data, node)!=0) { DBG_INFO(GWEN_LOGDOMAIN, "Could not write value"); GWEN_Buffer_free(data); GWEN_Buffer_free(tdata); return -1; } GWEN_Buffer_free(data); GWEN_Buffer_free(tdata); return 0; } GWEN_XMLNODE *GWEN_MsgEngine_FindGroupByProperty(GWEN_MSGENGINE *e, const char *pname, int version, const char *pvalue) { return GWEN_MsgEngine_FindNodeByProperty(e, "GROUP", pname, version, pvalue); } GWEN_XMLNODE *GWEN_MsgEngine_FindNodeByProperty(GWEN_MSGENGINE *e, const char *t, const char *pname, int version, const char *pvalue) { GWEN_XMLNODE *n; const char *p; int i; const char *mode; unsigned int proto; char buffer[256]; if ((strlen(t)+4)>sizeof(buffer)) { DBG_ERROR(GWEN_LOGDOMAIN, "Type name too long."); return 0; } mode=GWEN_MsgEngine_GetMode(e); proto=GWEN_MsgEngine_GetProtocolVersion(e); if (!e->defs) { DBG_INFO(GWEN_LOGDOMAIN, "No definitions available"); return 0; } n=e->defs; n=GWEN_XMLNode_GetChild(n); /* find type+"S" */ strcpy(buffer, t); strcat(buffer,"S"); while(n) { if (GWEN_XMLNode_GetType(n)==GWEN_XMLNodeTypeTag) { p=GWEN_XMLNode_GetData(n); assert(p); if (strcasecmp(p, buffer)==0) break; } n=GWEN_XMLNode_Next(n); } /* while */ if (!n) { DBG_INFO(GWEN_LOGDOMAIN, "No definitions available for type \"%s\"", t); return 0; } /* find approppriate group definition */ if (!mode) mode=""; n=GWEN_XMLNode_GetChild(n); if (!n) { DBG_INFO(GWEN_LOGDOMAIN, "No definitions inside \"%s\"", buffer); return 0; } /* find type+"def" */ strcpy(buffer, t); strcat(buffer,"def"); while(n) { if (GWEN_XMLNode_GetType(n)==GWEN_XMLNodeTypeTag) { p=GWEN_XMLNode_GetData(n); assert(p); if (strcasecmp(p, buffer)==0) { p=GWEN_XMLNode_GetProperty(n, pname,""); if (strcasecmp(p, pvalue)==0) { i=atoi(GWEN_XMLNode_GetProperty(n, "pversion" ,"0")); if (proto==0 || (int)proto==i || i==0) { i=atoi(GWEN_XMLNode_GetProperty(n, "version" ,"0")); if (version==0 || version==i) { p=GWEN_XMLNode_GetProperty(n, "mode",""); if (strcasecmp(p, mode)==0 || !*p) { DBG_DEBUG(GWEN_LOGDOMAIN, "Group definition for \"%s=%s\" found", pname, pvalue); return n; } } } } } } n=GWEN_XMLNode_Next(n); } /* while */ DBG_INFO(GWEN_LOGDOMAIN, "Group definition for \"%s=%s\"(%d) not found", pname, pvalue, version); return 0; } GWEN_XMLNODE *GWEN_MsgEngine_FindNodeByPropertyStrictProto(GWEN_MSGENGINE *e, const char *t, const char *pname, int version, const char *pvalue) { GWEN_XMLNODE *n; const char *p; int i; const char *mode; unsigned int proto; char buffer[256]; if ((strlen(t)+4)>sizeof(buffer)) { DBG_ERROR(GWEN_LOGDOMAIN, "Type name too long."); return 0; } mode=GWEN_MsgEngine_GetMode(e); proto=GWEN_MsgEngine_GetProtocolVersion(e); if (!e->defs) { DBG_INFO(GWEN_LOGDOMAIN, "No definitions available"); return 0; } n=e->defs; n=GWEN_XMLNode_GetChild(n); /* find type+"S" */ strcpy(buffer, t); strcat(buffer,"S"); while(n) { if (GWEN_XMLNode_GetType(n)==GWEN_XMLNodeTypeTag) { p=GWEN_XMLNode_GetData(n); assert(p); if (strcasecmp(p, buffer)==0) break; } n=GWEN_XMLNode_Next(n); } /* while */ if (!n) { DBG_INFO(GWEN_LOGDOMAIN, "No definitions available for type \"%s\"", t); return 0; } /* find approppriate group definition */ if (!mode) mode=""; n=GWEN_XMLNode_GetChild(n); if (!n) { DBG_INFO(GWEN_LOGDOMAIN, "No definitions inside \"%s\"", buffer); return 0; } /* find type+"def" */ strcpy(buffer, t); strcat(buffer,"def"); while(n) { if (GWEN_XMLNode_GetType(n)==GWEN_XMLNodeTypeTag) { p=GWEN_XMLNode_GetData(n); assert(p); if (strcasecmp(p, buffer)==0) { p=GWEN_XMLNode_GetProperty(n, pname,""); if (strcasecmp(p, pvalue)==0) { i=atoi(GWEN_XMLNode_GetProperty(n, "pversion" ,"0")); if (proto==0 || (int)proto==i) { i=atoi(GWEN_XMLNode_GetProperty(n, "version" ,"0")); if (version==0 || version==i) { p=GWEN_XMLNode_GetProperty(n, "mode",""); if (strcasecmp(p, mode)==0 || !*p) { DBG_DEBUG(GWEN_LOGDOMAIN, "Group definition for \"%s=%s\" found", pname, pvalue); return n; } } } } } } n=GWEN_XMLNode_Next(n); } /* while */ DBG_INFO(GWEN_LOGDOMAIN, "Group definition for \"%s=%s\"(%d) not found", pname, pvalue, version); return 0; } const char *GWEN_MsgEngine__TransformValue(GWEN_MSGENGINE *e, const char *pvalue, GWEN_XMLNODE *node, GWEN_XMLNODE *dnode, unsigned int *datasize) { const char *p; static char pbuffer[256]; GWEN_DB_NODE *globalValues; globalValues=GWEN_MsgEngine__GetGlobalValues(e); assert(globalValues); if (pvalue) { DBG_DEBUG(GWEN_LOGDOMAIN, "Transforming value \"%s\"", pvalue); /* check whether the value is a property */ p=pvalue; while (*p && isspace((int)*p)) p++; if (*p=='$' || *p=='+') { /* global property */ int incr; incr=(*p=='+'); p++; DBG_DEBUG(GWEN_LOGDOMAIN, "Getting global property \"%s\"", p); if (incr) { int z; z=GWEN_DB_GetIntValue(globalValues, p, 0, 0); DBG_DEBUG(GWEN_LOGDOMAIN, "Incrementing global property \"%s\" (%d)", p, z); if (GWEN_Text_NumToString(z, pbuffer, sizeof(pbuffer),0)<1) { DBG_ERROR(GWEN_LOGDOMAIN, "Error converting num to string"); return 0; } z++; DBG_DEBUG(GWEN_LOGDOMAIN, "Setting global property \"%s\"=%d", p, z); GWEN_DB_SetIntValue(globalValues, GWEN_DB_FLAGS_DEFAULT | GWEN_DB_FLAGS_OVERWRITE_VARS, p, z); pvalue=pbuffer; *datasize=strlen(pvalue); } else { int z; GWEN_DB_NODE_TYPE vt; const char *type = "should_be_known"; /* default value; otherwise the compiler issues a warning */ DBG_DEBUG(GWEN_LOGDOMAIN, "Getting global property \"%s\"", p); vt=GWEN_DB_GetVariableType(globalValues, p); if (vt==GWEN_DB_NodeType_Unknown) { if (!GWEN_DB_VariableExists(globalValues, p)) { DBG_ERROR(GWEN_LOGDOMAIN, "Unable to determine type of \"%s\"", p); return 0; } type=GWEN_XMLNode_GetProperty(dnode, "type", "ascii"); if (GWEN_MsgEngine__IsCharTyp(e, type)) vt=GWEN_DB_NodeType_ValueChar; else if (GWEN_MsgEngine__IsIntTyp(e, type)) vt=GWEN_DB_NodeType_ValueInt; else if (GWEN_MsgEngine__IsBinTyp(e, type)) vt=GWEN_DB_NodeType_ValueBin; else { DBG_ERROR(GWEN_LOGDOMAIN, "Unable to determine type of \"%s\" (xml)", p); return 0; } } switch(vt) { case GWEN_DB_NodeType_ValueChar: pvalue=GWEN_DB_GetCharValue(globalValues, p, 0, ""); *datasize=strlen(pvalue); break; case GWEN_DB_NodeType_ValueInt: z=GWEN_DB_GetIntValue(globalValues, p, 0, 0); if (GWEN_Text_NumToString(z, pbuffer, sizeof(pbuffer),0)<1) { DBG_ERROR(GWEN_LOGDOMAIN, "Error converting num to string"); return 0; } pvalue=pbuffer; *datasize=strlen(pvalue); break; case GWEN_DB_NodeType_ValueBin: pvalue=GWEN_DB_GetBinValue(globalValues, p, 0, 0,0, datasize); break; default: DBG_ERROR(GWEN_LOGDOMAIN,"Unknown type %s", type); return 0; } /* switch */ } DBG_DEBUG(GWEN_LOGDOMAIN, "Value transformed"); } else if (*p=='%') { /* local property */ p++; DBG_DEBUG(GWEN_LOGDOMAIN, "Getting property \"%s\"", p); pvalue=GWEN_XMLNode_GetProperty(node, p, 0); if (pvalue) { *datasize=strlen(pvalue); DBG_DEBUG(GWEN_LOGDOMAIN, "Transformed value \"%s\"", pvalue); } else *datasize=0; } else if (*p=='?') { GWEN_DB_NODE_TYPE vt; int z; const char *dtype; /* get type */ dtype=GWEN_XMLNode_GetProperty(dnode, "type","ASCII"); /* program variable accessable via callback */ p++; DBG_DEBUG(GWEN_LOGDOMAIN, "Getting program variable \"%s\"", p); pvalue=0; if (GWEN_MsgEngine__IsCharTyp(e, dtype)) vt=GWEN_DB_NodeType_ValueChar; else if (GWEN_MsgEngine__IsIntTyp(e, dtype)) vt=GWEN_DB_NodeType_ValueInt; else { vt=GWEN_DB_NodeType_ValueChar; } switch(vt) { case GWEN_DB_NodeType_ValueChar: if (e->getCharValuePtr) { pvalue=e->getCharValuePtr(e, p, 0); if (pvalue) *datasize=strlen(pvalue); } break; case GWEN_DB_NodeType_ValueInt: if (e->getIntValuePtr) { z=e->getIntValuePtr(e, p, 0); if (GWEN_Text_NumToString(z, pbuffer, sizeof(pbuffer),0)<1) { DBG_ERROR(GWEN_LOGDOMAIN, "Error converting num to string"); return 0; } pvalue=pbuffer; *datasize=strlen(pvalue); } else { DBG_NOTICE(GWEN_LOGDOMAIN, "Callback for getIntValue not set"); } break; default: DBG_ERROR(GWEN_LOGDOMAIN,"Unhandled type %s", dtype); return 0; } /* switch */ DBG_DEBUG(GWEN_LOGDOMAIN, "Value transformed"); } else { *datasize=strlen(pvalue); } } return pvalue; } const char *GWEN_MsgEngine_SearchForProperty(GWEN_XMLNODE *node, GWEN_XMLNODE *refnode, const char *name, int topDown) { const char *pvalue; GWEN_XMLNODE *pn; const char *lastValue; DBG_DEBUG(GWEN_LOGDOMAIN, "Searching for value of \"%s\" in properties", name); lastValue=0; pvalue=GWEN_XMLNode_GetProperty(node, name,0); if (pvalue) { if (!topDown) return pvalue; DBG_DEBUG(GWEN_LOGDOMAIN, "Found a value (%s), but will look further", pvalue); lastValue=pvalue; } pn=refnode; while(pn) { pvalue=GWEN_XMLNode_GetProperty(pn, name,0); if (pvalue) { if (!topDown) return pvalue; DBG_DEBUG(GWEN_LOGDOMAIN, "Found a value (%s), but will look further", pvalue); lastValue=pvalue; } pn=GWEN_XMLNode_GetParent(pn); } /* while */ return lastValue; } int GWEN_MsgEngine_GetHighestTrustLevel(GWEN_XMLNODE *node, GWEN_XMLNODE *refnode) { int value; GWEN_XMLNODE *pn; int highestTrust; highestTrust=0; value=atoi(GWEN_XMLNode_GetProperty(node, "trustlevel","0")); if (value>highestTrust) highestTrust=value; pn=node; while(pn) { value=atoi(GWEN_XMLNode_GetProperty(pn, "trustlevel","0")); if (value>highestTrust) highestTrust=value; pn=GWEN_XMLNode_GetParent(pn); } /* while */ pn=refnode; while(pn) { value=atoi(GWEN_XMLNode_GetProperty(pn, "trustlevel","0")); if (value>highestTrust) highestTrust=value; pn=GWEN_XMLNode_GetParent(pn); } /* while */ return highestTrust; } const char *GWEN_MsgEngine__SearchForValue(GWEN_MSGENGINE *e, GWEN_XMLNODE *node, GWEN_XMLNODE_PATH *nodePath, const char *name, unsigned int *datasize) { const char *pvalue; GWEN_XMLNODE *pn; char *bufferPtr; int topDown; const char *lastValue; unsigned int lastDataSize; unsigned int ldatasize; DBG_DEBUG(GWEN_LOGDOMAIN, "Searching for value of \"%s\" in ", name); if (!node) { DBG_WARN(GWEN_LOGDOMAIN, "No node !"); } topDown=atoi(GWEN_XMLNode_GetProperty(node, "topdown", "0")); lastValue=0; lastDataSize=0; bufferPtr=0; /*pn=GWEN_XMLNode_GetParent(node);*/ pn=GWEN_XMLNode_Path_Surface(nodePath); while(pn) { const char *ppath; /* if (GWEN_XMLNode_GetType(pn)==GWEN_XMLNodeTypeTag) { DBG_NOTICE(GWEN_LOGDOMAIN, "Checking node \"%s\"", GWEN_XMLNode_GetData(pn)); }*/ pvalue=GWEN_MsgEngine__findInValues(e, pn, node, name, &ldatasize); if (pvalue) { if (!topDown) { free(bufferPtr); *datasize=ldatasize; return pvalue; } DBG_DEBUG(GWEN_LOGDOMAIN, "Found a value, but will look further"); lastValue=pvalue; lastDataSize=ldatasize; } ppath=GWEN_XMLNode_GetProperty(pn, "name", ""); if (*ppath) { int i; char *tmpptr; if (bufferPtr) { i=strlen(bufferPtr)+strlen(ppath)+2; tmpptr=(char*)malloc(i); assert(tmpptr); sprintf(tmpptr, "%s/%s", ppath, bufferPtr); free(bufferPtr); bufferPtr=tmpptr; } else { i=strlen(ppath)+strlen(name)+2; tmpptr=(char*)malloc(i); assert(tmpptr); sprintf(tmpptr, "%s/%s", ppath, name); bufferPtr=tmpptr; } name=bufferPtr; } pn=GWEN_XMLNode_Path_Surface(nodePath); } /* while */ free(bufferPtr); if (!lastValue) *datasize=0; else *datasize=lastDataSize; return lastValue; } const char *GWEN_MsgEngine__findInValues(GWEN_MSGENGINE *e, GWEN_XMLNODE *node, GWEN_XMLNODE *dnode, const char *name, unsigned int *datasize) { GWEN_XMLNODE *pn; DBG_VERBOUS(GWEN_LOGDOMAIN, "Looking for value of \"%s\" in ", name); pn=GWEN_XMLNode_GetChild(node); while(pn) { if (GWEN_XMLNode_GetType(pn)==GWEN_XMLNodeTypeTag) { GWEN_XMLNODE *n; const char *p; p=GWEN_XMLNode_GetData(pn); assert(p); DBG_DEBUG(GWEN_LOGDOMAIN, "Checking %s", p); if (strcasecmp(p, "VALUES")==0) { DBG_DEBUG(GWEN_LOGDOMAIN, " found"); /* found, check all values */ n=GWEN_XMLNode_GetChild(pn); while(n) { if (GWEN_XMLNode_GetType(n)==GWEN_XMLNodeTypeTag) { p=GWEN_XMLNode_GetData(n); assert(p); if (strcasecmp(p, "VALUE")==0) { const char *pname; const char *pvalue; pname=GWEN_XMLNode_GetProperty(n, "path", 0); if (pname) { DBG_DEBUG(GWEN_LOGDOMAIN, "Comparing against \"%s\"", pname); if (strcasecmp(name, pname)==0) { GWEN_XMLNODE *dn; dn=GWEN_XMLNode_GetChild(n); while (dn) { if (GWEN_XMLNode_GetType(dn)==GWEN_XMLNodeTypeData) { pvalue=GWEN_XMLNode_GetData(dn); if (pvalue) { DBG_DEBUG(GWEN_LOGDOMAIN, "Transforming \"%s\"", pvalue); pvalue=GWEN_MsgEngine__TransformValue(e, pvalue, node, dnode, datasize); } if (pvalue) return pvalue; } dn=GWEN_XMLNode_Next(dn); } /* while dn */ } /* if path matches name */ } /* if path given */ } /* if VALUE tag */ } /* if TAG */ n=GWEN_XMLNode_Next(n); } /* while */ break; /* REMOVE this to check multiple groups */ } /* if found */ } /* if tag */ pn=GWEN_XMLNode_Next(pn); } /* while node */ DBG_DEBUG(GWEN_LOGDOMAIN, "No value found for \"%s\" in ", name); return 0; } GWEN_XMLNODE *GWEN_MsgEngine__GetGroup(GWEN_MSGENGINE *e, GWEN_XMLNODE *node, const char *t, int version, const char *pvalue) { GWEN_XMLNODE *n; const char *p; int i; const char *mode; unsigned int proto; char buffer[256]; if ((strlen(t)+4)>sizeof(buffer)) { DBG_ERROR(GWEN_LOGDOMAIN, "Type name too long."); return 0; } mode=GWEN_MsgEngine_GetMode(e); proto=GWEN_MsgEngine_GetProtocolVersion(e); /* find type+"S" */ strcpy(buffer, t); strcat(buffer,"S"); n=GWEN_XMLNode_FindFirstTag(node, buffer, 0, 0); if (!n) { DBG_DEBUG(GWEN_LOGDOMAIN, "No definitions here for type \"%s\"", t); return 0; } /* find approppriate group definition */ if (!mode) mode=""; n=GWEN_XMLNode_GetFirstTag(n); if (!n) { DBG_INFO(GWEN_LOGDOMAIN, "No definitions inside \"%s\"", buffer); return 0; } /* find type+"def" */ strcpy(buffer, t); strcat(buffer, "def"); while(n) { p=GWEN_XMLNode_GetData(n); assert(p); if (strcasecmp(p, buffer)==0 || strcasecmp(p, t)==0) { p=GWEN_XMLNode_GetProperty(n, "id", ""); if (strcasecmp(p, pvalue)!=0) p=GWEN_XMLNode_GetProperty(n, "name", ""); if (strcasecmp(p, pvalue)==0) { i=atoi(GWEN_XMLNode_GetProperty(n, "pversion" ,"0")); if (proto==0 || (int)proto==i || i==0) { i=atoi(GWEN_XMLNode_GetProperty(n, "version" ,"0")); if (version==0 || version==i) { p=GWEN_XMLNode_GetProperty(n, "mode",""); if (strcasecmp(p, mode)==0 || !*p) { DBG_DEBUG(GWEN_LOGDOMAIN, "Group definition for \"%s=%s\" found", t, pvalue); return n; } } } } } n=GWEN_XMLNode_GetNextTag(n); } /* while */ DBG_DEBUG(GWEN_LOGDOMAIN, "Group definition for \"%s=%s\"(%d) not found here", t, pvalue, version); return 0; } GWEN_XMLNODE *GWEN_MsgEngine_GetGroup(GWEN_MSGENGINE *e, GWEN_XMLNODE *node, const GWEN_XMLNODE_PATH *nodePath, const char *t, int version, const char *pvalue) { GWEN_XMLNODE *n; GWEN_XMLNODE *nLast = 0; GWEN_XMLNODE *nRes = 0; GWEN_XMLNODE_PATH *pathCopy; assert(node); assert(nodePath); assert(t); assert(pvalue); pathCopy=GWEN_XMLNode_Path_dup(nodePath); n=GWEN_XMLNode_Path_Surface(pathCopy); /* first try all nodes along the path */ while(n) { nLast=n; nRes=GWEN_MsgEngine__GetGroup(e, n, t, version, pvalue); if (nRes) break; n=GWEN_XMLNode_Path_Surface(pathCopy); } GWEN_XMLNode_Path_free(pathCopy); if (nRes) { /* already found */ if (nRes==node) { DBG_ERROR(GWEN_LOGDOMAIN, "Loop detected."); return 0; } return nRes; } if (nLast) n=nLast; else n=node; if (n) { n=GWEN_XMLNode_GetParent(n); while(n) { nRes=GWEN_MsgEngine__GetGroup(e, n, t, version, pvalue); if (nRes) break; n=GWEN_XMLNode_GetParent(n); } } /* try root as a last resort */ if (!nRes && e->defs) nRes=GWEN_MsgEngine__GetGroup(e, e->defs, t, version, pvalue); if (!nRes) { DBG_DEBUG(GWEN_LOGDOMAIN, "Group definition for \"%s=%s\"(%d) not found", t, pvalue, version); return 0; } if (nRes==node) { DBG_ERROR(GWEN_LOGDOMAIN, "Loop detected."); return 0; } return nRes; } int GWEN_MsgEngine__WriteGroup(GWEN_MSGENGINE *e, GWEN_BUFFER *gbuf, GWEN_XMLNODE *node, GWEN_XMLNODE *rnode, GWEN_DB_NODE *gr, int groupIsOptional, GWEN_XMLNODE_PATH *nodePath) { GWEN_XMLNODE *n; const char *p; char delimiter; char terminator; int isFirstElement; int omittedElements; int hasEntries; /* get some settings */ if (rnode) { /* get delimiter */ p=GWEN_XMLNode_GetProperty(rnode, "delimiter", GWEN_XMLNode_GetProperty(node, "delimiter", "")); delimiter=*p; /* get terminating char, if any */ p=GWEN_XMLNode_GetProperty(rnode, "terminator", GWEN_XMLNode_GetProperty(node, "terminator", "")); terminator=*p; } else { /* get delimiter */ p=GWEN_XMLNode_GetProperty(node, "delimiter", ""); delimiter=*p; /* get terminating char, if any */ p=GWEN_XMLNode_GetProperty(node, "terminator",""); terminator=*p; } /* handle all child entries */ n=GWEN_XMLNode_GetChild(node); isFirstElement=1; omittedElements=0; hasEntries=0; if (!n) { DBG_INFO(GWEN_LOGDOMAIN, "No subnodes !"); } while(n) { int t; unsigned int minnum; unsigned int maxnum; int gversion; const char *addEmptyMode; unsigned int loopNr; minnum=atoi(GWEN_XMLNode_GetProperty(n, "minnum","1")); maxnum=atoi(GWEN_XMLNode_GetProperty(n, "maxnum","1")); gversion=atoi(GWEN_XMLNode_GetProperty(n, "version","0")); addEmptyMode=GWEN_XMLNode_GetProperty(n, "addemptymode","one"); DBG_DEBUG(GWEN_LOGDOMAIN, "Omitted elements: %d", omittedElements); t=GWEN_XMLNode_GetType(n); if (t==GWEN_XMLNodeTypeTag) { const char *typ; typ=GWEN_XMLNode_GetData(n); if (typ==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Unnamed tag found (internal error?)"); return -1; } if (strcasecmp(typ, "ELEM")==0) { /* element tag found */ int j; int rv; DBG_VERBOUS(GWEN_LOGDOMAIN, "Found an element"); /* write element as often as needed */ for (loopNr=0; loopNr=minnum || (groupIsOptional && !hasEntries), nodePath); if (rv==-1) { DBG_INFO(GWEN_LOGDOMAIN, "Error writing element"); DBG_INFO(GWEN_LOGDOMAIN, "Node is:"); GWEN_XMLNode_Dump(n, 1); if (gr) { DBG_INFO(GWEN_LOGDOMAIN, "Data is:"); GWEN_DB_Dump(gr, 1); } return -1; } else if (rv==0) { isFirstElement=0; omittedElements=0; hasEntries=1; DBG_DEBUG(GWEN_LOGDOMAIN, "Element written"); } else { /* element is optional, not found */ /* restore position */ GWEN_Buffer_SetPos(gbuf, posBeforeElement); GWEN_Buffer_Crop(gbuf, 0, posBeforeElement); if (strcasecmp(addEmptyMode, "max")==0) { DBG_DEBUG(GWEN_LOGDOMAIN, "Adding max empty"); omittedElements+=(maxnum-loopNr); } else if (strcasecmp(addEmptyMode, "min")==0) { DBG_DEBUG(GWEN_LOGDOMAIN, "Adding min empty"); if (loopNr tag has no \"type\" property", typ); gtype=""; gn=n; } else { DBG_VERBOUS(GWEN_LOGDOMAIN, "<%s> tag is of type \"%s\"", typ, gtype); gn=GWEN_MsgEngine_GetGroup(e, n, nodePath, typ, gversion, gtype); if (!gn) { DBG_INFO(GWEN_LOGDOMAIN, "Definition for type \"%s\" not found", typ); return -1; } } gname=NULL; gcfg=NULL; if (gr) { gname=GWEN_XMLNode_GetProperty(n, "name",0); if (gname) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Group \"%s\" using special data", gname); gcfg=GWEN_DB_FindFirstGroup(gr, gname); } else { DBG_DEBUG(GWEN_LOGDOMAIN, "Unnamed group, using basic data"); /* TODO: check for maxnum==1, since only then the following line makes sense */ gcfg=gr; } } /* write group as often as needed */ for (loopNr=0; loopNr=minnum) groupIsEmpty=1; } if (groupIsEmpty) { /* empty group, flag as such */ rv=1; } else { int dive; /* write group */ if (GWEN_XMLNode_Path_Dive(nodePath, n)) { DBG_INFO(GWEN_LOGDOMAIN, "Called from here"); return -1; } if (n==gn) dive=1; else { if (GWEN_XMLNode_Path_Dive(nodePath, gn)) { DBG_INFO(GWEN_LOGDOMAIN, "Called from here"); return -1; } dive=2; } rv=GWEN_MsgEngine__WriteGroup(e, gbuf, gn, n, gcfg, loopNr>=minnum || groupIsOptional, nodePath); GWEN_XMLNode_Path_Surface(nodePath); if (dive==2) GWEN_XMLNode_Path_Surface(nodePath); } if (rv==-1) { DBG_INFO(GWEN_LOGDOMAIN, "Could not write group \"%s\"", gtype); if (gn) { DBG_INFO(GWEN_LOGDOMAIN, "Node is:"); GWEN_XMLNode_Dump(gn, 1); } if (n) { DBG_INFO(GWEN_LOGDOMAIN, "Referring node is:"); GWEN_XMLNode_Dump(n, 1); } if (gr) { DBG_INFO(GWEN_LOGDOMAIN, "Data is:"); GWEN_DB_Dump(gr, 1); } return -1; } else if (rv==0) { isFirstElement=0; omittedElements=0; hasEntries=1; DBG_DEBUG(GWEN_LOGDOMAIN, "Element written"); } else { /* group is optional, not found */ /* restore position */ GWEN_Buffer_SetPos(gbuf, posBeforeGroup); GWEN_Buffer_Crop(gbuf, 0, posBeforeGroup); if (strcasecmp(addEmptyMode, "max")==0) { DBG_DEBUG(GWEN_LOGDOMAIN, "Adding max empty"); omittedElements+=(maxnum-loopNr); } else if (strcasecmp(addEmptyMode, "min")==0) { DBG_DEBUG(GWEN_LOGDOMAIN, "Adding min empty"); if (loopNrdefs) { e->defs=GWEN_XMLNode_dup(node); e->ownDefs=1; return 0; } nsrc=GWEN_XMLNode_GetChild(node); while(nsrc) { if (GWEN_XMLNode_GetType(nsrc)==GWEN_XMLNodeTypeTag) { ndst=GWEN_XMLNode_FindNode(e->defs, GWEN_XMLNodeTypeTag, GWEN_XMLNode_GetData(nsrc)); if (ndst) { GWEN_XMLNODE *n; n=GWEN_XMLNode_GetChild(nsrc); while (n) { GWEN_XMLNODE *newNode; DBG_DEBUG(GWEN_LOGDOMAIN, "Adding node \"%s\"", GWEN_XMLNode_GetData(n)); newNode=GWEN_XMLNode_dup(n); GWEN_XMLNode_AddChild(ndst, newNode); n=GWEN_XMLNode_Next(n); } /* while n */ } else { GWEN_XMLNODE *newNode; DBG_DEBUG(GWEN_LOGDOMAIN, "Adding branch \"%s\"", GWEN_XMLNode_GetData(nsrc)); newNode=GWEN_XMLNode_dup(nsrc); GWEN_XMLNode_AddChild(e->defs, newNode); } } /* if TAG */ nsrc=GWEN_XMLNode_Next(nsrc); } /* while */ return 0; } int GWEN_MsgEngine__ShowElement(GWEN_UNUSED GWEN_MSGENGINE *e, const char *path, GWEN_XMLNODE *node, GWEN_STRINGLIST *sl, uint32_t flags) { const char *name; const char *type; const char *npath; unsigned int minsize; unsigned int maxsize; unsigned int minnum; unsigned int maxnum; int j; int isSet; char nbuffer[256]; GWEN_STRINGLISTENTRY *en; /* get type */ type=GWEN_XMLNode_GetProperty(node, "type","ASCII"); /* get some sizes */ minsize=atoi(GWEN_XMLNode_GetProperty(node, "minsize","0")); maxsize=atoi(GWEN_XMLNode_GetProperty(node, "maxsize","0")); minnum=atoi(GWEN_XMLNode_GetProperty(node, "minnum","1")); maxnum=atoi(GWEN_XMLNode_GetProperty(node, "maxnum","1")); npath=""; isSet=0; /* get name */ name=GWEN_XMLNode_GetProperty(node, "name", 0); if (path==0) path=""; if (name) { /* get value of a config variable */ if (strlen(path)+strlen(name)+10>=sizeof(nbuffer)) { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small"); return -1; } if (*path) sprintf(nbuffer, "%s/%s", path, name); else sprintf(nbuffer, "%s", name); npath=nbuffer; } en=GWEN_StringList_FirstEntry(sl); while(en) { if (GWEN_StringListEntry_Data(en)) if (strcasecmp(GWEN_StringListEntry_Data(en), npath)==0) { isSet=1; break; } en=GWEN_StringListEntry_Next(en); } /* while */ if (isSet && (flags & GWEN_MSGENGINE_SHOW_FLAGS_NOSET)) return 0; fprintf(stdout, " %s", npath); j=GWEN_MSGENGINE_VARNAME_WIDTH-strlen(npath); if (j>0) { int i; for (i=0; i0) { int i; for (i=0; i found"); /* found, handle all values */ n=GWEN_XMLNode_GetChild(n); while(n) { if (GWEN_XMLNode_GetType(n)==GWEN_XMLNodeTypeTag) { const char *p; p=GWEN_XMLNode_GetData(n); assert(p); if (strcasecmp(p, "VALUE")==0) { const char *pname; const char *pvalue; pname=GWEN_XMLNode_GetProperty(n, "path", 0); if (pname) { GWEN_XMLNODE *dn; /* path found, find data */ dn=GWEN_XMLNode_GetChild(n); while (dn) { if (GWEN_XMLNode_GetType(dn)==GWEN_XMLNodeTypeData) { pvalue=GWEN_XMLNode_GetData(dn); if (pvalue) { char pbuffer[256]; /* check whether the value is a property */ p=pvalue; while (*p && isspace((int)*p)) p++; if (strlen(path)+strlen(pname)+2>sizeof(pbuffer)) { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small"); return -1; } if (*path) sprintf(pbuffer, "%s/%s", path, pname); else sprintf(pbuffer, "%s", pname); GWEN_StringList_AppendString(sl, pbuffer, 0, 1); } break; } dn=GWEN_XMLNode_Next(dn); } /* while dn */ } /* if path given */ } /* if VALUE tag */ } /* if TAG */ n=GWEN_XMLNode_Next(n); } /* while */ } /* if found */ /* now handle all child entries */ n=GWEN_XMLNode_GetChild(node); //isFirstElement=1; omittedElements=0; while(n) { int t; unsigned int minnum; unsigned int maxnum; int gversion; //const char *addEmptyMode; unsigned int loopNr; unsigned int lflags; minnum=atoi(GWEN_XMLNode_GetProperty(n, "minnum","1")); maxnum=atoi(GWEN_XMLNode_GetProperty(n, "maxnum","1")); gversion=atoi(GWEN_XMLNode_GetProperty(n, "version","0")); //addEmptyMode=GWEN_XMLNode_GetProperty(n, "addemptymode","one"); lflags=flags; DBG_DEBUG(GWEN_LOGDOMAIN, "Omitted elements: %d", omittedElements); t=GWEN_XMLNode_GetType(n); if (t==GWEN_XMLNodeTypeTag) { const char *typ; typ=GWEN_XMLNode_GetData(n); if (typ==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Unnamed tag found (internal error?)"); return -1; } if (strcasecmp(typ, "ELEM")==0) { /* element tag found */ /* write element as often as needed */ rv=GWEN_MsgEngine__ShowElement(e, path, n, sl, lflags); if (rv==-1) return -1; else { //isFirstElement=0; omittedElements=0; } } else if (strcasecmp(typ, "VALUES")==0) { } else if (strcasecmp(typ, "DESCR")==0) { } else { /* group tag found */ GWEN_XMLNODE *gn; const char *gname; const char *gtype; if (minnum==0) lflags|=GWEN_MSGENGINE_SHOW_FLAGS_OPTIONAL; gtype=GWEN_XMLNode_GetProperty(n, "type",0); if (!gtype) { /* no "type" property, so use this group directly */ DBG_DEBUG(GWEN_LOGDOMAIN, "<%s> tag has no \"type\" property", typ); gtype=""; gn=n; } else { gn=GWEN_MsgEngine_FindNodeByProperty(e, typ, "id", gversion, gtype); if (!gn) { DBG_DEBUG(GWEN_LOGDOMAIN, "Definition for type \"%s\" not found", typ); return -1; } } /* write group as often as needed */ for (loopNr=0; loopNrsizeof(pbuffer)) { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small"); return -1; } sprintf(pbuffer, "%s/%s", path, gname); npath=pbuffer; } else { /* this is not the first one, so create new name */ if (strlen(path)+strlen(gname)+10>sizeof(pbuffer)) { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small"); return -1; } if (*path) sprintf(pbuffer, "%s/%s%d", path, gname, loopNr); else sprintf(pbuffer, "%s%d", gname, loopNr); /* get the value of the given var */ npath=pbuffer; } } /* if name given */ else npath=path; /* write group */ if (GWEN_MsgEngine__ShowGroup(e, npath, gn, n, sl, lflags)) { DBG_INFO(GWEN_LOGDOMAIN, "Could not show group \"%s\"", gtype); return -1; } } /* for */ } } n=GWEN_XMLNode_Next(n); } /* while */ return 0; } int GWEN_MsgEngine_ShowMessage(GWEN_MSGENGINE *e, const char *typ, const char *msgName, int msgVersion, uint32_t flags) { GWEN_XMLNODE *group; GWEN_STRINGLIST *sl; int i, j; const char *p; sl=GWEN_StringList_new(); fprintf(stdout, "Message \"%s\" version %d\n", msgName, msgVersion); for (i=0; i<76; i++) fprintf(stdout, "="); fprintf(stdout, "\n"); p=" Variable"; fprintf(stdout, "%s", p); i=GWEN_MSGENGINE_VARNAME_WIDTH-strlen(p); for (j=0; j=sizeof(nbuffer)) { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small"); return -1; } if (*path) sprintf(nbuffer, "%s/%s", path, name); else sprintf(nbuffer, "%s", name); npath=nbuffer; } en=GWEN_StringList_FirstEntry(sl); while(en) { if (GWEN_StringListEntry_Data(en)) if (strcasecmp(GWEN_StringListEntry_Data(en), npath)==0) { isSet=1; break; } en=GWEN_StringListEntry_Next(en); } /* while */ if (isSet && (flags & GWEN_MSGENGINE_SHOW_FLAGS_NOSET)) return 0; nn=GWEN_XMLNode_dup(node); if (isSet) GWEN_XMLNode_SetProperty(nn, "GWEN_set", "1"); GWEN_XMLNode_SetProperty(nn, "GWEN_path", npath); GWEN_XMLNode_AddChild(listNode, nn); return 0; } int GWEN_MsgEngine__ListGroup(GWEN_MSGENGINE *e, const char *path, GWEN_XMLNODE *node, GWEN_XMLNODE *rnode, GWEN_STRINGLIST *sl, GWEN_XMLNODE *listNode, uint32_t flags) { GWEN_XMLNODE *n; int rv; /* setup data */ n=GWEN_XMLNode_GetChild(node); if (path==0) path=""; if (*path=='/') path++; while(n) { if (GWEN_XMLNode_GetType(n)==GWEN_XMLNodeTypeTag) { const char *p; p=GWEN_XMLNode_GetData(n); assert(p); DBG_DEBUG(GWEN_LOGDOMAIN, "Checking %s",p); if (strcasecmp(p, "VALUES")==0) break; } /* if tag */ n=GWEN_XMLNode_Next(n); } /* while */ if (n) { DBG_DEBUG(GWEN_LOGDOMAIN, " found"); /* found, handle all values */ n=GWEN_XMLNode_GetChild(n); while(n) { if (GWEN_XMLNode_GetType(n)==GWEN_XMLNodeTypeTag) { const char *p; p=GWEN_XMLNode_GetData(n); assert(p); if (strcasecmp(p, "VALUE")==0) { const char *pname; const char *pvalue; pname=GWEN_XMLNode_GetProperty(n, "path", 0); if (pname) { GWEN_XMLNODE *dn; /* path found, find data */ dn=GWEN_XMLNode_GetChild(n); while (dn) { if (GWEN_XMLNode_GetType(dn)==GWEN_XMLNodeTypeData) { pvalue=GWEN_XMLNode_GetData(dn); if (pvalue) { char pbuffer[256]; /* check whether the value is a property */ p=pvalue; while (*p && isspace((int)*p)) p++; if (strlen(path)+strlen(pname)+2>sizeof(pbuffer)) { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small"); return -1; } if (*path) sprintf(pbuffer, "%s/%s", path, pname); else sprintf(pbuffer, "%s", pname); DBG_INFO(GWEN_LOGDOMAIN, "Found preset value for %s", pbuffer); GWEN_StringList_AppendString(sl, pbuffer, 0, 1); } break; } dn=GWEN_XMLNode_Next(dn); } /* while dn */ } /* if path given */ } /* if VALUE tag */ } /* if TAG */ n=GWEN_XMLNode_Next(n); } /* while */ } /* if found */ /* now handle all child entries */ n=GWEN_XMLNode_GetChild(node); while(n) { int t; int gversion; unsigned int lflags; gversion=atoi(GWEN_XMLNode_GetProperty(n, "version","0")); lflags=flags; t=GWEN_XMLNode_GetType(n); if (t==GWEN_XMLNodeTypeTag) { const char *typ; typ=GWEN_XMLNode_GetData(n); if (typ==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Unnamed tag found (internal error?)"); return -1; } if (strcasecmp(typ, "ELEM")==0) { /* element tag found */ /* list element */ rv=GWEN_MsgEngine__ListElement(e, path, n, sl, listNode, lflags); if (rv==-1) return -1; } else if (strcasecmp(typ, "VALUES")==0) { } else if (strcasecmp(typ, "DESCR")==0) { } else { /* group tag found */ GWEN_XMLNODE *gn; GWEN_XMLNODE *nn; const char *gname; const char *gtype; char pbuffer[256]; const char *npath; gtype=GWEN_XMLNode_GetProperty(n, "type",0); if (!gtype) { /* no "type" property, so use this group directly */ DBG_DEBUG(GWEN_LOGDOMAIN, "<%s> tag has no \"type\" property", typ); gtype=""; gn=n; } else { gn=GWEN_MsgEngine_FindNodeByProperty(e, typ, "id", gversion, gtype); if (!gn) { DBG_DEBUG(GWEN_LOGDOMAIN, "Definition for type \"%s\" not found", typ); return -1; } } /* get configuration */ gname=GWEN_XMLNode_GetProperty(n, "name",0); if (gname) { if (strlen(path)+strlen(gname)+1>sizeof(pbuffer)) { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small"); return -1; } if (*path) sprintf(pbuffer, "%s/%s", path, gname); else sprintf(pbuffer, "%s", gname); npath=pbuffer; } /* if name given */ else npath=path; nn=GWEN_XMLNode_dup(n); if (gn!=n) GWEN_XMLNode_CopyProperties(nn, gn, 0); GWEN_XMLNode_SetProperty(nn, "GWEN_path", npath); GWEN_XMLNode_AddChild(listNode, nn); /* write group */ if (GWEN_MsgEngine__ListGroup(e, npath, gn, n, sl, nn, lflags)) { DBG_INFO(GWEN_LOGDOMAIN, "Could not list group \"%s\"", gtype); return -1; } } } n=GWEN_XMLNode_Next(n); } /* while */ return 0; } GWEN_XMLNODE *GWEN_MsgEngine_ListMessage(GWEN_MSGENGINE *e, const char *typ, const char *msgName, int msgVersion, uint32_t flags) { GWEN_XMLNODE *group; GWEN_STRINGLIST *sl; GWEN_XMLNODE *listNode; group=GWEN_MsgEngine_FindNodeByProperty(e, typ, "id", msgVersion, msgName); if (!group) group=GWEN_MsgEngine_FindNodeByProperty(e, typ, "code", msgVersion, msgName); if (!group) { DBG_ERROR(GWEN_LOGDOMAIN, "Group \"%s\" (version %d) not found\n", msgName, msgVersion); return 0; } sl=GWEN_StringList_new(); /* copy group, but remove all children (we only want the properties) */ listNode=GWEN_XMLNode_dup(group); GWEN_XMLNode_RemoveChildren(listNode); if (GWEN_MsgEngine__ListGroup(e, "", group, 0, sl, listNode, flags)) { DBG_INFO(GWEN_LOGDOMAIN, "Error showing group \"%s\"", msgName); GWEN_StringList_free(sl); GWEN_XMLNode_free(listNode); return 0; } GWEN_StringList_free(sl); return listNode; } int GWEN_MsgEngine__ReadValue(GWEN_MSGENGINE *e, GWEN_BUFFER *msgbuf, GWEN_XMLNODE *node, GWEN_XMLNODE *rnode, GWEN_BUFFER *vbuf, const char *delimiters, uint32_t flags) { unsigned int minsize; unsigned int maxsize; unsigned int size; unsigned int minnum; GWEN_MSGENGINE_TRUSTLEVEL trustLevel; //unsigned int posInMsg; const char *type; int rv; unsigned int realSize; /* get some sizes */ //posInMsg=GWEN_Buffer_GetPos(msgbuf); realSize=0; size=atoi(GWEN_XMLNode_GetProperty(node, "size","0")); minsize=atoi(GWEN_XMLNode_GetProperty(node, "minsize","0")); maxsize=atoi(GWEN_XMLNode_GetProperty(node, "maxsize","0")); minnum=atoi(GWEN_XMLNode_GetProperty(node, "minnum","1")); type=GWEN_XMLNode_GetProperty(node, "type","ASCII"); rv=1; if (e->typeReadPtr) { rv=e->typeReadPtr(e, msgbuf, node, vbuf, e->escapeChar, delimiters); } if (rv==-1) { DBG_INFO(GWEN_LOGDOMAIN, "External type reading failed on type \"%s\"", type); return -1; } else if (rv==1) { if (strcasecmp(type, "bin")==0) { if (GWEN_Buffer_GetBytesLeft(msgbuf)==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Premature end of message (@num@ expected)"); return -1; } else { char lbuffer[16]; int c; char *p; int l; p=lbuffer; c=GWEN_Buffer_ReadByte(msgbuf); if (c!='@') { DBG_ERROR(GWEN_LOGDOMAIN, "\"@num@\" expected"); return -1; } c=0; while(GWEN_Buffer_GetBytesLeft(msgbuf)>0) { c=GWEN_Buffer_ReadByte(msgbuf); if (c==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "\"@\" expected"); return -1; } if (c=='@') break; *p=(char)c; p++; } /* while */ *p=0; if (c!='@') { DBG_ERROR(GWEN_LOGDOMAIN, "\"@num@\" expected"); return -1; } if (sscanf(lbuffer, "%d", &l)!=1) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad number format"); return -1; } DBG_DEBUG(GWEN_LOGDOMAIN, "Reading binary: %d bytes from pos %d (msgsize=%d)", l, GWEN_Buffer_GetPos(msgbuf), GWEN_Buffer_GetUsedBytes(msgbuf)); if (GWEN_Buffer_GetBytesLeft(msgbuf) < (unsigned) l) { DBG_ERROR(GWEN_LOGDOMAIN, "Premature end of message (binary beyond end)"); return -1; } if (GWEN_Buffer_AppendBytes(vbuf, GWEN_Buffer_GetPosPointer(msgbuf), l)) { DBG_DEBUG(GWEN_LOGDOMAIN, "Called from here"); return -1; } GWEN_Buffer_IncrementPos(msgbuf,l); } } /* if bin */ else { /* type is not bin */ int lastWasEscape; int isEscaped; int br; isEscaped=0; lastWasEscape=0; br=0; while(GWEN_Buffer_GetBytesLeft(msgbuf) && (size==0 || brescapeChar) { lastWasEscape=1; c=-1; } } if (c!=-1) { if (!isEscaped && (c && strchr(delimiters, c)!=0)) { /* delimiter found, step back */ GWEN_Buffer_DecrementPos(msgbuf,1); break; } else { if (c=='\\' || iscntrl(c)) { DBG_WARN(GWEN_LOGDOMAIN, "Found a bad character (%02x) in type \"%s\", " "converting to SPACE", (unsigned int)c, type); c=' '; } if (GWEN_Buffer_AppendByte(vbuf, c)) { DBG_DEBUG(GWEN_LOGDOMAIN, "Called from here"); return -1; } br++; } } } /* while */ } /* if !bin */ } /* if type not external */ else { DBG_DEBUG(GWEN_LOGDOMAIN, "Type \"%s\" is external (read)", type); } realSize=GWEN_Buffer_GetUsedBytes(vbuf); /* check the value */ if (realSize==0) { DBG_DEBUG(GWEN_LOGDOMAIN, "Datasize is 0"); if (minnum==0) { DBG_DEBUG(GWEN_LOGDOMAIN, "... but thats ok"); /* value is empty, and that is allowed */ return 1; } else { DBG_ERROR(GWEN_LOGDOMAIN, "Value missing"); GWEN_XMLNode_Dump(node, 1); return -1; } } /* check minimum size */ if (minsize!=0 && realSizemaxsize) { DBG_INFO(GWEN_LOGDOMAIN, "Value too long (%d>%d).", realSize, maxsize); return -1; } if (flags & GWEN_MSGENGINE_READ_FLAGS_TRUSTINFO) { /* add trust data to msgEngine */ const char *descr; trustLevel=GWEN_MsgEngine_GetHighestTrustLevel(node, rnode); if (trustLevel) { unsigned int ustart; ustart=GWEN_Buffer_GetPos(msgbuf)-realSize; descr=GWEN_XMLNode_GetProperty(node, "name",0); if (GWEN_MsgEngine_AddTrustInfo(e, GWEN_Buffer_GetStart(vbuf), realSize, descr, trustLevel, ustart)) { DBG_INFO(GWEN_LOGDOMAIN, "called from here"); return -1; } } } return 0; } int GWEN_MsgEngine__ReadGroup(GWEN_MSGENGINE *e, GWEN_BUFFER *msgbuf, GWEN_XMLNODE *node, GWEN_XMLNODE *rnode, GWEN_DB_NODE *gr, const char *delimiters, uint32_t flags) { //unsigned int minsize; //unsigned int maxsize; unsigned int minnum; unsigned int maxnum; const char *name; const char *p; char delimiter; char terminator; GWEN_XMLNODE *n; int abortLoop; GWEN_BUFFER *delimBuffer=0; /* get some settings */ if (rnode) { /* get delimiter */ p=GWEN_XMLNode_GetProperty(rnode, "delimiter", GWEN_XMLNode_GetProperty(node, "delimiter", "")); delimiter=*p; /* get terminating char, if any */ p=GWEN_XMLNode_GetProperty(rnode, "terminator", GWEN_XMLNode_GetProperty(node, "terminator", "")); terminator=*p; } else { /* get delimiter */ p=GWEN_XMLNode_GetProperty(node, "delimiter", ""); delimiter=*p; /* get terminating char, if any */ p=GWEN_XMLNode_GetProperty(node, "terminator",""); terminator=*p; } delimBuffer=GWEN_Buffer_new(0, strlen(delimiters)+2, 0, 1); GWEN_Buffer_AppendString(delimBuffer, delimiters); if (delimiter) GWEN_Buffer_AppendByte(delimBuffer, delimiter); if (terminator) GWEN_Buffer_AppendByte(delimBuffer, terminator); DBG_DEBUG(GWEN_LOGDOMAIN, "Delimiters are \"%s\" and \"%c\"", delimiters, delimiter); n=GWEN_XMLNode_GetChild(node); while (n) { if (GWEN_XMLNode_GetType(n)==GWEN_XMLNodeTypeTag) { const char *type; if (GWEN_Buffer_GetBytesLeft(msgbuf)==0) break; type=GWEN_XMLNode_GetData(n); /* DBG_NOTICE(GWEN_LOGDOMAIN, "Reading group from here :"); GWEN_Text_DumpString(GWEN_Buffer_GetStart(msgbuf)+ GWEN_Buffer_GetPos(msgbuf), GWEN_Buffer_GetUsedBytes(msgbuf)- GWEN_Buffer_GetPos(msgbuf), stderr, 3); */ if (strcasecmp(type, "ELEM")==0) { unsigned int loopNr; /* get some sizes */ //minsize=atoi(GWEN_XMLNode_GetProperty(n, "minsize","0")); //maxsize=atoi(GWEN_XMLNode_GetProperty(n, "maxsize","0")); minnum=atoi(GWEN_XMLNode_GetProperty(n, "minnum","1")); maxnum=atoi(GWEN_XMLNode_GetProperty(n, "maxnum","1")); name=GWEN_XMLNode_GetProperty(n, "name", 0); loopNr=0; abortLoop=0; while((maxnum==0 || loopNrbinTypeReadPtr) { rv=e->binTypeReadPtr(e, n, gr, vbuf); } else rv=1; if (rv==-1) { DBG_INFO(GWEN_LOGDOMAIN, "Called from here"); GWEN_Buffer_free(vbuf); GWEN_Buffer_free(delimBuffer); return -1; } else if (rv==1) { /* bin type not handled, so handle it myself */ if (GWEN_DB_SetBinValue(gr, GWEN_DB_FLAGS_DEFAULT, name, GWEN_Buffer_GetStart(vbuf), GWEN_Buffer_GetUsedBytes(vbuf))) { DBG_INFO(GWEN_LOGDOMAIN, "Could not set value for \"%s\"", name); GWEN_Buffer_free(vbuf); GWEN_Buffer_free(delimBuffer); return -1; } } } /* if type is bin */ else if (GWEN_MsgEngine__IsIntTyp(e, dtype)) { int z; if (1!=sscanf(GWEN_Buffer_GetStart(vbuf), "%d", &z)) { DBG_INFO(GWEN_LOGDOMAIN, "Value for \"%s\" is not an integer", name); GWEN_Buffer_free(delimBuffer); return -1; } if (GWEN_DB_SetIntValue(gr, GWEN_DB_FLAGS_DEFAULT, name, z)) { DBG_INFO(GWEN_LOGDOMAIN, "Could not set int value for \"%s\"", name); GWEN_Buffer_free(delimBuffer); return -1; } } /* if type is int */ else { DBG_DEBUG(GWEN_LOGDOMAIN, "Value is \"%s\"", GWEN_Buffer_GetStart(vbuf)); if (GWEN_DB_SetCharValue(gr, GWEN_DB_FLAGS_DEFAULT, name, GWEN_Buffer_GetStart(vbuf))) { DBG_INFO(GWEN_LOGDOMAIN, "Could not set value for \"%s\"", name); GWEN_Buffer_free(delimBuffer); return -1; } } /* if !bin */ GWEN_Buffer_free(vbuf); } /* if name is given */ } /* if current char is not a delimiter */ if (GWEN_Buffer_GetBytesLeft(msgbuf)) { if (delimiter) { if (GWEN_Buffer_PeekByte(msgbuf)==delimiter) { GWEN_Buffer_IncrementPos(msgbuf,1); } } } loopNr++; } /* while */ if (loopNr tag has no \"type\" property", type); gtype=""; gn=n; } else { gn=GWEN_MsgEngine_FindNodeByProperty(e, type, "id", gversion, gtype); if (!gn) { DBG_INFO(GWEN_LOGDOMAIN, "Definition for type \"%s\" not found", type); GWEN_Buffer_free(delimBuffer); return -1; } } /* get configuration */ loopNr=0; abortLoop=0; while((maxnum==0 || loopNrdelimiters, flags)) { DBG_INFO(GWEN_LOGDOMAIN, "Error reading group"); return -1; } return 0; } int GWEN_MsgEngine_SetValue(GWEN_MSGENGINE *e, const char *path, const char *value) { GWEN_DB_NODE *globalValues; assert(e); globalValues=GWEN_MsgEngine__GetGlobalValues(e); assert(globalValues); return GWEN_DB_SetCharValue(globalValues, GWEN_DB_FLAGS_DEFAULT | GWEN_DB_FLAGS_OVERWRITE_VARS, path, value); } int GWEN_MsgEngine_SetIntValue(GWEN_MSGENGINE *e, const char *path, int value) { GWEN_DB_NODE *globalValues; assert(e); globalValues=GWEN_MsgEngine__GetGlobalValues(e); assert(globalValues); return GWEN_DB_SetIntValue(globalValues, GWEN_DB_FLAGS_DEFAULT | GWEN_DB_FLAGS_OVERWRITE_VARS, path, value); } const char *GWEN_MsgEngine_GetValue(GWEN_MSGENGINE *e, const char *path, const char *defValue) { GWEN_DB_NODE *globalValues; assert(e); globalValues=GWEN_MsgEngine__GetGlobalValues(e); assert(globalValues); return GWEN_DB_GetCharValue(globalValues, path, 0, defValue); } int GWEN_MsgEngine_GetIntValue(GWEN_MSGENGINE *e, const char *path, int defValue) { GWEN_DB_NODE *globalValues; assert(e); globalValues=GWEN_MsgEngine__GetGlobalValues(e); assert(globalValues); return GWEN_DB_GetIntValue(globalValues, path, 0, defValue); } /* --------------------------------------------------------------- FUNCTION */ int GWEN_MsgEngine_SkipSegment(GWEN_UNUSED GWEN_MSGENGINE *e, GWEN_BUFFER *msgbuf, unsigned char escapeChar, unsigned char delimiter) { int esc; esc=0; while(GWEN_Buffer_GetBytesLeft(msgbuf)) { if (esc) { esc=0; } else { int i; unsigned char c; i=GWEN_Buffer_ReadByte(msgbuf); if (i==-1) { DBG_INFO(GWEN_LOGDOMAIN, "called from here"); return 0; } c=(unsigned int)i; if (c==escapeChar) { /* escape */ esc=1; } else if (c=='@') { /* skip binary data */ char lbuffer[16]; char *p; int l; int nc; p=lbuffer; while(1) { nc=GWEN_Buffer_ReadByte(msgbuf); if (nc==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "\"@num@\" expected"); return -1; } if (nc=='@') break; *p=nc; p++; } /* while */ *p=0; if (sscanf(lbuffer, "%d", &l)!=1) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad number format"); return -1; } if (GWEN_Buffer_GetUsedBytes(msgbuf)-GWEN_Buffer_GetPos(msgbuf) < (unsigned) l) { DBG_ERROR(GWEN_LOGDOMAIN, "Premature end of message (binary beyond end)"); return -1; } GWEN_Buffer_IncrementPos(msgbuf, l); } else if (c==delimiter) {/* segment-end */ return 0; break; } } } /* while */ DBG_ERROR(GWEN_LOGDOMAIN, "End of segment not found"); return -1; } /* --------------------------------------------------------------- FUNCTION */ int GWEN_MsgEngine_ReadMessage(GWEN_MSGENGINE *e, const char *gtype, GWEN_BUFFER *mbuf, GWEN_DB_NODE *gr, uint32_t flags) { unsigned int segments; segments=0; while(GWEN_Buffer_GetBytesLeft(mbuf)) { GWEN_XMLNODE *node; unsigned int posBak; const char *p; GWEN_DB_NODE *tmpdb; int segVer; /* find head segment description */ tmpdb=GWEN_DB_Group_new("tmpdb"); node=GWEN_MsgEngine_FindGroupByProperty(e, "id", 0, "SegHead"); if (node==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Segment description not found"); GWEN_DB_Group_free(tmpdb); return -1; } /* parse head segment */ posBak=GWEN_Buffer_GetPos(mbuf); if (GWEN_MsgEngine_ParseMessage(e, node, mbuf, tmpdb, flags)) { DBG_ERROR(GWEN_LOGDOMAIN, "Error parsing segment head"); GWEN_DB_Group_free(tmpdb); return -1; } /* get segment code */ segVer=GWEN_DB_GetIntValue(tmpdb, "version", 0, 0); p=GWEN_DB_GetCharValue(tmpdb, "code", 0, 0); if (!p) { DBG_ERROR(GWEN_LOGDOMAIN, "No segment code for %s ? This seems to be a bad msg...", gtype); GWEN_Buffer_SetPos(mbuf, posBak); DBG_ERROR(GWEN_LOGDOMAIN, "Full message (pos=%04x)", posBak); GWEN_Text_DumpString(GWEN_Buffer_GetStart(mbuf), GWEN_Buffer_GetUsedBytes(mbuf), 1); GWEN_DB_Dump(tmpdb, 1); GWEN_DB_Group_free(tmpdb); return -1; } /* try to find corresponding XML node */ node=GWEN_MsgEngine_FindNodeByProperty(e, gtype, "code", segVer, p); if (node==0) { unsigned int ustart; ustart=GWEN_Buffer_GetPos(mbuf); ustart++; /* skip delimiter */ /* node not found, skip it */ DBG_NOTICE(GWEN_LOGDOMAIN, "Unknown segment \"%s\" (Segnum=%d, version=%d, ref=%d)", p, GWEN_DB_GetIntValue(tmpdb, "seq", 0, -1), GWEN_DB_GetIntValue(tmpdb, "version", 0, -1), GWEN_DB_GetIntValue(tmpdb, "ref", 0, -1)); if (GWEN_MsgEngine_SkipSegment(e, mbuf, '?', '\'')) { DBG_ERROR(GWEN_LOGDOMAIN, "Error skipping segment \"%s\"", p); GWEN_DB_Group_free(tmpdb); return -1; } if (flags & GWEN_MSGENGINE_READ_FLAGS_TRUSTINFO) { unsigned int usize; usize=GWEN_Buffer_GetPos(mbuf)-ustart-1; #if 0 GWEN_Text_DumpString(GWEN_Buffer_GetStart(mbuf)+ustart, usize, stderr, 1); #endif if (GWEN_MsgEngine_AddTrustInfo(e, GWEN_Buffer_GetStart(mbuf)+ustart, usize, p, GWEN_MsgEngineTrustLevelHigh, ustart)) { DBG_INFO(GWEN_LOGDOMAIN, "called from here"); GWEN_DB_Group_free(tmpdb); return -1; } } /* if trustInfo handling wanted */ } else { /* ok, node available, get the corresponding description and parse * the segment */ const char *id; GWEN_DB_NODE *storegrp; unsigned int startPos; /* restore start position, since the segment head is part of a full * description, so we need to restart reading from the very begin */ GWEN_Buffer_SetPos(mbuf, posBak); /* create group in DB for this segment */ id=GWEN_XMLNode_GetProperty(node, "id", p); storegrp=GWEN_DB_GetGroup(gr, GWEN_PATH_FLAGS_CREATE_GROUP, id); assert(storegrp); /* store the start position of this segment within the DB */ startPos=GWEN_Buffer_GetPos(mbuf); GWEN_DB_SetIntValue(storegrp, GWEN_DB_FLAGS_OVERWRITE_VARS, "segment/pos", startPos); /* parse the segment */ if (GWEN_MsgEngine_ParseMessage(e, node, mbuf, storegrp, flags)) { DBG_ERROR(GWEN_LOGDOMAIN, "Error parsing segment \"%s\" at %d (%x)", p, GWEN_Buffer_GetPos(mbuf)-startPos, GWEN_Buffer_GetPos(mbuf)-startPos); GWEN_Text_DumpString(GWEN_Buffer_GetStart(mbuf)+startPos, GWEN_Buffer_GetUsedBytes(mbuf)-startPos, 1); DBG_ERROR(GWEN_LOGDOMAIN, "Stored data so far:"); GWEN_DB_Dump(storegrp, 2); GWEN_DB_Group_free(tmpdb); return -1; } /* store segment size within DB */ GWEN_DB_SetIntValue(storegrp, GWEN_DB_FLAGS_OVERWRITE_VARS, "segment/length", GWEN_Buffer_GetPos(mbuf)-startPos); segments++; } GWEN_DB_Group_free(tmpdb); } /* while */ /* done */ if (segments) { DBG_DEBUG(GWEN_LOGDOMAIN, "Parsed %d segments", segments); return 0; } else { DBG_INFO(GWEN_LOGDOMAIN, "No segments parsed."); return 1; } } GWEN_MSGENGINE_TRUSTEDDATA* GWEN_MsgEngine_TrustedData_new(const char *data, unsigned int size, const char *description, GWEN_MSGENGINE_TRUSTLEVEL trustLevel) { GWEN_MSGENGINE_TRUSTEDDATA *td; assert(data); assert(size); GWEN_NEW_OBJECT(GWEN_MSGENGINE_TRUSTEDDATA, td); td->data=(char*)malloc(size); assert(td->data); memmove(td->data, data, size); if (description) td->description=strdup(description); td->trustLevel=trustLevel; td->size=size; return td; } void GWEN_MsgEngine_TrustedData_free(GWEN_MSGENGINE_TRUSTEDDATA *td) { if (td) { free(td->data); free(td->description); free(td->replacement); GWEN_FREE_OBJECT(td); } } GWEN_MSGENGINE_TRUSTEDDATA* GWEN_MsgEngine_TrustedData_GetNext(GWEN_MSGENGINE_TRUSTEDDATA *td) { assert(td); return td->next; } const char* GWEN_MsgEngine_TrustedData_GetData(GWEN_MSGENGINE_TRUSTEDDATA *td) { assert(td); return td->data; } unsigned int GWEN_MsgEngine_TrustedData_GetSize(GWEN_MSGENGINE_TRUSTEDDATA *td) { assert(td); return td->size; } const char* GWEN_MsgEngine_TrustedData_GetDescription(GWEN_MSGENGINE_TRUSTEDDATA *td) { assert(td); return td->description; } GWEN_MSGENGINE_TRUSTLEVEL GWEN_MsgEngine_TrustedData_GetTrustLevel(GWEN_MSGENGINE_TRUSTEDDATA *td) { assert(td); return td->trustLevel; } const char* GWEN_MsgEngine_TrustedData_GetReplacement(GWEN_MSGENGINE_TRUSTEDDATA *td) { assert(td); return td->replacement; } int GWEN_MsgEngine_TrustedData_AddPos(GWEN_MSGENGINE_TRUSTEDDATA *td, unsigned int pos) { assert(td); if (td->posCount>=GWEN_MSGENGINE_TRUSTEDDATA_MAXPOS) return -1; td->positions[td->posCount++]=pos; return 0; } int GWEN_MsgEngine_TrustedData_GetFirstPos(GWEN_MSGENGINE_TRUSTEDDATA *td) { assert(td); td->posPointer=0; return GWEN_MsgEngine_TrustedData_GetNextPos(td); } int GWEN_MsgEngine_TrustedData_GetNextPos(GWEN_MSGENGINE_TRUSTEDDATA *td) { assert(td); if (td->posPointer>=td->posCount) return -1; return td->positions[td->posPointer++]; } int GWEN_MsgEngine_TrustedData_CreateReplacements(GWEN_MSGENGINE_TRUSTEDDATA *td) { unsigned int nextNr; GWEN_MSGENGINE_TRUSTEDDATA *ntd; unsigned int count; assert(td); count=0; ntd=td; while(ntd) { count++; ntd=ntd->next; } if (count<0x10) nextNr=0x01; else nextNr=0x11; ntd=td; while(ntd) { unsigned int i; char numbuffer[32]; char *rp; GWEN_MSGENGINE_TRUSTEDDATA *std; int match; /* check whether the same data already exists */ std=td; match=0; while(std && std!=ntd) { match=1; if (std->size==ntd->size) { for (i=0; isize; i++) { if (std->data[i]!=ntd->data[i]) { match=0; break; } } /* for */ } else match=0; if (match) break; std=std->next; } /* while */ if (match) { /* copy the found match */ rp=strdup(std->replacement); } else { /* this is a new one */ rp=(char*)malloc(ntd->size+1); assert(rp); if (ntd->size==1) { if (count>=0x10) nextNr+=0x10; } sprintf(numbuffer, "%02X", nextNr++); for (i=0; isize; i++) { if (count<0x10) rp[i]=numbuffer[1]; else rp[i]=numbuffer[1-(i&1)]; } /* for */ rp[i]=0; } /* DBG_DEBUG(GWEN_LOGDOMAIN, "Replacement: \"%s\" for \"%s\" (%d)", rp, ntd->description, ntd->size); */ free(ntd->replacement); ntd->replacement=rp; ntd=ntd->next; } /* while */ return 0; } GWEN_MSGENGINE_TRUSTEDDATA *GWEN_MsgEngine_TakeTrustInfo(GWEN_MSGENGINE *e) { GWEN_MSGENGINE_TRUSTEDDATA *td; assert(e); td=e->trustInfos; e->trustInfos=0; return td; } int GWEN_MsgEngine_AddTrustInfo(GWEN_MSGENGINE *e, const char *data, unsigned int size, const char *description, GWEN_MSGENGINE_TRUSTLEVEL trustLevel, unsigned int pos) { GWEN_MSGENGINE_TRUSTEDDATA *td; int match; assert(e); assert(data); assert(size); if (!description) description=""; td=e->trustInfos; while(td) { unsigned int i; /* compare data */ if (td->size==size && *description && *(td->description) && trustLevel==td->trustLevel && strcasecmp(description, td->description)==0) { match=1; for (i=0; isize; i++) { if (td->data[i]!=data[i]) { match=0; break; } } /* for */ } else match=0; if (match) break; td=td->next; } /* while */ if (!td) { DBG_INFO(GWEN_LOGDOMAIN, "Creating new trustInfo for \"%s\" (%d)", description, size); td=GWEN_MsgEngine_TrustedData_new(data, size, description, trustLevel); GWEN_LIST_ADD(GWEN_MSGENGINE_TRUSTEDDATA, td, &(e->trustInfos)); } else { DBG_INFO(GWEN_LOGDOMAIN, "Reusing trustInfo for \"%s\" (%d)", description, size); } GWEN_MsgEngine_TrustedData_AddPos(td, pos); return 0; } gwenhywfar-4.15.2beta/src/parser/configmgr_l.h0000644000175000017500000000335012364015347016271 00000000000000/*************************************************************************** begin : Mon Aug 11 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_CONFIGMGR_L_H #define GWENHYWFAR_CONFIGMGR_L_H #include int GWEN_ConfigMgr_ModuleInit(void); int GWEN_ConfigMgr_ModuleFini(void); #endif gwenhywfar-4.15.2beta/src/parser/path.h0000644000175000017500000001776512416477066014766 00000000000000/*************************************************************************** begin : Tue Sep 09 2003 copyright : (C) 2003-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_PATH_H #define GWENHYWFAR_PATH_H #include #include #include #ifdef __cplusplus extern "C" { #endif /** @defgroup MOD_PATH Paths * @ingroup MOD_PARSER * * @brief These functions work on general paths. * * A path consists of a list of elements separated by a slash, like in * /element1/element2/element3. * An element can either be a group or an item. * Groups can contain multiple items and groups, but an item can not contain * anything. * So there can at most be one item, and it must be the * last element. * An example of how to use these functions is given in the module * @ref MOD_DB. These functions can also be used with files and folders. In * this case a group corresponds to a folder and items correspond to files. */ /*@{*/ /** * @name Path Flags * * The path flags only use the lower word of the integer. The high word * may be used/interpreted by the called function. */ /*@{*/ /** * if this is set then all elements of the path must exist. */ #define GWEN_PATH_FLAGS_PATHMUSTEXIST 0x00000001 /** * if this is set then none of the elements of the path must exist. */ #define GWEN_PATH_FLAGS_PATHMUSTNOTEXIST 0x00000002 /** * if this bit is set then the whole path (at any depth!) will be created. * This may lead to double entries at any part of the path. * You need this in very rare cases, most likely you want * @ref GWEN_PATH_FLAGS_NAMEMUSTEXIST. */ #define GWEN_PATH_FLAGS_PATHCREATE 0x00000004 /** * if this bit is set then the last element of the path MUST exist. * This implies @ref GWEN_PATH_FLAGS_PATHMUSTEXIST */ #define GWEN_PATH_FLAGS_NAMEMUSTEXIST 0x00000008 /** * if this bit is set then the last element of the path MUST NOT exist. */ #define GWEN_PATH_FLAGS_NAMEMUSTNOTEXIST 0x00000010 /** * if this bit is set then the last element of the path is created in any * case (this is for groups). * This may lead to double entries of the last element. */ #define GWEN_PATH_FLAGS_CREATE_GROUP 0x00000020 /** * if this bit is set then the last element of the path is created in any * case (this is for variables). * This may lead to double entries of the last element. */ #define GWEN_PATH_FLAGS_CREATE_VAR 0x00000040 /** * a variable is wanted (if this bit is 0 then a group is wanted). * This flag is used internally, too. When the path handler function * is called by @ref GWEN_Path_Handle then this flag is modified * to reflect the type of the current path element. */ #define GWEN_PATH_FLAGS_VARIABLE 0x00000080 /** * all elements of the path are to be escaped. * This is usefull when used with file names etc. It makes sure that the * path elements presented to the path element handler function only * consist of alphanumeric characters. All other characters are escaped * using @ref GWEN_Text_Escape. */ #define GWEN_PATH_FLAGS_ESCAPE 0x00000100 /** use the same flag for both escape and unescape */ #define GWEN_PATH_FLAGS_UNESCAPE 0x00000100 /* be more tolerant, don't escape common characters such as '.' */ #define GWEN_PATH_FLAGS_TOLERANT_ESCAPE 0x00000200 /** * Allow to also escape/unescape the last path element (otherwise it will * not be escaped/unescaped). */ #define GWEN_PATH_FLAGS_CONVERT_LAST 0x00000400 /** * Allows checking for root. If the path begins with a slash ('/') and this * flags is set the slash will be included in the first path element * passed to the element handler function. Additionally the flag * @ref GWEN_PATH_FLAGS_ROOT will be set. Otherwise there will be no check * and special treatment of root entries. */ #define GWEN_PATH_FLAGS_CHECKROOT 0x00000800 /** * This flag is only used with @ref GWEN_Path_HandleWithIdx to disable * index handling. */ #define GWEN_PATH_FLAGS_NO_IDX 0x00001000 /** * */ #define GWEN_PATH_FLAGS_RFU1 0x00002000 /** * @internal */ #define GWEN_PATH_FLAGS_INTERNAL 0x0000c000 /** * @internal * this is flagged for the path function. If this is set then the * element given is the last one, otherwise it is not. */ #define GWEN_PATH_FLAGS_LAST 0x00004000 /** * @internal * this is flagged for the path function. If this is set then the * element given is within root (in this case the element passed to the * element handler funcion will start with a slash), otherwise it is not. */ #define GWEN_PATH_FLAGS_ROOT 0x00008000 /*@}*/ typedef void* (*GWEN_PATHHANDLERPTR)(const char *entry, void *data, uint32_t flags); typedef void* (*GWEN_PATHIDXHANDLERPTR)(const char *entry, void *data, int idx, uint32_t flags); /** * This function works on a path according to the given flags. * For every element the given function is called. * A path consists of multiple elements separated by a slash ("/"), * e.g. "first/second/element". * This function is used by the DB module but may also be used for any * type of path handling (like creating all directories along a given path). * This function simply calls the given function for any element as long as * that function returns a non-zero value or the path ends. * The type of the returned value completely depends on the function called. * @return 0 on error, !=0 otherwise */ GWENHYWFAR_API void *GWEN_Path_Handle(const char *path, void *data, uint32_t flags, GWEN_PATHHANDLERPTR elementFunction); GWENHYWFAR_API void *GWEN_Path_HandleWithIdx(const char *path, void *data, uint32_t flags, GWEN_PATHIDXHANDLERPTR elementFunction); /** * Converts the given path according to the given flags. * You can use this function to escape, unescape or simply store all path * elements within a buffer. The converted path will simply be appended to * the given buffer (without any leading slash). */ GWENHYWFAR_API int GWEN_Path_Convert(const char *path, GWEN_BUFFER *buffer, uint32_t flags); /*@}*/ /* defgroup */ #ifdef __cplusplus } #endif #endif /* GWENHYWFAR_PATH_H */ gwenhywfar-4.15.2beta/src/parser/Makefile.in0000644000175000017500000006420712634022415015701 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/parser DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(iheader_HEADERS) $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libparser_la_LIBADD = am_libparser_la_OBJECTS = base64.lo configmgr.lo db.lo dbio.lo \ msgengine.lo path.lo tag16.lo text.lo tlv.lo url.lo urlfns.lo \ xml.lo xmlctx.lo xsdnode.lo libparser_la_OBJECTS = $(am_libparser_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libparser_la_SOURCES) DIST_SOURCES = $(libparser_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(iheaderdir)" HEADERS = $(iheader_HEADERS) $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/parser @all_includes@ AM_CFLAGS = @visibility_cflags@ -DBUILDING_GWENHYWFAR typefiles = url.xml EXTRA_DIST = $(typefiles) dbrw.c xmlrw.c xmlglobalize.c noinst_LTLIBRARIES = libparser.la noinst_HEADERS = \ db_p.h \ dbio_l.h \ dbio_p.h \ configmgr_l.h \ configmgr_p.h \ msgengine_p.h \ tag16_p.h \ tlv_p.h \ url_l.h \ url_p.h \ xml_p.h \ xml_l.h \ xmlctx_l.h \ xmlctx_p.h \ xsdnode_l.h \ xsdnode_p.h iheaderdir = $(gwenhywfar_headerdir_am)/gwenhywfar iheader_HEADERS = \ base64.h \ configmgr.h \ configmgr_be.h \ db.h \ dbio.h \ dbio_be.h \ msgengine.h \ path.h \ tag16.h \ text.h \ tlv.h \ url.h urlfns.h \ xml.h \ xmlctx.h \ xsdnode.h libparser_la_SOURCES = \ base64.c \ configmgr.c \ db.c \ dbio.c \ msgengine.c \ path.c \ tag16.c \ text.c \ tlv.c \ url.c urlfns.c \ xml.c \ xmlctx.c \ xsdnode.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/parser/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/parser/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libparser.la: $(libparser_la_OBJECTS) $(libparser_la_DEPENDENCIES) $(EXTRA_libparser_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libparser_la_OBJECTS) $(libparser_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/configmgr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/db.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbio.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msgengine.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/path.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tag16.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/text.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tlv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/url.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/urlfns.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmlctx.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xsdnode.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-iheaderHEADERS: $(iheader_HEADERS) @$(NORMAL_INSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(iheaderdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(iheaderdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(iheaderdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(iheaderdir)" || exit $$?; \ done uninstall-iheaderHEADERS: @$(NORMAL_UNINSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(iheaderdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(iheaderdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iheaderHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iheaderHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am \ install-iheaderHEADERS install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-iheaderHEADERS sources: for f in $(libparser_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/src/parser/xml.c0000644000175000017500000012212412560445316014600 00000000000000/*************************************************************************** begin : Sat Jun 28 2003 copyright : (C) 2003-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "xml_p.h" #include "xmlctx_l.h" #include "i18n_l.h" #include #include #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_FCNTL_H # include #endif #include #ifdef HAVE_UNISTD_H # include #endif #define GWEN_XML_BUFFERSIZE 512 GWEN_LIST_FUNCTIONS(GWEN_XMLNODE, GWEN_XMLNode) GWEN_LIST2_FUNCTIONS(GWEN_XMLNODE, GWEN_XMLNode) GWEN_LIST_FUNCTIONS(GWEN_XMLNODE_NAMESPACE, GWEN_XMLNode_NameSpace) GWEN_XMLPROPERTY *GWEN_XMLProperty_new(const char *name, const char *value) { GWEN_XMLPROPERTY *p; GWEN_NEW_OBJECT(GWEN_XMLPROPERTY, p); if (name) p->name=GWEN_Memory_strdup(name); if (value) p->value=GWEN_Memory_strdup(value); return p; } void GWEN_XMLProperty_free(GWEN_XMLPROPERTY *p) { if (p) { GWEN_Memory_dealloc(p->name); GWEN_Memory_dealloc(p->value); GWEN_Memory_dealloc(p->nameSpace); GWEN_FREE_OBJECT(p); } } GWEN_XMLPROPERTY *GWEN_XMLProperty_dup(const GWEN_XMLPROPERTY *p) { GWEN_XMLPROPERTY *pp; pp=GWEN_XMLProperty_new(p->name, p->value); if (p->nameSpace) pp->nameSpace=strdup(p->nameSpace); return pp; } void GWEN_XMLProperty_add(GWEN_XMLPROPERTY *p, GWEN_XMLPROPERTY **head) { GWEN_LIST_ADD(GWEN_XMLPROPERTY, p, head); } void GWEN_XMLProperty_insert(GWEN_XMLPROPERTY *p, GWEN_XMLPROPERTY **head) { GWEN_LIST_INSERT(GWEN_XMLPROPERTY, p, head); } void GWEN_XMLProperty_del(GWEN_XMLPROPERTY *p, GWEN_XMLPROPERTY **head) { GWEN_LIST_DEL(GWEN_XMLPROPERTY, p, head); } void GWEN_XMLProperty_freeAll(GWEN_XMLPROPERTY *p) { while(p) { GWEN_XMLPROPERTY *next; next=p->next; GWEN_XMLProperty_free(p); p=next; } /* while */ } GWEN_XMLNODE *GWEN_XMLNode_new(GWEN_XMLNODE_TYPE t, const char *data) { GWEN_XMLNODE *n; GWEN_NEW_OBJECT(GWEN_XMLNODE, n); GWEN_LIST_INIT(GWEN_XMLNODE, n); n->type=t; n->children=GWEN_XMLNode_List_new(); n->headers=GWEN_XMLNode_List_new(); if (data) n->data=GWEN_Memory_strdup(data); n->nameSpaces=GWEN_XMLNode_NameSpace_List_new(); return n; } void GWEN_XMLNode_free(GWEN_XMLNODE *n) { if (n) { GWEN_LIST_FINI(GWEN_XMLNODE, n); GWEN_XMLProperty_freeAll(n->properties); GWEN_Memory_dealloc(n->nameSpace); GWEN_Memory_dealloc(n->data); GWEN_XMLNode_List_free(n->headers); GWEN_XMLNode_List_free(n->children); GWEN_XMLNode_NameSpace_List_free(n->nameSpaces); GWEN_FREE_OBJECT(n); } } void GWEN_XMLNode_freeAll(GWEN_XMLNODE *n) { while(n) { GWEN_XMLNODE *next; next=GWEN_XMLNode_List_Next(n); GWEN_XMLNode_free(n); n=next; } /* while */ } GWEN_XMLNODE *GWEN_XMLNode_dup(const GWEN_XMLNODE *n) { GWEN_XMLNODE *nn, *cn, *ncn; const GWEN_XMLPROPERTY *p; const GWEN_XMLNODE_NAMESPACE *nns; /* duplicate node itself */ nn=GWEN_XMLNode_new(n->type, n->data); if (n->nameSpace) nn->nameSpace=strdup(n->nameSpace); /* duplicate properties */ p=n->properties; while(p) { GWEN_XMLPROPERTY *np; np=GWEN_XMLProperty_dup(p); GWEN_XMLProperty_add(np, &(nn->properties)); p=p->next; } /* while */ /* duplicate children */ cn=GWEN_XMLNode_List_First(n->children); while(cn) { ncn=GWEN_XMLNode_dup(cn); GWEN_XMLNode_AddChild(nn, ncn); cn=GWEN_XMLNode_Next(cn); } /* while */ /* duplicate headers */ cn=GWEN_XMLNode_List_First(n->headers); while(cn) { ncn=GWEN_XMLNode_dup(cn); GWEN_XMLNode_AddHeader(nn, ncn); cn=GWEN_XMLNode_Next(cn); } /* while */ /* duplicate namespaces */ nns=GWEN_XMLNode_NameSpace_List_First(n->nameSpaces); while(nns) { GWEN_XMLNODE_NAMESPACE *nnns; nnns=GWEN_XMLNode_NameSpace_dup(nns); GWEN_XMLNode_NameSpace_List_Add(nnns, nn->nameSpaces); nns=GWEN_XMLNode_NameSpace_List_Next(nns); } return nn; } const char *GWEN_XMLNode_GetProperty(const GWEN_XMLNODE *n, const char *name, const char *defaultValue) { GWEN_XMLPROPERTY *p; assert(n); assert(name); p=n->properties; while(p) { assert(p->name); if (strcasecmp(p->name, name)==0) break; p=p->next; } /* while */ if (p) { if (p->value) return p->value; } return defaultValue; } int GWEN_XMLNode_GetIntProperty(const GWEN_XMLNODE *n, const char *name, int defaultValue) { GWEN_XMLPROPERTY *p; assert(n); assert(name); p=n->properties; while(p) { assert(p->name); if (strcasecmp(p->name, name)==0) break; p=p->next; } /* while */ if (p) { if (p->value) { int i; if (1==sscanf(p->value, "%i", &i)) return i; } } return defaultValue; } void GWEN_XMLNode__SetProperty(GWEN_XMLNODE *n, const char *name, const char *value, int doInsert) { GWEN_XMLPROPERTY *p; p=n->properties; while(p) { assert(p->name); if (strcasecmp(p->name, name)==0) break; p=p->next; } /* while */ if (p) { GWEN_Memory_dealloc(p->value); if (value) p->value=GWEN_Memory_strdup(value); else p->value=0; } else { p=GWEN_XMLProperty_new(name, value); if (doInsert) GWEN_XMLProperty_insert(p, &(n->properties)); else GWEN_XMLProperty_add(p, &(n->properties)); } } void GWEN_XMLNode_SetProperty(GWEN_XMLNODE *n, const char *name, const char *value) { GWEN_XMLNode__SetProperty(n, name, value, 0); } void GWEN_XMLNode_SetIntProperty(GWEN_XMLNODE *n, const char *name, int value) { char numbuf[256]; snprintf(numbuf, sizeof(numbuf)-1, "%i", value); numbuf[sizeof(numbuf)-1]=0; GWEN_XMLNode__SetProperty(n, name, numbuf, 0); } void GWEN_XMLNode_IncUsage(GWEN_XMLNODE *n) { assert(n); n->usage++; } void GWEN_XMLNode_DecUsage(GWEN_XMLNODE *n) { assert(n); if (n->usage==0) { DBG_WARN(GWEN_LOGDOMAIN, "Node usage already is zero"); } else n->usage--; } uint32_t GWEN_XMLNode_GetUsage(const GWEN_XMLNODE *n) { assert(n); return n->usage; } const char *GWEN_XMLNode_GetData(const GWEN_XMLNODE *n) { assert(n); return n->data; } void GWEN_XMLNode_SetData(GWEN_XMLNODE *n, const char *data) { assert(n); GWEN_Memory_dealloc(n->data); if (data) n->data=GWEN_Memory_strdup(data); else n->data=0; } const char *GWEN_XMLNode_GetNamespace(const GWEN_XMLNODE *n) { assert(n); return n->nameSpace; } void GWEN_XMLNode_SetNamespace(GWEN_XMLNODE *n, const char *s) { assert(n); GWEN_Memory_dealloc(n->nameSpace); if (s) n->nameSpace=GWEN_Memory_strdup(s); else n->nameSpace=NULL; } GWEN_XMLNODE *GWEN_XMLNode_GetChild(const GWEN_XMLNODE *n) { assert(n); return GWEN_XMLNode_List_First(n->children); } GWEN_XMLNODE *GWEN_XMLNode_GetParent(const GWEN_XMLNODE *n) { assert(n); return n->parent; } void GWEN_XMLNode_AddChild(GWEN_XMLNODE *n, GWEN_XMLNODE *child) { assert(n); GWEN_XMLNode_List_Add(child, n->children); child->parent=n; } void GWEN_XMLNode_AddChildrenOnly(GWEN_XMLNODE *n, GWEN_XMLNODE *nn, int copythem) { GWEN_XMLNODE *ch; assert(n); assert(nn); ch=GWEN_XMLNode_GetChild(nn); while(ch) { GWEN_XMLNODE *nc; nc=GWEN_XMLNode_Next(ch); if (!copythem) { GWEN_XMLNode_UnlinkChild(nn, ch); GWEN_XMLNode_AddChild(n, ch); } else { GWEN_XMLNode_AddChild(n, GWEN_XMLNode_dup(ch)); } ch=nc; } /* while */ } GWEN_XMLNODE_TYPE GWEN_XMLNode_GetType(const GWEN_XMLNODE *n) { assert(n); return n->type; } GWEN_XMLNODE *GWEN_XMLNode_Next(const GWEN_XMLNODE *n) { assert(n); return GWEN_XMLNode_List_Next(n); } void GWEN_XMLNode_Dump(const GWEN_XMLNODE *n, int ind) { GWEN_XMLPROPERTY *p; GWEN_XMLNODE *c; int i; int simpleTag; assert(n); for(i=0; itype==GWEN_XMLNodeTypeTag) { if (n->data) fprintf(stderr, "<%s", n->data); else fprintf(stderr, "properties; while (p) { if (p->value) fprintf(stderr, " %s=\"%s\"", p->name, p->value); else fprintf(stderr, " %s", p->name); p=p->next; } if (n->data) { if (n->data[0]=='?') { simpleTag=1; fprintf(stderr, "?"); } else if (n->data[0]=='!') { simpleTag=1; } } fprintf(stderr, ">\n"); if (!simpleTag) { c=GWEN_XMLNode_GetChild(n); while(c) { GWEN_XMLNode_Dump(c, ind+2); c=GWEN_XMLNode_Next(c); } for(i=0; idata) fprintf(stderr, "\n", n->data); else fprintf(stderr, "
\n"); } } else if (n->type==GWEN_XMLNodeTypeData) { if (n->data) { fprintf(stderr, "%s\n", n->data); } } else if (n->type==GWEN_XMLNodeTypeComment) { fprintf(stderr, "\n"); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Unknown tag type (%d)", n->type); } } GWEN_XMLNODE *GWEN_XMLNode_FindNode(const GWEN_XMLNODE *node, GWEN_XMLNODE_TYPE t, const char *data) { GWEN_XMLNODE *n; assert(node); assert(data); n=GWEN_XMLNode_GetChild(node); while(n) { if (n->type==t) if (n->data) if (strcasecmp(n->data, data)==0) break; n=GWEN_XMLNode_Next(n); } /* while */ if (!n) { DBG_DEBUG(GWEN_LOGDOMAIN, "Node %d:\"%s\" not found", t, data); return 0; } return n; } void GWEN_XMLNode_UnlinkChild(GWEN_XMLNODE *n, GWEN_XMLNODE *child) { assert(n); assert(child); GWEN_XMLNode_List_Del(child); child->parent=0; } void GWEN_XMLNode_RemoveChildren(GWEN_XMLNODE *n) { assert(n); GWEN_XMLNode_List_Clear(n->children); } void GWEN_XMLNode_CopyProperties(GWEN_XMLNODE *tn, const GWEN_XMLNODE *sn, int overwrite) { const GWEN_XMLPROPERTY *sp; GWEN_XMLPROPERTY *tp; assert(tn); assert(sn); sp=sn->properties; while(sp) { GWEN_XMLPROPERTY *np; assert(sp->name); tp=tn->properties; /* lookup property in target */ while(tp) { assert(tp->name); if (strcasecmp(tp->name, sp->name)==0) { /* property already exists */ if (overwrite) { /* overwrite old property */ GWEN_Memory_dealloc(tp->value); tp->value=0; if (sp->value) tp->value=GWEN_Memory_strdup(sp->value); } break; } tp=tp->next; } /* while */ if (!tp) { /* property not found, simply copy and add it */ np=GWEN_XMLProperty_dup(sp); GWEN_XMLProperty_add(np, &(tn->properties)); } sp=sp->next; } /* while */ } GWEN_XMLNODE *GWEN_XMLNode_GetFirstOfType(const GWEN_XMLNODE *n, GWEN_XMLNODE_TYPE t) { GWEN_XMLNODE *nn; assert(n); nn=GWEN_XMLNode_GetChild(n); while(nn) { if (nn->type==t) return nn; nn=GWEN_XMLNode_Next(nn); } /* while */ return 0; } GWEN_XMLNODE *GWEN_XMLNode_GetNextOfType(const GWEN_XMLNODE *n, GWEN_XMLNODE_TYPE t) { assert(n); while(n) { if (n->type==t) return (GWEN_XMLNODE *)n; n=GWEN_XMLNode_Next(n); } /* while */ return 0; } GWEN_XMLNODE *GWEN_XMLNode_GetFirstTag(const GWEN_XMLNODE *n) { return GWEN_XMLNode_GetFirstOfType(n, GWEN_XMLNodeTypeTag); } GWEN_XMLNODE *GWEN_XMLNode_GetNextTag(const GWEN_XMLNODE *n) { GWEN_XMLNODE *next; next=GWEN_XMLNode_Next(n); if (!next) return 0; return GWEN_XMLNode_GetNextOfType(next, GWEN_XMLNodeTypeTag); } GWEN_XMLNODE *GWEN_XMLNode_GetFirstData(const GWEN_XMLNODE *n) { return GWEN_XMLNode_GetFirstOfType(n, GWEN_XMLNodeTypeData); } GWEN_XMLNODE *GWEN_XMLNode_GetNextData(const GWEN_XMLNODE *n) { GWEN_XMLNODE *next; next=GWEN_XMLNode_Next(n); if (!next) return 0; return GWEN_XMLNode_GetNextOfType(next, GWEN_XMLNodeTypeData); } GWEN_XMLNODE *GWEN_XMLNode_FindTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue) { while(n) { if (-1!=GWEN_Text_ComparePattern(n->data, tname, 0)) { if (pname) { const char *p; p=GWEN_XMLNode_GetProperty(n, pname, 0); if (p) { if (!pvalue) return (GWEN_XMLNODE*)n; if (-1!=GWEN_Text_ComparePattern(pvalue, p, 0)) return (GWEN_XMLNODE*)n; } else { /* return this node if pvalue is 0 an the property does not exist */ if (!pvalue) return (GWEN_XMLNODE*)n; } } /* if pname */ else return (GWEN_XMLNODE*)n; } n=GWEN_XMLNode_GetNextTag(n); } /* while */ return 0; } GWEN_XMLNODE *GWEN_XMLNode_FindFirstTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_GetFirstTag(n); if (!nn) return 0; return GWEN_XMLNode_FindTag(nn, tname, pname, pvalue); } GWEN_XMLNODE *GWEN_XMLNode_FindNextTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_GetNextTag(n); if (!nn) return 0; return GWEN_XMLNode_FindTag(nn, tname, pname, pvalue); } const char *GWEN_XMLNode_GetCharValue(const GWEN_XMLNODE *n, const char *name, const char *defValue) { GWEN_XMLNODE *nn; if (name && *name) { nn=GWEN_XMLNode_FindFirstTag(n, name, 0, 0); while(nn) { GWEN_XMLNODE *dn; dn=GWEN_XMLNode_GetFirstData(nn); if (dn) { if (dn->data) return dn->data; } nn=GWEN_XMLNode_FindNextTag(nn, name, 0, 0); } } else { GWEN_XMLNODE *dn; dn=GWEN_XMLNode_GetFirstData(n); if (dn) { if (dn->data) return dn->data; } } return defValue; } const char *GWEN_XMLNode_GetLocalizedCharValue(const GWEN_XMLNODE *n, const char *name, const char *defValue) { GWEN_XMLNODE *nn=0; GWEN_STRINGLIST *langl; langl=GWEN_I18N_GetCurrentLocaleList(); if (langl) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(langl); while(se) { const char *l; l=GWEN_StringListEntry_Data(se); DBG_DEBUG(GWEN_LOGDOMAIN, "Trying locale \"%s\"", l); assert(l); nn=GWEN_XMLNode_FindFirstTag(n, name, "lang", l); while(nn) { GWEN_XMLNODE *dn; dn=GWEN_XMLNode_GetFirstData(nn); if (dn) { if (dn->data && *(dn->data)) return dn->data; } nn=GWEN_XMLNode_FindNextTag(nn, name, "lang", l); } /* while nn */ se=GWEN_StringListEntry_Next(se); } /* while */ } /* if language list available */ /* otherwise try without locale */ nn=GWEN_XMLNode_FindFirstTag(n, name, 0, 0); while(nn) { GWEN_XMLNODE *dn; dn=GWEN_XMLNode_GetFirstData(nn); if (dn) { if (dn->data) return dn->data; } nn=GWEN_XMLNode_FindNextTag(nn, name, 0, 0); } return defValue; } void GWEN_XMLNode_SetCharValue(GWEN_XMLNODE *n, const char *name, const char *value) { if (name && *name) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, name); if (value) { GWEN_XMLNODE *nnn; nnn=GWEN_XMLNode_new(GWEN_XMLNodeTypeData, value); GWEN_XMLNode_AddChild(nn, nnn); } GWEN_XMLNode_AddChild(n, nn); } else { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_new(GWEN_XMLNodeTypeData, value); GWEN_XMLNode_AddChild(n, nn); } } int GWEN_XMLNode_GetIntValue(const GWEN_XMLNODE *n, const char *name, int defValue) { const char *p; int res; p=GWEN_XMLNode_GetCharValue(n, name, 0); if (!p) return defValue; if (1!=sscanf(p, "%i", &res)) return defValue; return res; } void GWEN_XMLNode_SetIntValue(GWEN_XMLNODE *n, const char *name, int value) { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", value); numbuf[sizeof(numbuf)-1]=0; GWEN_XMLNode_SetCharValue(n, name, numbuf); } int GWEN_XMLNode_SetCharValueByPath(GWEN_XMLNODE *n, uint32_t flags, const char *name, const char *value) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_GetNodeByXPath(n, name, 0); if (nn) { GWEN_XMLNODE *nnn; /* clear current entries */ if (flags & GWEN_XML_PATH_FLAGS_OVERWRITE_VALUES) GWEN_XMLNode_List_Clear(nn->children); /* create value node */ nnn=GWEN_XMLNode_new(GWEN_XMLNodeTypeData, value); GWEN_XMLNode_AddChild(nn, nnn); return 0; } else { DBG_ERROR(GWEN_LOGDOMAIN, "Unable to create node [%s]", name); return GWEN_ERROR_INVALID; } } const char *GWEN_XMLNode_GetCharValueByPath(GWEN_XMLNODE *n, const char *name, const char *defValue) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_GetNodeByXPath(n, name, 0); if (nn) { GWEN_XMLNODE *dn; dn=GWEN_XMLNode_GetFirstData(nn); if (dn) { if (dn->data) return dn->data; } } return defValue; } int GWEN_XMLNode_SetIntValueByPath(GWEN_XMLNODE *n, uint32_t flags, const char *name, int value) { char numbuf[32]; int rv; /* create int value */ snprintf(numbuf, sizeof(numbuf)-1, "%d", value); numbuf[sizeof(numbuf)-1]=0; rv=GWEN_XMLNode_SetCharValueByPath(n, flags, name, numbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } int GWEN_XMLNode_GetIntValueByPath(GWEN_XMLNODE *n, const char *name, int defValue) { const char *p; int res; p=GWEN_XMLNode_GetCharValueByPath(n, name, NULL); if (!p) return defValue; if (1!=sscanf(p, "%i", &res)) return defValue; return res; } GWEN_XMLPROPERTY *GWEN_XMLNode_GetFirstProperty(const GWEN_XMLNODE *n) { assert(n); return n->properties; } GWEN_XMLPROPERTY *GWEN_XMLNode_GetNextProperty(const GWEN_XMLNODE *n, const GWEN_XMLPROPERTY *pr) { assert(n); assert(pr); return pr->next; } const char *GWEN_XMLProperty_GetName(const GWEN_XMLPROPERTY *pr) { assert(pr); return pr->name; } const char *GWEN_XMLProperty_GetValue(const GWEN_XMLPROPERTY *pr) { assert(pr); return pr->value; } int GWEN_XMLNode_IsChildOf(const GWEN_XMLNODE *parent, const GWEN_XMLNODE *child) { GWEN_XMLNODE *n; if (!child || !parent || child==parent) return 0; n=child->parent; while(n) { if (n==parent) return 1; n=n->parent; } return 0; } int GWEN_XMLNode_GetXPath(const GWEN_XMLNODE *n1, const GWEN_XMLNODE *n2, GWEN_BUFFER *nbuf) { GWEN_BUFFER *lbuf; const GWEN_XMLNODE *ln1; const GWEN_XMLNODE *ln2; if (!n1 && !n2) { DBG_ERROR(GWEN_LOGDOMAIN, "Both nodes are NULL"); return -1; } if (!n1) { n1=n2; while(n1->parent) n1=n1->parent; } if (!n2) { n2=n1; while(n2->parent) n2=n2->parent; } if (n2==n1) { GWEN_Buffer_AppendString(nbuf, "here()"); return 0; } lbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_ReserveBytes(lbuf, 128); ln1=n1->parent; if (ln1) { GWEN_Buffer_AppendString(lbuf, "../"); while(ln1) { if (ln1==n2) { /* found n2 */ GWEN_Buffer_AppendBuffer(nbuf, lbuf); GWEN_Buffer_free(lbuf); return 0; } if (GWEN_XMLNode_IsChildOf(ln1, n2)) break; ln1=ln1->parent; GWEN_Buffer_AppendString(lbuf, "../"); } if (!ln1) { DBG_ERROR(GWEN_LOGDOMAIN, "Nodes do not share root node"); GWEN_Buffer_free(lbuf); return -1; } /* append path to n1 */ GWEN_Buffer_AppendBuffer(nbuf, lbuf); } DBG_ERROR(GWEN_LOGDOMAIN, "Path so far: %s", GWEN_Buffer_GetStart(lbuf)); /* get path to n2 */ GWEN_Buffer_Reset(lbuf); ln2=n2; while(ln2) { GWEN_XMLNODE *tn; int idx; char idxbuf[32]; if (ln2->parent==ln1) break; /* count occurences of this tag in this level */ idx=1; tn=ln2->parent; if (tn) { tn=GWEN_XMLNode_FindFirstTag(tn, ln2->data, 0, 0); while(tn) { if (tn==ln2) break; idx++; tn=GWEN_XMLNode_FindNextTag(tn, ln2->data, 0, 0); } } snprintf(idxbuf, sizeof(idxbuf), "[%d]", idx); idxbuf[sizeof(idxbuf)-1]=0; GWEN_Buffer_InsertString(lbuf, idxbuf); GWEN_Buffer_InsertString(lbuf, GWEN_XMLNode_GetData(ln2)); GWEN_Buffer_InsertByte(lbuf, '/'); ln2=ln2->parent; } DBG_ERROR(GWEN_LOGDOMAIN, "Path so far: %s", GWEN_Buffer_GetStart(lbuf)); assert(ln2); /* append path to n2 */ GWEN_Buffer_AppendBuffer(nbuf, lbuf); GWEN_Buffer_free(lbuf); return 0; } void* GWEN_XMLNode_HandlePath(const char *entry, void *data, int idx, uint32_t flags) { GWEN_XMLNODE *n; GWEN_XMLNODE *nn; int i; n=(GWEN_XMLNODE*)data; if (flags & GWEN_PATH_FLAGS_VARIABLE) { DBG_ERROR(GWEN_LOGDOMAIN, "GWEN_PATH_FLAGS_VARIABLE not allowed for XPATH"); return 0; } if (flags & GWEN_PATH_FLAGS_ROOT) { while(n->parent) n=n->parent; if (*entry=='/') entry++; } if (strcasecmp(entry, "..")==0) { return n->parent; } else if (strcasecmp(entry, ".")==0 || strcasecmp(entry, "here()")==0) { return n; } /* check whether we are allowed to simply create the node */ if ( ((flags & GWEN_PATH_FLAGS_LAST) && (((flags & GWEN_PATH_FLAGS_VARIABLE) && (flags & GWEN_PATH_FLAGS_CREATE_VAR)) || (!(flags & GWEN_PATH_FLAGS_VARIABLE) && (flags & GWEN_PATH_FLAGS_CREATE_GROUP))) ) || ( !(flags & GWEN_PATH_FLAGS_LAST) && (flags & GWEN_PATH_FLAGS_PATHCREATE)) ) { /* simply create the new variable/group */ if (flags & GWEN_PATH_FLAGS_VARIABLE) { /* not allowed for now */ return 0; } else { if (idx!=0) { DBG_ERROR(GWEN_LOGDOMAIN, "Can not create tag with index!=1 (%s)", entry); return 0; } DBG_VERBOUS(GWEN_LOGDOMAIN, "Unconditionally creating tag \"%s\"", entry); nn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, entry); GWEN_XMLNode_AddChild(n, nn); return nn; } } /* find the node */ i=idx; nn=GWEN_XMLNode_FindFirstTag(n, entry, 0, 0); while(nn && i--) { nn=GWEN_XMLNode_FindNextTag(nn, entry, 0, 0); } if (!nn) { /* node not found, check, if we are allowed to create it */ if ( (!(flags & GWEN_PATH_FLAGS_LAST) && (flags & GWEN_PATH_FLAGS_PATHMUSTEXIST)) || (flags & GWEN_PATH_FLAGS_NAMEMUSTEXIST) ) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Tag \"%s\" does not exist", entry); return 0; } /* create the new variable/group */ if (idx!=0) { DBG_ERROR(GWEN_LOGDOMAIN, "Can not create tag with index!=1 (%s)", entry); return 0; } DBG_VERBOUS(GWEN_LOGDOMAIN, "Tag \"%s\" not found, creating", entry); nn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, entry); GWEN_XMLNode_AddChild(n, nn); } /* if node not found */ else { /* node does exist, check whether this is ok */ if ( ((flags & GWEN_PATH_FLAGS_LAST) && (flags & GWEN_PATH_FLAGS_NAMEMUSTNOTEXIST)) || (!(flags & GWEN_PATH_FLAGS_LAST) && (flags & GWEN_PATH_FLAGS_PATHMUSTNOTEXIST)) ) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Entry \"%s\" already exists", entry); return 0; } } return nn; } GWEN_XMLNODE *GWEN_XMLNode_GetNodeByXPath(GWEN_XMLNODE *n, const char *path, uint32_t flags) { return (GWEN_XMLNODE*)GWEN_Path_HandleWithIdx(path, (void*)n, flags, GWEN_XMLNode_HandlePath); } GWEN_XMLNODE *GWEN_XMLNode_GetHeader(const GWEN_XMLNODE *n) { assert(n); return GWEN_XMLNode_List_First(n->headers); } void GWEN_XMLNode_AddHeader(GWEN_XMLNODE *n, GWEN_XMLNODE *nh) { assert(n); assert(nh); GWEN_XMLNode_List_Add(nh, n->headers); } void GWEN_XMLNode_DelHeader(GWEN_XMLNODE *n, GWEN_XMLNODE *nh) { assert(n); assert(nh); GWEN_XMLNode_List_Del(nh); } void GWEN_XMLNode_ClearHeaders(GWEN_XMLNODE *n) { assert(n); GWEN_XMLNode_List_Clear(n->headers); } GWEN_XMLNODE_NAMESPACE_LIST *GWEN_XMLNode_GetNameSpaces(const GWEN_XMLNODE *n) { assert(n); return n->nameSpaces; } GWEN_XMLNODE_NAMESPACE *GWEN_XMLNode_FindNameSpaceByName(const GWEN_XMLNODE *n, const char *s) { GWEN_XMLNODE_NAMESPACE *ns; assert(n); ns=GWEN_XMLNode_NameSpace_List_First(n->nameSpaces); while(ns) { const char *d; d=GWEN_XMLNode_NameSpace_GetName(ns); if (d && strcasecmp(d, s)==0) return ns; ns=GWEN_XMLNode_NameSpace_List_Next(ns); } return NULL; } GWEN_XMLNODE_NAMESPACE *GWEN_XMLNode_FindNameSpaceByUrl(const GWEN_XMLNODE *n, const char *s) { GWEN_XMLNODE_NAMESPACE *ns; assert(n); ns=GWEN_XMLNode_NameSpace_List_First(n->nameSpaces); while(ns) { const char *d; d=GWEN_XMLNode_NameSpace_GetUrl(ns); if (d && strcasecmp(d, s)==0) return ns; ns=GWEN_XMLNode_NameSpace_List_Next(ns); } return NULL; } void GWEN_XMLNode_AddNameSpace(GWEN_XMLNODE *n, const GWEN_XMLNODE_NAMESPACE *ns) { assert(n); assert(ns); GWEN_XMLNode_NameSpace_List_Add(GWEN_XMLNode_NameSpace_dup(ns), n->nameSpaces); } int GWEN_XML_AddNameSpace(GWEN_STRINGLIST2 *sl, const char *prefix, const char *name) { GWEN_BUFFER *nbuf; int rv; nbuf=GWEN_Buffer_new(0, 32, 0, 1); if (prefix) GWEN_Buffer_AppendString(nbuf, prefix); GWEN_Buffer_AppendByte(nbuf, ':'); GWEN_Buffer_AppendString(nbuf, name); rv=GWEN_StringList2_AppendString(sl, GWEN_Buffer_GetStart(nbuf), 0, GWEN_StringList2_IntertMode_NoDouble); GWEN_Buffer_free(nbuf); return rv; } const char *GWEN_XML_FindNameSpaceByPrefix(GWEN_STRINGLIST2 *sl, const char *s) { GWEN_STRINGLIST2_ITERATOR *it; it=GWEN_StringList2_First(sl); if (it) { const char *t; t=GWEN_StringList2Iterator_Data(it); assert(t); while(t) { const char *p; p=strchr(t, ':'); assert(p); if ((s==0 && p==t) || (s && strncasecmp(t, s, p-t)==0)) return t; t=GWEN_StringList2Iterator_Next(it); } /* while */ GWEN_StringList2Iterator_free(it); } return 0; } const char *GWEN_XML_FindNameSpaceByName(GWEN_STRINGLIST2 *sl, const char *s) { GWEN_STRINGLIST2_ITERATOR *it; it=GWEN_StringList2_First(sl); if (it) { const char *t; t=GWEN_StringList2Iterator_Data(it); assert(t); while(t) { const char *p; p=strchr(t, ':'); assert(p); p++; if (strcasecmp(p, s)==0) { GWEN_StringList2Iterator_free(it); return t; } t=GWEN_StringList2Iterator_Next(it); } /* while */ GWEN_StringList2Iterator_free(it); } return 0; } const char *GWEN_XML_FindNameSpace(GWEN_STRINGLIST2 *sl, const char *prefix, const char *name) { GWEN_BUFFER *nbuf; GWEN_STRINGLIST2_ITERATOR *it; nbuf=GWEN_Buffer_new(0, 32, 0, 1); if (prefix) GWEN_Buffer_AppendString(nbuf, prefix); GWEN_Buffer_AppendByte(nbuf, ':'); GWEN_Buffer_AppendString(nbuf, name); it=GWEN_StringList2_First(sl); if (it) { const char *t; t=GWEN_StringList2Iterator_Data(it); assert(t); while(t) { const char *p; p=strchr(t, ':'); assert(p); p++; if (strcasecmp(p, GWEN_Buffer_GetStart(nbuf))==0) { GWEN_StringList2Iterator_free(it); GWEN_Buffer_free(nbuf); return t; } t=GWEN_StringList2Iterator_Next(it); } /* while */ GWEN_StringList2Iterator_free(it); } GWEN_Buffer_free(nbuf); return 0; } int GWEN_XMLNode__CheckNameSpaceDecls1(GWEN_XMLNODE *n, GWEN_STRINGLIST2 *sl, const char *currentNameSpace) { GWEN_XMLPROPERTY *pr; GWEN_XMLNODE *nn; char *localNameSpace; localNameSpace=0; /* remove all unnecessary namespace declarations from this node */ pr=n->properties; while(pr) { GWEN_XMLPROPERTY *prNext; prNext=pr->next; if (strcasecmp(pr->name, "xmlns")==0) { /* default namespace changed ? */ if (localNameSpace) { if (strcasecmp(pr->value, localNameSpace)==0) { /* already mentioned name space, remove duplicate property */ GWEN_XMLProperty_del(pr, &n->properties); GWEN_XMLProperty_free(pr); } else { /* current namespace changed */ GWEN_Memory_dealloc(localNameSpace); localNameSpace=GWEN_Memory_strdup(pr->value); } } else if (currentNameSpace) { if (strcasecmp(pr->value, currentNameSpace)==0) { /* already active name space, remove property */ GWEN_XMLProperty_del(pr, &n->properties); GWEN_XMLProperty_free(pr); } else { /* current namespace changed */ GWEN_Memory_dealloc(localNameSpace); localNameSpace=GWEN_Memory_strdup(pr->value); } } else { /* set current namespace */ GWEN_Memory_dealloc(localNameSpace); localNameSpace=GWEN_Memory_strdup(pr->value); } } else if (strncasecmp(pr->name, "xmlns:", 6)==0) { const char *prefix; const char *x; prefix=strchr(pr->name, ':'); prefix++; /* check for redefinition */ x=GWEN_XML_FindNameSpaceByName(sl, prefix); if (x) { const char *p; /* prefix already in use, check whether it is the same namespace */ p=strchr(x, ':'); assert(p); p++; if (strcasecmp(p, pr->value)!=0) { GWEN_BUFFER *xpath; /* same prefix, different namespace */ xpath=GWEN_Buffer_new(0, 256, 0, 1); GWEN_XMLNode_GetXPath(0, n, xpath); DBG_ERROR(GWEN_LOGDOMAIN, "Redefinition of namespace prefix \"%s\" in \"%s\"", prefix, GWEN_Buffer_GetStart(xpath)); GWEN_Buffer_free(xpath); return -1; } /* if different namespace for same prefix */ else { /* already in list, remove property here */ GWEN_XMLProperty_del(pr, &n->properties); GWEN_XMLProperty_free(pr); } } else { GWEN_XML_AddNameSpace(sl, prefix, pr->value); } } pr=prNext; } /* while */ /* do the same on all sub nodes */ nn=GWEN_XMLNode_GetFirstTag(n); while(nn) { int rv; rv=GWEN_XMLNode__CheckNameSpaceDecls1(nn, sl, localNameSpace?localNameSpace: currentNameSpace); if (rv) { GWEN_Memory_dealloc(localNameSpace); return rv; } nn=GWEN_XMLNode_GetNextTag(nn); } GWEN_Memory_dealloc(localNameSpace); return 0; } int GWEN_XMLNode__CheckAndSetNameSpace(GWEN_XMLNODE *n, const char *prefix, const char *nspace) { GWEN_XMLPROPERTY *pr; const char *p; int inUse; inUse=0; /* check current tag for prefix */ if (prefix) { p=strchr(n->data, ':'); if (p) { if (strncasecmp(n->data, prefix, p-n->data)==0) { DBG_DEBUG(GWEN_LOGDOMAIN, "Prefix \"%s\" used in tag \"%s\"", prefix, n->data); inUse=1; } } if (!inUse) { /* check all attributes for prefixes */ pr=n->properties; while(pr) { p=strchr(pr->name, ':'); if (p) { if (strncasecmp(pr->name, prefix, p-pr->name)==0) { DBG_DEBUG(GWEN_LOGDOMAIN, "Prefix \"%s\" used in attribute \"%s\" of tag \"%s\"", prefix, pr->name, n->data); inUse=1; break; } else { DBG_DEBUG(GWEN_LOGDOMAIN, "Prefix \"%s\" not used in attribute \"%s\" of tag \"%s\"", prefix, pr->name, n->data); } } pr=pr->next; } /* while */ } } /* if prefix */ else { /* no prefix, check whether the current element hasn't any */ p=strchr(n->data, ':'); if (!p) { /* current tag has no prefix, check whether we have a namespace * declaration here */ if (GWEN_XMLNode_GetProperty(n, "xmlns", 0)==0) { /* no, so the current namespace from above is used */ DBG_DEBUG(GWEN_LOGDOMAIN, "No prefix, current namespace is used"); inUse=1; } } } /* if no prefix */ if (inUse) { GWEN_BUFFER *nbuf; nbuf=GWEN_Buffer_new(0, 32, 0, 1); GWEN_Buffer_AppendString(nbuf, "xmlns"); if (prefix) { GWEN_Buffer_AppendByte(nbuf, ':'); GWEN_Buffer_AppendString(nbuf, prefix); } GWEN_XMLNode__SetProperty(n, GWEN_Buffer_GetStart(nbuf), nspace, 1); GWEN_Buffer_free(nbuf); return 1; } return 0; } int GWEN_XMLNode__SetNameSpaces(GWEN_XMLNODE *n, const char *prefix, const char *nspace) { GWEN_XMLNODE *nn; int rv; rv=GWEN_XMLNode__CheckAndSetNameSpace(n, prefix, nspace); if (rv) return rv; nn=GWEN_XMLNode_GetFirstTag(n); while(nn) { rv=GWEN_XMLNode__CheckAndSetNameSpace(nn, prefix, nspace); if (rv==-1) return rv; else if (rv==0) { /* check children */ rv=GWEN_XMLNode__SetNameSpaces(nn, prefix, nspace); if (rv) return rv; } nn=GWEN_XMLNode_GetNextTag(nn); } return 0; } int GWEN_XMLNode__CheckNameSpaceDecls3(GWEN_XMLNODE *n) { GWEN_XMLPROPERTY *pr; GWEN_XMLNODE *nn; int rv; /* move all namespace declarations from this node to the nodes * of first use */ pr=n->properties; while(pr) { GWEN_XMLPROPERTY *prNext; prNext=pr->next; if (strcasecmp(pr->name, "xmlns")==0 || strncasecmp(pr->name, "xmlns:", 6)==0) { const char *prefix; prefix=strchr(pr->name, ':'); if (prefix) prefix++; GWEN_XMLProperty_del(pr, &n->properties); rv=GWEN_XMLNode__SetNameSpaces(n, prefix, pr->value); DBG_DEBUG(GWEN_LOGDOMAIN, "Removing property \"%s\"", pr->name); GWEN_XMLProperty_free(pr); if (rv==-1) return rv; } pr=prNext; } /* while */ /* do the same on all sub nodes */ nn=GWEN_XMLNode_GetFirstTag(n); while(nn) { rv=GWEN_XMLNode__CheckNameSpaceDecls3(nn); if (rv) { return rv; } nn=GWEN_XMLNode_GetNextTag(nn); } return 0; } int GWEN_XMLNode_NormalizeNameSpaces(GWEN_XMLNODE *n) { const char *ns; int rv; GWEN_STRINGLIST2 *sl; ns=GWEN_XMLNode_GetProperty(n, "xmlns", 0); sl=GWEN_StringList2_new(); rv=GWEN_XMLNode__CheckNameSpaceDecls1(n, sl, ns); GWEN_StringList2_free(sl); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return rv; } //rv=GWEN_XMLNode__CheckNameSpaceDecls2(n, ns); rv=GWEN_XMLNode__CheckNameSpaceDecls3(n); if (rv==-1) return rv; return 0; } int GWEN_XMLNode_StripNamespaces(GWEN_XMLNODE *n) { if (n && n->type==GWEN_XMLNodeTypeTag && n->data) { GWEN_XMLNODE *nn; GWEN_XMLPROPERTY *pp; if (n->nameSpace==0) { char *p; p=strchr(n->data, ':'); if (p) { int len=p-n->data; char *s; n->nameSpace=(char*)GWEN_Memory_malloc(len); assert(n->nameSpace); memmove(n->nameSpace, n->data, len); n->nameSpace[len-1]=0; s=GWEN_Memory_strdup(p+1); free(n->data); n->data=s; } } pp=n->properties; while(pp) { if (pp->nameSpace==0) { char *p; p=strchr(pp->name, ':'); if (p) { int len=p-pp->name; char *s; pp->nameSpace=(char*)GWEN_Memory_malloc(len); assert(pp->nameSpace); memmove(pp->nameSpace, pp->name, len); pp->nameSpace[len-1]=0; s=GWEN_Memory_strdup(p+1); free(pp->name); pp->name=s; } } pp=pp->next; } nn=GWEN_XMLNode_List_First(n->children); while(nn) { int rv; rv=GWEN_XMLNode_StripNamespaces(nn); if (rv<0) { DBG_DEBUG(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } nn=GWEN_XMLNode_List_Next(nn); } } return 0; } GWEN_XMLNODE_PATH *GWEN_XMLNode_Path_new(void) { GWEN_XMLNODE_PATH *p; GWEN_NEW_OBJECT(GWEN_XMLNODE_PATH, p); return p; } GWEN_XMLNODE_PATH *GWEN_XMLNode_Path_dup(const GWEN_XMLNODE_PATH *np) { GWEN_XMLNODE_PATH *p; unsigned int i; GWEN_NEW_OBJECT(GWEN_XMLNODE_PATH, p); p->pos=np->pos; for (i=0; ipos; i++) { p->nodes[i]=np->nodes[i]; } return p; } void GWEN_XMLNode_Path_free(GWEN_XMLNODE_PATH *np) { GWEN_FREE_OBJECT(np); } int GWEN_XMLNode_Path_Dive(GWEN_XMLNODE_PATH *np, GWEN_XMLNODE *n) { unsigned int i; if (np->pos>=GWEN_XML_MAX_DEPTH) { DBG_ERROR(GWEN_LOGDOMAIN, "Path too deep"); return 1; } /* check for double entries */ for (i=0; ipos; i++) { assert(np->nodes[i]!=n); } np->nodes[np->pos++]=n; DBG_DEBUG(GWEN_LOGDOMAIN, "Dived to %d", np->pos); return 0; } GWEN_XMLNODE *GWEN_XMLNode_Path_Surface(GWEN_XMLNODE_PATH *np) { if (np->pos==0) { DBG_DEBUG(GWEN_LOGDOMAIN, "Root reached"); return 0; } DBG_DEBUG(GWEN_LOGDOMAIN, "Surfaced to %d", np->pos-1); return np->nodes[--np->pos]; } void GWEN_XMLNode_Path_Dump(GWEN_XMLNODE_PATH *np) { unsigned int i; if (np->pos==0) { DBG_NOTICE(GWEN_LOGDOMAIN, "Empty path"); } for (i=0; ipos; i++) { DBG_NOTICE(GWEN_LOGDOMAIN, "Path entry %d:", i); GWEN_XMLNode_Dump(np->nodes[i], 1); } } GWEN_XMLNODE_NAMESPACE *GWEN_XMLNode_NameSpace_new(const char *name, const char *url) { GWEN_XMLNODE_NAMESPACE *ns; GWEN_NEW_OBJECT(GWEN_XMLNODE_NAMESPACE, ns); GWEN_LIST_INIT(GWEN_XMLNODE_NAMESPACE, ns); if (name) ns->name=GWEN_Memory_strdup(name); if (url) ns->url=GWEN_Memory_strdup(url); return ns; } void GWEN_XMLNode_NameSpace_free(GWEN_XMLNODE_NAMESPACE *ns) { if (ns) { GWEN_LIST_FINI(GWEN_XMLNODE_NAMESPACE, ns); free(ns->url); free(ns->name); GWEN_FREE_OBJECT(ns); } } GWEN_XMLNODE_NAMESPACE *GWEN_XMLNode_NameSpace_dup(const GWEN_XMLNODE_NAMESPACE *ns) { GWEN_XMLNODE_NAMESPACE *nns; assert(ns); nns=GWEN_XMLNode_NameSpace_new(ns->name, ns->url); return nns; } const char *GWEN_XMLNode_NameSpace_GetName(const GWEN_XMLNODE_NAMESPACE *ns) { assert(ns); return ns->name; } const char *GWEN_XMLNode_NameSpace_GetUrl(const GWEN_XMLNODE_NAMESPACE *ns) { assert(ns); return ns->url; } #include "xmlrw.c" #include "xmlglobalize.c" gwenhywfar-4.15.2beta/src/parser/msgengine.h0000644000175000017500000004133212416477066015771 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Fri Jul 04 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_MSGENGINE_H #define GWENHYWFAR_MSGENGINE_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif /** @defgroup MOD_MSGENGINE_ALL Message Engine * @ingroup MOD_PARSER * * This group contains function providing creating and parsing messages * based on an XML-alike file. */ /*@{*/ /** @defgroup MOD_TRUSTDATA Trust Data Handling * */ /*@{*/ typedef struct GWEN_MSGENGINE_TRUSTEDDATA GWEN_MSGENGINE_TRUSTEDDATA; typedef enum { GWEN_MsgEngineTrustLevelNone=0, GWEN_MsgEngineTrustLevelLow, GWEN_MsgEngineTrustLevelMedium, GWEN_MsgEngineTrustLevelHigh, GWEN_MsgEngineTrustLevelFull } GWEN_MSGENGINE_TRUSTLEVEL; GWENHYWFAR_API GWEN_MSGENGINE_TRUSTEDDATA* GWEN_MsgEngine_TrustedData_new(const char *data, unsigned int size, const char *description, GWEN_MSGENGINE_TRUSTLEVEL trustLevel); GWENHYWFAR_API void GWEN_MsgEngine_TrustedData_free(GWEN_MSGENGINE_TRUSTEDDATA *td); GWENHYWFAR_API GWEN_MSGENGINE_TRUSTEDDATA* GWEN_MsgEngine_TrustedData_GetNext(GWEN_MSGENGINE_TRUSTEDDATA *td); GWENHYWFAR_API const char* GWEN_MsgEngine_TrustedData_GetData(GWEN_MSGENGINE_TRUSTEDDATA *td); GWENHYWFAR_API unsigned int GWEN_MsgEngine_TrustedData_GetSize(GWEN_MSGENGINE_TRUSTEDDATA *td); GWENHYWFAR_API const char* GWEN_MsgEngine_TrustedData_GetDescription(GWEN_MSGENGINE_TRUSTEDDATA *td); GWENHYWFAR_API GWEN_MSGENGINE_TRUSTLEVEL GWEN_MsgEngine_TrustedData_GetTrustLevel(GWEN_MSGENGINE_TRUSTEDDATA *td); GWENHYWFAR_API const char* GWEN_MsgEngine_TrustedData_GetReplacement(GWEN_MSGENGINE_TRUSTEDDATA *td); GWENHYWFAR_API int GWEN_MsgEngine_TrustedData_AddPos(GWEN_MSGENGINE_TRUSTEDDATA *td, unsigned int pos); GWENHYWFAR_API int GWEN_MsgEngine_TrustedData_GetFirstPos(GWEN_MSGENGINE_TRUSTEDDATA *td); GWENHYWFAR_API int GWEN_MsgEngine_TrustedData_GetNextPos(GWEN_MSGENGINE_TRUSTEDDATA *td); GWENHYWFAR_API int GWEN_MsgEngine_TrustedData_CreateReplacements(GWEN_MSGENGINE_TRUSTEDDATA *td); /*@}*/ /* defgroup */ #define GWEN_MSGENGINE_SHOW_FLAGS_NOSET 0x0001 #define GWEN_MSGENGINE_MAX_VALUE_LEN 8192 /** @name Read Flags */ /*@{*/ #define GWEN_MSGENGINE_READ_FLAGS_TRUSTINFO 0x0001 #define GWEN_MSGENGINE_READ_FLAGS_DEFAULT 0 /*@}*/ /** @defgroup MOD_MSGENGINE Message Engine * */ /*@{*/ typedef struct GWEN__MSGENGINE GWEN_MSGENGINE; GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_MSGENGINE, GWENHYWFAR_API) /** @name Virtual Functions * * A message engine contains some pointers to functions which allow * extending the functionality of a message engine (like virtual functions * in C++) */ /*@{*/ typedef int (*GWEN_MSGENGINE_TYPEREAD_PTR)(GWEN_MSGENGINE *e, GWEN_BUFFER *msgbuf, GWEN_XMLNODE *node, GWEN_BUFFER *vbuf, char escapeChar, const char *delimiters); /** * @return 0 on success, -1 on error, 1 if unknown type */ typedef int (*GWEN_MSGENGINE_TYPEWRITE_PTR)(GWEN_MSGENGINE *e, GWEN_BUFFER *gbuf, GWEN_BUFFER *data, GWEN_XMLNODE *node); /** * Checks of what base-type the given type is. */ typedef GWEN_DB_NODE_TYPE (*GWEN_MSGENGINE_TYPECHECK_PTR)(GWEN_MSGENGINE *e, const char *tname); typedef int (*GWEN_MSGENGINE_BINTYPEREAD_PTR)(GWEN_MSGENGINE *e, GWEN_XMLNODE *node, GWEN_DB_NODE *gr, GWEN_BUFFER *vbuf); typedef int (*GWEN_MSGENGINE_BINTYPEWRITE_PTR)(GWEN_MSGENGINE *e, GWEN_XMLNODE *node, GWEN_DB_NODE *gr, GWEN_BUFFER *dbuf); /** * Get the value of the given name (or default value if none set) */ typedef const char* (*GWEN_MSGENGINE_GETCHARVALUE_PTR)(GWEN_MSGENGINE *e, const char *name, const char *defValue); typedef int (*GWEN_MSGENGINE_GETINTVALUE_PTR)(GWEN_MSGENGINE *e, const char *name, int defValue); typedef GWEN_DB_NODE* (*GWEN_MSGENGINE_GETGLOBALVALUES_PTR)(GWEN_MSGENGINE *e); typedef void (*GWEN_MSGENGINE_FREEDATA_PTR)(GWEN_MSGENGINE *e); /*@}*/ /** @name Constructor And Destructor * */ /*@{*/ GWENHYWFAR_API GWEN_MSGENGINE *GWEN_MsgEngine_new(void); GWENHYWFAR_API void GWEN_MsgEngine_free(GWEN_MSGENGINE *e); GWENHYWFAR_API void GWEN_MsgEngine_Attach(GWEN_MSGENGINE *e); /*@}*/ /** @name Setters And Getters * */ /*@{*/ GWENHYWFAR_API void GWEN_MsgEngine_SetEscapeChar(GWEN_MSGENGINE *e, char c); GWENHYWFAR_API char GWEN_MsgEngine_GetEscapeChar(GWEN_MSGENGINE *e); GWENHYWFAR_API void GWEN_MsgEngine_SetCharsToEscape(GWEN_MSGENGINE *e, const char *c); GWENHYWFAR_API const char *GWEN_MsgEngine_GetCharsToEscape(GWEN_MSGENGINE *e); GWENHYWFAR_API void GWEN_MsgEngine_SetDelimiters(GWEN_MSGENGINE *e, const char *s); GWENHYWFAR_API const char *GWEN_MsgEngine_GetDelimiters(GWEN_MSGENGINE *e); GWENHYWFAR_API void GWEN_MsgEngine_SetMode(GWEN_MSGENGINE *e, const char *mode); GWENHYWFAR_API const char *GWEN_MsgEngine_GetMode(GWEN_MSGENGINE *e); GWENHYWFAR_API unsigned int GWEN_MsgEngine_GetProtocolVersion(GWEN_MSGENGINE *e); GWENHYWFAR_API void GWEN_MsgEngine_SetProtocolVersion(GWEN_MSGENGINE *e, unsigned int p); GWENHYWFAR_API GWEN_XMLNODE *GWEN_MsgEngine_GetDefinitions(GWEN_MSGENGINE *e); /** * @param e message engine for which the definition is to be added * @param n xml node to add * @param take if !=0 then the message engine will take over ownership of * the XML node. */ GWENHYWFAR_API void GWEN_MsgEngine_SetDefinitions(GWEN_MSGENGINE *e, GWEN_XMLNODE *n, int take); GWENHYWFAR_API int GWEN_MsgEngine_AddDefinitions(GWEN_MSGENGINE *e, GWEN_XMLNODE *node); /*@}*/ /** @name Setters For Virtual Functions: Extending Data Type Handling * */ /*@{*/ GWENHYWFAR_API void GWEN_MsgEngine_SetTypeReadFunction(GWEN_MSGENGINE *e, GWEN_MSGENGINE_TYPEREAD_PTR p); GWENHYWFAR_API GWEN_MSGENGINE_TYPEREAD_PTR GWEN_MsgEngine_GetTypeReadFunction(GWEN_MSGENGINE *e); GWENHYWFAR_API void GWEN_MsgEngine_SetTypeWriteFunction(GWEN_MSGENGINE *e, GWEN_MSGENGINE_TYPEWRITE_PTR p); GWENHYWFAR_API GWEN_MSGENGINE_TYPEWRITE_PTR GWEN_MsgEngine_GetTypeWriteFunction(GWEN_MSGENGINE *e); GWENHYWFAR_API void GWEN_MsgEngine_SetTypeCheckFunction(GWEN_MSGENGINE *e, GWEN_MSGENGINE_TYPECHECK_PTR p); GWENHYWFAR_API GWEN_MSGENGINE_TYPECHECK_PTR GWEN_MsgEngine_GetTypeCheckFunction(GWEN_MSGENGINE *e); GWENHYWFAR_API void GWEN_MsgEngine_SetGetGlobalValuesFunction(GWEN_MSGENGINE *e, GWEN_MSGENGINE_GETGLOBALVALUES_PTR p); GWENHYWFAR_API GWEN_MSGENGINE_GETGLOBALVALUES_PTR GWEN_MsgEngine_GetGetGlobalValuesFunction(GWEN_MSGENGINE *e); /*@}*/ /* Extending Data Type Handling */ /** @name Setters For Virtual Functions: Extending Binary Data Handling * */ /*@{*/ GWENHYWFAR_API void GWEN_MsgEngine_SetBinTypeReadFunction(GWEN_MSGENGINE *e, GWEN_MSGENGINE_BINTYPEREAD_PTR p); GWENHYWFAR_API GWEN_MSGENGINE_BINTYPEREAD_PTR GWEN_MsgEngine_GetBinTypeReadFunction(GWEN_MSGENGINE *e); GWENHYWFAR_API void GWEN_MsgEngine_SetBinTypeWriteFunction(GWEN_MSGENGINE *e, GWEN_MSGENGINE_BINTYPEWRITE_PTR p); GWENHYWFAR_API GWEN_MSGENGINE_BINTYPEWRITE_PTR GWEN_MsgEngine_GetBinTypeWriteFunction(GWEN_MSGENGINE *e); /*@}*/ /* Extending Binary Data Handling */ /** @name Setters For Virtual Functions: Getting Variables * */ /*@{*/ GWENHYWFAR_API void GWEN_MsgEngine_SetGetCharValueFunction(GWEN_MSGENGINE *e, GWEN_MSGENGINE_GETCHARVALUE_PTR p); GWENHYWFAR_API void GWEN_MsgEngine_SetGetIntValueFunction(GWEN_MSGENGINE *e, GWEN_MSGENGINE_GETINTVALUE_PTR p); /*@}*/ /* Getting variables */ /** @name Extending GWEN_MSGENGINE * * The functions in this group are strongly deprecated. */ /*@{*/ GWENHYWFAR_API void *GWEN_MsgEngine_GetInheritorData(const GWEN_MSGENGINE *e); GWENHYWFAR_API void GWEN_MsgEngine_SetInheritorData(GWEN_MSGENGINE *e, void *d); GWENHYWFAR_API void GWEN_MsgEngine_SetFreeDataFunction(GWEN_MSGENGINE *e, GWEN_MSGENGINE_FREEDATA_PTR p); /*@}*/ /** @name Locating XML Nodes And Properties * */ /*@{*/ GWENHYWFAR_API GWEN_XMLNODE *GWEN_MsgEngine_FindGroupByProperty(GWEN_MSGENGINE *e, const char *pname, int version, const char *pvalue); /** * Looks for a node of the given type. * Example: If type is "GROUP" then the node will be searched in * "", and the tag name will be "". */ GWENHYWFAR_API GWEN_XMLNODE *GWEN_MsgEngine_FindNodeByProperty(GWEN_MSGENGINE *e, const char *t, const char *pname, int version, const char *pvalue); GWENHYWFAR_API GWEN_XMLNODE *GWEN_MsgEngine_FindNodeByPropertyStrictProto(GWEN_MSGENGINE *e, const char *t, const char *pname, int version, const char *pvalue); /** * Searches for a property in "node" and in "refnode" and all its parents. * If topdown is 0 then the nearest value is used, otherwise the farest * one is used. */ GWENHYWFAR_API const char *GWEN_MsgEngine_SearchForProperty(GWEN_XMLNODE *node, GWEN_XMLNODE *refnode, const char *name, int topDown); /*@}*/ /** @name Getters And Setters for Global Variables * */ /*@{*/ /** * Set a global variable which will be used for "$"-Variables in description * files. */ GWENHYWFAR_API int GWEN_MsgEngine_SetValue(GWEN_MSGENGINE *e, const char *path, const char *value); GWENHYWFAR_API int GWEN_MsgEngine_SetIntValue(GWEN_MSGENGINE *e, const char *path, int value); GWENHYWFAR_API const char *GWEN_MsgEngine_GetValue(GWEN_MSGENGINE *e, const char *path, const char *defValue); GWENHYWFAR_API int GWEN_MsgEngine_GetIntValue(GWEN_MSGENGINE *e, const char *path, int defValue); /*@}*/ /** @name Parsing, Listing And Creating Messages * */ /*@{*/ GWENHYWFAR_API int GWEN_MsgEngine_CreateMessage(GWEN_MSGENGINE *e, const char *msgName, int msgVersion, GWEN_BUFFER *gbuf, GWEN_DB_NODE *msgData); GWENHYWFAR_API int GWEN_MsgEngine_CreateMessageFromNode(GWEN_MSGENGINE *e, GWEN_XMLNODE *node, GWEN_BUFFER *gbuf, GWEN_DB_NODE *msgData); /** * Deprecated, use @ref GWEN_MsgEngine_ListMessage instead. */ GWENHYWFAR_API int GWEN_MsgEngine_ShowMessage(GWEN_MSGENGINE *e, const char *typ, const char *msgName, int msgVersion, uint32_t flags); /** * This function parses a single entity specified by a single * XML node (which may of course consist of multiple XML nodes). * This function makes no assumptions about the format of used variables * whatsoever. All data parsed from the given message is stored within the * given database. */ GWENHYWFAR_API int GWEN_MsgEngine_ParseMessage(GWEN_MSGENGINE *e, GWEN_XMLNODE *group, GWEN_BUFFER *msgbuf, GWEN_DB_NODE *gr, uint32_t flags); /** * This function skips all bytes from the given buffer until the given * delimiter is found or the buffer ends. It also takes care of escape * characters (to not accidentally take an escaped delimiter for a real one) * and is able to identify and correctly skip binary data. For the latter * to work it takes into account that binary data is preceeded by a * "@123@" sequence, where "123" is the length of the binary data. * This sequence has been taken from the HBCI specs (German homebanking * protocol) and has proven to be very effective ;-) */ GWENHYWFAR_API int GWEN_MsgEngine_SkipSegment(GWEN_MSGENGINE *e, GWEN_BUFFER *msgbuf, unsigned char escapeChar, unsigned char delimiter); /** * This function reads all segments found within the given buffer. * This is used to read a full message containing multiple segments. * It assumes that each segment starts with a group with the id of * "SegHead" which defines the variable "code" to determine each segment * type. Please note that this function makes no further assumptions about * the format of a segment, group or element of a message. This is totally * based on the settings specified in the XML file. * Unknown segments are simply skipped. * For each segment found inside the message a group is created within the * given database. The name of that group is derived from the property * "id" within the XML description of each segment (or "code" if "id" does * not exist). * One special group is created below every segment group: "segment". This * group contains some variables: *
    *
  • * pos holding the start position of the segment inside the * buffer *
  • *
  • * length holding the length of the area occupied by the segment *
  • *
* The data of every segment is simply added to the database, so there may * be multiple groups with the same name if a given segment type occurs more * often than once. * @return 0 if ok, -1 on error and 1 if no segment was available * @param e message engine * @param gtype typename for segments (most callers use "SEG") * @param mbuf GWEN_BUFFER containing the message. Parsing is started at * the current position within the buffer, so please make sure that this * pos is set to the beginning of the message before calling this function. * @param gr database to store information parsed from the given message * @param flags see @ref GWEN_MSGENGINE_READ_FLAGS_TRUSTINFO and * @ref GWEN_MSGENGINE_READ_FLAGS_DEFAULT */ GWENHYWFAR_API int GWEN_MsgEngine_ReadMessage(GWEN_MSGENGINE *e, const char *gtype, GWEN_BUFFER *mbuf, GWEN_DB_NODE *gr, uint32_t flags); /** * This function creates a full tree of all groups and elements * used by the given message. * The caller is responsible for freeing the data returned. */ GWENHYWFAR_API GWEN_XMLNODE *GWEN_MsgEngine_ListMessage(GWEN_MSGENGINE *e, const char *typ, const char *msgName, int msgVersion, uint32_t flags); /*@}*/ /** @name Handling Trust Information * */ /*@{*/ /** * This function returns trust info gathered while parsing a message. * The caller of this function takes over ownership of this list of * data, so it is his responsibility to free it. * @return list of trust data (0 if none) */ GWENHYWFAR_API GWEN_MSGENGINE_TRUSTEDDATA *GWEN_MsgEngine_TakeTrustInfo(GWEN_MSGENGINE *e); /** * */ GWENHYWFAR_API int GWEN_MsgEngine_AddTrustInfo(GWEN_MSGENGINE *e, const char *data, unsigned int size, const char *description, GWEN_MSGENGINE_TRUSTLEVEL trustLevel, unsigned int pos); /*@}*/ /* Handling Trust Information */ /*@}*/ /* defgroup */ /*@}*/ /* defgroup (yes, twice) */ #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/parser/xmlrw.c0000644000175000017500000006142512416477066015166 00000000000000/*************************************************************************** copyright : (C) 2007-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /* this file is included from xml.c */ int GWEN_XMLNode__WriteToStream(const GWEN_XMLNODE *n, GWEN_FAST_BUFFER *fb, uint32_t flags, unsigned int ind) { GWEN_XMLPROPERTY *p; GWEN_XMLNODE *c; int i; int simpleTag; int rv; #define CHECK_ERROR(rv) \ if (rv<0) {\ DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);\ return rv;\ } assert(n); simpleTag=0; if (n->type==GWEN_XMLNodeTypeTag) { if (!(flags & GWEN_XML_FLAGS_SIMPLE)) { if (flags & GWEN_XML_FLAGS_INDENT) { for(i=0; idata) { GWEN_FASTBUFFER_WRITEBYTE(fb, rv, '<'); CHECK_ERROR(rv); GWEN_FASTBUFFER_WRITEFORCED(fb, rv, n->data, -1); CHECK_ERROR(rv); } else { GWEN_FASTBUFFER_WRITEFORCED(fb, rv, "nameSpaces); while(ns) { const char *name; const char *url; name=GWEN_XMLNode_NameSpace_GetName(ns); url=GWEN_XMLNode_NameSpace_GetUrl(ns); GWEN_FASTBUFFER_WRITEBYTE(fb, rv, ' '); CHECK_ERROR(rv); GWEN_FASTBUFFER_WRITEFORCED(fb, rv, "xmlns", -1); CHECK_ERROR(rv); if (name && *name) { GWEN_FASTBUFFER_WRITEFORCED(fb, rv, ":", -1); CHECK_ERROR(rv); GWEN_FASTBUFFER_WRITEFORCED(fb, rv, name, -1); CHECK_ERROR(rv); } GWEN_FASTBUFFER_WRITEFORCED(fb, rv, "=\"", -1); CHECK_ERROR(rv); if (url) { GWEN_FASTBUFFER_WRITEFORCED(fb, rv, url, -1); CHECK_ERROR(rv); } GWEN_FASTBUFFER_WRITEFORCED(fb, rv, "\"", -1); CHECK_ERROR(rv); ns=GWEN_XMLNode_NameSpace_List_Next(ns); } } p=n->properties; while (p) { GWEN_FASTBUFFER_WRITEBYTE(fb, rv, ' '); CHECK_ERROR(rv); GWEN_FASTBUFFER_WRITEFORCED(fb, rv, p->name, -1); CHECK_ERROR(rv); if (p->value) { GWEN_FASTBUFFER_WRITEFORCED(fb, rv, "=\"", -1); CHECK_ERROR(rv); GWEN_FASTBUFFER_WRITEFORCED(fb, rv, p->value, -1); CHECK_ERROR(rv); GWEN_FASTBUFFER_WRITEFORCED(fb, rv, "\"", -1); CHECK_ERROR(rv); } p=p->next; } if (n->data) { if (n->data[0]=='?') { simpleTag=1; GWEN_FASTBUFFER_WRITEBYTE(fb, rv, '?'); CHECK_ERROR(rv); } else if (n->data[0]=='!') { simpleTag=1; } } if (flags & GWEN_XML_FLAGS_SIMPLE) { GWEN_FASTBUFFER_WRITEFORCED(fb, rv, ">", -1); } else { GWEN_FASTBUFFER_WRITELINE(fb, rv, ">"); } CHECK_ERROR(rv); if (!simpleTag) { c=GWEN_XMLNode_GetChild(n); while(c) { rv=GWEN_XMLNode__WriteToStream(c, fb, flags, ind+2); CHECK_ERROR(rv); c=GWEN_XMLNode_Next(c); } if (!(flags & GWEN_XML_FLAGS_SIMPLE)) { if (flags & GWEN_XML_FLAGS_INDENT) { for(i=0; idata) { GWEN_FASTBUFFER_WRITEFORCED(fb, rv, "data, -1); CHECK_ERROR(rv); if (flags & GWEN_XML_FLAGS_SIMPLE) { GWEN_FASTBUFFER_WRITEFORCED(fb, rv, ">", -1); } else { GWEN_FASTBUFFER_WRITELINE(fb, rv, ">"); } CHECK_ERROR(rv); } else { GWEN_FASTBUFFER_WRITELINE(fb, rv, ""); CHECK_ERROR(rv); } } } else if (n->type==GWEN_XMLNodeTypeData) { if (n->data) { if (!(flags & GWEN_XML_FLAGS_SIMPLE)) { if (flags & GWEN_XML_FLAGS_INDENT) { for(i=0; idata, -1); CHECK_ERROR(rv); if (!(flags & GWEN_XML_FLAGS_SIMPLE)) { GWEN_FASTBUFFER_WRITELINE(fb, rv, ""); CHECK_ERROR(rv); } } } else if (n->type==GWEN_XMLNodeTypeComment) { if (flags & GWEN_XML_FLAGS_HANDLE_COMMENTS) { if (flags & GWEN_XML_FLAGS_INDENT) { for(i=0; idata) { GWEN_FASTBUFFER_WRITEFORCED(fb, rv, n->data, -1); CHECK_ERROR(rv); } GWEN_FASTBUFFER_WRITELINE(fb, rv, "-->"); CHECK_ERROR(rv); } } else { DBG_ERROR(GWEN_LOGDOMAIN, "Unknown tag type (%d)", n->type); } return 0; #undef CHECK_ERROR } int GWEN_XMLNode_WriteToStream(const GWEN_XMLNODE *n, GWEN_XML_CONTEXT *ctx, GWEN_SYNCIO *sio) { const GWEN_XMLNODE *nn; const GWEN_XMLNODE *nchild; const GWEN_XMLNODE *nheader; uint32_t flags; GWEN_FAST_BUFFER *fb; int rv; flags=GWEN_XmlCtx_GetFlags(ctx); nchild=GWEN_XMLNode_GetChild(n); nheader=GWEN_XMLNode_GetHeader(n); fb=GWEN_FastBuffer_new(512, sio); if (nheader && (flags & GWEN_XML_FLAGS_HANDLE_HEADERS)) { nn=nheader; while(nn) { const GWEN_XMLNODE *next; rv=GWEN_XMLNode__WriteToStream(nn, fb, GWEN_XmlCtx_GetFlags(ctx), 0); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_FastBuffer_free(fb); return rv; } next=GWEN_XMLNode_Next(nn); if (next) { int err; GWEN_FASTBUFFER_WRITELINE(fb, err, ""); if (err<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", err); GWEN_FastBuffer_free(fb); return err; } } nn=next; } if (nchild) { int err; GWEN_FASTBUFFER_WRITELINE(fb, err, ""); if (err<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", err); GWEN_FastBuffer_free(fb); return err; } } } nn=nchild; while(nn) { const GWEN_XMLNODE *next; if (GWEN_XMLNode__WriteToStream(nn, fb, GWEN_XmlCtx_GetFlags(ctx), 0)) return -1; next=GWEN_XMLNode_Next(nn); if (next) { int err; GWEN_FASTBUFFER_WRITELINE(fb, err, ""); if (err<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", err); GWEN_FastBuffer_free(fb); return err; } } nn=next; } /* while */ GWEN_FASTBUFFER_FLUSH(fb, rv); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_FastBuffer_free(fb); return rv; } GWEN_FastBuffer_free(fb); return 0; } int GWEN_XMLNode_WriteFile(const GWEN_XMLNODE *n, const char *fname, uint32_t flags) { GWEN_XML_CONTEXT *ctx; GWEN_SYNCIO *sio; int rv; sio=GWEN_SyncIo_File_new(fname, GWEN_SyncIo_File_CreationMode_CreateAlways); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE | GWEN_SYNCIO_FILE_FLAGS_UREAD | GWEN_SYNCIO_FILE_FLAGS_UWRITE); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); return rv; } /* create context and io layers */ ctx=GWEN_XmlCtxStore_new(NULL, flags); /* write data to stream */ rv=GWEN_XMLNode_WriteToStream(n, ctx, sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); GWEN_XmlCtx_free(ctx); return rv; } /* close file */ GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); GWEN_XmlCtx_free(ctx); return 0; } int GWEN_XMLNode_toBuffer(const GWEN_XMLNODE *n, GWEN_BUFFER *buf, uint32_t flags) { GWEN_XML_CONTEXT *ctx; GWEN_SYNCIO *sio; int rv; sio=GWEN_SyncIo_Memory_new(buf, 0); /* create context and io layers */ ctx=GWEN_XmlCtxStore_new(NULL, flags); /* write data to stream */ rv=GWEN_XMLNode_WriteToStream(n, ctx, sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); GWEN_XmlCtx_free(ctx); return rv; } GWEN_SyncIo_free(sio); GWEN_XmlCtx_free(ctx); return 0; } int GWEN_XML__ReadData(GWEN_XML_CONTEXT *ctx, GWEN_FAST_BUFFER *fb, GWEN_UNUSED uint32_t flags) { int chr; unsigned char uc; GWEN_BUFFER *dbuf; dbuf=GWEN_Buffer_new(0, 256, 0, 1); for (;;) { GWEN_FASTBUFFER_PEEKBYTE(fb, chr); if (chr<0) { if (chr==GWEN_ERROR_EOF) break; else { GWEN_Buffer_free(dbuf); return chr; } } uc=(unsigned char) chr; if (uc=='<') break; fb->bufferReadPos++; GWEN_Buffer_AppendByte(dbuf, uc); } if (GWEN_Buffer_GetUsedBytes(dbuf)) { int rv; const char *s; s=GWEN_Buffer_GetStart(dbuf); if (*s) { rv=GWEN_XmlCtx_AddData(ctx, s); if (rv) { GWEN_Buffer_free(dbuf); return rv; } } } GWEN_Buffer_free(dbuf); return 0; } int GWEN_XML__ReadTag(GWEN_XML_CONTEXT *ctx, GWEN_FAST_BUFFER *fb, GWEN_UNUSED uint32_t flags, GWEN_BUFFER *dbuf) { int chr; unsigned char uc=0; int rv; /* skip blanks */ for (;;) { GWEN_FASTBUFFER_READBYTE(fb, chr); if (chr<0) { return chr; } uc=(unsigned char) chr; if (uc>32) break; } if (uc=='/') { /* read end tag */ GWEN_Buffer_AppendByte(dbuf, uc); for (;;) { GWEN_FASTBUFFER_READBYTE(fb, chr); if (chr<0) { return chr; } uc=(unsigned char) chr; if (uc=='>' || uc<33) break; GWEN_Buffer_AppendByte(dbuf, uc); } rv=GWEN_XmlCtx_StartTag(ctx, GWEN_Buffer_GetStart(dbuf)); if (rv) { return rv; } if (uc!='>') { for (;;) { /* skip blanks, expect '>' */ GWEN_FASTBUFFER_READBYTE(fb, chr); if (chr<0) { return chr; } uc=(unsigned char) chr; if (uc>32) break; } } if (uc!='>') { DBG_ERROR(GWEN_LOGDOMAIN, "Unexpected character"); return GWEN_ERROR_BAD_DATA; } /* tag finished */ rv=GWEN_XmlCtx_EndTag(ctx, 0); if (rv) { return rv; } return 0; } else if (uc=='!') { /* check for comment */ GWEN_FASTBUFFER_PEEKBYTE(fb, chr); if (chr<0) { return chr; } uc=(unsigned char) chr; if (uc=='-') { fb->bufferReadPos++; GWEN_FASTBUFFER_PEEKBYTE(fb, chr); if (chr<0) { return chr; } uc=(unsigned char) chr; if (uc=='-') { GWEN_BUFFER *cbuf; /* found comment */ fb->bufferReadPos++; cbuf=GWEN_Buffer_new(0, 256, 0, 1); for (;;) { GWEN_FASTBUFFER_READBYTE(fb, chr); if (chr<0) { GWEN_Buffer_free(cbuf); return chr; } uc=(unsigned char) chr; GWEN_Buffer_AppendByte(cbuf, uc); if (GWEN_Buffer_GetUsedBytes(cbuf)>2) { char *p; p=GWEN_Buffer_GetStart(cbuf); p+=GWEN_Buffer_GetUsedBytes(cbuf)-3; if (strcmp(p, "-->")==0) { *p=0; rv=GWEN_XmlCtx_AddComment(ctx, GWEN_Buffer_GetStart(cbuf)); if (rv) { GWEN_Buffer_free(cbuf); return rv; } GWEN_Buffer_free(cbuf); return 0; } } } } else { GWEN_Buffer_AppendString(dbuf, "!-"); } } else uc='!'; } /* read name */ for (;;) { if (uc==' ' || uc=='>' || uc=='/') break; else if (GWEN_Buffer_GetUsedBytes(dbuf)) { unsigned char fc; fc=*GWEN_Buffer_GetStart(dbuf); if ((fc=='!' && uc=='!') || (fc=='?' && uc=='?')) { GWEN_FASTBUFFER_PEEKBYTE(fb, chr); if (chr<0) { return chr; } uc=(unsigned char) chr; if (uc=='>') { fb->bufferReadPos++; break; } } } GWEN_Buffer_AppendByte(dbuf, uc); GWEN_FASTBUFFER_READBYTE(fb, chr); if (chr<0) { if (chr==GWEN_ERROR_EOF) { return chr; } else { return chr; } } uc=(unsigned char) chr; } /* tag started */ if (GWEN_Buffer_GetUsedBytes(dbuf)==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Element name missing"); return GWEN_ERROR_BAD_DATA; } rv=GWEN_XmlCtx_StartTag(ctx, GWEN_Buffer_GetStart(dbuf)); if (rv) { return rv; } if (uc=='/' || uc=='?' || uc=='!') { GWEN_FASTBUFFER_PEEKBYTE(fb, chr); if (chr<0) { return chr; } uc=(unsigned char) chr; if (uc=='>') { fb->bufferReadPos++; rv=GWEN_XmlCtx_EndTag(ctx, 1); if (rv) { return rv; } /* tag finished */ return 0; } } if (uc=='>') { rv=GWEN_XmlCtx_EndTag(ctx, 0); if (rv) { return rv; } /* tag finished */ return 0; } /* read attributes */ for (;;) { GWEN_BUFFER *nbuf; GWEN_BUFFER *vbuf=NULL; nbuf=GWEN_Buffer_new(0, 256, 0, 1); /* skip blanks */ for (;;) { GWEN_FASTBUFFER_READBYTE(fb, chr); if (chr<0) { GWEN_Buffer_free(nbuf); return chr; } uc=(unsigned char) chr; if (uc>32) break; } /* read attribute name */ for (;;) { if (uc=='/' || uc=='!' || uc=='?' || uc=='=' || uc=='>') break; GWEN_Buffer_AppendByte(nbuf, uc); GWEN_FASTBUFFER_READBYTE(fb, chr); if (chr<0) { GWEN_Buffer_free(nbuf); return chr; } uc=(unsigned char) chr; } if (GWEN_Buffer_GetUsedBytes(nbuf)) { if (uc=='=') { /* read attribute value if there is an equation mark */ int inQuote=0; vbuf=GWEN_Buffer_new(0, 256, 0, 1); for (;;) { GWEN_FASTBUFFER_READBYTE(fb, chr); if (chr<0) { GWEN_Buffer_free(nbuf); return chr; } uc=(unsigned char) chr; if (uc=='"') { if (inQuote) { inQuote=0; break; } else inQuote=1; } else { if (!inQuote) { if (uc=='>' || uc<33) break; else if (uc=='<') { DBG_ERROR(GWEN_LOGDOMAIN, "Nested element definitions"); GWEN_Buffer_free(vbuf); GWEN_Buffer_free(nbuf); return GWEN_ERROR_BAD_DATA; } else if (GWEN_Buffer_GetUsedBytes(dbuf)) { if (uc=='/' || uc=='!' || uc=='?') { unsigned char tc; GWEN_FASTBUFFER_PEEKBYTE(fb, chr); if (chr<0) { GWEN_Buffer_free(vbuf); GWEN_Buffer_free(nbuf); return chr; } tc=(unsigned char) chr; if (tc=='>') { break; } } } } GWEN_Buffer_AppendByte(vbuf, uc); } } if (inQuote) { DBG_ERROR(GWEN_LOGDOMAIN, "No matching number of quote chars"); GWEN_Buffer_free(vbuf); GWEN_Buffer_free(nbuf); return GWEN_ERROR_BAD_DATA; } if (GWEN_Buffer_GetUsedBytes(vbuf)==0) { GWEN_Buffer_free(vbuf); vbuf=NULL; } } rv=GWEN_XmlCtx_AddAttr(ctx, GWEN_Buffer_GetStart(nbuf), vbuf?GWEN_Buffer_GetStart(vbuf):NULL); if (rv) { GWEN_Buffer_free(vbuf); GWEN_Buffer_free(nbuf); return rv; } } GWEN_Buffer_free(vbuf); GWEN_Buffer_free(nbuf); if (uc=='>' || uc=='?' || uc=='!' || uc=='/') break; } if (uc=='?' || uc=='!' || uc=='/') { unsigned char ucsave=uc; GWEN_FASTBUFFER_PEEKBYTE(fb, chr); if (chr<0) { return chr; } uc=(unsigned char) chr; if (uc=='>') { DBG_VERBOUS(GWEN_LOGDOMAIN, "Ending tag [%s]", GWEN_Buffer_GetStart(dbuf)); fb->bufferReadPos++; rv=GWEN_XmlCtx_EndTag(ctx, 1); if (rv) { return rv; } /* tag finished */ return 0; } else { DBG_ERROR(GWEN_LOGDOMAIN, "Got an unexpected character here (after %02x[%c]): %02x[%c], " "maybe the text contains unescaped XML characters?", ucsave, ucsave, uc, uc); } } else if (uc=='>') { rv=GWEN_XmlCtx_EndTag(ctx, 0); if (rv) { return rv; } /* tag finished */ return 0; } DBG_ERROR(GWEN_LOGDOMAIN, "Internal error: Should never reach this point"); return GWEN_ERROR_INTERNAL; } int GWEN_XML_ReadFromFastBuffer(GWEN_XML_CONTEXT *ctx, GWEN_FAST_BUFFER *fb) { int oks=0; int startingDepth; GWEN_BUFFER *workBuf; startingDepth=GWEN_XmlCtx_GetDepth(ctx); workBuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_XmlCtx_ResetFinishedElement(ctx); for (;;) { int rv; GWEN_FASTBUFFER_PEEKBYTE(fb, rv); if (rv<0) { if (rv!=GWEN_ERROR_EOF || !oks) { DBG_DEBUG(GWEN_LOGDOMAIN, "here (%d), after reading %d bytes", rv, (int) GWEN_FastBuffer_GetBytesRead(fb)); GWEN_Buffer_free(workBuf); return rv; } GWEN_Buffer_free(workBuf); return 0; } rv=GWEN_XML__ReadData(ctx, fb, GWEN_XmlCtx_GetFlags(ctx)); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(workBuf); return rv; } oks=1; GWEN_FASTBUFFER_PEEKBYTE(fb, rv); if (rv<0) { if (rv!=GWEN_ERROR_EOF || !oks || (GWEN_XmlCtx_GetDepth(ctx)!=startingDepth)) { DBG_INFO(GWEN_LOGDOMAIN, "here (rv=%d, oks=%d, depth=%d, startingDepth=%d)", rv, oks, GWEN_XmlCtx_GetDepth(ctx), startingDepth); GWEN_Buffer_free(workBuf); return rv; } GWEN_Buffer_free(workBuf); return 0; } else if (rv=='<') { fb->bufferReadPos++; rv=GWEN_XML__ReadTag(ctx, fb, GWEN_XmlCtx_GetFlags(ctx), workBuf); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(workBuf); return rv; } GWEN_Buffer_Reset(workBuf); oks=1; } if (GWEN_XmlCtx_GetFinishedElement(ctx) && GWEN_XmlCtx_GetDepth(ctx)==startingDepth) { DBG_INFO(GWEN_LOGDOMAIN, "Finished element at depth %d", GWEN_XmlCtx_GetDepth(ctx)); break; } } if (GWEN_XmlCtx_GetDepth(ctx)!=startingDepth) { DBG_ERROR(GWEN_LOGDOMAIN, "Not on same level where we started...(%d!=%d)", GWEN_XmlCtx_GetDepth(ctx), startingDepth); } GWEN_Buffer_free(workBuf); return 0; } int GWEN_XML__ReadAllFromIo(GWEN_XML_CONTEXT *ctx, GWEN_SYNCIO *sio) { GWEN_FAST_BUFFER *fb; int oks=0; fb=GWEN_FastBuffer_new(GWEN_XML_BUFFERSIZE, sio); assert(fb); for (;;) { int rv; rv=GWEN_XML_ReadFromFastBuffer(ctx, fb); if (rv<0) { if (rv==GWEN_ERROR_EOF && oks) break; else { DBG_INFO(GWEN_LOGDOMAIN, "here (rv=%d, oks=%d)", rv, oks); GWEN_FastBuffer_free(fb); return rv; } } oks=1; } GWEN_FastBuffer_free(fb); return 0; } int GWEN_XMLContext_ReadFromIo(GWEN_XML_CONTEXT *ctx, GWEN_SYNCIO *sio) { #if 0 GWEN_FAST_BUFFER *fb; int rv; fb=GWEN_FastBuffer_new(GWEN_XML_BUFFERSIZE, sio); assert(fb); rv=GWEN_XML_ReadFromFastBuffer(ctx, fb); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here"); GWEN_FastBuffer_free(fb); return rv; } GWEN_FastBuffer_free(fb); return 0; #else int rv; rv=GWEN_XML__ReadAllFromIo(ctx, sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; #endif } int GWEN_XMLContext_ReadFromFile(GWEN_XML_CONTEXT *ctx, const char *fname) { GWEN_SYNCIO *sio; int rv; sio=GWEN_SyncIo_File_new(fname, GWEN_SyncIo_File_CreationMode_OpenExisting); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); return rv; } rv=GWEN_XML__ReadAllFromIo(ctx, sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return 0; } int GWEN_XMLContext_ReadFromString(GWEN_XML_CONTEXT *ctx, const char *text) { if (text && *text) { GWEN_SYNCIO *sio; int rv; GWEN_BUFFER *tbuf; int i; i=strlen(text)+1; tbuf=GWEN_Buffer_new((char*)text, i, i, 0); /* static buffer, don't resize */ GWEN_Buffer_SubMode(tbuf, GWEN_BUFFER_MODE_DYNAMIC); GWEN_Buffer_AddMode(tbuf, GWEN_BUFFER_MODE_READONLY); sio=GWEN_SyncIo_Memory_new(tbuf, 0); rv=GWEN_XML__ReadAllFromIo(ctx, sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); GWEN_Buffer_free(tbuf); return rv; } GWEN_SyncIo_free(sio); GWEN_Buffer_free(tbuf); } return 0; } int GWEN_XML_ReadFile(GWEN_XMLNODE *n, const char *filepath, uint32_t flags) { GWEN_XML_CONTEXT *ctx; GWEN_SYNCIO *sio; int rv; sio=GWEN_SyncIo_File_new(filepath, GWEN_SyncIo_File_CreationMode_OpenExisting); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); return rv; } ctx=GWEN_XmlCtxStore_new(n, flags); rv=GWEN_XML__ReadAllFromIo(ctx, sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); GWEN_XmlCtx_free(ctx); return rv; } GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); GWEN_XmlCtx_free(ctx); return 0; } GWEN_XMLNODE *GWEN_XMLNode_fromString(const char *s, int len, uint32_t flags) { #if 0 GWEN_XML_CONTEXT *ctx; GWEN_SYNCIO *sio; GWEN_XMLNODE *n; int rv; if (len==0) len=strlen(s); sio=GWEN_SyncIo_Memory_fromBuffer((const uint8_t*)s, len); n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "doc"); ctx=GWEN_XmlCtxStore_new(n, flags); rv=GWEN_XML__ReadAllFromIo(ctx, sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); GWEN_XmlCtx_free(ctx); GWEN_XMLNode_free(n); return NULL; } GWEN_SyncIo_free(sio); GWEN_XmlCtx_free(ctx); return n; #else GWEN_XML_CONTEXT *ctx; GWEN_SYNCIO *sio; GWEN_XMLNODE *n; int rv; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new((char*)s, len, len, 0); /* static buffer, don't resize */ GWEN_Buffer_SubMode(tbuf, GWEN_BUFFER_MODE_DYNAMIC); GWEN_Buffer_AddMode(tbuf, GWEN_BUFFER_MODE_READONLY); sio=GWEN_SyncIo_Memory_new(tbuf, 0); n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "doc"); ctx=GWEN_XmlCtxStore_new(n, flags); rv=GWEN_XML__ReadAllFromIo(ctx, sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_XmlCtx_free(ctx); GWEN_XMLNode_free(n); GWEN_SyncIo_free(sio); GWEN_Buffer_free(tbuf); return NULL; } GWEN_XmlCtx_free(ctx); GWEN_SyncIo_free(sio); GWEN_Buffer_free(tbuf); return n; #endif } gwenhywfar-4.15.2beta/src/parser/url_p.h0000644000175000017500000000123112416477066015130 00000000000000/* This file is auto-generated from "url.xml" by the typemaker tool of Gwenhywfar. Do not edit this file -- all changes will be lost! */ #ifndef URL_P_H #define URL_P_H #include "url_l.h" struct GWEN_URL { GWEN_LIST_ELEMENT(GWEN_URL) int _usage; int _modified; char *protocol; char *server; int port; char *path; char *userName; char *password; GWEN_DB_NODE *vars; char *url; }; /** * Returns the property @ref GWEN_URL_Url */ GWENHYWFAR_API const char *GWEN_Url_GetUrl(const GWEN_URL *el); /** * Set the property @ref GWEN_URL_Url */ GWENHYWFAR_API void GWEN_Url_SetUrl(GWEN_URL *el, const char *d); #endif /* URL_P_H */ gwenhywfar-4.15.2beta/src/parser/xmlctx_p.h0000644000175000017500000000531012416477066015647 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: xsd.h 898 2005-11-03 09:51:39Z cstim $ begin : Sat Jun 28 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_XMLCTX_P_H #define GWENHYWFAR_XMLCTX_P_H #include "xmlctx_l.h" struct GWEN_XML_CONTEXT { GWEN_INHERIT_ELEMENT(GWEN_XML_CONTEXT) uint32_t flags; GWEN_XMLNODE *currentNode; GWEN_XMLNODE *currentHeader; GWEN_XMLCTX_STARTTAG_FN startTagFn; GWEN_XMLCTX_ENDTAG_FN endTagFn; GWEN_XMLCTX_ADDDATA_FN addDataFn; GWEN_XMLCTX_ADDCOMMENT_FN addCommentFn; GWEN_XMLCTX_ADDATTR_FN addAttrFn; int finishedElements; int depth; int _refCount; }; static int GWEN_XmlCtxStore_StartTag(GWEN_XML_CONTEXT *ctx, const char *tagName); static int GWEN_XmlCtxStore_EndTag(GWEN_XML_CONTEXT *ctx, int closing); static int GWEN_XmlCtxStore_AddData(GWEN_XML_CONTEXT *ctx, const char *data); static int GWEN_XmlCtxStore_AddComment(GWEN_XML_CONTEXT *ctx, const char *data); static int GWEN_XmlCtxStore_AddAttr(GWEN_XML_CONTEXT *ctx, const char *attrName, const char *attrData); #endif gwenhywfar-4.15.2beta/src/parser/configmgr.h0000644000175000017500000001004212416477066015762 00000000000000/*************************************************************************** begin : Mon Aug 11 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_CONFIGMGR_H #define GWENHYWFAR_CONFIGMGR_H #include #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_CONFIGMGR GWEN_CONFIGMGR; GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_CONFIGMGR, GWENHYWFAR_API) #define GWEN_CONFIGMGR_PLUGIN_NAME "configmgr" #define GWEN_CONFIGMGR_FOLDER "configmgr" #include #include /** * Creates a GWEN_CONFIGMGR object. The given URL is inspected for the protocol part * which is used to lookup the plugin responsible. * A generic file based configuration manager might have the URL * "dir://home/martin/testconfig" which means that all files of the configuration * manager reside below the folder "/home/martin/testconfig". * Other plugins might have another URL scheme, however, the protocol part always * specifies the plugin (in this case "dir"). */ GWENHYWFAR_API GWEN_CONFIGMGR *GWEN_ConfigMgr_Factory(const char *url); GWENHYWFAR_API void GWEN_ConfigMgr_free(GWEN_CONFIGMGR *mgr); GWENHYWFAR_API int GWEN_ConfigMgr_GetGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName, GWEN_DB_NODE **pDb); GWENHYWFAR_API int GWEN_ConfigMgr_SetGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName, GWEN_DB_NODE *db); GWENHYWFAR_API int GWEN_ConfigMgr_LockGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName); GWENHYWFAR_API int GWEN_ConfigMgr_UnlockGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName); GWENHYWFAR_API int GWEN_ConfigMgr_GetUniqueId(GWEN_CONFIGMGR *mgr, const char *groupName, char *buffer, uint32_t bufferLen); GWENHYWFAR_API int GWEN_ConfigMgr_DeleteGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName); GWENHYWFAR_API int GWEN_ConfigMgr_ListGroups(GWEN_CONFIGMGR *mgr, GWEN_STRINGLIST *sl); GWENHYWFAR_API int GWEN_ConfigMgr_ListSubGroups(GWEN_CONFIGMGR *mgr, const char *groupName, GWEN_STRINGLIST *sl); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/parser/tlv_p.h0000644000175000017500000000146112364015347015130 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sun Jun 13 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWENHYWFAR_TLV_P_H #define GWENHYWFAR_TLV_P_H #include struct GWEN_TLV { GWEN_LIST_ELEMENT(GWEN_TLV) int isBerTlv; unsigned int tagMode; unsigned int tagSize; unsigned int tagType; unsigned int tagLength; void *tagData; }; #endif /* GWENHYWFAR_TLV_P_H */ gwenhywfar-4.15.2beta/src/parser/Makefile.am0000644000175000017500000000222212364015347015663 00000000000000INCLUDES= -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/parser @all_includes@ AM_CFLAGS=@visibility_cflags@ -DBUILDING_GWENHYWFAR typefiles=url.xml EXTRA_DIST=$(typefiles) dbrw.c xmlrw.c xmlglobalize.c noinst_LTLIBRARIES=libparser.la noinst_HEADERS=\ db_p.h \ dbio_l.h \ dbio_p.h \ configmgr_l.h \ configmgr_p.h \ msgengine_p.h \ tag16_p.h \ tlv_p.h \ url_l.h \ url_p.h \ xml_p.h \ xml_l.h \ xmlctx_l.h \ xmlctx_p.h \ xsdnode_l.h \ xsdnode_p.h iheaderdir=$(gwenhywfar_headerdir_am)/gwenhywfar iheader_HEADERS=\ base64.h \ configmgr.h \ configmgr_be.h \ db.h \ dbio.h \ dbio_be.h \ msgengine.h \ path.h \ tag16.h \ text.h \ tlv.h \ url.h urlfns.h \ xml.h \ xmlctx.h \ xsdnode.h libparser_la_SOURCES=\ base64.c \ configmgr.c \ db.c \ dbio.c \ msgengine.c \ path.c \ tag16.c \ text.c \ tlv.c \ url.c urlfns.c \ xml.c \ xmlctx.c \ xsdnode.c sources: for f in $(libparser_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-4.15.2beta/src/parser/msgengine_p.h0000644000175000017500000001746112416477066016316 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Fri Jul 04 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_MSGENGINE_P_H #define GWENHYWFAR_MSGENGINE_P_H #include #include #include #include #include #include #define GWEN_MSGENGINE_CHARSTOESCAPE ":+\'" #define GWEN_MSGENGINE_DEFAULT_GROUPDELIM ":" #define GWEN_MSGENGINE_DEFAULT_DELIMITERS ":+\'" #define GWEN_MSGENGINE_VARNAME_WIDTH 30 #define GWEN_MSGENGINE_TYPENAME_WIDTH 10 #define GWEN_MSGENGINE_SHOW_FLAGS_OPTIONAL 0x00010000 #define GWEN_MSGENGINE_TRUSTEDDATA_MAXPOS 32 struct GWEN__MSGENGINE { GWEN_INHERIT_ELEMENT(GWEN_MSGENGINE) GWEN_XMLNODE *defs; int ownDefs; char escapeChar; char *charsToEscape; char *delimiters; /*char *secMode; */ /*unsigned int protocolVersion; */ GWEN_DB_NODE *globalValues; GWEN_MSGENGINE_TYPEREAD_PTR typeReadPtr; GWEN_MSGENGINE_TYPEWRITE_PTR typeWritePtr; GWEN_MSGENGINE_TYPECHECK_PTR typeCheckPtr; GWEN_MSGENGINE_BINTYPEREAD_PTR binTypeReadPtr; GWEN_MSGENGINE_BINTYPEWRITE_PTR binTypeWritePtr; GWEN_MSGENGINE_GETCHARVALUE_PTR getCharValuePtr; GWEN_MSGENGINE_GETINTVALUE_PTR getIntValuePtr; GWEN_MSGENGINE_GETGLOBALVALUES_PTR getGlobalValuesPtr; GWEN_MSGENGINE_FREEDATA_PTR freeDataPtr; GWEN_MSGENGINE_TRUSTEDDATA *trustInfos; void *inheritorData; uint32_t usage; }; int GWEN_MsgEngine__WriteValue(GWEN_MSGENGINE *e, GWEN_BUFFER *gbuf, GWEN_BUFFER *data, GWEN_XMLNODE *node); int GWEN_MsgEngine__WriteElement(GWEN_MSGENGINE *e, GWEN_BUFFER *gbuf, GWEN_XMLNODE *node, GWEN_XMLNODE *rnode, GWEN_DB_NODE *gr, int loopNr, int isOptional, GWEN_XMLNODE_PATH *nodePath); int GWEN_MsgEngine__WriteGroup(GWEN_MSGENGINE *e, GWEN_BUFFER *gbuf, GWEN_XMLNODE *node, /** format node */ GWEN_XMLNODE *rnode, /** reference node */ GWEN_DB_NODE *gr, int groupIsOptional, GWEN_XMLNODE_PATH *nodePath); int GWEN_MsgEngine__ShowElement(GWEN_MSGENGINE *e, const char *path, GWEN_XMLNODE *node, GWEN_STRINGLIST *sl, uint32_t flags); int GWEN_MsgEngine__ShowGroup(GWEN_MSGENGINE *e, const char *path, GWEN_XMLNODE *node, GWEN_XMLNODE *rnode, GWEN_STRINGLIST *sl, uint32_t flags); int GWEN_MsgEngine__ListElement(GWEN_MSGENGINE *e, const char *path, GWEN_XMLNODE *node, GWEN_STRINGLIST *sl, GWEN_XMLNODE *listNode, uint32_t flags); int GWEN_MsgEngine__ListGroup(GWEN_MSGENGINE *e, const char *path, GWEN_XMLNODE *node, GWEN_XMLNODE *rnode, GWEN_STRINGLIST *sl, GWEN_XMLNODE *listNode, uint32_t flags); int GWEN_MsgEngine__ReadValue(GWEN_MSGENGINE *e, GWEN_BUFFER *msgbuf, GWEN_XMLNODE *node, GWEN_XMLNODE *rnode, GWEN_BUFFER *vbuf, const char *delimiters, uint32_t flags); int GWEN_MsgEngine__ReadGroup(GWEN_MSGENGINE *e, GWEN_BUFFER *msgbuf, GWEN_XMLNODE *node, GWEN_XMLNODE *rnode, GWEN_DB_NODE *gr, const char *delimiters, uint32_t flags); /** * @param dnode node of the element to transform */ const char *GWEN_MsgEngine__findInValues(GWEN_MSGENGINE *e, GWEN_XMLNODE *node, GWEN_XMLNODE *dnode, const char *name, unsigned int *datasize); const char *GWEN_MsgEngine__TransformValue(GWEN_MSGENGINE *e, const char *pvalue, GWEN_XMLNODE *node, GWEN_XMLNODE *dnode, unsigned int *datasize); const char *GWEN_MsgEngine__SearchForValue(GWEN_MSGENGINE *e, GWEN_XMLNODE *node, GWEN_XMLNODE_PATH *nodePath, const char *name, unsigned int *datasize); int GWEN_MsgEngine__IsCharTyp(GWEN_MSGENGINE *e, const char *type); int GWEN_MsgEngine__IsIntTyp(GWEN_MSGENGINE *e, const char *type); int GWEN_MsgEngine__IsBinTyp(GWEN_MSGENGINE *e, const char *type); int GWEN_MsgEngine_GetHighestTrustLevel(GWEN_XMLNODE *node, GWEN_XMLNODE *refnode); GWEN_DB_NODE *GWEN_MsgEngine__GetGlobalValues(GWEN_MSGENGINE *e); GWEN_XMLNODE *GWEN_MsgEngine__GetGroup(GWEN_MSGENGINE *e, GWEN_XMLNODE *node, const char *t, int version, const char *pvalue); GWEN_XMLNODE *GWEN_MsgEngine_GetGroup(GWEN_MSGENGINE *e, GWEN_XMLNODE *node, const GWEN_XMLNODE_PATH *nodePath, const char *t, int version, const char *pvalue); int GWEN_MsgEngine__GetInline(GWEN_MSGENGINE *e, GWEN_XMLNODE *node, GWEN_BUFFER *mbuf); struct GWEN_MSGENGINE_TRUSTEDDATA { GWEN_MSGENGINE_TRUSTEDDATA *next; char *data; unsigned int size; char *description; unsigned int trustLevel; char *replacement; unsigned int positions[GWEN_MSGENGINE_TRUSTEDDATA_MAXPOS]; unsigned int posCount; unsigned int posPointer; }; #endif gwenhywfar-4.15.2beta/src/parser/dbio.c0000644000175000017500000003120412416477066014722 00000000000000/*************************************************************************** begin : Wed Mar 31 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "dbio_p.h" #include #include #include #include #include #include #include #include #include #include #include /* TODO: #include */ #include #include #include #include #include #include #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_FCNTL_H # include #endif #ifdef HAVE_UNISTD_H # include #endif #ifdef OS_WIN32 # define DIRSEP "\\" # include #else # define DIRSEP "/" #endif GWEN_LIST_FUNCTIONS(GWEN_DBIO, GWEN_DBIO) GWEN_INHERIT_FUNCTIONS(GWEN_DBIO) GWEN_INHERIT(GWEN_PLUGIN, GWEN_DBIO_PLUGIN) int GWEN_DBIO_ModuleInit(void) { GWEN_PLUGIN_MANAGER *pm; int err; GWEN_STRINGLIST *sl; pm=GWEN_PluginManager_new("dbio", GWEN_PM_LIBNAME); err=GWEN_PluginManager_Register(pm); if (err) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not register DBIO plugin manager"); return err; } /* create plugin paths */ sl=GWEN_PathManager_GetPaths(GWEN_PM_LIBNAME, GWEN_PM_PLUGINDIR); if (sl) { GWEN_STRINGLISTENTRY *se; GWEN_BUFFER *pbuf; pbuf=GWEN_Buffer_new(0, 256, 0, 1); se=GWEN_StringList_FirstEntry(sl); while(se) { GWEN_Buffer_AppendString(pbuf, GWEN_StringListEntry_Data(se)); GWEN_Buffer_AppendString(pbuf, DIRSEP GWEN_DBIO_FOLDER); DBG_INFO(GWEN_LOGDOMAIN, "Adding plugin path [%s]", GWEN_Buffer_GetStart(pbuf)); GWEN_PluginManager_AddPath(pm, GWEN_PM_LIBNAME, GWEN_Buffer_GetStart(pbuf)); GWEN_Buffer_Reset(pbuf); se=GWEN_StringListEntry_Next(se); } GWEN_Buffer_free(pbuf); GWEN_StringList_free(sl); } return 0; } int GWEN_DBIO_ModuleFini(void) { GWEN_PLUGIN_MANAGER *pm; pm=GWEN_PluginManager_FindPluginManager("dbio"); if (pm) { int rv; rv=GWEN_PluginManager_Unregister(pm); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not unregister DBIO plugin manager (%d)", rv); return rv; } else GWEN_PluginManager_free(pm); } return 0; } GWEN_PLUGIN *GWEN_DBIO_Plugin_new(GWEN_PLUGIN_MANAGER *pm, const char *name, const char *fileName) { GWEN_PLUGIN *pl; GWEN_DBIO_PLUGIN *pldbio; pl=GWEN_Plugin_new(pm, name, fileName); GWEN_NEW_OBJECT(GWEN_DBIO_PLUGIN, pldbio); GWEN_INHERIT_SETDATA(GWEN_PLUGIN, GWEN_DBIO_PLUGIN, pl, pldbio, GWEN_DBIO_Plugin_FreeData); return pl; } void GWENHYWFAR_CB GWEN_DBIO_Plugin_FreeData(GWEN_UNUSED void *bp, void *p) { GWEN_DBIO_PLUGIN *pldbio; pldbio=(GWEN_DBIO_PLUGIN*)p; GWEN_FREE_OBJECT(pldbio); } GWEN_DBIO *GWEN_DBIO_Plugin_Factory(GWEN_PLUGIN *pl) { GWEN_DBIO_PLUGIN *pldbio; assert(pl); pldbio=GWEN_INHERIT_GETDATA(GWEN_PLUGIN, GWEN_DBIO_PLUGIN, pl); assert(pldbio); assert(pldbio->factoryFn); return pldbio->factoryFn(pl); } void GWEN_DBIO_Plugin_SetFactoryFn(GWEN_PLUGIN *pl, GWEN_DBIO_PLUGIN_FACTORYFN f) { GWEN_DBIO_PLUGIN *pldbio; assert(pl); pldbio=GWEN_INHERIT_GETDATA(GWEN_PLUGIN, GWEN_DBIO_PLUGIN, pl); assert(pldbio); pldbio->factoryFn=f; } GWEN_DBIO *GWEN_DBIO_new(const char *name, const char *descr) { GWEN_DBIO *dbio; assert(name); GWEN_NEW_OBJECT(GWEN_DBIO, dbio); GWEN_LIST_INIT(GWEN_DBIO, dbio); GWEN_INHERIT_INIT(GWEN_DBIO, dbio); dbio->name=strdup(name); if (descr) dbio->descr=strdup(descr); dbio->usage=1; return dbio; } void GWEN_DBIO_free(GWEN_DBIO *dbio) { if (dbio) { assert(dbio->usage); if (--(dbio->usage)==0) { GWEN_INHERIT_FINI(GWEN_DBIO, dbio); GWEN_LIST_FINI(GWEN_DBIO, dbio); free(dbio->name); free(dbio->descr); GWEN_FREE_OBJECT(dbio); } } } void GWEN_DBIO_Attach(GWEN_DBIO *dbio) { assert(dbio); dbio->usage++; } int GWEN_DBIO_Import(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *db, GWEN_DB_NODE *params, uint32_t flags) { assert(dbio); assert(sio); assert(db); if (GWEN_SyncIo_GetStatus(sio) != GWEN_SyncIo_Status_Connected) { DBG_ERROR(GWEN_LOGDOMAIN, "GWEN_SYNCIO %s not connected; did you forget to call GWEN_SyncIo_Connect()?", GWEN_SyncIo_GetTypeName(sio)); return -1; } if (dbio->importFn) return dbio->importFn(dbio, sio, db, params, flags); else { DBG_INFO(GWEN_LOGDOMAIN, "No import function set"); return -1; } } int GWEN_DBIO_Export(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *db, GWEN_DB_NODE *params, uint32_t flags) { assert(dbio); assert(sio); assert(db); if (dbio->exportFn) return dbio->exportFn(dbio, sio, db, params, flags); else { DBG_INFO(GWEN_LOGDOMAIN, "No export function set"); return -1; } } GWEN_DBIO_CHECKFILE_RESULT GWEN_DBIO_CheckFile(GWEN_DBIO *dbio, const char *fname) { assert(dbio); assert(fname); if (dbio->checkFileFn) return dbio->checkFileFn(dbio, fname); else { DBG_INFO(GWEN_LOGDOMAIN, "No checkFile function set"); return GWEN_DBIO_CheckFileResultUnknown; } } const char *GWEN_DBIO_GetName(const GWEN_DBIO *dbio) { assert(dbio); return dbio->name; } const char *GWEN_DBIO_GetDescription(const GWEN_DBIO *dbio) { assert(dbio); return dbio->descr; } void GWEN_DBIO_SetImportFn(GWEN_DBIO *dbio, GWEN_DBIO_IMPORTFN f) { assert(dbio); dbio->importFn=f; } void GWEN_DBIO_SetExportFn(GWEN_DBIO *dbio, GWEN_DBIO_EXPORTFN f) { assert(dbio); dbio->exportFn=f; } void GWEN_DBIO_SetCheckFileFn(GWEN_DBIO *dbio, GWEN_DBIO_CHECKFILEFN f) { assert(dbio); dbio->checkFileFn=f; } GWEN_DBIO *GWEN_DBIO_GetPlugin(const char *modname) { GWEN_PLUGIN_MANAGER *pm; GWEN_PLUGIN *pl; GWEN_DBIO *dbio; pm=GWEN_PluginManager_FindPluginManager("dbio"); if (!pm) { DBG_ERROR(GWEN_LOGDOMAIN, "No plugin manager for \"dbio\" found"); return 0; } pl=GWEN_PluginManager_GetPlugin(pm, modname); if (!pl) { DBG_INFO(GWEN_LOGDOMAIN, "DBIO-Plugin \"%s\" not found", modname); return 0; } dbio=GWEN_DBIO_Plugin_Factory(pl); if (!dbio) { DBG_INFO(GWEN_LOGDOMAIN, "Plugin did not create a GWEN_DBIO"); } return dbio; } int GWEN_DBIO_ExportToFile(GWEN_DBIO *dbio, const char *fname, GWEN_DB_NODE *db, GWEN_DB_NODE *params, uint32_t dbflags) { int rv; GWEN_FSLOCK *lck=0; GWEN_SYNCIO *sio; /* if locking requested */ if (dbflags & GWEN_DB_FLAGS_LOCKFILE) { GWEN_FSLOCK_RESULT res; lck=GWEN_FSLock_new(fname, GWEN_FSLock_TypeFile); assert(lck); res=GWEN_FSLock_Lock(lck, GWEN_DB_DEFAULT_LOCK_TIMEOUT, 0); if (res!=GWEN_FSLock_ResultOk) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not apply lock to file \"%s\" (%d)", fname, res); GWEN_FSLock_free(lck); return -1; } } /* open file */ sio=GWEN_SyncIo_File_new(fname, GWEN_SyncIo_File_CreationMode_CreateAlways); if (dbflags & GWEN_DB_FLAGS_APPEND_FILE) GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_APPEND); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE | GWEN_SYNCIO_FILE_FLAGS_UREAD | GWEN_SYNCIO_FILE_FLAGS_UWRITE); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); if (lck) { GWEN_FSLock_Unlock(lck); GWEN_FSLock_free(lck); } return rv; } rv=GWEN_DBIO_Export(dbio, sio, db, params, dbflags); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); if (lck) { GWEN_FSLock_Unlock(lck); GWEN_FSLock_free(lck); } return rv; } rv=GWEN_SyncIo_Disconnect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); if (lck) { GWEN_FSLock_Unlock(lck); GWEN_FSLock_free(lck); } return rv; } GWEN_SyncIo_free(sio); /* remove lock, if any */ if (lck) { GWEN_FSLOCK_RESULT res; res=GWEN_FSLock_Unlock(lck); if (res!=GWEN_FSLock_ResultOk) { DBG_WARN(GWEN_LOGDOMAIN, "Could not remove lock on file \"%s\" (%d)", fname, res); } GWEN_FSLock_free(lck); } return 0; } int GWEN_DBIO_ExportToBuffer(GWEN_DBIO *dbio, GWEN_BUFFER *buf, GWEN_DB_NODE *db, GWEN_DB_NODE *params, uint32_t flags) { GWEN_SYNCIO *sio; int rv; /* create SyncIO, don't take over buf */ sio=GWEN_SyncIo_Memory_new(buf, 0); rv=GWEN_DBIO_Export(dbio, sio, db, params, flags); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_free(sio); return 0; } int GWEN_DBIO_ImportFromFile(GWEN_DBIO *dbio, const char *fname, GWEN_DB_NODE *db, GWEN_DB_NODE *params, uint32_t dbflags) { GWEN_SYNCIO *sio; int rv; GWEN_FSLOCK *lck=0; /* if locking requested */ if (dbflags & GWEN_DB_FLAGS_LOCKFILE) { GWEN_FSLOCK_RESULT res; lck=GWEN_FSLock_new(fname, GWEN_FSLock_TypeFile); assert(lck); res=GWEN_FSLock_Lock(lck, GWEN_DB_DEFAULT_LOCK_TIMEOUT, 0); if (res!=GWEN_FSLock_ResultOk) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not apply lock to file \"%s\" (%d)", fname, res); GWEN_FSLock_free(lck); return GWEN_ERROR_IO; } } sio=GWEN_SyncIo_File_new(fname, GWEN_SyncIo_File_CreationMode_OpenExisting); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); if (lck) { GWEN_FSLock_Unlock(lck); GWEN_FSLock_free(lck); } return rv; } /* read from file */ rv=GWEN_DBIO_Import(dbio, sio, db, params, dbflags); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); if (lck) { GWEN_FSLock_Unlock(lck); GWEN_FSLock_free(lck); } return rv; } /* close io layer */ GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); /* remove lock, if any */ if (lck) { GWEN_FSLOCK_RESULT res; res=GWEN_FSLock_Unlock(lck); if (res!=GWEN_FSLock_ResultOk) { DBG_WARN(GWEN_LOGDOMAIN, "Could not remove lock on file \"%s\" (%d)", fname, res); } GWEN_FSLock_free(lck); } return 0; } gwenhywfar-4.15.2beta/src/parser/xml.h0000644000175000017500000006511012560445316014606 00000000000000/*************************************************************************** begin : Sat Jun 28 2003 copyright : (C) 2003-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_XML_H #define GWENHYWFAR_XML_H #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif /** @defgroup MOD_XMLNODE_ALL XML Tree * @ingroup MOD_PARSER * */ /*@{*/ /** @defgroup MOD_XMLNODE XML Node * */ /*@{*/ /** @name Read Flags */ /*@{*/ /** * if set then comments are read. Otherwise they are ignored when reading * a file */ #define GWEN_XML_FLAGS_HANDLE_COMMENTS 0x0001 /** * Indent lines according to node level when writing nodes. This increases * the readability of the resulting file. */ #define GWEN_XML_FLAGS_INDENT 0x0002 /** * Let the parser accept some HTML which are known to be unclosed (e.g. * the tag "BR" in HTML tags is never closed). * If not set a "BR" tag without a corresponding "/BR" will produce an error. */ #define GWEN_XML_FLAGS_HANDLE_OPEN_HTMLTAGS 0x0004 /** * If set then data will not be condensed (e.g. multiple spaces will not * be replaced by a single one). */ #define GWEN_XML_FLAGS_NO_CONDENSE 0x0008 /** * If set then control characters (such as CR, LF) will not be removed from * data. */ #define GWEN_XML_FLAGS_KEEP_CNTRL 0x0010 #define GWEN_XML_FLAGS_KEEP_BLANKS 0x0020 #define GWEN_XML_FLAGS_SIMPLE 0x0040 /** * apply special treatment to toplevel header tags (such as <?xml>) */ #define GWEN_XML_FLAGS_HANDLE_HEADERS 0x0080 /** * If this flag is given this module will be more tolerant when encountering * and end element (e.g. </html>). If the name of the end element does * not match the currently open element then the element to be closed is * searched above the currently open element. This works around problems * with malformed XML files. */ #define GWEN_XML_FLAGS_TOLERANT_ENDTAGS 0x0100 #define GWEN_XML_FLAGS_HANDLE_NAMESPACES 0x0200 /** * combination of other flags resembling the default flags */ #define GWEN_XML_FLAGS_DEFAULT \ (\ GWEN_XML_FLAGS_INDENT | \ GWEN_XML_FLAGS_HANDLE_COMMENTS\ ) /*@}*/ /** @name Path flags for GWEN_XMLNode_SetCharValueByPath etc * */ /*@{*/ #define GWEN_XML_PATH_FLAGS_OVERWRITE_VALUES 0x00010000 /*@}*/ /** * The possible types of a GWEN_XMLNODE. */ typedef enum { /** A node can be a tag (in XML notation these are called elements). */ GWEN_XMLNodeTypeTag=0, /** A node can be some data. */ GWEN_XMLNodeTypeData, /** A node can be some XML comment. */ GWEN_XMLNodeTypeComment } GWEN_XMLNODE_TYPE; /** The abstract type XMLNODE. Each node is one node in the document * tree and can represent different things, see @ref * GWEN_XMLNODE_TYPE. */ typedef struct GWEN__XMLNODE GWEN_XMLNODE; typedef struct GWEN_XMLNODE_NAMESPACE GWEN_XMLNODE_NAMESPACE; GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_XMLNODE, GWEN_XMLNode, GWENHYWFAR_API) GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_XMLNODE, GWEN_XMLNode, GWENHYWFAR_API) GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_XMLNODE_NAMESPACE, GWEN_XMLNode_NameSpace, GWENHYWFAR_API) #ifdef __cplusplus } #endif #include #include #ifdef __cplusplus extern "C" { #endif /** @name Constructors and Destructors * */ /*@{*/ GWENHYWFAR_API GWEN_XMLNODE *GWEN_XMLNode_new(GWEN_XMLNODE_TYPE t, const char *data); /** * Free the given node (including its children nodes) */ GWENHYWFAR_API void GWEN_XMLNode_free(GWEN_XMLNODE *n); /** * Free the given node and all nodes besides this one. * Hmm, this function should not be public, I think I will move it * to xml_p.h. */ GWENHYWFAR_API void GWEN_XMLNode_freeAll(GWEN_XMLNODE *n); /** * Create and return a deep copy of the given node. */ GWENHYWFAR_API GWEN_XMLNODE *GWEN_XMLNode_dup(const GWEN_XMLNODE *n); /*@}*/ /** @name Managing Headers * *

* Headers are special tags in XML files which describe the document (such as * <?xml?> or <!DOCTYPE>). *

*

* If the flag @ref GWEN_XML_FLAGS_HANDLE_HEADERS is on upon reading of * files these special toplevel tags are added to the current node's header * list instead of the normal children node list. *

*

* If the same flag is given when writing files the header tags of the given * root node are written to the output stream before its children. *

*

* Header nodes are identified as nodes whose name begins with '?' or '!'. *

*/ /*@{*/ /** * Returns the first header tag of the given node. * Use @ref GWEN_XMLNode_Next to get the next header tag. */ GWENHYWFAR_API GWEN_XMLNODE *GWEN_XMLNode_GetHeader(const GWEN_XMLNODE *n); /** * Adds a node as a header to the given root node. */ GWENHYWFAR_API void GWEN_XMLNode_AddHeader(GWEN_XMLNODE *root, GWEN_XMLNODE *nh); /** * Removes a node from the given root nodes' header list. The header node is * just removed from the list, not freed ! */ GWENHYWFAR_API void GWEN_XMLNode_DelHeader(GWEN_XMLNODE *root, GWEN_XMLNODE *nh); /** * Clears the given root nodes' list of headers. All the tags in the header * list are also freed. */ GWENHYWFAR_API void GWEN_XMLNode_ClearHeaders(GWEN_XMLNODE *root); /*@}*/ /** @name Managing Properties/Attributes * * A property (in XML notation this is called attribute) is given * within a tag (in XML notation this is called element), like in this * example: * * @code * * @endcode */ /*@{*/ /** * Returns the value of the given property/attribute (or the default * value if the property/attribute does not exist or is empty). * * @param n node (must be a tag/element) * @param name name of the property/attribute * @param defaultValue default value to be returned if no value could * be retrieved */ GWENHYWFAR_API const char *GWEN_XMLNode_GetProperty(const GWEN_XMLNODE *n, const char *name, const char *defaultValue); /** * Sets the value of a property/attribute. This property/attribute will be created if it does not * exist and overwritten if it does. * @param n node (must be a tag/element) * @param name name of the property/attribute * @param value new value of the property/attribute */ GWENHYWFAR_API void GWEN_XMLNode_SetProperty(GWEN_XMLNODE *n, const char *name, const char *value); /** * Same as @ref GWEN_XMLNode_GetProperty, but it tries to parse the property as * an integer value. */ GWENHYWFAR_API int GWEN_XMLNode_GetIntProperty(const GWEN_XMLNODE *n, const char *name, int defaultValue); /** * Same as @ref GWEN_XMLNode_SetProperty, but for integer values. */ GWENHYWFAR_API void GWEN_XMLNode_SetIntProperty(GWEN_XMLNODE *n, const char *name, int value); /** * This function copies the properties/attributes of one tag/element * to another one. * * @param tn destination node (must be a tag/element) * @param sn source node (must be a tag/element) * @param overwrite if !=0 then existing properties/attributes in the * destination node will be overwritten. */ GWENHYWFAR_API void GWEN_XMLNode_CopyProperties(GWEN_XMLNODE *tn, const GWEN_XMLNODE *sn, int overwrite); /*@}*/ /** @name Type And Data * */ /*@{*/ /** Returns the type of the given node. */ GWENHYWFAR_API GWEN_XMLNODE_TYPE GWEN_XMLNode_GetType(const GWEN_XMLNODE *n); /** Returns the character data of the given node. */ GWENHYWFAR_API const char *GWEN_XMLNode_GetData(const GWEN_XMLNODE *n); /** Set the character data of the given node to the given value. This * function will create a deep copy of the character data. */ GWENHYWFAR_API void GWEN_XMLNode_SetData(GWEN_XMLNODE *n, const char *data); GWENHYWFAR_API const char *GWEN_XMLNode_GetNamespace(const GWEN_XMLNODE *n); GWENHYWFAR_API void GWEN_XMLNode_SetNamespace(GWEN_XMLNODE *n, const char *s); /*@}*/ /** @name Usage Counter * *

* The usage counter of a node is only used by applications, not by * Gwenhywfar itself. So if the application does not set this * counter it will always be zero. *

*

* An application could use this counter to check whether a given node * is still in use by some parts of the application in order to free * unused nodes. *

*/ /*@{*/ GWENHYWFAR_API void GWEN_XMLNode_IncUsage(GWEN_XMLNODE *n); GWENHYWFAR_API void GWEN_XMLNode_DecUsage(GWEN_XMLNODE *n); GWENHYWFAR_API uint32_t GWEN_XMLNode_GetUsage(const GWEN_XMLNODE *n); /*@}*/ /** @name Iterating Through an XML Tree * */ /*@{*/ /** INTERNAL. Iterates on the same level in the XML tree from the * given node to the next one on the same level (i.e. the returned * node has the same parent node as the given element). The returned * node may be a tag/element node, or a property/attribute node, or a * data node. You will probably prefer to use * GWEN_XMLNode_GetNextTag() instead of this function. * * @return The next node on the same level, or NULL if no more element * exists. */ GWENHYWFAR_API GWEN_XMLNODE *GWEN_XMLNode_Next(const GWEN_XMLNODE *n); /** INTERNAL. Descends in the XML tree to the first GWEN_XMLNODE below * the given node. The returned node may be a tag/element node, or a * property/attribute node, or a data node. You will probably prefer * to use GWEN_XMLNode_GetFirstTag() instead of this function. * * @return The first children tag/element, or NULL if none exists. */ GWENHYWFAR_API GWEN_XMLNODE *GWEN_XMLNode_GetChild(const GWEN_XMLNODE *n); /** Returns the parent node of the given node, or NULL if it already * is the root node. */ GWENHYWFAR_API GWEN_XMLNODE *GWEN_XMLNode_GetParent(const GWEN_XMLNODE *n); /** Descends in the XML tree to the first children tag (in XML * notation they are called elements) below the given node. * * Different from GWEN_XMLNode_GetChild() this function only looks for * another tag/element and not for a (more general) node. You will * probably prefer this function instead of GWEN_XMLNode_GetChild(). * * @return The first children tag/element, or NULL if none exists. */ GWENHYWFAR_API GWEN_XMLNODE *GWEN_XMLNode_GetFirstTag(const GWEN_XMLNODE *n); /** Iterates on the same level in the XML tree from the given tag (in * XML notation they are called elements) to the next one on the same * level (i.e. the returned element has the same parent node as the * given element). * * Different from GWEN_XMLNode_Next() this function only looks for * another tag/element and not for a (more general) node. You will * probably prefer this function instead of GWEN_XMLNode_Next(). * * @return The next tag/element on the same level, or NULL if no more * element exists. */ GWENHYWFAR_API GWEN_XMLNODE *GWEN_XMLNode_GetNextTag(const GWEN_XMLNODE *n); /** Descends in the XML tree to the first children data node below the * given node. * * Different from GWEN_XMLNode_GetChild() this function only looks for * another data node and not for a (more general) node. * * @return The first children data node, or NULL if none exists. */ GWENHYWFAR_API GWEN_XMLNODE *GWEN_XMLNode_GetFirstData(const GWEN_XMLNODE *n); /** Iterates on the same level in the XML tree from the given data * node to the next one on the same level (i.e. the returned element * has the same parent node as the given element). An XML element may * have multiple data nodes as children, and you use this function to * iterate through all of them. * * Different from GWEN_XMLNode_Next() this function only looks for * another data node and not for a (more general) node. * * @return The next data node on the same level, or NULL if no more * data node exists. */ GWENHYWFAR_API GWEN_XMLNODE *GWEN_XMLNode_GetNextData(const GWEN_XMLNODE *n); /** * Searches for the first matching tag/element below the given one. * Lets say you have the following XML file: * @code * * * * * @endcode * If you are looking for a device called "dev2" then you should call this * function like this: * @code * tag=GWEN_XMLNode_FindFirstTag(root, "DEVICE", "id", "dev2"); * @endcode * @return pointer to the tag/element if found, 0 otherwise * @param n tag/element below which to search * @param tname tag/element name (e.g. if the tag is "" then the * tag name is "TESTTAG"). Wildcards (like "*") are allowed. * * @param pname name of the property/attribute to check (if 0 then no * property/attribute comparison takes place). No wildcards allowed. * * @param pvalue optional value of the property/attribute to compare * against, wildcards allowed. */ GWENHYWFAR_API GWEN_XMLNODE *GWEN_XMLNode_FindFirstTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue); /** * Searches for the next matching tag/element after the given one one * the same level (i.e. the returned element has the same parent node * as the given element). */ GWENHYWFAR_API GWEN_XMLNODE *GWEN_XMLNode_FindNextTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue); /** * Checks whether the second node is a child of the first one. * @return 0 if statement is not true, !=0 otherwise */ GWENHYWFAR_API int GWEN_XMLNode_IsChildOf(const GWEN_XMLNODE *parent, const GWEN_XMLNODE *child); GWENHYWFAR_API int GWEN_XMLNode_GetXPath(const GWEN_XMLNODE *n1, const GWEN_XMLNODE *n2, GWEN_BUFFER *nbuf); /** * Locates a tag by its XPath. Currently attributes are not allowed, and * the flag @ref GWEN_PATH_FLAGS_VARIABLE is not supported. * Supported types of XPaths are: *
    *
  • /element[1]/element[2]
  • *
  • ../../element[5]
  • *
* and so on. As you can see index numbers are supported. * You should not use this function to create a node but rather for node * lookups. */ GWENHYWFAR_API GWEN_XMLNODE *GWEN_XMLNode_GetNodeByXPath(GWEN_XMLNODE *n, const char *path, uint32_t flags); /*@}*/ /** @name Managing Nodes * */ /*@{*/ /** * Adds a node as a child to another one. This function does not make deep * copies. Instead it takes over ownership of the new child. * @param n node to which the new node is to be added (i.e. the node which * becomes the parent of the second argument) * @param child child which is to be added (this function takes over ownership * of that node, so you MUST NOT free the node yourself) */ GWENHYWFAR_API void GWEN_XMLNode_AddChild(GWEN_XMLNODE *n, GWEN_XMLNODE *child); /** * Unlinks the given child node from its parent without freeing it. * This function relinquishes the ownership of the child to the caller who * thereby becomes responsible for freeing this node. * @param n node which is suspected to be the parent of the second argument * @param child node which is to be unlinked */ GWENHYWFAR_API void GWEN_XMLNode_UnlinkChild(GWEN_XMLNODE *n, GWEN_XMLNODE *child); /** * Unlinks and frees @b all children of the given node. */ GWENHYWFAR_API void GWEN_XMLNode_RemoveChildren(GWEN_XMLNODE *n); /** * Adds the children of the second argument as new children to the first * one. * @param n node which is to become parent of the second argument's children * @param nn node whose children are to be moved. * @param copythem if 0 then the children will be moved (leaving the node of * the second argument without children), otherwise deep copies will be made * and the node from the second argument will not be altered. * co */ GWENHYWFAR_API void GWEN_XMLNode_AddChildrenOnly(GWEN_XMLNODE *n, GWEN_XMLNODE *nn, int copythem); /** * This is a very primitive function. It looks for a node of the given type * and data matching the given one (case-insensitive) @b below the given node * (i.e. if a node is returned it will be a child of the given one). */ GWENHYWFAR_API GWEN_XMLNODE *GWEN_XMLNode_FindNode(const GWEN_XMLNODE *n, GWEN_XMLNODE_TYPE t, const char *data); /*@}*/ /** @name Reading And Writing From/To Streams * */ /*@{*/ /** * This function removes unnecessary namespaces from the given node and * all nodes below. */ GWENHYWFAR_API int GWEN_XMLNode_NormalizeNameSpaces(GWEN_XMLNODE *n); GWENHYWFAR_API int GWEN_XMLNode_StripNamespaces(GWEN_XMLNODE *n); GWENHYWFAR_API int GWEN_XMLNode_Globalize(GWEN_XMLNODE *n); GWENHYWFAR_API int GWEN_XMLNode_GlobalizeWithList(GWEN_XMLNODE *n, GWEN_XMLNODE_NAMESPACE_LIST *l, uint32_t *pLastId); GWENHYWFAR_API int GWEN_XML_ReadFromFastBuffer(GWEN_XML_CONTEXT *ctx, GWEN_FAST_BUFFER *fb); /** * Reads a single element (and all its sub-elements) from an IO layer. */ GWENHYWFAR_API int GWEN_XMLContext_ReadFromIo(GWEN_XML_CONTEXT *ctx, GWEN_SYNCIO *io); GWENHYWFAR_API int GWEN_XMLContext_ReadFromFile(GWEN_XML_CONTEXT *ctx, const char *fname); GWENHYWFAR_API int GWEN_XMLContext_ReadFromString(GWEN_XML_CONTEXT *ctx, const char *text); /** * Reads all tags/elements from a file and adds them as children to * the given node. */ GWENHYWFAR_API int GWEN_XML_ReadFile(GWEN_XMLNODE *n, const char *filepath, uint32_t flags); GWENHYWFAR_API GWEN_XMLNODE *GWEN_XMLNode_fromString(const char *s, int len, uint32_t flags); /** * Writes a tag and all its subnodes to the given io layer. */ GWENHYWFAR_API int GWEN_XMLNode_WriteToStream(const GWEN_XMLNODE *n, GWEN_XML_CONTEXT *ctx, GWEN_SYNCIO *sio); /** * Writes a tag and all its subnodes to the given file. */ GWENHYWFAR_API int GWEN_XMLNode_WriteFile(const GWEN_XMLNODE *n, const char *fname, uint32_t flags); GWENHYWFAR_API int GWEN_XMLNode_toBuffer(const GWEN_XMLNODE *n, GWEN_BUFFER *buf, uint32_t flags); GWENHYWFAR_API GWEN_XMLNODE_NAMESPACE_LIST *GWEN_XMLNode_GetNameSpaces(const GWEN_XMLNODE *n); GWENHYWFAR_API GWEN_XMLNODE_NAMESPACE *GWEN_XMLNode_FindNameSpaceByName(const GWEN_XMLNODE *n, const char *s); GWENHYWFAR_API GWEN_XMLNODE_NAMESPACE *GWEN_XMLNode_FindNameSpaceByUrl(const GWEN_XMLNODE *n, const char *s); GWENHYWFAR_API void GWEN_XMLNode_AddNameSpace(GWEN_XMLNODE *n, const GWEN_XMLNODE_NAMESPACE *ns); /*@}*/ /** @name Handling Tags As Variables * * These functions are only kept for compatibility reasons. You should use functions * like @ref GWEN_XMLNode_GetCharValueByPath() instead. * * These functions look for a tag, read their first data element and * return it as if it was a DB variable. * This simplifies access to simple tags containing simple data tags only. * E.g. if your XML structure is this: * @code * * 15 * 10 * * @endcode * ... then you can access the value of X with the following call: * @code * x=GWEN_XMLNode_GetIntValue(testNode, "X", 0); * @endcode * If the given variables do not exist or have no value then the also given * default value will be returned. */ /*@{*/ /** * Reads a char value. If no name is given (i.e. name is NULL or empty) then * the data returned is that from the first data node below the given node. * Otherwise a node with the given name is searched below the given node * and its first data node's data is returned. * @param n Node which is expected to contain a node of the specified name * @param name name of the node below n to be looked up * @param defValue default value to return if the tag did not exist */ GWENHYWFAR_API const char *GWEN_XMLNode_GetCharValue(const GWEN_XMLNODE *n, const char *name, const char *defValue); GWENHYWFAR_API void GWEN_XMLNode_SetCharValue(GWEN_XMLNODE *n, const char *name, const char *value); /** * This function does the same as @ref GWEN_XMLNode_GetCharValue, but it * looks for an element with the attribute "lang" which matches the currently * selected locale (e.g. "lang=de" for Germany). * If there is no localized version of the given element then the first * element of that name is used (withouth "lang" attribute). * Therefore XML documents used with this function should contain unlocalized * elements along with localized ones to provide a fallback. * @param n Node which is expected to contain a node of the specified name * @param name name of the node below n to be looked up * @param defValue default value to return if the tag did not exist */ GWENHYWFAR_API const char *GWEN_XMLNode_GetLocalizedCharValue(const GWEN_XMLNODE *n, const char *name, const char *defValue); /** * Internally calls @ref GWEN_XMLNode_GetCharValue and interpretes the * data as an integer which is then returned. * @param n Node which is expected to contain a node of the specified name * @param name name of the node below n to be looked up * @param defValue default value to return if the tag did not exist */ GWENHYWFAR_API int GWEN_XMLNode_GetIntValue(const GWEN_XMLNODE *n, const char *name, int defValue); GWENHYWFAR_API void GWEN_XMLNode_SetIntValue(GWEN_XMLNODE *n, const char *name, int value); /*@}*/ /** @name Handling Tags As Variables Using Paths * * These functions look for a tag, read their first data element and * return it as if it was a DB variable. * This simplifies access to simple tags containing simple data tags only. * E.g. if your XML structure is this: * @code * * 15 * 10 * * @endcode * ... then you can access the value of X with the following call: * @code * x=GWEN_XMLNode_GetIntValue(testNode, "X", 0); * @endcode * If the given variables do not exist or have no value then the also given * default value will be returned. * * In addition to functions like @ref GWEN_XMLNode_SetCharValue you can use full paths * here. */ /*@{*/ /** * Return the string value of an element below the given one, specified by an XPath. * @param n Node which is expected to contain the specified path * @param path XPath to lookup below the node n * @param defValue default value to return if the tag did not exist */ GWENHYWFAR_API const char *GWEN_XMLNode_GetCharValueByPath(GWEN_XMLNODE *n, const char *path, const char *defValue); GWENHYWFAR_API int GWEN_XMLNode_SetCharValueByPath(GWEN_XMLNODE *n, uint32_t flags, const char *name, const char *value); /** * Return the integer value of an element below the given one, specified by an XPath. * @param n Node which is expected to contain the specified path * @param path XPath to lookup below the node n * @param defValue default value to return if the tag did not exist */ GWENHYWFAR_API int GWEN_XMLNode_GetIntValueByPath(GWEN_XMLNODE *n, const char *name, int defValue); GWENHYWFAR_API int GWEN_XMLNode_SetIntValueByPath(GWEN_XMLNODE *n, uint32_t flags, const char *name, int value); /*@}*/ /** @name Debugging * */ /*@{*/ /** * Dumps the content of the given XML node and all its children. */ GWENHYWFAR_API void GWEN_XMLNode_Dump(const GWEN_XMLNODE *n, int ind); /*@}*/ /*@}*/ /* defgroup */ /** @defgroup MOD_XMLNODE_PATH XML Node Path * * This is used by the message engine module (@ref MOD_MSGENGINE_ALL). * A path consists of a list of nodes which are used while decoding/encoding * a message. A GWEN_XMLNODE_PATH serves as a LIFO stack (last-in-first-out). */ /*@{*/ typedef struct GWEN_XMLNODE_PATH GWEN_XMLNODE_PATH; GWENHYWFAR_API GWEN_XMLNODE_PATH *GWEN_XMLNode_Path_new(void); GWENHYWFAR_API GWEN_XMLNODE_PATH *GWEN_XMLNode_Path_dup(const GWEN_XMLNODE_PATH *np); GWENHYWFAR_API void GWEN_XMLNode_Path_free(GWEN_XMLNODE_PATH *np); /** * Adds a node to the path. */ GWENHYWFAR_API int GWEN_XMLNode_Path_Dive(GWEN_XMLNODE_PATH *np, GWEN_XMLNODE *n); /** * Removes and returns the last added node (or 0 if that would bring us * beyond the root). */ GWENHYWFAR_API GWEN_XMLNODE *GWEN_XMLNode_Path_Surface(GWEN_XMLNODE_PATH *np); /** * Dumps the contents of all XML nodes in the path. */ GWENHYWFAR_API void GWEN_XMLNode_Path_Dump(GWEN_XMLNODE_PATH *np); /*@}*/ /* defgroup */ /*@}*/ /* defgroup (all)*/ GWENHYWFAR_API GWEN_XMLNODE_NAMESPACE *GWEN_XMLNode_NameSpace_new(const char *name, const char *url); GWENHYWFAR_API void GWEN_XMLNode_NameSpace_free(GWEN_XMLNODE_NAMESPACE *ns); GWENHYWFAR_API GWEN_XMLNODE_NAMESPACE *GWEN_XMLNode_NameSpace_dup(const GWEN_XMLNODE_NAMESPACE *ns); GWENHYWFAR_API const char *GWEN_XMLNode_NameSpace_GetName(const GWEN_XMLNODE_NAMESPACE *ns); GWENHYWFAR_API const char *GWEN_XMLNode_NameSpace_GetUrl(const GWEN_XMLNODE_NAMESPACE *ns); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/parser/tag16.c0000644000175000017500000001032612416477066014731 00000000000000/*************************************************************************** begin : Sun Jun 13 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "tag16_p.h" #include #include #include #include #include #include #include GWEN_LIST_FUNCTIONS(GWEN_TAG16, GWEN_Tag16) GWEN_TAG16 *GWEN_Tag16_new(void) { GWEN_TAG16 *tlv; GWEN_NEW_OBJECT(GWEN_TAG16, tlv); GWEN_LIST_INIT(GWEN_TAG16, tlv); return tlv; } void GWEN_Tag16_free(GWEN_TAG16 *tlv) { if (tlv) { if (tlv->dataOwned) free(tlv->tagData); GWEN_LIST_FINI(GWEN_TAG16, tlv); GWEN_FREE_OBJECT(tlv); } } unsigned int GWEN_Tag16_GetTagType(const GWEN_TAG16 *tlv) { assert(tlv); return tlv->tagType; } unsigned int GWEN_Tag16_GetTagLength(const GWEN_TAG16 *tlv) { assert(tlv); return tlv->tagLength; } unsigned int GWEN_Tag16_GetTagSize(const GWEN_TAG16 *tlv) { assert(tlv); return tlv->tagSize; } const void *GWEN_Tag16_GetTagData(const GWEN_TAG16 *tlv) { assert(tlv); return tlv->tagData; } GWEN_TAG16 *GWEN_Tag16_fromBuffer(GWEN_BUFFER *mbuf, int isBerTlv) { const char *p; unsigned int tagType; unsigned int tagLength; const char *tagData; unsigned int size; unsigned int pos; unsigned int j; GWEN_TAG16 *tlv; uint32_t startPos; if (!GWEN_Buffer_GetBytesLeft(mbuf)) { DBG_ERROR(0, "Buffer empty"); return 0; } startPos=GWEN_Buffer_GetPos(mbuf); tagType=tagLength=0; p=GWEN_Buffer_GetPosPointer(mbuf); pos=0; size=GWEN_Buffer_GetBytesLeft(mbuf); /* get tag type */ if (size<2) { DBG_ERROR(0, "Too few bytes for BER-TLV"); return 0; } j=(unsigned char)(p[pos]); tagType=j; /* get length */ pos++; if (pos+1>=size) { DBG_ERROR(0, "Too few bytes"); return 0; } j=((unsigned char)(p[pos+1]))<<8; j|=(unsigned char)(p[pos]); pos+=2; tagLength=j; tagData=p+pos; GWEN_Buffer_IncrementPos(mbuf, pos); tlv=GWEN_Tag16_new(); assert(tlv); tlv->tagType=tagType; tlv->tagLength=tagLength; if (tagLength) { tlv->tagData=(void*)malloc(tagLength); memmove(tlv->tagData, tagData, tagLength); tlv->dataOwned=1; } GWEN_Buffer_IncrementPos(mbuf, tagLength); tlv->tagSize=GWEN_Buffer_GetPos(mbuf)-startPos; return tlv; } GWEN_TAG16 *GWEN_Tag16_fromBuffer2(const uint8_t *p, uint32_t l, int doCopy) { unsigned int tagType; unsigned int tagLength; const uint8_t *tagData; unsigned int size; unsigned int pos; unsigned int j; GWEN_TAG16 *tlv; if (l<1) { DBG_ERROR(0, "Buffer empty"); return NULL; } tagType=tagLength=0; pos=0; size=l; /* get tag type */ if (size<2) { DBG_ERROR(0, "Too few bytes for TLV"); return 0; } j=(unsigned char)(p[pos]); tagType=j; /* get length */ pos++; if (pos+1>=size) { DBG_ERROR(0, "Too few bytes"); return 0; } j=((unsigned char)(p[pos+1]))<<8; j|=(unsigned char)(p[pos]); pos+=2; tagLength=j; tagData=p+pos; tlv=GWEN_Tag16_new(); assert(tlv); tlv->tagType=tagType; tlv->tagLength=tagLength; if (tagLength) { if (doCopy) { tlv->tagData=(void*)malloc(tagLength); memmove(tlv->tagData, tagData, tagLength); tlv->dataOwned=1; } else { tlv->tagData=(uint8_t*)tagData; tlv->dataOwned=0; } } tlv->tagSize=tagLength+3; return tlv; } void GWEN_Tag16_DirectlyToBuffer(unsigned int tagType, const char *p, int size, GWEN_BUFFER *buf) { assert(buf); if (size==-1) { assert(p); size=strlen(p); } GWEN_Buffer_AppendByte(buf, tagType & 0xff); GWEN_Buffer_AppendByte(buf, size & 0xff); GWEN_Buffer_AppendByte(buf, (size>>8)&0xff); if (size) { assert(p); GWEN_Buffer_AppendBytes(buf, p, size); } } gwenhywfar-4.15.2beta/src/parser/xsdnode_p.h0000644000175000017500000000377112364015347015775 00000000000000/*************************************************************************** begin : Wed Feb 27 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_XSDNODE_P_H #define GWENHYWFAR_XSDNODE_P_H #include "xsdnode_l.h" struct GWEN_XSD_NODE { GWEN_INHERIT_ELEMENT(GWEN_XSD_NODE); GWEN_LIST_ELEMENT(GWEN_XSD_NODE); GWEN_XSD_NODETYPE nodeType; char *name; char *defaultValue; char *fixedValue; int minOccurrs; int maxOccurrs; uint32_t flags; GWEN_XSD_NODE *parent; GWEN_XSD_NODE_LIST *children; GWEN_XSDNODE_READ_FN readFn; GWEN_XSDNODE_WRITE_FN writeFn; }; #endif gwenhywfar-4.15.2beta/src/parser/dbio_p.h0000644000175000017500000000437112364015347015243 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Wed Mar 31 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /** @file gwenhywfar/dbio.h */ #ifndef GWENHYWFAR_DBIO_P_H #define GWENHYWFAR_DBIO_P_H #include "dbio_l.h" #include typedef struct GWEN_DBIO_PLUGIN GWEN_DBIO_PLUGIN; struct GWEN_DBIO_PLUGIN { GWEN_DBIO_PLUGIN_FACTORYFN factoryFn; }; void GWENHYWFAR_CB GWEN_DBIO_Plugin_FreeData(void *bp, void *p); struct GWEN_DBIO { GWEN_LIST_ELEMENT(GWEN_DBIO) GWEN_INHERIT_ELEMENT(GWEN_DBIO) /* No trailing semicolon here because this is a macro call */ GWEN_DBIO_IMPORTFN importFn; GWEN_DBIO_EXPORTFN exportFn; GWEN_DBIO_CHECKFILEFN checkFileFn; char *name; char *descr; uint32_t usage; }; #endif /* GWENHYWFAR_DBIO_P_H */ gwenhywfar-4.15.2beta/src/parser/configmgr_p.h0000644000175000017500000000457212416477066016314 00000000000000/*************************************************************************** begin : Mon Aug 11 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_CONFIGMGR_P_H #define GWENHYWFAR_CONFIGMGR_P_H #include "configmgr_l.h" struct GWEN_CONFIGMGR { GWEN_INHERIT_ELEMENT(GWEN_CONFIGMGR) GWEN_CONFIGMGR_GETGROUP_FN getGroupFn; GWEN_CONFIGMGR_SETGROUP_FN setGroupFn; GWEN_CONFIGMGR_LOCKGROUP_FN lockGroupFn; GWEN_CONFIGMGR_UNLOCKGROUP_FN unlockGroupFn; GWEN_CONFIGMGR_GETUNIQUEID_FN getUniqueIdFn; GWEN_CONFIGMGR_DELETEGROUP_FN deleteGroupFn; GWEN_CONFIGMGR_LISTGROUPS_FN listGroupsFn; GWEN_CONFIGMGR_LISTSUBGROUPS_FN listSubGroupsFn; char *url; }; typedef struct GWEN_CONFIGMGR_PLUGIN GWEN_CONFIGMGR_PLUGIN; struct GWEN_CONFIGMGR_PLUGIN { GWEN_CONFIGMGR_PLUGIN_FACTORYFN factoryFn; }; void GWENHYWFAR_CB GWEN_ConfigMgr_Plugin_FreeData(void *bp, void *p); GWEN_CONFIGMGR *GWEN_ConfigMgr_Plugin_Factory(GWEN_PLUGIN *pl, const char *url); #endif gwenhywfar-4.15.2beta/src/parser/base64.c0000644000175000017500000001347712416477066015105 00000000000000/*************************************************************************** begin : Thu May 06 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "base64.h" #include #include #include #include static const char GWEN_Base64_Alphabet[]= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; int GWEN_Base64_Encode(const unsigned char *src, unsigned int size, GWEN_BUFFER *dst, unsigned int maxLineLength) { unsigned int by3; unsigned int i; unsigned int l; uint32_t triplet; unsigned char c1, c2, c3, c4; if (maxLineLength) { if (maxLineLength<4) { DBG_ERROR(GWEN_LOGDOMAIN, "I need at least 4 bytes per line"); return -1; } } by3=size/3; /* first encode full triplets */ l=0; for (i=0; i>=6; c3=triplet & 0x3f; triplet>>=6; c2=triplet & 0x3f; triplet>>=6; c1=triplet & 0x3f; if (maxLineLength) { if (l+4>maxLineLength) { GWEN_Buffer_AppendByte(dst, '\n'); l=0; } l+=4; } GWEN_Buffer_AppendByte(dst, GWEN_Base64_Alphabet[c1]); GWEN_Buffer_AppendByte(dst, GWEN_Base64_Alphabet[c2]); GWEN_Buffer_AppendByte(dst, GWEN_Base64_Alphabet[c3]); GWEN_Buffer_AppendByte(dst, GWEN_Base64_Alphabet[c4]); } if (maxLineLength) { if (l+4>=maxLineLength) { GWEN_Buffer_AppendByte(dst, '\n'); l=0; } } /* then encode remainder */ switch(size % 3) { case 0: /* no remainder */ break; case 1: /* 1 remainder, leads to two trailing "=" */ triplet=(src[0]<<4); c2=triplet & 0x3f; triplet>>=6; c1=triplet & 0x3f; GWEN_Buffer_AppendByte(dst, GWEN_Base64_Alphabet[c1]); GWEN_Buffer_AppendByte(dst, GWEN_Base64_Alphabet[c2]); GWEN_Buffer_AppendString(dst, "=="); break; case 2: /* 2 remainders, leads to one trailing "=" */ triplet=(src[0]<<10)+(src[1]<<2); c3=triplet & 0x3f; triplet>>=6; c2=triplet & 0x3f; triplet>>=6; c1=triplet & 0x3f; GWEN_Buffer_AppendByte(dst, GWEN_Base64_Alphabet[c1]); GWEN_Buffer_AppendByte(dst, GWEN_Base64_Alphabet[c2]); GWEN_Buffer_AppendByte(dst, GWEN_Base64_Alphabet[c3]); GWEN_Buffer_AppendByte(dst, '='); break; default: break; } return 0; } int GWEN_Base64_Decode(const unsigned char *src, unsigned int size, GWEN_BUFFER *dst) { unsigned int i; const char *p = "0"; uint32_t v; int lastWasEq; int sizeGiven; /* first decode full triplets */ sizeGiven=(size!=0); lastWasEq=0; for (;;) { if ((sizeGiven && size==0) || lastWasEq || !*src) break; v=0; while (*src && ((p=strchr(GWEN_Base64_Alphabet, *src))==0)) src++; if (!*src) break; for (i=0; i<4; i++) { /* get next valid character */ if (lastWasEq) { while (*src && *src!='=') src++; } else { while (*src && ((p=strchr(GWEN_Base64_Alphabet, *src))==0)) src++; } if (!*src) { if (i==0 && !sizeGiven) { return 0; } else { DBG_ERROR(GWEN_LOGDOMAIN, "Premature end reached (%d)", i); return -1; } } if (*src=='=') lastWasEq++; v<<=6; v+=(p-GWEN_Base64_Alphabet) & 0x3f; src++; } /* for */ /* now we have a triplet */ if (sizeGiven) { switch(size) { case 1: GWEN_Buffer_AppendByte(dst, (v>>16) & 0xff); size--; break; case 2: GWEN_Buffer_AppendByte(dst, (v>>16) & 0xff); GWEN_Buffer_AppendByte(dst, (v>>8) & 0xff); size-=2; break; default: GWEN_Buffer_AppendByte(dst, (v>>16) & 0xff); GWEN_Buffer_AppendByte(dst, (v>>8) & 0xff); GWEN_Buffer_AppendByte(dst, v & 0xff); size-=3; break; } /* switch */ } else { int bytes; bytes=(24-(lastWasEq*6))/8; if (bytes) { GWEN_Buffer_AppendByte(dst, (v>>16) & 0xff); if (bytes>1) { GWEN_Buffer_AppendByte(dst, (v>>8) & 0xff); if (bytes>2) GWEN_Buffer_AppendByte(dst, v & 0xff); } } } } /* for full quadruplets */ return 0; } gwenhywfar-4.15.2beta/src/parser/db.h0000644000175000017500000011562512416477066014411 00000000000000/*************************************************************************** begin : Tue Sep 09 2003 copyright : (C) 2003-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /** @file db.h */ #ifndef GWENHYWFAR_DB_H #define GWENHYWFAR_DB_H #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif /** @defgroup MOD_DB Database * @ingroup MOD_PARSER * * @brief This group contains the definition of a GWEN_DB database. * * A GWEN_DB database consists of a tree of @ref GWEN_DB_NODE entries. * Such a @ref GWEN_DB_NODE node can either be a group node, or a * variable node, or a value node. Usually an application programmer * will only get in touch with group nodes. The application programmer * can iterate through the group nodes with GWEN_DB_GetGroup(), * GWEN_DB_Groups_foreach(), and can retrieve variable values with * GWEN_DB_GetIntValue(), GWEN_DB_GetCharValue() and so on. * *

* The following graph shows the internal structure of a GWEN_DB:
* @image html db2.png "Internal structure of a GWEN_DB" *
* As you can see the GWEN_DB consists of multiple units called NODE. Every * node has a pointer to: *

    *
  • its parent
  • *
  • its first child (only the first)
  • *
  • its successor (but not its predecessor!) *
* Such a node can be either of the following: *
    *
  • a group containing other groups and variables
  • *
  • a variable containing values (and values only)
  • *
  • a value containing its value data
  • *
*

* * Each group has a name. Depending on the GWEN_DB_FLAGS given when * reading a GWEN_DB from a file or creating it, it may very well be * possible to have multiple groups with the same name as children of * the same root node. Again: Child group nodes with the same name may * very well exist. This also applies to variable nodes. * * For the interested reader, we again explain the difference of the * three kinds of nodes. Depending on either of these cases, you can * *
    *
  1. Iterate through groups or get a variable with * e.g. GWEN_DB_GetNextGroup(), GWEN_DB_GetNextVar() *
  2. Get the type of a variable with e.g. GWEN_DB_GetVariableType() * -- the value of a variable is retrieved by the shortcut functions * explained below. *
  3. Get the type of a value with GWEN_DB_GetValueType(). Again the * value itself is retrieved with the shortcut functions below. *
* * To retrieve or set the value of such a variable, the following * "shortcut" functions for all three supported typed exist: * GWEN_DB_GetIntValue(), GWEN_DB_GetCharValue(), * GWEN_DB_GetBinValue(). These functions only accept a group and a "path" * to the desired variable. * */ /*@{*/ /** maximum size of a text line when reading/writing from/to streams */ #define GWEN_DB_LINE_MAXSIZE 1024 /** @name DB Flags * *

* Please note that the setter functions also take the flags from * the module @ref MOD_PATH (e.g. @ref GWEN_PATH_FLAGS_PATHMUSTEXIST) * into account. So you most likely need to specify * them, too. *

*

* However, for your conveniance there is a default flag value which suffices * in most cases (@ref GWEN_DB_FLAGS_DEFAULT). *

*/ /*@{*/ /** when reading a DB allow for empty streams (e.g. empty file) */ #define GWEN_DB_FLAGS_ALLOW_EMPTY_STREAM 0x00008000 /** Overwrite existing values when assigning a new value to a variable */ #define GWEN_DB_FLAGS_OVERWRITE_VARS 0x00010000 /** Overwrite existing groups when calling @ref GWEN_DB_GetGroup() */ #define GWEN_DB_FLAGS_OVERWRITE_GROUPS 0x00020000 /** quote variable names when writing them to a stream */ #define GWEN_DB_FLAGS_QUOTE_VARNAMES 0x00040000 /** quote values when writing them to a stream */ #define GWEN_DB_FLAGS_QUOTE_VALUES 0x00080000 /** allows writing of subgroups when writing to a stream */ #define GWEN_DB_FLAGS_WRITE_SUBGROUPS 0x00100000 /** adds some comments when writing to a stream */ #define GWEN_DB_FLAGS_DETAILED_GROUPS 0x00200000 /** indents text according to the current path depth when writing to a * stream to improve the readability of the created file */ #define GWEN_DB_FLAGS_INDEND 0x00400000 /** writes a newline to the stream after writing a group to improve * the readability of the created file */ #define GWEN_DB_FLAGS_ADD_GROUP_NEWLINES 0x00800000 /** uses a colon (":") instead of an equation mark when reading/writing * variable definitions */ #define GWEN_DB_FLAGS_USE_COLON 0x01000000 /** stops reading from a stream at empty lines */ #define GWEN_DB_FLAGS_UNTIL_EMPTY_LINE 0x02000000 /** normally the type of a variable is written to the stream, too. * This flag changes this behaviour */ #define GWEN_DB_FLAGS_OMIT_TYPES 0x04000000 /** appends data to an existing file instead of overwriting it */ #define GWEN_DB_FLAGS_APPEND_FILE 0x08000000 /** Char values are escaped when writing them to a file. */ #define GWEN_DB_FLAGS_ESCAPE_CHARVALUES 0x10000000 /** Char values are unescaped when reading them from a file (uses the same * bit @ref GWEN_DB_FLAGS_ESCAPE_CHARVALUES uses) */ #define GWEN_DB_FLAGS_UNESCAPE_CHARVALUES 0x10000000 /** locks a file before reading from or writing to it * This is used by @ref GWEN_DB_ReadFile and @ref GWEN_DB_WriteFile */ #define GWEN_DB_FLAGS_LOCKFILE 0x20000000 /** * When setting a value or getting a group insert newly created * values/groups rather than appending them.*/ #define GWEN_DB_FLAGS_INSERT 0x40000000 /** * When writing a DB use DOS line termination (e.g. CR/LF) instead if unix mode (LF only) */ #define GWEN_DB_FLAGS_DOSMODE 0x80000000 /** These are the default flags which you use in most cases */ #define GWEN_DB_FLAGS_DEFAULT \ (\ GWEN_DB_FLAGS_QUOTE_VALUES | \ GWEN_DB_FLAGS_WRITE_SUBGROUPS | \ GWEN_DB_FLAGS_DETAILED_GROUPS | \ GWEN_DB_FLAGS_INDEND | \ GWEN_DB_FLAGS_ADD_GROUP_NEWLINES | \ GWEN_DB_FLAGS_ESCAPE_CHARVALUES | \ GWEN_DB_FLAGS_UNESCAPE_CHARVALUES\ ) /** same like @ref GWEN_DB_FLAGS_DEFAULT except that the produced file * (when writing to a stream) is more compact (but less readable)*/ #define GWEN_DB_FLAGS_COMPACT \ (\ GWEN_DB_FLAGS_QUOTE_VALUES | \ GWEN_DB_FLAGS_WRITE_SUBGROUPS | \ GWEN_DB_FLAGS_ESCAPE_CHARVALUES | \ GWEN_DB_FLAGS_UNESCAPE_CHARVALUES\ ) /** These flags can be used to read a DB from a HTTP header. It uses a * colon instead of the equation mark with variable definitions and stops * when encountering an empty line.*/ #define GWEN_DB_FLAGS_HTTP \ (\ GWEN_DB_FLAGS_USE_COLON |\ GWEN_DB_FLAGS_UNTIL_EMPTY_LINE |\ GWEN_DB_FLAGS_OMIT_TYPES | \ GWEN_DB_FLAGS_DOSMODE \ ) /*@}*/ /** @name Node Flags */ /*@{*/ /** is set then this node has been altered */ #define GWEN_DB_NODE_FLAGS_DIRTY 0x00000001 /** variable is volatile (will not be written) */ #define GWEN_DB_NODE_FLAGS_VOLATILE 0x00000002 /** this is only valid for groups. It determines whether subgroups will * inherit the hash mechanism set in the root node. */ #define GWEN_DB_NODE_FLAGS_INHERIT_HASH_MECHANISM 0x00000004 /** node has to be disposed of safely (i.e. it will be overridden before freeing it) */ #define GWEN_DB_NODE_FLAGS_SAFE 0x00000008 /*@}*/ #define GWEN_DB_DEFAULT_LOCK_TIMEOUT 1000 /** * This is the type used to store a DB. Its contents are explicitly NOT * part of the API. * * A description of what can be done with this type can be found in * @ref db.h */ typedef struct GWEN_DB_NODE GWEN_DB_NODE; /** * This specifies the type of a value stored in the DB. */ typedef enum { /** type unknown */ GWEN_DB_NodeType_Unknown=-1, /** group */ GWEN_DB_NodeType_Group=0, /** variable */ GWEN_DB_NodeType_Var, /** simple, null terminated C-string */ GWEN_DB_NodeType_ValueChar, /** integer */ GWEN_DB_NodeType_ValueInt, /** binary, user defined data */ GWEN_DB_NodeType_ValueBin, /** pointer , will not be stored or read to/from files */ GWEN_DB_NodeType_ValuePtr, /** last value type */ GWEN_DB_NodeType_ValueLast } GWEN_DB_NODE_TYPE; /** @name Constructing, Destructing, Copying * */ /*@{*/ /** * Creates a new (empty) group with the given name. I.e. this is the * constructor. When finished using this group, you should free it * using @ref GWEN_DB_Group_free() in order to avoid memory leaks. * @param name name of the group to create */ GWENHYWFAR_API GWEN_DB_NODE *GWEN_DB_Group_new(const char *name); /** * Frees a DB group. I.e. this is the destructor. This is needed to * avoid memory leaks. * @param n db node */ GWENHYWFAR_API void GWEN_DB_Group_free(GWEN_DB_NODE *n); /** * Creates a deep copy of the given node. This copy will then be owned * by the caller and MUST be freed after using it by calling @ref * GWEN_DB_Group_free(). * @param n db node */ GWENHYWFAR_API GWEN_DB_NODE *GWEN_DB_Group_dup(const GWEN_DB_NODE *n); /*@}*/ /** @name Iterating Through Groups * */ /*@{*/ /** * Returns the first group node below the given one. * * If there is no group node then NULL is returned. This can either * mean that this node does not have any children or the only * children are variables instead of groups. * * @param n db node */ GWENHYWFAR_API GWEN_DB_NODE *GWEN_DB_GetFirstGroup(GWEN_DB_NODE *n); /** * Returns the next group node following the given one, which has the * same parent node. * * This function works absolutely independently of the group nodes' * names -- the returned node may or may not have the same name as the * specified node. The only guarantee is that the returned node will * be a group node. * * If there is no group node then NULL is returned. This can either * mean that the parent node does not have any further * children, or that the other children are variables instead * of groups. * * @note This is one of the few functions where the returned node is @e not * the child of the specified node, but instead it is the next node * with the same parent node. In other words, this function is an * exception. In most other functions the returned node is a child of * the specified node. * * @param n db node */ GWENHYWFAR_API GWEN_DB_NODE *GWEN_DB_GetNextGroup(GWEN_DB_NODE *n); /** * Returns the first group node below the given one by name. * * If there is no matching group node then NULL is returned. This can either * mean that this node does not have any children or the only * children are variables instead of groups or their is no group of the * given name. * * @param n db node * @param name name to look for (joker and wildcards allowed) */ GWENHYWFAR_API GWEN_DB_NODE *GWEN_DB_FindFirstGroup(GWEN_DB_NODE *n, const char *name); /** * Returns the next group node following the given one, which has the * same parent node, by name. * * If there is no matching group node then NULL is returned. This can either * mean that the parent node does not have any further * children, or that the other children are variables instead * of groups or that there is no group with the given name. * * @note This is one of the few functions where the returned node is @e not * the child of the specified node, but instead it is the next node * with the same parent node. In other words, this function is an * exception. In most other functions the returned node is a child of * the specified node. * * @param n db node * @param name name to look for (joker and wildcards allowed) */ GWENHYWFAR_API GWEN_DB_NODE *GWEN_DB_FindNextGroup(GWEN_DB_NODE *n, const char *name); /** Callback function type for GWEN_DB_Groups_Foreach(), * GWEN_DB_Variables_Foreach(), and GWEN_DB_Values_Foreach(). * * @param node The current node element * * @param user_data The arbitrary data passed to the foreach function. * * @return NULL if the iteration should continue, or non-NULL if the * iteration should stop and that value be returned. */ typedef void *(*GWEN_DB_NODES_CB)(GWEN_DB_NODE *node, void *user_data); /** Iterates through all group nodes that are @e direct children * of the given node, calling the callback function 'func' on each * group node. Traversal will stop when 'func' returns a non-NULL * value, and the routine will return with that value. Otherwise the * routine will return NULL. * * If no nodes that are groups are found as children, then * this function will simply do nothing. * * @param node The group node whose children shall be iterated through. * @param func The function to be called with each group node. * @param user_data A pointer passed on to the function 'func'. * @return The non-NULL pointer returned by 'func' as soon as it * returns one. Otherwise (i.e. 'func' always returns NULL) * returns NULL. * @author Christian Stimming */ GWENHYWFAR_API void *GWEN_DB_Groups_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func, void *user_data); /** Returns the number of group nodes that are @e direct children of * the given node. In other words, this is the number of group nodes * that will be reached in the GWEN_DB_Groups_foreach() function. */ GWENHYWFAR_API unsigned int GWEN_DB_Groups_Count(const GWEN_DB_NODE *node); /** * Returns the parent group of the given node. */ GWENHYWFAR_API GWEN_DB_NODE *GWEN_DB_GetParentGroup(GWEN_DB_NODE *n); /*@}*/ /** @name Variable Getter and Setter * * These getter functions check for the existence of the given variable and * return the value specified by an index. * Under the following circumstances the also given default value will be * returned: *
    *
  • the variable does not exist
  • *
  • the variable exists but has no values (should not occur)
  • *
  • the variable exists but the given value index is out of range (e.g. * specifying index 1 with a variable that has only one value)
  • *
  • a string value is expected but the variable is not of that type. * However, if you want an integer value but the variable only has a char * value then the getter functions try to convert the char to an integer. * Other conversions do not take place.
  • *
* * The setter functions either replace an existing variable, create a missing * variable, add a value or return an error if the variable does not exist * (see description of the flags). * All setter functions make deep copies of the given values, so you may * free the params after calling the setter function. * * All getter functions return a const pointer to the variable's retrieved * value. * All setter functions return Zero if ok and Nonzero on error. * * This module knows about the following types (see @ref GWEN_DB_VALUETYPE): *
    *
  • char (simple null terminated C strings)
  • *
  • int (integer values)
  • *
  • bin (binary, user specified data)
  • *
* * @note The value returned by a getter function is only valid as long as the * corresponding variable (node) exists.
* So if you retrieve the value of a variable and delete the variable (or even * the whole DB) afterwards the pointer becomes invalid and using it will most * likely crash your program.
* If you want to use such a value even after the corresponding variable * has been deleted you need to make a copy. * */ /*@{*/ /** * Returns the variable's retrieved value. * @param n db node * @param path path and name of the variable * @param idx index number of the value to return * @param defVal default value to return in case there is no real value */ GWENHYWFAR_API const char *GWEN_DB_GetCharValue(GWEN_DB_NODE *n, const char *path, int idx, const char *defVal); /** * @return 0 on success, nonzero on error * @param n db node * @param flags see @ref GWEN_DB_FLAGS_OVERWRITE_VARS and others which * can all be OR-combined to form the flags to use. * @param path path and name of the variable * @param val The string value that is copied into the DB */ GWENHYWFAR_API int GWEN_DB_SetCharValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const char *val); /** * Adds the given char value to the given variable if it not already exists * (depending on the arguments senseCase and check). * @return 0 on success, nonzero on error * @param n db node * @param path path and name of the variable * @param val The string value that is copied into the DB * @param senseCase if 0 then the case of the value is ignored while checking * @param check if 1 then the variable will be checked for this value */ GWENHYWFAR_API int GWEN_DB_AddCharValue(GWEN_DB_NODE *n, const char *path, const char *val, int senseCase, int check); /** * Removes the given char value from the given variable if it exists * (depending on the arguments senseCase and check). * @return 0 on success, nonzero on error * @param n db node * @param path path and name of the variable * @param val The string value to be removed * @param senseCase if 0 then the case of the value is ignored while checking */ GWENHYWFAR_API int GWEN_DB_RemoveCharValue(GWEN_DB_NODE *n, const char *path, const char *val, int senseCase); /** * Returns the variable's retrieved value. * @param n db node * @param path path and name of the variable * @param idx index number of the value to return * @param defVal default value to return in case there is no real value */ GWENHYWFAR_API int GWEN_DB_GetIntValue(GWEN_DB_NODE *n, const char *path, int idx, int defVal); /** * @return 0 on success, nonzero on error * @param n db node * @param flags see @ref GWEN_DB_FLAGS_OVERWRITE_VARS and others which * can all be OR-combined to form the flags to use. * @param path path and name of the variable * @param val new value */ GWENHYWFAR_API int GWEN_DB_SetIntValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, int val); /** * Returns the variable's retrieved value. The size of the binary * data is written into the int pointer argument returnValueSize. * @param n db node * @param path path and name of the variable * @param idx index number of the value to return * @param defVal default value to return in case there is no real value * @param defValSize size of the default value * @param returnValueSize pointer to a variable to receive the length * of the data returned */ GWENHYWFAR_API const void *GWEN_DB_GetBinValue(GWEN_DB_NODE *n, const char *path, int idx, const void *defVal, unsigned int defValSize, unsigned int *returnValueSize); /** * @param n db node * @param path path and name of the variable * @param flags see @ref GWEN_DB_FLAGS_OVERWRITE_VARS and others which * can all be OR-combined to form the flags to use. * @param val The binary data that is copied into the DB. * @param valSize The number of bytes in the binary data value. * * @return 0 on success, nonzero on error */ GWENHYWFAR_API int GWEN_DB_SetBinValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const void *val, unsigned int valSize); /** * Returns the variable's retrieved value. * @param n db node * @param path path and name of the variable * @param idx index number of the value to return * @param defVal default value to return in case there is no real value */ GWENHYWFAR_API void *GWEN_DB_GetPtrValue(GWEN_DB_NODE *n, const char *path, int idx, void *defVal); /** * @param n db node * @param path path and name of the variable * @param flags see @ref GWEN_DB_FLAGS_OVERWRITE_VARS and others which * can all be OR-combined to form the flags to use. * @param val The pointer that is stored within the DB. * * @return 0 on success, nonzero on error */ GWENHYWFAR_API int GWEN_DB_SetPtrValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, void *val); /*@}*/ /** @name Group Handling * */ /*@{*/ /** * This function either creates a new group, returns an existing one or * returns an error if there is no group but the caller wanted one (depending * on the flags given). * @param n db node * @param flags see @ref GWEN_DB_FLAGS_OVERWRITE_VARS and others which * can all be OR-combined to form the flags to use. * @param path path and name of the group to be created/located */ GWENHYWFAR_API GWEN_DB_NODE *GWEN_DB_GetGroup(GWEN_DB_NODE *n, uint32_t flags, const char *path); /** * Returns the name of the given group. */ GWENHYWFAR_API const char *GWEN_DB_GroupName(GWEN_DB_NODE *n); /** * Renames the given group. * @param n db node * @param newname new name for the group */ GWENHYWFAR_API void GWEN_DB_GroupRename(GWEN_DB_NODE *n, const char *newname); /** * Adds the given group node as a new child of the given parent group node. * * The group name has no influence on what will happen in this * function. In other words, if the parent group already has a child * group with the same name as 'node', then after this function two * child group nodes with the same name will exist. * * @note This function takes over the ownership of the new group, so * you MUST NOT free it afterwards. * * @param parent Some group node that will be the parent of the added node * @param node Group node to add */ GWENHYWFAR_API int GWEN_DB_AddGroup(GWEN_DB_NODE *parent, GWEN_DB_NODE *node); /** * Adds the given group node as the new first child of the given parent group * node. * * The group name has no influence on what will happen in this * function. In other words, if the parent group already has a child * group with the same name as 'node', then after this function two * child group nodes with the same name will exist. * * @note This function takes over the ownership of the new group, so * you MUST NOT free it afterwards. * * @param parent Some group node that will be the parent of the added node * @param node Group node to add */ GWENHYWFAR_API int GWEN_DB_InsertGroup(GWEN_DB_NODE *parent, GWEN_DB_NODE *node); /** * This function adds all children of the second node as new children to * the first given one. * * @note This function does NOT take over ownership of the new * group. The caller is still the owner of the given group. * @param n db node * @param nn node whose children are to be added (makes deep copies) */ GWENHYWFAR_API int GWEN_DB_AddGroupChildren(GWEN_DB_NODE *n, GWEN_DB_NODE *nn); /** * Unlinks a group (and thereby all its children) from its parent and * brothers. * * This function DOES NOT free the group, it just unlinks it. You can then use * it with e.g. @ref GWEN_DB_AddGroup or other functions to relink it at any * other position of even in other DBs. * @param n db node */ GWENHYWFAR_API void GWEN_DB_UnlinkGroup(GWEN_DB_NODE *n); /** * Locates and removes the group of the given name. * @return 0 on success, nonzero on error * @param n db node * @param path path to the group to delete */ GWENHYWFAR_API int GWEN_DB_DeleteGroup(GWEN_DB_NODE *n, const char *path); /** * Frees all children of the given node thereby clearing it. * @return 0 on success, nonzero on error * @param n db node * @param path path to the group under the given node to clear * (if 0 then clear the given node) */ GWENHYWFAR_API int GWEN_DB_ClearGroup(GWEN_DB_NODE *n, const char *path); /** Predicate: Returns nonzero (TRUE) or zero (FALSE) if the given * NODE is a Group or not. Usually these group nodes are the only * nodes that the application gets in touch with. * * @param n db node */ GWENHYWFAR_API int GWEN_DB_IsGroup(const GWEN_DB_NODE *n); /** * Returns the node flags for the given db node. * Please note that all modifications applied to a node will set the * dirty flag in the node itself and all its parents. * This allows to use this funcion here to check whether a DB has been * modified. * @return current node flags for this node (see * @ref GWEN_DB_NODE_FLAGS_DIRTY) * * @param n db node */ GWENHYWFAR_API uint32_t GWEN_DB_GetNodeFlags(const GWEN_DB_NODE *n); /** * Modifies the node flags for the given db node * @param n db node * @param flags flags to set (see @ref GWEN_DB_NODE_FLAGS_DIRTY) */ GWENHYWFAR_API void GWEN_DB_SetNodeFlags(GWEN_DB_NODE *n, uint32_t flags); /** * Modifies the flags of the given node and all its parents according * to the parameters given. * @param n db node * @param newflags new flags to set (see @ref GWEN_DB_NODE_FLAGS_DIRTY) * @param mask only those flags which are set in this mask are modified * according to newflags */ GWENHYWFAR_API void GWEN_DB_ModifyBranchFlagsUp(GWEN_DB_NODE *n, uint32_t newflags, uint32_t mask); /** * Modifies the flags of the given node and all its children according * to the parameters given. * @param n db node * @param newflags new flags to set (see @ref GWEN_DB_NODE_FLAGS_DIRTY) * @param mask only those flags which are set in this mask are modified * according to newflags */ GWENHYWFAR_API void GWEN_DB_ModifyBranchFlagsDown(GWEN_DB_NODE *n, uint32_t newflags, uint32_t mask); /*@}*/ /** @name Reading and Writing From/To IO Layers * * These functions read or write a DB from/to GWEN_IO_LAYER. * This allows to use any source or target supported by GWEN_IO_LAYER * for data storage (these are currently sockets, files and memory buffers). * The flags determine how to read/write the data (e.g. if sub-groups are * to be written etc). */ /*@{*/ GWENHYWFAR_API int GWEN_DB_ReadFromFastBuffer(GWEN_DB_NODE *n, GWEN_FAST_BUFFER *fb, uint32_t dbflags); GWENHYWFAR_API int GWEN_DB_ReadFromIo(GWEN_DB_NODE *n, GWEN_SYNCIO *sio, uint32_t dbflags); GWENHYWFAR_API int GWEN_DB_ReadFile(GWEN_DB_NODE *n, const char *fname, uint32_t dbflags); GWENHYWFAR_API int GWEN_DB_ReadFromString(GWEN_DB_NODE *n, const char *str, int len, uint32_t dbflags); GWENHYWFAR_API int GWEN_DB_WriteToFastBuffer(GWEN_DB_NODE *node, GWEN_FAST_BUFFER *fb, uint32_t dbflags); GWENHYWFAR_API int GWEN_DB_WriteToIo(GWEN_DB_NODE *node, GWEN_SYNCIO *sio, uint32_t dbflags); GWENHYWFAR_API int GWEN_DB_WriteFile(GWEN_DB_NODE *n, const char *fname, uint32_t dbflags); GWENHYWFAR_API int GWEN_DB_WriteToBuffer(GWEN_DB_NODE *n, GWEN_BUFFER *buf, uint32_t dbflags); /** * Imports a file into a DB using a GWEN_DBIO importer. * @param n node to read into (becomes the root of the imported data) * @param fname name of the file to import * @param type GWEN_DBIO type * @param params parameters for the GWEN_DBIO importer (content depends on * the importer, may even be NULL for some types) * @param dbflags flags to use while importing (see * @ref GWEN_DB_FLAGS_OVERWRITE_VARS and others) */ GWENHYWFAR_API int GWEN_DB_ReadFileAs(GWEN_DB_NODE *n, const char *fname, const char *type, GWEN_DB_NODE *params, uint32_t dbflags); /** * Exports a DB to a file using a GWEN_DBIO exporter. * @param n node to write * @param fname name of the file to export to * @param type GWEN_DBIO type * @param params parameters for the GWEN_DBIO exporter (content depends on * the exporter, may even be NULL for some types) * @param dbflags flags to use while exporting (see * @ref GWEN_DB_FLAGS_OVERWRITE_VARS and others) */ GWENHYWFAR_API int GWEN_DB_WriteFileAs(GWEN_DB_NODE *n, const char *fname, const char *type, GWEN_DB_NODE *params, uint32_t dbflags); /*@}*/ /** @name Iterating Through Variables and variable handling * */ /*@{*/ /** * Returns the first variable below the given group. * If there is no variable then NULL is returned. * @param n db node */ GWENHYWFAR_API GWEN_DB_NODE *GWEN_DB_GetFirstVar(GWEN_DB_NODE *n); /** * Returns the next variable node following the given one, which has * the same parent node. * * This function works absolutely independently of the variable nodes' * names -- the returned node may or may not have the same name as the * specified node. The only guarantee is that the returned node will * be a variable node. * * If there is no variable node then NULL is returned. This can either * mean that the parent node does not have any further children, or * that the other children are groups instead of variables. * * @note This is the only function where the returned node is @e not * the child of the specified node, but instead it is the next node * with the same parent node. In other words, this function is an * exception. In all other functions the returned node is a child of * the specified node. * * @param n db node */ GWENHYWFAR_API GWEN_DB_NODE *GWEN_DB_GetNextVar(GWEN_DB_NODE *n); /** * Returns the name of the variable specified by the given node. * @param n db node specifying a variable (not a group !) */ GWENHYWFAR_API const char *GWEN_DB_VariableName(GWEN_DB_NODE *n); GWENHYWFAR_API void GWEN_DB_VariableRename(GWEN_DB_NODE *n, const char *newname); /** Iterates through all variable nodes that are @e direct children * of the given node, calling the callback function 'func' on each * variable node. Traversal will stop when 'func' returns a non-NULL * value, and the routine will return with that value. Otherwise the * routine will return NULL. * * If no nodes that are variables are found as children, then * this function will simply do nothing. * * @param node The group node whose children shall be iterated through. * @param func The function to be called with each group node. * @param user_data A pointer passed on to the function 'func'. * @return The non-NULL pointer returned by 'func' as soon as it * returns one. Otherwise (i.e. 'func' always returns NULL) * returns NULL. * @author Christian Stimming */ GWENHYWFAR_API void *GWEN_DB_Variables_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func, void *user_data); /** Returns the number of variable nodes that are @e direct children * of the given node. In other words, this is the number of variable * nodes that will be reached in the GWEN_DB_Variables_Foreach() * function. */ GWENHYWFAR_API unsigned int GWEN_DB_Variables_Count(const GWEN_DB_NODE *node); /** * Returns the type of the first value of the given variable * @param n root node of the DB * @param p path of the variable to inspect */ GWENHYWFAR_API GWEN_DB_NODE_TYPE GWEN_DB_GetVariableType(GWEN_DB_NODE *n, const char *p); /** * Deletes the given variable by removing it and its values from the DB. * @param n root of the DB * @param path path to the variable to remove * @return Zero on success, nonzero on error */ GWENHYWFAR_API int GWEN_DB_DeleteVar(GWEN_DB_NODE *n, const char *path); /** * Checks whether the given variable exists. * @return Zero if variable not found, nonzero otherwise * @param n root of the DB * @param path path to the variable to check for */ GWENHYWFAR_API int GWEN_DB_VariableExists(GWEN_DB_NODE *n, const char *path); /** * Checks whether the given variable and value exists. * @return Zero if variable not found, nonzero otherwise * @param n root of the DB * @param path path to the variable to check for * @param idx index number of the variable's value to check for */ GWENHYWFAR_API int GWEN_DB_ValueExists(GWEN_DB_NODE *n, const char *path, unsigned int idx); /** Predicate: Returns nonzero (TRUE) or zero (FALSE) if the given * NODE is a Variable or not. Usually the Application does not get in * touch with such Nodes but only with nodes that are Groups. * * @param n db node */ GWENHYWFAR_API int GWEN_DB_IsVariable(const GWEN_DB_NODE *n); /** * Returns the first variable node below the given one by name. * * If there is no matching variable node then NULL is returned. This can * either mean that this node does not have any children or the only * children are groups/values instead of variables or their is no variable of * the given name. * * @param n db node * @param name name to look for (joker and wildcards allowed) */ GWENHYWFAR_API GWEN_DB_NODE *GWEN_DB_FindFirstVar(GWEN_DB_NODE *n, const char *name); /** * Returns the next variable node following the given one, which has the * same parent node, by name. * * If there is no matching variable node then NULL is returned. This can * either mean that this node does not have any children or the only * children are groups/values instead of variables or their is no variable of * the given name. * * @note This is one of the few functions where the returned node is @e not * the child of the specified node, but instead it is the next node * with the same parent node. In other words, this function is an * exception. In most other functions the returned node is a child of * the specified node. * * @param n db node * @param name name to look for (joker and wildcards allowed) */ GWENHYWFAR_API GWEN_DB_NODE *GWEN_DB_FindNextVar(GWEN_DB_NODE *n, const char *name); /*@}*/ /** @name Iterating Through Values and value handling * */ /*@{*/ /** * Returns the first value below the given variable. * If there is no value then NULL is returned. * @param n db node */ GWENHYWFAR_API GWEN_DB_NODE *GWEN_DB_GetFirstValue(GWEN_DB_NODE *n); /** * Returns the next value node following the given one, which has the * same parent node. * * If there is no value node then NULL is returned. This can either * mean that the parent node does not have any further children, or * that the other children aren't values. * * @note This is the only function where the returned node is @e not * the child of the specified node, but instead it is the next node * with the same parent node. In other words, this function is an * exception. In all other functions the returned node is a child of * the specified node. * * @param n db node */ GWENHYWFAR_API GWEN_DB_NODE *GWEN_DB_GetNextValue(GWEN_DB_NODE *n); /** Iterates through all value nodes that are @e direct children * of the given node, calling the callback function 'func' on each * value node. Traversal will stop when 'func' returns a non-NULL * value, and the routine will return with that value. Otherwise the * routine will return NULL. * * If no nodes that are values are found as children, then * this function will simply do nothing. * * @param node The variable node whose children shall be iterated through. * @param func The function to be called with each group node. * @param user_data A pointer passed on to the function 'func'. * @return The non-NULL pointer returned by 'func' as soon as it * returns one. Otherwise (i.e. 'func' always returns NULL) * returns NULL. * @author Christian Stimming */ GWENHYWFAR_API void *GWEN_DB_Values_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func, void *user_data); /** Returns the number of value nodes that are @e direct children of * the given node. In other words, this is the number of value nodes * that will be reached in the GWEN_DB_Values_foreach() function. */ GWENHYWFAR_API unsigned int GWEN_DB_Values_Count(const GWEN_DB_NODE *node); /** * Returns the type of the given value. * @param n db node */ GWENHYWFAR_API GWEN_DB_NODE_TYPE GWEN_DB_GetValueType(GWEN_DB_NODE *n); GWENHYWFAR_API GWEN_DB_NODE_TYPE GWEN_DB_GetValueTypeByPath(GWEN_DB_NODE *n, const char *p, unsigned int i); /** * Returns the value data of the given value node. * If the given node is not a char-value node then 0 is returned. */ GWENHYWFAR_API const char *GWEN_DB_GetCharValueFromNode(const GWEN_DB_NODE *n); /** * Replaces the current value data of the given node by the new string. * @return 0 if ok, error code otherwise */ GWENHYWFAR_API int GWEN_DB_SetCharValueInNode(GWEN_DB_NODE *n, const char *s); GWENHYWFAR_API int GWEN_DB_GetIntValueFromNode(const GWEN_DB_NODE *n); GWENHYWFAR_API const void *GWEN_DB_GetBinValueFromNode(const GWEN_DB_NODE *n, unsigned int *size); /** Predicate: Returns nonzero (TRUE) or zero (FALSE) if the given * NODE is a Value or not. Usually the Application does not get in * touch with such Nodes but only with nodes that are Groups. * * @param n db node */ GWENHYWFAR_API int GWEN_DB_IsValue(const GWEN_DB_NODE *n); /*@}*/ /** @name Debugging * * These functions are for debugging purposes only. You should NOT consider * them part of the API. */ /*@{*/ /** * Dumps the content of the given DB to the given file (e.g. stderr). * @param n node to dump * @param insert number of blanks to insert at every line */ GWENHYWFAR_API void GWEN_DB_Dump(GWEN_DB_NODE *n, int insert); /*@}*/ /*@}*/ #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/parser/base64.h0000644000175000017500000000555512364015347015100 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Thu May 06 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_BASE64_H #define GWENHYWFAR_BASE64_H #include #include #ifdef __cplusplus extern "C" { #endif /** * Encodes the given bytes and stores the result in a GWEN_BUFFER. * @return 0 if ok, !=0 on error * @param src src buffer * @param size number of bytes in the source buffer * @param dst destination buffer * @param maxLineLength after this number of bytes a line break is inserted * (if 0 then no line break is inserted) */ GWENHYWFAR_API int GWEN_Base64_Encode(const unsigned char *src, unsigned int size, GWEN_BUFFER *dst, unsigned int maxLineLength); /** * Decodes base64 encoded data and stores the result in a GWEN_BUFFER. * @return 0 if ok, !=0 on error * @param src src buffer * @param size number of bytes to store in the GWEN_BUFFER (this is NOT * the number of bytes stored in the source buffer, that buffer must * hold more bytes because base64 encoding inflates the data to 4/3). * @param dst destination buffer */ GWENHYWFAR_API int GWEN_Base64_Decode(const unsigned char *src, unsigned int size, GWEN_BUFFER *dst); #ifdef __cplusplus } #endif #endif /* GWENHYWFAR_BASE64_H */ gwenhywfar-4.15.2beta/src/parser/url.c0000644000175000017500000001543612416477066014620 00000000000000/* This file is auto-generated from "url.xml" by the typemaker tool of Gwenhywfar. Do not edit this file -- all changes will be lost! */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include "url_p.h" #include #include #include #include #include #include #include #include GWEN_LIST_FUNCTIONS(GWEN_URL, GWEN_Url) GWEN_LIST2_FUNCTIONS(GWEN_URL, GWEN_Url) GWEN_URL *GWEN_Url_new(void) { GWEN_URL *st; GWEN_NEW_OBJECT(GWEN_URL, st) st->_usage=1; GWEN_LIST_INIT(GWEN_URL, st) st->vars=GWEN_DB_Group_new("vars"); return st; } void GWEN_Url_free(GWEN_URL *st) { if (st) { assert(st->_usage); if (--(st->_usage)==0) { if (st->protocol) free(st->protocol); if (st->server) free(st->server); if (st->path) free(st->path); if (st->userName) free(st->userName); if (st->password) free(st->password); if (st->vars) GWEN_DB_Group_free(st->vars); if (st->url) free(st->url); GWEN_LIST_FINI(GWEN_URL, st) GWEN_FREE_OBJECT(st); } } } GWEN_URL *GWEN_Url_dup(const GWEN_URL *d) { GWEN_URL *st; assert(d); st=GWEN_Url_new(); if (d->protocol) st->protocol=strdup(d->protocol); if (d->server) st->server=strdup(d->server); st->port=d->port; if (d->path) st->path=strdup(d->path); if (d->userName) st->userName=strdup(d->userName); if (d->password) st->password=strdup(d->password); if (d->vars) { GWEN_DB_Group_free(st->vars); st->vars=GWEN_DB_Group_dup(d->vars); } if (d->url) st->url=strdup(d->url); return st; } int GWEN_Url_toDb(const GWEN_URL *st, GWEN_DB_NODE *db) { assert(st); assert(db); if (st->protocol) if (GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "protocol", st->protocol)) return -1; if (st->server) if (GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "server", st->server)) return -1; if (GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "port", st->port)) return -1; if (st->path) if (GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "path", st->path)) return -1; if (st->userName) if (GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "userName", st->userName)) return -1; if (st->password) if (GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "password", st->password)) return -1; if (st->vars) if (GWEN_DB_AddGroupChildren(st->vars, GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_DEFAULT, "vars"))) return -1; if (st->url) if (GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "url", st->url)) return -1; return 0; } int GWEN_Url_ReadDb(GWEN_URL *st, GWEN_DB_NODE *db) { assert(st); assert(db); GWEN_Url_SetProtocol(st, GWEN_DB_GetCharValue(db, "protocol", 0, 0)); GWEN_Url_SetServer(st, GWEN_DB_GetCharValue(db, "server", 0, 0)); GWEN_Url_SetPort(st, GWEN_DB_GetIntValue(db, "port", 0, 0)); GWEN_Url_SetPath(st, GWEN_DB_GetCharValue(db, "path", 0, 0)); GWEN_Url_SetUserName(st, GWEN_DB_GetCharValue(db, "userName", 0, 0)); GWEN_Url_SetPassword(st, GWEN_DB_GetCharValue(db, "password", 0, 0)); if (1) { /* for local vars */ GWEN_DB_NODE *dbT; dbT=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "vars"); if (dbT) { if (st->vars) GWEN_DB_Group_free(st->vars); st->vars=GWEN_DB_Group_dup(dbT); } } GWEN_Url_SetUrl(st, GWEN_DB_GetCharValue(db, "url", 0, 0)); return 0; } GWEN_URL *GWEN_Url_fromDb(GWEN_DB_NODE *db) { GWEN_URL *st; assert(db); st=GWEN_Url_new(); GWEN_Url_ReadDb(st, db); st->_modified=0; return st; } const char *GWEN_Url_GetProtocol(const GWEN_URL *st) { assert(st); return st->protocol; } void GWEN_Url_SetProtocol(GWEN_URL *st, const char *d) { assert(st); if (st->protocol) free(st->protocol); if (d && *d) st->protocol=strdup(d); else st->protocol=0; st->_modified=1; } const char *GWEN_Url_GetServer(const GWEN_URL *st) { assert(st); return st->server; } void GWEN_Url_SetServer(GWEN_URL *st, const char *d) { assert(st); if (st->server) free(st->server); if (d && *d) st->server=strdup(d); else st->server=0; st->_modified=1; } int GWEN_Url_GetPort(const GWEN_URL *st) { assert(st); return st->port; } void GWEN_Url_SetPort(GWEN_URL *st, int d) { assert(st); st->port=d; st->_modified=1; } const char *GWEN_Url_GetPath(const GWEN_URL *st) { assert(st); return st->path; } void GWEN_Url_SetPath(GWEN_URL *st, const char *d) { assert(st); if (st->path) free(st->path); if (d && *d) st->path=strdup(d); else st->path=0; st->_modified=1; } const char *GWEN_Url_GetUserName(const GWEN_URL *st) { assert(st); return st->userName; } void GWEN_Url_SetUserName(GWEN_URL *st, const char *d) { assert(st); if (st->userName) free(st->userName); if (d && *d) st->userName=strdup(d); else st->userName=0; st->_modified=1; } const char *GWEN_Url_GetPassword(const GWEN_URL *st) { assert(st); return st->password; } void GWEN_Url_SetPassword(GWEN_URL *st, const char *d) { assert(st); if (st->password) free(st->password); if (d && *d) st->password=strdup(d); else st->password=0; st->_modified=1; } GWEN_DB_NODE *GWEN_Url_GetVars(const GWEN_URL *st) { assert(st); return st->vars; } void GWEN_Url_SetVars(GWEN_URL *st, GWEN_DB_NODE *d) { assert(st); if (st->vars) GWEN_DB_Group_free(st->vars); if (d) st->vars=GWEN_DB_Group_dup(d); else st->vars=0; st->_modified=1; } const char *GWEN_Url_GetUrl(const GWEN_URL *st) { assert(st); return st->url; } void GWEN_Url_SetUrl(GWEN_URL *st, const char *d) { assert(st); if (st->url) free(st->url); if (d && *d) st->url=strdup(d); else st->url=0; st->_modified=1; } int GWEN_Url_IsModified(const GWEN_URL *st) { assert(st); return st->_modified; } void GWEN_Url_SetModified(GWEN_URL *st, int i) { assert(st); st->_modified=i; } void GWEN_Url_Attach(GWEN_URL *st) { assert(st); st->_usage++; } GWEN_URL *GWEN_Url_List2__freeAll_cb(GWEN_URL *st, GWEN_UNUSED void *user_data) { GWEN_Url_free(st); return 0; } void GWEN_Url_List2_freeAll(GWEN_URL_LIST2 *stl) { if (stl) { GWEN_Url_List2_ForEach(stl, GWEN_Url_List2__freeAll_cb, 0); GWEN_Url_List2_free(stl); } } GWEN_URL_LIST *GWEN_Url_List_dup(const GWEN_URL_LIST *stl) { if (stl) { GWEN_URL_LIST *nl; GWEN_URL *e; nl=GWEN_Url_List_new(); e=GWEN_Url_List_First(stl); while(e) { GWEN_URL *ne; ne=GWEN_Url_dup(e); assert(ne); GWEN_Url_List_Add(ne, nl); e=GWEN_Url_List_Next(e); } /* while (e) */ return nl; } else return 0; } gwenhywfar-4.15.2beta/src/parser/tag16_p.h0000644000175000017500000000153512364015347015247 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: tag16_p.h 790 2005-07-23 09:32:08Z aquamaniac $ begin : Sun Jun 13 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWENHYWFAR_OHBCI_TAG16_P_H #define GWENHYWFAR_OHBCI_TAG16_P_H #include "tag16.h" struct GWEN_TAG16 { GWEN_LIST_ELEMENT(GWEN_TAG16) unsigned int tagSize; unsigned int tagType; unsigned int tagLength; void *tagData; int dataOwned; }; #endif /* GWENHYWFAR_OHBCI_TAG16_P_H */ gwenhywfar-4.15.2beta/src/parser/db.c0000644000175000017500000012031112416477066014370 00000000000000/*************************************************************************** begin : Tue Sep 09 2003 copyright : (C) 2003-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "db_p.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_FCNTL_H # include #endif #ifdef HAVE_UNISTD_H # include #endif #define GWEN_DB_NODE_FLAGS_MASK_INTERNAL 0xf0000000 #define GWEN_DB_NODE_FLAGS_GROUP 0x80000000 GWEN_LIST_FUNCTIONS(GWEN_DB_NODE, GWEN_DB_Node) GWEN_DB_NODE *GWEN_DB_Node_new(GWEN_DB_NODE_TYPE t) { GWEN_DB_NODE *node; GWEN_NEW_OBJECT(GWEN_DB_NODE, node); GWEN_LIST_INIT(GWEN_DB_NODE, node); node->typ=t; return (GWEN_DB_NODE*)node; } GWEN_DB_NODE *GWEN_DB_ValueBin_new(const void *data, unsigned int datasize) { GWEN_DB_NODE *n; n=GWEN_DB_Node_new(GWEN_DB_NodeType_ValueBin); if (datasize) { assert(data); n->dataSize=datasize; n->data.dataBin=(char*)GWEN_Memory_malloc(datasize); assert(n->data.dataBin); memmove(n->data.dataBin, data, datasize); } return n; } GWEN_DB_NODE *GWEN_DB_ValueInt_new(int data) { GWEN_DB_NODE *n; n=GWEN_DB_Node_new(GWEN_DB_NodeType_ValueInt); n->data.dataInt=data; return n; } GWEN_DB_NODE *GWEN_DB_ValueChar_new(const char *data) { GWEN_DB_NODE *n; n=GWEN_DB_Node_new(GWEN_DB_NodeType_ValueChar); if (data) n->data.dataChar=GWEN_Memory_strdup(data); else n->data.dataChar=GWEN_Memory_strdup(""); return n; } GWEN_DB_NODE *GWEN_DB_ValuePtr_new(void *data) { GWEN_DB_NODE *n; n=GWEN_DB_Node_new(GWEN_DB_NodeType_ValuePtr); n->data.dataPtr=data; return n; } GWEN_DB_NODE *GWEN_DB_Group_new(const char *name) { GWEN_DB_NODE *n; assert(name); n=GWEN_DB_Node_new(GWEN_DB_NodeType_Group); if (name) n->data.dataName=GWEN_Memory_strdup(name); else n->data.dataName=GWEN_Memory_strdup(""); n->children=GWEN_DB_Node_List_new(); return n; } GWEN_DB_NODE *GWEN_DB_Var_new(const char *name) { GWEN_DB_NODE *n; assert(name); n=GWEN_DB_Node_new(GWEN_DB_NodeType_Var); if (name) n->data.dataName=GWEN_Memory_strdup(name); else n->data.dataName=GWEN_Memory_strdup(""); n->children=GWEN_DB_Node_List_new(); return n; } void GWEN_DB_Node_Append_UnDirty(GWEN_DB_NODE *parent, GWEN_DB_NODE *n) { assert(parent); assert(n); assert(parent!=n); assert(parent->children!=NULL); GWEN_DB_Node_List_Add(n, parent->children); n->parent=parent; } void GWEN_DB_Node_Append(GWEN_DB_NODE *parent, GWEN_DB_NODE *n) { GWEN_DB_Node_Append_UnDirty(parent, n); GWEN_DB_ModifyBranchFlagsUp(parent, GWEN_DB_NODE_FLAGS_DIRTY, GWEN_DB_NODE_FLAGS_DIRTY); } void GWEN_DB_Node_InsertUnDirty(GWEN_DB_NODE *parent, GWEN_DB_NODE *n) { assert(parent); assert(n); assert(parent!=n); assert(parent->children!=NULL); GWEN_DB_Node_List_Insert(n, parent->children); n->parent=parent; } void GWEN_DB_Node_Insert(GWEN_DB_NODE *parent, GWEN_DB_NODE *n) { GWEN_DB_Node_InsertUnDirty(parent, n); GWEN_DB_ModifyBranchFlagsUp(parent, GWEN_DB_NODE_FLAGS_DIRTY, GWEN_DB_NODE_FLAGS_DIRTY); } void GWEN_DB_Node_Unlink_UnDirty(GWEN_DB_NODE *n) { GWEN_DB_NODE *parent; assert(n); parent=n->parent; if (!parent) { DBG_WARN(GWEN_LOGDOMAIN, "Node is not linked, nothing to do"); return; } GWEN_DB_Node_List_Del(n); n->parent=NULL; } void GWEN_DB_Node_Unlink(GWEN_DB_NODE *n) { GWEN_DB_NODE *parent; assert(n); parent=n->parent; assert(parent); GWEN_DB_Node_Unlink_UnDirty(n); GWEN_DB_ModifyBranchFlagsUp(parent, GWEN_DB_NODE_FLAGS_DIRTY, GWEN_DB_NODE_FLAGS_DIRTY); } void GWEN_DB_Node_free(GWEN_DB_NODE *n) { if (n) { GWEN_LIST_FINI(GWEN_DB_NODE, n); /* free children */ if (n->children) GWEN_DB_Node_List_free(n->children); if (n->nodeFlags & GWEN_DB_NODE_FLAGS_SAFE) { /* free dynamic (allocated) data safely */ switch(n->typ) { case GWEN_DB_NodeType_Group: case GWEN_DB_NodeType_Var: if (n->data.dataName) { int l=strlen(n->data.dataName); if (l) memset(n->data.dataName, 0, l); GWEN_Memory_dealloc(n->data.dataName); } break; case GWEN_DB_NodeType_ValueChar: if (n->data.dataChar) { int l=strlen(n->data.dataChar); if (l) memset(n->data.dataChar, 0, l); GWEN_Memory_dealloc(n->data.dataChar); } break; case GWEN_DB_NodeType_ValueBin: if (n->data.dataBin && n->dataSize) { memset(n->data.dataBin, 0, n->dataSize); GWEN_Memory_dealloc(n->data.dataBin); } break; case GWEN_DB_NodeType_ValuePtr: n->data.dataPtr=NULL; break; case GWEN_DB_NodeType_ValueInt: n->data.dataInt=0; break; default: DBG_WARN(GWEN_LOGDOMAIN, "Unknown node type (%d)", n->typ); } } else { /* free dynamic (allocated) data */ switch(n->typ) { case GWEN_DB_NodeType_Group: case GWEN_DB_NodeType_Var: GWEN_Memory_dealloc(n->data.dataName); break; case GWEN_DB_NodeType_ValueChar: GWEN_Memory_dealloc(n->data.dataChar); break; case GWEN_DB_NodeType_ValueBin: GWEN_Memory_dealloc(n->data.dataBin); break; case GWEN_DB_NodeType_ValuePtr: case GWEN_DB_NodeType_ValueInt: break; default: DBG_WARN(GWEN_LOGDOMAIN, "Unknown node type (%d)", n->typ); } } DBG_VERBOUS(GWEN_LOGDOMAIN, "Freeing node itself"); GWEN_FREE_OBJECT(n); } } GWEN_DB_NODE *GWEN_DB_Node_dup(const GWEN_DB_NODE *n) { GWEN_DB_NODE *nn; switch(n->typ) { case GWEN_DB_NodeType_Group: DBG_VERBOUS(GWEN_LOGDOMAIN, "Duplicating group \"%s\"", n->data.dataName); nn=GWEN_DB_Group_new(n->data.dataName); break; case GWEN_DB_NodeType_Var: DBG_VERBOUS(GWEN_LOGDOMAIN, "Duplicating variable \"%s\"", n->data.dataName); nn=GWEN_DB_Var_new(n->data.dataName); break; case GWEN_DB_NodeType_ValueChar: nn=GWEN_DB_ValueChar_new(n->data.dataChar); break; case GWEN_DB_NodeType_ValueBin: nn=GWEN_DB_ValueBin_new(n->data.dataBin, n->dataSize); break; case GWEN_DB_NodeType_ValuePtr: nn=GWEN_DB_ValuePtr_new(n->data.dataPtr); break; case GWEN_DB_NodeType_ValueInt: nn=GWEN_DB_ValueInt_new(n->data.dataInt); break; default: DBG_WARN(GWEN_LOGDOMAIN, "Unknown node type (%d)", n->typ); nn=0; } /* duplicate all children and add them to the new node */ if (nn) { const GWEN_DB_NODE *cn; cn=GWEN_DB_Node_List_First(n->children); while(cn) { GWEN_DB_NODE *ncn; /* duplicate child and add it */ ncn=GWEN_DB_Node_dup(cn); if (!ncn) { GWEN_DB_Node_free(nn); return NULL; } GWEN_DB_Node_Append_UnDirty(nn, ncn); cn=GWEN_DB_Node_List_Next(cn); } /* while cn */ } return nn; } void GWEN_DB_Group_free(GWEN_DB_NODE *n) { GWEN_DB_Node_free(n); } GWEN_DB_NODE *GWEN_DB_Group_dup(const GWEN_DB_NODE *n) { assert(n); if (n->typ!=GWEN_DB_NodeType_Group) { DBG_ERROR(GWEN_LOGDOMAIN, "Node is not a group"); return NULL; } return GWEN_DB_Node_dup(n); } GWEN_DB_NODE *GWEN_DB_GetFirstGroup(GWEN_DB_NODE *n) { GWEN_DB_NODE *nn; assert(n); if (n->typ!=GWEN_DB_NodeType_Group) { DBG_ERROR(GWEN_LOGDOMAIN, "Node is not a group"); return NULL; } assert(n->children); nn=GWEN_DB_Node_List_First(n->children); while(nn) { if (nn->typ==GWEN_DB_NodeType_Group) break; nn=GWEN_DB_Node_List_Next(nn); } /* while node */ return nn; } GWEN_DB_NODE *GWEN_DB_GetNextGroup(GWEN_DB_NODE *n) { assert(n); if (n->typ!=GWEN_DB_NodeType_Group) { DBG_ERROR(GWEN_LOGDOMAIN, "Node is not a group"); return NULL; } n=GWEN_DB_Node_List_Next(n); while(n) { if (n->typ==GWEN_DB_NodeType_Group) break; n=GWEN_DB_Node_List_Next(n); } /* while node */ return n; } GWEN_DB_NODE *GWEN_DB_GetFirstVar(GWEN_DB_NODE *n) { GWEN_DB_NODE *nn; assert(n); if (n->typ!=GWEN_DB_NodeType_Group) { DBG_ERROR(GWEN_LOGDOMAIN, "Node is not a group"); return NULL; } assert(n->children); nn=GWEN_DB_Node_List_First(n->children); while(nn) { if (nn->typ==GWEN_DB_NodeType_Var) break; nn=GWEN_DB_Node_List_Next(nn); } /* while node */ return nn; } GWEN_DB_NODE *GWEN_DB_GetNextVar(GWEN_DB_NODE *n) { assert(n); if (n->typ!=GWEN_DB_NodeType_Var) { DBG_ERROR(GWEN_LOGDOMAIN, "Node is not a variable"); return NULL; } n=GWEN_DB_Node_List_Next(n); while(n) { if (n->typ==GWEN_DB_NodeType_Var) break; n=GWEN_DB_Node_List_Next(n); } /* while node */ return n; } GWEN_DB_NODE *GWEN_DB_GetFirstValue(GWEN_DB_NODE *n) { GWEN_DB_NODE *nn; assert(n); if (n->typ!=GWEN_DB_NodeType_Var) { DBG_ERROR(GWEN_LOGDOMAIN, "Node is not a variable"); return NULL; } assert(n->children); nn=GWEN_DB_Node_List_First(n->children); while(nn) { if (nn->typ>=GWEN_DB_NodeType_ValueChar && nn->typtyptyp>=GWEN_DB_NodeType_ValueLast) { DBG_ERROR(GWEN_LOGDOMAIN, "Node is not a value"); return NULL; } n=GWEN_DB_Node_List_Next(n); while(n) { if (n->typ>=GWEN_DB_NodeType_ValueChar && n->typtyp>=GWEN_DB_NodeType_ValueChar && n->typtyp; } else { DBG_ERROR(GWEN_LOGDOMAIN, "Node is not a value"); return GWEN_DB_NodeType_Unknown; } } const char *GWEN_DB_GetCharValueFromNode(const GWEN_DB_NODE *n) { assert(n); if (n->typ!=GWEN_DB_NodeType_ValueChar) { DBG_ERROR(GWEN_LOGDOMAIN, "Node is not a char value"); return NULL; } return n->data.dataChar; } int GWEN_DB_SetCharValueInNode(GWEN_DB_NODE *n, const char *s) { assert(n); assert(s); if (n->typ!=GWEN_DB_NodeType_ValueChar) { DBG_ERROR(GWEN_LOGDOMAIN, "Node is not a char value"); return GWEN_ERROR_INVALID; } GWEN_Memory_dealloc(n->data.dataChar); n->data.dataChar=GWEN_Memory_strdup(s); return 0; } int GWEN_DB_GetIntValueFromNode(const GWEN_DB_NODE *n) { const char *p; int res; assert(n); switch(n->typ) { case GWEN_DB_NodeType_ValueInt: return n->data.dataInt; case GWEN_DB_NodeType_ValueChar: p=n->data.dataChar; assert(p); if (sscanf(p, "%d", &res)!=1) { DBG_ERROR(GWEN_LOGDOMAIN, "String in node is not an int value"); return 0; } return res; default: DBG_ERROR(GWEN_LOGDOMAIN, "Node is neither char nor int value"); return 0; } } const void *GWEN_DB_GetBinValueFromNode(const GWEN_DB_NODE *n, unsigned int *size) { assert(n); if (n->typ!=GWEN_DB_NodeType_ValueBin) { DBG_ERROR(GWEN_LOGDOMAIN, "Node is not a binary value"); return NULL; } *size=n->dataSize; return n->data.dataBin; } GWEN_DB_NODE *GWEN_DB_FindGroup(GWEN_DB_NODE *n, const char *name, int idx) { GWEN_DB_NODE *nn; assert(n); assert(name); if (n->typ!=GWEN_DB_NodeType_Group) { DBG_ERROR(GWEN_LOGDOMAIN, "Node is not a group"); return NULL; } /* find existing node */ assert(n->children); nn=GWEN_DB_Node_List_First(n->children); while(nn) { if (nn->typ==GWEN_DB_NodeType_Group) { if (strcasecmp(nn->data.dataName, name)==0) { if (!idx) /* ok, group found, return it */ return nn; idx--; } /* if entry found */ } nn=GWEN_DB_Node_List_Next(nn); } /* while node */ return NULL; } GWEN_DB_NODE *GWEN_DB_FindVar(GWEN_DB_NODE *n, const char *name, int idx) { GWEN_DB_NODE *nn; assert(n); assert(name); if (n->typ!=GWEN_DB_NodeType_Group) { DBG_ERROR(GWEN_LOGDOMAIN, "Node is not a group"); return NULL; } /* find existing node */ assert(n->children); nn=GWEN_DB_Node_List_First(n->children); while(nn) { if (nn->typ==GWEN_DB_NodeType_Var) { if (strcasecmp(nn->data.dataName, name)==0) { if (!idx) /* ok, group found, return it */ return nn; idx--; } /* if entry found */ } nn=GWEN_DB_Node_List_Next(nn); } /* while node */ return NULL; } void* GWEN_DB_HandlePath(const char *entry, void *data, int idx, uint32_t flags) { GWEN_DB_NODE *n; GWEN_DB_NODE *nn; n=(GWEN_DB_NODE*)data; /* check whether we are allowed to simply create the node */ if ( ((flags & GWEN_PATH_FLAGS_LAST) && (((flags & GWEN_PATH_FLAGS_VARIABLE) && (flags & GWEN_PATH_FLAGS_CREATE_VAR)) || (!(flags & GWEN_PATH_FLAGS_VARIABLE) && (flags & GWEN_PATH_FLAGS_CREATE_GROUP))) ) || ( !(flags & GWEN_PATH_FLAGS_LAST) && (flags & GWEN_PATH_FLAGS_PATHCREATE)) ) { /* simply create the new variable/group */ if (idx!=0) { DBG_INFO(GWEN_LOGDOMAIN, "Index is not 0, not creating %s[%d]", entry, idx); return 0; } if (flags & GWEN_PATH_FLAGS_VARIABLE) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Unconditionally creating variable \"%s\"", entry); nn=GWEN_DB_Var_new(entry); if (flags & GWEN_DB_FLAGS_INSERT) GWEN_DB_Node_Insert(n, nn); else GWEN_DB_Node_Append(n, nn); return nn; } else { DBG_VERBOUS(GWEN_LOGDOMAIN, "Unconditionally creating group \"%s\"", entry); nn=GWEN_DB_Group_new(entry); if (flags & GWEN_DB_FLAGS_INSERT) GWEN_DB_Node_Insert(n, nn); else GWEN_DB_Node_Append(n, nn); return nn; } } /* find the node */ if (flags & GWEN_PATH_FLAGS_VARIABLE) { nn=GWEN_DB_FindVar(n, entry, idx); } else { nn=GWEN_DB_FindGroup(n, entry, idx); } if (!nn) { /* node not found, check, if we are allowed to create it */ if ( (!(flags & GWEN_PATH_FLAGS_LAST) && (flags & GWEN_PATH_FLAGS_PATHMUSTEXIST)) || (flags & GWEN_PATH_FLAGS_NAMEMUSTEXIST) ) { if (flags & GWEN_PATH_FLAGS_VARIABLE) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Variable \"%s\" does not exist", entry); } else { DBG_VERBOUS(GWEN_LOGDOMAIN, "Group \"%s\" does not exist", entry); } return 0; } /* create the new variable/group */ if (idx!=0) { DBG_INFO(GWEN_LOGDOMAIN, "Index is not 0, not creating %s[%d]", entry, idx); return 0; } if (flags & GWEN_PATH_FLAGS_VARIABLE) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Variable \"%s\" not found, creating", entry); nn=GWEN_DB_Var_new(entry); if (flags & GWEN_DB_FLAGS_INSERT) GWEN_DB_Node_Insert(n, nn); else GWEN_DB_Node_Append(n, nn); } else { DBG_VERBOUS(GWEN_LOGDOMAIN, "Group \"%s\" not found, creating", entry); nn=GWEN_DB_Group_new(entry); if (flags & GWEN_DB_FLAGS_INSERT) GWEN_DB_Node_Insert(n, nn); else GWEN_DB_Node_Append(n, nn); } } /* if node not found */ else { /* node does exist, check whether this is ok */ if ( ((flags & GWEN_PATH_FLAGS_LAST) && (flags & GWEN_PATH_FLAGS_NAMEMUSTNOTEXIST)) || (!(flags & GWEN_PATH_FLAGS_LAST) && (flags & GWEN_PATH_FLAGS_PATHMUSTNOTEXIST)) ) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Entry \"%s\" already exists", entry); return 0; } } return nn; } GWEN_DB_NODE *GWEN_DB_GetNode(GWEN_DB_NODE *n, const char *path, uint32_t flags) { return (GWEN_DB_NODE*)GWEN_Path_HandleWithIdx(path, n, flags, GWEN_DB_HandlePath); } void GWEN_DB_ClearNode(GWEN_DB_NODE *n) { assert(n); if (n->children) GWEN_DB_Node_List_Clear(n->children); } GWEN_DB_NODE *GWEN_DB_GetValue(GWEN_DB_NODE *n, const char *path, int idx) { GWEN_DB_NODE *nn; /* find corresponding node */ nn=GWEN_DB_GetNode(n, path, GWEN_PATH_FLAGS_PATHMUSTEXIST | GWEN_PATH_FLAGS_NAMEMUSTEXIST | GWEN_PATH_FLAGS_VARIABLE); if (!nn) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Path \"%s\" not found", path); return 0; } /* find value */ assert(nn->children); nn=GWEN_DB_Node_List_First(nn->children); while(nn) { if (nn->typ>=GWEN_DB_NodeType_ValueChar && nn->typtyp!=GWEN_DB_NodeType_ValueChar) { /* bad type */ DBG_VERBOUS(GWEN_LOGDOMAIN, "Bad type for path \"%s\", returning default value", path); return defVal; } return nn->data.dataChar; } int GWEN_DB_SetCharValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const char *val) { GWEN_DB_NODE *nn; GWEN_DB_NODE *nv; /* select/create node */ nn=GWEN_DB_GetNode(n, path, flags | GWEN_PATH_FLAGS_VARIABLE); if (!nn) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Path \"%s\" not available", path); return 1; } nv=GWEN_DB_ValueChar_new(val); /* delete contents of this variable if wanted */ if (flags & GWEN_DB_FLAGS_OVERWRITE_VARS) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Clearing variable \"%s\"", path); GWEN_DB_ClearNode(nn); } /* add previously created value */ if (flags & GWEN_DB_FLAGS_INSERT) GWEN_DB_Node_Insert(nn, nv); else GWEN_DB_Node_Append(nn, nv); DBG_VERBOUS(GWEN_LOGDOMAIN, "Added char value \"%s\" to variable \"%s\"", val, path); return 0; } int GWEN_DB_AddCharValue(GWEN_DB_NODE *n, const char *path, const char *val, int senseCase, int check) { GWEN_DB_NODE *nn; GWEN_DB_NODE *nv; /* select/create node */ nn=GWEN_DB_GetNode(n, path, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_VARIABLE); if (!nn) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Path \"%s\" not available", path); return -1; } if (check) { nv=GWEN_DB_GetFirstValue(n); if (nv && nv->typ==GWEN_DB_NodeType_ValueChar) { int res; assert(nv->data.dataChar); if (senseCase) res=strcasecmp(nv->data.dataChar, val)==0; else res=strcmp(nv->data.dataChar, val)==0; if (res) { DBG_DEBUG(GWEN_LOGDOMAIN, "Value \"%s\" of var \"%s\" already exists", val, path); return 1; } } } /* if check */ nv=GWEN_DB_ValueChar_new(val); GWEN_DB_Node_Append(nn, nv); DBG_VERBOUS(GWEN_LOGDOMAIN, "Added char value \"%s\" to variable \"%s\"", val, path); return 0; } int GWEN_DB_RemoveCharValue(GWEN_DB_NODE *n, const char *path, const char *val, int senseCase) { GWEN_DB_NODE *nn; GWEN_DB_NODE *nv; /* select/create node */ nn=GWEN_DB_GetNode(n, path, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_VARIABLE); if (!nn) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Path \"%s\" not available", path); return -1; } nv=GWEN_DB_GetFirstValue(n); if (nv && nv->typ==GWEN_DB_NodeType_ValueChar) { int res; assert(nv->data.dataChar); if (senseCase) res=strcasecmp(nv->data.dataChar, val)==0; else res=strcmp(nv->data.dataChar, val)==0; if (res) { DBG_DEBUG(GWEN_LOGDOMAIN, "Value \"%s\" of var \"%s\" already exists", val, path); GWEN_DB_Node_Unlink(nv); GWEN_DB_Node_free(nv); return 0; } } return 1; } int GWEN_DB_GetIntValue(GWEN_DB_NODE *n, const char *path, int idx, int defVal) { GWEN_DB_NODE *nn; const char *p; int res; assert(n); nn=GWEN_DB_GetValue(n, path, idx); if (!nn) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Value[%d] for \"%s\" not found, returning default value", idx, path); return defVal; } switch(nn->typ) { case GWEN_DB_NodeType_ValueInt: return nn->data.dataInt; case GWEN_DB_NodeType_ValueChar: p=nn->data.dataChar; assert(p); if (sscanf(p, "%d", &res)!=1) { DBG_INFO(GWEN_LOGDOMAIN, "String [%s] in node is not an int value", p); return defVal; } return res; default: DBG_ERROR(GWEN_LOGDOMAIN, "Node is neither char nor int value"); return defVal; } } int GWEN_DB_SetIntValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, int val) { GWEN_DB_NODE *nn; GWEN_DB_NODE *nv; /* select/create node */ nn=GWEN_DB_GetNode(n, path, flags | GWEN_PATH_FLAGS_VARIABLE); if (!nn) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Path \"%s\" not available", path); return 1; } /* delete contents of this variable if wanted */ if (flags & GWEN_DB_FLAGS_OVERWRITE_VARS) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Clearing variable \"%s\"", path); GWEN_DB_ClearNode(nn); } nv=GWEN_DB_ValueInt_new(val); if (flags & GWEN_DB_FLAGS_INSERT) GWEN_DB_Node_Insert(nn, nv); else GWEN_DB_Node_Append(nn, nv); DBG_VERBOUS(GWEN_LOGDOMAIN, "Added int value \"%d\" to variable \"%s\"", val, path); return 0; } const void *GWEN_DB_GetBinValue(GWEN_DB_NODE *n, const char *path, int idx, const void *defVal, unsigned int defValSize, unsigned int *returnValueSize) { GWEN_DB_NODE *nn; assert(returnValueSize); nn=GWEN_DB_GetValue(n, path, idx); if (!nn) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Value for \"%s\" not found, returning default value", path); *returnValueSize=defValSize; return defVal; } if (nn->typ!=GWEN_DB_NodeType_ValueBin) { /* bad type */ DBG_VERBOUS(GWEN_LOGDOMAIN, "Bad type for path \"%s\", returning default value", path); *returnValueSize=defValSize; return defVal; } *returnValueSize=nn->dataSize; return nn->data.dataBin; } int GWEN_DB_SetBinValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const void *val, unsigned int valSize) { GWEN_DB_NODE *nn; GWEN_DB_NODE *nv; assert(val); /* select/create node */ nn=GWEN_DB_GetNode(n, path, flags | GWEN_PATH_FLAGS_VARIABLE); if (!nn) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Path \"%s\" not available", path); return 1; } /* delete contents of this variable if wanted */ if (flags & GWEN_DB_FLAGS_OVERWRITE_VARS) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Clearing variable \"%s\"", path); GWEN_DB_ClearNode(nn); } nv=GWEN_DB_ValueBin_new(val, valSize); if (flags & GWEN_DB_FLAGS_INSERT) GWEN_DB_Node_Insert(nn, nv); else GWEN_DB_Node_Append(nn, nv); DBG_VERBOUS(GWEN_LOGDOMAIN, "Added bin value to variable \"%s\"", path); return 0; } void *GWEN_DB_GetPtrValue(GWEN_DB_NODE *n, const char *path, int idx, void *defVal) { GWEN_DB_NODE *nn; nn=GWEN_DB_GetValue(n, path, idx); if (!nn) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Value for \"%s\" not found, returning default value", path); return defVal; } if (nn->typ!=GWEN_DB_NodeType_ValuePtr) { /* bad type */ DBG_VERBOUS(GWEN_LOGDOMAIN, "Bad type for path \"%s\", returning default value", path); return defVal; } return nn->data.dataPtr; } int GWEN_DB_SetPtrValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, void *val) { GWEN_DB_NODE *nn; GWEN_DB_NODE *nv; /* select/create node */ nn=GWEN_DB_GetNode(n, path, flags | GWEN_PATH_FLAGS_VARIABLE); if (!nn) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Path \"%s\" not available", path); return 1; } /* delete contents of this variable if wanted */ if (flags & GWEN_DB_FLAGS_OVERWRITE_VARS) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Clearing variable \"%s\"", path); GWEN_DB_ClearNode(nn); } nv=GWEN_DB_ValuePtr_new(val); if (flags & GWEN_DB_FLAGS_INSERT) GWEN_DB_Node_Insert(nn, nv); else GWEN_DB_Node_Append(nn, nv); DBG_VERBOUS(GWEN_LOGDOMAIN, "Added ptr value to variable \"%s\"", path); return 0; } GWEN_DB_NODE *GWEN_DB_GetGroup(GWEN_DB_NODE *n, uint32_t flags, const char *path) { GWEN_DB_NODE *nn; /* select/create node */ nn=GWEN_DB_GetNode(n, path, flags & ~GWEN_PATH_FLAGS_VARIABLE); if (!nn) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Path \"%s\" not available", path); return NULL; } /* delete contents of this variable if wanted */ if (flags & GWEN_DB_FLAGS_OVERWRITE_GROUPS) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Clearing group \"%s\"", path); GWEN_DB_ClearNode(nn); } return nn; } const char *GWEN_DB_GroupName(GWEN_DB_NODE *n) { assert(n); if (n->typ!=GWEN_DB_NodeType_Group) { DBG_ERROR(GWEN_LOGDOMAIN, "Node is not a group"); return NULL; } return n->data.dataName; } void GWEN_DB_Dump(GWEN_DB_NODE *n, int insert) { if (n) { int i; for (i=0; ityp) { case GWEN_DB_NodeType_Group: fprintf(stderr, "Group : \"%s\"\n", n->data.dataName); break; case GWEN_DB_NodeType_Var: fprintf(stderr, "Var : \"%s\"\n", n->data.dataName); break; case GWEN_DB_NodeType_ValueChar: fprintf(stderr, "Value : \"%s\" (char)\n", n->data.dataChar); break; case GWEN_DB_NodeType_ValueInt: fprintf(stderr, "Value : %d (int)\n", n->data.dataInt); break; case GWEN_DB_NodeType_ValueBin: { char *buffer; buffer=(char*)GWEN_Memory_malloc((n->dataSize*2)+1); assert(buffer); if (GWEN_Text_ToHex(n->data.dataBin, n->dataSize, buffer, (n->dataSize*2)+1)==0) { fprintf(stderr, "Value : %d bytes (bin)\n", n->dataSize); } else { fprintf(stderr, "Value : %s (bin)\n", buffer); } GWEN_Memory_dealloc(buffer); break; } case GWEN_DB_NodeType_ValuePtr: fprintf(stderr, "Value : %p (ptr)\n", n->data.dataPtr); break; default: fprintf(stderr, "[unknown node type %d]\n", n->typ); } /* dump children */ if (n->children) { GWEN_DB_NODE *cn; cn=GWEN_DB_Node_List_First(n->children); while(cn) { GWEN_DB_Dump(cn, insert+4); cn=GWEN_DB_Node_List_Next(cn); } } } else { fprintf(stderr, "[no node]\n"); } } int GWEN_DB_AddGroup(GWEN_DB_NODE *n, GWEN_DB_NODE *nn) { assert(n); assert(nn); if (n->typ!=GWEN_DB_NodeType_Group) { DBG_ERROR(GWEN_LOGDOMAIN, "Target node is not a group"); return 0; } if (nn->typ!=GWEN_DB_NodeType_Group) { DBG_ERROR(GWEN_LOGDOMAIN, "Source node is not a group"); return 0; } GWEN_DB_Node_Append(n, nn); return 0; } int GWEN_DB_InsertGroup(GWEN_DB_NODE *n, GWEN_DB_NODE *nn) { assert(n); assert(nn); if (n->typ!=GWEN_DB_NodeType_Group) { DBG_ERROR(GWEN_LOGDOMAIN, "Target node is not a group"); return 0; } if (nn->typ!=GWEN_DB_NodeType_Group) { DBG_ERROR(GWEN_LOGDOMAIN, "Source node is not a group"); return 0; } GWEN_DB_Node_Insert(n, nn); return 0; } int GWEN_DB_AddGroupChildren(GWEN_DB_NODE *n, GWEN_DB_NODE *nn) { GWEN_DB_NODE *cpn; assert(n); assert(nn); if (n->typ!=GWEN_DB_NodeType_Group) { DBG_ERROR(GWEN_LOGDOMAIN, "Target node is not a group"); return -1; } if (nn->typ!=GWEN_DB_NodeType_Group) { DBG_ERROR(GWEN_LOGDOMAIN, "Source node is not a group"); GWEN_DB_Dump(nn, 1); return -1; } nn=GWEN_DB_Node_List_First(nn->children); while (nn) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Duplicating node"); cpn=GWEN_DB_Node_dup(nn); GWEN_DB_Node_Append(n, cpn); nn=GWEN_DB_Node_List_Next(nn); } /* while */ return 0; } void GWEN_DB_UnlinkGroup(GWEN_DB_NODE *n) { assert(n); if (n->typ!=GWEN_DB_NodeType_Group) { DBG_ERROR(GWEN_LOGDOMAIN, "Node is not a group"); return; } GWEN_DB_Node_Unlink(n); } int GWEN_DB_VariableExists(GWEN_DB_NODE *n, const char *path) { GWEN_DB_NODE *nn; /* find corresponding node */ assert(n); nn=GWEN_DB_GetNode(n, path, GWEN_PATH_FLAGS_PATHMUSTEXIST | GWEN_PATH_FLAGS_NAMEMUSTEXIST | GWEN_PATH_FLAGS_VARIABLE); if (!nn) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Path \"%s\" not found", path); return 0; } return 1; } int GWEN_DB_ValueExists(GWEN_DB_NODE *n, const char *path, unsigned int i) { return (GWEN_DB_GetValue(n, path, i)!=0); } GWEN_DB_NODE_TYPE GWEN_DB_GetVariableType(GWEN_DB_NODE *n, const char *p) { GWEN_DB_NODE *nn; nn=GWEN_DB_FindVar(n, p, 0); if (!nn) return GWEN_DB_NodeType_Unknown; nn=GWEN_DB_GetFirstValue(nn); if (!nn) return GWEN_DB_NodeType_Unknown; return GWEN_DB_GetValueType(nn); } GWEN_DB_NODE_TYPE GWEN_DB_GetValueTypeByPath(GWEN_DB_NODE *n, const char *path, unsigned int i) { GWEN_DB_NODE *nn; nn=GWEN_DB_GetValue(n, path, i); if (!nn) return GWEN_DB_NodeType_Unknown; return GWEN_DB_GetValueType(nn); } void GWEN_DB_GroupRename(GWEN_DB_NODE *n, const char *newname) { assert(n); assert(newname); assert(n->typ==GWEN_DB_NodeType_Group); GWEN_Memory_dealloc(n->data.dataName); n->data.dataName=GWEN_Memory_strdup(newname); } int GWEN_DB_IsGroup(const GWEN_DB_NODE *n) { assert(n); return n->typ==GWEN_DB_NodeType_Group; } int GWEN_DB_IsVariable(const GWEN_DB_NODE *n) { assert(n); return n->typ==GWEN_DB_NodeType_Var; } int GWEN_DB_IsValue(const GWEN_DB_NODE *n) { assert(n); return (n->typ>=GWEN_DB_NodeType_ValueChar && n->typ>=GWEN_DB_NodeType_ValueLast); } void *GWEN_DB_Groups_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func, void *user_data) { GWEN_DB_NODE *iter; void *res; assert(node); assert(func); iter=GWEN_DB_GetFirstGroup(node); res=NULL; while(iter) { res=(*func)(iter, user_data); if (res) { break; } iter=GWEN_DB_GetNextGroup(iter); } return res; } void *GWEN_DB_count_cb(GWEN_UNUSED GWEN_DB_NODE *node, void *user_data) { unsigned int *a = user_data; ++(*a); return NULL; } unsigned int GWEN_DB_Groups_Count(const GWEN_DB_NODE *node) { unsigned int res = 0; GWEN_DB_Groups_Foreach((GWEN_DB_NODE *)node, GWEN_DB_count_cb, &res); return res; } void *GWEN_DB_Variables_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func, void *user_data) { GWEN_DB_NODE *iter; void *res; assert(node); assert(func); iter=GWEN_DB_GetFirstVar(node); res=NULL; while(iter) { res=(*func)(iter, user_data); if (res) { break; } iter=GWEN_DB_GetNextVar(iter); } return res; } unsigned int GWEN_DB_Variables_Count(const GWEN_DB_NODE *node) { unsigned int res = 0; GWEN_DB_Variables_Foreach((GWEN_DB_NODE *)node, GWEN_DB_count_cb, &res); return res; } void *GWEN_DB_Values_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func, void *user_data) { GWEN_DB_NODE *iter; void *res; assert(node); assert(func); iter=GWEN_DB_GetFirstValue(node); res=NULL; while(iter) { res=(*func)(iter, user_data); if (res) { break; } iter=GWEN_DB_GetNextValue(iter); } return res; } unsigned int GWEN_DB_Values_Count(const GWEN_DB_NODE *node) { unsigned int res = 0; GWEN_DB_Values_Foreach((GWEN_DB_NODE *)node, GWEN_DB_count_cb, &res); return res; } uint32_t GWEN_DB_GetNodeFlags(const GWEN_DB_NODE *n) { assert(n); return n->nodeFlags; } void GWEN_DB_SetNodeFlags(GWEN_DB_NODE *n, uint32_t flags) { assert(n); n->nodeFlags=flags; } void GWEN_DB_ModifyBranchFlagsUp(GWEN_DB_NODE *n, uint32_t newflags, uint32_t mask) { uint32_t flags; assert(n); while(n) { flags=n->nodeFlags; flags=((flags^newflags)&(mask))^flags; n->nodeFlags=flags; n=n->parent; } /* while */ } void GWEN_DB_ModifyBranchFlagsDown(GWEN_DB_NODE *n, uint32_t newflags, uint32_t mask) { uint32_t flags; GWEN_DB_NODE *cn; assert(n); flags=n->nodeFlags; flags=((flags^newflags)&(mask))^flags; n->nodeFlags=flags; cn=GWEN_DB_Node_List_First(n->children); while(cn) { GWEN_DB_ModifyBranchFlagsDown(cn, newflags, mask); cn=GWEN_DB_Node_List_Next(cn); } /* while cn */ } GWEN_DB_NODE *GWEN_DB_GetParentGroup(GWEN_DB_NODE *n) { GWEN_DB_NODE *nn; assert(n); nn=n->parent; while(nn && nn->typ!=GWEN_DB_NodeType_Group) nn=nn->parent; return nn; } GWEN_DB_NODE *GWEN_DB_FindFirstGroup(GWEN_DB_NODE *n, const char *name) { GWEN_DB_NODE *nn; assert(n); if (n->typ!=GWEN_DB_NodeType_Group) { DBG_ERROR(GWEN_LOGDOMAIN, "Node is not a group"); return NULL; } nn=GWEN_DB_Node_List_First(n->children); while(nn) { if ((nn->typ==GWEN_DB_NodeType_Group) && (-1!=GWEN_Text_ComparePattern(nn->data.dataName, name, 0))) break; nn=GWEN_DB_Node_List_Next(nn); } /* while node */ return nn; } GWEN_DB_NODE *GWEN_DB_FindNextGroup(GWEN_DB_NODE *n, const char *name) { GWEN_DB_NODE *og; og=n; assert(n); if (n->typ!=GWEN_DB_NodeType_Group) { DBG_ERROR(GWEN_LOGDOMAIN, "Node is not a group"); return NULL; } n=GWEN_DB_GetNextGroup(n); while(n) { if (-1!=GWEN_Text_ComparePattern(n->data.dataName, name, 0)) break; n=GWEN_DB_GetNextGroup(n); } /* while node */ assert(n!=og); return n; } GWEN_DB_NODE *GWEN_DB_FindFirstVar(GWEN_DB_NODE *n, const char *name) { GWEN_DB_NODE *nn; assert(n); if (n->typ!=GWEN_DB_NodeType_Group) { DBG_ERROR(GWEN_LOGDOMAIN, "Node is not a group"); return NULL; } nn=GWEN_DB_Node_List_First(n->children); while(nn) { if ((nn->typ==GWEN_DB_NodeType_Var) && (-1!=GWEN_Text_ComparePattern(nn->data.dataName, name, 0))) break; nn=GWEN_DB_Node_List_Next(nn); } /* while node */ return nn; } GWEN_DB_NODE *GWEN_DB_FindNextVar(GWEN_DB_NODE *n, const char *name) { GWEN_DB_NODE *og; og=n; assert(n); if (n->typ!=GWEN_DB_NodeType_Var) { DBG_ERROR(GWEN_LOGDOMAIN, "Node is not a variable"); return NULL; } n=GWEN_DB_GetNextVar(n); while(n) { if (-1!=GWEN_Text_ComparePattern(n->data.dataName, name, 0)) break; n=GWEN_DB_GetNextVar(n); } /* while node */ assert(n!=og); return n; } const char *GWEN_DB_VariableName(GWEN_DB_NODE *n) { assert(n); if (n->typ!=GWEN_DB_NodeType_Var) { DBG_ERROR(GWEN_LOGDOMAIN, "Node is not a variable"); return NULL; } return n->data.dataName; } void GWEN_DB_VariableRename(GWEN_DB_NODE *n, const char *newname) { assert(n); assert(newname); assert(n->typ==GWEN_DB_NodeType_Var); GWEN_Memory_dealloc(n->data.dataName); n->data.dataName=GWEN_Memory_strdup(newname); } #include "dbrw.c" gwenhywfar-4.15.2beta/src/parser/tlv.c0000644000175000017500000003100612450775036014606 00000000000000/*************************************************************************** begin : Sun Jun 13 2004 copyright : (C) 2004-2011 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "tlv_p.h" #include #include #include #include #include #include #include GWEN_LIST_FUNCTIONS(GWEN_TLV, GWEN_TLV) GWEN_TLV *GWEN_TLV_new(void) { GWEN_TLV *tlv; GWEN_NEW_OBJECT(GWEN_TLV, tlv); GWEN_LIST_INIT(GWEN_TLV, tlv); return tlv; } void GWEN_TLV_free(GWEN_TLV *tlv) { if (tlv) { free(tlv->tagData); GWEN_LIST_FINI(GWEN_TLV, tlv); GWEN_FREE_OBJECT(tlv); } } GWEN_TLV *GWEN_TLV_create(unsigned int tagType, unsigned int tagMode, const void *p, unsigned int dlen, int isBerTlv) { GWEN_TLV *tlv; /* some checks first */ if (tagType>255) { DBG_ERROR(GWEN_LOGDOMAIN, "Tag type too high"); abort(); } if (isBerTlv) { if (dlen>65535) { DBG_ERROR(GWEN_LOGDOMAIN, "Data too long"); abort(); } } else { if (dlen>255) { DBG_ERROR(GWEN_LOGDOMAIN, "Data too long"); abort(); } } /* limits ok, create TLV */ tlv=GWEN_TLV_new(); tlv->tagType=tagType; tlv->tagMode=tagMode; tlv->isBerTlv=isBerTlv; tlv->tagLength=dlen; if (dlen) { tlv->tagData=malloc(dlen); assert(tlv->tagData); memmove(tlv->tagData, p, dlen); } return tlv; } int GWEN_TLV_IsBerTlv(const GWEN_TLV *tlv) { assert(tlv); return tlv->isBerTlv; } unsigned int GWEN_TLV_GetTagType(const GWEN_TLV *tlv) { assert(tlv); return tlv->tagType; } unsigned int GWEN_TLV_GetTagLength(const GWEN_TLV *tlv) { assert(tlv); return tlv->tagLength; } unsigned int GWEN_TLV_GetTagSize(const GWEN_TLV *tlv) { assert(tlv); return tlv->tagSize; } const void *GWEN_TLV_GetTagData(const GWEN_TLV *tlv) { assert(tlv); return tlv->tagData; } GWEN_TLV *GWEN_TLV_fromBuffer(GWEN_BUFFER *mbuf, int isBerTlv) { const char *p; unsigned int tagMode; unsigned int tagType; unsigned int tagLength; const char *tagData; unsigned int size; unsigned int pos; unsigned int j; GWEN_TLV *tlv; uint32_t startPos; if (!GWEN_Buffer_GetBytesLeft(mbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer empty"); return 0; } startPos=GWEN_Buffer_GetPos(mbuf); tagMode=tagType=tagLength=0; p=GWEN_Buffer_GetPosPointer(mbuf); pos=0; size=GWEN_Buffer_GetBytesLeft(mbuf); /* get tag type */ if (size<2) { DBG_ERROR(GWEN_LOGDOMAIN, "Too few bytes for BER-TLV"); return 0; } j=(unsigned char)(p[pos]); tagMode=(j & 0xe0); if (isBerTlv) { if ((j & 0x1f)==0x1f) { pos++; if (pos>=size) { DBG_ERROR(GWEN_LOGDOMAIN, "Too few bytes"); return 0; } j=(unsigned char)(p[pos]); } else j&=0x1f; } DBG_DEBUG(GWEN_LOGDOMAIN, "Tag type %02x%s", j, isBerTlv?" (BER-TLV)":""); tagType=j; /* get length */ pos++; if (pos>=size) { DBG_ERROR(GWEN_LOGDOMAIN, "Too few bytes"); return 0; } j=(unsigned char)(p[pos]); if (isBerTlv) { if (j & 0x80) { if (j==0x81) { pos++; if (pos>=size) { DBG_ERROR(GWEN_LOGDOMAIN, "Too few bytes"); return 0; } j=(unsigned char)(p[pos]); } /* 0x81 */ else if (j==0x82) { if (pos+1>=size) { DBG_ERROR(GWEN_LOGDOMAIN, "Too few bytes"); return 0; } pos++; j=((unsigned char)(p[pos]))<<8; pos++; j+=(unsigned char)(p[pos]); } /* 0x82 */ else { DBG_ERROR(GWEN_LOGDOMAIN, "Unexpected tag length modifier %02x at %d", j, pos); return 0; } } /* if tag length modifier */ } else { if (j==255) { if (pos+2>=size) { DBG_ERROR(GWEN_LOGDOMAIN, "Too few bytes"); return 0; } pos++; j=((unsigned char)(p[pos]))<<8; pos++; j+=(unsigned char)(p[pos]); } } pos++; tagLength=j; tagData=p+pos; GWEN_Buffer_IncrementPos(mbuf, pos); DBG_DEBUG(GWEN_LOGDOMAIN, "Tag: %02x (%d bytes)", tagType, tagLength); if (pos+j>size) { DBG_ERROR(GWEN_LOGDOMAIN, "Too few bytes"); return 0; } tlv=GWEN_TLV_new(); assert(tlv); tlv->isBerTlv=isBerTlv; tlv->tagMode=tagMode; tlv->tagType=tagType; tlv->tagLength=tagLength; if (tagLength) { tlv->tagData=(void*)malloc(tagLength); memmove(tlv->tagData, tagData, tagLength); } GWEN_Buffer_IncrementPos(mbuf, tagLength); tlv->tagSize=GWEN_Buffer_GetPos(mbuf)-startPos; return tlv; } int GWEN_TLV_IsContructed(const GWEN_TLV *tlv) { assert(tlv); return (tlv->tagMode & 0x20); } unsigned int GWEN_TLV_GetClass(const GWEN_TLV *tlv) { assert(tlv); return (tlv->tagMode & 0xc0); } int GWEN_TLV_toBuffer(GWEN_TLV *tlv, GWEN_BUFFER *mbuf) { assert(tlv); return GWEN_TLV_DirectlyToBuffer(tlv->tagType, tlv->tagMode, tlv->tagData, tlv->tagLength, tlv->isBerTlv, mbuf); } int GWEN_TLV_DirectlyToBuffer(unsigned int tagType, unsigned int tagMode, const void *tagData, int tagLength, int isBerTlv, GWEN_BUFFER *mbuf) { if (tagLength==-1) tagLength=strlen(tagData); if (isBerTlv) { unsigned char j; /* write tag type */ j=tagMode; if (tagType>=0x1f) { j|=0x1f; GWEN_Buffer_AppendByte(mbuf, j); GWEN_Buffer_AppendByte(mbuf, (unsigned char)tagType); } else { j|=tagType; GWEN_Buffer_AppendByte(mbuf, j); } /* write tag length */ if (tagLength>255) { /* two byte size */ GWEN_Buffer_AppendByte(mbuf, 0x82); GWEN_Buffer_AppendByte(mbuf, ((tagLength>>8) & 0xff)); GWEN_Buffer_AppendByte(mbuf, (tagLength & 0xff)); } else if (tagLength>127) { /* one byte size */ GWEN_Buffer_AppendByte(mbuf, 0x81); GWEN_Buffer_AppendByte(mbuf, (tagLength & 0xff)); } else { GWEN_Buffer_AppendByte(mbuf, (tagLength & 0x7f)); } /* write tag data */ if (tagLength) GWEN_Buffer_AppendBytes(mbuf, tagData, tagLength); } else { /* write tag type */ GWEN_Buffer_AppendByte(mbuf, (unsigned char)tagType); /* write tag length */ GWEN_Buffer_AppendByte(mbuf, (tagLength & 0xff)); /* write tag data */ if (tagLength) GWEN_Buffer_AppendBytes(mbuf, tagData, tagLength); } return 0; } int GWEN_TLV_ReadHeader(GWEN_TLV *tlv, const uint8_t *p, uint32_t size, int isBerTlv) { uint64_t tagMode; uint64_t tagType; uint64_t tagLength; unsigned int pos; uint64_t j; tagMode=tagType=tagLength=0; pos=0; /* get tag type */ if (size<2) { DBG_ERROR(GWEN_LOGDOMAIN, "Too few bytes for TLV"); return GWEN_ERROR_BAD_DATA; } j=(unsigned char)(p[pos]); tagMode=(j & 0xe0); if (isBerTlv) { if ((j & 0x1f)==0x1f) { pos++; if (pos>=size) { DBG_ERROR(GWEN_LOGDOMAIN, "Too few bytes"); return 0; } j=(unsigned char)(p[pos]); } else j&=0x1f; } DBG_DEBUG(GWEN_LOGDOMAIN, "Tag type %02x%s", j, isBerTlv?" (BER-TLV)":""); tagType=j; /* get length */ pos++; if (pos>=size) { DBG_ERROR(GWEN_LOGDOMAIN, "Too few bytes"); return GWEN_ERROR_BAD_DATA; } j=(unsigned char)(p[pos]); if (isBerTlv) { if (j & 0x80) { if (j==0x81) { pos++; if (pos>=size) { DBG_ERROR(GWEN_LOGDOMAIN, "Too few bytes"); return GWEN_ERROR_BAD_DATA; } j=(unsigned char)(p[pos]); } /* 0x81 */ else if (j==0x82) { if (pos+1>=size) { DBG_ERROR(GWEN_LOGDOMAIN, "Too few bytes"); return GWEN_ERROR_BAD_DATA; } pos++; j=((unsigned char)(p[pos]))<<8; pos++; j+=(unsigned char)(p[pos]); } /* 0x82 */ else if (j==0x83) { if (pos+2>=size) { DBG_ERROR(GWEN_LOGDOMAIN, "Too few bytes"); return GWEN_ERROR_BAD_DATA; } pos++; j=((unsigned char)(p[pos]))<<16; pos++; j+=((unsigned char)(p[pos]))<<8; pos++; j+=(unsigned char)(p[pos]); } /* 0x83 */ else if (j==0x84) { if (pos+3>=size) { DBG_ERROR(GWEN_LOGDOMAIN, "Too few bytes"); return GWEN_ERROR_BAD_DATA; } pos++; j=((unsigned char)(p[pos]))<<24; pos++; j+=((unsigned char)(p[pos]))<<16; pos++; j+=((unsigned char)(p[pos]))<<8; pos++; j+=(unsigned char)(p[pos]); } /* 0x84 */ else if (j==0x85) { if (pos+4>=size) { DBG_ERROR(GWEN_LOGDOMAIN, "Too few bytes"); return GWEN_ERROR_BAD_DATA; } pos++; j=((uint64_t) ((unsigned char)(p[pos])))<<32; pos++; j+=((uint64_t) ((unsigned char)(p[pos])))<<24; pos++; j+=((uint64_t) ((unsigned char)(p[pos])))<<16; pos++; j+=((uint64_t) ((unsigned char)(p[pos])))<<8; pos++; j+=(unsigned char)(p[pos]); } /* 0x85 */ else { DBG_ERROR(GWEN_LOGDOMAIN, "Unexpected tag length modifier %02x at %d", (int) j, pos); return GWEN_ERROR_BAD_DATA; } } /* if tag length modifier */ } else { if (j==255) { if (pos+2>=size) { DBG_ERROR(GWEN_LOGDOMAIN, "Too few bytes"); return GWEN_ERROR_BAD_DATA; } pos++; j=((unsigned char)(p[pos]))<<8; pos++; j+=(unsigned char)(p[pos]); } } pos++; tagLength=j; DBG_DEBUG(GWEN_LOGDOMAIN, "Tag: %02x (%d bytes)", tagType, tagLength); tlv->isBerTlv=isBerTlv; tlv->tagMode=tagMode; tlv->tagType=tagType; tlv->tagLength=tagLength; tlv->tagSize=pos+tagLength; return (int) pos; } int GWEN_TLV_WriteHeader(unsigned int tagType, unsigned int tagMode, uint64_t tagLength, int isBerTlv, GWEN_BUFFER *mbuf) { if (isBerTlv) { unsigned char j; /* write tag type */ j=tagMode; if (tagType>=0x1f) { j|=0x1f; GWEN_Buffer_AppendByte(mbuf, j); GWEN_Buffer_AppendByte(mbuf, (unsigned char)tagType); } else { j|=tagType; GWEN_Buffer_AppendByte(mbuf, j); } /* write tag length */ if (tagLength>0xffffffffLL) { /* five byte size */ GWEN_Buffer_AppendByte(mbuf, 0x85); GWEN_Buffer_AppendByte(mbuf, ((tagLength>>32) & 0xff)); GWEN_Buffer_AppendByte(mbuf, ((tagLength>>24) & 0xff)); GWEN_Buffer_AppendByte(mbuf, ((tagLength>>16) & 0xff)); GWEN_Buffer_AppendByte(mbuf, ((tagLength>>8) & 0xff)); GWEN_Buffer_AppendByte(mbuf, (tagLength & 0xff)); } else if (tagLength>0xffffffL) { /* four byte size */ GWEN_Buffer_AppendByte(mbuf, 0x84); GWEN_Buffer_AppendByte(mbuf, ((tagLength>>24) & 0xff)); GWEN_Buffer_AppendByte(mbuf, ((tagLength>>16) & 0xff)); GWEN_Buffer_AppendByte(mbuf, ((tagLength>>8) & 0xff)); GWEN_Buffer_AppendByte(mbuf, (tagLength & 0xff)); } else if (tagLength>0xffff) { /* three byte size */ GWEN_Buffer_AppendByte(mbuf, 0x83); GWEN_Buffer_AppendByte(mbuf, ((tagLength>>16) & 0xff)); GWEN_Buffer_AppendByte(mbuf, ((tagLength>>8) & 0xff)); GWEN_Buffer_AppendByte(mbuf, (tagLength & 0xff)); } else if (tagLength>0xff) { /* two byte size */ GWEN_Buffer_AppendByte(mbuf, 0x82); GWEN_Buffer_AppendByte(mbuf, ((tagLength>>8) & 0xff)); GWEN_Buffer_AppendByte(mbuf, (tagLength & 0xff)); } else if (tagLength>127) { /* one byte size */ GWEN_Buffer_AppendByte(mbuf, 0x81); GWEN_Buffer_AppendByte(mbuf, (tagLength & 0xff)); } else { GWEN_Buffer_AppendByte(mbuf, (tagLength & 0x7f)); } } else { /* write tag type */ GWEN_Buffer_AppendByte(mbuf, (unsigned char)tagType); /* write tag length */ GWEN_Buffer_AppendByte(mbuf, (tagLength & 0xff)); } return 0; } gwenhywfar-4.15.2beta/src/parser/url.xml0000644000175000017500000000221112364015347015151 00000000000000
gwenhywfar/types.h
gwenhywfar/urlfns.h
gwenhywfar-4.15.2beta/src/parser/configmgr.c0000644000175000017500000002442612416477066015770 00000000000000/*************************************************************************** begin : Mon Aug 11 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "configmgr_p.h" #include #include #include #include #include #include #include #include #include GWEN_INHERIT_FUNCTIONS(GWEN_CONFIGMGR) GWEN_INHERIT(GWEN_PLUGIN, GWEN_CONFIGMGR_PLUGIN) int GWEN_ConfigMgr_ModuleInit(void) { GWEN_PLUGIN_MANAGER *pm; int err; GWEN_STRINGLIST *sl; pm=GWEN_PluginManager_new(GWEN_CONFIGMGR_PLUGIN_NAME, GWEN_PM_LIBNAME); err=GWEN_PluginManager_Register(pm); if (err) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not register ConfigMgr plugin manager"); return err; } /* create plugin paths */ sl=GWEN_PathManager_GetPaths(GWEN_PM_LIBNAME, GWEN_PM_PLUGINDIR); if (sl) { GWEN_STRINGLISTENTRY *se; GWEN_BUFFER *pbuf; pbuf=GWEN_Buffer_new(0, 256, 0, 1); se=GWEN_StringList_FirstEntry(sl); while(se) { GWEN_Buffer_AppendString(pbuf, GWEN_StringListEntry_Data(se)); GWEN_Buffer_AppendString(pbuf, GWEN_DIR_SEPARATOR_S GWEN_CONFIGMGR_FOLDER); DBG_INFO(GWEN_LOGDOMAIN, "Adding plugin path [%s]", GWEN_Buffer_GetStart(pbuf)); GWEN_PluginManager_AddPath(pm, GWEN_PM_LIBNAME, GWEN_Buffer_GetStart(pbuf)); GWEN_Buffer_Reset(pbuf); se=GWEN_StringListEntry_Next(se); } GWEN_Buffer_free(pbuf); GWEN_StringList_free(sl); } return 0; } int GWEN_ConfigMgr_ModuleFini(void) { GWEN_PLUGIN_MANAGER *pm; pm=GWEN_PluginManager_FindPluginManager(GWEN_CONFIGMGR_PLUGIN_NAME); if (pm) { int rv; rv=GWEN_PluginManager_Unregister(pm); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not unregister ConfigMgr plugin manager (%d)", rv); return rv; } else GWEN_PluginManager_free(pm); } return 0; } GWEN_CONFIGMGR *GWEN_ConfigMgr_new(const char *url) { GWEN_CONFIGMGR *mgr; GWEN_NEW_OBJECT(GWEN_CONFIGMGR, mgr); GWEN_INHERIT_INIT(GWEN_CONFIGMGR, mgr); if (url) mgr->url=strdup(url); return mgr; } void GWEN_ConfigMgr_free(GWEN_CONFIGMGR *mgr) { if (mgr) { GWEN_INHERIT_FINI(GWEN_CONFIGMGR, mgr); free(mgr->url); GWEN_FREE_OBJECT(mgr); } } GWEN_CONFIGMGR_GETGROUP_FN GWEN_ConfigMgr_SetGetGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_GETGROUP_FN f) { GWEN_CONFIGMGR_GETGROUP_FN of; assert(mgr); of=mgr->getGroupFn; mgr->getGroupFn=f; return of; } GWEN_CONFIGMGR_SETGROUP_FN GWEN_ConfigMgr_SetSetGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_SETGROUP_FN f) { GWEN_CONFIGMGR_SETGROUP_FN of; assert(mgr); of=mgr->setGroupFn; mgr->setGroupFn=f; return of; } GWEN_CONFIGMGR_LOCKGROUP_FN GWEN_ConfigMgr_SetLockGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_LOCKGROUP_FN f) { GWEN_CONFIGMGR_LOCKGROUP_FN of; assert(mgr); of=mgr->lockGroupFn; mgr->lockGroupFn=f; return of; } GWEN_CONFIGMGR_UNLOCKGROUP_FN GWEN_ConfigMgr_SetUnlockGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_UNLOCKGROUP_FN f) { GWEN_CONFIGMGR_UNLOCKGROUP_FN of; assert(mgr); of=mgr->unlockGroupFn; mgr->unlockGroupFn=f; return of; } GWEN_CONFIGMGR_GETUNIQUEID_FN GWEN_ConfigMgr_SetGetUniqueIdFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_GETUNIQUEID_FN f) { GWEN_CONFIGMGR_GETUNIQUEID_FN of; assert(mgr); of=mgr->getUniqueIdFn; mgr->getUniqueIdFn=f; return of; } GWEN_CONFIGMGR_DELETEGROUP_FN GWEN_ConfigMgr_SetDeleteGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_DELETEGROUP_FN f) { GWEN_CONFIGMGR_DELETEGROUP_FN of; assert(mgr); of=mgr->deleteGroupFn; mgr->deleteGroupFn=f; return of; } GWEN_CONFIGMGR_LISTGROUPS_FN GWEN_ConfigMgr_SetListGroupsFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_LISTGROUPS_FN f) { GWEN_CONFIGMGR_LISTGROUPS_FN of; assert(mgr); of=mgr->listGroupsFn; mgr->listGroupsFn=f; return of; } GWEN_CONFIGMGR_LISTSUBGROUPS_FN GWEN_ConfigMgr_SetListSubGroupsFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_LISTSUBGROUPS_FN f) { GWEN_CONFIGMGR_LISTSUBGROUPS_FN of; assert(mgr); of=mgr->listSubGroupsFn; mgr->listSubGroupsFn=f; return of; } int GWEN_ConfigMgr_GetGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName, GWEN_DB_NODE **pDb) { assert(mgr); if (mgr->getGroupFn) return mgr->getGroupFn(mgr, groupName, subGroupName, pDb); else return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_ConfigMgr_SetGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName, GWEN_DB_NODE *db) { assert(mgr); if (mgr->setGroupFn) return mgr->setGroupFn(mgr, groupName, subGroupName, db); else return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_ConfigMgr_LockGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName) { assert(mgr); if (mgr->lockGroupFn) return mgr->lockGroupFn(mgr, groupName, subGroupName); else return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_ConfigMgr_UnlockGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName) { assert(mgr); if (mgr->unlockGroupFn) return mgr->unlockGroupFn(mgr, groupName, subGroupName); else return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_ConfigMgr_GetUniqueId(GWEN_CONFIGMGR *mgr, const char *groupName, char *buffer, uint32_t bufferLen) { assert(mgr); if (mgr->getUniqueIdFn) return mgr->getUniqueIdFn(mgr, groupName, buffer, bufferLen); else return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_ConfigMgr_DeleteGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName) { assert(mgr); if (mgr->deleteGroupFn) return mgr->deleteGroupFn(mgr, groupName, subGroupName); else return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_ConfigMgr_ListGroups(GWEN_CONFIGMGR *mgr, GWEN_STRINGLIST *sl) { assert(mgr); if (mgr->listGroupsFn) return mgr->listGroupsFn(mgr, sl); else return GWEN_ERROR_NOT_IMPLEMENTED; } int GWEN_ConfigMgr_ListSubGroups(GWEN_CONFIGMGR *mgr, const char *groupName, GWEN_STRINGLIST *sl) { assert(mgr); if (mgr->listSubGroupsFn) return mgr->listSubGroupsFn(mgr, groupName, sl); else return GWEN_ERROR_NOT_IMPLEMENTED; } GWEN_PLUGIN *GWEN_ConfigMgr_Plugin_new(GWEN_PLUGIN_MANAGER *pm, const char *name, const char *fileName) { GWEN_PLUGIN *pl; GWEN_CONFIGMGR_PLUGIN *xpl; pl=GWEN_Plugin_new(pm, name, fileName); GWEN_NEW_OBJECT(GWEN_CONFIGMGR_PLUGIN, xpl); GWEN_INHERIT_SETDATA(GWEN_PLUGIN, GWEN_CONFIGMGR_PLUGIN, pl, xpl, GWEN_ConfigMgr_Plugin_FreeData); return pl; } void GWENHYWFAR_CB GWEN_ConfigMgr_Plugin_FreeData(GWEN_UNUSED void *bp, void *p) { GWEN_CONFIGMGR_PLUGIN *xpl; xpl=(GWEN_CONFIGMGR_PLUGIN*)p; GWEN_FREE_OBJECT(xpl); } void GWEN_ConfigMgr_Plugin_SetFactoryFn(GWEN_PLUGIN *pl, GWEN_CONFIGMGR_PLUGIN_FACTORYFN f) { GWEN_CONFIGMGR_PLUGIN *xpl; assert(pl); xpl=GWEN_INHERIT_GETDATA(GWEN_PLUGIN, GWEN_CONFIGMGR_PLUGIN, pl); assert(xpl); xpl->factoryFn=f; } GWEN_CONFIGMGR *GWEN_ConfigMgr_Plugin_Factory(GWEN_PLUGIN *pl, const char *url) { GWEN_CONFIGMGR_PLUGIN *xpl; assert(pl); xpl=GWEN_INHERIT_GETDATA(GWEN_PLUGIN, GWEN_CONFIGMGR_PLUGIN, pl); assert(xpl); assert(xpl->factoryFn); return xpl->factoryFn(pl, url); } GWEN_CONFIGMGR *GWEN_ConfigMgr_Factory(const char *url) { GWEN_PLUGIN_MANAGER *pm; GWEN_PLUGIN *pl; GWEN_CONFIGMGR *mgr=NULL; GWEN_URL *purl; const char *modname; pm=GWEN_PluginManager_FindPluginManager(GWEN_CONFIGMGR_PLUGIN_NAME); if (!pm) { DBG_ERROR(GWEN_LOGDOMAIN, "No plugin manager for \"ConfigMgr\" found"); return 0; } purl=GWEN_Url_fromString(url); if (purl==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Invalid url [%s]", url); return NULL; } modname=GWEN_Url_GetProtocol(purl); if (modname==NULL) modname="file"; pl=GWEN_PluginManager_GetPlugin(pm, modname); if (!pl) { DBG_INFO(GWEN_LOGDOMAIN, "ConfigMgr-Plugin \"%s\" not found", modname); GWEN_Url_free(purl); return 0; } GWEN_Url_free(purl); mgr=GWEN_ConfigMgr_Plugin_Factory(pl, url); if (mgr==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Plugin did not create a GWEN_CONFIGMGR"); } return mgr; } gwenhywfar-4.15.2beta/src/parser/xmlctx_l.h0000644000175000017500000000416612416477066015653 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: xsd.h 898 2005-11-03 09:51:39Z cstim $ begin : Sat Jun 28 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_XMLCTX_L_H #define GWENHYWFAR_XMLCTX_L_H #include "xmlctx.h" int GWEN_XmlCtx_StartTag(GWEN_XML_CONTEXT *ctx, const char *tagName); int GWEN_XmlCtx_EndTag(GWEN_XML_CONTEXT *ctx, int closing); int GWEN_XmlCtx_AddData(GWEN_XML_CONTEXT *ctx, const char *data); int GWEN_XmlCtx_AddComment(GWEN_XML_CONTEXT *ctx, const char *data); int GWEN_XmlCtx_AddAttr(GWEN_XML_CONTEXT *ctx, const char *attrName, const char *attrData); #endif gwenhywfar-4.15.2beta/src/parser/xmlctx.c0000644000175000017500000003612712416477066015335 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: xsd.c 656 2004-12-22 17:02:05Z aquamaniac $ begin : Sat Jun 28 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "xmlctx_p.h" #include "gwenhywfar/debug.h" #include "gwenhywfar/misc.h" #include "gwenhywfar/text.h" #include "gwenhywfar/path.h" #include "i18n_l.h" #include #include #include #include GWEN_INHERIT_FUNCTIONS(GWEN_XML_CONTEXT) GWEN_XML_CONTEXT *GWEN_XmlCtx_new(uint32_t flags) { GWEN_XML_CONTEXT *ctx; GWEN_NEW_OBJECT(GWEN_XML_CONTEXT, ctx); ctx->_refCount=1; GWEN_INHERIT_INIT(GWEN_XML_CONTEXT, ctx); ctx->flags=flags; return ctx; } void GWEN_XmlCtx_free(GWEN_XML_CONTEXT *ctx) { if (ctx) { assert(ctx->_refCount); if (ctx->_refCount==1) { GWEN_INHERIT_FINI(GWEN_XML_CONTEXT, ctx); ctx->_refCount=0; GWEN_FREE_OBJECT(ctx); } else ctx->_refCount--; } } void GWEN_XmlCtx_Attach(GWEN_XML_CONTEXT *ctx) { assert(ctx); assert(ctx->_refCount); ctx->_refCount++; } uint32_t GWEN_XmlCtx_GetFlags(const GWEN_XML_CONTEXT *ctx) { assert(ctx); return ctx->flags; } void GWEN_XmlCtx_SetFlags(GWEN_XML_CONTEXT *ctx, uint32_t f) { assert(ctx); ctx->flags=f; } int GWEN_XmlCtx_GetDepth(const GWEN_XML_CONTEXT *ctx) { assert(ctx); return ctx->depth; } void GWEN_XmlCtx_SetDepth(GWEN_XML_CONTEXT *ctx, int i) { assert(ctx); ctx->depth=i; } void GWEN_XmlCtx_IncDepth(GWEN_XML_CONTEXT *ctx) { assert(ctx); ctx->depth++; } int GWEN_XmlCtx_DecDepth(GWEN_XML_CONTEXT *ctx) { assert(ctx); if (ctx->depth<1) return -1; ctx->depth--; return 0; } uint32_t GWEN_XmlCtx_GetFinishedElement(const GWEN_XML_CONTEXT *ctx) { assert(ctx); return ctx->finishedElements; } void GWEN_XmlCtx_IncFinishedElement(GWEN_XML_CONTEXT *ctx) { assert(ctx); ctx->finishedElements++; } void GWEN_XmlCtx_ResetFinishedElement(GWEN_XML_CONTEXT *ctx) { assert(ctx); ctx->finishedElements=0; } void GWEN_XmlCtx_SetCurrentNode(GWEN_XML_CONTEXT *ctx, GWEN_XMLNODE *n) { assert(ctx); ctx->currentNode=n; } GWEN_XMLNODE *GWEN_XmlCtx_GetCurrentNode(const GWEN_XML_CONTEXT *ctx) { assert(ctx); return ctx->currentNode; } void GWEN_XmlCtx_SetCurrentHeader(GWEN_XML_CONTEXT *ctx, GWEN_XMLNODE *n) { assert(ctx); ctx->currentHeader=n; } GWEN_XMLNODE *GWEN_XmlCtx_GetCurrentHeader(const GWEN_XML_CONTEXT *ctx) { assert(ctx); return ctx->currentHeader; } GWEN_XMLCTX_STARTTAG_FN GWEN_XmlCtx_SetStartTagFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_STARTTAG_FN f) { GWEN_XMLCTX_STARTTAG_FN of; assert(ctx); of=ctx->startTagFn; ctx->startTagFn=f; return of; } GWEN_XMLCTX_ENDTAG_FN GWEN_XmlCtx_SetEndTagFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_ENDTAG_FN f) { GWEN_XMLCTX_ENDTAG_FN of; assert(ctx); of=ctx->endTagFn; ctx->endTagFn=f; return of; } GWEN_XMLCTX_ADDDATA_FN GWEN_XmlCtx_SetAddDataFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_ADDDATA_FN f) { GWEN_XMLCTX_ADDDATA_FN of; assert(ctx); of=ctx->addDataFn; ctx->addDataFn=f; return of; } GWEN_XMLCTX_ADDATTR_FN GWEN_XmlCtx_SetAddAttrFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_ADDATTR_FN f) { GWEN_XMLCTX_ADDATTR_FN of; assert(ctx); of=ctx->addAttrFn; ctx->addAttrFn=f; return of; } GWEN_XMLCTX_ADDCOMMENT_FN GWEN_XmlCtx_SetAddCommentFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_ADDCOMMENT_FN f) { GWEN_XMLCTX_ADDCOMMENT_FN of; assert(ctx); of=ctx->addCommentFn; ctx->addCommentFn=f; return of; } int GWEN_XmlCtx_StartTag(GWEN_XML_CONTEXT *ctx, const char *tagName) { assert(ctx); if (ctx->startTagFn) return ctx->startTagFn(ctx, tagName); else { DBG_INFO(GWEN_LOGDOMAIN, "Starting tag: [%s]", tagName); return 0; } } int GWEN_XmlCtx_EndTag(GWEN_XML_CONTEXT *ctx, int closing) { assert(ctx); if (ctx->endTagFn) return ctx->endTagFn(ctx, closing); else { DBG_INFO(GWEN_LOGDOMAIN, "Ending tag (%s)", closing?"closing":"not closing"); return 0; } } int GWEN_XmlCtx_AddData(GWEN_XML_CONTEXT *ctx, const char *data) { assert(ctx); if (ctx->addDataFn) return ctx->addDataFn(ctx, data); else { DBG_INFO(GWEN_LOGDOMAIN, "Adding data: [%s]", data); return 0; } } int GWEN_XmlCtx_AddComment(GWEN_XML_CONTEXT *ctx, const char *data) { assert(ctx); if (ctx->addCommentFn) return ctx->addCommentFn(ctx, data); else { DBG_INFO(GWEN_LOGDOMAIN, "Adding comment: [%s]", data); return 0; } } int GWEN_XmlCtx_AddAttr(GWEN_XML_CONTEXT *ctx, const char *attrName, const char *attrData) { assert(ctx); if (ctx->addAttrFn) return ctx->addAttrFn(ctx, attrName, attrData); else { DBG_INFO(GWEN_LOGDOMAIN, "Adding attribute: [%s]=[%s]", attrName, attrData); return 0; } } GWEN_XML_CONTEXT *GWEN_XmlCtxStore_new(GWEN_XMLNODE *n, uint32_t flags) { GWEN_XML_CONTEXT *ctx; ctx=GWEN_XmlCtx_new(flags); assert(ctx); GWEN_XmlCtx_SetCurrentNode(ctx, n); GWEN_XmlCtx_SetStartTagFn(ctx, GWEN_XmlCtxStore_StartTag); GWEN_XmlCtx_SetEndTagFn(ctx, GWEN_XmlCtxStore_EndTag); GWEN_XmlCtx_SetAddDataFn(ctx, GWEN_XmlCtxStore_AddData); GWEN_XmlCtx_SetAddCommentFn(ctx, GWEN_XmlCtxStore_AddComment); GWEN_XmlCtx_SetAddAttrFn(ctx, GWEN_XmlCtxStore_AddAttr); return ctx; } int GWEN_XmlCtxStore_StartTag(GWEN_XML_CONTEXT *ctx, const char *tagName) { GWEN_XMLNODE *currNode; GWEN_XMLNODE *newNode; currNode=GWEN_XmlCtx_GetCurrentNode(ctx); if (currNode==NULL) return GWEN_ERROR_INVALID; if (*tagName=='?' && (GWEN_XmlCtx_GetFlags(ctx) & GWEN_XML_FLAGS_HANDLE_HEADERS)) { newNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, tagName); assert(newNode); DBG_VERBOUS(GWEN_LOGDOMAIN, "Adding header [%s] to [%s]", GWEN_XMLNode_GetData(newNode), GWEN_XMLNode_GetData(currNode)); GWEN_XMLNode_AddHeader(currNode, newNode); GWEN_XmlCtx_SetCurrentHeader(ctx, newNode); } else if (strcasecmp(tagName, "!DOCTYPE")==0) { newNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, tagName); assert(newNode); DBG_VERBOUS(GWEN_LOGDOMAIN, "Adding header [%s] to [%s]", GWEN_XMLNode_GetData(newNode), GWEN_XMLNode_GetData(currNode)); GWEN_XMLNode_AddHeader(currNode, newNode); GWEN_XmlCtx_SetCurrentHeader(ctx, newNode); } else if (*tagName=='/') { const char *s; tagName++; DBG_VERBOUS(GWEN_LOGDOMAIN, "Finishing tag [%s]", tagName); s=GWEN_XMLNode_GetData(currNode); if (s==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Current node tag has no name"); return GWEN_ERROR_BAD_DATA; } if (strcasecmp(s, tagName)!=0) { if (!(GWEN_XmlCtx_GetFlags(ctx) & GWEN_XML_FLAGS_TOLERANT_ENDTAGS)) { DBG_INFO(GWEN_LOGDOMAIN, "Endtag does not match curent tag (%s != %s)", s, tagName); return GWEN_ERROR_BAD_DATA; } else { newNode=currNode; while( (newNode=GWEN_XMLNode_GetParent(newNode)) ) { GWEN_XmlCtx_DecDepth(ctx); s=GWEN_XMLNode_GetData(newNode); if (strcasecmp(s, tagName)==0) break; } if (newNode) newNode=GWEN_XMLNode_GetParent(newNode); if (newNode) { GWEN_XmlCtx_SetCurrentNode(ctx, newNode); GWEN_XmlCtx_DecDepth(ctx); } else { DBG_INFO(GWEN_LOGDOMAIN, "No matching parent node for [%s]", tagName); return GWEN_ERROR_BAD_DATA; } } } else { newNode=GWEN_XMLNode_GetParent(currNode); if (newNode==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "No parent node at [%s]", tagName); return GWEN_ERROR_BAD_DATA; } GWEN_XmlCtx_SetCurrentNode(ctx, newNode); GWEN_XmlCtx_DecDepth(ctx); } /* one more element finished */ GWEN_XmlCtx_IncFinishedElement(ctx); } else { newNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, tagName); assert(newNode); GWEN_XMLNode_AddChild(currNode, newNode); GWEN_XmlCtx_SetCurrentNode(ctx, newNode); GWEN_XmlCtx_IncDepth(ctx); DBG_VERBOUS(GWEN_LOGDOMAIN, "Starting tag [%s]", tagName); } return 0; } int GWEN_XmlCtxStore_EndTag(GWEN_XML_CONTEXT *ctx, int closing) { GWEN_XMLNODE *currNode; currNode=GWEN_XmlCtx_GetCurrentHeader(ctx); if (currNode) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Ending header [%s]", GWEN_XMLNode_GetData(currNode)); GWEN_XmlCtx_SetCurrentHeader(ctx, NULL); } else { currNode=GWEN_XmlCtx_GetCurrentNode(ctx); if (currNode==NULL) return GWEN_ERROR_INVALID; DBG_VERBOUS(GWEN_LOGDOMAIN, "Ending tag [%s] (%s)", GWEN_XMLNode_GetData(currNode), closing?"closing":"not closing"); if (closing) { GWEN_XMLNODE *newNode; newNode=GWEN_XMLNode_GetParent(currNode); if (newNode==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "No parent node at [%s]", GWEN_XMLNode_GetData(currNode)); return GWEN_ERROR_BAD_DATA; } GWEN_XmlCtx_SetCurrentNode(ctx, newNode); /* one more element finished */ GWEN_XmlCtx_DecDepth(ctx); GWEN_XmlCtx_IncFinishedElement(ctx); } } return 0; } int GWEN_XmlCtxStore_AddData(GWEN_XML_CONTEXT *ctx, const char *data) { GWEN_XMLNODE *currNode; GWEN_BUFFER *buf; uint32_t flags; flags=GWEN_XmlCtx_GetFlags(ctx); currNode=GWEN_XmlCtx_GetCurrentNode(ctx); if (currNode==NULL) return GWEN_ERROR_INVALID; buf=GWEN_Buffer_new(0, 64, 0, 1); if (GWEN_Text_UnescapeXmlToBuffer(data, buf)) { GWEN_Buffer_free(buf); DBG_INFO(GWEN_LOGDOMAIN, "here"); return GWEN_ERROR_BAD_DATA; } if (!(flags & GWEN_XML_FLAGS_NO_CONDENSE) || (flags & GWEN_XML_FLAGS_KEEP_CNTRL) || (flags & GWEN_XML_FLAGS_KEEP_BLANKS)) { const uint8_t *p; uint8_t *dst; uint8_t *src; unsigned int size; unsigned int i; int lastWasBlank; uint8_t *lastBlankPos; uint32_t bStart=0; dst=(uint8_t*)GWEN_Buffer_GetStart(buf); src=dst; if (!(flags & GWEN_XML_FLAGS_KEEP_BLANKS)) { if (flags & GWEN_XML_FLAGS_KEEP_CNTRL) { while(*src && (*src==32 || *src==9)) src++; } else { while(*src && *src<33) src++; } } p=src; bStart=src-((uint8_t*)GWEN_Buffer_GetStart(buf)); size=GWEN_Buffer_GetUsedBytes(buf)-bStart; lastWasBlank=0; lastBlankPos=0; for (i=0; iflags & GWEN_XML_FLAGS_HANDLE_NAMESPACES) { if (strcasecmp(attrName, "xmlns")==0) { GWEN_XMLNODE_NAMESPACE *ns; DBG_VERBOUS(GWEN_LOGDOMAIN, "Adding namespace [%s] to node [%s]", attrData, GWEN_XMLNode_GetData(currNode)); ns=GWEN_XMLNode_NameSpace_new("", attrData); GWEN_XMLNode_AddNameSpace(currNode, ns); GWEN_XMLNode_NameSpace_free(ns); isNormalProperty=0; } else if (strncasecmp(attrName, "xmlns:", 6)==0) { const char *name; name=strchr(attrName, ':'); if (name) { name++; if (*name) { GWEN_XMLNODE_NAMESPACE *ns; DBG_VERBOUS(GWEN_LOGDOMAIN, "Adding namespace [%s]=[%s]", name, attrData); ns=GWEN_XMLNode_NameSpace_new(name, attrData); GWEN_XMLNode_AddNameSpace(currNode, ns); GWEN_XMLNode_NameSpace_free(ns); isNormalProperty=0; } } } } if (isNormalProperty) { GWEN_BUFFER *buf; DBG_VERBOUS(GWEN_LOGDOMAIN, "Setting attribute of tag [%s]: [%s]=[%s]", GWEN_XMLNode_GetData(currNode), attrName, attrData); buf=GWEN_Buffer_new(0, 64, 0, 1); if (GWEN_Text_UnescapeXmlToBuffer(attrData, buf)) { GWEN_Buffer_free(buf); DBG_INFO(GWEN_LOGDOMAIN, "here"); return GWEN_ERROR_BAD_DATA; } GWEN_XMLNode_SetProperty(currNode, attrName, GWEN_Buffer_GetStart(buf)); GWEN_Buffer_free(buf); } } return 0; } gwenhywfar-4.15.2beta/src/parser/dbio_be.h0000644000175000017500000000652112416477066015401 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: dbio.h 1107 2007-01-07 21:17:05Z martin $ begin : Wed Mar 31 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /** @file dbio.h * @short This file provides the GWEN DB import/export framework. */ #ifndef GWENHYWFAR_DBIO_BE_H #define GWENHYWFAR_DBIO_BE_H #include typedef int (*GWEN_DBIO_IMPORTFN)(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *db, GWEN_DB_NODE *params, uint32_t flags); typedef int (*GWEN_DBIO_EXPORTFN)(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *db, GWEN_DB_NODE *params, uint32_t flags); typedef GWEN_DBIO_CHECKFILE_RESULT (*GWEN_DBIO_CHECKFILEFN)(GWEN_DBIO *dbio, const char *fname); GWENHYWFAR_API GWEN_PLUGIN *GWEN_DBIO_Plugin_new(GWEN_PLUGIN_MANAGER *pm, const char *name, const char *fileName); GWENHYWFAR_API void GWEN_DBIO_Plugin_SetFactoryFn(GWEN_PLUGIN *pl, GWEN_DBIO_PLUGIN_FACTORYFN f); /** @name Functions To Be Used By Inheritors * */ /*@{*/ /** * Creates the base object which is to be extended by the inheritor. */ GWENHYWFAR_API GWEN_DBIO *GWEN_DBIO_new(const char *name, const char *descr); /** * Sets the import function for this kind of GWEN_DBIO. */ GWENHYWFAR_API void GWEN_DBIO_SetImportFn(GWEN_DBIO *dbio, GWEN_DBIO_IMPORTFN f); /** * Sets the export function for this kind of GWEN_DBIO. */ GWENHYWFAR_API void GWEN_DBIO_SetExportFn(GWEN_DBIO *dbio, GWEN_DBIO_EXPORTFN f); GWENHYWFAR_API void GWEN_DBIO_SetCheckFileFn(GWEN_DBIO *dbio, GWEN_DBIO_CHECKFILEFN f); /*@}*/ #endif gwenhywfar-4.15.2beta/src/parser/dbio_l.h0000644000175000017500000000341612364015347015236 00000000000000/*************************************************************************** begin : Wed Mar 31 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /** @file src/parser/dbio.h */ #ifndef GWENHYWFAR_DBIO_L_H #define GWENHYWFAR_DBIO_L_H #include int GWEN_DBIO_ModuleInit(void); int GWEN_DBIO_ModuleFini(void); #endif /* GWENHYWFAR_DBIO_P_H */ gwenhywfar-4.15.2beta/src/gwenhywfar.h0000644000175000017500000000663112364015347014675 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Thu Sep 11 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_GWENHYWFAR_H #define GWENHYWFAR_GWENHYWFAR_H #include #include #include #include /** * This is used as the destLib name for paths of Gwenhywfar when used * with @ref GWEN_PathManager_AddPath and other functions of that group. */ #define GWEN_PM_LIBNAME "gwenhywfar" /** Path identifier for the system-wide configuration directory of this gwenhywfar installation, which might point to e.g. "/etc" */ #define GWEN_PM_SYSCONFDIR "sysconfdir" /** Path identifier for the locale data directory of this gwenhywfar installation, which might point to e.g. "/usr/share/locale" */ #define GWEN_PM_LOCALEDIR "localedir" /** Path identifier for the plugin library files of this gwenhywfar installation, which point to e.g. "/usr/lib/gwenhywfar/plugins/0" */ #define GWEN_PM_PLUGINDIR "plugindir" /** Path identifier for the data files of this gwenhywfar installation, which point to e.g. "/usr/share/gwenhywfar" */ #define GWEN_PM_DATADIR "datadir" /** * Path identifier for generic data files of this installation, * which points to e.g. "/usr/share". * Please note: The difference between this identifier and * @ref GWEN_PM_DATADIR is that the latter points to Gwenhywfar's * own data files while this identifier here points to the generic * data folder (usually the parent of @ref GWEN_PM_DATADIR). */ #define GWEN_PM_SYSDATADIR "sysdatadir" #ifdef __cplusplus extern "C" { #endif GWENHYWFAR_API int GWEN_Init(void); GWENHYWFAR_API int GWEN_Fini(void); GWENHYWFAR_API int GWEN_Fini_Forced(void); GWENHYWFAR_API void GWEN_Version(int *major, int *minor, int *patchlevel, int *build); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/binreloc.c0000644000175000017500000004636412416477066014323 00000000000000/* * BinReloc - a library for creating relocatable executables * Written by: Hongli Lai * http://autopackage.org/ * * This source code is public domain. You can relicense this code * under whatever license you want. * * See http://autopackage.org/docs/binreloc/ for * more information and how to use this. */ #ifndef __BINRELOC_C__ #define __BINRELOC_C__ #include "config.h" #ifdef ENABLE_BINRELOC #include #include #include #endif /* ENABLE_BINRELOC */ #include #include #include #include #include "binreloc.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #ifdef OS_WIN32 # define DIRSEP "\\" # define DIRSEP_C '\\' #else # define DIRSEP "/" # define DIRSEP_C '/' #endif /** @internal * Find the canonical filename of the executable. Returns the filename * (which must be freed) or NULL on error. If the parameter 'error' is * not NULL, the error code will be stored there, if an error occured. */ static char * _br_find_exe (BrInitError *error) { #ifndef ENABLE_BINRELOC if (error) *error = BR_INIT_ERROR_DISABLED; return NULL; #else char *path, *path2, *line, *result; size_t buf_size; ssize_t size; struct stat stat_buf; FILE *f; /* Read from /proc/self/exe (symlink) */ if (sizeof (path) > SSIZE_MAX) buf_size = SSIZE_MAX - 1; else buf_size = PATH_MAX - 1; path = (char *) malloc (buf_size); if (path == NULL) { /* Cannot allocate memory. */ if (error) *error = BR_INIT_ERROR_NOMEM; return NULL; } path2 = (char *) malloc (buf_size); if (path2 == NULL) { /* Cannot allocate memory. */ if (error) *error = BR_INIT_ERROR_NOMEM; free (path); return NULL; } strncpy (path2, "/proc/self/exe", buf_size - 1); while (1) { int i; size = readlink (path2, path, buf_size - 1); if (size == -1) { /* Error. */ free (path2); break; } /* readlink() success. */ path[size] = '\0'; /* Check whether the symlink's target is also a symlink. * We want to get the final target. */ i = stat (path, &stat_buf); if (i == -1) { /* Error. */ free (path2); break; } /* stat() success. */ if (!S_ISLNK (stat_buf.st_mode)) { /* path is not a symlink. Done. */ free (path2); return path; } /* path is a symlink. Continue loop and resolve this. */ strncpy (path, path2, buf_size - 1); } /* readlink() or stat() failed; this can happen when the program is * running in Valgrind 2.2. Read from /proc/self/maps as fallback. */ buf_size = PATH_MAX + 128; line = (char *) realloc (path, buf_size); if (line == NULL) { /* Cannot allocate memory. */ free (path); if (error) *error = BR_INIT_ERROR_NOMEM; return NULL; } f = fopen ("/proc/self/maps", "r"); if (f == NULL) { free (line); if (error) *error = BR_INIT_ERROR_OPEN_MAPS; return NULL; } /* The first entry should be the executable name. */ result = fgets (line, (int) buf_size, f); if (result == NULL) { fclose (f); free (line); if (error) *error = BR_INIT_ERROR_READ_MAPS; return NULL; } /* Get rid of newline character. */ buf_size = strlen (line); if (buf_size <= 0) { /* Huh? An empty string? */ fclose (f); free (line); if (error) *error = BR_INIT_ERROR_INVALID_MAPS; return NULL; } if (line[buf_size - 1] == 10) line[buf_size - 1] = 0; /* Extract the filename; it is always an absolute path. */ path = strchr (line, DIRSEP_C); /* Sanity check. */ if (strstr (line, " r-xp ") == NULL || path == NULL) { fclose (f); free (line); if (error) *error = BR_INIT_ERROR_INVALID_MAPS; return NULL; } path = strdup (path); free (line); fclose (f); return path; #endif /* ENABLE_BINRELOC */ } /** @internal * Find the canonical filename of the executable which owns symbol. * Returns a filename which must be freed, or NULL on error. */ static char * _br_find_exe_for_symbol (const void *symbol, BrInitError *error) { #ifndef ENABLE_BINRELOC if (error) *error = BR_INIT_ERROR_DISABLED; return (char *) NULL; #else #define SIZE PATH_MAX + 100 FILE *f; size_t address_string_len; char *address_string, line[SIZE], *found; if (symbol == NULL) return (char *) NULL; f = fopen ("/proc/self/maps", "r"); if (f == NULL) return (char *) NULL; address_string_len = 4; address_string = (char *) malloc (address_string_len); found = (char *) NULL; while (!feof (f)) { char *start_addr, *end_addr, *end_addr_end, *file; void *start_addr_p, *end_addr_p; size_t len; if (fgets (line, SIZE, f) == NULL) break; /* Sanity check. */ if (strstr (line, " r-xp ") == NULL || strchr (line, '/') == NULL) continue; /* Parse line. */ start_addr = line; end_addr = strchr (line, '-'); file = strchr (line, '/'); /* More sanity check. */ if (!(file > end_addr && end_addr != NULL && end_addr[0] == '-')) continue; end_addr[0] = '\0'; end_addr++; end_addr_end = strchr (end_addr, ' '); if (end_addr_end == NULL) continue; end_addr_end[0] = '\0'; len = strlen (file); if (len == 0) continue; if (file[len - 1] == '\n') file[len - 1] = '\0'; /* Get rid of "(deleted)" from the filename. */ len = strlen (file); if (len > 10 && strcmp (file + len - 10, " (deleted)") == 0) file[len - 10] = '\0'; /* I don't know whether this can happen but better safe than sorry. */ len = strlen (start_addr); if (len != strlen (end_addr)) continue; /* Transform the addresses into a string in the form of 0xdeadbeef, * then transform that into a pointer. */ if (address_string_len < len + 3) { address_string_len = len + 3; address_string = (char *) realloc (address_string, address_string_len); } memcpy (address_string, "0x", 2); memcpy (address_string + 2, start_addr, len); address_string[2 + len] = '\0'; sscanf (address_string, "%p", &start_addr_p); memcpy (address_string, "0x", 2); memcpy (address_string + 2, end_addr, len); address_string[2 + len] = '\0'; sscanf (address_string, "%p", &end_addr_p); if (symbol >= start_addr_p && symbol < end_addr_p) { found = file; break; } } free (address_string); fclose (f); if (found == NULL) return (char *) NULL; else return strdup (found); #endif /* ENABLE_BINRELOC */ } #ifndef BINRELOC_RUNNING_DOXYGEN #undef NULL #define NULL ((void *) 0) /* typecasted as char* for C++ type safeness */ #endif static char *exe = (char *) NULL; /** Initialize the BinReloc library (for applications). * * This function must be called before using any other BinReloc functions. * It attempts to locate the application's canonical filename. * * @note If you want to use BinReloc for a library, then you should call * br_init_lib() instead. * * @param error If BinReloc failed to initialize, then the error code will * be stored in this variable. Set to NULL if you want to * ignore this. See #BrInitError for a list of error codes. * * @returns 1 on success, 0 if BinReloc failed to initialize. */ int br_init (BrInitError *error) { exe = _br_find_exe (error); return exe != NULL; } /** Initialize the BinReloc library (for libraries). * * This function must be called before using any other BinReloc functions. * It attempts to locate the calling library's canonical filename. * * @note The BinReloc source code MUST be included in your library, or this * function won't work correctly. * * @param error If BinReloc failed to initialize, then the error code will * be stored in this variable. Set to NULL if you want to * ignore this. See #BrInitError for a list of error codes. * * @returns 1 on success, 0 if a filename cannot be found. */ int br_init_lib (BrInitError *error) { exe = _br_find_exe_for_symbol ((const void *) "", error); return exe != NULL; } /** Find the canonical filename of the current application. * * @param default_exe A default filename which will be used as fallback. * @returns A string containing the application's canonical filename, * which must be freed when no longer necessary. If BinReloc is * not initialized, or if br_init() failed, then a copy of * default_exe will be returned. If default_exe is NULL, then * NULL will be returned. */ char * br_find_exe (const char *default_exe) { if (exe == (char *) NULL) { /* BinReloc is not initialized. */ if (default_exe != (const char *) NULL) return strdup (default_exe); else return (char *) NULL; } return strdup (exe); } /** Locate the directory in which the current application is installed. * * The prefix is generated by the following pseudo-code evaluation: * \code * dirname(exename) * \endcode * * @param default_dir A default directory which will used as fallback. * @return A string containing the directory, which must be freed when no * longer necessary. If BinReloc is not initialized, or if the * initialization function failed, then a copy of default_dir * will be returned. If default_dir is NULL, then NULL will be * returned. */ char * br_find_exe_dir (const char *default_dir) { if (exe == NULL) { /* BinReloc not initialized. */ if (default_dir != NULL) return strdup (default_dir); else return NULL; } return br_dirname (exe); } /** Locate the prefix in which the current application is installed. * * The prefix is generated by the following pseudo-code evaluation: * \code * dirname(dirname(exename)) * \endcode * * @param default_prefix A default prefix which will used as fallback. * @return A string containing the prefix, which must be freed when no * longer necessary. If BinReloc is not initialized, or if * the initialization function failed, then a copy of default_prefix * will be returned. If default_prefix is NULL, then NULL will be returned. */ char * br_find_prefix (const char *default_prefix) { char *dir1, *dir2; if (exe == (char *) NULL) { /* BinReloc not initialized. */ if (default_prefix != (const char *) NULL) return strdup (default_prefix); else return (char *) NULL; } dir1 = br_dirname (exe); dir2 = br_dirname (dir1); free (dir1); return dir2; } /** Locate the application's binary folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/bin" * \endcode * * @param default_bin_dir A default path which will used as fallback. * @return A string containing the bin folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if * the initialization function failed, then a copy of default_bin_dir will * be returned. If default_bin_dir is NULL, then NULL will be returned. */ char * br_find_bin_dir (const char *default_bin_dir) { char *prefix, *dir; prefix = br_find_prefix ((const char *) NULL); if (prefix == (char *) NULL) { /* BinReloc not initialized. */ if (default_bin_dir != (const char *) NULL) return strdup (default_bin_dir); else return (char *) NULL; } dir = br_build_path (prefix, "bin"); free (prefix); return dir; } /** Locate the application's superuser binary folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/sbin" * \endcode * * @param default_sbin_dir A default path which will used as fallback. * @return A string containing the sbin folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the * initialization function failed, then a copy of default_sbin_dir will * be returned. If default_bin_dir is NULL, then NULL will be returned. */ char * br_find_sbin_dir (const char *default_sbin_dir) { char *prefix, *dir; prefix = br_find_prefix ((const char *) NULL); if (prefix == (char *) NULL) { /* BinReloc not initialized. */ if (default_sbin_dir != (const char *) NULL) return strdup (default_sbin_dir); else return (char *) NULL; } dir = br_build_path (prefix, "sbin"); free (prefix); return dir; } /** Locate the application's data folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/share" * \endcode * * @param default_data_dir A default path which will used as fallback. * @return A string containing the data folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the * initialization function failed, then a copy of default_data_dir * will be returned. If default_data_dir is NULL, then NULL will be * returned. */ char * br_find_data_dir (const char *default_data_dir) { char *prefix, *dir; prefix = br_find_prefix ((const char *) NULL); if (prefix == (char *) NULL) { /* BinReloc not initialized. */ if (default_data_dir != (const char *) NULL) return strdup (default_data_dir); else return (char *) NULL; } dir = br_build_path (prefix, "share"); free (prefix); return dir; } /** Locate the application's localization folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/share/locale" * \endcode * * @param default_locale_dir A default path which will used as fallback. * @return A string containing the localization folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the * initialization function failed, then a copy of default_locale_dir will be returned. * If default_locale_dir is NULL, then NULL will be returned. */ char * br_find_locale_dir (const char *default_locale_dir) { char *data_dir, *dir; data_dir = br_find_data_dir ((const char *) NULL); if (data_dir == (char *) NULL) { /* BinReloc not initialized. */ if (default_locale_dir != (const char *) NULL) return strdup (default_locale_dir); else return (char *) NULL; } dir = br_build_path (data_dir, "locale"); free (data_dir); return dir; } /** Locate the application's library folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/lib" * \endcode * * @param default_lib_dir A default path which will used as fallback. * @return A string containing the library folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the initialization * function failed, then a copy of default_lib_dir will be returned. * If default_lib_dir is NULL, then NULL will be returned. */ char * br_find_lib_dir (const char *default_lib_dir) { char *prefix, *dir; prefix = br_find_prefix ((const char *) NULL); if (prefix == (char *) NULL) { /* BinReloc not initialized. */ if (default_lib_dir != (const char *) NULL) return strdup (default_lib_dir); else return (char *) NULL; } dir = br_build_path (prefix, "lib"); free (prefix); return dir; } /** Locate the application's libexec folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/libexec" * \endcode * * @param default_libexec_dir A default path which will used as fallback. * @return A string containing the libexec folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the initialization * function failed, then a copy of default_libexec_dir will be returned. * If default_libexec_dir is NULL, then NULL will be returned. */ char * br_find_libexec_dir (const char *default_libexec_dir) { char *prefix, *dir; prefix = br_find_prefix ((const char *) NULL); if (prefix == (char *) NULL) { /* BinReloc not initialized. */ if (default_libexec_dir != (const char *) NULL) return strdup (default_libexec_dir); else return (char *) NULL; } dir = br_build_path (prefix, "libexec"); free (prefix); return dir; } /** Locate the application's configuration files folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/etc" * \endcode * * @param default_etc_dir A default path which will used as fallback. * @return A string containing the etc folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the initialization * function failed, then a copy of default_etc_dir will be returned. * If default_etc_dir is NULL, then NULL will be returned. */ char * br_find_etc_dir (const char *default_etc_dir) { char *prefix, *dir; prefix = br_find_prefix ((const char *) NULL); if (prefix == (char *) NULL) { /* BinReloc not initialized. */ if (default_etc_dir != (const char *) NULL) return strdup (default_etc_dir); else return (char *) NULL; } dir = br_build_path (prefix, "etc"); free (prefix); return dir; } /*********************** * Utility functions ***********************/ /** Concatenate str1 and str2 to a newly allocated string. * * @param str1 A string. * @param str2 Another string. * @returns A newly-allocated string. This string should be freed when no longer needed. */ char * br_strcat (const char *str1, const char *str2) { char *result; size_t len1, len2; if (str1 == NULL) str1 = ""; if (str2 == NULL) str2 = ""; len1 = strlen (str1); len2 = strlen (str2); result = (char *) malloc (len1 + len2 + 1); memcpy (result, str1, len1); memcpy (result + len1, str2, len2); result[len1 + len2] = '\0'; return result; } char * br_build_path (const char *dir, const char *file) { char *dir2, *result; size_t len; int must_free = 0; len = strlen (dir); if (len > 0 && dir[len - 1] != DIRSEP_C) { dir2 = br_strcat (dir, DIRSEP ); must_free = 1; } else dir2 = (char *) dir; result = br_strcat (dir2, file); if (must_free) free (dir2); return result; } /* Emulates glibc's strndup() */ static char * br_strndup (const char *str, size_t size) { char *result = (char *) NULL; size_t len; if (str == (const char *) NULL) return (char *) NULL; len = strlen (str); if (len == 0) return strdup (""); if (size > len) size = len; result = (char *) malloc (len + 1); memcpy (result, str, size); result[size] = '\0'; return result; } /** Extracts the directory component of a path. * * Similar to g_dirname() or the dirname commandline application. * * Example: * \code * br_dirname ("/usr/local/foobar"); --> Returns: "/usr/local" * \endcode * * @param path A path. * @returns A directory name. This string should be freed when no longer needed. */ char * br_dirname (const char *path) { char *end, *result; if (path == (const char *) NULL) return (char *) NULL; end = strrchr (path, DIRSEP_C); if (end == (const char *) NULL) return strdup ("."); while (end > path && *end == DIRSEP_C) end--; result = br_strndup (path, end - path + 1); if (result[0] == 0) { free (result); return strdup (DIRSEP); } else return result; } #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __BINRELOC_C__ */ gwenhywfar-4.15.2beta/src/os/0000755000175000017500000000000012643267235013043 500000000000000gwenhywfar-4.15.2beta/src/os/inetaddr_l.h0000644000175000017500000000377012364015347015243 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Tue Oct 02 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /** * @file src/os/inetaddr.h * @short This file contains the internet address handling module */ #ifndef GWEN_INETADDR_L_H #define GWEN_INETADDR_L_H #include /** * Initialize this module. */ int GWEN_InetAddr_ModuleInit(void); /** * De-Initialize this module. */ int GWEN_InetAddr_ModuleFini(void); #endif /* GWEN_INETADDR_L_H */ gwenhywfar-4.15.2beta/src/os/process.h0000644000175000017500000001346712416477066014630 00000000000000/*************************************************************************** begin : Sat Dec 27 2003 copyright : (C) 2003-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_PROCESS_H #define GWENHYWFAR_PROCESS_H #include #include #include #include /** redirect the child processes stdin channel */ #define GWEN_PROCESS_FLAGS_REDIR_STDIN 0x00000001 /** redirect the child processes stdout channel */ #define GWEN_PROCESS_FLAGS_REDIR_STDOUT 0x00000002 /** redirect the child processes stderr channel */ #define GWEN_PROCESS_FLAGS_REDIR_STDERR 0x00000004 #define GWEN_PROCESS_FLAGS_DEFAULT 0 #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_PROCESS GWEN_PROCESS; /** * States a process can assume. */ typedef enum { /** process has not yet been started */ GWEN_ProcessStateNotStarted=0, /** process is running */ GWEN_ProcessStateRunning, /** process exited normally */ GWEN_ProcessStateExited, /** process terminated abnormally (on POSIX systems this is in most * cases an uncaught signal) */ GWEN_ProcessStateAborted, /** process has been stopped (unused for now) */ GWEN_ProcessStateStopped, /** process is in an unknown state */ GWEN_ProcessStateUnknown } GWEN_PROCESS_STATE; /** * Creates a process representation. This does not start a process, it * simply prepares some data for starting a process. */ GWENHYWFAR_API GWEN_PROCESS *GWEN_Process_new(void); /** * Frees process data. This does not stop the process represented by this * data. You should only free this data after the process has terminated * or if you are not interested in the result of the process (because * after freeing this data there is no way to communicate with the process). */ GWENHYWFAR_API void GWEN_Process_free(GWEN_PROCESS *pr); /** * Returns the current process flags * (see @ref GWEN_PROCESS_FLAGS_REDIR_STDOUT and others) */ GWENHYWFAR_API uint32_t GWEN_Process_GetFlags(const GWEN_PROCESS *pr); /** * Sets the process flags to the given value * (see @ref GWEN_PROCESS_FLAGS_REDIR_STDOUT and others) */ GWENHYWFAR_API void GWEN_Process_SetFlags(GWEN_PROCESS *pr, uint32_t f); /** * Adds the given flag to the current process flags * (see @ref GWEN_PROCESS_FLAGS_REDIR_STDOUT and others) */ GWENHYWFAR_API void GWEN_Process_AddFlags(GWEN_PROCESS *pr, uint32_t f); /** * Removes the given flag from the current process flags * (see @ref GWEN_PROCESS_FLAGS_REDIR_STDOUT and others) */ GWENHYWFAR_API void GWEN_Process_SubFlags(GWEN_PROCESS *pr, uint32_t f); /** * Starts the given process. * @param pr pointer to process data * @param prg path and name of the program to start * @param args command line arguments for the program (MUST NOT contain * the name of the program) */ GWENHYWFAR_API GWEN_PROCESS_STATE GWEN_Process_Start(GWEN_PROCESS *pr, const char *prg, const char *args); /** * Checks for the current state of the given process. */ GWENHYWFAR_API GWEN_PROCESS_STATE GWEN_Process_CheckState(GWEN_PROCESS *pr); /** * Returns the result of a process. This process must have terminated * in order to return a result. */ GWENHYWFAR_API int GWEN_Process_GetResult(GWEN_PROCESS *pr); /** * Waits for the termination of the given process. */ GWENHYWFAR_API int GWEN_Process_Wait(GWEN_PROCESS *pr); /** * Terminates a process immediately (on POSIX systems this is performed * by sending a KILL signal). * This function waits for the process to terminate. */ GWENHYWFAR_API int GWEN_Process_Terminate(GWEN_PROCESS *pr); /** * Returns a GWEN_BUFFEREDIO which can be used to write data to be * received by the process via stdin. Returns 0 if the process does not * have the flag @ref GWEN_PROCESS_FLAGS_REDIR_STDIN set. */ GWENHYWFAR_API GWEN_SYNCIO *GWEN_Process_GetStdin(const GWEN_PROCESS *pr); /** * Returns a GWEN_BUFFEREDIO which can be used to read data written by * the process via stdout. Returns 0 if the process does not * have the flag @ref GWEN_PROCESS_FLAGS_REDIR_STDOUT set. */ GWENHYWFAR_API GWEN_SYNCIO *GWEN_Process_GetStdout(const GWEN_PROCESS *pr); /** * Returns a GWEN_BUFFEREDIO which can be used to read data written by * the process via stderr. Returns 0 if the process does not * have the flag @ref GWEN_PROCESS_FLAGS_REDIR_STDERR set. */ GWENHYWFAR_API GWEN_SYNCIO *GWEN_Process_GetStderr(const GWEN_PROCESS *pr); #ifdef __cplusplus } #endif #endif /* GWENHYWFAR_PROCESS_H */ gwenhywfar-4.15.2beta/src/os/gwentime_l.h0000644000175000017500000000440112364015347015260 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Wed Mar 24 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_TIME_L_H #define GWEN_TIME_L_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif /** * This function is called by OS dependant implementations of * @ref GWEN_Time__GetCurrentTime. */ void GWEN_Time__SetSecsAndMSecs(GWEN_TIME *ti, uint32_t secs, uint32_t msecs); /** @name Functions to be implemented by OS specific modules * */ /*@{*/ int GWEN_Time__GetCurrentTime(GWEN_TIME *ti); /*@}*/ #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/os/directory.h0000644000175000017500000002644212416477066015153 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Tue Dec 03 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /** * @file directory.h * @short This file contains the directory handling module */ #ifndef GWEN_DIRECTORY_H #define GWEN_DIRECTORY_H #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_DIRECTORY GWEN_DIRECTORY; #ifdef __cplusplus } #endif #include #include #include #ifdef __cplusplus extern "C" { #endif /** * */ /*@{*/ #define GWEN_DIR_FLAGS_PUBLIC_PATH 0x00010000 #define GWEN_DIR_FLAGS_PUBLIC_NAME 0x00020000 /*@}*/ /** * @defgroup MOD_DIRECTORY Directory Functions * @ingroup MOD_OS * @short Provides secure interprocess communication * @author Martin Preuss */ /*@{*/ /** * Constructor. */ GWENHYWFAR_API GWEN_DIRECTORY *GWEN_Directory_new(void); /** * Destructor */ GWENHYWFAR_API void GWEN_Directory_free(GWEN_DIRECTORY *d); /** * Opens a directory. This allows calling "Directory_Read" to succeed. * @author Martin Preuss * @return 0 if ok, !=0 on error (e.g. if no such directory exists; see opendir(3) and errno for the detailed error) * @param d pointer to a directory data structure. This should be created * by calling @ref GWEN_Directory_new(). * @param n path and name of the directory to open */ GWENHYWFAR_API int GWEN_Directory_Open(GWEN_DIRECTORY *d, const char *n); /** * Closes a previously opened directory. * @author Martin Preuss * @return 0 if ok, !=0 on error * @param d pointer to a directory data structure. This should be created * by calling @ref GWEN_Directory_new(). */ GWENHYWFAR_API int GWEN_Directory_Close(GWEN_DIRECTORY *d); /** * Reads the next entry from a directory and stores the name of that * entry in the given buffer. The entry returned is relative to the * open directory. * @author Martin Preuss * @return 0 if ok, !=0 on error * @param d pointer to a directory data structure. This should be created * by calling @ref GWEN_Directory_new(). * @param buffer pointer to a buffer to receive the name * @param len size of the buffer */ GWENHYWFAR_API int GWEN_Directory_Read(GWEN_DIRECTORY *d, char *buffer, unsigned int len); /** * Rewinds the internal pointers, so that the next call to * @author Martin Preuss * @ref GWEN_Directory_Read will return the first entry of the open directory. * @return 0 if ok, !=0 on error * @param d pointer to a directory data structure. This should be created * by calling @ref GWEN_Directory_new(). */ GWENHYWFAR_API int GWEN_Directory_Rewind(GWEN_DIRECTORY *d); /** * Gets the current user's home directory and copies it into the * given buffer. * * On Unix, this looks up the passwd entry of the current user, * similar to glib's g_get_home_dir(). Watch out: The environment * variable "HOME" is *not* used, not even as a fallback if there * is no passwd entry (different from g_get_home_dir()). * * On Windows, this looks up the environment variable "HOME", then * "USERPROFILE", then the Windows system directory. This * behaviour is identical to glib's g_get_home_dir(). Watch out: * In the normal non-mingw/msys environment, only "USERPROFILE" is * set, e.g. to "c:\Documents\Yourusername". But if this function * is called from within msys, then msys itself has set "HOME" to * a different value, e.g. to "c:\msys\1.0\home\yourusername". In * effect, your program will see a different home directory when * run from within msys compared to without msys. This is weird, * but it is identical to the glib behaviour and hence we leave it * at that. * * @return 0 if ok, !=0 on error */ GWENHYWFAR_API int GWEN_Directory_GetHomeDirectory(char *buffer, unsigned int size); /** * Gets the directory to use for temporary files and copies it * into the given buffer. * * This is found from inspecting the environment variables TMPDIR, * TMP, and TEMP in that order. If none of those are defined, * "/tmp" is returned on UNIX and "C:\" on Windows. This is * similar to glib's g_get_tmp_dir(). * * @return 0 if ok, !=0 on error */ GWENHYWFAR_API int GWEN_Directory_GetTmpDirectory(char *buffer, unsigned int size); /** * Gets the prefix to which the calling executable was installed, e.g. * if the executable was installed using prefix "/usr" then the binary * itself will be in "/usr/bin". In this case this function will return * the directory name "/usr". * Please note that this function only looks at the folder at which the * calling exectuable is located when this function is called, so if you * move the binary to another place then the result will be different. */ GWENHYWFAR_API int GWEN_Directory_GetPrefixDirectory(char *buffer, unsigned int size); /** * Gets a file path. It uses @ref MOD_PATH to either create or check for * the existence of a given path. * @return 0 if ok, !=0 on error * @param path path to inspect * @param flags flags, please see @ref GWEN_PATH_FLAGS_PATHMUSTEXIST et. al. */ GWENHYWFAR_API int GWEN_Directory_GetPath(const char *path, unsigned int flags); /** * Creates a directory. */ GWENHYWFAR_API int GWEN_Directory_Create(const char *path); /** * Creates a public directory (a folder which can be listed and entered * by anyone) */ GWENHYWFAR_API int GWEN_Directory_CreatePublic(const char *path); /** * Takes a path and translates it into a path that the running platform * can understand. * This is needed for unix paths used on Windows. * If transformDriveElement is !=0 on Windows platforms and the first element * of the path is "/x" (with x being [a..z,A..Z]) then this element is * translated into the corresponding drive letter sequence (x:). * Slashes and backslashes are transformed as needed by the running platform. * Duplicate slashes/backslashed are removed. * @param path path to translate * @param pbuf buffer to which the path is appended * @param transformDriveElemen see above (ignored on non-win32 platforms) */ GWENHYWFAR_API int GWEN_Directory_OsifyPath(const char *path, GWEN_BUFFER *pbuf, int transformDriveElement); GWENHYWFAR_API int GWEN_Directory_FindFileInPaths(const GWEN_STRINGLIST *paths, const char *filePath, GWEN_BUFFER *fbuf); GWENHYWFAR_API int GWEN_Directory_FindPathForFile(const GWEN_STRINGLIST *paths, const char *filePath, GWEN_BUFFER *fbuf); /** * This function reads all entries of the given folder and stores them * in the given string list if they match a mask. * * The entries added to the string list are the names returned by the * operating systems. They do not contain the full path. * * @param folder folder to inspect * @param sl string list to add new entries to * @param mask if omitted, all entries match (wildcards and jokers allowed) */ GWENHYWFAR_API int GWEN_Directory_GetAllEntries(const char *folder, GWEN_STRINGLIST *sl, const char *mask); /** * This function does the same as @ref GWEN_Directory_GetAllEntries, but * in addition a entry type indicator is prepended to the entries added * to the string list. * Known indicators are: *
    *
  • d: entry is a directory
  • *
  • f: entry is a file
  • *
  • ?: entry type is unknown
  • *
* * @param folder folder to inspect * @param sl string list to add new entries to * @param mask if omitted, all entries match (wildcards and jokers allowed) */ GWENHYWFAR_API int GWEN_Directory_GetFileEntriesWithType(const char *folder, GWEN_STRINGLIST *sl, const char *mask); /** * This function does the same as @ref GWEN_Directory_GetAllEntries, but * it only adds file entries. * * @param folder folder to inspect * @param sl string list to add new entries to * @param mask if omitted, all entries match (wildcards and jokers allowed) */ GWENHYWFAR_API int GWEN_Directory_GetFileEntries(const char *folder, GWEN_STRINGLIST *sl, const char *mask); /** * This function does the same as @ref GWEN_Directory_GetAllEntries, but * it only adds folder entries. * * @param folder folder to inspect * @param sl string list to add new entries to * @param mask if omitted, all entries match (wildcards and jokers allowed) */ GWENHYWFAR_API int GWEN_Directory_GetDirEntries(const char *folder, GWEN_STRINGLIST *sl, const char *mask); /** * This function adds all matching files to the given string list recursively. * Each entry of the stringlist starts with the given @b folder, so if that * argument is an absolute path all stringlist entries will be absolute paths. * * @param folder folder to inspect (including sub-folders) * @param sl string list to add new entries to * @param mask if omitted, all entries match (wildcards and jokers allowed) */ GWENHYWFAR_API int GWEN_Directory_GetMatchingFilesRecursively(const char *folder, GWEN_STRINGLIST *sl, const char *mask); /** * This function determines the absolute path og the given folder and returns it * in the given buffer. It uses a combination of getcwd() and chdir() to get * the result. This function should return with the current working directory * effectively unchanged. * @return 0 if ok, error code otherwise * @param folder folder for which to retrieve the absolute path * @param tbuf buffer to receive the result */ GWENHYWFAR_API int GWEN_Directory_GetAbsoluteFolderPath(const char *folder, GWEN_BUFFER *tbuf); /*@}*/ /* defgroup */ #ifdef __cplusplus } #endif #endif /* GWEN_DIRECTORY_H */ gwenhywfar-4.15.2beta/src/os/gwensemaphore.h0000644000175000017500000000352412364015347015777 00000000000000/*************************************************************************** begin : Tue Jul 29 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_SEMAPHORE_H #define GWEN_SEMAPHORE_H typedef struct GWEN_SEMAPHORE GWEN_SEMAPHORE; GWEN_SEMAPHORE *GWEN_Semaphore_new(void); void GWEN_Semaphore_free(GWEN_SEMAPHORE *sm); void GWEN_Semaphore_Wait(GWEN_SEMAPHORE *sm); void GWEN_Semaphore_Post(GWEN_SEMAPHORE *sm); #endif gwenhywfar-4.15.2beta/src/os/gwendate.h0000644000175000017500000001217412416477066014742 00000000000000/*************************************************************************** begin : Tue Jul 07 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_DATE_H #define GWEN_DATE_H #include #include #include typedef struct GWEN_DATE GWEN_DATE; #include #include #ifdef __cplusplus extern "C" { #endif /** * Create a date from the gregorian calender using year, month and day. * @param y year (e.g. 2009) * @param m month (1-12) * @param d day of month (1-31) */ GWENHYWFAR_API GWEN_DATE *GWEN_Date_fromGregorian(int y, int m, int d); /** * Create a date from the julian calender. * @param julian date in julian calender */ GWENHYWFAR_API GWEN_DATE *GWEN_Date_fromJulian(int julian); /** * Create a date from the current local date. */ GWENHYWFAR_API GWEN_DATE *GWEN_Date_CurrentDate(void); GWENHYWFAR_API GWEN_DATE *GWEN_Date_fromString(const char *s); GWENHYWFAR_API GWEN_DATE *GWEN_Date_dup(const GWEN_DATE *ogd); GWENHYWFAR_API GWEN_DATE *GWEN_Date_fromTime(const GWEN_TIME *ti); GWENHYWFAR_API GWEN_DATE *GWEN_Date_fromLocalTime(time_t t); GWENHYWFAR_API GWEN_DATE *GWEN_Date_fromGmTime(time_t t); GWENHYWFAR_API GWEN_DATE *GWEN_Date_fromStringWithTemplate(const char *s, const char *tmpl); GWENHYWFAR_API int GWEN_Date_toStringWithTemplate(const GWEN_DATE *t, const char *tmpl, GWEN_BUFFER *buf); /** * Destructor. */ GWENHYWFAR_API void GWEN_Date_free(GWEN_DATE *gd); GWENHYWFAR_API const char *GWEN_Date_GetString(const GWEN_DATE *gd); GWENHYWFAR_API int GWEN_Date_DaysInMonth(const GWEN_DATE *gd); /** * Returns the distance between the given date and the begin of that year. * E.g. if the given date is the 1st of January the result is 0. */ GWENHYWFAR_API int GWEN_Date_DaysInYear(const GWEN_DATE *gd); GWENHYWFAR_API int GWEN_Date_GetYear(const GWEN_DATE *gd); GWENHYWFAR_API int GWEN_Date_GetMonth(const GWEN_DATE *gd); GWENHYWFAR_API int GWEN_Date_GetDay(const GWEN_DATE *gd); GWENHYWFAR_API int GWEN_Date_WeekDay(const GWEN_DATE *gd); GWENHYWFAR_API int GWEN_Date_GetJulian(const GWEN_DATE *gd); GWENHYWFAR_API int GWEN_Date_IsLeapYear(int y); GWENHYWFAR_API int GWEN_Date_Compare(const GWEN_DATE *gd1, const GWEN_DATE *gd0); GWENHYWFAR_API int GWEN_Date_Diff(const GWEN_DATE *gd1, const GWEN_DATE *gd0); GWENHYWFAR_API int GWEN_Date_toDb(const GWEN_DATE *dt, GWEN_DB_NODE *db); GWENHYWFAR_API GWEN_DATE *GWEN_Date_fromDb(GWEN_DB_NODE *db); GWENHYWFAR_API GWEN_DATE *GWEN_Date_GetThisMonthStart(const GWEN_DATE *dt); GWENHYWFAR_API GWEN_DATE *GWEN_Date_GetThisMonthEnd(const GWEN_DATE *dt); GWENHYWFAR_API GWEN_DATE *GWEN_Date_GetThisQuarterYearStart(const GWEN_DATE *dt); GWENHYWFAR_API GWEN_DATE *GWEN_Date_GetThisQuarterYearEnd(const GWEN_DATE *dt); GWENHYWFAR_API GWEN_DATE *GWEN_Date_GetThisHalfYearStart(const GWEN_DATE *dt); GWENHYWFAR_API GWEN_DATE *GWEN_Date_GetThisHalfYearEnd(const GWEN_DATE *dt); GWENHYWFAR_API GWEN_DATE *GWEN_Date_GetThisYearStart(const GWEN_DATE *dt); GWENHYWFAR_API GWEN_DATE *GWEN_Date_GetThisYearEnd(const GWEN_DATE *dt); GWENHYWFAR_API GWEN_DATE *GWEN_Date_GetLastMonthStart(const GWEN_DATE *dt); GWENHYWFAR_API GWEN_DATE *GWEN_Date_GetLastMonthEnd(const GWEN_DATE *dt); GWENHYWFAR_API GWEN_DATE *GWEN_Date_GetLastQuarterYearStart(const GWEN_DATE *dt); GWENHYWFAR_API GWEN_DATE *GWEN_Date_GetLastQuarterYearEnd(const GWEN_DATE *dt); GWENHYWFAR_API GWEN_DATE *GWEN_Date_GetLastHalfYearStart(const GWEN_DATE *dt); GWENHYWFAR_API GWEN_DATE *GWEN_Date_GetLastHalfYearEnd(const GWEN_DATE *dt); GWENHYWFAR_API GWEN_DATE *GWEN_Date_GetLastYearStart(const GWEN_DATE *dt); GWENHYWFAR_API GWEN_DATE *GWEN_Date_GetLastYearEnd(const GWEN_DATE *dt); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/os/libloader_l.h0000644000175000017500000000354112364015347015402 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Fri Nov 22 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_LIBLOADER_L_H #define GWENHYWFAR_LIBLOADER_L_H #include int GWEN_LibLoader_ModuleInit(void); int GWEN_LibLoader_ModuleFini(void); #endif /* GWENHYWFAR_LIBLOADER_L_H */ gwenhywfar-4.15.2beta/src/os/mutex.h0000644000175000017500000000344712364015347014301 00000000000000/*************************************************************************** begin : Mon Jul 14 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_MUTEX_H #define GWEN_MUTEX_H typedef struct GWEN_MUTEX GWEN_MUTEX; GWEN_MUTEX *GWEN_Mutex_new(void); void GWEN_Mutex_free(GWEN_MUTEX *mtx); int GWEN_Mutex_Lock(GWEN_MUTEX *mtx); int GWEN_Mutex_Unlock(GWEN_MUTEX *mtx); #endif gwenhywfar-4.15.2beta/src/os/gwentime_all.c0000644000175000017500000004136412416477066015611 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sun Nov 23 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "gwentime_p.h" #include #include #include #include #include #include GWEN_LIST_FUNCTIONS(GWEN_TIME_TMPLCHAR, GWEN_TimeTmplChar) GWEN_TIME *GWEN_CurrentTime(void) { GWEN_TIME *t; GWEN_NEW_OBJECT(GWEN_TIME, t); if (GWEN_Time__GetCurrentTime(t)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not get current time"); GWEN_Time_free(t); return 0; } return t; } GWEN_TIME *GWEN_Time_fromSeconds(uint32_t secs) { GWEN_TIME *t; GWEN_NEW_OBJECT(GWEN_TIME, t); t->secs=secs; return t; } int GWEN_Time_AddSeconds(GWEN_TIME *ti, uint32_t secs) { uint32_t i; assert(ti); i=ti->secs+secs; if (isecs) { DBG_INFO(GWEN_LOGDOMAIN, "Overflow when adding %u seconds", secs); return GWEN_ERROR_INVALID; } ti->secs=i; return 0; } int GWEN_Time_SubSeconds(GWEN_TIME *ti, uint32_t secs) { assert(ti); if (ti->secssecs-=secs; return 0; } void GWEN_Time__SetSecsAndMSecs(GWEN_TIME *ti, uint32_t secs, uint32_t msecs) { assert(ti); ti->secs=secs; ti->msecs=msecs; } int GWEN_Time_toDb(const GWEN_TIME *t, GWEN_DB_NODE *db) { GWEN_DB_NODE *dbT; int i1, i2, i3; assert(t); assert(db); dbT=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_DEFAULT, "date"); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "inUtc", 1); assert(dbT); if (GWEN_Time_GetBrokenDownUtcDate(t, &i1, &i2, &i3)) { DBG_INFO(GWEN_LOGDOMAIN, "Could not break down date"); return -1; } GWEN_DB_SetIntValue(dbT, GWEN_DB_FLAGS_OVERWRITE_VARS, "day", i1); GWEN_DB_SetIntValue(dbT, GWEN_DB_FLAGS_OVERWRITE_VARS, "month", i2+1); GWEN_DB_SetIntValue(dbT, GWEN_DB_FLAGS_OVERWRITE_VARS, "year", i3); dbT=GWEN_DB_GetGroup(db, GWEN_DB_FLAGS_DEFAULT, "time"); assert(dbT); if (GWEN_Time_GetBrokenDownUtcTime(t, &i1, &i2, &i3)) { DBG_INFO(GWEN_LOGDOMAIN, "Could not break down time"); return -1; } GWEN_DB_SetIntValue(dbT, GWEN_DB_FLAGS_OVERWRITE_VARS, "hour", i1); GWEN_DB_SetIntValue(dbT, GWEN_DB_FLAGS_OVERWRITE_VARS, "min", i2); GWEN_DB_SetIntValue(dbT, GWEN_DB_FLAGS_OVERWRITE_VARS, "sec", i3); return 0; } GWEN_TIME *GWEN_Time_fromDb(GWEN_DB_NODE *db) { GWEN_TIME *t; GWEN_DB_NODE *dbT; int day, month, year; int hour, min, sec; int inUtc; day=month=year=0; hour=min=sec=0; inUtc=GWEN_DB_GetIntValue(db, "inUtc", 0, 0); dbT=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "date"); if (dbT) { day=GWEN_DB_GetIntValue(dbT, "day", 0, 0); month=GWEN_DB_GetIntValue(dbT, "month", 0, 1)-1; year=GWEN_DB_GetIntValue(dbT, "year", 0, 0); if (!day || !year) { DBG_INFO(GWEN_LOGDOMAIN, "Bad date in DB"); return 0; } } dbT=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "time"); if (dbT) { hour=GWEN_DB_GetIntValue(dbT, "hour", 0, 0); min=GWEN_DB_GetIntValue(dbT, "min", 0, 0); sec=GWEN_DB_GetIntValue(dbT, "sec", 0, 0); } DBG_VERBOUS(GWEN_LOGDOMAIN, "Creating time from this: %04d/%02d/%02d - %02d:%02d:%02d (%d)", year, month, day, hour, min, sec, inUtc); t=GWEN_Time_new(year, month, day, hour, min, sec, inUtc); if (!t) { DBG_INFO(GWEN_LOGDOMAIN, "Bad date/time"); return 0; } return t; } GWEN_TIME *GWEN_Time__fromString(const char *s, const char *tmpl, int inUtc) { int year, month, day; int hour, min, sec; const char *p; const char *t; GWEN_TIME *gwt; assert(s); assert(tmpl); year=month=day=0; hour=min=sec=0; p=s; t=tmpl; while(*t && *p) { int i; if (*t=='*') { t++; if (!*t) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad pattern: Must not end with \"*\""); return 0; } i=0; while(*p) { if (!isdigit((int)*p)) break; if (*p==*t) break; i*=10; i+=(*p)-'0'; p++; } /* while */ } else { if (isdigit((int)*p)) i=(*p)-'0'; else i=-1; p++; } if (i==-1 && strchr("YMDhms", *t)!=NULL) { DBG_INFO(GWEN_LOGDOMAIN, "No more digits at [%s], continuing", t); p--; } else { switch(*t) { case 'Y': if (i==-1) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return 0; } year*=10; year+=i; break; case 'M': if (i==-1) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return 0; } month*=10; month+=i; break; case 'D': if (i==-1) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return 0; } day*=10; day+=i; break; case 'h': if (i==-1) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return 0; } hour*=10; hour+=i; break; case 'm': if (i==-1) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return 0; } min*=10; min+=i; break; case 's': if (i==-1) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return 0; } sec*=10; sec+=i; break; default: DBG_VERBOUS(GWEN_LOGDOMAIN, "Unknown character in template, will skip in both strings"); break; } } t++; } /* while */ if (year<100) year+=2000; if (day==0) day=1; DBG_DEBUG(GWEN_LOGDOMAIN, "Got this date/time: %04d/%02d/%02d, %02d:%02d:%02d", year, month-1, day, hour, min, sec); /* get time in local time */ gwt=GWEN_Time_new(year, month-1, day, hour, min, sec, inUtc); if (!gwt) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return 0; } return gwt; } GWEN_TIME *GWEN_Time_fromString(const char *s, const char *tmpl) { return GWEN_Time__fromString(s, tmpl, 0); } GWEN_TIME *GWEN_Time_fromUtcString(const char *s, const char *tmpl) { return GWEN_Time__fromString(s, tmpl, 1); } GWEN_TIME *GWEN_Time_new(int year, int month, int day, int hour, int min, int sec, int inUtc) { uint32_t s; if (inUtc) s=GWEN_Time__mktimeUtc(year, month, day, hour, min, sec); else { struct tm ti; struct tm *tp; time_t tt; tt=time(0); tp=localtime(&tt); assert(tp); memmove(&ti, tp, sizeof(ti)); ti.tm_sec=sec; ti.tm_min=min; ti.tm_hour=hour; if (year<100) { if (year<72) year+=2000; year+=1900; } ti.tm_year=year-1900; ti.tm_mon=month; ti.tm_mday=day; ti.tm_yday=0; ti.tm_wday=0; tt=mktime(&ti); assert(tt!=(time_t)-1); s=(uint32_t)tt; } return GWEN_Time_fromSeconds(s); } uint32_t GWEN_Time__mktimeUtc(int year, int month, int day, int hour, int min, int sec) { uint32_t result; int i; int isLeap; const uint32_t hoursecs=60*60; const uint32_t daysecs=24*hoursecs; const uint32_t yearsecs=365*daysecs; const uint32_t monthDays[12]= { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; result=(year-1970)*yearsecs; for (i=1970; isecs=t->secs; newT->msecs=t->msecs; return newT; } void GWEN_Time_free(GWEN_TIME *t) { if (t) { GWEN_FREE_OBJECT(t); } } double GWEN_Time_Diff(const GWEN_TIME *t1, const GWEN_TIME *t0) { double d; assert(t1); assert(t0); d=1000.0*((double)(t1->secs)-(double)(t0->secs)); d+=(double)((double)(t1->msecs)-(double)(t0->msecs)); return d; } double GWEN_Time_DiffSeconds(const GWEN_TIME *t1, const GWEN_TIME *t0) { double d; assert(t1); assert(t0); d=(double)(t1->secs)-(double)(t0->secs); d+=((double)((double)(t1->msecs)-(double)(t0->msecs)))/1000.0; return d; } int GWEN_Time_Compare(const GWEN_TIME *t1, const GWEN_TIME *t0) { if (t1 && t0) { if (t1->secssecs) return -1; else if (t1->secs>t0->secs) return 1; else { if (t1->msecsmsecs) return -1; else if (t1->msecs>t0->msecs) return 1; else return 0; } } else if (t1) return 1; else if (t0) return -1; return 0; } double GWEN_Time_Milliseconds(const GWEN_TIME *t) { assert(t); return (double)((t->secs*1000)+(t->msecs)); } uint32_t GWEN_Time_Seconds(const GWEN_TIME *t) { assert(t); return t->secs; } int GWEN_Time_GetBrokenDownTime(const GWEN_TIME *t, int *hours, int *mins, int *secs) { struct tm *tb; time_t tt; assert(t); tt=t->secs; tb=localtime(&tt); if (!tb) { DBG_ERROR(GWEN_LOGDOMAIN, "localtime(): %s", strerror(errno)); return -1; } *hours=tb->tm_hour; *mins=tb->tm_min; *secs=tb->tm_sec; return 0; } int GWEN_Time_GetBrokenDownUtcTime(const GWEN_TIME *t, int *hours, int *mins, int *secs) { struct tm *tb; time_t tt; assert(t); tt=t->secs; tb=gmtime(&tt); if (!tb) { DBG_ERROR(GWEN_LOGDOMAIN, "gmtime(): %s", strerror(errno)); return -1; } *hours=tb->tm_hour; *mins=tb->tm_min; *secs=tb->tm_sec; return 0; } int GWEN_Time_GetBrokenDownDate(const GWEN_TIME *t, int *days, int *month, int *year) { struct tm *tb; time_t tt; assert(t); tt=t->secs; tb=localtime(&tt); if (!tb) { DBG_ERROR(GWEN_LOGDOMAIN, "localtime(): %s", strerror(errno)); return -1; } *days=tb->tm_mday; *month=tb->tm_mon; *year=tb->tm_year+1900; return 0; } int GWEN_Time_GetBrokenDownUtcDate(const GWEN_TIME *t, int *days, int *month, int *year) { struct tm *tb; time_t tt; assert(t); tt=t->secs; tb=gmtime(&tt); if (!tb) { DBG_ERROR(GWEN_LOGDOMAIN, "gmtime(): %s", strerror(errno)); return -1; } *days=tb->tm_mday; *month=tb->tm_mon; *year=tb->tm_year+1900; return 0; } /* TODO: compiler says "function returns an aggregate" */ struct tm GWEN_Time_toTm(const GWEN_TIME *t) { struct tm *tb; time_t tt; assert(t); tt=t->secs; tb=localtime(&tt); return *tb; } time_t GWEN_Time_toTime_t(const GWEN_TIME *t) { assert(t); return t->secs; } GWEN_TIME_TMPLCHAR *GWEN_TimeTmplChar_new(char c) { GWEN_TIME_TMPLCHAR *e; GWEN_NEW_OBJECT(GWEN_TIME_TMPLCHAR, e); GWEN_LIST_INIT(GWEN_TIME_TMPLCHAR, e); e->character=c; return e; } void GWEN_TimeTmplChar_free(GWEN_TIME_TMPLCHAR *e) { if (e) { free(e->content); GWEN_LIST_FINI(GWEN_TIME_TMPLCHAR, e); GWEN_FREE_OBJECT(e); } } GWEN_TIME_TMPLCHAR *GWEN_Time__findTmplChar(GWEN_TIME_TMPLCHAR_LIST *ll, char c) { GWEN_TIME_TMPLCHAR *e; e=GWEN_TimeTmplChar_List_First(ll); while(e) { if (e->character==c) break; e=GWEN_TimeTmplChar_List_Next(e); } return e; } void GWEN_Time__sampleTmplChars(GWEN_UNUSED const GWEN_TIME *t, const char *tmpl, GWEN_UNUSED GWEN_BUFFER *buf, GWEN_TIME_TMPLCHAR_LIST *ll) { const char *s; s=tmpl; while(*s) { if (strchr("YMDhms", *s)) { GWEN_TIME_TMPLCHAR *e; e=GWEN_Time__findTmplChar(ll, *s); if (!e) { /* new entry, create it */ e=GWEN_TimeTmplChar_new(*s); GWEN_TimeTmplChar_List_Add(e, ll); } assert(e); e->count++; } else { DBG_DEBUG(GWEN_LOGDOMAIN, "Unknown character in template (%02x)", *s); } s++; } } void GWEN_Time__fillTmplChars(const GWEN_TIME *t, GWEN_TIME_TMPLCHAR_LIST *ll, int useUtc) { GWEN_TIME_TMPLCHAR *e; int year, month, day, hour, minute, second; if (useUtc) { GWEN_Time_GetBrokenDownUtcDate(t, &day, &month, &year); GWEN_Time_GetBrokenDownUtcTime(t, &hour, &minute, &second); } else { GWEN_Time_GetBrokenDownDate(t, &day, &month, &year); GWEN_Time_GetBrokenDownTime(t, &hour, &minute, &second); } e=GWEN_TimeTmplChar_List_First(ll); while(e) { int v; char buffer[32]; switch(e->character) { case 'Y': v=year; break; case 'M': v=month+1; break; case 'D': v=day; break; case 'h': v=hour; break; case 'm': v=minute; break; case 's': v=second; break; default: v=-1; break; } if (v==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "Unknown character, should not happen here"); abort(); } buffer[0]=0; snprintf(buffer, sizeof(buffer)-1, "%0*d", GWEN_TIME_TMPL_MAX_COUNT, v); buffer[sizeof(buffer)-1]=0; e->content=strdup(buffer); e->nextChar=strlen(e->content)-(e->count); e=GWEN_TimeTmplChar_List_Next(e); } } int GWEN_Time__toString(const GWEN_TIME *t, const char *tmpl, GWEN_BUFFER *buf, int useUtc) { GWEN_TIME_TMPLCHAR_LIST *ll; const char *s; ll=GWEN_TimeTmplChar_List_new(); GWEN_Time__sampleTmplChars(t, tmpl, buf, ll); GWEN_Time__fillTmplChars(t, ll, useUtc); s=tmpl; while(*s) { if (strchr("YMDhms", *s)) { GWEN_TIME_TMPLCHAR *e; char c; e=GWEN_Time__findTmplChar(ll, *s); assert(e); assert(e->content); if (s[1]=='*') { /* append full string */ GWEN_Buffer_AppendString(buf, e->content); /* skip asterisk */ s++; } else { c=e->content[e->nextChar++]; assert(c); GWEN_Buffer_AppendByte(buf, c); } } else GWEN_Buffer_AppendByte(buf, *s); s++; } GWEN_TimeTmplChar_List_free(ll); return 0; } int GWEN_Time_toString(const GWEN_TIME *t, const char *tmpl, GWEN_BUFFER *buf) { return GWEN_Time__toString(t, tmpl, buf, 0); } int GWEN_Time_toUtcString(const GWEN_TIME *t, const char *tmpl, GWEN_BUFFER *buf) { return GWEN_Time__toString(t, tmpl, buf, 1); } gwenhywfar-4.15.2beta/src/os/libloader.h0000644000175000017500000000646712416477066015111 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Fri Nov 22 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_LIBLOADER_H #define GWENHYWFAR_LIBLOADER_H "$Id" #define GWEN_LIBLOADER_ERROR_TYPE "LIBLOADER" #define GWEN_LIBLOADER_ERROR_COULD_NOT_LOAD 1 #define GWEN_LIBLOADER_ERROR_NOT_OPEN 2 #define GWEN_LIBLOADER_ERROR_COULD_NOT_CLOSE 3 #define GWEN_LIBLOADER_ERROR_COULD_NOT_RESOLVE 4 #define GWEN_LIBLOADER_ERROR_NOT_FOUND 5 #include #include #ifdef __cplusplus extern "C" { #endif /** * @defgroup MOD_LIBLOADER Library Loading Funtions * @ingroup MOD_OS * @short This module allows loading of shared libraries * * This module can be used to load libraries and to lookup symbols inside * them. * @author Martin Preuss */ /*@{*/ typedef struct GWEN_LIBLOADER GWEN_LIBLOADER; GWENHYWFAR_API GWEN_LIBLOADER *GWEN_LibLoader_new(void); /** * Frees the libloader. This does NOT automatically unload the library * loaded using this loader ! But after freeing the loader you * can not resolve more symbols. However, already resolved symbols * remain accessible. */ GWENHYWFAR_API void GWEN_LibLoader_free(GWEN_LIBLOADER *h); GWENHYWFAR_API int GWEN_LibLoader_OpenLibrary(GWEN_LIBLOADER *h, const char *name); GWENHYWFAR_API int GWEN_LibLoader_OpenLibraryWithPath(GWEN_LIBLOADER *h, const char *path, const char *name); GWENHYWFAR_API int GWEN_LibLoader_CloseLibrary(GWEN_LIBLOADER *h); GWENHYWFAR_API int GWEN_LibLoader_Resolve(GWEN_LIBLOADER *h, const char *name, void **p); /*@}*/ #ifdef __cplusplus } #endif #endif /* GWENHYWFAR_LIBLOADER_H */ gwenhywfar-4.15.2beta/src/os/directory_all.c0000644000175000017500000004171212530645242015761 00000000000000/*************************************************************************** begin : Sun Nov 23 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #include #ifdef HAVE_FCNTL_H # include #endif #include #include #include #include #include #ifdef OS_WIN32 # define DIRSEP "\\" #else # define DIRSEP "/" #endif #define DISABLE_DEBUGLOG void *GWEN_Directory_HandlePathElement(const char *entry, void *data, unsigned int flags) { char *p; struct stat st; int exists; int withDrive; GWEN_BUFFER *buf; GWEN_BUFFER *ebuf = 0; withDrive=0; #ifdef OS_WIN32 if (entry && isalpha(*entry)) { int len; /* append backslash if entry only consists of a drive specification */ len=strlen(entry); if ( (len==2) && (entry[1] == ':') ) { ebuf=GWEN_Buffer_new(0, len+2, 0, 1); GWEN_Buffer_AppendString(ebuf, entry); GWEN_Buffer_AppendByte(ebuf, '\\'); withDrive=1; entry=GWEN_Buffer_GetStart(ebuf); } } #endif /* OS_WIN32 */ if (strcasecmp(entry, "..")==0) { DBG_ERROR(GWEN_LOGDOMAIN, "\"..\" detected"); GWEN_Buffer_free(ebuf); return 0; } buf=(GWEN_BUFFER*)data; if (GWEN_Buffer_GetUsedBytes(buf) && !withDrive) { char c; c=GWEN_Buffer_GetStart(buf)[GWEN_Buffer_GetUsedBytes(buf)-1]; #ifdef OS_WIN32 if (c!='\\') GWEN_Buffer_AppendByte(buf, '\\'); #else if (c!='/') GWEN_Buffer_AppendByte(buf, '/'); #endif /* OS_WIN32 */ } GWEN_Buffer_AppendString(buf, entry); /* check for existence of the file/folder */ p=GWEN_Buffer_GetStart(buf); DBG_VERBOUS(GWEN_LOGDOMAIN, "Checking path \"%s\"", p); if (stat(p, &st)) { exists=0; DBG_DEBUG(GWEN_LOGDOMAIN, "stat: %s (%s)", strerror(errno), p); if ((flags & GWEN_PATH_FLAGS_PATHMUSTEXIST) || ((flags & GWEN_PATH_FLAGS_LAST) && (flags & GWEN_PATH_FLAGS_NAMEMUSTEXIST))) { DBG_INFO(GWEN_LOGDOMAIN, "Path \"%s\" does not exist (it should)", p); GWEN_Buffer_free(ebuf); return 0; } } else { DBG_VERBOUS(GWEN_LOGDOMAIN, "Checking for type"); exists=1; if (flags & GWEN_PATH_FLAGS_VARIABLE) { if (!S_ISREG(st.st_mode)) { DBG_INFO(GWEN_LOGDOMAIN, "%s not a regular file", p); GWEN_Buffer_free(ebuf); return 0; } } else { if (!S_ISDIR(st.st_mode)) { DBG_INFO(GWEN_LOGDOMAIN, "%s not a direcory", p); GWEN_Buffer_free(ebuf); return 0; } } if ((flags & GWEN_PATH_FLAGS_PATHMUSTNOTEXIST) || ((flags & GWEN_PATH_FLAGS_LAST) && (flags & GWEN_PATH_FLAGS_NAMEMUSTNOTEXIST))) { DBG_INFO(GWEN_LOGDOMAIN, "Path \"%s\" exists (it should not)", p); GWEN_Buffer_free(ebuf); return 0; } } /* if stat is ok */ if (!exists) { int isPublic; DBG_DEBUG(GWEN_LOGDOMAIN, "Entry \"%s\" does not exist", p); isPublic=( ((flags & GWEN_PATH_FLAGS_LAST) && (flags & GWEN_DIR_FLAGS_PUBLIC_NAME)) || (!(flags & GWEN_PATH_FLAGS_LAST) && (flags & GWEN_DIR_FLAGS_PUBLIC_PATH)) ); if (flags & GWEN_PATH_FLAGS_VARIABLE) { /* create file */ int fd; DBG_DEBUG(GWEN_LOGDOMAIN, "Creating file \"%s\"", p); if (isPublic) fd=open(p, O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR #ifdef S_IRGRP | S_IRGRP #endif #ifdef S_IROTH | S_IROTH #endif ); else fd=open(p, O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR); if (fd==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "open: %s (%s)", strerror(errno), p); GWEN_Buffer_free(ebuf); return 0; } close(fd); DBG_VERBOUS(GWEN_LOGDOMAIN, "Successfully created"); } else { /* create dir */ DBG_VERBOUS(GWEN_LOGDOMAIN, "Creating folder \"%s\"", p); if (isPublic) { if (GWEN_Directory_CreatePublic(p)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not create directory \"%s\"", p); GWEN_Buffer_free(ebuf); return 0; } } else { if (GWEN_Directory_Create(p)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not create directory \"%s\"", p); GWEN_Buffer_free(ebuf); return 0; } } } } /* if exists */ else { DBG_VERBOUS(GWEN_LOGDOMAIN, "Entry \"%s\" exists", p); } DBG_VERBOUS(GWEN_LOGDOMAIN, "Returning this: %s", p); GWEN_Buffer_free(ebuf); return buf; } int GWEN_Directory_GetPath(const char *path, unsigned int flags) { GWEN_BUFFER *buf; void *p; assert(path); buf=GWEN_Buffer_new(0, strlen(path)+10, 0, 1); p=GWEN_Path_Handle(path, buf, flags | GWEN_PATH_FLAGS_CHECKROOT, GWEN_Directory_HandlePathElement); if (!p) { DBG_INFO(GWEN_LOGDOMAIN, "Path so far: \"%s\"", GWEN_Buffer_GetStart(buf)); GWEN_Buffer_free(buf); return -1; } GWEN_Buffer_free(buf); return 0; } int GWEN_Directory_OsifyPath(const char *path, GWEN_BUFFER *pbuf, int transformDriveElement) { const char *p; p=path; /* handle drive letters (only check for normal slashes here) */ #ifdef OS_WIN32 if (transformDriveElement) { if (*p=='/') if (isalpha(p[1])) if (p[2]=='/' || p[2]==0) { GWEN_Buffer_AppendByte(pbuf, p[0]); GWEN_Buffer_AppendByte(pbuf, ':'); p+=2; } } #endif while(*p) { if (*p=='/' || *p=='\\') { while (*p=='/' || *p=='\\') p++; #ifdef OS_WIN32 GWEN_Buffer_AppendByte(pbuf, '\\'); #else GWEN_Buffer_AppendByte(pbuf, '/'); #endif } else { GWEN_Buffer_AppendByte(pbuf, *p); p++; } } return 0; } int GWEN_Directory_FindFileInPaths(const GWEN_STRINGLIST *paths, const char *filePath, GWEN_BUFFER *fbuf) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(paths); while(se) { GWEN_BUFFER *tbuf; FILE *f; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, GWEN_StringListEntry_Data(se)); GWEN_Buffer_AppendString(tbuf, DIRSEP); GWEN_Buffer_AppendString(tbuf, filePath); DBG_VERBOUS(GWEN_LOGDOMAIN, "Trying \"%s\"", GWEN_Buffer_GetStart(tbuf)); f=fopen(GWEN_Buffer_GetStart(tbuf), "r"); if (f) { fclose(f); DBG_DEBUG(GWEN_LOGDOMAIN, "File \"%s\" found in folder \"%s\"", filePath, GWEN_StringListEntry_Data(se)); GWEN_Buffer_AppendBuffer(fbuf, tbuf); GWEN_Buffer_free(tbuf); return 0; } GWEN_Buffer_free(tbuf); se=GWEN_StringListEntry_Next(se); } DBG_INFO(GWEN_LOGDOMAIN, "File \"%s\" not found", filePath); return GWEN_ERROR_NOT_FOUND; } int GWEN_Directory_FindPathForFile(const GWEN_STRINGLIST *paths, const char *filePath, GWEN_BUFFER *fbuf) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(paths); while(se) { GWEN_BUFFER *tbuf; FILE *f; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, GWEN_StringListEntry_Data(se)); GWEN_Buffer_AppendString(tbuf, DIRSEP); GWEN_Buffer_AppendString(tbuf, filePath); DBG_VERBOUS(GWEN_LOGDOMAIN, "Trying \"%s\"", GWEN_Buffer_GetStart(tbuf)); f=fopen(GWEN_Buffer_GetStart(tbuf), "r"); if (f) { fclose(f); DBG_INFO(GWEN_LOGDOMAIN, "File \"%s\" found in folder \"%s\"", filePath, GWEN_StringListEntry_Data(se)); GWEN_Buffer_AppendString(fbuf, GWEN_StringListEntry_Data(se)); GWEN_Buffer_free(tbuf); return 0; } GWEN_Buffer_free(tbuf); se=GWEN_StringListEntry_Next(se); } DBG_INFO(GWEN_LOGDOMAIN, "File \"%s\" not found", filePath); return GWEN_ERROR_NOT_FOUND; } int GWEN_Directory_GetTmpDirectory(char *buffer, unsigned int size) { const char *tmp_dir; assert(buffer); /* Copied from http://svn.gnome.org/viewcvs/glib/trunk/glib/gutils.c */ tmp_dir = getenv ("TMPDIR"); if (!tmp_dir) tmp_dir = getenv ("TMP"); if (!tmp_dir) tmp_dir = getenv ("TEMP"); if (!tmp_dir) { #ifdef OS_WIN32 tmp_dir = "C:\\"; #else tmp_dir = "/tmp"; #endif /* !OS_WIN32 */ } strncpy (buffer, tmp_dir, size); return 0; } int GWEN_Directory_GetAllEntries(const char *folder, GWEN_STRINGLIST *sl, const char *mask) { GWEN_DIRECTORY *d; int rv; char buffer[256]; d=GWEN_Directory_new(); rv=GWEN_Directory_Open(d, folder); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Directory_free(d); return rv; } while(0==GWEN_Directory_Read(d, buffer, sizeof(buffer))) { if (strcmp(buffer, ".")!=0 && strcmp(buffer, "..")!=0 && (mask==NULL || GWEN_Text_ComparePattern(buffer+1, mask, 0)!=-1)) GWEN_StringList_AppendString(sl, buffer, 0, 1); } GWEN_Directory_Close(d); GWEN_Directory_free(d); return 0; } int GWEN_Directory_GetFileEntriesWithType(const char *folder, GWEN_STRINGLIST *sl, const char *mask) { GWEN_DIRECTORY *d; int rv; char buffer[256]; GWEN_BUFFER *pbuf; uint32_t pos; d=GWEN_Directory_new(); rv=GWEN_Directory_Open(d, folder); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Directory_free(d); return rv; } pbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(pbuf, folder); GWEN_Buffer_AppendString(pbuf, GWEN_DIR_SEPARATOR_S); pos=GWEN_Buffer_GetPos(pbuf); while(0==GWEN_Directory_Read(d, buffer+1, sizeof(buffer)-2)) { if (strcmp(buffer, ".")!=0 && strcmp(buffer, "..")!=0 && (mask==NULL || GWEN_Text_ComparePattern(buffer+1, mask, 0)!=-1)) { struct stat st; GWEN_Buffer_AppendString(pbuf, buffer+1); if (stat(GWEN_Buffer_GetStart(pbuf), &st)==0) { if (S_ISREG(st.st_mode)) buffer[0]='f'; else if (S_ISDIR(st.st_mode)) buffer[0]='d'; else buffer[0]='?'; GWEN_StringList_AppendString(sl, buffer, 0, 1); } GWEN_Buffer_Crop(pbuf, 0, pos); } } GWEN_Directory_Close(d); GWEN_Directory_free(d); return 0; } int GWEN_Directory_GetFileEntries(const char *folder, GWEN_STRINGLIST *sl, const char *mask) { GWEN_DIRECTORY *d; int rv; char buffer[256]; GWEN_BUFFER *pbuf; uint32_t pos; d=GWEN_Directory_new(); rv=GWEN_Directory_Open(d, folder); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Directory_free(d); return rv; } pbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(pbuf, folder); GWEN_Buffer_AppendString(pbuf, GWEN_DIR_SEPARATOR_S); pos=GWEN_Buffer_GetPos(pbuf); while(0==GWEN_Directory_Read(d, buffer, sizeof(buffer))) { if (strcmp(buffer, ".")!=0 && strcmp(buffer, "..")!=0 && (mask==NULL || GWEN_Text_ComparePattern(buffer+1, mask, 0)!=-1)) { struct stat st; GWEN_Buffer_AppendString(pbuf, buffer); if (stat(GWEN_Buffer_GetStart(pbuf), &st)==0) { if (S_ISREG(st.st_mode)) GWEN_StringList_AppendString(sl, buffer, 0, 1); } GWEN_Buffer_Crop(pbuf, 0, pos); } } GWEN_Buffer_free(pbuf); GWEN_Directory_Close(d); GWEN_Directory_free(d); return 0; } int GWEN_Directory_GetDirEntries(const char *folder, GWEN_STRINGLIST *sl, const char *mask) { GWEN_DIRECTORY *d; int rv; char buffer[256]; GWEN_BUFFER *pbuf; uint32_t pos; d=GWEN_Directory_new(); rv=GWEN_Directory_Open(d, folder); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Directory_free(d); return rv; } pbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(pbuf, folder); GWEN_Buffer_AppendString(pbuf, GWEN_DIR_SEPARATOR_S); pos=GWEN_Buffer_GetPos(pbuf); while(0==GWEN_Directory_Read(d, buffer, sizeof(buffer))) { if (strcmp(buffer, ".")!=0 && strcmp(buffer, "..")!=0 && (mask==NULL || GWEN_Text_ComparePattern(buffer+1, mask, 0)!=-1)) { struct stat st; GWEN_Buffer_AppendString(pbuf, buffer); if (stat(GWEN_Buffer_GetStart(pbuf), &st)==0) { if (S_ISDIR(st.st_mode)) GWEN_StringList_AppendString(sl, buffer, 0, 1); } GWEN_Buffer_Crop(pbuf, 0, pos); } } GWEN_Directory_Close(d); GWEN_Directory_free(d); return 0; } int GWEN_Directory_GetMatchingFilesRecursively(const char *folder, GWEN_STRINGLIST *sl, const char *mask) { GWEN_DIRECTORY *d; int rv; char buffer[256]; GWEN_BUFFER *pbuf; uint32_t pos; GWEN_STRINGLIST *folderList; folderList=GWEN_StringList_new(); d=GWEN_Directory_new(); rv=GWEN_Directory_Open(d, folder); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Directory_free(d); GWEN_StringList_free(folderList); return rv; } pbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(pbuf, folder); GWEN_Buffer_AppendString(pbuf, GWEN_DIR_SEPARATOR_S); pos=GWEN_Buffer_GetPos(pbuf); while(0==GWEN_Directory_Read(d, buffer, sizeof(buffer)-2)) { if (strcmp(buffer, ".")!=0 && strcmp(buffer, "..")!=0) { struct stat st; GWEN_Buffer_AppendString(pbuf, buffer); if (stat(GWEN_Buffer_GetStart(pbuf), &st)==0) { if (S_ISDIR(st.st_mode)) /* add folders to the folder list */ GWEN_StringList_AppendString(folderList, GWEN_Buffer_GetStart(pbuf), 0, 0); else { if (mask==NULL || GWEN_Text_ComparePattern(buffer, mask, 0)!=-1) /* don't check for duplicates here (i.e. last param =0) */ GWEN_StringList_AppendString(sl, GWEN_Buffer_GetStart(pbuf), 0, 0); } } GWEN_Buffer_Crop(pbuf, 0, pos); } } GWEN_Directory_Close(d); GWEN_Directory_free(d); if (GWEN_StringList_Count(folderList)) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(folderList); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) GWEN_Directory_GetMatchingFilesRecursively(s, sl, mask); se=GWEN_StringListEntry_Next(se); } } GWEN_StringList_free(folderList); GWEN_Buffer_free(pbuf); return 0; } int GWEN_Directory_GetAbsoluteFolderPath(const char *folder, GWEN_BUFFER *tbuf) { char savedPwd[300]; char dataPwd[300]; /* get current working dir */ if (getcwd(savedPwd, sizeof(savedPwd)-1)==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "getcwd(): %s", strerror(errno)); return GWEN_ERROR_IO; } if (chdir(folder)) { DBG_ERROR(GWEN_LOGDOMAIN, "chdir(%s): %s", folder, strerror(errno)); return GWEN_ERROR_IO; } /* get new current working dir */ if (getcwd(dataPwd, sizeof(dataPwd)-1)==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "getcwd(): %s", strerror(errno)); return GWEN_ERROR_IO; } dataPwd[sizeof(dataPwd)-1]=0; /* change back to previous pwd */ if (chdir(savedPwd)) { DBG_ERROR(GWEN_LOGDOMAIN, "chdir(%s): %s", folder, strerror(errno)); return GWEN_ERROR_IO; } GWEN_Buffer_AppendString(tbuf, dataPwd); return 0; } gwenhywfar-4.15.2beta/src/os/gwentime_p.h0000644000175000017500000000576312416477066015310 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Wed Mar 24 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_TIME_P_H #define GWEN_TIME_P_H #include "gwentime_l.h" #define GWEN_TIME_TMPL_MAX_COUNT 8 struct GWEN_TIME { uint32_t secs; uint32_t msecs; }; uint32_t GWEN_Time__mktimeUtc(int year, int month, int day, int hour, int min, int sec); typedef struct GWEN_TIME_TMPLCHAR GWEN_TIME_TMPLCHAR; GWEN_LIST_FUNCTION_DEFS(GWEN_TIME_TMPLCHAR, GWEN_TimeTmplChar) struct GWEN_TIME_TMPLCHAR { GWEN_LIST_ELEMENT(GWEN_TIME_TMPLCHAR) char character; int count; int nextChar; char *content; }; static GWEN_TIME_TMPLCHAR *GWEN_TimeTmplChar_new(char c); static void GWEN_TimeTmplChar_free(GWEN_TIME_TMPLCHAR *e); static GWEN_TIME_TMPLCHAR *GWEN_Time__findTmplChar(GWEN_TIME_TMPLCHAR_LIST *ll, char c); static void GWEN_Time__sampleTmplChars(const GWEN_TIME *t, const char *tmpl, GWEN_BUFFER *buf, GWEN_TIME_TMPLCHAR_LIST *ll); static void GWEN_Time__fillTmplChars(const GWEN_TIME *t, GWEN_TIME_TMPLCHAR_LIST *ll, int useUtc); static int GWEN_Time__toString(const GWEN_TIME *t, const char *tmpl, GWEN_BUFFER *buf, int useUtc); #endif gwenhywfar-4.15.2beta/src/os/gwendate.c0000644000175000017500000004113712416477066014736 00000000000000/*************************************************************************** begin : Tue Jul 07 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwendate_p.h" #include "i18n_l.h" #include #include #include #include static const uint8_t daysInMonth[12]= { 31,28,31,30,31,30,31,31,30,31,30,31 }; GWEN_DATE *GWEN_Date_fromGregorian(int y, int m, int d) { GWEN_DATE *gd; if (m<1 || m>12 || d<1 || d>31) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad date format"); return NULL; } GWEN_NEW_OBJECT(GWEN_DATE, gd); gd->year=y; gd->month=m; gd->day=d; gd->julian=(1461*(y+4800+(m-14)/12))/4+ (367*(m-2-12*((m-14)/12)))/12- (3*((y+4900+(m-14)/12)/100))/4+ d-32075; snprintf(gd->asString, sizeof(gd->asString)-1, "%04d%02d%02d", gd->year, gd->month, gd->day); gd->asString[sizeof(gd->asString)-1]=0; return gd; } GWEN_DATE *GWEN_Date_fromJulian(int julian) { GWEN_DATE *gd; int l, n, i, j; GWEN_NEW_OBJECT(GWEN_DATE, gd); l=julian+68569; n=(4*l)/146097; l=l-(146097*n+3)/4; i=(4000*(l+1))/1461001; l=l-(1461*i)/4+31; j=(80*l)/2447; gd->day=l-(2447*j)/80; l=j/11; gd->month=j+2-(12*l); gd->year=100*(n-49)+i+l; gd->julian=julian; snprintf(gd->asString, sizeof(gd->asString)-1, "%04d%02d%02d", gd->year, gd->month, gd->day); gd->asString[sizeof(gd->asString)-1]=0; return gd; } GWEN_DATE *GWEN_Date_fromLocalTime(time_t t) { struct tm *ltm; ltm=localtime(&t); if (ltm) { GWEN_DATE *gd; gd=GWEN_Date_fromGregorian(ltm->tm_year+1900, ltm->tm_mon+1, ltm->tm_mday); return gd; } return NULL; } GWEN_DATE *GWEN_Date_fromGmTime(time_t t) { struct tm *ltm; ltm=gmtime(&t); if (ltm) { GWEN_DATE *gd; gd=GWEN_Date_fromGregorian(ltm->tm_year+1900, ltm->tm_mon+1, ltm->tm_mday); return gd; } return NULL; } GWEN_DATE *GWEN_Date_CurrentDate(void) { time_t l; time(&l); return GWEN_Date_fromLocalTime(l); } GWEN_DATE *GWEN_Date_dup(const GWEN_DATE *ogd) { assert(ogd); return GWEN_Date_fromGregorian(ogd->year, ogd->month, ogd->day); } GWEN_DATE *GWEN_Date_fromString(const char *s) { int y, m, d; if (3==sscanf(s, "%04d%02d%02d", &y, &m, &d)) { return GWEN_Date_fromGregorian(y, m, d); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Bad date [%s]", s); return NULL; } } void GWEN_Date_free(GWEN_DATE *gd) { if (gd) { GWEN_FREE_OBJECT(gd); } } int GWEN_Date_IsLeapYear(int y) { return ((y%4==0) && (y%100!=0)) || (y%400==0); } int GWEN_Date_DaysInMonth(const GWEN_DATE *gd) { assert(gd); if (gd->month==2 && ((((gd->year%4)==0) && ((gd->year)%100!=0)) || ((gd->year)%400==0))) /* February in a leap year */ return 29; else return daysInMonth[gd->month-1]; } int GWEN_Date_DaysInYear(const GWEN_DATE *gd) { GWEN_DATE *gd11; int result; assert(gd); gd11=GWEN_Date_fromGregorian(gd->year, 1, 1); result=(gd->julian)-(gd11->julian); GWEN_Date_free(gd11); return result; } int GWEN_Date_GetYear(const GWEN_DATE *gd) { assert(gd); return gd->year; } int GWEN_Date_GetMonth(const GWEN_DATE *gd) { assert(gd); return gd->month; } int GWEN_Date_GetDay(const GWEN_DATE *gd) { assert(gd); return gd->day; } int GWEN_Date_GetJulian(const GWEN_DATE *gd) { assert(gd); return gd->julian; } int GWEN_Date_WeekDay(const GWEN_DATE *gd) { assert(gd); return (gd->julian+1)%7; /* 0=Sunday */ } const char *GWEN_Date_GetString(const GWEN_DATE *gd) { assert(gd); return gd->asString; } int GWEN_Date_Compare(const GWEN_DATE *gd1, const GWEN_DATE *gd0) { if (gd0 && gd1) { if (gd1->julian==gd0->julian) return 0; else if (gd1->julian>gd0->julian) return 1; else return -1; } else if (gd0) return 1; else if (gd1) return -1; else return 0; } int GWEN_Date_Diff(const GWEN_DATE *gd1, const GWEN_DATE *gd0) { assert(gd1); assert(gd0); return gd1->julian-gd0->julian; } GWEN_DATE *GWEN_Date_fromTime(const GWEN_TIME *ti) { GWEN_BUFFER *tbuf; GWEN_DATE *gd; tbuf=GWEN_Buffer_new(0, 32, 0, 1); GWEN_Time_toString(ti, "YYYYMMDD", tbuf); gd=GWEN_Date_fromString(GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return gd; } GWEN_DATE *GWEN_Date_fromStringWithTemplate(const char *s, const char *tmpl) { int year, month, day; const char *p; const char *t; GWEN_DATE *gwt; assert(s); assert(tmpl); year=month=day=0; p=s; t=tmpl; while(*t && *p) { int i; if (*t=='*') { t++; if (!*t) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad pattern: Must not end with \"*\""); return 0; } i=0; while(*p) { if (!isdigit((int)*p)) break; if (*p==*t) break; i*=10; i+=(*p)-'0'; p++; } /* while */ } else { if (isdigit((int)*p)) i=(*p)-'0'; else i=-1; p++; } if (i==-1 && strchr("YMD", *t)!=NULL) { DBG_INFO(GWEN_LOGDOMAIN, "No more digits at [%s], continuing", t); p--; } else { switch(*t) { case 'Y': if (i==-1) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return 0; } year*=10; year+=i; break; case 'M': if (i==-1) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return 0; } month*=10; month+=i; break; case 'D': if (i==-1) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return 0; } day*=10; day+=i; break; default: DBG_VERBOUS(GWEN_LOGDOMAIN, "Unknown character in template, will skip in both strings"); break; } } t++; } /* while */ if (year<100) year+=2000; DBG_DEBUG(GWEN_LOGDOMAIN, "Got this date/time: %04d/%02d/%02d", year, month, day); /* get time in local time */ gwt=GWEN_Date_fromGregorian(year, month, day); if (!gwt) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return 0; } return gwt; } GWEN_LIST_FUNCTIONS(GWEN_DATE_TMPLCHAR, GWEN_DateTmplChar) GWEN_DATE_TMPLCHAR *GWEN_DateTmplChar_new(char c) { GWEN_DATE_TMPLCHAR *e; GWEN_NEW_OBJECT(GWEN_DATE_TMPLCHAR, e); GWEN_LIST_INIT(GWEN_DATE_TMPLCHAR, e); e->character=c; switch(c) { case 'Y': e->maxCount=4; break; case 'M': e->maxCount=2; break; case 'D': e->maxCount=2; break; case 'W': e->maxCount=1; break; case 'w': default: e->maxCount=GWEN_DATE_TMPL_MAX_COUNT; break; } return e; } void GWEN_DateTmplChar_free(GWEN_DATE_TMPLCHAR *e) { if (e) { free(e->content); GWEN_LIST_FINI(GWEN_DATE_TMPLCHAR, e); GWEN_FREE_OBJECT(e); } } GWEN_DATE_TMPLCHAR *GWEN_Date__findTmplChar(GWEN_DATE_TMPLCHAR_LIST *ll, char c) { GWEN_DATE_TMPLCHAR *e; e=GWEN_DateTmplChar_List_First(ll); while(e) { if (e->character==c) break; e=GWEN_DateTmplChar_List_Next(e); } return e; } void GWEN_Date__sampleTmplChars(GWEN_UNUSED const GWEN_DATE *t, const char *tmpl, GWEN_UNUSED GWEN_BUFFER *buf, GWEN_DATE_TMPLCHAR_LIST *ll) { const char *s; s=tmpl; while(*s) { if (strchr("YMDWw", *s)) { GWEN_DATE_TMPLCHAR *e; e=GWEN_Date__findTmplChar(ll, *s); if (!e) { /* new entry, create it */ e=GWEN_DateTmplChar_new(*s); GWEN_DateTmplChar_List_Add(e, ll); } assert(e); e->count++; } else { DBG_DEBUG(GWEN_LOGDOMAIN, "Unknown character in template (%02x)", *s); } s++; } } void GWEN_Date__fillTmplChars(const GWEN_DATE *t, GWEN_DATE_TMPLCHAR_LIST *ll) { GWEN_DATE_TMPLCHAR *e; e=GWEN_DateTmplChar_List_First(ll); while(e) { int v; if (e->character=='w') { const char *s=NULL; switch(GWEN_Date_WeekDay(t)) { case 0: s=I18N("Sunday"); break; case 1: s=I18N("Monday"); break; case 2: s=I18N("Tuesday"); break; case 3: s=I18N("Wednesday"); break; case 4: s=I18N("Thursday"); break; case 5: s=I18N("Friday"); break; case 6: s=I18N("Saturday"); break; } assert(s); e->content=strdup(s); e->nextChar=0; } else { char buffer[32]; int clen; switch(e->character) { case 'Y': v=t->year; break; case 'M': v=t->month; break; case 'D': v=t->day; break; case 'W': v=GWEN_Date_WeekDay(t); break; default: v=-1; break; } if (v==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "Unknown character, should not happen here"); abort(); } buffer[0]=0; snprintf(buffer, sizeof(buffer)-1, "%0*d", e->maxCount, v); buffer[sizeof(buffer)-1]=0; e->content=strdup(buffer); /* adjust counter if there are more than maxCount template chars */ clen=strlen(e->content); if (e->count>clen) e->count=clen; e->nextChar=clen-(e->count); } e=GWEN_DateTmplChar_List_Next(e); } } int GWEN_Date_toStringWithTemplate(const GWEN_DATE *t, const char *tmpl, GWEN_BUFFER *buf) { GWEN_DATE_TMPLCHAR_LIST *ll; const char *s; ll=GWEN_DateTmplChar_List_new(); GWEN_Date__sampleTmplChars(t, tmpl, buf, ll); GWEN_Date__fillTmplChars(t, ll); s=tmpl; while(*s) { if (strchr("YMDWw", *s)) { GWEN_DATE_TMPLCHAR *e; char c; e=GWEN_Date__findTmplChar(ll, *s); assert(e); assert(e->content); if (s[1]=='*') { /* append full string */ GWEN_Buffer_AppendString(buf, e->content); /* skip asterisk */ s++; } else { c=e->content[e->nextChar]; if (c!=0) { GWEN_Buffer_AppendByte(buf, c); e->nextChar++; } } } else GWEN_Buffer_AppendByte(buf, *s); s++; } GWEN_DateTmplChar_List_free(ll); return 0; } int GWEN_Date_toDb(const GWEN_DATE *dt, GWEN_DB_NODE *db) { const char *s; assert(dt); s=GWEN_Date_GetString(dt); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "dateString", s); return 0; } GWEN_DATE *GWEN_Date_fromDb(GWEN_DB_NODE *db) { const char *s; s=GWEN_DB_GetCharValue(db, "dateString", 0, NULL); if (s && *s) { GWEN_DATE *dt; dt=GWEN_Date_fromString(s); if (dt==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Invalid date [%s]", s); return NULL; } return dt; } else { DBG_VERBOUS(GWEN_LOGDOMAIN, "no or empty date"); return NULL; } } GWEN_DATE *GWEN_Date_GetThisMonthStart(const GWEN_DATE *dt) { return GWEN_Date_fromGregorian(GWEN_Date_GetYear(dt), GWEN_Date_GetMonth(dt), 1); } GWEN_DATE *GWEN_Date_GetThisMonthEnd(const GWEN_DATE *dt) { int day; switch(GWEN_Date_GetMonth(dt)) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: day=31; break; case 2: if (GWEN_Date_IsLeapYear(GWEN_Date_GetYear(dt))) day=29; else day=28; break; case 4: case 6: case 9: case 11: day=30; break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Invalid month (%d)", GWEN_Date_GetMonth(dt)); abort(); break; } return GWEN_Date_fromGregorian(GWEN_Date_GetYear(dt), GWEN_Date_GetMonth(dt), day); } GWEN_DATE *GWEN_Date_GetThisQuarterYearStart(const GWEN_DATE *dt) { int m; m=GWEN_Date_GetMonth(dt)>>2; switch(m) { case 0: return GWEN_Date_fromGregorian(GWEN_Date_GetYear(dt), 1, 1); case 1: return GWEN_Date_fromGregorian(GWEN_Date_GetYear(dt), 4, 1); case 2: return GWEN_Date_fromGregorian(GWEN_Date_GetYear(dt), 7, 1); case 3: return GWEN_Date_fromGregorian(GWEN_Date_GetYear(dt), 10, 1); } return NULL; } GWEN_DATE *GWEN_Date_GetThisQuarterYearEnd(const GWEN_DATE *dt) { int m; m=GWEN_Date_GetMonth(dt)>>2; switch(m) { case 0: return GWEN_Date_fromGregorian(GWEN_Date_GetYear(dt), 3, 31); case 1: return GWEN_Date_fromGregorian(GWEN_Date_GetYear(dt), 6, 30); case 2: return GWEN_Date_fromGregorian(GWEN_Date_GetYear(dt), 9, 30); case 3: return GWEN_Date_fromGregorian(GWEN_Date_GetYear(dt), 12, 31); } return NULL; } GWEN_DATE *GWEN_Date_GetThisHalfYearStart(const GWEN_DATE *dt) { if (GWEN_Date_GetMonth(dt)<7) return GWEN_Date_fromGregorian(GWEN_Date_GetYear(dt), 1, 1); else return GWEN_Date_fromGregorian(GWEN_Date_GetYear(dt), 7, 1); } GWEN_DATE *GWEN_Date_GetThisHalfYearEnd(const GWEN_DATE *dt) { if (GWEN_Date_GetMonth(dt)<7) return GWEN_Date_fromGregorian(GWEN_Date_GetYear(dt), 6, 30); else return GWEN_Date_fromGregorian(GWEN_Date_GetYear(dt), 12, 31); } GWEN_DATE *GWEN_Date_GetThisYearStart(const GWEN_DATE *dt) { return GWEN_Date_fromGregorian(GWEN_Date_GetYear(dt), 1, 1); } GWEN_DATE *GWEN_Date_GetThisYearEnd(const GWEN_DATE *dt) { return GWEN_Date_fromGregorian(GWEN_Date_GetYear(dt), 12, 31); } GWEN_DATE *GWEN_Date_GetLastMonthStart(const GWEN_DATE *dt) { GWEN_DATE *tmpDate; GWEN_DATE *result; int j; tmpDate=GWEN_Date_fromGregorian(GWEN_Date_GetYear(dt), GWEN_Date_GetMonth(dt), 1); j=GWEN_Date_GetJulian(tmpDate)-1; GWEN_Date_free(tmpDate); tmpDate=GWEN_Date_fromJulian(j); result=GWEN_Date_fromGregorian(GWEN_Date_GetYear(tmpDate), GWEN_Date_GetMonth(tmpDate), 1); GWEN_Date_free(tmpDate); return result; } GWEN_DATE *GWEN_Date_GetLastMonthEnd(const GWEN_DATE *dt) { GWEN_DATE *tmpDate; int j; tmpDate=GWEN_Date_fromGregorian(GWEN_Date_GetYear(dt), GWEN_Date_GetMonth(dt), 1); j=GWEN_Date_GetJulian(tmpDate)-1; GWEN_Date_free(tmpDate); return GWEN_Date_fromJulian(j); } GWEN_DATE *GWEN_Date_GetLastQuarterYearStart(const GWEN_DATE *dt) { GWEN_DATE *tmpDate; GWEN_DATE *result; tmpDate=GWEN_Date_GetLastQuarterYearEnd(dt); result=GWEN_Date_GetThisQuarterYearStart(tmpDate); GWEN_Date_free(tmpDate); return result; } GWEN_DATE *GWEN_Date_GetLastQuarterYearEnd(const GWEN_DATE *dt) { GWEN_DATE *tmpDate; int j; tmpDate=GWEN_Date_GetThisQuarterYearStart(dt); j=GWEN_Date_GetJulian(tmpDate)-1; GWEN_Date_free(tmpDate); return GWEN_Date_fromJulian(j); } GWEN_DATE *GWEN_Date_GetLastHalfYearStart(const GWEN_DATE *dt) { GWEN_DATE *tmpDate; GWEN_DATE *result; tmpDate=GWEN_Date_GetLastHalfYearEnd(dt); result=GWEN_Date_GetThisHalfYearStart(tmpDate); GWEN_Date_free(tmpDate); return result; } GWEN_DATE *GWEN_Date_GetLastHalfYearEnd(const GWEN_DATE *dt) { GWEN_DATE *tmpDate; int j; tmpDate=GWEN_Date_GetThisHalfYearStart(dt); j=GWEN_Date_GetJulian(tmpDate)-1; GWEN_Date_free(tmpDate); return GWEN_Date_fromJulian(j); } GWEN_DATE *GWEN_Date_GetLastYearStart(const GWEN_DATE *dt) { GWEN_DATE *tmpDate; GWEN_DATE *result; tmpDate=GWEN_Date_GetLastYearEnd(dt); result=GWEN_Date_GetThisYearStart(tmpDate); GWEN_Date_free(tmpDate); return result; } GWEN_DATE *GWEN_Date_GetLastYearEnd(const GWEN_DATE *dt) { GWEN_DATE *tmpDate; int j; tmpDate=GWEN_Date_GetThisYearStart(dt); j=GWEN_Date_GetJulian(tmpDate)-1; GWEN_Date_free(tmpDate); return GWEN_Date_fromJulian(j); } gwenhywfar-4.15.2beta/src/os/posix/0000755000175000017500000000000012643267235014205 500000000000000gwenhywfar-4.15.2beta/src/os/posix/mutex.c0000644000175000017500000000466412416477066015450 00000000000000/*************************************************************************** begin : Mon Jul 14 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "mutex_p.h" #include #include #include GWEN_MUTEX *GWEN_Mutex_new(void) { GWEN_MUTEX *mtx; GWEN_NEW_OBJECT(GWEN_MUTEX, mtx); pthread_mutex_init(&(mtx->mutex), NULL); return mtx; } void GWEN_Mutex_free(GWEN_UNUSED GWEN_MUTEX *mtx) { if (mtx) { pthread_mutex_destroy(&(mtx->mutex)); } } int GWEN_Mutex_Lock(GWEN_MUTEX *mtx) { int rv; rv=pthread_mutex_lock(&(mtx->mutex)); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "pthread_mutex_lock: %s", strerror(rv)); return GWEN_ERROR_IO; } return 0; } int GWEN_Mutex_Unlock(GWEN_MUTEX *mtx) { int rv; rv=pthread_mutex_unlock(&(mtx->mutex)); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "pthread_mutex_unlock: %s", strerror(rv)); return GWEN_ERROR_IO; } return 0; } gwenhywfar-4.15.2beta/src/os/posix/libloader_p.h0000644000175000017500000000372312364015347016552 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Fri Nov 22 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_LIBLOADER_P_H #define GWENHYWFAR_LIBLOADER_P_H "$Id" #include #include #include struct GWEN_LIBLOADER { void *handle; }; int GWEN_LibLoader_LoadLibrary(GWEN_LIBLOADER *h, const char *name); #endif /* GWENHYWFAR_LIBLOADER_P_H */ gwenhywfar-4.15.2beta/src/os/posix/init.c0000644000175000017500000000443512364015347015235 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Wed Mar 27 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include #include #include static void GWEN_LibInit(void) __attribute__((constructor)); static void GWEN_LibFini(void) __attribute__((destructor)); void GWEN_LibInit(void) { int err; err=GWEN_Init(); if (err) { fprintf(stderr, "Could not initialize Gwenhywfar, aborting\n"); abort(); } /* fprintf(stderr, "Gwenhywfar initialized.\n"); */ } void GWEN_LibFini(void) { int err; err=GWEN_Fini_Forced(); if (err) { fprintf(stderr, "Could not deinitialize Gwenhywfar\n"); } /* fprintf(stderr, "Gwenhywfar deinitialized.\n"); */ } gwenhywfar-4.15.2beta/src/os/posix/process_p.h0000644000175000017500000000432312364015347016270 00000000000000/*************************************************************************** begin : Sat Dec 27 2003 copyright : (C) 2003-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_PROCESS_P_H #define GWENHYWFAR_PROCESS_P_H "$Id" #include #include #include struct GWEN_PROCESS { GWEN_PROCESS *next; unsigned int usage; pid_t pid; int result; unsigned int flags; int filesStdin[2]; int filesStdout[2]; int filesStderr[2]; GWEN_PROCESS_STATE state; uint32_t pflags; GWEN_SYNCIO *stdIn; GWEN_SYNCIO *stdOut; GWEN_SYNCIO *stdErr; }; static GWEN_PROCESS_STATE GWEN_Process_GetState(GWEN_PROCESS *pr, int w); static GWEN_PROCESS_STATE GWEN_Process_MakeState(GWEN_PROCESS *pr, int status); static int GWEN_Process_Redirect(GWEN_PROCESS *pr); #endif gwenhywfar-4.15.2beta/src/os/posix/syncio_file_p.h0000644000175000017500000000447012416477066017130 00000000000000/*************************************************************************** begin : Tue Apr 27 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_SYNCIO_FILE_P_H #define GWENHYWFAR_SYNCIO_FILE_P_H #include "syncio_file_l.h" typedef struct GWEN_SYNCIO_FILE GWEN_SYNCIO_FILE; struct GWEN_SYNCIO_FILE { char *path; GWEN_SYNCIO_FILE_CREATIONMODE creationMode; int fd; }; static void GWENHYWFAR_CB GWEN_SyncIo_File_FreeData(void *bp, void *p); static GWEN_SYNCIO *GWEN_SyncIo_File_fromStdHandle(int fd, const char *hname); static int GWENHYWFAR_CB GWEN_SyncIo_File_Connect(GWEN_SYNCIO *sio); static int GWENHYWFAR_CB GWEN_SyncIo_File_Disconnect(GWEN_SYNCIO *sio); static int GWENHYWFAR_CB GWEN_SyncIo_File_Read(GWEN_SYNCIO *sio, uint8_t *buffer, uint32_t size); static int GWENHYWFAR_CB GWEN_SyncIo_File_Write(GWEN_SYNCIO *sio, const uint8_t *buffer, uint32_t size); #endif gwenhywfar-4.15.2beta/src/os/posix/inetaddr.c0000644000175000017500000002456012416477066016075 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Tue Oct 02 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "inetaddr_p.h" #include #include #include #include #include #include #include #include "gwenhywfar/debug.h" /* #define MEMTRACE */ /* needed for Solaris */ #ifndef SUN_LEN # define SUN_LEN(ptr) ((size_t) (((struct sockaddr_un *) 0)->sun_path) \ + strlen ((ptr)->sun_path)) #endif #ifdef MEMTRACE static int GWEN_INETADDR__Counter=0; #endif uint32_t GWEN_InetAddr_GetCapabilities(void) { return GWEN_INETADDR_CAPS_AF_TCP | GWEN_INETADDR_CAPS_AF_UNIX; } int GWEN_InetAddr_ModuleInit(void) { return 0; } int GWEN_InetAddr_ModuleFini(void) { return 0; } GWEN_INETADDRESS *GWEN_InetAddr_new(GWEN_AddressFamily af) { GWEN_INETADDRESS *ia; GWEN_NEW_OBJECT(GWEN_INETADDRESS, ia); ia->af=af; switch(ia->af) { case GWEN_AddressFamilyIP: { struct sockaddr_in *aptr; ia->address=(struct sockaddr*)malloc(sizeof(struct sockaddr_in)); assert(ia->address); aptr=(struct sockaddr_in*)(ia->address); ia->size=sizeof(struct sockaddr_in); memset(ia->address,0,ia->size); #ifdef PF_INET aptr->sin_family=PF_INET; #else aptr->sin_family=AF_INET; #endif break; } case GWEN_AddressFamilyUnix: { struct sockaddr_un *aptr; ia->address=(struct sockaddr*)malloc(sizeof(struct sockaddr_un)); assert(ia->address); aptr=(struct sockaddr_un*)(ia->address); #if defined(PF_UNIX) aptr->sun_family=PF_UNIX; #elif defined (AF_UNIX) aptr->sun_family=AF_UNIX; #else DBG_ERROR(GWEN_LOGDOMAIN, "No unix domain sockets available for this system"); GWEN_InetAddr_free(ia); return 0; #endif aptr->sun_path[0]=0; ia->size=sizeof(struct sockaddr_un); memset(ia->address,0,ia->size); break; } default: DBG_INFO(GWEN_LOGDOMAIN, "Unknown address family (%d)",af); assert(0); } /* switch */ #ifdef MEMTRACE GWEN_INETADDR__Counter++; DBG_INFO(GWEN_LOGDOMAIN, "InetAddr created, now %d",GWEN_INETADDR__Counter); #endif return ia; } GWEN_INETADDRESS *GWEN_InetAddr_dup(const GWEN_INETADDRESS *oa) { GWEN_INETADDRESS *ia; GWEN_NEW_OBJECT(GWEN_INETADDRESS, ia); ia->af=oa->af; ia->size=oa->size; //ia->address=(struct sockaddr *)malloc(sizeof(struct sockaddr)); if (oa->size) { ia->address=(struct sockaddr *)malloc(oa->size); assert(ia->address); memmove(ia->address, oa->address, oa->size); } return ia; } void GWEN_InetAddr_free(GWEN_INETADDRESS *ia) { if (ia) { #ifdef MEMTRACE GWEN_INETADDR__Counter--; DBG_INFO(GWEN_LOGDOMAIN, "Free InetAddr, makes %d",GWEN_INETADDR__Counter); #endif free(ia->address); GWEN_FREE_OBJECT(ia); } } int GWEN_InetAddr_SetAddress(GWEN_INETADDRESS *ia, const char *addr) { assert(ia); switch (ia->af) { case GWEN_AddressFamilyIP: { struct sockaddr_in *aptr; aptr=(struct sockaddr_in*)(ia->address); /* reset */ #ifdef PF_INET aptr->sin_family=PF_INET; #elif defined (AF_INET) aptr->sun_family=AF_INET; #else DBG_ERROR(GWEN_LOGDOMAIN, "No TCP sockets available for this system"); return GWEN_ERROR_BAD_ADDRESS_FAMILY; #endif aptr->sin_addr.s_addr=0; if (addr) { /* ok, address to be set */ if (!inet_aton(addr,&aptr->sin_addr)) /* bad address, so maybe it rather is a name */ return GWEN_ERROR_BAD_ADDRESS; } break; } case GWEN_AddressFamilyUnix: { struct sockaddr_un *aptr; aptr=(struct sockaddr_un*)(ia->address); #ifdef PF_UNIX aptr->sun_family=PF_UNIX; #elif defined (AF_UNIX) aptr->sun_family=AF_UNIX; #else DBG_ERROR(GWEN_LOGDOMAIN, "No unix domain sockets available for this system"); return GWEN_ERROR_BAD_ADDRESS_FAMILY; #endif memset(aptr->sun_path, 0, sizeof(aptr->sun_path)); if (addr) { /* ok, address to be set */ if ((strlen(addr)+1)>sizeof(aptr->sun_path)) { /* bad address */ DBG_INFO(GWEN_LOGDOMAIN, "Path too long (%d>%d)", (int)(strlen(addr)+1),(int)(sizeof(aptr->sun_path))); return GWEN_ERROR_BAD_ADDRESS; } strcpy(aptr->sun_path, addr); ia->size=SUN_LEN(aptr); } break; } default: return GWEN_ERROR_BAD_ADDRESS_FAMILY; } /* switch */ return 0; } /* internal function */ int GWEN_InetAddr_TranslateHError(int herr) { int rv; switch(herr) { case HOST_NOT_FOUND: rv=GWEN_ERROR_HOST_NOT_FOUND; break; #ifdef NO_ADDRESS case NO_ADDRESS: rv=GWEN_ERROR_NO_ADDRESS; break; #endif case NO_RECOVERY: rv=GWEN_ERROR_NO_RECOVERY; break; case TRY_AGAIN: rv=GWEN_ERROR_TRY_AGAIN; break; default: rv=GWEN_ERROR_UNKNOWN_DNS_ERROR; break; } /* switch */ return rv; } int GWEN_InetAddr_SetName(GWEN_INETADDRESS *ia, const char *name) { struct hostent *he; assert(ia); switch (ia->af) { case GWEN_AddressFamilyIP: { struct sockaddr_in *aptr; aptr=(struct sockaddr_in*)(ia->address); /* try to resolve name */ he=gethostbyname(name); if (!he) return GWEN_InetAddr_TranslateHError(h_errno); /* name resolved, store address */ memcpy(&(aptr->sin_addr), he->h_addr_list[0], sizeof(struct in_addr)); break; } case GWEN_AddressFamilyUnix: { struct sockaddr_un *aptr; aptr=(struct sockaddr_un*)(ia->address); #ifdef PF_UNIX aptr->sun_family=PF_UNIX; #elif defined (AF_UNIX) aptr->sun_family=AF_UNIX; #else DBG_ERROR(GWEN_LOGDOMAIN, "No unix domain sockets available for this system"); return GWEN_ERROR_BAD_ADDRESS_FAMILY; #endif aptr->sun_path[0]=0; if (name) { /* ok, address to be set */ if ((strlen(name)+1)>sizeof(aptr->sun_path)) { /* bad address */ DBG_INFO(GWEN_LOGDOMAIN, "Path too long (%d>%d)", (int)(strlen(name)+1),(int)(sizeof(aptr->sun_path))); return GWEN_ERROR_BAD_ADDRESS; } strcpy(aptr->sun_path,name); ia->size=SUN_LEN(aptr); } break; } default: return GWEN_INETADDR_ERROR_BAD_ADDRESS_FAMILY; } /* switch */ return 0; } int GWEN_InetAddr_GetAddress(const GWEN_INETADDRESS *ia, char *buffer, unsigned int bsize) { const char *s; assert(ia); assert(buffer); switch (ia->af) { case GWEN_AddressFamilyIP: { struct sockaddr_in *aptr; aptr=(struct sockaddr_in*)(ia->address); s=inet_ntoa(aptr->sin_addr); assert(s); if (strlen(s)+1>bsize) return GWEN_ERROR_BUFFER_OVERFLOW; strcpy(buffer,s); break; } case GWEN_AddressFamilyUnix: { struct sockaddr_un *aptr; int i; aptr=(struct sockaddr_un*)(ia->address); s=aptr->sun_path; i=ia->size; i-=sizeof(aptr->sun_family); if (i+1>(int)bsize) return GWEN_ERROR_BUFFER_OVERFLOW; memmove(buffer,s,i); buffer[i]=0; break; } default: return GWEN_ERROR_BAD_ADDRESS_FAMILY; } /* switch */ return 0; } int GWEN_InetAddr_GetName(const GWEN_INETADDRESS *ia, char *buffer, unsigned int bsize) { struct hostent *he; struct in_addr lia; assert(ia); assert(buffer); switch (ia->af) { case GWEN_AddressFamilyIP: { struct sockaddr_in *aptr; aptr=(struct sockaddr_in*)(ia->address); /* resolve name from address */ lia=aptr->sin_addr; #ifdef PF_INET he=gethostbyaddr((char*)&lia,sizeof(lia),PF_INET); #else he=gethostbyaddr((char*)&lia,sizeof(lia),AF_INET); #endif if (!he) return GWEN_InetAddr_TranslateHError(h_errno); /* copy name into given buffer */ assert(he->h_name); if (strlen(he->h_name)+1>bsize) return GWEN_ERROR_BUFFER_OVERFLOW; /* copy the name into the buffer */ strcpy(buffer,he->h_name); break; } case GWEN_AddressFamilyUnix: { struct sockaddr_un *aptr; aptr=(struct sockaddr_un*)(ia->address); /* simply copy path */ if (strlen(aptr->sun_path)+1>bsize) return GWEN_ERROR_BUFFER_OVERFLOW; strcpy(buffer,aptr->sun_path); break; } default: return GWEN_INETADDR_ERROR_BAD_ADDRESS_FAMILY; } /* switch */ /* finished */ return 0; } int GWEN_InetAddr_GetPort(const GWEN_INETADDRESS *ia) { int i; assert(ia); switch (ia->af) { case GWEN_AddressFamilyIP: { struct sockaddr_in *aptr; aptr=(struct sockaddr_in*)(ia->address); i=ntohs(aptr->sin_port); break; } default: DBG_INFO(GWEN_LOGDOMAIN, "not an IP address"); i=0; } /* switch */ return i; } int GWEN_InetAddr_SetPort(GWEN_INETADDRESS *ia, int port) { assert(ia); switch (ia->af) { case GWEN_AddressFamilyIP: { struct sockaddr_in *aptr; aptr=(struct sockaddr_in*)(ia->address); aptr->sin_port=htons(port); break; } default: return GWEN_ERROR_BAD_ADDRESS_FAMILY; } /* switch */ return 0; } gwenhywfar-4.15.2beta/src/os/posix/directory.c0000644000175000017500000001574312416477066016312 00000000000000/*************************************************************************** begin : Tue Dec 03 2002 copyright : (C) 2002-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "directory_p.h" #if defined(OS_DARWIN) && defined(ENABLE_LOCAL_INSTALL) # include # include #else # include "binreloc.h" #endif #include #include #include #include #include #include #include #include #include #include static char gwen_directory_posix__homedir[256]; static int gwen_directory_posix__home_set=0; GWEN_DIRECTORY *GWEN_Directory_new(void) { GWEN_DIRECTORY *d; GWEN_NEW_OBJECT(GWEN_DIRECTORY, d); return d; } void GWEN_Directory_free(GWEN_DIRECTORY *d) { if (d) { if (d->handle) closedir(d->handle); d->handle=0; GWEN_FREE_OBJECT(d); } } int GWEN_Directory_Open(GWEN_DIRECTORY *d, const char *n) { assert(d); d->handle=opendir(n); if (d->handle==0) { DBG_INFO(GWEN_LOGDOMAIN, "opendir(%s): %s", n, strerror(errno)); return GWEN_ERROR_NOT_FOUND; } return 0; } int GWEN_Directory_Close(GWEN_DIRECTORY *d) { int rv; assert(d); rv=closedir(d->handle); d->handle=0; return rv; } int GWEN_Directory_Read(GWEN_DIRECTORY *d, char *buffer, unsigned int len) { struct dirent *de; assert(d); assert(buffer); assert(len); assert(d->handle); de=readdir(d->handle); if (de) { if (lend_name)+1) { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small"); return GWEN_ERROR_BUFFER_OVERFLOW; } strcpy(buffer,de->d_name); return 0; } return GWEN_ERROR_NOT_FOUND; } int GWEN_Directory_Rewind(GWEN_DIRECTORY *d) { assert(d); if (d->handle==0) return GWEN_ERROR_INVALID; rewinddir(d->handle); return 0; } int GWEN_Directory_GetHomeDirectory(char *buffer, unsigned int size) { if (!gwen_directory_posix__home_set) { struct passwd *p; p=getpwuid(geteuid()); if (!p) { DBG_ERROR(GWEN_LOGDOMAIN, "%s at getpwuid", strerror(errno)); endpwent(); return -1; } if (sizeof(gwen_directory_posix__homedir)pw_dir)+1) { DBG_ERROR(GWEN_LOGDOMAIN, "Internal: Buffer too small (need %d bytes)", (int)(strlen(p->pw_dir)+1)); endpwent(); return -1; } strcpy(gwen_directory_posix__homedir, p->pw_dir); gwen_directory_posix__home_set=1; endpwent(); } if (size=size) { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small"); return GWEN_ERROR_BUFFER_OVERFLOW; } strcpy(buffer, realbuffer); return 0; # else /* not local install */ const char *s="/usr/local"; if ((strlen(s)+1)>=size) { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small"); return GWEN_ERROR_BUFFER_OVERFLOW; } strcpy(buffer, s); return 0; # endif #else /* if darwin */ # ifdef ENABLE_BINRELOC char *exeDir; exeDir=br_find_prefix(NULL); if (exeDir==(char*)NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Unable to determine exe folder"); return GWEN_ERROR_GENERIC; } if ((strlen(exeDir)+1)>=size) { free(exeDir); return GWEN_ERROR_BUFFER_OVERFLOW; } strcpy(buffer, exeDir); free(exeDir); return 0; # else /* if with binloc */ const char *s="/usr/local"; if ((strlen(s)+1)>=size) { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small"); return GWEN_ERROR_BUFFER_OVERFLOW; } strcpy(buffer, s); return 0; # endif /* if without binloc */ #endif /* if not darwin */ } gwenhywfar-4.15.2beta/src/os/posix/directory_p.h0000644000175000017500000000405512364015347016620 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Tue Dec 03 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /** * @file chameleon/directory_p.h * @short This file contains the directory handling module */ #ifndef GWEN_DIRECTORY_P_H #define GWEN_DIRECTORY_P_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif struct GWEN_DIRECTORY { DIR *handle; }; #ifdef __cplusplus } #endif #endif /* GWEN_DIRECTORY_P_H */ gwenhywfar-4.15.2beta/src/os/posix/syncio_file.c0000644000175000017500000002422112416477066016600 00000000000000/*************************************************************************** begin : Tue Apr 27 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "syncio_file_p.h" #include #include #include #include #include #include #include #include #include #include GWEN_INHERIT(GWEN_SYNCIO, GWEN_SYNCIO_FILE) GWEN_SYNCIO *GWEN_SyncIo_File_new(const char *path, GWEN_SYNCIO_FILE_CREATIONMODE cm) { GWEN_SYNCIO *sio; GWEN_SYNCIO_FILE *xio; assert(path); sio=GWEN_SyncIo_new(GWEN_SYNCIO_FILE_TYPE, NULL); GWEN_NEW_OBJECT(GWEN_SYNCIO_FILE, xio); GWEN_INHERIT_SETDATA(GWEN_SYNCIO, GWEN_SYNCIO_FILE, sio, xio, GWEN_SyncIo_File_FreeData); xio->creationMode=cm; xio->path=strdup(path); GWEN_SyncIo_SetConnectFn(sio, GWEN_SyncIo_File_Connect); GWEN_SyncIo_SetDisconnectFn(sio, GWEN_SyncIo_File_Disconnect); GWEN_SyncIo_SetReadFn(sio, GWEN_SyncIo_File_Read); GWEN_SyncIo_SetWriteFn(sio, GWEN_SyncIo_File_Write); return sio; } GWEN_SYNCIO *GWEN_SyncIo_File_fromFd(int fd) { GWEN_SYNCIO *sio; GWEN_SYNCIO_FILE *xio; sio=GWEN_SyncIo_new(GWEN_SYNCIO_FILE_TYPE, NULL); GWEN_NEW_OBJECT(GWEN_SYNCIO_FILE, xio); GWEN_INHERIT_SETDATA(GWEN_SYNCIO, GWEN_SYNCIO_FILE, sio, xio, GWEN_SyncIo_File_FreeData); xio->fd=fd; GWEN_SyncIo_SetStatus(sio, GWEN_SyncIo_Status_Connected); GWEN_SyncIo_SetConnectFn(sio, GWEN_SyncIo_File_Connect); GWEN_SyncIo_SetDisconnectFn(sio, GWEN_SyncIo_File_Disconnect); GWEN_SyncIo_SetReadFn(sio, GWEN_SyncIo_File_Read); GWEN_SyncIo_SetWriteFn(sio, GWEN_SyncIo_File_Write); return sio; } GWEN_SYNCIO *GWEN_SyncIo_File_fromStdHandle(int fd, const char *hname) { GWEN_SYNCIO *sio; GWEN_SYNCIO_FILE *xio; sio=GWEN_SyncIo_new(GWEN_SYNCIO_FILE_TYPE, NULL); GWEN_NEW_OBJECT(GWEN_SYNCIO_FILE, xio); GWEN_INHERIT_SETDATA(GWEN_SYNCIO, GWEN_SYNCIO_FILE, sio, xio, GWEN_SyncIo_File_FreeData); xio->path=strdup(hname); xio->fd=fd; GWEN_SyncIo_SetStatus(sio, GWEN_SyncIo_Status_Connected); GWEN_SyncIo_SetConnectFn(sio, GWEN_SyncIo_File_Connect); GWEN_SyncIo_SetDisconnectFn(sio, GWEN_SyncIo_File_Disconnect); GWEN_SyncIo_SetReadFn(sio, GWEN_SyncIo_File_Read); GWEN_SyncIo_SetWriteFn(sio, GWEN_SyncIo_File_Write); return sio; } GWEN_SYNCIO *GWEN_SyncIo_File_fromStdin(void) { return GWEN_SyncIo_File_fromStdHandle(fileno(stdin), "stdin"); } GWEN_SYNCIO *GWEN_SyncIo_File_fromStdout(void) { return GWEN_SyncIo_File_fromStdHandle(fileno(stdout), "stdout"); } GWEN_SYNCIO *GWEN_SyncIo_File_fromStderr(void) { return GWEN_SyncIo_File_fromStdHandle(fileno(stderr), "stderr"); } const char *GWEN_SyncIo_File_GetPath(const GWEN_SYNCIO *sio) { GWEN_SYNCIO_FILE *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_FILE, sio); assert(xio); return xio->path; } void GWENHYWFAR_CB GWEN_SyncIo_File_FreeData(void *bp, void *p) { GWEN_SYNCIO_FILE *xio; xio=(GWEN_SYNCIO_FILE*) p; free(xio->path); GWEN_FREE_OBJECT(xio); } int GWENHYWFAR_CB GWEN_SyncIo_File_Connect(GWEN_SYNCIO *sio) { GWEN_SYNCIO_FILE *xio; int fd; uint32_t flags; uint32_t accflags; mode_t mode=0; int acc=0; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_FILE, sio); assert(xio); flags=GWEN_SyncIo_GetFlags(sio); accflags=flags & (GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE); if (accflags==(GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE)) acc=O_RDWR; else if (accflags==GWEN_SYNCIO_FILE_FLAGS_READ) acc=O_RDONLY; else if (accflags==GWEN_SYNCIO_FILE_FLAGS_WRITE) acc=O_WRONLY; if (flags & GWEN_SYNCIO_FILE_FLAGS_APPEND) acc|=O_APPEND; #ifdef O_BINARY /* always assume binary mode */ acc|=O_BINARY; #endif if (flags & GWEN_SYNCIO_FILE_FLAGS_UREAD) mode|=S_IRUSR; if (flags & GWEN_SYNCIO_FILE_FLAGS_UWRITE) mode|=S_IWUSR; if (flags & GWEN_SYNCIO_FILE_FLAGS_UEXEC) mode|=S_IXUSR; #ifdef S_IRGRP if (flags & GWEN_SYNCIO_FILE_FLAGS_GREAD) mode|=S_IRGRP; #endif #ifdef S_IWGRP if (flags & GWEN_SYNCIO_FILE_FLAGS_GWRITE) mode|=S_IWGRP; #endif #ifdef S_IXGRP if (flags & GWEN_SYNCIO_FILE_FLAGS_GEXEC) mode|=S_IXGRP; #endif #ifdef S_IROTH if (flags & GWEN_SYNCIO_FILE_FLAGS_OREAD) mode|=S_IROTH; #endif #ifdef S_IWOTH if (flags & GWEN_SYNCIO_FILE_FLAGS_OWRITE) mode|=S_IWOTH; #endif #ifdef S_IXOTH if (flags & GWEN_SYNCIO_FILE_FLAGS_OEXEC) mode|=S_IXOTH; #endif switch(xio->creationMode) { case GWEN_SyncIo_File_CreationMode_OpenExisting: fd=open(xio->path, acc); break; case GWEN_SyncIo_File_CreationMode_CreateNew: fd=open(xio->path, acc | O_CREAT | O_EXCL, mode); break; case GWEN_SyncIo_File_CreationMode_OpenAlways: fd=open(xio->path, acc | O_CREAT, mode); break; case GWEN_SyncIo_File_CreationMode_CreateAlways: fd=open(xio->path, acc | O_CREAT | O_TRUNC, mode); break; case GWEN_SyncIo_File_CreationMode_TruncateExisting: fd=open(xio->path, acc | O_TRUNC, mode); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Invalid creation mode %d", xio->creationMode); fd=-1; break; } if (fd==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "open(%s, %d): %s", xio->path, xio->creationMode, strerror(errno)); switch(errno) { case EEXIST: return GWEN_ERROR_FOUND; case EACCES: return GWEN_ERROR_PERMISSIONS; case ENOENT: return GWEN_ERROR_NOT_FOUND; default: return GWEN_ERROR_IO; } } xio->fd=fd; GWEN_SyncIo_SetStatus(sio, GWEN_SyncIo_Status_Connected); return 0; } int GWENHYWFAR_CB GWEN_SyncIo_File_Disconnect(GWEN_SYNCIO *sio) { GWEN_SYNCIO_FILE *xio; int rv=0; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_FILE, sio); assert(xio); if (xio->fd==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "File (%s) not open", xio->path); return GWEN_ERROR_NOT_OPEN; } if (!(GWEN_SyncIo_GetFlags(sio) & GWEN_SYNCIO_FLAGS_DONTCLOSE)) { do { rv=close(xio->fd); } while (rv==-1 && errno==EINTR); if (rv==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "close(%s): %s", xio->path, strerror(errno)); switch(errno) { case ENOSPC: return GWEN_ERROR_MEMORY_FULL; default: return GWEN_ERROR_IO; } } } xio->fd=-1; GWEN_SyncIo_SetStatus(sio, GWEN_SyncIo_Status_Disconnected); return (int)rv; } int GWENHYWFAR_CB GWEN_SyncIo_File_Read(GWEN_SYNCIO *sio, uint8_t *buffer, uint32_t size) { GWEN_SYNCIO_FILE *xio; ssize_t rv; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_FILE, sio); assert(xio); if (xio->fd==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "File (%s) not open", xio->path); return GWEN_ERROR_NOT_OPEN; } if (GWEN_SyncIo_GetStatus(sio) != GWEN_SyncIo_Status_Connected) { DBG_ERROR(GWEN_LOGDOMAIN, "GWEN_SYNCIO of file (%s) not connected; did you forget to call GWEN_SyncIo_Connect()?", xio->path); return GWEN_ERROR_NOT_OPEN; } do { rv=read(xio->fd, buffer, size); } while (rv==-1 && errno==EINTR); if (rv==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "read(%s, %lu): %s", xio->path, (long unsigned int) size, strerror(errno)); return GWEN_ERROR_IO; } return (int)rv; } int GWENHYWFAR_CB GWEN_SyncIo_File_Write(GWEN_SYNCIO *sio, const uint8_t *buffer, uint32_t size) { GWEN_SYNCIO_FILE *xio; ssize_t rv; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_FILE, sio); assert(xio); if (xio->fd==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "File (%s) not open", xio->path); return GWEN_ERROR_NOT_OPEN; } do { rv=write(xio->fd, buffer, size); } while (rv==-1 && errno==EINTR); if (rv==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "write(%d, %s, %lu): %s", xio->fd, xio->path, (long unsigned int) size, strerror(errno)); switch(errno) { case ENOSPC: return GWEN_ERROR_MEMORY_FULL; default: return GWEN_ERROR_IO; } } return (int)rv; } int64_t GWEN_SyncIo_File_Seek(GWEN_SYNCIO *sio, int64_t pos, GWEN_SYNCIO_FILE_WHENCE whence) { GWEN_SYNCIO_FILE *xio; off_t rv; int w; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_FILE, sio); assert(xio); switch(whence) { case GWEN_SyncIo_File_Whence_Set: w=SEEK_SET; break; case GWEN_SyncIo_File_Whence_Current: w=SEEK_CUR; break; case GWEN_SyncIo_File_Whence_End: w=SEEK_END; break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Invalid seek mode (%d)", whence); return GWEN_ERROR_INVALID; } rv=lseek(xio->fd, pos, w); if (rv==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "lseek(%s, %lli): %s", xio->path, (long long int) pos, strerror(errno)); return GWEN_ERROR_IO; } return rv; } gwenhywfar-4.15.2beta/src/os/posix/mutex_p.h0000644000175000017500000000332212364015347015752 00000000000000/*************************************************************************** begin : Mon Jul 14 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_MUTEX_P_H #define GWEN_MUTEX_P_H #include #include struct GWEN_MUTEX { pthread_mutex_t mutex; }; #endif gwenhywfar-4.15.2beta/src/os/posix/system.h.in0000644000175000017500000000331312364015347016222 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Jan 05 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_SYSTEM_H #define GWENHYWFAR_SYSTEM_H #endif gwenhywfar-4.15.2beta/src/os/posix/system.h0000644000175000017500000000331312634022443015610 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Jan 05 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_SYSTEM_H #define GWENHYWFAR_SYSTEM_H #endif gwenhywfar-4.15.2beta/src/os/posix/process.c0000644000175000017500000003025412416477066015756 00000000000000/*************************************************************************** begin : Sat Dec 27 2003 copyright : (C) 2003-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "process_p.h" #include "syncio_file_l.h" #include #include #include #include #include #include #include #include #include #include #include static GWEN_PROCESS *GWEN_Process_ProcessList=0; int GWEN_Process_ModuleInit(void) { return 0; } int GWEN_Process_ModuleFini(void) { GWEN_PROCESS *pr, *prnext; pr=GWEN_Process_ProcessList; while(pr) { prnext=pr->next; pr->usage=1; GWEN_Process_free(pr); pr=prnext; } /* while */ return 0; } #if 0 GWEN_PROCESS *GWEN_Process_FindProcess(pid_t pid) { GWEN_PROCESS *pr; pr=GWEN_Process_ProcessList; while(pr) { if (pr->pid==pid) return pr; pr=pr->next; } /* while */ return 0; } void GWEN_Process_SignalHandler(int s) { int status; pid_t pid; switch(s) { case SIGCHLD: /* try to get the status */ pid=waitpid(0, &status, WNOHANG); if (pid==-1) { DBG_DEBUG(GWEN_LOGDOMAIN, "waitdpid(%d): %s", 0, strerror(errno)); } else if (pid==0) { /* process still running ?! */ DBG_DEBUG(GWEN_LOGDOMAIN, "Got a SIGCHLD but no child terminated ??"); } else { GWEN_PROCESS *pr; /* som process terminated */ pr=GWEN_Process_FindProcess(pid); if (!pr) { DBG_NOTICE(GWEN_LOGDOMAIN, "No infomation about process \"%d\" available", (int)pid); } else { GWEN_Process_MakeState(pr, status); /* remove from list. If this process data is not used by the * aplication it will now be freed, otherwise only the usage * counter is decremented */ GWEN_Process_free(pr); } } break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Got unhandled signal \"%d\"", s); break; } /* switch */ } #endif GWEN_PROCESS *GWEN_Process_new(void) { GWEN_PROCESS *pr; GWEN_NEW_OBJECT(GWEN_PROCESS, pr); pr->state=GWEN_ProcessStateNotStarted; pr->pid=-1; pr->pflags=GWEN_PROCESS_FLAGS_DEFAULT; pr->usage=1; GWEN_LIST_ADD(GWEN_PROCESS, pr, &GWEN_Process_ProcessList); return pr; } void GWEN_Process_free(GWEN_PROCESS *pr) { if (pr) { assert(pr->usage); if (--(pr->usage)==0) { /* unlink from list */ GWEN_LIST_DEL(GWEN_PROCESS, pr, &GWEN_Process_ProcessList); GWEN_SyncIo_free(pr->stdIn); GWEN_SyncIo_free(pr->stdOut); GWEN_SyncIo_free(pr->stdErr); GWEN_FREE_OBJECT(pr); } } } GWEN_PROCESS_STATE GWEN_Process_Start(GWEN_PROCESS *pr, const char *prg, const char *args) { pid_t pid; char *argv[32]; int argc; const char *p, *p2; GWEN_BUFFER *wbuf; assert(pr); if (GWEN_Process_Redirect(pr)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not setup redirections"); pr->state=GWEN_ProcessStateNotStarted; pr->pid=-1; return GWEN_ProcessStateNotStarted; } pid=fork(); if (pid==-1) { /* error in fork */ pr->state=GWEN_ProcessStateNotStarted; pr->pid=-1; /* close all pipes */ if (pr->filesStdin[0]!=-1) { close(pr->filesStdin[0]); close(pr->filesStdin[1]); } if (pr->filesStdout[0]!=-1) { close(pr->filesStdout[0]); close(pr->filesStdout[1]); } if (pr->filesStderr[0]!=-1) { close(pr->filesStderr[0]); close(pr->filesStderr[1]); } return GWEN_ProcessStateNotStarted; } else if (pid!=0) { /* parent */ DBG_INFO(GWEN_LOGDOMAIN, "Process started with id %d", (int)pid); pr->state=GWEN_ProcessStateRunning; pr->pid=pid; /* setup redirections */ if (pr->filesStdin[0]!=-1) { close(pr->filesStdin[1]); pr->stdIn=GWEN_SyncIo_File_fromFd(pr->filesStdin[0]); } if (pr->filesStdout[0]!=-1) { close(pr->filesStdout[1]); pr->stdOut=GWEN_SyncIo_File_fromFd(pr->filesStdout[0]); } if (pr->filesStderr[0]!=-1) { close(pr->filesStderr[1]); pr->stdErr=GWEN_SyncIo_File_fromFd(pr->filesStdout[0]); } return GWEN_ProcessStateRunning; } /* child, build arguments */ argc=0; DBG_DEBUG(GWEN_LOGDOMAIN, "I'm the child process"); /* setup redirections */ if (pr->filesStdin[0]!=-1) { close(pr->filesStdin[0]); close(0); if (dup(pr->filesStdin[1])==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not setup redirection"); } } if (pr->filesStdout[0]!=-1) { close(pr->filesStdout[0]); close(1); if (dup(pr->filesStdout[1])==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not setup redirection"); } } if (pr->filesStderr[0]!=-1) { close(pr->filesStderr[0]); close(2); if (dup(pr->filesStderr[1])==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not setup redirection"); } } argv[0]=strdup(prg); argc++; p=args; wbuf=GWEN_Buffer_new(0, 256, 0, 1); while(argc<32 && *p) { while(*p && isspace((int)*p)) p++; if (!(*p)) break; if (GWEN_Text_GetWordToBuffer(p, " ", wbuf, GWEN_TEXT_FLAGS_NULL_IS_DELIMITER | GWEN_TEXT_FLAGS_DEL_QUOTES | GWEN_TEXT_FLAGS_CHECK_BACKSLASH, &p)) break; p2=GWEN_Buffer_GetStart(wbuf); argv[argc]=strdup(p2); GWEN_Buffer_Reset(wbuf); argc++; } /* while */ GWEN_Buffer_free(wbuf); argv[argc]=0; /* parameters ready, exec */ execvp(prg, argv); /* if we reach this point an error occurred */ DBG_ERROR(GWEN_LOGDOMAIN, "Could not start program \"%s\": %s", prg, strerror(errno)); exit(EXIT_FAILURE); } GWEN_PROCESS_STATE GWEN_Process_GetState(GWEN_PROCESS *pr, int w) { int rv; int status; assert(pr); /* try to get the status */ rv=waitpid(pr->pid, &status, w?0:WNOHANG); if (rv==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "waitdpid(%d): %s", (int)pr->pid, strerror(errno)); return GWEN_ProcessStateUnknown; } else if (rv==0) { /* process still running */ return GWEN_ProcessStateRunning; } else { return GWEN_Process_MakeState(pr, status); } } GWEN_PROCESS_STATE GWEN_Process_MakeState(GWEN_PROCESS *pr, int status) { /* process has terminated for any reason */ if (WIFEXITED(status)) { /* normal termination */ DBG_INFO(GWEN_LOGDOMAIN, "Process %d exited with %d", (int)pr->pid, WEXITSTATUS(status)); pr->state=GWEN_ProcessStateExited; pr->pid=-1; /* store result code */ pr->result=WEXITSTATUS(status); return pr->state; } /* if exited normally */ else if (WIFSIGNALED(status)) { /* uncaught signal */ DBG_ERROR(GWEN_LOGDOMAIN, "Process %d terminated by signal %d", (int)pr->pid, WTERMSIG(status)); pr->state=GWEN_ProcessStateAborted; pr->pid=-1; return pr->state; } /* if terminated by signal */ else if (WIFSTOPPED(status)) { /* process stopped by signal */ DBG_ERROR(GWEN_LOGDOMAIN, "Process %d stopped by signal %d", (int)pr->pid, WSTOPSIG(status)); pr->state=GWEN_ProcessStateStopped; pr->pid=-1; return pr->state; } else { DBG_ERROR(GWEN_LOGDOMAIN, "Unhandled status, assume process %d isn't running (%08x)", (int)pr->pid, (unsigned int)status); return GWEN_ProcessStateUnknown; } } GWEN_PROCESS_STATE GWEN_Process_CheckState(GWEN_PROCESS *pr) { assert(pr); if (pr->pid==-1) /* we already know the state, return it */ return pr->state; /* otherwise try to get the status */ return GWEN_Process_GetState(pr, 0); } int GWEN_Process_GetResult(GWEN_PROCESS *pr) { assert(pr); if (GWEN_Process_CheckState(pr)==GWEN_ProcessStateExited) return pr->result; else return -1; } int GWEN_Process_Wait(GWEN_PROCESS *pr) { GWEN_PROCESS_STATE pst; assert(pr); if (pr->state!=GWEN_ProcessStateRunning) /* process is not running, so return */ return 0; if (pr->pid==-1) { /* process is running, but we have no pid ?! */ DBG_ERROR(GWEN_LOGDOMAIN, "Process is running but we don't have its pid"); return -1; } pst=GWEN_Process_GetState(pr, 1); if (pst==GWEN_ProcessStateUnknown) return -1; return 0; } int GWEN_Process_Terminate(GWEN_PROCESS *pr) { assert(pr); if (pr->state!=GWEN_ProcessStateRunning) { /* process is not running, so return */ DBG_INFO(GWEN_LOGDOMAIN, "Process is not running, doing nothing"); return 0; } if (pr->pid==-1) { /* process is running, but we have no pid ?! */ DBG_ERROR(GWEN_LOGDOMAIN, "Process is running but we don't have its pid"); return -1; } /* kill process */ if (kill(pr->pid, SIGKILL)) { DBG_ERROR(GWEN_LOGDOMAIN, "Error on kill(%d, SIGKILL): %s", (int)pr->pid, strerror(errno)); return -1; } /* wait for process to respond to kill signal (should not take long) */ return GWEN_Process_Wait(pr); } uint32_t GWEN_Process_GetFlags(const GWEN_PROCESS *pr) { assert(pr); return pr->pflags; } void GWEN_Process_SetFlags(GWEN_PROCESS *pr, uint32_t f) { assert(pr); pr->pflags=f; } void GWEN_Process_AddFlags(GWEN_PROCESS *pr, uint32_t f) { assert(pr); pr->pflags|=f; } void GWEN_Process_SubFlags(GWEN_PROCESS *pr, uint32_t f) { assert(pr); pr->pflags&=~f; } GWEN_SYNCIO *GWEN_Process_GetStdin(const GWEN_PROCESS *pr) { assert(pr); return pr->stdIn; } GWEN_SYNCIO *GWEN_Process_GetStdout(const GWEN_PROCESS *pr) { assert(pr); return pr->stdOut; } GWEN_SYNCIO *GWEN_Process_GetStderr(const GWEN_PROCESS *pr) { assert(pr); return pr->stdErr; } int GWEN_Process_Redirect(GWEN_PROCESS *pr) { assert(pr); pr->filesStdin[0]=-1; pr->filesStdout[0]=-1; pr->filesStderr[0]=-1; if (pr->pflags & GWEN_PROCESS_FLAGS_REDIR_STDIN) { int filedes[2]; DBG_DEBUG(GWEN_LOGDOMAIN, "Redirecting stdin"); if (pipe(filedes)) { DBG_ERROR(GWEN_LOGDOMAIN, "pipe(): %s", strerror(errno)); return -1; } pr->filesStdin[0]=filedes[1]; pr->filesStdin[1]=filedes[0]; } if (pr->pflags & GWEN_PROCESS_FLAGS_REDIR_STDOUT) { int filedes[2]; DBG_DEBUG(GWEN_LOGDOMAIN, "Redirecting stdout"); if (pipe(filedes)) { DBG_ERROR(GWEN_LOGDOMAIN, "pipe(): %s", strerror(errno)); return -1; } pr->filesStdout[0]=filedes[0]; pr->filesStdout[1]=filedes[1]; } if (pr->pflags & GWEN_PROCESS_FLAGS_REDIR_STDERR) { int filedes[2]; DBG_DEBUG(GWEN_LOGDOMAIN, "Redirecting stderr"); if (pipe(filedes)) { DBG_ERROR(GWEN_LOGDOMAIN, "pipe(): %s", strerror(errno)); return -1; } pr->filesStderr[0]=filedes[0]; pr->filesStderr[1]=filedes[1]; } return 0; } gwenhywfar-4.15.2beta/src/os/posix/inetsocket_p.h0000644000175000017500000000450312364015347016762 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Tue Oct 02 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /** * @file chameleon/socket.h * @short This file contains sockets and socket sets. */ #ifndef GWEN_SOCKET_P_H #define GWEN_SOCKET_P_H #include #include #include #include "inetsocket_l.h" #include #include #include #ifdef HAVE_ARPA_INET_H # include #endif GWENHYWFAR_API struct GWEN_SOCKET { GWEN_LIST_ELEMENT(GWEN_SOCKET) int socket; GWEN_SOCKETTYPE type; int haveWaited; }; GWENHYWFAR_API struct GWEN_SOCKETSETSTRUCT { fd_set set; int highest; uint32_t count; }; static int GWEN_Socket_NetError2GwenError(int rv); #endif /* GWEN_SOCKET_P_H */ gwenhywfar-4.15.2beta/src/os/posix/gwentime_p.h0000644000175000017500000000340512364015347016431 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Wed Mar 24 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_TIME_P_H #define GWEN_TIME_P_H #include #include #include #endif gwenhywfar-4.15.2beta/src/os/posix/Makefile.in0000644000175000017500000006366212634022415016174 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/os/posix DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(srcdir)/system.h.in $(top_srcdir)/depcomp $(iheader_HEADERS) \ $(noinst_HEADERS) README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = system.h CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libosimpl_la_LIBADD = am_libosimpl_la_OBJECTS = directory.lo fslock.lo gwentime.lo \ inetaddr.lo inetsocket.lo init.lo libloader.lo process.lo \ mutex.lo semaphore.lo syncio_file.lo libosimpl_la_OBJECTS = $(am_libosimpl_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libosimpl_la_SOURCES) DIST_SOURCES = $(libosimpl_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(iheaderdir)" HEADERS = $(iheader_HEADERS) $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/sio \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src \ -I$(top_srcdir)/src/parser @all_includes@ AM_CFLAGS = @visibility_cflags@ -DBUILDING_GWENHYWFAR EXTRA_DIST = README noinst_LTLIBRARIES = libosimpl.la noinst_HEADERS = \ directory_p.h \ fslock_p.h \ gwentime_p.h \ inetaddr_p.h \ inetsocket_p.h \ libloader_p.h \ process_p.h \ mutex_p.h \ semaphore_p.h \ syncio_file_l.h \ syncio_file_p.h iheaderdir = $(gwenhywfar_headerdir_am)/gwenhywfar iheader_HEADERS = \ system.h libosimpl_la_SOURCES = \ directory.c \ fslock.c \ gwentime.c \ inetaddr.c \ inetsocket.c \ init.c \ libloader.c \ process.c \ mutex.c \ semaphore.c \ syncio_file.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/os/posix/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/os/posix/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): system.h: $(top_builddir)/config.status $(srcdir)/system.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libosimpl.la: $(libosimpl_la_OBJECTS) $(libosimpl_la_DEPENDENCIES) $(EXTRA_libosimpl_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libosimpl_la_OBJECTS) $(libosimpl_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/directory.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fslock.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gwentime.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inetaddr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inetsocket.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libloader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mutex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/process.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/semaphore.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/syncio_file.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-iheaderHEADERS: $(iheader_HEADERS) @$(NORMAL_INSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(iheaderdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(iheaderdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(iheaderdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(iheaderdir)" || exit $$?; \ done uninstall-iheaderHEADERS: @$(NORMAL_UNINSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(iheaderdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(iheaderdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iheaderHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iheaderHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am \ install-iheaderHEADERS install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-iheaderHEADERS sources: for f in $(libosimpl_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/src/os/posix/libloader.c0000644000175000017500000002034012416477066016230 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Fri Nov 22 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "libloader_p.h" #include #include #include #include #include #include #include #ifdef ENABLE_NLS # include #endif #ifdef HAVE_DLFCN_H # include #endif int GWEN_LibLoader_ModuleInit(void) { return 0; } int GWEN_LibLoader_ModuleFini(void) { return 0; } GWEN_LIBLOADER *GWEN_LibLoader_new(void) { GWEN_LIBLOADER *h; GWEN_NEW_OBJECT(GWEN_LIBLOADER, h); return h; } void GWEN_LibLoader_free(GWEN_LIBLOADER *h) { if (h) { GWEN_FREE_OBJECT(h); } } int GWEN_LibLoader_LoadLibrary(GWEN_LIBLOADER *h, const char *name) { const char *errorstring; assert(h); DBG_DEBUG(GWEN_LOGDOMAIN, "Loading library \"%s\"", name); h->handle=dlopen(name, RTLD_LAZY); if (!h->handle) { #ifdef ENABLE_NLS const char *orig_locale = setlocale(LC_MESSAGES,NULL); char *currentLocale = strdup(orig_locale ? orig_locale : "C"); setlocale(LC_MESSAGES,"C"); #endif /* The string is checked against the known "C" locale strings below. We *have* to switch to the C locale temporarily because otherwise the string might be any translated value. */ errorstring = dlerror(); #ifdef ENABLE_NLS setlocale(LC_MESSAGES,currentLocale); free(currentLocale); #endif DBG_INFO(GWEN_LOGDOMAIN, "dlopen(%s): %s", name, errorstring); if (strstr(errorstring, "No such file")) { if (strstr(errorstring, name)) { return GWEN_ERROR_NOT_FOUND; } } else if (strstr(errorstring, "undefined symbol:")) { DBG_INFO(GWEN_LOGDOMAIN, "GWEN: Error loading library: %s", errorstring); if (strstr(errorstring, name)) return GWEN_ERROR_COULD_NOT_RESOLVE; else return GWEN_ERROR_COULD_NOT_LOAD; } DBG_INFO(GWEN_LOGDOMAIN, "GWEN: Error loading library: %s", errorstring); return GWEN_ERROR_COULD_NOT_LOAD; } DBG_INFO(GWEN_LOGDOMAIN, "Loaded library \"%s\"", name); return 0; } int GWEN_LibLoader_CloseLibrary(GWEN_LIBLOADER *h) { assert(h); if (!h->handle) return GWEN_ERROR_NOT_OPEN; if (dlclose(h->handle)!=0) { DBG_ERROR(GWEN_LOGDOMAIN, "GWEN: Error unloading library: %s", dlerror()); return GWEN_ERROR_CLOSE; } h->handle=0; return 0; } int GWEN_LibLoader_Resolve(GWEN_LIBLOADER *h, const char *name, void **p) { assert(h); assert(name); assert(p); if (!h->handle) return GWEN_ERROR_NOT_OPEN; *p=dlsym(h->handle,name); if (!*p) { DBG_INFO(GWEN_LOGDOMAIN, "Error resolving symbol \"%s\": %s\n", name, dlerror()); return GWEN_ERROR_COULD_NOT_RESOLVE; } DBG_VERBOUS(GWEN_LOGDOMAIN, "Resolved symbol \"%s\": %p\n", name, *p); return 0; } int GWEN_LibLoader_OpenLibraryWithPath(GWEN_LIBLOADER *h, const char *path, const char *name) { GWEN_BUFFER *buffer; unsigned int pos; unsigned int pos2; unsigned int i; int missingSoExt; int missingLibPrefix; int err; assert(h); assert(name); missingSoExt=0; missingLibPrefix=0; buffer=GWEN_Buffer_new(0, 256, 0, 1); if (path) { GWEN_Buffer_AppendString(buffer, path); GWEN_Buffer_AppendByte(buffer, '/'); } /* remember current position */ pos=GWEN_Buffer_GetPos(buffer); /* append name of the library to load */ GWEN_Buffer_AppendString(buffer, name); i=strlen(name); /* check whether we have the ".so" extension */ if ((i<=3) || (strcmp(name+i-3, ".so")!=0)) { /* no SO-extension, add it myself */ missingSoExt=1; } /* check whether we have the "lib" prefix */ if ((i<=3) || (strncmp(name, "lib", 3)!=0)) { /* no SO-extension, add it myself */ missingLibPrefix=1; } /* try to load the library */ err=GWEN_LibLoader_LoadLibrary(h, GWEN_Buffer_GetStart(buffer)); if (!err) { DBG_INFO(GWEN_LOGDOMAIN, "Library \"%s\" loaded", GWEN_Buffer_GetStart(buffer)); GWEN_Buffer_free(buffer); return 0; } /* could not load, check why */ /*if (GWEN_Error_GetType(err)!= GWEN_Error_FindType(GWEN_LIBLOADER_ERROR_TYPE) || GWEN_Error_GetCode(err)!=GWEN_LIBLOADER_ERROR_NOT_FOUND) { DBG_ERROR_ERR(GWEN_LOGDOMAIN, err); DBG_INFO(GWEN_LOGDOMAIN, "Could not load library \"%s\"", GWEN_Buffer_GetStart(buffer)); GWEN_Buffer_free(buffer); return err; } */ /* hmm, not found, try some variants */ if (missingSoExt) { /* try again, this time with ".so" appended */ pos2=GWEN_Buffer_GetPos(buffer); GWEN_Buffer_AppendString(buffer, ".so"); err=GWEN_LibLoader_LoadLibrary(h, GWEN_Buffer_GetStart(buffer)); if (!err) { DBG_INFO(GWEN_LOGDOMAIN, "Library \"%s\" loaded", GWEN_Buffer_GetStart(buffer)); GWEN_Buffer_free(buffer); return 0; } GWEN_Buffer_Crop(buffer, 0, pos2); GWEN_Buffer_SetPos(buffer, pos2); /* could not load, check why */ if (err!=GWEN_ERROR_NOT_FOUND) { DBG_INFO(GWEN_LOGDOMAIN, "Could not load library \"%s\"", GWEN_Buffer_GetStart(buffer)); GWEN_Buffer_free(buffer); return err; } } if (missingLibPrefix) { GWEN_Buffer_SetPos(buffer, pos); /* insert "lib" */ GWEN_Buffer_InsertString(buffer, "lib"); /* try again */ err=GWEN_LibLoader_LoadLibrary(h, GWEN_Buffer_GetStart(buffer)); if (!err) { DBG_INFO(GWEN_LOGDOMAIN, "Library \"%s\" loaded", GWEN_Buffer_GetStart(buffer)); GWEN_Buffer_free(buffer); return 0; } /* could not load, check why */ if (err!=GWEN_ERROR_NOT_FOUND) { DBG_INFO(GWEN_LOGDOMAIN, "Could not load library \"%s\"", GWEN_Buffer_GetStart(buffer)); GWEN_Buffer_free(buffer); return err; } /* try again, this time with ".so" AND "lib" */ if (missingSoExt) { GWEN_Buffer_AppendString(buffer, ".so"); err=GWEN_LibLoader_LoadLibrary(h, GWEN_Buffer_GetStart(buffer)); if (!err) { DBG_INFO(GWEN_LOGDOMAIN, "Library \"%s\" loaded", GWEN_Buffer_GetStart(buffer)); GWEN_Buffer_free(buffer); return 0; } } } DBG_INFO(GWEN_LOGDOMAIN, "Library \"%s\" name (or variants) not found, giving up", name); GWEN_Buffer_free(buffer); return err; } int GWEN_LibLoader_OpenLibrary(GWEN_LIBLOADER *h, const char *name) { return GWEN_LibLoader_OpenLibraryWithPath(h, 0, name); } gwenhywfar-4.15.2beta/src/os/posix/syncio_file_l.h0000644000175000017500000000332012364015347017105 00000000000000/*************************************************************************** begin : Tue Apr 27 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_SYNCIO_FILE_L_H #define GWENHYWFAR_SYNCIO_FILE_L_H #include GWEN_SYNCIO *GWEN_SyncIo_File_fromFd(int fd); #endif gwenhywfar-4.15.2beta/src/os/posix/Makefile.am0000644000175000017500000000170512364015347016157 00000000000000INCLUDES= -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/sio \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src \ -I$(top_srcdir)/src/parser @all_includes@ AM_CFLAGS=@visibility_cflags@ -DBUILDING_GWENHYWFAR EXTRA_DIST=README noinst_LTLIBRARIES=libosimpl.la noinst_HEADERS=\ directory_p.h \ fslock_p.h \ gwentime_p.h \ inetaddr_p.h \ inetsocket_p.h \ libloader_p.h \ process_p.h \ mutex_p.h \ semaphore_p.h \ syncio_file_l.h \ syncio_file_p.h iheaderdir=$(gwenhywfar_headerdir_am)/gwenhywfar iheader_HEADERS=\ system.h libosimpl_la_SOURCES=\ directory.c \ fslock.c \ gwentime.c \ inetaddr.c \ inetsocket.c \ init.c \ libloader.c \ process.c \ mutex.c \ semaphore.c \ syncio_file.c sources: for f in $(libosimpl_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-4.15.2beta/src/os/posix/fslock_p.h0000644000175000017500000000414012364015347016070 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Wed Mar 24 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_FSLOCK_P_H #define GWEN_FSLOCK_P_H #include #include #include #include "fslock.h" struct GWEN_FSLOCK { GWEN_LIST_ELEMENT(GWEN_FSLOCK) GWEN_FSLOCK_TYPE type; char *entryName; char *baseLockFilename; char *uniqueLockFilename; int lockCount; int usage; }; GWEN_FSLOCK_RESULT GWEN_FSLock__Lock(GWEN_FSLOCK *fl); int GWEN_FSLock__UnifyLockFileName(GWEN_BUFFER *nbuf); #endif gwenhywfar-4.15.2beta/src/os/posix/fslock.c0000644000175000017500000003403712416477066015564 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sun Nov 23 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "fslock_p.h" #include "i18n_l.h" #include #include /* for select */ #include #include #include #include #include #include #include #include #include #define GWEN_FSLOCK_TIMEOUT_ASK (7000.0) /* about 7 secs */ GWEN_LIST_FUNCTIONS(GWEN_FSLOCK, GWEN_FSLock) GWEN_LIST2_FUNCTIONS(GWEN_FSLOCK, GWEN_FSLock) GWEN_FSLOCK *GWEN_FSLock_new(const char *fname, GWEN_FSLOCK_TYPE t) { GWEN_FSLOCK *fl; GWEN_BUFFER *nbuf; const char *s; assert(fname); GWEN_NEW_OBJECT(GWEN_FSLOCK, fl); GWEN_LIST_INIT(GWEN_FSLOCK, fl); fl->usage=1; fl->entryName=strdup(fname); switch(t) { case GWEN_FSLock_TypeFile: s=".lck"; break; case GWEN_FSLock_TypeDir: s="/.dir.lck"; break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Unknown log type %d", t); abort(); } /* switch */ nbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(nbuf, fname); GWEN_Buffer_AppendString(nbuf, s); fl->baseLockFilename=strdup(GWEN_Buffer_GetStart(nbuf)); if (GWEN_FSLock__UnifyLockFileName(nbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not create unique lockfile name"); GWEN_Buffer_free(nbuf); abort(); } fl->uniqueLockFilename=strdup(GWEN_Buffer_GetStart(nbuf)); GWEN_Buffer_free(nbuf); return fl; } void GWEN_FSLock_free(GWEN_FSLOCK *fl) { if (fl) { assert(fl->usage); if (fl->usage==1) { if (fl->lockCount) { DBG_WARN(GWEN_LOGDOMAIN, "File \"%s\" still locked", fl->entryName); } free(fl->entryName); free(fl->baseLockFilename); free(fl->uniqueLockFilename); GWEN_LIST_FINI(GWEN_FSLOCK, fl); fl->usage=0; GWEN_FREE_OBJECT(fl); } else { fl->usage--; } } } void GWEN_FSLock_Attach(GWEN_FSLOCK *fl) { assert(fl); assert(fl->usage); fl->usage++; } GWEN_FSLOCK_RESULT GWEN_FSLock__Lock(GWEN_FSLOCK *fl) { assert(fl); if (fl->lockCount==0) { int fd; int linkCount; struct stat st; fd=open(fl->uniqueLockFilename, O_CREAT|O_TRUNC|O_RDWR, S_IRUSR|S_IWUSR); if (fd==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not open lock file %s for file %s: %s", fl->baseLockFilename, fl->entryName, strerror(errno)); return GWEN_FSLock_ResultError; } close(fd); /* get the link count of the new unique file for later comparison */ if (stat(fl->uniqueLockFilename, &st)) { DBG_ERROR(GWEN_LOGDOMAIN, "stat(%s): %s", fl->uniqueLockFilename, strerror(errno)); remove(fl->uniqueLockFilename); return GWEN_FSLock_ResultError; } linkCount=(int)(st.st_nlink); /* create a hard link to the new unique file with the name of the * real lock file. This is guaranteed to be atomic even on NFS */ if (link(fl->uniqueLockFilename, fl->baseLockFilename)) { int lnerr; lnerr=errno; DBG_INFO(GWEN_LOGDOMAIN, "link(%s, %s): %s", fl->uniqueLockFilename, fl->baseLockFilename, strerror(errno)); if (lnerr==EPERM) { int fd; /* link() is not supported on the destination filesystem, try it the * traditional way. This should be ok, since the only FS which does * not handle the O_EXCL flag properly is NFS, and NFS would not * return EPERM (because it generally supports link()). * So for NFS file systems we would not reach this point. */ fd=open(fl->baseLockFilename, O_CREAT | O_EXCL | O_TRUNC | O_RDWR, S_IRUSR | S_IWUSR); if (fd==-1) { DBG_INFO(GWEN_LOGDOMAIN, "FS-Lock to %s already in use", fl->entryName); remove(fl->uniqueLockFilename); return GWEN_FSLock_ResultBusy; } close(fd); } else { /* link() generally is supported on the destination file system, * check whether the link count of the unique file has been * incremented */ if (stat(fl->uniqueLockFilename, &st)) { DBG_ERROR(GWEN_LOGDOMAIN, "stat(%s): %s", fl->uniqueLockFilename, strerror(errno)); remove(fl->uniqueLockFilename); return GWEN_FSLock_ResultError; } if ((int)(st.st_nlink)!=linkCount+1) { DBG_INFO(GWEN_LOGDOMAIN, "FS-Lock to %s already in use", fl->entryName); remove(fl->uniqueLockFilename); return GWEN_FSLock_ResultBusy; } } } /* if error on link */ DBG_VERBOUS(GWEN_LOGDOMAIN, "FS-Lock applied to %s", fl->entryName); } fl->lockCount++; return GWEN_FSLock_ResultOk; } GWEN_FSLOCK_RESULT GWEN_FSLock_Unlock(GWEN_FSLOCK *fl) { assert(fl); if (fl->lockCount<1) { DBG_ERROR(GWEN_LOGDOMAIN, "Entry \"%s\" not locked", fl->entryName); return GWEN_FSLock_ResultNoLock; } fl->lockCount--; if (fl->lockCount<1) { remove(fl->baseLockFilename); remove(fl->uniqueLockFilename); DBG_VERBOUS(GWEN_LOGDOMAIN, "FS-Lock released from %s", fl->entryName); } return GWEN_FSLock_ResultOk; } GWEN_FSLOCK_RESULT GWEN_FSLock_Lock(GWEN_FSLOCK *fl, int timeout, uint32_t gid) { GWEN_TIME *t0; int distance; int count; GWEN_FSLOCK_RESULT rv; uint32_t progressId; int haveAskedForUnlock=0; int isInteractive=1; t0=GWEN_CurrentTime(); assert(t0); isInteractive=(GWEN_Gui_GetFlags(GWEN_Gui_GetGui()) & GWEN_GUI_FLAGS_NONINTERACTIVE)==0; progressId=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Accquiring lock"), NULL, (timeout==GWEN_TIMEOUT_FOREVER) ?0:timeout, gid); if (timeout==GWEN_TIMEOUT_NONE) distance=GWEN_TIMEOUT_NONE; else if (timeout==GWEN_TIMEOUT_FOREVER) distance=GWEN_TIMEOUT_FOREVER; else { distance=GWEN_GUI_CHECK_PERIOD; if (distance>timeout) distance=timeout; } for (count=0;; count++) { int err; err=GWEN_Gui_ProgressAdvance(progressId, GWEN_GUI_PROGRESS_NONE); if (err==GWEN_ERROR_USER_ABORTED) { DBG_ERROR(GWEN_LOGDOMAIN, "User aborted."); GWEN_Time_free(t0); GWEN_Gui_ProgressEnd(progressId); return GWEN_FSLock_ResultUserAbort; } rv=GWEN_FSLock__Lock(fl); if (rv==GWEN_FSLock_ResultError) { DBG_INFO(GWEN_LOGDOMAIN, "here"); GWEN_Time_free(t0); GWEN_Gui_ProgressEnd(progressId); return rv; } else if (rv==GWEN_FSLock_ResultOk) { GWEN_Time_free(t0); GWEN_Gui_ProgressEnd(progressId); return rv; } else if (rv==GWEN_FSLock_ResultBusy) { int doWait=1; /* lock is busy */ if (timeout==GWEN_TIMEOUT_NONE) { /* no timeout, so immediately return the result */ GWEN_Time_free(t0); GWEN_Gui_ProgressEnd(progressId); return GWEN_FSLock_ResultBusy; } /* check timeout */ if (timeout!=GWEN_TIMEOUT_FOREVER) { GWEN_TIME *t1; double d; if (timeout==GWEN_TIMEOUT_NONE) { GWEN_Gui_ProgressEnd(progressId); return GWEN_FSLock_ResultTimeout; } t1=GWEN_CurrentTime(); assert(t1); d=GWEN_Time_Diff(t1, t0); GWEN_Time_free(t1); /* check timeout */ if (d>=timeout) { DBG_DEBUG(GWEN_LOGDOMAIN, "Could not lock within %d milliseconds, giving up", timeout); GWEN_Time_free(t0); GWEN_Gui_ProgressEnd(progressId); return GWEN_FSLock_ResultTimeout; } err=GWEN_Gui_ProgressAdvance(progressId, (uint64_t)d); if (err) { DBG_ERROR(GWEN_LOGDOMAIN, "User aborted."); GWEN_Gui_ProgressEnd(progressId); return GWEN_FSLock_ResultUserAbort; } if (isInteractive && haveAskedForUnlock==0 && d>=GWEN_FSLOCK_TIMEOUT_ASK) { char buffer[2048]; haveAskedForUnlock=1; snprintf(buffer, sizeof(buffer)-1, I18N("There already is a lock for \"%s\".\n" "Either that lock is valid (e.g. some other process is currently " "holding that lock) or it is a stale lock of a process which " "for whatever reason did not remove the lock before terminating.\n" "\n" "This dialog allows for forced removal of that lock.\n" "\n" "WARNING: Only remove the lock if you are certain that " "no other process is actually holding the lock!\n" "\n" "Do you want to remove the possibly stale lock?\n" "" "

There already is a lock for %s.

" "

Either that lock is valid (e.g. some other process is currently " "holding that lock) or it is a stale lock of a process which " "for whatever reason did not remove the lock before terminating.

" "

This dialog allows for forced removal of that lock.

" "

Warning: " "Only remove the lock if you are certain that " "no other process is actually holding the lock!

" "

Do you want to remove the possibly stale lock?

" ""), fl->entryName, fl->entryName); buffer[sizeof(buffer)-1]=0; rv=GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_TYPE_INFO | GWEN_GUI_MSG_FLAGS_SEVERITY_NORMAL | GWEN_GUI_MSG_FLAGS_CONFIRM_B1, I18N("Possible Stale Lock"), buffer, I18N("Wait"), I18N("Remove Lock"), I18N("Abort"), progressId); if (rv==3) { DBG_ERROR(GWEN_LOGDOMAIN, "User aborted"); GWEN_Time_free(t0); GWEN_Gui_ProgressLog(progressId, GWEN_LoggerLevel_Notice, I18N("Aborted by user.")); GWEN_Gui_ProgressEnd(progressId); return GWEN_FSLock_ResultUserAbort; } else if (rv==2) { remove(fl->baseLockFilename); remove(fl->uniqueLockFilename); DBG_WARN(GWEN_LOGDOMAIN, "FS-Lock forcably released from %s", fl->entryName); GWEN_Gui_ProgressLog(progressId, GWEN_LoggerLevel_Notice, I18N("Lock removed by user request.")); doWait=0; /* reset timeout */ GWEN_Time_free(t0); t0=GWEN_CurrentTime(); assert(t0); } } } /* sleep for at most GWEN_GUI_CHECK_PERIOD */ if (doWait) GWEN_Socket_Select(0, 0, 0, distance); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Unexpected return code %d", rv); GWEN_Time_free(t0); GWEN_Gui_ProgressEnd(progressId); return rv; } } /* for */ GWEN_Gui_ProgressEnd(progressId); DBG_ERROR(GWEN_LOGDOMAIN, "We should never reach this point"); GWEN_Time_free(t0); return GWEN_FSLock_ResultError; } int GWEN_FSLock__UnifyLockFileName(GWEN_BUFFER *nbuf) { char buffer[256]; GWEN_Buffer_AppendString(nbuf, "."); buffer[0]=0; if (gethostname(buffer, sizeof(buffer)-1)) { DBG_ERROR(GWEN_LOGDOMAIN, "gethostname: %s", strerror(errno)); return -1; } buffer[sizeof(buffer)-1]=0; GWEN_Buffer_AppendString(nbuf, buffer); GWEN_Buffer_AppendString(nbuf, "-"); buffer[0]=0; snprintf(buffer, sizeof(buffer)-1, "%i", (int)getpid()); buffer[sizeof(buffer)-1]=0; GWEN_Buffer_AppendString(nbuf, buffer); return 0; } const char *GWEN_FSLock_GetName(const GWEN_FSLOCK *fl) { assert(fl); assert(fl->usage); return fl->entryName; } gwenhywfar-4.15.2beta/src/os/posix/semaphore.c0000644000175000017500000000420612364015347016251 00000000000000/*************************************************************************** begin : Tue Jul 29 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "semaphore_p.h" #include #include GWEN_SEMAPHORE *GWEN_Semaphore_new(void) { GWEN_SEMAPHORE *sm; GWEN_NEW_OBJECT(GWEN_SEMAPHORE, sm); sem_init(&(sm->sem), 0, 0); return sm; } void GWEN_Semaphore_free(GWEN_SEMAPHORE *sm) { if (sm) { sem_destroy(&(sm->sem)); GWEN_FREE_OBJECT(sm); } } void GWEN_Semaphore_Wait(GWEN_SEMAPHORE *sm) { assert(sm); sem_wait(&(sm->sem)); } void GWEN_Semaphore_Post(GWEN_SEMAPHORE *sm) { assert(sm); sem_post(&(sm->sem)); } gwenhywfar-4.15.2beta/src/os/posix/inetsocket.c0000644000175000017500000004046612416477066016456 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Tue Oct 02 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "inetsocket_p.h" #include "inetaddr_p.h" #include #include #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_ARPA_INET_H # include #endif GWEN_LIST_FUNCTIONS(GWEN_SOCKET, GWEN_Socket) GWEN_LIST2_FUNCTIONS(GWEN_SOCKET, GWEN_Socket) int GWEN_Socket_ModuleInit(void) { return 0; } int GWEN_Socket_ModuleFini(void) { return 0; } int GWEN_Socket_NetError2GwenError(int rv) { switch(rv) { case EINTR: return GWEN_ERROR_INTERRUPTED; case ENOTCONN: case EWOULDBLOCK: return GWEN_ERROR_TIMEOUT; case EACCES: case EPERM: return GWEN_ERROR_PERMISSIONS; case ECONNREFUSED: return GWEN_ERROR_CONN_REFUSED; case EISCONN: return GWEN_ERROR_OPEN; case ENETUNREACH: return GWEN_ERROR_NET_UNREACHABLE; case ETIMEDOUT: return GWEN_ERROR_NOT_OPEN; case ENOTSOCK: return GWEN_ERROR_INVALID; default: DBG_INFO(GWEN_LOGDOMAIN, "socket error: %d (%s)", rv, strerror(rv)); return GWEN_ERROR_IO; } } int GWEN_SocketSet_Clear(GWEN_SOCKETSET *ssp) { assert(ssp); FD_ZERO(&(ssp->set)); ssp->highest=0; return 0; } GWEN_SOCKETSET *GWEN_SocketSet_new(void) { GWEN_SOCKETSET *ssp; GWEN_NEW_OBJECT(GWEN_SOCKETSET, ssp); FD_ZERO(&(ssp->set)); return ssp; } void GWEN_SocketSet_free(GWEN_SOCKETSET *ssp) { if (ssp) { FD_ZERO(&(ssp->set)); GWEN_FREE_OBJECT(ssp); } } int GWEN_SocketSet_AddSocket(GWEN_SOCKETSET *ssp, const GWEN_SOCKET *sp) { assert(ssp); assert(sp); if (sp->socket==-1) { DBG_INFO(GWEN_LOGDOMAIN, "Socket is not connected, can not add"); return GWEN_ERROR_NOT_OPEN; } ssp->highest=(ssp->highestsocket)?sp->socket:ssp->highest; FD_SET(sp->socket,&(ssp->set)); ssp->count++; return 0; } int GWEN_SocketSet_RemoveSocket(GWEN_SOCKETSET *ssp, const GWEN_SOCKET *sp) { assert(ssp); assert(sp); ssp->highest=(ssp->highestsocket)?sp->socket:ssp->highest; FD_CLR(sp->socket,&(ssp->set)); ssp->count--; return 0; } int GWEN_SocketSet_HasSocket(GWEN_SOCKETSET *ssp, const GWEN_SOCKET *sp) { assert(ssp); assert(sp); return FD_ISSET(sp->socket,&(ssp->set)); } int GWEN_SocketSet_GetSocketCount(GWEN_SOCKETSET *ssp) { assert(ssp); return ssp->count; } GWEN_SOCKET *GWEN_Socket_new(GWEN_SOCKETTYPE socketType) { GWEN_SOCKET *sp; GWEN_NEW_OBJECT(GWEN_SOCKET, sp); GWEN_LIST_INIT(GWEN_SOCKET, sp); sp->type=socketType; return sp; } GWEN_SOCKET *GWEN_Socket_fromFile(int fd) { GWEN_SOCKET *sp; GWEN_NEW_OBJECT(GWEN_SOCKET, sp); GWEN_LIST_INIT(GWEN_SOCKET, sp); sp->type=GWEN_SocketTypeFile; sp->socket=fd; return sp; } void GWEN_Socket_free(GWEN_SOCKET *sp) { if (sp) { GWEN_LIST_FINI(GWEN_SOCKET, sp); GWEN_FREE_OBJECT(sp); } } int GWEN_Socket_Open(GWEN_SOCKET *sp) { int s; assert(sp); switch(sp->type) { case GWEN_SocketTypeTCP: #ifdef PF_INET s=socket(PF_INET, SOCK_STREAM,0); #else s=socket(AF_INET, SOCK_STREAM,0); #endif if (s==-1) { DBG_INFO(GWEN_LOGDOMAIN, "socket(): %s", strerror(errno)); return GWEN_ERROR_IO; } sp->socket=s; break; case GWEN_SocketTypeUDP: #ifdef PF_INET s=socket(PF_INET, SOCK_DGRAM,0); #else s=socket(AF_INET, SOCK_DGRAM,0); #endif if (s==-1) if (s==-1) { DBG_INFO(GWEN_LOGDOMAIN, "socket(): %s", strerror(errno)); return GWEN_ERROR_IO; } sp->socket=s; break; case GWEN_SocketTypeUnix: #ifdef PF_UNIX s=socket(PF_UNIX, SOCK_STREAM,0); #else s=socket(AF_UNIX, SOCK_STREAM,0); #endif if (s==-1) { DBG_INFO(GWEN_LOGDOMAIN, "socket(): %s", strerror(errno)); return GWEN_ERROR_IO; } sp->socket=s; DBG_INFO(GWEN_LOGDOMAIN, "Created socket %d", sp->socket); break; default: return GWEN_ERROR_BAD_SOCKETTYPE; } /* switch */ return 0; } int GWEN_Socket_Connect(GWEN_SOCKET *sp, const GWEN_INETADDRESS *addr) { assert(sp); if (connect(sp->socket, addr->address, addr->size)) { if (errno==EINPROGRESS) { DBG_INFO(GWEN_LOGDOMAIN, "Connection delayed"); return GWEN_ERROR_IN_PROGRESS; } else { DBG_INFO(GWEN_LOGDOMAIN, "connect(): %d (%s)", errno, strerror(errno)); return GWEN_Socket_NetError2GwenError(errno); } } return 0; } int GWEN_Socket_Close(GWEN_SOCKET *sp) { int rv; assert(sp); if (sp->socket==-1) return GWEN_ERROR_NOT_OPEN; DBG_INFO(GWEN_LOGDOMAIN, "Closing socket %d", sp->socket); rv=close(sp->socket); sp->socket=-1; if (rv==-1) { DBG_INFO(GWEN_LOGDOMAIN, "close(): %s", strerror(errno)); return GWEN_ERROR_IO; } return 0; } int GWEN_Socket_Bind(GWEN_SOCKET *sp, const GWEN_INETADDRESS *addr) { assert(sp); assert(addr); if (bind(sp->socket, addr->address, addr->size)) { DBG_INFO(GWEN_LOGDOMAIN, "bind(): %s", strerror(errno)); return GWEN_ERROR_IO; } return 0; } int GWEN_Socket_Listen(GWEN_SOCKET *sp, int backlog) { assert(sp); if (listen(sp->socket, backlog)) { DBG_INFO(GWEN_LOGDOMAIN, "listen(): %s", strerror(errno)); return GWEN_ERROR_IO; } return 0; } int GWEN_Socket_Accept(GWEN_SOCKET *sp, GWEN_INETADDRESS **newaddr, GWEN_SOCKET **newsock) { unsigned int addrlen; GWEN_INETADDRESS *localAddr; GWEN_SOCKET *localSocket; GWEN_AddressFamily af; assert(sp); assert(newsock); assert(newaddr); switch(sp->type) { case GWEN_SocketTypeTCP: case GWEN_SocketTypeUDP: af=GWEN_AddressFamilyIP; break; case GWEN_SocketTypeUnix: af=GWEN_AddressFamilyUnix; break; default: return GWEN_ERROR_BAD_SOCKETTYPE; } /* switch */ localAddr=GWEN_InetAddr_new(af); addrlen=localAddr->size; localSocket=GWEN_Socket_new(sp->type); localSocket->socket=accept(sp->socket, localAddr->address, &addrlen); if (localSocket->socket==-1) { GWEN_InetAddr_free(localAddr); GWEN_Socket_free(localSocket); if (errno==EAGAIN || errno==ENOTCONN) return GWEN_ERROR_TIMEOUT; else { DBG_INFO(GWEN_LOGDOMAIN, "accept(): %s", strerror(errno)); return GWEN_ERROR_IO; } } localSocket->type=sp->type; localAddr->size=addrlen; *newaddr=localAddr; *newsock=localSocket; return 0; } int GWEN_Socket_GetPeerAddr(GWEN_SOCKET *sp, GWEN_INETADDRESS **newaddr) { unsigned int addrlen; GWEN_INETADDRESS *localAddr; GWEN_AddressFamily af; assert(sp); assert(newaddr); switch(sp->type) { case GWEN_SocketTypeTCP: case GWEN_SocketTypeUDP: af=GWEN_AddressFamilyIP; break; case GWEN_SocketTypeUnix: af=GWEN_AddressFamilyUnix; break; default: return GWEN_ERROR_BAD_SOCKETTYPE; } /* switch */ localAddr=GWEN_InetAddr_new(af); addrlen=localAddr->size; if (getpeername(sp->socket, localAddr->address, &addrlen)) { GWEN_InetAddr_free(localAddr); DBG_INFO(GWEN_LOGDOMAIN, "getpeername(): %s", strerror(errno)); return GWEN_ERROR_IO; } localAddr->size=addrlen; *newaddr=localAddr; return 0; } int GWEN_Socket_Select(GWEN_SOCKETSET *rs, GWEN_SOCKETSET *ws, GWEN_SOCKETSET *xs, int timeout) { int h,h1,h2,h3; fd_set *s1,*s2,*s3; int rv; struct timeval tv; s1=s2=s3=0; h1=h2=h3=0; if (rs && rs->count) { h1=rs->highest; s1=&rs->set; } if (ws && ws->count) { h2=ws->highest; s2=&ws->set; } if (xs && xs->count) { h3=xs->highest; s3=&xs->set; } h=(h1>h2)?h1:h2; h=(h>h3)?h:h3; if (timeout<0) { /* wait for ever */ rv=select(h+1,s1,s2,s3,0); } else { uint32_t tmicro; uint32_t tsecs; tmicro=timeout*1000; tsecs=tmicro/1000000UL; tmicro%=1000000UL; /* return immediately */ tv.tv_sec=tsecs; tv.tv_usec=tmicro; #if 0 { int i; if (s1) { DBG_INFO(GWEN_LOGDOMAIN, "Read sockets: (%d/%d)", h1, h); for (i=0; i<=h; i++) { if (FD_ISSET(i,s1)) { DBG_INFO(GWEN_LOGDOMAIN, "Found socket %d", i); } } } if (s2) { DBG_INFO(GWEN_LOGDOMAIN, "Write sockets: (%d/%d)", h2, h); for (i=0; i<=h; i++) { if (FD_ISSET(i,s2)) { DBG_INFO(GWEN_LOGDOMAIN, "Found socket %d", i); } } } DBG_INFO(GWEN_LOGDOMAIN, "Times: %ld/%ld", tv.tv_sec, tv.tv_usec); DBG_INFO(GWEN_LOGDOMAIN, "h=%d", h); } #endif rv=select(h+1,s1,s2,s3,&tv); } if (rv<0) { /* error */ if (errno==EINTR) return GWEN_ERROR_INTERRUPTED; else { DBG_INFO(GWEN_LOGDOMAIN, "select(): %s", strerror(errno)); return GWEN_ERROR_IO; } } if (rv==0) /* timeout */ return GWEN_ERROR_TIMEOUT; return 0; } int GWEN_Socket_Read(GWEN_SOCKET *sp, char *buffer, int *bsize) { int i; assert(sp); assert(buffer); assert(bsize); i=recv(sp->socket,buffer, *bsize,0); if (i<0) { if (errno==EAGAIN || errno==ENOTCONN) return GWEN_ERROR_TIMEOUT; else if (errno==EINTR) return GWEN_ERROR_INTERRUPTED; else { DBG_INFO(GWEN_LOGDOMAIN, "recv(): %s", strerror(errno)); return GWEN_ERROR_IO; } } *bsize=i; return 0; } int GWEN_Socket_Write(GWEN_SOCKET *sp, const char *buffer, int *bsize) { int i; assert(sp); assert(buffer); assert(bsize); i=send(sp->socket, buffer, *bsize, 0 #ifdef MSG_NOSIGNAL | MSG_NOSIGNAL #endif #ifdef MSG_DONTWAIT | MSG_DONTWAIT #endif ); if (i<0) { if (errno==EAGAIN || errno==ENOTCONN) return GWEN_ERROR_TIMEOUT; else if (errno==EINTR) return GWEN_ERROR_INTERRUPTED; else { DBG_INFO(GWEN_LOGDOMAIN, "send(): %d (%s)", errno, strerror(errno)); return GWEN_ERROR_IO; } } *bsize=i; return 0; } int GWEN_Socket_ReadFrom(GWEN_SOCKET *sp, GWEN_INETADDRESS **newaddr, char *buffer, int *bsize) { unsigned int addrlen; int i; GWEN_INETADDRESS *localAddr; GWEN_AddressFamily af; assert(sp); assert(newaddr); assert(buffer); assert(bsize); switch(sp->type) { case GWEN_SocketTypeTCP: case GWEN_SocketTypeUDP: af=GWEN_AddressFamilyIP; break; case GWEN_SocketTypeUnix: af=GWEN_AddressFamilyUnix; break; default: return GWEN_ERROR_BAD_SOCKETTYPE; } /* switch */ localAddr=GWEN_InetAddr_new(af); addrlen=localAddr->size; i=recvfrom(sp->socket, buffer, *bsize, 0, localAddr->address, &addrlen); if (i<0) { GWEN_InetAddr_free(localAddr); if (errno==EAGAIN || errno==ENOTCONN) return GWEN_ERROR_TIMEOUT; else if (errno==EINTR) return GWEN_ERROR_INTERRUPTED; else { DBG_INFO(GWEN_LOGDOMAIN, "recvfrom(): %s", strerror(errno)); return GWEN_ERROR_IO; } } *bsize=i; localAddr->size=addrlen; *newaddr=localAddr; return 0; } int GWEN_Socket_WriteTo(GWEN_SOCKET *sp, const GWEN_INETADDRESS *addr, const char *buffer, int *bsize) { int i; assert(sp); assert(addr); assert(buffer); assert(bsize); i=sendto(sp->socket, buffer, *bsize, #ifndef MSG_NOSIGNAL 0, #else MSG_NOSIGNAL, #endif addr->address, addr->size); if (i<0) { if (errno==EAGAIN || errno==ENOTCONN) return GWEN_ERROR_TIMEOUT; else if (errno==EINTR) return GWEN_ERROR_INTERRUPTED; else { DBG_INFO(GWEN_LOGDOMAIN, "sendto(): %s", strerror(errno)); return GWEN_ERROR_IO; } } *bsize=i; return 0; } int GWEN_Socket_SetBlocking(GWEN_SOCKET *sp, int fl) { int prevFlags; int newFlags; assert(sp); /* get current socket flags */ prevFlags=fcntl(sp->socket,F_GETFL); if (prevFlags==-1) { DBG_INFO(GWEN_LOGDOMAIN, "fcntl(): %s", strerror(errno)); return GWEN_ERROR_IO; } /* set nonblocking/blocking */ if (fl) newFlags=prevFlags&(~O_NONBLOCK); else newFlags=prevFlags|O_NONBLOCK; if (-1==fcntl(sp->socket,F_SETFL,newFlags)) { DBG_INFO(GWEN_LOGDOMAIN, "fcntl(): %s", strerror(errno)); return GWEN_ERROR_IO; } prevFlags=fcntl(sp->socket,F_GETFL); if (prevFlags!=newFlags) { DBG_ERROR(GWEN_LOGDOMAIN, "fcntl() did not set flags correctly (%08x!=%08x)", prevFlags, newFlags); return GWEN_ERROR_IO; } return 0; } int GWEN_Socket_SetBroadcast(GWEN_SOCKET *sp, int fl) { assert(sp); if (sp->type==GWEN_SocketTypeUnix) return 0; if (setsockopt(sp->socket, SOL_SOCKET, SO_BROADCAST, &fl, sizeof(fl))) { DBG_INFO(GWEN_LOGDOMAIN, "setsockopt(): %s", strerror(errno)); return GWEN_ERROR_IO; } return 0; } int GWEN_Socket_SetReuseAddress(GWEN_SOCKET *sp, int fl) { assert(sp); /*if (sp->type==SocketTypeUnix) return 0;*/ if (setsockopt(sp->socket, SOL_SOCKET, SO_REUSEADDR, &fl, sizeof(fl))) { DBG_INFO(GWEN_LOGDOMAIN, "setsockopt(): %s", strerror(errno)); return GWEN_ERROR_IO; } return 0; } int GWEN_Socket_GetSocketError(GWEN_SOCKET *sp) { int rv; unsigned int rvs; assert(sp); rvs=sizeof(rv); if (-1==getsockopt(sp->socket,SOL_SOCKET,SO_ERROR,&rv,&rvs)) { DBG_INFO(GWEN_LOGDOMAIN, "getsockopt(): %s", strerror(errno)); return GWEN_ERROR_IO; } if (rv) return GWEN_Socket_NetError2GwenError(rv); return 0; } int GWEN_Socket_WaitForRead(GWEN_SOCKET *sp, int timeout) { int err; GWEN_SOCKETSET *set; set=GWEN_SocketSet_new(); err=GWEN_SocketSet_AddSocket(set,sp); if (err) { GWEN_SocketSet_free(set); return err; } err=GWEN_Socket_Select(set,0,0,timeout); GWEN_SocketSet_free(set); return err; } int GWEN_Socket_WaitForWrite(GWEN_SOCKET *sp, int timeout) { int err; GWEN_SOCKETSET *set; set=GWEN_SocketSet_new(); err=GWEN_SocketSet_AddSocket(set,sp); if (err) { GWEN_SocketSet_free(set); return err; } err=GWEN_Socket_Select(0,set,0,timeout); GWEN_SocketSet_free(set); return err; } GWEN_SOCKETTYPE GWEN_Socket_GetSocketType(GWEN_SOCKET *sp) { assert(sp); return sp->type; } int GWEN_Socket_GetSocketInt(const GWEN_SOCKET *sp) { assert(sp); return sp->socket; } gwenhywfar-4.15.2beta/src/os/posix/gwentime.c0000644000175000017500000000425312416477066016117 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Wed Mar 24 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwentime_p.h" #include "../gwentime_l.h" #include #include #include #include #include #include #include int GWEN_Time__GetCurrentTime(GWEN_TIME *ti) { struct timezone tz; struct timeval tv; if (gettimeofday(&tv, &tz)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not get current time"); return -1; } GWEN_Time__SetSecsAndMSecs(ti, tv.tv_sec, tv.tv_usec/1000); return 0; } gwenhywfar-4.15.2beta/src/os/posix/semaphore_p.h0000644000175000017500000000333512364015347016577 00000000000000/*************************************************************************** begin : Tue Jul 29 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_SEMAPHORE_P_H #define GWEN_SEMAPHORE_P_H #include #include struct GWEN_SEMAPHORE { sem_t sem; }; #endif gwenhywfar-4.15.2beta/src/os/posix/README0000644000175000017500000000021112364015347014772 00000000000000This folder contains system-dependant modules for POSIX systems. Supported systems are: - Linux - FreeBSD - OpenBSD - NetBSD - BeOS gwenhywfar-4.15.2beta/src/os/posix/inetaddr_p.h0000644000175000017500000000441412364015347016405 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Tue Oct 02 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /** * @file chameleon/inetaddr_p.h * @short This file contains the internet address handling module */ #ifndef GWEN_INETADDR_P_H #define GWEN_INETADDR_P_H #include #include #include #include #include #include #ifdef HAVE_ARPA_INET_H # include #endif #ifdef __cplusplus extern "C" { #endif /** * @internal */ GWENHYWFAR_API struct GWEN_INETADDRESSSTRUCT { GWEN_AddressFamily af; int size; struct sockaddr *address; }; #ifdef __cplusplus } #endif /*@} defgroup */ #endif /* MOD_INETADDR_H */ gwenhywfar-4.15.2beta/src/os/Makefile.in0000644000175000017500000007234712634022415015032 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/os DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(iheader_HEADERS) $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libos_la_DEPENDENCIES = @GWEN_OS@/libosimpl.la am_libos_la_OBJECTS = directory_all.lo gwentime_all.lo gwendate.lo libos_la_OBJECTS = $(am_libos_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libos_la_SOURCES) DIST_SOURCES = $(libos_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(iheaderdir)" HEADERS = $(iheader_HEADERS) $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/parser @all_includes@ AM_CFLAGS = @visibility_cflags@ -DBUILDING_GWENHYWFAR SUBDIRS = @GWEN_OS@ DIST_SUBDIRS = posix windows iheaderdir = $(gwenhywfar_headerdir_am)/gwenhywfar iheader_HEADERS = \ directory.h \ fslock.h \ gwentime.h \ inetaddr.h \ inetsocket.h \ libloader.h \ process.h \ mutex.h \ gwensemaphore.h \ gwendate.h noinst_HEADERS = \ gwendate_p.h \ gwentime_l.h \ gwentime_p.h \ inetaddr_l.h \ inetsocket_l.h \ libloader_l.h \ process_l.h noinst_LTLIBRARIES = libos.la libos_la_SOURCES = \ directory_all.c \ gwentime_all.c \ gwendate.c libos_la_LIBADD = @GWEN_OS@/libosimpl.la all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/os/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/os/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libos.la: $(libos_la_OBJECTS) $(libos_la_DEPENDENCIES) $(EXTRA_libos_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libos_la_OBJECTS) $(libos_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/directory_all.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gwendate.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gwentime_all.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-iheaderHEADERS: $(iheader_HEADERS) @$(NORMAL_INSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(iheaderdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(iheaderdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(iheaderdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(iheaderdir)" || exit $$?; \ done uninstall-iheaderHEADERS: @$(NORMAL_UNINSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(iheaderdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(iheaderdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-iheaderHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-iheaderHEADERS .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-iheaderHEADERS install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-iheaderHEADERS sources: for f in $(libos_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/src/os/process_l.h0000644000175000017500000000352012364015347015120 00000000000000/*************************************************************************** begin : Sat Dec 27 2003 copyright : (C) 2003-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_PROCESS_L_H #define GWENHYWFAR_PROCESS_L_H #include /** * Initialize this module. */ int GWEN_Process_ModuleInit(void); /** * De-Initialize this module. */ int GWEN_Process_ModuleFini(void); #endif /* GWENHYWFAR_PROCESS_L_H */ gwenhywfar-4.15.2beta/src/os/windows/0000755000175000017500000000000012643267235014535 500000000000000gwenhywfar-4.15.2beta/src/os/windows/mutex.c0000644000175000017500000000427612364015347015767 00000000000000/*************************************************************************** begin : Mon Jul 14 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "mutex_p.h" #include #include GWEN_MUTEX *GWEN_Mutex_new(void) { GWEN_MUTEX *mtx; GWEN_NEW_OBJECT(GWEN_MUTEX, mtx); InitializeCriticalSection(&(mtx->criticalSection)); return mtx; } void GWEN_Mutex_free(GWEN_MUTEX *mtx) { if (mtx) { DeleteCriticalSection(&(mtx->criticalSection)); GWEN_FREE_OBJECT(mtx); } } int GWEN_Mutex_Lock(GWEN_MUTEX *mtx) { EnterCriticalSection(&(mtx->criticalSection)); return 0; } int GWEN_Mutex_Unlock(GWEN_MUTEX *mtx) { LeaveCriticalSection(&(mtx->criticalSection)); return 0; } gwenhywfar-4.15.2beta/src/os/windows/libloader_p.h0000644000175000017500000000423112416477066017105 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Fri Nov 22 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_LIBLOADER_P_H #define GWENHYWFAR_LIBLOADER_P_H "$Id" #include #include #include #include struct GWEN_LIBLOADER { void *handle; }; int GWEN_LibLoader_LoadLibrary(GWEN_LIBLOADER *h, const char *name); int GWEN_LibLoader__OpenLibraryWithPath(GWEN_LIBLOADER *h, const char *path, const char *name); #endif /* GWENHYWFAR_LIBLOADER_P_H */ gwenhywfar-4.15.2beta/src/os/windows/init.c0000644000175000017500000000506112364015347015561 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Wed Mar 27 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /* Changes */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include /** * This is a simple initialisation function. It really does nothing (for * now). */ BOOL APIENTRY DllMain(HINSTANCE hInst, DWORD reason, LPVOID reserved) { int err; switch (reason) { case DLL_PROCESS_ATTACH: err=GWEN_Init(); if (err) { fprintf(stderr, "Could not initialize Gwenhywfar, aborting\n"); return FALSE; } /* DEBUG */ /* fprintf(stderr, "Gwenhywfar initialized.\n"); */ break; case DLL_PROCESS_DETACH: err=GWEN_Fini(); if (err) { fprintf(stderr, "Could not deinitialize Gwenhywfar\n"); } /* DEBUG */ /* fprintf(stderr, "Gwenhywfar deinitialized.\n"); */ break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; } return TRUE; } gwenhywfar-4.15.2beta/src/os/windows/process_p.h0000644000175000017500000000400312364015347016613 00000000000000/*************************************************************************** begin : Sun Dec 28 2003 copyright : (C) 2003-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_PROCESS_P_H #define GWENHYWFAR_PROCESS_P_H "$Id" #include #include #define GWEN_PROCESS_EXITCODE_ABORT 253 struct GWEN_PROCESS { PROCESS_INFORMATION processInfo; GWEN_PROCESS_STATE state; int result; int finished; uint32_t pflags; GWEN_SYNCIO *stdIn; GWEN_SYNCIO *stdOut; GWEN_SYNCIO *stdErr; }; GWEN_PROCESS_STATE GWEN_Process_MakeState(GWEN_PROCESS *pr, DWORD status); #endif gwenhywfar-4.15.2beta/src/os/windows/syncio_file_p.h0000644000175000017500000000470312416477066017457 00000000000000/*************************************************************************** begin : Tue Apr 27 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_SYNCIO_FILE_P_H #define GWENHYWFAR_SYNCIO_FILE_P_H #include "syncio_file_l.h" #include typedef struct GWEN_SYNCIO_FILE GWEN_SYNCIO_FILE; struct GWEN_SYNCIO_FILE { char *path; GWEN_SYNCIO_FILE_CREATIONMODE creationMode; HANDLE fh; }; static void GWENHYWFAR_CB GWEN_SyncIo_File_FreeData(void *bp, void *p); static GWEN_SYNCIO *GWEN_SyncIo_File_fromStdHandle(HANDLE hd, const char *hname); static int GWENHYWFAR_CB GWEN_SyncIo_File_Connect(GWEN_SYNCIO *sio); static int GWENHYWFAR_CB GWEN_SyncIo_File_Disconnect(GWEN_SYNCIO *sio); static int GWENHYWFAR_CB GWEN_SyncIo_File_Read(GWEN_SYNCIO *sio, uint8_t *buffer, uint32_t size); static int GWENHYWFAR_CB GWEN_SyncIo_File_Write(GWEN_SYNCIO *sio, const uint8_t *buffer, uint32_t size); /* not static! */ int64_t GWEN_SyncIo_File_Seek(GWEN_SYNCIO *sio, int64_t pos, GWEN_SYNCIO_FILE_WHENCE whence); #endif gwenhywfar-4.15.2beta/src/os/windows/inetaddr.c0000644000175000017500000002041112416477066016414 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Tue Oct 02 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "inetaddr_p.h" #include #include #include #include #include "gwenhywfar/debug.h" /* #define MEMTRACE */ #ifdef MEMTRACE static int GWEN_INETADDR__Counter=0; #endif uint32_t GWEN_InetAddr_GetCapabilities(void) { return GWEN_INETADDR_CAPS_AF_TCP; } int GWEN_InetAddr_ModuleInit(void) { return 0; } int GWEN_InetAddr_ModuleFini(void) { return 0; } GWEN_INETADDRESS *GWEN_InetAddr_new(GWEN_AddressFamily af) { GWEN_INETADDRESS *ia; GWEN_NEW_OBJECT(GWEN_INETADDRESS, ia); ia->af=af; switch(ia->af) { case GWEN_AddressFamilyIP: { struct sockaddr_in *aptr; ia->address=(struct sockaddr*)malloc(sizeof(struct sockaddr_in)); assert(ia->address); aptr=(struct sockaddr_in*)(ia->address); ia->size=sizeof(struct sockaddr_in); memset(ia->address,0,ia->size); #ifdef PF_INET aptr->sin_family=PF_INET; #else aptr->sin_family=AF_INET; #endif break; } case GWEN_AddressFamilyUnix: { DBG_ERROR(GWEN_LOGDOMAIN, "No unix domain sockets available for this system"); GWEN_InetAddr_free(ia); return 0; break; } default: DBG_ERROR(GWEN_LOGDOMAIN, "Unknown address family (%d)",af); abort(); } /* switch */ #ifdef MEMTRACE GWEN_INETADDR__Counter++; DBG_INFO(GWEN_LOGDOMAIN, "InetAddr created, now %d",GWEN_INETADDR__Counter); #endif return ia; } GWEN_INETADDRESS *GWEN_InetAddr_dup(const GWEN_INETADDRESS *oa) { GWEN_INETADDRESS *ia; GWEN_NEW_OBJECT(GWEN_INETADDRESS, ia); ia->af=oa->af; ia->size=oa->size; ia->address=(struct sockaddr *)malloc(sizeof(struct sockaddr)); assert(ia->address); memmove(ia->address, oa->address, sizeof(struct sockaddr)); return ia; } void GWEN_InetAddr_free(GWEN_INETADDRESS *ia) { if (ia) { #ifdef MEMTRACE GWEN_INETADDR__Counter--; DBG_INFO(GWEN_LOGDOMAIN, "Free InetAddr, makes %d",GWEN_INETADDR__Counter); #endif free(ia->address); GWEN_FREE_OBJECT(ia); } } int GWEN_InetAddr_SetAddress(GWEN_INETADDRESS *ia, const char *addr) { assert(ia); switch (ia->af) { case GWEN_AddressFamilyIP: { struct sockaddr_in *aptr; aptr=(struct sockaddr_in*)(ia->address); /* reset */ #ifdef PF_INET aptr->sin_family=PF_INET; #else aptr->sin_family=AF_INET; #endif aptr->sin_addr.s_addr=0; #if 1 if (addr) { /* ok, address to be set */ aptr->sin_addr.s_addr=inet_addr(addr); if (aptr->sin_addr.s_addr==INADDR_NONE) /* bad address, so maybe it rather is a name */ return GWEN_ERROR_BAD_ADDRESS; } #endif #if 0 /* this would be much better, but windows does not have inet_aton */ if (addr) { /* ok, address to be set */ if (!inet_aton(addr,&aptr->sin_addr)) /* bad address, so maybe it rather is a name */ return GWEN_ERROR_BAD_ADDRESS; } #endif break; } case GWEN_AddressFamilyUnix: { DBG_ERROR(GWEN_LOGDOMAIN, "No unix domain sockets available for this system"); return GWEN_ERROR_BAD_ADDRESS_FAMILY; break; } default: return GWEN_ERROR_BAD_ADDRESS_FAMILY; } /* switch */ return 0; } /* internal function */ int GWEN_InetAddr_TranslateHError(int herr) { int rv; switch(herr) { case WSAHOST_NOT_FOUND: rv=GWEN_ERROR_HOST_NOT_FOUND; break; case WSANO_ADDRESS: rv=GWEN_ERROR_NO_ADDRESS; break; case WSANO_RECOVERY: rv=GWEN_ERROR_NO_RECOVERY; break; case WSATRY_AGAIN: rv=GWEN_ERROR_TRY_AGAIN; break; default: rv=GWEN_ERROR_UNKNOWN_DNS_ERROR; break; } /* switch */ return rv; } int GWEN_InetAddr_SetName(GWEN_INETADDRESS *ia, const char *name) { struct hostent *he; assert(ia); switch (ia->af) { case GWEN_AddressFamilyIP: { struct sockaddr_in *aptr; aptr=(struct sockaddr_in*)(ia->address); /* try to resolve name */ he=gethostbyname(name); if (!he) return GWEN_InetAddr_TranslateHError(h_errno); /* name resolved, store address */ memcpy(&(aptr->sin_addr), he->h_addr_list[0], sizeof(struct in_addr)); break; } case GWEN_AddressFamilyUnix: { DBG_ERROR(GWEN_LOGDOMAIN, "No unix domain sockets available for this system"); return GWEN_ERROR_BAD_ADDRESS_FAMILY; break; } default: return GWEN_ERROR_BAD_ADDRESS_FAMILY; } /* switch */ return 0; } int GWEN_InetAddr_GetAddress(const GWEN_INETADDRESS *ia, char *buffer, unsigned int bsize) { const char *s; assert(ia); assert(buffer); switch (ia->af) { case GWEN_AddressFamilyIP: { struct sockaddr_in *aptr; aptr=(struct sockaddr_in*)(ia->address); s=inet_ntoa(aptr->sin_addr); assert(s); if (strlen(s)+1>bsize) return GWEN_ERROR_BUFFER_OVERFLOW; strcpy(buffer,s); break; } case GWEN_AddressFamilyUnix: { return GWEN_ERROR_BAD_ADDRESS_FAMILY; break; } default: return GWEN_ERROR_BAD_ADDRESS_FAMILY; } /* switch */ return 0; } int GWEN_InetAddr_GetName(const GWEN_INETADDRESS *ia, char *buffer, unsigned int bsize) { struct hostent *he; struct in_addr lia; assert(ia); assert(buffer); switch (ia->af) { case GWEN_AddressFamilyIP: { struct sockaddr_in *aptr; aptr=(struct sockaddr_in*)(ia->address); /* resolve name from address */ lia=aptr->sin_addr; #ifdef PF_INET he=gethostbyaddr((char*)&lia,sizeof(lia),PF_INET); #else he=gethostbyaddr((char*)&lia,sizeof(lia),AF_INET); #endif if (!he) return GWEN_InetAddr_TranslateHError(h_errno); /* copy name into given buffer */ assert(he->h_name); if (strlen(he->h_name)+1>bsize) return GWEN_ERROR_BUFFER_OVERFLOW; /* copy the name into the buffer */ strcpy(buffer,he->h_name); break; } case GWEN_AddressFamilyUnix: { return GWEN_ERROR_BAD_ADDRESS_FAMILY; break; } default: return GWEN_ERROR_BAD_ADDRESS_FAMILY; } /* switch */ /* finished */ return 0; } int GWEN_InetAddr_GetPort(const GWEN_INETADDRESS *ia) { int i; assert(ia); switch (ia->af) { case GWEN_AddressFamilyIP: { struct sockaddr_in *aptr; aptr=(struct sockaddr_in*)(ia->address); i=ntohs(aptr->sin_port); break; } default: DBG_WARN(GWEN_LOGDOMAIN, "not an IP address"); i=0; } /* switch */ return i; } int GWEN_InetAddr_SetPort(GWEN_INETADDRESS *ia, int port) { assert(ia); switch (ia->af) { case GWEN_AddressFamilyIP: { struct sockaddr_in *aptr; aptr=(struct sockaddr_in*)(ia->address); aptr->sin_port=htons(port); break; } default: return GWEN_ERROR_BAD_ADDRESS_FAMILY; } /* switch */ return 0; } gwenhywfar-4.15.2beta/src/os/windows/directory.c0000644000175000017500000001562312416477066016637 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Tue Dec 03 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "directory_p.h" #include #include #include #include #include GWEN_DIRECTORY *GWEN_Directory_new(void) { GWEN_DIRECTORY *d; GWEN_NEW_OBJECT(GWEN_DIRECTORY, d); return d; } void GWEN_Directory_free(GWEN_DIRECTORY *d) { if (d) { if (d->handle!=INVALID_HANDLE_VALUE) FindClose(d->handle); d->handle=INVALID_HANDLE_VALUE; GWEN_FREE_OBJECT(d); } } int GWEN_Directory_Open(GWEN_DIRECTORY *d, const char *n) { assert(d); assert(n); if ((strlen(n)+5)>=sizeof(d->pattern)) { DBG_ERROR(GWEN_LOGDOMAIN, "Directory name too long"); return GWEN_ERROR_BUFFER_OVERFLOW; } strcpy(d->pattern, n); strcat(d->pattern, "\\*.*"); return GWEN_Directory_Rewind(d);; } int GWEN_Directory_Close(GWEN_DIRECTORY *d) { int rv; rv=0; if (d->handle!=INVALID_HANDLE_VALUE) rv=!FindClose(d->handle); d->handle=INVALID_HANDLE_VALUE; return rv; } int GWEN_Directory_Read(GWEN_DIRECTORY *d, char *buffer, unsigned int len) { WIN32_FIND_DATA wd; assert(d); assert(buffer); assert(len); assert(d->handle); if (d->lastName[0]==0) { DBG_INFO(GWEN_LOGDOMAIN, "No more entries"); return GWEN_ERROR_NOT_FOUND; } /* copy existing entry */ if ((strlen(d->lastName)>=len)) { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer too small"); return GWEN_ERROR_BUFFER_OVERFLOW; } strcpy(buffer, d->lastName); /* read next entry */ d->lastName[0]=0; if (FindNextFile(d->handle,&wd)) { if ((strlen(wd.cFileName)+1)>=sizeof(d->lastName)) { DBG_ERROR(GWEN_LOGDOMAIN, "Entry too long"); } strcpy(d->lastName,wd.cFileName); } return 0; } int GWEN_Directory_Rewind(GWEN_DIRECTORY *d) { WIN32_FIND_DATA wd; assert(d); d->handle=FindFirstFile(d->pattern,&wd); if (d->handle==INVALID_HANDLE_VALUE) { DBG_DEBUG(GWEN_LOGDOMAIN, "No entry for \"%s\"", d->pattern); return GWEN_ERROR_NOT_FOUND; } if ((strlen(wd.cFileName)+1)>=sizeof(d->lastName)) { DBG_ERROR(GWEN_LOGDOMAIN, "Entry name too long"); return GWEN_ERROR_BUFFER_OVERFLOW; } strcpy(d->lastName,wd.cFileName); return 0; } int GWEN_Directory_Create(const char *path) { if (_mkdir(path)) { DBG_INFO(GWEN_LOGDOMAIN, "Error on _mkdir(%s): %s", path, strerror(errno)); return -1; } return 0; } int GWEN_Directory_CreatePublic(const char *path) { /* same as above, since on WIN32 all folders are public (gulp) */ return GWEN_Directory_Create(path); } /** Returns TRUE (nonzero) if the given path is an absolute one. */ static int path_is_absolute(const char *path) { return path && ( (path[0] == '\\') || (path[0] == '/') || ( (strlen(path) > 2) && (path[1] == ':') ) ); } int GWEN_Directory_GetHomeDirectory(char *buffer, unsigned int size) { int rv; char *home_dir; /* Taken from http://svn.gnome.org/viewcvs/glib/trunk/glib/gutils.c, see the lookup of the g_home_dir variable in g_get_any_init_do(). */ /* We check $HOME first for Win32, though it is a last resort for Unix * where we prefer the results of getpwuid(). */ home_dir = getenv ("HOME"); /* Only believe HOME if it is an absolute path and exists */ if (home_dir) { if (!(path_is_absolute (home_dir) /* && g_file_test (home_dir, G_FILE_TEST_IS_DIR) */ )) { home_dir = NULL; } } if (!home_dir) { /* USERPROFILE is probably the closest equivalent to $HOME? */ if (getenv ("USERPROFILE") != NULL) home_dir = getenv ("USERPROFILE"); } /* Did we find any home_dir? Copy it to buffer. */ if (home_dir) { char *p; rv = strlen (home_dir); strncpy (buffer, home_dir, size); /* In case HOME is Unix-style (it happens), convert it to * Windows style. */ while ((p = strchr (buffer, '/')) != NULL) *p = '\\'; } else { rv=GetWindowsDirectory(buffer, size); if (rv==0) { DBG_INFO(GWEN_LOGDOMAIN, "Error on GetWindowsDirectory"); return -1; } } if (rv>=size) { DBG_INFO(GWEN_LOGDOMAIN, "Buffer too small"); return -1; } return 0; } int GWEN_Directory_GetPrefixDirectory(char *buffer, unsigned int size) { DWORD rv; char *p; char cwd[256]; /* Get the absolute path to the executable, including its name */ rv=GetModuleFileName(NULL, cwd, sizeof(cwd)-1); if (rv==0) { DBG_ERROR(GWEN_LOGDOMAIN, "GetModuleFileName(): %d", (int)GetLastError()); return GWEN_ERROR_IO; } /* Find the last DIRSEP and set it to NULL so that we now have the bindir. */ p=strrchr(cwd, '\\'); if (p) { *p=0; } /* Find again the last DIRSEP to check whether the path ends in "bin" or "lib". */ p=strrchr(cwd, '\\'); if (p) { /* DIRSEP was found and p points to it. p+1 points either to the rest of the string or the '\0' byte, so we can use it here. */ if ((strcmp(p+1, "bin") == 0) || (strcmp(p+1, "lib") == 0)) { /* The path ends in "bin" or "lib", hence we strip that suffix so that we now only have the prefix. */ *p=0; } } if ((strlen(cwd)+1)>=size) return GWEN_ERROR_BUFFER_OVERFLOW; strcpy(buffer, cwd); return 0; } gwenhywfar-4.15.2beta/src/os/windows/directory_p.h0000644000175000017500000000415712364015347017153 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Tue Dec 03 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /** * @file chameleon/directory_p.h * @short This file contains the directory handling module */ #ifndef GWEN_DIRECTORY_P_H #define GWEN_DIRECTORY_P_H #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif struct GWEN_DIRECTORY { char pattern[256]; HANDLE handle; char lastName[256]; }; #ifdef __cplusplus } #endif #endif /* GWEN_DIRECTORY_P_H */ gwenhywfar-4.15.2beta/src/os/windows/syncio_file.c0000644000175000017500000002335612416477066017140 00000000000000/*************************************************************************** begin : Tue Apr 27 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "syncio_file_p.h" #include #include #include GWEN_INHERIT(GWEN_SYNCIO, GWEN_SYNCIO_FILE) GWEN_SYNCIO *GWEN_SyncIo_File_new(const char *path, GWEN_SYNCIO_FILE_CREATIONMODE cm) { GWEN_SYNCIO *sio; GWEN_SYNCIO_FILE *xio; assert(path); sio=GWEN_SyncIo_new(GWEN_SYNCIO_FILE_TYPE, NULL); GWEN_NEW_OBJECT(GWEN_SYNCIO_FILE, xio); GWEN_INHERIT_SETDATA(GWEN_SYNCIO, GWEN_SYNCIO_FILE, sio, xio, GWEN_SyncIo_File_FreeData); xio->creationMode=cm; xio->path=strdup(path); xio->fh=INVALID_HANDLE_VALUE; GWEN_SyncIo_SetConnectFn(sio, GWEN_SyncIo_File_Connect); GWEN_SyncIo_SetDisconnectFn(sio, GWEN_SyncIo_File_Disconnect); GWEN_SyncIo_SetReadFn(sio, GWEN_SyncIo_File_Read); GWEN_SyncIo_SetWriteFn(sio, GWEN_SyncIo_File_Write); return sio; } GWEN_SYNCIO *GWEN_SyncIo_File_fromHandle(HANDLE hd) { GWEN_SYNCIO *sio; GWEN_SYNCIO_FILE *xio; sio=GWEN_SyncIo_new(GWEN_SYNCIO_FILE_TYPE, NULL); GWEN_NEW_OBJECT(GWEN_SYNCIO_FILE, xio); GWEN_INHERIT_SETDATA(GWEN_SYNCIO, GWEN_SYNCIO_FILE, sio, xio, GWEN_SyncIo_File_FreeData); xio->fh=hd; GWEN_SyncIo_SetConnectFn(sio, GWEN_SyncIo_File_Connect); GWEN_SyncIo_SetDisconnectFn(sio, GWEN_SyncIo_File_Disconnect); GWEN_SyncIo_SetReadFn(sio, GWEN_SyncIo_File_Read); GWEN_SyncIo_SetWriteFn(sio, GWEN_SyncIo_File_Write); return sio; } GWEN_SYNCIO *GWEN_SyncIo_File_fromStdHandle(HANDLE hd, const char *hname) { GWEN_SYNCIO *sio; GWEN_SYNCIO_FILE *xio; sio=GWEN_SyncIo_new(GWEN_SYNCIO_FILE_TYPE, NULL); GWEN_NEW_OBJECT(GWEN_SYNCIO_FILE, xio); GWEN_INHERIT_SETDATA(GWEN_SYNCIO, GWEN_SYNCIO_FILE, sio, xio, GWEN_SyncIo_File_FreeData); xio->path=strdup(hname); xio->fh=hd; GWEN_SyncIo_SetStatus(sio, GWEN_SyncIo_Status_Connected); GWEN_SyncIo_SetConnectFn(sio, GWEN_SyncIo_File_Connect); GWEN_SyncIo_SetDisconnectFn(sio, GWEN_SyncIo_File_Disconnect); GWEN_SyncIo_SetReadFn(sio, GWEN_SyncIo_File_Read); GWEN_SyncIo_SetWriteFn(sio, GWEN_SyncIo_File_Write); return sio; } GWEN_SYNCIO *GWEN_SyncIo_File_fromStdin(void) { return GWEN_SyncIo_File_fromStdHandle(GetStdHandle(STD_INPUT_HANDLE), "stdin"); } GWEN_SYNCIO *GWEN_SyncIo_File_fromStdout(void) { return GWEN_SyncIo_File_fromStdHandle(GetStdHandle(STD_OUTPUT_HANDLE), "stdout"); } GWEN_SYNCIO *GWEN_SyncIo_File_fromStderr(void) { return GWEN_SyncIo_File_fromStdHandle(GetStdHandle(STD_ERROR_HANDLE), "stderr"); } const char *GWEN_SyncIo_File_GetPath(const GWEN_SYNCIO *sio) { GWEN_SYNCIO_FILE *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_FILE, sio); assert(xio); return xio->path; } void GWENHYWFAR_CB GWEN_SyncIo_File_FreeData(void *bp, void *p) { GWEN_SYNCIO_FILE *xio; xio=(GWEN_SYNCIO_FILE*) p; free(xio->path); if (xio->fh!=INVALID_HANDLE_VALUE) CloseHandle(xio->fh); GWEN_FREE_OBJECT(xio); } int GWENHYWFAR_CB GWEN_SyncIo_File_Connect(GWEN_SYNCIO *sio) { GWEN_SYNCIO_FILE *xio; uint32_t flags; DWORD dwDesiredAccess=0; DWORD dwFlagsAndAttrs=0; DWORD dwCreationDistribution; HANDLE fh; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_FILE, sio); assert(xio); if (xio->fh!=INVALID_HANDLE_VALUE) /* already open */ return 0; flags=GWEN_SyncIo_GetFlags(sio); if (flags & GWEN_SYNCIO_FILE_FLAGS_APPEND) dwDesiredAccess=FILE_APPEND_DATA; else { if (flags & GWEN_SYNCIO_FILE_FLAGS_READ) dwDesiredAccess|=GENERIC_READ; if (flags & GWEN_SYNCIO_FILE_FLAGS_WRITE) dwDesiredAccess|=GENERIC_WRITE; } dwFlagsAndAttrs=FILE_ATTRIBUTE_NORMAL; if (flags & GWEN_SYNCIO_FILE_FLAGS_RANDOM) dwFlagsAndAttrs|=FILE_FLAG_RANDOM_ACCESS; switch(xio->creationMode) { case GWEN_SyncIo_File_CreationMode_OpenExisting: dwCreationDistribution=OPEN_EXISTING; break; case GWEN_SyncIo_File_CreationMode_CreateNew: dwCreationDistribution=CREATE_NEW; break; case GWEN_SyncIo_File_CreationMode_OpenAlways: dwCreationDistribution=OPEN_ALWAYS; break; case GWEN_SyncIo_File_CreationMode_CreateAlways: dwCreationDistribution=CREATE_ALWAYS; break; case GWEN_SyncIo_File_CreationMode_TruncateExisting: dwCreationDistribution=TRUNCATE_EXISTING; break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Invalid creation mode %d", xio->creationMode); return GWEN_ERROR_INVALID; } fh=CreateFile(xio->path, dwDesiredAccess, /* dwDesiredAccess */ FILE_SHARE_READ | FILE_SHARE_WRITE, /* dwShareMode */ NULL, /* pSecurityAttributes */ dwCreationDistribution, /* dwCreationDistribution */ dwFlagsAndAttrs, /* dwFlagsAndAttrs */ NULL); /* hTemplateFile */ if (fh==INVALID_HANDLE_VALUE) { DBG_ERROR(GWEN_LOGDOMAIN, "Error opening file[%s]: %d", xio->path, (int)GetLastError()); return GWEN_ERROR_IO; } xio->fh=fh; GWEN_SyncIo_SetStatus(sio, GWEN_SyncIo_Status_Connected); return 0; } int GWENHYWFAR_CB GWEN_SyncIo_File_Disconnect(GWEN_SYNCIO *sio) { GWEN_SYNCIO_FILE *xio; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_FILE, sio); assert(xio); if (xio->fh!=INVALID_HANDLE_VALUE) { if (!(GWEN_SyncIo_GetFlags(sio) & GWEN_SYNCIO_FLAGS_DONTCLOSE)) { if (!CloseHandle(xio->fh)) { DBG_ERROR(GWEN_LOGDOMAIN, "Error closing file[%s]: %d", xio->path, (int)GetLastError()); xio->fh=INVALID_HANDLE_VALUE; return GWEN_ERROR_IO; } } xio->fh=INVALID_HANDLE_VALUE; } return 0; } int GWENHYWFAR_CB GWEN_SyncIo_File_Read(GWEN_SYNCIO *sio, uint8_t *buffer, uint32_t size) { GWEN_SYNCIO_FILE *xio; DWORD bytesRead=0; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_FILE, sio); assert(xio); if (xio->fh==INVALID_HANDLE_VALUE) { DBG_ERROR(GWEN_LOGDOMAIN, "File is not open"); return GWEN_ERROR_NOT_CONNECTED; } if (!ReadFile(xio->fh, buffer, size, &bytesRead, NULL)) { DBG_ERROR(GWEN_LOGDOMAIN, "Error on ReadFile(%s): %d", xio->path, (int)GetLastError()); return GWEN_ERROR_IO; } return (int) bytesRead; } int GWENHYWFAR_CB GWEN_SyncIo_File_Write(GWEN_SYNCIO *sio, const uint8_t *buffer, uint32_t size) { GWEN_SYNCIO_FILE *xio; DWORD bytesWritten=0; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_FILE, sio); assert(xio); if (xio->fh==INVALID_HANDLE_VALUE) { DBG_ERROR(GWEN_LOGDOMAIN, "File is not open"); return GWEN_ERROR_NOT_CONNECTED; } if (!WriteFile(xio->fh, buffer, size, &bytesWritten, NULL)) { DBG_ERROR(GWEN_LOGDOMAIN, "Error on WriteFile(%s): %d", xio->path, (int)GetLastError()); return GWEN_ERROR_IO; } return (int) bytesWritten; } int64_t GWEN_SyncIo_File_Seek(GWEN_SYNCIO *sio, int64_t pos, GWEN_SYNCIO_FILE_WHENCE whence) { GWEN_SYNCIO_FILE *xio; DWORD w; LARGE_INTEGER li; assert(sio); xio=GWEN_INHERIT_GETDATA(GWEN_SYNCIO, GWEN_SYNCIO_FILE, sio); assert(xio); if (xio->fh==INVALID_HANDLE_VALUE) { DBG_ERROR(GWEN_LOGDOMAIN, "File is not open"); return GWEN_ERROR_NOT_CONNECTED; } switch(whence) { case GWEN_SyncIo_File_Whence_Set: w=FILE_BEGIN; break; case GWEN_SyncIo_File_Whence_Current: w=FILE_CURRENT; break; case GWEN_SyncIo_File_Whence_End: w=FILE_END; break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Invalid seek mode (%d)", whence); return GWEN_ERROR_INVALID; } li.QuadPart = pos; li.LowPart=SetFilePointer(xio->fh, li.LowPart, &li.HighPart, w); if (li.LowPart==INVALID_SET_FILE_POINTER) { DWORD rv; rv=GetLastError(); if (rv!=NO_ERROR) { DBG_ERROR(GWEN_LOGDOMAIN, "Error seeking in file[%s] at %llu: %d", xio->path, (unsigned long long) pos, (int)rv); return GWEN_ERROR_IO; } } return (int64_t) li.QuadPart; } gwenhywfar-4.15.2beta/src/os/windows/mutex_p.h0000644000175000017500000000333512364015347016306 00000000000000/*************************************************************************** begin : Mon Jul 14 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_MUTEX_P_H #define GWEN_MUTEX_P_H #include #include struct GWEN_MUTEX { CRITICAL_SECTION criticalSection; }; #endif gwenhywfar-4.15.2beta/src/os/windows/system.h.in0000644000175000017500000000334412364015347016556 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Jan 05 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_SYSTEM_H #define GWENHYWFAR_SYSTEM_H #define GWEN_SECTION(x) #endif gwenhywfar-4.15.2beta/src/os/windows/system.h0000644000175000017500000000334412634022443016144 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Jan 05 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_SYSTEM_H #define GWENHYWFAR_SYSTEM_H #define GWEN_SECTION(x) #endif gwenhywfar-4.15.2beta/src/os/windows/process.c0000644000175000017500000002051612416477066016306 00000000000000/*************************************************************************** begin : Sun Dec 28 2003 copyright : (C) 2003-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "process_p.h" #include "syncio_file_l.h" #include #include #include #include int GWEN_Process_ModuleInit(void) { return 0; } int GWEN_Process_ModuleFini(void) { return 0; } GWEN_PROCESS *GWEN_Process_new(void) { GWEN_PROCESS *pr; GWEN_NEW_OBJECT(GWEN_PROCESS, pr); pr->state=GWEN_ProcessStateNotStarted; pr->pflags=GWEN_PROCESS_FLAGS_DEFAULT; return pr; } void GWEN_Process_free(GWEN_PROCESS *pr) { if (pr) { /* close handles */ CloseHandle(pr->processInfo.hThread); CloseHandle(pr->processInfo.hProcess); GWEN_SyncIo_free(pr->stdIn); GWEN_SyncIo_free(pr->stdOut); GWEN_SyncIo_free(pr->stdErr); GWEN_FREE_OBJECT(pr); } } GWEN_PROCESS_STATE GWEN_Process_Start(GWEN_PROCESS *pr, const char *prg, const char *args) { STARTUPINFO si; SECURITY_ATTRIBUTES saAttr; char *cmdline; HANDLE hChildStdinRd, hChildStdinWr; HANDLE hChildStdoutRd, hChildStdoutWr; HANDLE hChildStderrRd, hChildStderrWr; GWEN_PROCESS_STATE pst; memset(&si, 0, sizeof(si)); si.cb=sizeof(si); GetStartupInfo(&si); si.dwFlags|=STARTF_USESTDHANDLES; /* set the bInheritHandle flag so pipe handles are inherited */ saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); saAttr.bInheritHandle = TRUE; saAttr.lpSecurityDescriptor = NULL; /* create a pipe for the child process's STDOUT */ if (pr->pflags & GWEN_PROCESS_FLAGS_REDIR_STDOUT) { DBG_INFO(GWEN_LOGDOMAIN, "Redirecting stdout"); if (!CreatePipe(&hChildStdoutRd, &hChildStdoutWr, &saAttr, 0)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not create stdout pipe"); return -1; } si.hStdOutput=hChildStdoutWr; pr->stdOut=GWEN_SyncIo_File_fromHandle(hChildStdoutRd); } else si.hStdOutput=GetStdHandle(STD_OUTPUT_HANDLE); if (pr->pflags & GWEN_PROCESS_FLAGS_REDIR_STDIN) { /* create a pipe for the child process's STDIN */ DBG_INFO(GWEN_LOGDOMAIN, "Redirecting stdin"); if (!CreatePipe(&hChildStdinRd, &hChildStdinWr, &saAttr, 0)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not create stdin pipe"); return -1; } si.hStdInput=hChildStdinRd; pr->stdIn=GWEN_SyncIo_File_fromHandle(hChildStdinWr); } else si.hStdInput=GetStdHandle(STD_INPUT_HANDLE); /* create a pipe for the child process's STDERR */ if (pr->pflags & GWEN_PROCESS_FLAGS_REDIR_STDERR) { DBG_INFO(GWEN_LOGDOMAIN, "Redirecting stderr"); if (!CreatePipe(&hChildStderrRd, &hChildStderrWr, &saAttr, 0)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not create stderr pipe"); return -1; } si.hStdError=hChildStderrWr; pr->stdErr=GWEN_SyncIo_File_fromHandle(hChildStderrRd); } else si.hStdError=GetStdHandle(STD_ERROR_HANDLE); /* create the child process */ DBG_INFO(GWEN_LOGDOMAIN, "Creating Command line"); cmdline=(char*)malloc(strlen(prg)+strlen(args)+2); strcpy(cmdline, prg); strcat(cmdline, " "); strcat(cmdline, args); pr->finished=0; DBG_INFO(GWEN_LOGDOMAIN, "Starting process"); if (CreateProcess(NULL, /* lpszApplicationName */ cmdline, /* lpszCommandLine */ NULL, /* lpsaProcess */ NULL, /* lpsaThread */ TRUE, /* fInheritHandles */ 0, /* fdwCreate */ NULL, /* lpvEnvironment */ NULL, /* lpszCurDir */ &si, /* lpsiStartInfo */ &(pr->processInfo) /* lppiProcInfo */ )!=TRUE) { DBG_ERROR(GWEN_LOGDOMAIN, "Error executing \"%s\" (%d)", cmdline, (int)GetLastError()); pst=GWEN_ProcessStateNotStarted; /* error, close our end of the pipe. The other end will be closed * after this block */ if (pr->pflags & GWEN_PROCESS_FLAGS_REDIR_STDOUT) CloseHandle(hChildStdoutRd); if (pr->pflags & GWEN_PROCESS_FLAGS_REDIR_STDIN) CloseHandle(hChildStdinWr); if (pr->pflags & GWEN_PROCESS_FLAGS_REDIR_STDERR) CloseHandle(hChildStderrRd); } else { DBG_INFO(GWEN_LOGDOMAIN, "Process started"); pst=GWEN_ProcessStateRunning; } pr->state=pst; free(cmdline); if (pr->pflags & GWEN_PROCESS_FLAGS_REDIR_STDOUT) CloseHandle(hChildStdoutWr); if (pr->pflags & GWEN_PROCESS_FLAGS_REDIR_STDIN) CloseHandle(hChildStdinRd); if (pr->pflags & GWEN_PROCESS_FLAGS_REDIR_STDERR) CloseHandle(hChildStderrWr); return pr->state; } GWEN_PROCESS_STATE GWEN_Process_CheckState(GWEN_PROCESS *pr) { DWORD dwExitCode; if (pr->finished) return pr->state; if (GetExitCodeProcess(pr->processInfo.hProcess, &dwExitCode)==TRUE) { /* ok */ return GWEN_Process_MakeState(pr, dwExitCode); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Error getting exitcode (%d)", (int)GetLastError()); return GWEN_ProcessStateUnknown; } } int GWEN_Process_GetResult(GWEN_PROCESS *pr) { GWEN_Process_CheckState(pr); if (pr->finished) return pr->result; return -1; } GWEN_PROCESS_STATE GWEN_Process_MakeState(GWEN_PROCESS *pr, DWORD status) { if (status==STILL_ACTIVE) { pr->state=GWEN_ProcessStateRunning; } else { pr->state=GWEN_ProcessStateExited; pr->result=status; pr->finished=1; } return pr->state; } int GWEN_Process_Wait(GWEN_PROCESS *pr) { DWORD dwExitCode; if (pr->finished) return 0; WaitForSingleObject(pr->processInfo.hProcess, INFINITE); if (GetExitCodeProcess(pr->processInfo.hProcess, &dwExitCode)==TRUE) { /* ok */ GWEN_Process_MakeState(pr, dwExitCode); return 0; } else { DBG_ERROR(GWEN_LOGDOMAIN, "Error getting exitcode (%d)", (int)GetLastError()); return -1; } } int GWEN_Process_Terminate(GWEN_PROCESS *pr) { if (TerminateProcess(pr->processInfo.hProcess, GWEN_PROCESS_EXITCODE_ABORT)!=TRUE) { DBG_ERROR(GWEN_LOGDOMAIN, "Error terminating process (%d)", (int)GetLastError()); return -1; } if (GWEN_Process_Wait(pr)) { return -1; } return 0; } void GWEN_Process_SetFlags(GWEN_PROCESS *pr, uint32_t f) { assert(pr); pr->pflags=f; } void GWEN_Process_AddFlags(GWEN_PROCESS *pr, uint32_t f) { assert(pr); pr->pflags|=f; } void GWEN_Process_SubFlags(GWEN_PROCESS *pr, uint32_t f) { assert(pr); pr->pflags&=~f; } GWEN_SYNCIO *GWEN_Process_GetStdin(const GWEN_PROCESS *pr) { assert(pr); return pr->stdIn; } GWEN_SYNCIO *GWEN_Process_GetStdout(const GWEN_PROCESS *pr) { assert(pr); return pr->stdOut; } GWEN_SYNCIO *GWEN_Process_GetStderr(const GWEN_PROCESS *pr) { assert(pr); return pr->stdErr; } gwenhywfar-4.15.2beta/src/os/windows/inetsocket_p.h0000644000175000017500000000464512364015347017321 00000000000000/*************************************************************************** begin : Tue Oct 02 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /** * @file chameleon/socket.h * @short This file contains sockets and socket sets. */ #ifndef GWEN_SOCKET_P_H #define GWEN_SOCKET_P_H #include #include #include #include #include #include #include #ifdef HAVE_ARPA_INET_H # include #endif #ifdef __cplusplus extern "C" { #endif GWENHYWFAR_API struct GWEN_SOCKET { GWEN_LIST_ELEMENT(GWEN_SOCKET) int socket; GWEN_SOCKETTYPE type; }; GWENHYWFAR_API struct GWEN_SOCKETSETSTRUCT { fd_set set; int highest; uint32_t count; }; /** * Initializes this module. */ GWENHYWFAR_API int GWEN_Socket_ModuleInit(void); /** * Deinitializes this module. */ GWENHYWFAR_API int GWEN_Socket_ModuleFini(void); #ifdef __cplusplus } #endif #endif /* GWEN_SOCKET_P_H */ gwenhywfar-4.15.2beta/src/os/windows/gwentime_p.h0000644000175000017500000000344312364015347016763 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Wed Mar 24 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_TIME_P_H #define GWEN_TIME_P_H #include #include struct GWEN_TIME { long sec; long usec; }; #endif gwenhywfar-4.15.2beta/src/os/windows/Makefile.in0000644000175000017500000006420612634022415016517 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/os/windows DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(srcdir)/system.h.in $(top_srcdir)/depcomp $(iheader_HEADERS) \ $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = system.h CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libosimpl_la_LIBADD = am_libosimpl_la_OBJECTS = directory.lo fslock.lo gwentime.lo \ inetaddr.lo inetsocket.lo init.lo libloader.lo process.lo \ mutex.lo semaphore.lo syncio_file.lo libosimpl_la_OBJECTS = $(am_libosimpl_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libosimpl_la_SOURCES) DIST_SOURCES = $(libosimpl_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(iheaderdir)" HEADERS = $(iheader_HEADERS) $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/sio \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/parser @all_includes@ AM_CFLAGS = @visibility_cflags@ -DBUILDING_GWENHYWFAR # We need to skip -I$(top_srcdir)/src/os here and instead specify the # include path directly in the C files because when we add that # directory to the include path, our file process.h shadows the # mingw's version of that header file (process.h necessary for getpid # on mingw). noinst_LTLIBRARIES = libosimpl.la noinst_HEADERS = \ directory_p.h \ fslock_p.h \ gwentime_p.h \ inetaddr_p.h \ inetsocket_p.h \ libloader_p.h \ process_p.h \ mutex_p.h \ semaphore_p.h \ syncio_file_l.h \ syncio_file_p.h iheaderdir = $(gwenhywfar_headerdir_am)/gwenhywfar iheader_HEADERS = \ system.h libosimpl_la_SOURCES = \ directory.c \ fslock.c \ gwentime.c \ inetaddr.c \ inetsocket.c \ init.c \ libloader.c \ process.c \ mutex.c \ semaphore.c \ syncio_file.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/os/windows/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/os/windows/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): system.h: $(top_builddir)/config.status $(srcdir)/system.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libosimpl.la: $(libosimpl_la_OBJECTS) $(libosimpl_la_DEPENDENCIES) $(EXTRA_libosimpl_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libosimpl_la_OBJECTS) $(libosimpl_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/directory.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fslock.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gwentime.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inetaddr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inetsocket.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libloader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mutex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/process.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/semaphore.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/syncio_file.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-iheaderHEADERS: $(iheader_HEADERS) @$(NORMAL_INSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(iheaderdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(iheaderdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(iheaderdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(iheaderdir)" || exit $$?; \ done uninstall-iheaderHEADERS: @$(NORMAL_UNINSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(iheaderdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(iheaderdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iheaderHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iheaderHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am \ install-iheaderHEADERS install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-iheaderHEADERS sources: for f in $(libosimpl_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/src/os/windows/libloader.c0000644000175000017500000001611412416477066016564 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Fri Nov 22 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "libloader_p.h" #include #include #include #include #include #include #include #include int GWEN_LibLoader_ModuleInit(void) { return 0; } int GWEN_LibLoader_ModuleFini(void) { return 0; } GWEN_LIBLOADER *GWEN_LibLoader_new(void) { GWEN_LIBLOADER *h; GWEN_NEW_OBJECT(GWEN_LIBLOADER, h); return h; } void GWEN_LibLoader_free(GWEN_LIBLOADER *h) { if (h) { GWEN_FREE_OBJECT(h); } } int GWEN_LibLoader_LoadLibrary(GWEN_LIBLOADER *h, const char *name) { assert(h); h->handle=(void*)LoadLibrary(name); if (!h->handle) { int werr; char *lpMsgBuf; /* from: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/debug/base/formatmessage.asp */ werr=GetLastError(); /* DEBUG */ FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, werr, MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL); DBG_DEBUG(GWEN_LOGDOMAIN, "Error loading DLL \"%s\": %d\n%d = %s", name, werr, werr, lpMsgBuf); LocalFree(lpMsgBuf); if ( (werr == ERROR_DLL_NOT_FOUND) || (werr == ERROR_FILE_NOT_FOUND) || (werr == ERROR_MOD_NOT_FOUND) ) { DBG_INFO(GWEN_LOGDOMAIN, "File \"%s\" not found", name); return GWEN_ERROR_NOT_FOUND; } /* TODO: Find the code for resolve errors */ else { DBG_INFO(GWEN_LOGDOMAIN, "Error loading library \"%s\" (%d)", name, werr); return GWEN_ERROR_COULD_NOT_LOAD; } } return 0; } int GWEN_LibLoader_CloseLibrary(GWEN_LIBLOADER *h) { assert(h); if (!h->handle) return GWEN_ERROR_NOT_OPEN; if (!FreeLibrary((HINSTANCE)h->handle)) return GWEN_ERROR_CLOSE; h->handle=0; return 0; } int GWEN_LibLoader_Resolve(GWEN_LIBLOADER *h, const char *name, void **p) { assert(h); assert(name); assert(p); if (!h->handle) return GWEN_ERROR_NOT_OPEN; *p=(void*)GetProcAddress((HINSTANCE)h->handle, name); if (!*p) { DBG_ERROR(GWEN_LOGDOMAIN, "Error resolving symbol \"%s\"", name); return GWEN_ERROR_COULD_NOT_RESOLVE; } DBG_VERBOUS(GWEN_LOGDOMAIN, "Resolved symbol \"%s\": %08x", name, (int)*p); return 0; } int GWEN_LibLoader__OpenLibraryWithPath(GWEN_LIBLOADER *h, const char *path, const char *name) { GWEN_BUFFER *buffer; unsigned int pos; unsigned int i; int err; assert(h); assert(name); buffer=GWEN_Buffer_new(0, 256, 0, 1); if (path) { GWEN_Buffer_AppendString(buffer, path); GWEN_Buffer_AppendByte(buffer, '\\'); /* Use backslash: This is windows! */ } /* remember current position */ pos=GWEN_Buffer_GetPos(buffer); /* append name of the library to load */ GWEN_Buffer_AppendString(buffer, name); i=strlen(name); if ((i<=4) || (strcmp(name+i-4, ".dll")!=0)) { /* no DLL-extension, add it myself */ GWEN_Buffer_AppendString(buffer, ".dll"); } /* append trailing null byte */ GWEN_Buffer_AppendByte(buffer, (char)0); /* try to load the library */ err=GWEN_LibLoader_LoadLibrary(h, GWEN_Buffer_GetStart(buffer)); if (err) { DBG_INFO(GWEN_LOGDOMAIN, "Could not load library \"%s\"", GWEN_Buffer_GetStart(buffer)); DBG_INFO_ERR(GWEN_LOGDOMAIN, err); GWEN_Buffer_free(buffer); return err; } DBG_INFO(GWEN_LOGDOMAIN, "Library \"%s\" loaded", GWEN_Buffer_GetStart(buffer)); GWEN_Buffer_free(buffer); return 0; } int GWEN_LibLoader_OpenLibraryWithPath(GWEN_LIBLOADER *h, const char *path, const char *name) { int err; assert(h); assert(name); err=GWEN_LibLoader__OpenLibraryWithPath(h, path, name); if (!err) return err; else { GWEN_BUFFER *buffer; DBG_INFO(GWEN_LOGDOMAIN, "Trying MinGW scheme for library names"); buffer=GWEN_Buffer_new(0, 256, 0, 1); /* append name of the library to load plus "-0" (used for modules) */ GWEN_Buffer_AppendString(buffer, name); GWEN_Buffer_AppendString(buffer, "-0"); /* try to load the library */ err=GWEN_LibLoader__OpenLibraryWithPath(h, path, GWEN_Buffer_GetStart(buffer)); GWEN_Buffer_free(buffer); if (err) { DBG_INFO_ERR(GWEN_LOGDOMAIN, err); return err; } return 0; } } int GWEN_LibLoader_OpenLibrary(GWEN_LIBLOADER *h, const char *name) { return GWEN_LibLoader_OpenLibraryWithPath(h, 0, name); } const char *GWEN_LibLoader_ErrorString(int c) { const char *s; switch(c) { case 0: s="Success"; break; case GWEN_LIBLOADER_ERROR_COULD_NOT_LOAD: s="Could not load library"; break; case GWEN_LIBLOADER_ERROR_NOT_OPEN: s="Library not open"; break; case GWEN_LIBLOADER_ERROR_COULD_NOT_CLOSE: s="Could not close library"; break; case GWEN_LIBLOADER_ERROR_COULD_NOT_RESOLVE: s="Could not resolve symbol"; break; case GWEN_LIBLOADER_ERROR_NOT_FOUND: s="Library not found"; break; default: s=(const char*)0; } /* switch */ return s; } gwenhywfar-4.15.2beta/src/os/windows/syncio_file_l.h0000644000175000017500000000335512364015347017445 00000000000000/*************************************************************************** begin : Tue Apr 27 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_SYNCIO_FILE_L_H #define GWENHYWFAR_SYNCIO_FILE_L_H #include #include GWEN_SYNCIO *GWEN_SyncIo_File_fromHandle(HANDLE fh); #endif gwenhywfar-4.15.2beta/src/os/windows/Makefile.am0000644000175000017500000000223212364015347016503 00000000000000INCLUDES= -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/sio \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/parser @all_includes@ AM_CFLAGS=@visibility_cflags@ -DBUILDING_GWENHYWFAR # We need to skip -I$(top_srcdir)/src/os here and instead specify the # include path directly in the C files because when we add that # directory to the include path, our file process.h shadows the # mingw's version of that header file (process.h necessary for getpid # on mingw). noinst_LTLIBRARIES=libosimpl.la noinst_HEADERS=\ directory_p.h \ fslock_p.h \ gwentime_p.h \ inetaddr_p.h \ inetsocket_p.h \ libloader_p.h \ process_p.h \ mutex_p.h \ semaphore_p.h \ syncio_file_l.h \ syncio_file_p.h iheaderdir=$(gwenhywfar_headerdir_am)/gwenhywfar iheader_HEADERS=\ system.h libosimpl_la_SOURCES=\ directory.c \ fslock.c \ gwentime.c \ inetaddr.c \ inetsocket.c \ init.c \ libloader.c \ process.c \ mutex.c \ semaphore.c \ syncio_file.c sources: for f in $(libosimpl_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-4.15.2beta/src/os/windows/fslock_p.h0000644000175000017500000000447712364015347016435 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Wed Mar 24 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_FSLOCK_P_H #define GWEN_FSLOCK_P_H #include #include #include #include "../fslock.h" /* specify the include path here directly because when we add that directory to the include path, our file process.h shadows the mingw's version of that header file (process.h necessary for getpid on mingw). */ struct GWEN_FSLOCK { GWEN_LIST_ELEMENT(GWEN_FSLOCK) GWEN_FSLOCK_TYPE type; char *entryName; char *baseLockFilename; char *uniqueLockFilename; int lockCount; int usage; }; GWEN_FSLOCK_RESULT GWEN_FSLock__Lock(GWEN_FSLOCK *fl); int GWEN_FSLock__UnifyLockFileName(GWEN_BUFFER *nbuf); #endif gwenhywfar-4.15.2beta/src/os/windows/fslock.c0000644000175000017500000002457212416477066016117 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Sun Nov 23 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "fslock_p.h" #include "i18n_l.h" #include #include /* for select */ #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include #undef HAVE_LINK /* Win32/Mingw does not have link(2), so we have to keep this undefined for now. */ GWEN_LIST_FUNCTIONS(GWEN_FSLOCK, GWEN_FSLock) GWEN_LIST2_FUNCTIONS(GWEN_FSLOCK, GWEN_FSLock) GWEN_FSLOCK *GWEN_FSLock_new(const char *fname, GWEN_FSLOCK_TYPE t) { GWEN_FSLOCK *fl; GWEN_BUFFER *nbuf; const char *s; assert(fname); GWEN_NEW_OBJECT(GWEN_FSLOCK, fl); GWEN_LIST_INIT(GWEN_FSLOCK, fl); fl->usage=1; fl->entryName=strdup(fname); switch(t) { case GWEN_FSLock_TypeFile: s=".lck"; break; case GWEN_FSLock_TypeDir: s="/.dir.lck"; break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Unknown log type %d", t); abort(); } /* switch */ nbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(nbuf, fname); GWEN_Buffer_AppendString(nbuf, s); fl->baseLockFilename=strdup(GWEN_Buffer_GetStart(nbuf)); if (GWEN_FSLock__UnifyLockFileName(nbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not create unique lockfile name"); GWEN_Buffer_free(nbuf); abort(); } fl->uniqueLockFilename=strdup(GWEN_Buffer_GetStart(nbuf)); GWEN_Buffer_free(nbuf); return fl; } void GWEN_FSLock_free(GWEN_FSLOCK *fl) { if (fl) { assert(fl->usage); if (fl->usage==1) { if (fl->lockCount) { DBG_WARN(GWEN_LOGDOMAIN, "File \"%s\" still locked", fl->entryName); } free(fl->entryName); free(fl->baseLockFilename); free(fl->uniqueLockFilename); GWEN_LIST_FINI(GWEN_FSLOCK, fl); fl->usage=0; GWEN_FREE_OBJECT(fl); } else { fl->usage--; } } } void GWEN_FSLock_Attach(GWEN_FSLOCK *fl) { assert(fl); assert(fl->usage); fl->usage++; } GWEN_FSLOCK_RESULT GWEN_FSLock__Lock(GWEN_FSLOCK *fl) { assert(fl); if (fl->lockCount==0) { int fd; int linkCount; struct stat st; fd=open(fl->uniqueLockFilename, O_CREAT|O_TRUNC|O_RDWR, S_IRUSR|S_IWUSR); if (fd==-1) { DBG_DEBUG(GWEN_LOGDOMAIN, "open(%s): %s", fl->uniqueLockFilename, strerror(errno)); return GWEN_FSLock_ResultError; } close(fd); /* get the link count of the new unique file for later comparison */ if (stat(fl->uniqueLockFilename, &st)) { DBG_ERROR(GWEN_LOGDOMAIN, "stat(%s): %s", fl->uniqueLockFilename, strerror(errno)); remove(fl->uniqueLockFilename); return GWEN_FSLock_ResultError; } linkCount=(int)(st.st_nlink); #ifdef HAVE_LINK /* create a hard link to the new unique file with the name of the * real lock file. This is guaranteed to be atomic even on NFS */ if (link(fl->uniqueLockFilename, fl->baseLockFilename)) { /* Nonzero returned, i.e. some error occurred */ int lnerr; lnerr=errno; DBG_INFO(GWEN_LOGDOMAIN, "link(%s, %s): %s", fl->uniqueLockFilename, fl->baseLockFilename, strerror(errno)); if (lnerr==EPERM) #endif /* HAVE_LINK */ { int fd; /* link() is not supported on the destination filesystem, try it the * traditional way. This should be ok, since the only FS which does * not handle the O_EXCL flag properly is NFS, and NFS would not * return EPERM (because it generally supports link()). * So for NFS file systems we would not reach this point. */ fd=open(fl->baseLockFilename, O_CREAT | O_EXCL | O_TRUNC | O_RDWR, S_IRUSR | S_IWUSR); if (fd==-1) { DBG_INFO(GWEN_LOGDOMAIN, "FS-Lock to %s already in use", fl->entryName); remove(fl->uniqueLockFilename); return GWEN_FSLock_ResultBusy; } close(fd); } #ifdef HAVE_LINK else { /* link() generally is supported on the destination file system, * check whether the link count of the unique file has been * incremented */ if (stat(fl->uniqueLockFilename, &st)) { DBG_ERROR(GWEN_LOGDOMAIN, "stat(%s): %s", fl->uniqueLockFilename, strerror(errno)); remove(fl->uniqueLockFilename); return GWEN_FSLock_ResultError; } if ((int)(st.st_nlink)!=linkCount+1) { DBG_INFO(GWEN_LOGDOMAIN, "FS-Lock to %s already in use", fl->entryName); remove(fl->uniqueLockFilename); return GWEN_FSLock_ResultBusy; } } } /* if error on link */ #endif /* HAVE_LINK */ DBG_INFO(GWEN_LOGDOMAIN, "FS-Lock applied to %s", fl->entryName); } fl->lockCount++; return GWEN_FSLock_ResultOk; } GWEN_FSLOCK_RESULT GWEN_FSLock_Unlock(GWEN_FSLOCK *fl) { assert(fl); if (fl->lockCount<1) { DBG_ERROR(GWEN_LOGDOMAIN, "Entry \"%s\" not locked", fl->entryName); return GWEN_FSLock_ResultNoLock; } fl->lockCount--; if (fl->lockCount<1) { remove(fl->baseLockFilename); remove(fl->uniqueLockFilename); DBG_INFO(GWEN_LOGDOMAIN, "FS-Lock released from %s", fl->entryName); } return GWEN_FSLock_ResultOk; } GWEN_FSLOCK_RESULT GWEN_FSLock_Lock(GWEN_FSLOCK *fl, int timeout, uint32_t gid) { GWEN_TIME *t0; int distance; int count; GWEN_FSLOCK_RESULT rv; uint32_t progressId; t0=GWEN_CurrentTime(); assert(t0); progressId=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Accquiring lock"), NULL, (timeout==GWEN_TIMEOUT_FOREVER) ?0:timeout, gid); if (timeout==GWEN_TIMEOUT_NONE) distance=GWEN_TIMEOUT_NONE; else if (timeout==GWEN_TIMEOUT_FOREVER) distance=GWEN_TIMEOUT_FOREVER; else { distance=GWEN_GUI_CHECK_PERIOD; if (distance>timeout) distance=timeout; } for (count=0;; count++) { int err; err=GWEN_Gui_ProgressAdvance(progressId, GWEN_GUI_PROGRESS_NONE); if (err==GWEN_ERROR_USER_ABORTED) { DBG_ERROR(GWEN_LOGDOMAIN, "User aborted."); GWEN_Gui_ProgressEnd(progressId); return GWEN_FSLock_ResultUserAbort; } rv=GWEN_FSLock__Lock(fl); if (rv==GWEN_FSLock_ResultError) { DBG_INFO(GWEN_LOGDOMAIN, "here"); GWEN_Time_free(t0); GWEN_Gui_ProgressEnd(progressId); return rv; } else if (rv==GWEN_FSLock_ResultOk) { GWEN_Time_free(t0); GWEN_Gui_ProgressEnd(progressId); return rv; } else { /* check timeout */ if (timeout!=GWEN_TIMEOUT_FOREVER) { GWEN_TIME *t1; double d; if (timeout==GWEN_TIMEOUT_NONE) { GWEN_Gui_ProgressEnd(progressId); return GWEN_FSLock_ResultTimeout; } t1=GWEN_CurrentTime(); assert(t1); d=GWEN_Time_Diff(t1, t0); GWEN_Time_free(t1); if (d>=timeout) { DBG_DEBUG(GWEN_LOGDOMAIN, "Could not lock within %d milliseconds, giving up", timeout); GWEN_Time_free(t0); GWEN_Gui_ProgressEnd(progressId); return GWEN_FSLock_ResultTimeout; } err=GWEN_Gui_ProgressAdvance(progressId, (uint64_t)d); if (err) { DBG_ERROR(GWEN_LOGDOMAIN, "User aborted."); GWEN_Gui_ProgressEnd(progressId); return GWEN_FSLock_ResultUserAbort; } } /* sleep for the distance of the WaitCallback */ GWEN_Socket_Select(0, 0, 0, distance); } } /* for */ GWEN_Gui_ProgressEnd(progressId); DBG_WARN(GWEN_LOGDOMAIN, "We should never reach this point"); GWEN_Time_free(t0); return GWEN_FSLock_ResultError; } int GWEN_FSLock__UnifyLockFileName(GWEN_BUFFER *nbuf) { char buffer[256]; GWEN_Buffer_AppendString(nbuf, "."); buffer[0]=0; if (gethostname(buffer, sizeof(buffer)-1)) { DBG_ERROR(GWEN_LOGDOMAIN, "gethostname: %s", strerror(errno)); return -1; } buffer[sizeof(buffer)-1]=0; GWEN_Buffer_AppendString(nbuf, buffer); GWEN_Buffer_AppendString(nbuf, "-"); buffer[0]=0; snprintf(buffer, sizeof(buffer)-1, "%i", getpid()); buffer[sizeof(buffer)-1]=0; GWEN_Buffer_AppendString(nbuf, buffer); return 0; } const char *GWEN_FSLock_GetName(const GWEN_FSLOCK *fl) { assert(fl); assert(fl->usage); return fl->entryName; } gwenhywfar-4.15.2beta/src/os/windows/semaphore.c0000644000175000017500000000430112364015347016575 00000000000000/*************************************************************************** begin : Tue Jul 29 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "semaphore_p.h" #include #include GWEN_SEMAPHORE *GWEN_Semaphore_new(void) { GWEN_SEMAPHORE *sm; GWEN_NEW_OBJECT(GWEN_SEMAPHORE, sm); sm->semId=CreateSemaphore(NULL, 0, 0x7fffffff, NULL); return sm; } void GWEN_Semaphore_free(GWEN_SEMAPHORE *sm) { if (sm) { CloseHandle(sm->semId); GWEN_FREE_OBJECT(sm); } } void GWEN_Semaphore_Wait(GWEN_SEMAPHORE *sm) { assert(sm); WaitForSingleObject(sm->semId, INFINITE); } void GWEN_Semaphore_Post(GWEN_SEMAPHORE *sm) { assert(sm); ReleaseSemaphore(sm->semId, 1, NULL); } gwenhywfar-4.15.2beta/src/os/windows/inetsocket.c0000644000175000017500000012671612416477066017011 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Tue Oct 02 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "inetsocket_p.h" #include "inetaddr_p.h" #include #include #include #include #include #include #include #include GWEN_LIST_FUNCTIONS(GWEN_SOCKET, GWEN_Socket) GWEN_LIST2_FUNCTIONS(GWEN_SOCKET, GWEN_Socket) static int gwen_socket_is_initialized=0; char* h_strerror(int errnum) { /* Modified new whole routine */ static char stringWSAEINTR[] = "A blocking call was cancelled."; static char stringWSAEBADF[] = "WSAEBADF (10009) No description."; static char stringWSAEACCES[] = "The requested address is a broadcast address."; static char stringWSAEFAULT[] = "Bad address."; static char stringWSAEINVAL[] = "The socket is not bound to an address."; static char stringWSAEMFIL[] = "The maximum number of sockets has exceeded."; static char stringWSAEWOULDBLOCK[] = "Socket would block."; static char stringWSAEINPROGRESS[] = "A blocking call is in progress."; static char stringWSAEALREADY[] = "Operation already in progress."; static char stringWSAENOTSOCK[] = "Invalid socket descriptor."; static char stringWSAEDESTADDRREQ[] = "Destination address required."; static char stringWSAEMSGSIZE[] = "Message too long."; static char stringWSAEPROTOTYPE[] = "Protocol wrong type for socket."; static char stringWSAENOPROTOOPT[] = "Bad protocol option"; static char stringWSAEPROTONOSUPPORT[] = "Protocol not supported."; static char stringWSAESOCKTNOSUPPORT[] = "Socket type not supported."; static char stringWSAEOPNOTSUPP[] = "Operation not supported."; static char stringWSAEPFNOSUPPORT[] = "Protocol family not supported."; static char stringWSAEAFNOSUPPORT[] = "Address family not supported by protocol family."; static char stringWSAEADDRINUSE[] = "The specified address is already in use."; static char stringWSAEADDRNOTAVAIL[] = "The specified address is not available from the local machine."; static char stringWSAENETDOWN[] = "The network subsystem has failed."; static char stringWSAENETUNREACH[] = "Network cannot be reached from this host at this time."; static char stringWSAENETRESET[] = "Network dropped connection on reset."; static char stringWSAECONNABORTED[] = "The virtual circuit was aborted due to timeout or other failure."; static char stringWSAECONNRESET[] = "The virtual circuit was reset by the remote side."; static char stringWSAENOBUFS[] = "No buffer space is available."; static char stringWSAEISCONN[] = "The socket is already connected."; static char stringWSAENOTCONN[] = "The socket is not connected."; static char stringWSAESHUTDOWN[] = "The socket has been shut down."; static char stringWSAETOOMANYREFS[] = "WSAETOOMANYREFS (10059) No description."; static char stringWSAETIMEDOUT[] = "Attempt to connect timed out without establishing a connection."; static char stringWSAECONNREFUSED[] = "The connection attempt was refused."; static char stringWSAELOOP[] = "WSAELOOP (10062) No description."; static char stringWSAENAMETOOLONG[] = "WSAENAMETOOLONG (10063) No description."; static char stringWSAEHOSTDOWN[] = "Host is down."; static char stringWSAEHOSTUNREACH[] = "No route to host."; static char stringWSAENOTEMPTY[] = "WSAENOTEMPTY (10065) No description."; static char stringWSAEPROCLIM[] = "Too many processes."; static char stringWSAEUSERS[] = "WSAEUSERS (10068) No description."; static char stringWSAEDQUOT[] = "WSAEDQUOT (10069) No description."; static char stringWSAESTALE[] = "WSAESTALE (10070) No description."; static char stringWSAEREMOTE[] = "WSAEREMOTE (10071) No description."; static char stringWSASYSNOTREADY[] = "Network subsystem is unavailable."; static char stringWSAVERNOTSUPPORTED[] = "Winsock.dll version out of range."; static char stringWSANOTINITIALISED[] = "Successful WSAStartup not yet performed."; static char stringWSAEDISCON[] = "Graceful shutdown in progress."; static char stringWSAENOMORE[] = "WSAENOMORE (10102) No description."; static char stringWSAECANCELLED[] = "WSAECANCELLED (10103) No description."; static char stringWSAEINVALIDPROVIDER[] = "WSAEINVALIDPROVIDER (10105) No description."; static char stringWSAEPROVIDERFAILEDINIT[] = "WSAEPROVIDERFAILEDINIT (10106) No description."; static char stringWSASYSCALLFAILURE[] = "System call failure."; static char stringWSASERVICE_NOT_FOUND[] = "WSASERVICE_NOT_FOUND (10108) No description."; static char stringWSATYPE_NOT_FOUND[] = "Class type not found."; static char stringWSA_E_NO_MORE[] = "WSA_E_NO_MORE (10110) No description."; static char stringWSA_E_CANCELLED[] = "WSA_E_CANCELLED No description."; static char stringWSAEREFUSED[] = "WSAEREFUSED No description."; static char stringWSAHOST_NOT_FOUND[] = "Authoritative Answer Host is not found."; static char stringWSATRY_AGAIN[] = "Nonauthoritative host not found."; static char stringWSANO_RECOVERY[] = "This is a nonrecoverable error."; static char stringWSANO_DATA[] = "Valid name, no data record of requested type."; /* static char stringWSANO_ADDRESS[] = "WSANO_ADDRESS (11004) No description."; */ static char stringWSA_IO_PENDING[] = "Overlapped operations will complete later."; static char stringWSA_INVALID_HANDLE[] = "Specified event object handle is invalid."; static char stringWSA_INVALID_PARAMETER[] = "One or more parameters are invalid."; /* static char stringWSAINVALIDPROCTABLE[] = "Invalid procedure table from service provider."; */ /* static char stringWSAINVALIDPROVIDER[] = "Invalid service provider version number."; */ static char stringWSA_IO_INCOMPLETE[] = "Overlapped I/O event object not in signaled state."; static char stringWSA_NOT_ENOUGH_MEMORY[] = "Insufficient memory available."; /* static char stringWSAPROVIDERFAILEDINIT[] = "Unable to initialize a service provider."; */ static char stringWSA_OPERATION_ABORTED[] = "Overlapped operation aborted."; static char stringDEFAULT[] = "Unknown Error"; char* resultString; switch(errnum) { case WSAEINTR: /* (10004) * Interrupted function call. * A blocking operation was interrupted by a call to * WSACancelBlockingCall. */ resultString = &stringWSAEINTR[0]; break; case WSAEBADF: /* (10009) * No description */ resultString = &stringWSAEBADF[0]; break; case WSAEACCES: /* (10013) * Permission denied. * An attempt was made to access a socket in a way forbidden by * its access permissions. * An example is using a broadcast address for sendto without * broadcast permission being set using setsockopt(SO_BROADCAST). * Another possible reason for the WSAEACCES error is that when * the bind function is called (on Windows NT 4 SP4 or later), * another application, service, or kernel mode driver is bound * to the same address with exclusive access. Such exclusive access * is a new feature of Windows NT 4 SP4 and later, and is implemented * by using the SO_EXCLUSIVEADDRUSE option. */ resultString = &stringWSAEACCES[0]; break; case WSAEFAULT: /* (10014) * Bad address. * The system detected an invalid pointer address in attempting to * use a pointer argument of a call. This error occurs if an application * passes an invalid pointer value, or if the length of the buffer is * too small. For instance, if the length of an argument, which is a * SOCKADDR structure, is smaller than the sizeof(SOCKADDR). */ resultString = &stringWSAEFAULT[0]; break; case WSAEINVAL: /* (10022) * The socket is not bound to an address. */ resultString = &stringWSAEINVAL[0]; break; case WSAEMFILE: /* (10024) * Too many open files. * Too many open sockets. Each implementation may have a maximum number * of socket handles available, either globally, per process, or per * thread. */ resultString = &stringWSAEMFIL[0]; break; case WSAEWOULDBLOCK: /* (10035) * Resource temporarily unavailable. * This error is returned from operations on nonblocking sockets that * cannot be completed immediately, for example recv when no data is * queued to be read from the socket. It is a nonfatal error, and the * operation should be retried later. It is normal for WSAEWOULDBLOCK * to be reported as the result from calling connect on a nonblocking * SOCK_STREAM socket, since some time must elapse for the connection * to be established. */ resultString = &stringWSAEWOULDBLOCK[0]; break; case WSAEINPROGRESS: /* (10036) * Operation now in progress. * A blocking operation is currently executing. Windows Sockets only * allows a single blocking operation per- task or thread to be * outstanding, and if any other function call is made (whether or not it * references that or any other socket) the function fails with the * WSAEINPROGRESS error. */ resultString = &stringWSAEINPROGRESS[0]; break; case WSAEALREADY: /* (10037) * Operation already in progress. * An operation was attempted on a nonblocking socket with an operation * already in progress that is, calling connect a second time on a * nonblocking socket that is already connecting, or canceling an * asynchronous request (WSAAsyncGetXbyY) that has already been canceled * or completed. */ resultString = &stringWSAEALREADY[0]; break; case WSAENOTSOCK: /* (10038) * Socket operation on nonsocket. * An operation was attempted on something that is not a socket. * Either the socket handle parameter did not reference a valid * socket, or for select, a member of an fd_set was not valid. */ resultString = &stringWSAENOTSOCK[0]; break; case WSAEDESTADDRREQ: /* (10039) * Destination address required. * A required address was omitted from an operation on a socket. * For example, this error is returned if sendto is called with * the remote address of ADDR_ANY. */ resultString = &stringWSAEDESTADDRREQ[0]; break; case WSAEMSGSIZE: /* (10040) * Message too long. * A message sent on a datagram socket was larger than the internal * message buffer or some other network limit, or the buffer used * to receive a datagram was smaller than the datagram itself. */ resultString = &stringWSAEMSGSIZE[0]; break; case WSAEPROTOTYPE: /* (10041) * Protocol wrong type for socket. * A protocol was specified in the socket function call that does * not support the semantics of the socket type requested. For example, * the ARPA Internet UDP protocol cannot be specified with a socket type * of SOCK_STREAM. */ resultString = &stringWSAEPROTOTYPE[0]; break; case WSAENOPROTOOPT: /* (10042) * Bad protocol option. * An unknown, invalid or unsupported option or level was specified in * a getsockopt or setsockopt call. */ resultString = &stringWSAENOPROTOOPT[0]; break; case WSAEPROTONOSUPPORT: /* (10043) * Protocol not supported. * The requested protocol has not been configured into the system, * or no implementation for it exists. For example, a socket call * requests a SOCK_DGRAM socket, but specifies a stream protocol. */ resultString = &stringWSAEPROTONOSUPPORT[0]; break; case WSAESOCKTNOSUPPORT: /* (10044) * Socket type not supported. * The support for the specified socket type does not exist in * this address family. For example, the optional type SOCK_RAW * might be selected in a socket call, and the implementation does * not support SOCK_RAW sockets at all. */ resultString = &stringWSAESOCKTNOSUPPORT[0]; break; case WSAEOPNOTSUPP: /* (10045) * Operation not supported. * The attempted operation is not supported for the type of object * referenced. Usually this occurs when a socket descriptor to a * socket that cannot support this operation is trying to accept * a connection on a datagram socket. */ resultString = &stringWSAEOPNOTSUPP[0]; break; case WSAEPFNOSUPPORT: /* (10046) * Protocol family not supported. * The protocol family has not been configured into the system or no * implementation for it exists. This message has a slightly different * meaning from WSAEAFNOSUPPORT. However, it is interchangeable in most * cases, and all Windows Sockets functions that return one of these * messages also specify WSAEAFNOSUPPORT. */ resultString = &stringWSAEPFNOSUPPORT[0]; break; case WSAEAFNOSUPPORT: /* (10047) * Address family not supported by protocol family. * An address incompatible with the requested protocol was used. * All sockets are created with an associated address family * (that is, AF_INET for Internet Protocols) and a generic protocol * type (that is, SOCK_STREAM). This error is returned if an incorrect * protocol is explicitly requested in the socket call, or if * an address of the wrong family is used for a socket, for example, * in sendto. */ resultString = &stringWSAEAFNOSUPPORT[0]; break; case WSAEADDRINUSE: /* (10048) * Address already in use. * Typically, only one usage of each socket address (protocol/IP * address/port) is permitted. This error occurs if an application * attempts to bind a socket to an IP address/port that has already been * used for an existing socket, or a socket that was not closed properly, * or one that is still in the process of closing. For server applications * that need to bind multiple sockets to the same port number, consider * using setsockopt(SO_REUSEADDR). Client applications usually need not * call bind at all connect chooses an unused port automatically. When * bind is called with a wildcard address (involving ADDR_ANY), a * WSAEADDRINUSE error could be delayed until the specific address is * committed. This could happen with a call to another function * later, including connect, listen, WSAConnect, or WSAJoinLeaf. */ resultString = &stringWSAEADDRINUSE[0]; break; case WSAEADDRNOTAVAIL: /* (10049) * Cannot assign requested address. * The requested address is not valid in its context. This normally * results from an attempt to bind to an address that is not valid for the * local machine. This can also result from connect, sendto, WSAConnect, * WSAJoinLeaf, or WSASendTo when the remote address or port is not valid * for a remote machine (for example, address or port 0). */ resultString = &stringWSAEADDRNOTAVAIL[0]; break; case WSAENETDOWN: /* (10050) * Network is down. * A socket operation encountered a dead network. This could indicate a * serious failure of the network system (that is, the protocol stack * that the Windows Sockets DLL runs over), the network interface, or * the local network itself. */ resultString = &stringWSAENETDOWN[0]; break; case WSAENETUNREACH: /* (10051) * Network is unreachable. * A socket operation was attempted to an unreachable network. This * usually means the local software knows no route to reach the remote * host. */ resultString = &stringWSAENETUNREACH[0]; break; case WSAENETRESET: /* (10052) * Network dropped connection on reset. * The connection has been broken due to keep-alive activity detecting * a failure while the operation was in progress. It can also be returned * by setsockopt if an attempt is made to set SO_KEEPALIVE on a connection * that has already failed. */ resultString = &stringWSAENETRESET[0]; break; case WSAECONNABORTED: /* ((10053) * (Software caused connection abort. * (An established connection was aborted by the software in your host * machine, (possibly due to a data transmission time-out or protocol * error. */ resultString = &stringWSAECONNABORTED[0]; break; case WSAECONNRESET: /* (10054) * Connection reset by peer. * An existing connection was forcibly closed by the remote host. * This normally results if the peer application on the remote host * is suddenly stopped, the host is rebooted, or the remote host uses * a hard close (see setsockopt for more information on the SO_LINGER * option on the remote socket.) This error may also result if a * connection was broken due to keep-alive activity detecting a failure * while one or more operations are in progress. Operations that were * in progress fail with WSAENETRESET. Subsequent operations fail * with WSAECONNRESET. */ resultString = &stringWSAECONNRESET[0]; break; case WSAENOBUFS: /* (10055) * No buffer space available. * An operation on a socket could not be performed because the system * lacked sufficient buffer space or because a queue was full. */ resultString = &stringWSAENOBUFS[0]; break; case WSAEISCONN: /* (10056) * Socket is already connected. * A connect request was made on an already-connected socket. Some * implementations also return this error if sendto is called on a * connected SOCK_DGRAM socket (for SOCK_STREAM sockets, the to parameter * in sendto is ignored) although other implementations treat this as * a legal occurrence. */ resultString = &stringWSAEISCONN[0]; break; case WSAENOTCONN: /* (10057) * Socket is not connected. * A request to send or receive data was disallowed because the socket is * not connected and (when sending on a datagram socket using sendto) no * address was supplied. Any other type of operation might also return * this error for example, setsockopt setting SO_KEEPALIVE if the * connection has been reset. */ resultString = &stringWSAENOTCONN[0]; break; case WSAESHUTDOWN: /* (10058) * Cannot send after socket shutdown. * A request to send or receive data was disallowed because the socket * had already been shut down in that direction with a previous shutdown * call. By calling shutdown a partial close of a socket is requested, * which is a signal that sending or receiving, or both have been * discontinued. */ resultString = &stringWSAESHUTDOWN[0]; break; case WSAETOOMANYREFS: /* (10059) * Keine Beschreibung */ resultString = &stringWSAETOOMANYREFS[0]; break; case WSAETIMEDOUT: /* ((10060) * (Connection timed out. * (A connection attempt failed because the connected party did not * properly (respond after a period of time, or the established connection * failed (because the connected host has failed to respond. */ resultString = &stringWSAETIMEDOUT[0]; break; case WSAECONNREFUSED: /* (10061) * Connection refused. * No connection could be made because the target machine actively refused * it. This usually results from trying to connect to a service that is * inactive on the foreign host—that is, one with no server application * running. */ resultString = &stringWSAECONNREFUSED[0]; break; case WSAELOOP: /* (10062) * No description */ resultString = &stringWSAELOOP[0]; break; case WSAENAMETOOLONG: /* (10063) * No description */ resultString = &stringWSAENAMETOOLONG[0]; break; case WSAEHOSTDOWN: /* (10064) * Host is down. * A socket operation failed because the destination host is down. * A socket operation encountered a dead host. Networking activity on the * local host has not been initiated. These conditions are more likely to * be indicated by the error WSAETIMEDOUT. */ resultString = &stringWSAEHOSTDOWN[0]; break; case WSAEHOSTUNREACH: /* (10065) * (No route to host. * A socket operation was attempted to an unreachable host. * See WSAENETUNREACH. */ resultString = &stringWSAEHOSTUNREACH[0]; break; case WSAENOTEMPTY: /* (10065) * No description */ resultString = &stringWSAENOTEMPTY[0]; break; case WSAEPROCLIM: /* (10067) * Too many processes. * A Windows Sockets implementation may have a limit on the number of * applications that can use it simultaneously. WSAStartup may fail with * this error if the limit has been reached. */ resultString = &stringWSAEPROCLIM[0]; break; case WSAEUSERS: /* (10068) * No description */ resultString = &stringWSAEUSERS[0]; break; case WSAEDQUOT: /* (10069) * (No description */ resultString = &stringWSAEDQUOT[0]; break; case WSAESTALE: /* (10070) * No description */ resultString = &stringWSAESTALE[0]; break; case WSAEREMOTE: /* (10071) * No description */ resultString = &stringWSAEREMOTE[0]; break; case WSASYSNOTREADY: /* (10091) * Network subsystem is unavailable. * This error is returned by WSAStartup if the Windows Sockets * implementation cannot function at this time because the underlying * system it uses to provide network services is currently unavailable. * Users should check: * That the appropriate Windows Sockets DLL file is in the current path. * That they are not trying to use more than one Windows Sockets * implementation simultaneously. If there is more than one Winsock DLL on * your system, be sure the first one in the path is appropriate for the * network subsystem currently loaded. * The Windows Sockets implementation documentation to be sure all * necessary components are currently installed and configured correctly. */ resultString = &stringWSASYSNOTREADY[0]; break; case WSAVERNOTSUPPORTED: /* (10092) * Winsock.dll version out of range. * The current Windows Sockets implementation does not support the * Windows Sockets specification version requested by the application. * Check that no old Windows Sockets DLL files are being accessed. */ resultString = &stringWSAVERNOTSUPPORTED[0]; break; case WSANOTINITIALISED: /* (10093) * Successful WSAStartup not yet performed. * Either the application has not called WSAStartup or WSAStartup failed. * The application may be accessing a socket that the current active task * does not own (that is, trying to share a socket between tasks), or * WSACleanup has been called too many times. */ resultString = &stringWSANOTINITIALISED[0]; break; case WSAEDISCON: /* (10101) * Graceful shutdown in progress. * Returned by WSARecv and WSARecvFrom to indicate that the remote party * has initiated a graceful shutdown sequence. */ resultString = &stringWSAEDISCON[0]; break; case WSAENOMORE: /* (10102) * No description */ resultString = &stringWSAENOMORE[0]; break; case WSAECANCELLED: /* (10103) * No description */ resultString = &stringWSAECANCELLED[0]; break; case WSAEINVALIDPROVIDER: /* (10105) * No description */ resultString = &stringWSAEINVALIDPROVIDER[0]; break; case WSAEPROVIDERFAILEDINIT: /* (10106) * No description */ resultString = &stringWSAEPROVIDERFAILEDINIT[0]; break; case WSASYSCALLFAILURE: /* (OS dependent) * System call failure. * Returned when a system call that should never fail does. For example, * if a call to WaitForMultipleObjects fails or one of the registry * functions fails trying to manipulate the protocol/name space catalogs. */ resultString = &stringWSASYSCALLFAILURE[0]; break; case WSASERVICE_NOT_FOUND: /* (10108) * No description */ resultString = &stringWSASERVICE_NOT_FOUND[0]; break; case WSATYPE_NOT_FOUND: /* (10109) * Class type not found. * The specified class was not found. */ resultString = &stringWSATYPE_NOT_FOUND[0]; break; case WSA_E_NO_MORE: /* (10110) * No description */ resultString = &stringWSA_E_NO_MORE[0]; break; case WSA_E_CANCELLED: /* No description */ resultString = &stringWSA_E_CANCELLED[0]; break; case WSAEREFUSED: /* No description */ resultString = &stringWSAEREFUSED[0]; break; case WSAHOST_NOT_FOUND: /* (11001) * Host not found. * No such host is known. The name is not an official host name or alias, * or it cannot be found in the database(s) being queried. This error may * also be returned for protocol and service queries, and means that the * specified name could not be found in the relevant database. */ resultString = &stringWSAHOST_NOT_FOUND[0]; break; case WSATRY_AGAIN: /* ((11002) * (Nonauthoritative host not found. * (This is usually a temporary error during host name resolution and * means (that the local server did not receive a response from an * authoritative (server. A retry at some time later may be successful. */ resultString = &stringWSATRY_AGAIN[0]; break; case WSANO_RECOVERY: /* (11003) * This is a nonrecoverable error. * This indicates some sort of nonrecoverable error occurred during a * database lookup. This may be because the database files (for example, * BSD-compatible HOSTS, SERVICES, or PROTOCOLS files) could not be found, * or a DNS request was returned by the server with a severe error. */ resultString = &stringWSANO_RECOVERY[0]; break; case WSANO_DATA: /* (11004) * Valid name, no data record of requested type. * The requested name is valid and was found in the database, but it * does not have the correct associated data being resolved for. The * usual example for this is a host name-to-address translation attempt * (using gethostbyname or WSAAsyncGetHostByName) which uses the DNS * (Domain Name Server). An MX record is returned but no A record * indicating the host itself exists, but is not directly reachable. */ resultString = &stringWSANO_DATA[0]; break; /* Multiple defined * case WSANO_ADDRESS: * * (11004) * * No description * resultString = &stringWSANO_ADDRESS[0]; * break; */ case WSA_IO_PENDING: /* (OS dependent) * Overlapped operations will complete later. * The application has initiated an overlapped operation that cannot be * completed immediately. A completion indication will be given later when * the operation has been completed. */ resultString = &stringWSA_IO_PENDING[0]; break; case WSA_INVALID_HANDLE: /* (OS dependent) * Specified event object handle is invalid. * An application attempts to use an event object, but the specified * handle is not valid. */ resultString = &stringWSA_INVALID_HANDLE[0]; break; case WSA_INVALID_PARAMETER: /* (OS dependent) * One or more parameters are invalid. * An application used a Windows Sockets function which directly maps to * a Win32 function. The Win32 function is indicating a problem with one * or more parameters. */ resultString = &stringWSA_INVALID_PARAMETER[0]; break; /* Not defined in GNU Compiler * case WSAINVALIDPROCTABLE: * (OS dependent) * Invalid procedure table from service provider. * A service provider returned a bogus procedure table to Ws2_32.dll. * (Usually caused by one or more of the function pointers being null.) * resultString = &stringWSAINVALIDPROCTABLE[0]; * break; */ /* Not defined in GNU Compiler * case WSAINVALIDPROVIDER: * (OS dependent) * Invalid service provider version number. * A service provider returned a version number other than 2.0. * resultString = &stringWSAINVALIDPROVIDER[0]; * break; */ case WSA_IO_INCOMPLETE: /* (OS dependent) * Overlapped I/O event object not in signaled state. * The application has tried to determine the status of an overlapped * operation which is not yet completed. Applications that use * WSAGetOverlappedResult (with the fWait flag set to FALSE) in a polling * mode to determine when an overlapped operation has completed, get this * error code until the operation is complete. */ resultString = &stringWSA_IO_INCOMPLETE[0]; break; case WSA_NOT_ENOUGH_MEMORY: /* (OS dependent) * Insufficient memory available. * An application used a Windows Sockets function that directly maps to * a Win32 function. The Win32 function is indicating a lack of required * memory resources. */ resultString = &stringWSA_NOT_ENOUGH_MEMORY[0]; break; /* Not defined in GNU Compiler * case WSAPROVIDERFAILEDINIT: * (OS dependent) * Unable to initialize a service provider. * Either a service provider's DLL could not be loaded (LoadLibrary failed) or the provider's WSPStartup/NSPStartup function failed. * resultString = &stringWSAPROVIDERFAILEDINIT[0]; * break; */ case WSA_OPERATION_ABORTED: /* (OS dependent) * Overlapped operation aborted. */ resultString = &stringWSA_OPERATION_ABORTED[0]; break; default: resultString = &stringDEFAULT[0]; } return(resultString); } int GWEN_Socket_ModuleInit(void) { WORD wVersionRequested; WSADATA wsaData; if (!gwen_socket_is_initialized) { int rv; /* setup WINSOCK (request version 1.1) */ wVersionRequested=MAKEWORD(1,1); rv=WSAStartup(wVersionRequested,&wsaData); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "Error on WSAStartup"); return rv; } /* check if the version returned is that we requested */ if (LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1) { WSACleanup(); return GWEN_ERROR_STARTUP; } gwen_socket_is_initialized=1; } return 0; } int GWEN_Socket_ModuleFini(void) { if (gwen_socket_is_initialized) { WSACleanup(); gwen_socket_is_initialized=0; } return 0; } int GWEN_SocketSet_Clear(GWEN_SOCKETSET *ssp) { assert(ssp); FD_ZERO(&(ssp->set)); ssp->highest=0; return 0; } GWEN_SOCKETSET *GWEN_SocketSet_new(void) { GWEN_SOCKETSET *ssp; GWEN_NEW_OBJECT(GWEN_SOCKETSET, ssp); FD_ZERO(&(ssp->set)); return ssp; } GWEN_SOCKET *GWEN_Socket_fromFile(int fd) { DBG_ERROR(GWEN_LOGDOMAIN, "No file sockets available for this system"); return 0; } void GWEN_SocketSet_free(GWEN_SOCKETSET *ssp) { if (ssp) { FD_ZERO(&(ssp->set)); GWEN_FREE_OBJECT(ssp); } } int GWEN_SocketSet_AddSocket(GWEN_SOCKETSET *ssp, const GWEN_SOCKET *sp) { assert(ssp); assert(sp); if (sp->socket==-1) { DBG_INFO(GWEN_LOGDOMAIN, "Socket is not connected, can not add"); return GWEN_ERROR_NOT_OPEN; } ssp->highest=(ssp->highestsocket)?sp->socket:ssp->highest; FD_SET(sp->socket,&(ssp->set)); ssp->count++; return 0; } int GWEN_SocketSet_RemoveSocket(GWEN_SOCKETSET *ssp, const GWEN_SOCKET *sp) { assert(ssp); assert(sp); ssp->highest=(ssp->highestsocket)?sp->socket:ssp->highest; FD_CLR(sp->socket,&(ssp->set)); ssp->count--; return 0; } int GWEN_SocketSet_HasSocket(GWEN_SOCKETSET *ssp, const GWEN_SOCKET *sp) { assert(ssp); assert(sp); return FD_ISSET(sp->socket,&(ssp->set)); } int GWEN_SocketSet_GetSocketCount(GWEN_SOCKETSET *ssp) { assert(ssp); return ssp->count; } GWEN_SOCKET *GWEN_Socket_new(GWEN_SOCKETTYPE socketType) { GWEN_SOCKET *sp; GWEN_NEW_OBJECT(GWEN_SOCKET, sp); GWEN_LIST_INIT(GWEN_SOCKET, sp); sp->type=socketType; return sp; } void GWEN_Socket_free(GWEN_SOCKET *sp) { if (sp) { GWEN_LIST_FINI(GWEN_SOCKET, sp); GWEN_FREE_OBJECT(sp); } } int GWEN_Socket_Open(GWEN_SOCKET *sp) { int s; assert(sp); switch(sp->type) { case GWEN_SocketTypeTCP: #ifdef PF_INET s=socket(PF_INET, SOCK_STREAM,0); #else s=socket(AF_INET, SOCK_STREAM,0); #endif if (s==-1) return WSAGetLastError(); sp->socket=s; break; case GWEN_SocketTypeUDP: #ifdef PF_INET s=socket(PF_INET, SOCK_DGRAM,0); #else s=socket(AF_INET, SOCK_DGRAM,0); #endif if (s==-1) return WSAGetLastError(); sp->socket=s; break; case GWEN_SocketTypeUnix: DBG_ERROR(GWEN_LOGDOMAIN, "No unix domain sockets available for this system"); return GWEN_ERROR_BAD_ADDRESS_FAMILY; break; default: return GWEN_ERROR_BAD_SOCKETTYPE; } /* switch */ return 0; } int GWEN_Socket_Connect(GWEN_SOCKET *sp, const GWEN_INETADDRESS *addr) { assert(sp); if (connect(sp->socket, addr->address, addr->size)) { if (WSAGetLastError()!=WSAEINPROGRESS && WSAGetLastError()!=WSAEWOULDBLOCK) { DBG_INFO(GWEN_LOGDOMAIN, "Error %d (%s)", WSAGetLastError(), h_strerror(WSAGetLastError())); return WSAGetLastError(); } else return GWEN_ERROR_IN_PROGRESS; } return 0; } int GWEN_Socket_Close(GWEN_SOCKET *sp) { int rv; assert(sp); if (sp->socket==-1) return GWEN_ERROR_NOT_OPEN; rv=closesocket(sp->socket); sp->socket=-1; if (rv==-1) return WSAGetLastError(); return 0; } int GWEN_Socket_Bind(GWEN_SOCKET *sp, const GWEN_INETADDRESS *addr) { assert(sp); assert(addr); if (bind(sp->socket, addr->address, addr->size)) return WSAGetLastError(); return 0; } int GWEN_Socket_Listen(GWEN_SOCKET *sp, int backlog) { assert(sp); if (listen(sp->socket, backlog)) return WSAGetLastError(); return 0; } int GWEN_Socket_Accept(GWEN_SOCKET *sp, GWEN_INETADDRESS **newaddr, GWEN_SOCKET **newsock) { int addrlen; GWEN_INETADDRESS *localAddr; GWEN_SOCKET *localSocket; GWEN_AddressFamily af; assert(sp); assert(newsock); assert(newaddr); switch(sp->type) { case GWEN_SocketTypeTCP: case GWEN_SocketTypeUDP: af=GWEN_AddressFamilyIP; break; case GWEN_SocketTypeUnix: af=GWEN_AddressFamilyUnix; break; default: return GWEN_ERROR_BAD_SOCKETTYPE; } /* switch */ localAddr=GWEN_InetAddr_new(af); addrlen=localAddr->size; localSocket=GWEN_Socket_new(sp->type); localSocket->socket=accept(sp->socket, localAddr->address, &addrlen); if (localSocket->socket==-1) { GWEN_InetAddr_free(localAddr); GWEN_Socket_free(localSocket); if (WSAGetLastError()==WSAEWOULDBLOCK) return GWEN_ERROR_TIMEOUT; else return WSAGetLastError(); } localSocket->type=sp->type; localAddr->size=addrlen; *newaddr=localAddr; *newsock=localSocket; return 0; } int GWEN_Socket_GetPeerAddr(GWEN_SOCKET *sp, GWEN_INETADDRESS **newaddr) { int addrlen; GWEN_INETADDRESS *localAddr; GWEN_AddressFamily af; assert(sp); assert(newaddr); switch(sp->type) { case GWEN_SocketTypeTCP: case GWEN_SocketTypeUDP: af=GWEN_AddressFamilyIP; break; case GWEN_SocketTypeUnix: af=GWEN_AddressFamilyUnix; break; default: return GWEN_ERROR_BAD_SOCKETTYPE; } /* switch */ localAddr=GWEN_InetAddr_new(af); addrlen=localAddr->size; if (getpeername(sp->socket, localAddr->address, &addrlen)) { GWEN_InetAddr_free(localAddr); return WSAGetLastError(); } localAddr->size=addrlen; *newaddr=localAddr; return 0; } int GWEN_Socket_Select(GWEN_SOCKETSET *rs, GWEN_SOCKETSET *ws, GWEN_SOCKETSET *xs, int timeout) { int h,h1,h2,h3; fd_set *s1,*s2,*s3; int rv; struct timeval tv; s1=s2=s3=0; h1=h2=h3=0; if (rs) { h1=rs->highest; s1=&rs->set; } if (ws) { h2=ws->highest; s2=&ws->set; } if (xs) { h3=xs->highest; s3=&xs->set; } h=(h1>h2)?h1:h2; h=(h>h3)?h:h3; if (timeout<0) /* wait for ever */ rv=select(h+1,s1,s2,s3,0); else { /* return immediately */ tv.tv_sec=0; tv.tv_usec=timeout*1000; rv=select(h+1,s1,s2,s3,&tv); } if (rv<0) { /* error */ if (WSAGetLastError()==WSAEINTR) return GWEN_ERROR_INTERRUPTED; else return WSAGetLastError(); } if (rv==0) /* timeout */ return GWEN_ERROR_TIMEOUT; return 0; } int GWEN_Socket_Read(GWEN_SOCKET *sp, char *buffer, int *bsize) { int i; assert(sp); assert(buffer); assert(bsize); i=recv(sp->socket,buffer, *bsize,0); if (i<0) { if (WSAGetLastError()==WSAEWOULDBLOCK) return GWEN_ERROR_TIMEOUT; else if (WSAGetLastError()==WSAEINTR) return GWEN_ERROR_INTERRUPTED; else return WSAGetLastError(); } *bsize=i; return 0; } int GWEN_Socket_Write(GWEN_SOCKET *sp, const char *buffer, int *bsize) { int i; assert(sp); assert(buffer); assert(bsize); #ifndef MSG_NOSIGNAL i=send(sp->socket,buffer, *bsize,0); #else i=send(sp->socket,buffer, *bsize, MSG_NOSIGNAL); #endif if (i<0) { if (WSAGetLastError()==WSAEWOULDBLOCK) return GWEN_ERROR_TIMEOUT; else if (WSAGetLastError()==WSAEINTR) return GWEN_ERROR_INTERRUPTED; else return WSAGetLastError(); } *bsize=i; return 0; } int GWEN_Socket_ReadFrom(GWEN_SOCKET *sp, GWEN_INETADDRESS **newaddr, char *buffer, int *bsize) { int addrlen; int i; GWEN_INETADDRESS *localAddr; GWEN_AddressFamily af; assert(sp); assert(newaddr); assert(buffer); assert(bsize); switch(sp->type) { case GWEN_SocketTypeTCP: case GWEN_SocketTypeUDP: af=GWEN_AddressFamilyIP; break; case GWEN_SocketTypeUnix: af=GWEN_AddressFamilyUnix; break; default: return GWEN_ERROR_BAD_SOCKETTYPE; } /* switch */ localAddr=GWEN_InetAddr_new(af); addrlen=localAddr->size; i=recvfrom(sp->socket, buffer, *bsize, 0, localAddr->address, &addrlen); if (i<0) { GWEN_InetAddr_free(localAddr); if (WSAGetLastError()==WSAEWOULDBLOCK) return GWEN_ERROR_TIMEOUT; else if (WSAGetLastError()==WSAEINTR) return GWEN_ERROR_INTERRUPTED; else return WSAGetLastError(); } *bsize=i; localAddr->size=addrlen; *newaddr=localAddr; return 0; } int GWEN_Socket_WriteTo(GWEN_SOCKET *sp, const GWEN_INETADDRESS *addr, const char *buffer, int *bsize) { int i; assert(sp); assert(addr); assert(buffer); assert(bsize); i=sendto(sp->socket, buffer, *bsize, #ifndef MSG_NOSIGNAL 0, #else MSG_NOSIGNAL, #endif addr->address, addr->size); if (i<0) { if (WSAGetLastError()==WSAEWOULDBLOCK) return GWEN_ERROR_TIMEOUT; else if (WSAGetLastError()==WSAEINTR) return GWEN_ERROR_INTERRUPTED; else return WSAGetLastError(); } *bsize=i; return 0; } int GWEN_Socket_SetBlocking(GWEN_SOCKET *sp, int b) { unsigned long fl; assert(sp); fl=!b; if (ioctlsocket(sp->socket,FIONBIO,&fl)) { DBG_INFO(GWEN_LOGDOMAIN, "Error %d (%s)", WSAGetLastError(), h_strerror(WSAGetLastError())); return WSAGetLastError(); } return 0; } int GWEN_Socket_SetBroadcast(GWEN_SOCKET *sp, int fl) { assert(sp); if (sp->type==GWEN_SocketTypeUnix) return 0; if (setsockopt(sp->socket, SOL_SOCKET, SO_BROADCAST, (const char*)&fl, sizeof(fl))) return WSAGetLastError(); return 0; } int GWEN_Socket_SetReuseAddress(GWEN_SOCKET *sp, int fl) { assert(sp); /*if (sp->type==SocketTypeUnix) return 0;*/ if (setsockopt(sp->socket, SOL_SOCKET, SO_REUSEADDR, (const char*)&fl, sizeof(fl))) return WSAGetLastError(); return 0; } int GWEN_Socket_GetSocketError(GWEN_SOCKET *sp) { int rv; int rvs; assert(sp); rvs=sizeof(rv); if (-1==getsockopt(sp->socket,SOL_SOCKET,SO_ERROR,(char*)&rv,&rvs)) { DBG_INFO(GWEN_LOGDOMAIN, "getsockopt(): %s", h_strerror(WSAGetLastError())); return GWEN_ERROR_IO; } if (rv) { switch(rv) { case WSAEWOULDBLOCK: return GWEN_ERROR_TIMEOUT; case WSAEINTR: return GWEN_ERROR_INTERRUPTED; default: DBG_INFO(GWEN_LOGDOMAIN, "getsockopt(): %d (%s)", rv, h_strerror(rv)); return GWEN_ERROR_IO; } } return 0; } int GWEN_Socket_WaitForRead(GWEN_SOCKET *sp, int timeout) { int err; GWEN_SOCKETSET *set; set=GWEN_SocketSet_new(); err=GWEN_SocketSet_AddSocket(set,sp); if (err) { GWEN_SocketSet_free(set); return err; } err=GWEN_Socket_Select(set,0,0,timeout); GWEN_SocketSet_free(set); return err; } int GWEN_Socket_WaitForWrite(GWEN_SOCKET *sp, int timeout) { int err; GWEN_SOCKETSET *set; set=GWEN_SocketSet_new(); err=GWEN_SocketSet_AddSocket(set,sp); if (err) { GWEN_SocketSet_free(set); return err; } err=GWEN_Socket_Select(0,set,0,timeout); GWEN_SocketSet_free(set); return err; } GWEN_SOCKETTYPE GWEN_Socket_GetSocketType(GWEN_SOCKET *sp) { assert(sp); return sp->type; } int GWEN_Socket_GetSocketInt(const GWEN_SOCKET *sp) { assert(sp); return sp->socket; } const char *GWEN_Socket_ErrorString(int c) { const char *s; switch(c) { case 0: s="Success"; break; case GWEN_SOCKET_ERROR_BAD_SOCKETTYPE: s="Bad socket type"; break; case GWEN_SOCKET_ERROR_NOT_OPEN: s="Socket not open"; break; case GWEN_SOCKET_ERROR_TIMEOUT: s="Socket timeout"; break; case GWEN_SOCKET_ERROR_IN_PROGRESS: s="Operation in progress"; break; case GWEN_SOCKET_ERROR_INTERRUPTED: s="Operation interrupted by system signal."; break; case GWEN_SOCKET_ERROR_ABORTED: s="Operation aborted by user."; break; case GWEN_SOCKET_ERROR_BROKEN_PIPE: s="Broken connection."; break; default: if (c>0) s=h_strerror(c); else s=(const char*)0; } /* switch */ return s; } gwenhywfar-4.15.2beta/src/os/windows/gwentime.c0000644000175000017500000000470312416477066016447 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Wed Mar 24 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwentime_p.h" #include "../gwentime_l.h" #include #include #include #include #include #include /* The idea of this function is taken from a posting by Anders Carlsson on the mailing list * bug-gnu-chess (http://mail.gnu.org/archive/html/bug-gnu-chess/2004-01/msg00020.html) */ int GWEN_Time__GetCurrentTime(GWEN_TIME *ti) { long sec, msec; union { uint64_t ns100; /* time since 1 Jan 1601 in 100ns units */ FILETIME ft; } current_date; GetSystemTimeAsFileTime( &(current_date.ft)); msec=(long)((current_date.ns100 / 10000LL) % 1000LL ); sec=(long)((current_date.ns100-(116444736000000000LL))/10000000LL); GWEN_Time__SetSecsAndMSecs(ti, sec, msec); return 0; } gwenhywfar-4.15.2beta/src/os/windows/semaphore_p.h0000644000175000017500000000336312364015347017130 00000000000000/*************************************************************************** begin : Tue Jul 29 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_SEMAPHORE_P_H #define GWEN_SEMAPHORE_P_H #include #include #include struct GWEN_SEMAPHORE { HANDLE semId; }; #endif gwenhywfar-4.15.2beta/src/os/windows/inetaddr_p.h0000644000175000017500000000444012364015347016734 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Tue Oct 02 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /** * @file chameleon/inetaddr_p.h * @short This file contains the internet address handling module */ #ifndef GWEN_INETADDR_P_H #define GWEN_INETADDR_P_H #include #include #include #include #include #ifdef HAVE_ARPA_INET_H # include #endif #ifdef __cplusplus extern "C" { #endif /** * @internal */ GWENHYWFAR_API struct GWEN_INETADDRESSSTRUCT { GWEN_AddressFamily af; int size; struct sockaddr *address; }; int GWEN_InetAddr_TranslateHError(int herr); #ifdef __cplusplus } #endif /*@} defgroup */ #endif /* MOD_INETADDR_H */ gwenhywfar-4.15.2beta/src/os/inetsocket_l.h0000644000175000017500000000372412364015347015620 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Tue Oct 02 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_SOCKET_L_H #define GWEN_SOCKET_L_H #include #ifdef __cplusplus extern "C" { #endif /** * Initializes this module. */ int GWEN_Socket_ModuleInit(void); /** * Deinitializes this module. */ int GWEN_Socket_ModuleFini(void); #ifdef __cplusplus } #endif #endif /* #ifndef GWEN_SOCKET_H */ gwenhywfar-4.15.2beta/src/os/Makefile.am0000644000175000017500000000161012364015347015010 00000000000000INCLUDES= -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/parser @all_includes@ AM_CFLAGS=@visibility_cflags@ -DBUILDING_GWENHYWFAR SUBDIRS=@GWEN_OS@ DIST_SUBDIRS=posix windows iheaderdir=$(gwenhywfar_headerdir_am)/gwenhywfar iheader_HEADERS=\ directory.h \ fslock.h \ gwentime.h \ inetaddr.h \ inetsocket.h \ libloader.h \ process.h \ mutex.h \ gwensemaphore.h \ gwendate.h noinst_HEADERS= \ gwendate_p.h \ gwentime_l.h \ gwentime_p.h \ inetaddr_l.h \ inetsocket_l.h \ libloader_l.h \ process_l.h noinst_LTLIBRARIES=libos.la libos_la_SOURCES=\ directory_all.c \ gwentime_all.c \ gwendate.c libos_la_LIBADD=@GWEN_OS@/libosimpl.la sources: for f in $(libos_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-4.15.2beta/src/os/gwendate_p.h0000644000175000017500000000511012416477066015251 00000000000000/*************************************************************************** begin : Tue Jul 07 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_DATE_P_H #define GWEN_DATE_P_H #include "gwendate.h" #define GWEN_DATE_TMPL_MAX_COUNT 32 struct GWEN_DATE { int year; int month; int day; int julian; char asString[10]; }; typedef struct GWEN_DATE_TMPLCHAR GWEN_DATE_TMPLCHAR; GWEN_LIST_FUNCTION_DEFS(GWEN_DATE_TMPLCHAR, GWEN_TimeTmplChar) struct GWEN_DATE_TMPLCHAR { GWEN_LIST_ELEMENT(GWEN_DATE_TMPLCHAR) char character; int count; int maxCount; int nextChar; char *content; }; static GWEN_DATE_TMPLCHAR *GWEN_DateTmplChar_new(char c); static void GWEN_DateTmplChar_free(GWEN_DATE_TMPLCHAR *e); static GWEN_DATE_TMPLCHAR *GWEN_Date__findTmplChar(GWEN_DATE_TMPLCHAR_LIST *ll, char c); static void GWEN_Date__sampleTmplChars(GWEN_UNUSED const GWEN_DATE *t, const char *tmpl, GWEN_UNUSED GWEN_BUFFER *buf, GWEN_DATE_TMPLCHAR_LIST *ll); static void GWEN_Date__fillTmplChars(const GWEN_DATE *t, GWEN_DATE_TMPLCHAR_LIST *ll); #endif gwenhywfar-4.15.2beta/src/os/inetaddr.h0000644000175000017500000001332312416477066014733 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Tue Oct 02 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /** * @file inetaddr.h * @short This file contains the internet address handling module */ #ifndef GWEN_INETADDR_H #define GWEN_INETADDR_H #include #include "gwenhywfar/error.h" #ifdef __cplusplus extern "C" { #endif /** * @defgroup MOD_INETADDR Internet Address Module * @ingroup MOD_OS * @short This module handles internet addresses * * This module allows using of internet IP addresses. It is also capable of * resolving addresses and hostnames. * @author Martin Preuss */ /*@{*/ /** @name Error Codes */ /*@{*/ #define GWEN_INETADDR_ERROR_TYPE "InetAddr" #define GWEN_INETADDR_ERROR_MEMORY_FULL 1 #define GWEN_INETADDR_ERROR_BAD_ADDRESS 2 #define GWEN_INETADDR_ERROR_BUFFER_OVERFLOW 3 #define GWEN_INETADDR_ERROR_HOST_NOT_FOUND 4 #define GWEN_INETADDR_ERROR_NO_ADDRESS 5 #define GWEN_INETADDR_ERROR_NO_RECOVERY 6 #define GWEN_INETADDR_ERROR_TRY_AGAIN 7 #define GWEN_INETADDR_ERROR_UNKNOWN_DNS_ERROR 8 #define GWEN_INETADDR_ERROR_BAD_ADDRESS_FAMILY 9 #define GWEN_INETADDR_ERROR_UNSUPPORTED 10 /*@}*/ /** @name Capabilities of this module * */ /*@{*/ #define GWEN_INETADDR_CAPS_AF_TCP 0x00000001 #define GWEN_INETADDR_CAPS_AF_UNIX 0x00000002 GWENHYWFAR_API uint32_t GWEN_InetAddr_GetCapabilities(void); /*@}*/ /** * Address family (in most cases this is AddressFamilyIP) */ typedef enum { /** Internet Protocol (IP) */ GWEN_AddressFamilyIP=0, /* Unix Domain Socket */ GWEN_AddressFamilyUnix } GWEN_AddressFamily; /** * You shoukd treat this type as opaque. Its members are not part of the API, * i.e. they are subject to changes without notice ! */ typedef struct GWEN_INETADDRESSSTRUCT GWEN_INETADDRESS; /** * @name Construction and destruction * * These functions allocate and free administrative data about IP addresses. */ /*@{*/ GWENHYWFAR_API GWEN_INETADDRESS *GWEN_InetAddr_new(GWEN_AddressFamily af); GWENHYWFAR_API void GWEN_InetAddr_free(GWEN_INETADDRESS *ia); GWENHYWFAR_API GWEN_INETADDRESS *GWEN_InetAddr_dup(const GWEN_INETADDRESS *ia); /*@}*/ /** * @name Get and set address * * These functions allow getting and setting of IP addresses either by * hostname or host address. */ /*@{*/ /** * Sets the IP address. * @return error code * @param ia INETADDRESS to manipulate * @param addr IP address in 3-dot-notation ("1.2.3.4") */ GWENHYWFAR_API int GWEN_InetAddr_SetAddress(GWEN_INETADDRESS *ia, const char *addr); /** * Sets the IP name and resolves its address. * @return error code * @param ia INETADDRESS to manipulate * @param name hostname whose address is to be resolved in 3-dot-notation */ GWENHYWFAR_API int GWEN_InetAddr_SetName(GWEN_INETADDRESS *ia, const char *name); /** * Gets the IP address stored in the INETADDRESS. * @return error code * @param ia INETADDRESS to use * @param buffer pointer to a buffer to receive the address * @param bsize size of the buffer in bytes */ GWENHYWFAR_API int GWEN_InetAddr_GetAddress(const GWEN_INETADDRESS *ia, char *buffer, unsigned int bsize); /** * Gets the host name stored in the INETADDRESS. If there is none, then the * IP address stored in the INETADDRESS will be used to resolve the hostname. * @return error code * @param ia INETADDRESS to use * @param buffer pointer to a buffer to receive the name * @param bsize size of the buffer in bytes */ GWENHYWFAR_API int GWEN_InetAddr_GetName(const GWEN_INETADDRESS *ia, char *buffer, unsigned int bsize); /*@}*/ /** * @name Get and set port * * These functions allow getting and setting of the port. */ /*@{*/ /** * Return the port stored in the INETADDRESS * @param ia INETADDRESS to use */ GWENHYWFAR_API int GWEN_InetAddr_GetPort(const GWEN_INETADDRESS *ia); /** * Set the port in the given INETADDRESS. * @return error code * @param ia INETADDRESS to manipulate * @param port port to set (0-65535) */ GWENHYWFAR_API int GWEN_InetAddr_SetPort(GWEN_INETADDRESS *ia, int port); /*@}*/ #ifdef __cplusplus } #endif /*@} defgroup */ #endif /* GWEN_INETADDR_H */ gwenhywfar-4.15.2beta/src/os/fslock.h0000644000175000017500000000775012364015347014421 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Wed Mar 24 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_FSLOCK_H #define GWEN_FSLOCK_H /** @defgroup MOD_FSLOCK Simple File/Folder Lock Management * @ingroup MOD_OS * * @brief This group contains the definition of a GWEN_FSLOCK. * * The files in this group provide a very simple lock mechanism. * When a file is to be locked a lockfile is created exclusively. If this * lockfile can not be created exclusively (because it already exists) the * file is assumed to be locked. * This group can lock files and folders. For folders the lockfile name * consists of the foldername plus "/.dir.lck", for files it is the filename * plus ".lck". This only works if you have write-access to the folder or, * if locking a file, to the folder containing the file to be locked. */ /*@{*/ #ifdef __cplusplus extern "C" { #endif #include #include #include #include typedef struct GWEN_FSLOCK GWEN_FSLOCK; GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_FSLOCK, GWEN_FSLock, GWENHYWFAR_API) GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_FSLOCK, GWEN_FSLock, GWENHYWFAR_API) typedef enum { GWEN_FSLock_TypeUnknown=0, GWEN_FSLock_TypeFile, GWEN_FSLock_TypeDir } GWEN_FSLOCK_TYPE; typedef enum { GWEN_FSLock_ResultOk=0, GWEN_FSLock_ResultError, GWEN_FSLock_ResultTimeout, GWEN_FSLock_ResultBusy, GWEN_FSLock_ResultNoLock, GWEN_FSLock_ResultUserAbort } GWEN_FSLOCK_RESULT; #include #include GWENHYWFAR_API GWEN_FSLOCK *GWEN_FSLock_new(const char *fname, GWEN_FSLOCK_TYPE t); GWENHYWFAR_API void GWEN_FSLock_free(GWEN_FSLOCK *fl); GWENHYWFAR_API void GWEN_FSLock_Attach(GWEN_FSLOCK *fl); /** * This function tries to acquire a lock for the given file/folder. * It waits if necessary (using @ref GWEN_Gui_ProgressStart) while waiting. * @param fl fslock object * @param timeout timeout in milliseconds (special values are * @ref GWEN_TIMEOUT_NONE (which does not wait at all) and * @ref GWEN_TIMEOUT_FOREVER (which waits forever). */ GWENHYWFAR_API GWEN_FSLOCK_RESULT GWEN_FSLock_Lock(GWEN_FSLOCK *fl, int timeout, uint32_t gid); /** * This function removes a lock. * @param fl fslock object */ GWENHYWFAR_API GWEN_FSLOCK_RESULT GWEN_FSLock_Unlock(GWEN_FSLOCK *fl); GWENHYWFAR_API const char *GWEN_FSLock_GetName(const GWEN_FSLOCK *fl); #ifdef __cplusplus } #endif /*@}*/ /* defgroup */ #endif gwenhywfar-4.15.2beta/src/os/gwentime.h0000644000175000017500000001447112416477066014765 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Wed Mar 24 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_TIME_H #define GWEN_TIME_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct GWEN_TIME GWEN_TIME; GWENHYWFAR_API int GWEN_Time_toDb(const GWEN_TIME *t, GWEN_DB_NODE *db); GWENHYWFAR_API GWEN_TIME *GWEN_Time_fromDb(GWEN_DB_NODE *db); GWENHYWFAR_API GWEN_TIME *GWEN_CurrentTime(void); GWENHYWFAR_API GWEN_TIME *GWEN_Time_new(int year, int month, int day, int hour, int min, int sec, int inUtc); /** *

* Parses the data and time from the given string according to the template * string (quite similar to sscanf). *

*

* The string is expected to contain the date/time in local time. *

* The following characters are accepted in the template string: * * * * * * * * *
CharacterMeaning
Ydigit of the year
Mdigit of the month
Ddigit of the day of month
hdigit of the hour
mdigit of the minute
sdigit of the second
* All other characters are ignored.
* Some examples of valid patterns follow: *
    *
  • "YYYYMMDD"
  • *
  • "YYMMDD"
  • *
  • "YY/MM/DD"
  • *
  • "YYYYMMDD hh:mm:ss"
  • *
  • "YYYYMMDD hh:mm"
  • *
  • "YYYYMMDD hhmmss"
  • *
  • et cetera
  • *
* @return 0 on error, a GWEN_TIME pointer otherwise * @param s string containing the date/time * @param tmpl template string */ GWENHYWFAR_API GWEN_TIME *GWEN_Time_fromString(const char *s, const char *tmpl); GWENHYWFAR_API GWEN_TIME *GWEN_Time_fromUtcString(const char *s, const char *tmpl); GWENHYWFAR_API int GWEN_Time_toString(const GWEN_TIME *t, const char *tmpl, GWEN_BUFFER *buf); GWENHYWFAR_API int GWEN_Time_toUtcString(const GWEN_TIME *t, const char *tmpl, GWEN_BUFFER *buf); /** * Creates a GWEN_TIME object from the return value of @ref GWEN_Time_Seconds. */ GWENHYWFAR_API GWEN_TIME *GWEN_Time_fromSeconds(uint32_t s); GWENHYWFAR_API void GWEN_Time_free(GWEN_TIME *t); GWENHYWFAR_API GWEN_TIME *GWEN_Time_dup(const GWEN_TIME *t); /** * Returns the time in seconds since the epoch (00:00:00 UTC Jan 1, 1970). */ GWENHYWFAR_API uint32_t GWEN_Time_Seconds(const GWEN_TIME *t); /** returns the time in milliseconds */ GWENHYWFAR_API double GWEN_Time_Milliseconds(const GWEN_TIME *t); /** * Returns the difference between t1 and t2 in milliseconds */ GWENHYWFAR_API double GWEN_Time_Diff(const GWEN_TIME *t1, const GWEN_TIME *t0); /** * Returns the difference between t1 and t2 in seconds */ GWENHYWFAR_API double GWEN_Time_DiffSeconds(const GWEN_TIME *t1, const GWEN_TIME *t0); /* Compare t1 and t0. Return 0 if both are equal, -1 if t1t0 */ GWENHYWFAR_API int GWEN_Time_Compare(const GWEN_TIME *t1, const GWEN_TIME *t0); /** * Adds the given number of seconds to the given GWEN_TIME. * @return 0 if ok, !=0 on error (see @ref MOD_ERROR_SIMPLE) */ GWENHYWFAR_API int GWEN_Time_AddSeconds(GWEN_TIME *ti, uint32_t secs); /** * Subs the given number of seconds from the given GWEN_TIME. * @return 0 if ok, !=0 on error (see @ref MOD_ERROR_SIMPLE) */ GWENHYWFAR_API int GWEN_Time_SubSeconds(GWEN_TIME *ti, uint32_t secs); /** * Returns the broken down time as local time. */ GWENHYWFAR_API int GWEN_Time_GetBrokenDownTime(const GWEN_TIME *t, int *hours, int *mins, int *secs); /** * Returns the broken down time as UTC time (Greenwhich Mean time). */ GWENHYWFAR_API int GWEN_Time_GetBrokenDownUtcTime(const GWEN_TIME *t, int *hours, int *mins, int *secs); /** * Returns the broken down date as local date. */ GWENHYWFAR_API int GWEN_Time_GetBrokenDownDate(const GWEN_TIME *t, int *days, int *month, int *year); /** * Returns the broken down time as UTC date (Greenwhich Mean time). */ GWENHYWFAR_API int GWEN_Time_GetBrokenDownUtcDate(const GWEN_TIME *t, int *days, int *month, int *year); /** * Returns this date as a struct tm (see ctime(3)) in the local time * zone. */ GWENHYWFAR_API struct tm GWEN_Time_toTm(const GWEN_TIME *t); /** * Returns this date as a time_t value (see time(2)). */ GWENHYWFAR_API time_t GWEN_Time_toTime_t(const GWEN_TIME *t); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/os/inetsocket.h0000644000175000017500000003127512416477066015317 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Tue Oct 02 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /** * @file inetsocket.h * @short This file contains sockets and socket sets. */ #ifndef GWEN_SOCKET_H #define GWEN_SOCKET_H #include #include #include #include #include typedef struct GWEN_SOCKET GWEN_SOCKET; typedef struct GWEN_SOCKETSETSTRUCT GWEN_SOCKETSET; GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_SOCKET, GWEN_Socket, GWENHYWFAR_API) GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_SOCKET, GWEN_Socket, GWENHYWFAR_API) #ifdef __cplusplus extern "C" { #endif /** * @defgroup MOD_SOCKETSANDSETS Sockets and Socket Sets * @ingroup MOD_OS * * This module handles sockets and socket sets. * @{ */ /** @name Error Codes */ /*@{*/ #define GWEN_SOCKET_ERROR_TYPE "Socket" #define GWEN_SOCKET_ERROR_BAD_SOCKETTYPE (-1) #define GWEN_SOCKET_ERROR_NOT_OPEN (-2) #define GWEN_SOCKET_ERROR_TIMEOUT (-3) #define GWEN_SOCKET_ERROR_IN_PROGRESS (-4) #define GWEN_SOCKET_ERROR_STARTUP (-5) #define GWEN_SOCKET_ERROR_INTERRUPTED (-6) #define GWEN_SOCKET_ERROR_UNSUPPORTED (-7) #define GWEN_SOCKET_ERROR_ABORTED (-8) #define GWEN_SOCKET_ERROR_BROKEN_PIPE (-9) /*@}*/ /** * Socket types */ typedef enum { GWEN_SocketTypeTCP=1, GWEN_SocketTypeUDP, GWEN_SocketTypeRAW, GWEN_SocketTypeUnix, GWEN_SocketTypeFile } GWEN_SOCKETTYPE; /** * @defgroup MOD_SOCKETSET Socket Set Functions * * These functions operate on socket sets. A socket set is used by the socket * function @ref GWEN_Socket_Select() to check on which socket changes in state * occurred. * @{ */ /** * @name Creation and destruction * * These functions initialize and de-initialize socket sets. * A socket set is a group of sockets. They are used for the function * @ref GWEN_Socket_Select. */ /*@{*/ GWENHYWFAR_API GWEN_SOCKETSET *GWEN_SocketSet_new(void); GWENHYWFAR_API void GWEN_SocketSet_free(GWEN_SOCKETSET *ssp); GWENHYWFAR_API int GWEN_SocketSet_Clear(GWEN_SOCKETSET *ssp); /*@}*/ /** * @name Add, remove, check sockets * * These functions allow adding and removing sockets to/from a socket set * as well as checking whether a specific socket is part of a socket set. */ /*@{*/ GWENHYWFAR_API int GWEN_SocketSet_AddSocket(GWEN_SOCKETSET *ssp, const GWEN_SOCKET *sp); GWENHYWFAR_API int GWEN_SocketSet_RemoveSocket(GWEN_SOCKETSET *ssp, const GWEN_SOCKET *sp); GWENHYWFAR_API int GWEN_SocketSet_HasSocket(GWEN_SOCKETSET *ssp, const GWEN_SOCKET *sp); GWENHYWFAR_API int GWEN_SocketSet_GetSocketCount(GWEN_SOCKETSET *ssp); /*@}*/ /*end of group socketset */ /*@}*/ /** * @defgroup MOD_SOCKET Socket Functions * * This group operates on IP sockets. * @{ */ /** * @name Creation and Destruction */ /*@{*/ /** * Constructor. You should always use this to create socket variables. */ GWENHYWFAR_API GWEN_SOCKET *GWEN_Socket_new(GWEN_SOCKETTYPE socketType); GWENHYWFAR_API GWEN_SOCKET *GWEN_Socket_fromFile(int fd); /** * Destructor. */ GWENHYWFAR_API void GWEN_Socket_free(GWEN_SOCKET *sp); /** * Arms the socket so that it can be used. This really creates a system * socket. */ GWENHYWFAR_API int GWEN_Socket_Open(GWEN_SOCKET *sp); /** * Unarms a socket thus closing any connection associated with this socket. */ GWENHYWFAR_API int GWEN_Socket_Close(GWEN_SOCKET *sp); /*@}*/ /** * @name Connecting and Disconnecting * * These functions allow active and passive connections to other hosts. */ /*@{*/ GWENHYWFAR_API int GWEN_Socket_Connect(GWEN_SOCKET *sp, const GWEN_INETADDRESS *addr); GWENHYWFAR_API int GWEN_Socket_Bind(GWEN_SOCKET *sp, const GWEN_INETADDRESS *addr); GWENHYWFAR_API int GWEN_Socket_Listen(GWEN_SOCKET *sp, int backlog); /** * This accepts a new connection on the given socket. This socket must be * listening (achieved by calling @ref GWEN_Socket_Listen). * @param sp socket which is listening * @param addr pointer to a pointer to an address. Upon return this pointer * will point to a newly allocated address containing the address of the * connected peer. * Please note that if upon return this value is !=NULL then you are * responsible for freeing this address ! * @param newsock pointer to a pointer to a socket. Upon return this holds * the pointer to a newly allocated socket. * Please note that if upon return this value is !=NULL then you are * responsible for freeing this socket ! */ GWENHYWFAR_API int GWEN_Socket_Accept(GWEN_SOCKET *sp, GWEN_INETADDRESS **addr, GWEN_SOCKET **newsock); /*@}*/ /** * @name Informational Functions * * These functions return some usefull information about sockets or * connections. */ /*@{*/ /** * Returns the socket type. * @param sp socket */ GWENHYWFAR_API GWEN_SOCKETTYPE GWEN_Socket_GetSocketType(GWEN_SOCKET *sp); /** * Retrieves the peer's address * @param sp socket * @param addr pointer to a pointer to an @ref GWEN_INETADDRESS. * Upon successful return that pointer will point to the address of the * peer. In that case the caller is responsible for freeing that address. */ GWENHYWFAR_API int GWEN_Socket_GetPeerAddr(GWEN_SOCKET *sp, GWEN_INETADDRESS **addr); /** * This function waits for a group of sockets to change their state. * @param rs socket set, wait for readability of those sockets * @param ws socket set, wait for writeability of those sockets * @param xs socket set, wait for "exceptional events" on those sockets * @param timeout time to wait in milliseconds. If <0 then this function * will wait forever, if ==0 then it won't wait at all. */ GWENHYWFAR_API int GWEN_Socket_Select(GWEN_SOCKETSET *rs, GWEN_SOCKETSET *ws, GWEN_SOCKETSET *xs, int timeout); /** * Wait until the given socket becomes readable or a timeout occurrs. * @param sp socket * @param timeout please see @ref GWEN_Socket_Select for details */ GWENHYWFAR_API int GWEN_Socket_WaitForRead(GWEN_SOCKET *sp, int timeout); /** * Wait until the given socket becomes writeable or a timeout occurrs. * @param sp socket * @param timeout please see @ref GWEN_Socket_Select for details */ GWENHYWFAR_API int GWEN_Socket_WaitForWrite(GWEN_SOCKET *sp, int timeout); /*@}*/ /** * @name Data Exchange Functions * * These functions handle exchange of data with other hosts via the Internet * Protocol. */ /*@{*/ /** * Read bytes from a socket. * This function might return GWEN_ERROR_INTERRUPTED in case the read request was interrupted by a * posix signal or GWEN_ERROR_TIMEOUT on non-blocking sockets which have currently no data available. * @param sp socket * @param buffer pointer to the buffer to receive the data * @param bsize pointer to an integer variable. Upon call this should hold * the number of bytes to read, upon return it will contain the number of * bytes actually read. */ GWENHYWFAR_API int GWEN_Socket_Read(GWEN_SOCKET *sp, char *buffer, int *bsize); /** * Write bytes to an open socket. * @param sp socket * @param buffer pointer to a buffer containing the bytes to be written * @param bsize pointer to an integer variable containing the number of bytes * to write. Upon return this variable holds the number of bytes actually * written. Please note that this function may write less bytes than expected! */ GWENHYWFAR_API int GWEN_Socket_Write(GWEN_SOCKET *sp, const char *buffer, int *bsize); /** * Reads bytes from an UDP socket, which is connectionless. * @param sp socket * @param addr pointer to pointer to an address to receive the address of the * peer we have received data from. * Please note that if upon return this value is !=NULL then you are * responsible for freeing this address ! * @param buffer pointer to a buffer to store the received data in * @param bsize pointer to an integer variable. Upon call this should hold * the number of bytes to read, upon return it will contain the number of * bytes actually read. */ GWENHYWFAR_API int GWEN_Socket_ReadFrom(GWEN_SOCKET *sp, GWEN_INETADDRESS **addr, char *buffer, int *bsize); /** * Writes data to an UDP socket, which is connectionless. * @param sp socket * @param addr pointer to the address struct specifying the recipient * @param buffer pointer to a buffer containing the bytes to be written * @param bsize pointer to an integer variable containing the number of bytes * to write. Upon return this variable holds the number of bytes actually * written. Please note that this function may write less bytes than expected! */ GWENHYWFAR_API int GWEN_Socket_WriteTo(GWEN_SOCKET *sp, const GWEN_INETADDRESS *addr, const char *buffer, int *bsize); /*@}*/ /** * @name Socket Settings Functions * * These functions manipulate settings on a socket. */ /*@{*/ /** * Toggles the sockets blocking/non-blocking mode. * @param sp socket * @param fl if 0 then nonblocking is requested, otherwise blocking is assumed */ GWENHYWFAR_API int GWEN_Socket_SetBlocking(GWEN_SOCKET *sp, int fl); /** * Toggles the sockets broadcast/non-broadcast mode. * If in broadcast mode (for UDP sockets only) the socket is able to receive * packets that have been sent to a broadcast address, otherwise those * packets are ignored. * @param sp socket * @param fl if nonzero then broadcast is enabled */ GWENHYWFAR_API int GWEN_Socket_SetBroadcast(GWEN_SOCKET *sp, int fl); /** * Returns a pending socket error. This is used when trying to connect to * a server when in non-blocking mode. In this case the connect call will * in some cases return with an error code indicating that the connect is in * progress. Later you will then need to find out whether that connect * succeeded or not. And this is the function which can tell you that ;-) * @param sp socket */ GWENHYWFAR_API int GWEN_Socket_GetSocketError(GWEN_SOCKET *sp); /** * Normally after closing a socket the occupied TCP/UDP port will be * unavailable for another call to the system function bind (2). * If reusing is allowed then this latency is removed. This function is * usefull for servers. * @param sp socket * @param fl if nonzero then reusing the address is enabled */ GWENHYWFAR_API int GWEN_Socket_SetReuseAddress(GWEN_SOCKET *sp, int fl); /*@}*/ /** * This function should only be used if it is absolutely necessary, * because it might not be supported by every system. * Hoever, it is currently supported by all systems on which the * Berkeley Socket API is used (e.g. most if not all POSIX systems, * in this implementation also WIN32). * What you can do with the value returned depends very much on the * underlying operating system. For POSIX systems the value returned * is just a file handle as returned by e.g. socket(). */ GWENHYWFAR_API int GWEN_Socket_GetSocketInt(const GWEN_SOCKET *sp); /* end of group socket */ /*@}*/ /* end of group socketsandsets */ /*@}*/ #ifdef __cplusplus } #endif #endif /* GWEN_SOCKET_H */ gwenhywfar-4.15.2beta/src/gparser/0000755000175000017500000000000012643267237014067 500000000000000gwenhywfar-4.15.2beta/src/gparser/gwen_parser_element_list.tm20000644000175000017500000000037412364540454021512 00000000000000 GWEN_PARSER_ELEMENT_LIST GWEN_ParserElement_List gwenhywfar-4.15.2beta/src/gparser/gwen_parser_element.xml0000644000175000017500000000702512364015347020553 00000000000000 GWEN_PARSER_ELEMENT GWEN_ParserElement with_db with_tree with_list1 with_list2 with_refcount
gwenhywfar/gwenhywfarapi.h
gwenhywfar/gwen_parser_element_fns.h
gwen_parser_element_fns.c
0 0 with_flags public GWEN_ParserElementType_Element GWEN_ParserElementType_Element enum public NULL NULL public own const dup const NULL NULL public own const dup const NULL NULL public own const dup const 1 1 public 1 1 public 0 0 public -1 -1 public NULL NULL public own const dup const 0 0 volatile with_flags public
gwenhywfar-4.15.2beta/src/gparser/gwen_parser.h0000644000175000017500000000467212364543670016503 00000000000000/*************************************************************************** begin : Fri Apr 18 2014 copyright : (C) 2014 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWEN_PARSER_H #define GWEN_PARSER_H #include #include #include /** * Checks all elements of the parser element tree against the definition tree. */ GWENHYWFAR_API int GWEN_Parser_CheckTree(const GWEN_PARSER_ELEMENT_TREE *tDefinitions, const GWEN_PARSER_ELEMENT_TREE *tData); /** * Updates all elements of the parser element tree with info from the definition tree. That is, all elements from the * data tree get their DbName from their matching definition elements. */ GWENHYWFAR_API int GWEN_Parser_UpdateTree(const GWEN_PARSER_ELEMENT_TREE *tDefinitions, GWEN_PARSER_ELEMENT_TREE *tData); /** * Copies data from the element tree to the given db node using the dbName from the individual parser elements. */ GWENHYWFAR_API int GWEN_Parser_ToDbTree(GWEN_PARSER_ELEMENT_TREE *tData, GWEN_DB_NODE *db); #endif gwenhywfar-4.15.2beta/src/gparser/gwen_parser_element_list2.tm20000644000175000017500000000037712364540454021577 00000000000000 GWEN_PARSER_ELEMENT_LIST2 GWEN_ParserElement_List2 gwenhywfar-4.15.2beta/src/gparser/gwen_parser_element.tm20000644000175000017500000000031712364540454020454 00000000000000 GWEN_PARSER_ELEMENT GWEN_ParserElement gwenhywfar-4.15.2beta/src/gparser/Makefile.in0000644000175000017500000006652312634022415016053 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/gparser DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(dist_typedata_DATA) $(iheader_HEADERS) \ $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgparser_la_LIBADD = am__objects_1 = gwen_parser_element.lo am_libgparser_la_OBJECTS = $(am__objects_1) parser_xml.lo \ gwen_parser.lo libgparser_la_OBJECTS = $(am_libgparser_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgparser_la_SOURCES) DIST_SOURCES = $(libgparser_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(typedatadir)" "$(DESTDIR)$(iheaderdir)" DATA = $(dist_typedata_DATA) HEADERS = $(iheader_HEADERS) $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/parser @all_includes@ AM_CFLAGS = @visibility_cflags@ -DBUILDING_GWENHYWFAR typefiles = gwen_parser_element.xml noinst_LTLIBRARIES = libgparser.la typedatadir = $(datadir)/gwenhywfar/typemaker2/c dist_typedata_DATA = \ gwen_parser_element.tm2 gwen_parser_element_list.tm2 gwen_parser_element_list2.tm2 gwen_parser_element_tree.tm2 built_sources = \ gwen_parser_element.c build_headers_priv = \ gwen_parser_element_p.h build_headers_pub = \ gwen_parser_element.h build_headers = $(build_headers_priv) $(build_headers_pub) libgparser_la_SOURCES = $(built_sources) \ parser_xml.c \ gwen_parser.c iheaderdir = $(gwenhywfar_headerdir_am)/gwenhywfar iheader_HEADERS = $(build_headers_pub) \ parser_xml.h \ gwen_parser.h noinst_HEADERS = $(build_headers_priv) EXTRA_DIST = $(typefiles) $(build_headers) $(built_sources) \ gwen_parser_check.c \ gwen_parser_update.c SUFFIXES = .xml .c all: all-am .SUFFIXES: .SUFFIXES: .xml .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/gparser/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/gparser/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgparser.la: $(libgparser_la_OBJECTS) $(libgparser_la_DEPENDENCIES) $(EXTRA_libgparser_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgparser_la_OBJECTS) $(libgparser_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gwen_parser.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gwen_parser_element.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser_xml.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_typedataDATA: $(dist_typedata_DATA) @$(NORMAL_INSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(typedatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(typedatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typedatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(typedatadir)" || exit $$?; \ done uninstall-dist_typedataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(typedatadir)'; $(am__uninstall_files_from_dir) install-iheaderHEADERS: $(iheader_HEADERS) @$(NORMAL_INSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(iheaderdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(iheaderdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(iheaderdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(iheaderdir)" || exit $$?; \ done uninstall-iheaderHEADERS: @$(NORMAL_UNINSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(iheaderdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(typedatadir)" "$(DESTDIR)$(iheaderdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_typedataDATA install-iheaderHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_typedataDATA uninstall-iheaderHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dist_typedataDATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-iheaderHEADERS install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am \ uninstall-dist_typedataDATA uninstall-iheaderHEADERS build_sources: $(built_sources) list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d build_sources; \ done ; clean_build_files: rm -f $(built_sources) $(build_headers) format_build_files: for f in $(built_sources) $(build_headers); do \ astyle -s2 --min-conditional-indent=0 --indent-labels --pad=oper -a --suffix=none $$f; \ done %.c: %.xml typemaker2 -I $(top_srcdir)/src/lib/typemaker2/c -I $(srcdir) -I $(AQDATABASE_TYPEMAKERDIR)/c --destfolder="$(srcdir)" -D GWENHYWFAR_API $< %.h: %.xml typemaker2 -I $(top_srcdir)/src/lib/typemaker2/c -I $(srcdir) -I $(AQDATABASE_TYPEMAKERDIR)/c --destfolder="$(srcdir)" -D GWENHYWFAR_API $< types: $(typefiles) typedefs typemaker2 -I $(srcdir) --destfolder="$(srcdir)" -D GWENHYWFAR_API $(typefiles) typedefs: $(typefiles) typemaker2 --defs-only -I $(srcdir) --destfolder="$(srcdir)" -D GWENHYWFAR_API $(typefiles) sources: for f in $(libgparser_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/src/gparser/Makefile.am0000644000175000017500000000411312364015347016033 00000000000000INCLUDES= -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/parser @all_includes@ AM_CFLAGS=@visibility_cflags@ -DBUILDING_GWENHYWFAR typefiles=gwen_parser_element.xml noinst_LTLIBRARIES=libgparser.la typedatadir=$(datadir)/gwenhywfar/typemaker2/c dist_typedata_DATA=\ gwen_parser_element.tm2 gwen_parser_element_list.tm2 gwen_parser_element_list2.tm2 gwen_parser_element_tree.tm2 built_sources= \ gwen_parser_element.c build_headers_priv= \ gwen_parser_element_p.h build_headers_pub= \ gwen_parser_element.h build_headers=$(build_headers_priv) $(build_headers_pub) libgparser_la_SOURCES=$(built_sources) \ parser_xml.c \ gwen_parser.c iheaderdir=$(gwenhywfar_headerdir_am)/gwenhywfar iheader_HEADERS=$(build_headers_pub) \ parser_xml.h \ gwen_parser.h noinst_HEADERS=$(build_headers_priv) EXTRA_DIST=$(typefiles) $(build_headers) $(built_sources) \ gwen_parser_check.c \ gwen_parser_update.c build_sources: $(built_sources) list='$(SUBDIRS)'; for d in $$list; do \ $(MAKE) -C $$d build_sources; \ done ; clean_build_files: rm -f $(built_sources) $(build_headers) format_build_files: for f in $(built_sources) $(build_headers); do \ astyle -s2 --min-conditional-indent=0 --indent-labels --pad=oper -a --suffix=none $$f; \ done %.c: %.xml typemaker2 -I $(top_srcdir)/src/lib/typemaker2/c -I $(srcdir) -I $(AQDATABASE_TYPEMAKERDIR)/c --destfolder="$(srcdir)" -D GWENHYWFAR_API $< %.h: %.xml typemaker2 -I $(top_srcdir)/src/lib/typemaker2/c -I $(srcdir) -I $(AQDATABASE_TYPEMAKERDIR)/c --destfolder="$(srcdir)" -D GWENHYWFAR_API $< SUFFIXES = .xml .c types: $(typefiles) typedefs typemaker2 -I $(srcdir) --destfolder="$(srcdir)" -D GWENHYWFAR_API $(typefiles) typedefs: $(typefiles) typemaker2 --defs-only -I $(srcdir) --destfolder="$(srcdir)" -D GWENHYWFAR_API $(typefiles) sources: for f in $(libgparser_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-4.15.2beta/src/gparser/gwen_parser_check.c0000644000175000017500000001340712364015347017622 00000000000000/*************************************************************************** begin : Fri Apr 18 2014 copyright : (C) 2014 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ int GWEN_Parser__CheckElementAndChildren(const GWEN_PARSER_ELEMENT *eDefinitions, const GWEN_PARSER_ELEMENT *eData, int depth) { int rv; const GWEN_PARSER_ELEMENT *dReal=eDefinitions; const GWEN_PARSER_ELEMENT *eDefChild=NULL; const GWEN_PARSER_ELEMENT *eDataChild=NULL; /* check choice or direct element */ if (GWEN_ParserElement_GetElementType(eDefinitions)==GWEN_ParserElementType_Choice) { /* check choice */ dReal=GWEN_Parser__GetChoice(eDefinitions, eData); if (dReal==NULL) { DBG_DEBUG(GWEN_LOGDOMAIN, "No matching choice found"); return GWEN_ERROR_BAD_DATA; } } else { /* compare directly */ rv=GWEN_Parser__CheckElement(eDefinitions, eData); if (rv<0) { DBG_DEBUG(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } /* check children */ eDefChild=GWEN_ParserElement_Tree_GetFirstChild(dReal); if (eData) eDataChild=GWEN_ParserElement_Tree_GetFirstChild(eData); rv=GWEN_Parser__CheckSequence(eDefChild, eDataChild, depth+1); if (rv<0) { DBG_DEBUG(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int GWEN_Parser__CheckSequence(const GWEN_PARSER_ELEMENT *eDefinitions, const GWEN_PARSER_ELEMENT *eData, int depth) { const GWEN_PARSER_ELEMENT *d; const GWEN_PARSER_ELEMENT *e; int count=0; d=eDefinitions; e=eData; DBG_VERBOUS(GWEN_LOGDOMAIN, "Entering sequence [%d]", depth); while(d) { int rv; DBG_VERBOUS(GWEN_LOGDOMAIN, "Checking definition \"%s\" (%s) against \"%s\" (%s) [%d]", d?GWEN_ParserElement_GetName(d):"-?-", GWEN_ParserElementType_toString(GWEN_ParserElement_GetElementType(d)), e?(GWEN_ParserElement_GetName(e)):"-NULL-", e?(GWEN_ParserElementType_toString(GWEN_ParserElement_GetElementType(e))):"-NULL-", depth); rv=GWEN_Parser__CheckElementAndChildren(d, e, depth+1); if (rv==0) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Matches [%d]", depth); /* does match */ if ((GWEN_ParserElement_GetMaxOccurs(d)==-1)|| (count #endif #include "gwen_parser_p.h" #include /* pull in check code */ #include "gwen_parser_check.c" #include "gwen_parser_update.c" #include "gwen_parser_todb.c" /* Checks whether the given eData matches the given eDefinitions element */ int GWEN_Parser__CheckElement(const GWEN_PARSER_ELEMENT *eDefinitions, const GWEN_PARSER_ELEMENT *eData) { GWEN_PARSER_ELEMENT_TYPE tDefinitions, tData; const char *nameDefinitions, *nameData; if (eDefinitions==NULL) { DBG_DEBUG(GWEN_LOGDOMAIN, "No definition element"); return GWEN_ERROR_BAD_DATA; } if (eData==NULL) { DBG_DEBUG(GWEN_LOGDOMAIN, "No data element"); return GWEN_ERROR_BAD_DATA; } /* compare data type */ tDefinitions=GWEN_ParserElement_GetElementType(eDefinitions); tData=GWEN_ParserElement_GetElementType(eData); if (tDefinitions!=tData) { DBG_DEBUG(GWEN_LOGDOMAIN, "Unexpected element type (expected \%s\", found \%s\")", GWEN_ParserElementType_toString(tDefinitions), GWEN_ParserElementType_toString(tData)); return GWEN_ERROR_BAD_DATA; } /* compare element name */ nameDefinitions=GWEN_ParserElement_GetName(eDefinitions); if (nameDefinitions && !(*nameDefinitions)) nameDefinitions=NULL; nameData=GWEN_ParserElement_GetName(eData); if (nameData && !(*nameData)) nameData=NULL; if (!((nameDefinitions==NULL && nameData==NULL) || (nameDefinitions && nameData && strcasecmp(nameDefinitions, nameData)==0))) { DBG_DEBUG(GWEN_LOGDOMAIN, "Unexpected element name (expected \"%s\", got \"%s\")", nameDefinitions?nameDefinitions:"<-->", nameData?nameData:"<-->"); return GWEN_ERROR_BAD_DATA; } return 0; } const GWEN_PARSER_ELEMENT *GWEN_Parser__GetChoice(const GWEN_PARSER_ELEMENT *eDefinitions, const GWEN_PARSER_ELEMENT *eData) { GWEN_PARSER_ELEMENT *e; e=GWEN_ParserElement_Tree_GetFirstChild(eDefinitions); while(e) { if (0==GWEN_Parser__CheckElement(e, eData)) return e; e=GWEN_ParserElement_Tree_GetNext(e); } DBG_DEBUG(GWEN_LOGDOMAIN, "No matching choice found"); return NULL; } gwenhywfar-4.15.2beta/src/gparser/gwen_parser_element.h0000644000175000017500000001527012364540454020205 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "gwen_parser_element.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef GWEN_PARSER_ELEMENT_H #define GWEN_PARSER_ELEMENT_H #ifdef __cplusplus extern "C" { #endif /* define GWEN_PARSER_ELEMENT_RTFLAGS */ /* define GWEN_PARSER_ELEMENT_FLAGS */ /* needed system headers */ #include #include #include #include #include /* pre-headers */ #include typedef struct GWEN_PARSER_ELEMENT GWEN_PARSER_ELEMENT; GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_PARSER_ELEMENT, GWEN_ParserElement, GWENHYWFAR_API) GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_PARSER_ELEMENT, GWEN_ParserElement, GWENHYWFAR_API) GWEN_TREE_FUNCTION_LIB_DEFS(GWEN_PARSER_ELEMENT, GWEN_ParserElement, GWENHYWFAR_API) typedef enum { GWEN_ParserElementType_Unknown = -1, GWEN_ParserElementType_Element, GWEN_ParserElementType_Attribute, GWEN_ParserElementType_Data, GWEN_ParserElementType_Choice } GWEN_PARSER_ELEMENT_TYPE; /* post-headers */ #include GWENHYWFAR_API GWEN_PARSER_ELEMENT_TYPE GWEN_ParserElementType_fromString(const char *p_s); GWENHYWFAR_API const char *GWEN_ParserElementType_toString(GWEN_PARSER_ELEMENT_TYPE p_i); /** Constructor. */ GWENHYWFAR_API GWEN_PARSER_ELEMENT *GWEN_ParserElement_new(void); /** Destructor. */ GWENHYWFAR_API void GWEN_ParserElement_free(GWEN_PARSER_ELEMENT *p_struct); GWENHYWFAR_API void GWEN_ParserElement_Attach(GWEN_PARSER_ELEMENT *p_struct); GWENHYWFAR_API GWEN_PARSER_ELEMENT *GWEN_ParserElement_dup(const GWEN_PARSER_ELEMENT *p_struct); GWENHYWFAR_API GWEN_PARSER_ELEMENT *GWEN_ParserElement_copy(GWEN_PARSER_ELEMENT *p_struct, const GWEN_PARSER_ELEMENT *p_src); /** Getter. * Use this function to get the member "flags" */ GWENHYWFAR_API uint32_t GWEN_ParserElement_GetFlags(const GWEN_PARSER_ELEMENT *p_struct); /** Getter. * Use this function to get the member "elementType" */ GWENHYWFAR_API GWEN_PARSER_ELEMENT_TYPE GWEN_ParserElement_GetElementType(const GWEN_PARSER_ELEMENT *p_struct); /** Getter. * Use this function to get the member "name" */ GWENHYWFAR_API const char *GWEN_ParserElement_GetName(const GWEN_PARSER_ELEMENT *p_struct); /** Getter. * Use this function to get the member "type" */ GWENHYWFAR_API const char *GWEN_ParserElement_GetType(const GWEN_PARSER_ELEMENT *p_struct); /** Getter. * Use this function to get the member "dbName" */ GWENHYWFAR_API const char *GWEN_ParserElement_GetDbName(const GWEN_PARSER_ELEMENT *p_struct); /** Getter. * Use this function to get the member "minOccurs" */ GWENHYWFAR_API int GWEN_ParserElement_GetMinOccurs(const GWEN_PARSER_ELEMENT *p_struct); /** Getter. * Use this function to get the member "maxOccurs" */ GWENHYWFAR_API int GWEN_ParserElement_GetMaxOccurs(const GWEN_PARSER_ELEMENT *p_struct); /** Getter. * Use this function to get the member "minSize" */ GWENHYWFAR_API int GWEN_ParserElement_GetMinSize(const GWEN_PARSER_ELEMENT *p_struct); /** Getter. * Use this function to get the member "maxSize" */ GWENHYWFAR_API int GWEN_ParserElement_GetMaxSize(const GWEN_PARSER_ELEMENT *p_struct); /** Getter. * Use this function to get the member "data" */ GWENHYWFAR_API const char *GWEN_ParserElement_GetData(const GWEN_PARSER_ELEMENT *p_struct); /** Getter. * Use this function to get the member "runtimeFlags" */ GWENHYWFAR_API uint32_t GWEN_ParserElement_GetRuntimeFlags(const GWEN_PARSER_ELEMENT *p_struct); /** Setter. * Use this function to set the member "flags" */ GWENHYWFAR_API void GWEN_ParserElement_SetFlags(GWEN_PARSER_ELEMENT *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to the member "flags" */ GWENHYWFAR_API void GWEN_ParserElement_AddFlags(GWEN_PARSER_ELEMENT *p_struct, uint32_t p_src); /** Sub flags. * Use this function to sub flags from the member "flags" */ GWENHYWFAR_API void GWEN_ParserElement_SubFlags(GWEN_PARSER_ELEMENT *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "elementType" */ GWENHYWFAR_API void GWEN_ParserElement_SetElementType(GWEN_PARSER_ELEMENT *p_struct, GWEN_PARSER_ELEMENT_TYPE p_src); /** Setter. * Use this function to set the member "name" */ GWENHYWFAR_API void GWEN_ParserElement_SetName(GWEN_PARSER_ELEMENT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "type" */ GWENHYWFAR_API void GWEN_ParserElement_SetType(GWEN_PARSER_ELEMENT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "dbName" */ GWENHYWFAR_API void GWEN_ParserElement_SetDbName(GWEN_PARSER_ELEMENT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "minOccurs" */ GWENHYWFAR_API void GWEN_ParserElement_SetMinOccurs(GWEN_PARSER_ELEMENT *p_struct, int p_src); /** Setter. * Use this function to set the member "maxOccurs" */ GWENHYWFAR_API void GWEN_ParserElement_SetMaxOccurs(GWEN_PARSER_ELEMENT *p_struct, int p_src); /** Setter. * Use this function to set the member "minSize" */ GWENHYWFAR_API void GWEN_ParserElement_SetMinSize(GWEN_PARSER_ELEMENT *p_struct, int p_src); /** Setter. * Use this function to set the member "maxSize" */ GWENHYWFAR_API void GWEN_ParserElement_SetMaxSize(GWEN_PARSER_ELEMENT *p_struct, int p_src); /** Setter. * Use this function to set the member "data" */ GWENHYWFAR_API void GWEN_ParserElement_SetData(GWEN_PARSER_ELEMENT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "runtimeFlags" */ GWENHYWFAR_API void GWEN_ParserElement_SetRuntimeFlags(GWEN_PARSER_ELEMENT *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to the member "runtimeFlags" */ GWENHYWFAR_API void GWEN_ParserElement_AddRuntimeFlags(GWEN_PARSER_ELEMENT *p_struct, uint32_t p_src); /** Sub flags. * Use this function to sub flags from the member "runtimeFlags" */ GWENHYWFAR_API void GWEN_ParserElement_SubRuntimeFlags(GWEN_PARSER_ELEMENT *p_struct, uint32_t p_src); /* list1 functions */ GWENHYWFAR_API GWEN_PARSER_ELEMENT_LIST *GWEN_ParserElement_List_dup(const GWEN_PARSER_ELEMENT_LIST *p_src); GWENHYWFAR_API void GWEN_ParserElement_ReadDb(GWEN_PARSER_ELEMENT *p_struct, GWEN_DB_NODE *p_db); GWENHYWFAR_API int GWEN_ParserElement_WriteDb(const GWEN_PARSER_ELEMENT *p_struct, GWEN_DB_NODE *p_db); GWENHYWFAR_API GWEN_PARSER_ELEMENT *GWEN_ParserElement_fromDb(GWEN_DB_NODE *p_db); GWENHYWFAR_API int GWEN_ParserElement_toDb(const GWEN_PARSER_ELEMENT *p_struct, GWEN_DB_NODE *p_db); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/src/gparser/gwen_parser_element_tree.tm20000644000175000017500000000037312364540454021475 00000000000000 GWEN_PARSER_ELEMENT_TREE GWEN_ParserElement_Tree gwenhywfar-4.15.2beta/src/gparser/gwen_parser_update.c0000644000175000017500000001361412364015347020027 00000000000000/*************************************************************************** begin : Fri Apr 18 2014 copyright : (C) 2014 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ int GWEN_Parser__UpdateElementAndChildren(const GWEN_PARSER_ELEMENT *eDefinitions, GWEN_PARSER_ELEMENT *eData, int depth) { int rv; const GWEN_PARSER_ELEMENT *dReal=eDefinitions; const GWEN_PARSER_ELEMENT *eDefChild=NULL; GWEN_PARSER_ELEMENT *eDataChild=NULL; const char *s; /* check choice or direct element */ if (GWEN_ParserElement_GetElementType(eDefinitions)==GWEN_ParserElementType_Choice) { /* check choice */ dReal=GWEN_Parser__GetChoice(eDefinitions, eData); if (dReal==NULL) { DBG_DEBUG(GWEN_LOGDOMAIN, "No matching choice found"); return GWEN_ERROR_BAD_DATA; } } else { /* compare directly */ rv=GWEN_Parser__CheckElement(eDefinitions, eData); if (rv<0) { DBG_DEBUG(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } /* check children */ eDefChild=GWEN_ParserElement_Tree_GetFirstChild(dReal); if (eData) eDataChild=GWEN_ParserElement_Tree_GetFirstChild(eData); rv=GWEN_Parser__UpdateSequence(eDefChild, eDataChild, depth+1); if (rv<0) { DBG_DEBUG(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } /* element and sub-elements are ok, update data element */ s=GWEN_ParserElement_GetDbName(dReal); GWEN_ParserElement_SetDbName(eData, s); return 0; } int GWEN_Parser__UpdateSequence(const GWEN_PARSER_ELEMENT *eDefinitions, GWEN_PARSER_ELEMENT *eData, int depth) { const GWEN_PARSER_ELEMENT *d; GWEN_PARSER_ELEMENT *e; int count=0; d=eDefinitions; e=eData; DBG_VERBOUS(GWEN_LOGDOMAIN, "Entering sequence [%d]", depth); while(d) { int rv; DBG_VERBOUS(GWEN_LOGDOMAIN, "Updateing definition \"%s\" (%s) against \"%s\" (%s) [%d]", d?GWEN_ParserElement_GetName(d):"-?-", GWEN_ParserElementType_toString(GWEN_ParserElement_GetElementType(d)), e?(GWEN_ParserElement_GetName(e)):"-NULL-", e?(GWEN_ParserElementType_toString(GWEN_ParserElement_GetElementType(e))):"-NULL-", depth); rv=GWEN_Parser__UpdateElementAndChildren(d, e, depth+1); if (rv==0) { DBG_VERBOUS(GWEN_LOGDOMAIN, "Matches [%d]", depth); /* does match */ if ((GWEN_ParserElement_GetMaxOccurs(d)==-1)|| (count #include #include GWENHYWFAR_API int GWEN_ParserXml_Read(GWEN_PARSER_ELEMENT_TREE *et, GWEN_XMLNODE *node); GWENHYWFAR_API int GWEN_ParserXml_ReadFile(GWEN_PARSER_ELEMENT_TREE *et, const char *fname); #endif gwenhywfar-4.15.2beta/src/gparser/gwen_parser_element.c0000644000175000017500000003522512364540454020202 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "gwen_parser_element.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwen_parser_element_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(GWEN_PARSER_ELEMENT, GWEN_ParserElement) GWEN_LIST2_FUNCTIONS(GWEN_PARSER_ELEMENT, GWEN_ParserElement) GWEN_TREE_FUNCTIONS(GWEN_PARSER_ELEMENT, GWEN_ParserElement) GWEN_PARSER_ELEMENT_TYPE GWEN_ParserElementType_fromString(const char *p_s) { if (p_s && *p_s) { if (strcasecmp(p_s, "element")==0) return GWEN_ParserElementType_Element; else if (strcasecmp(p_s, "attribute")==0) return GWEN_ParserElementType_Attribute; else if (strcasecmp(p_s, "data")==0) return GWEN_ParserElementType_Data; else if (strcasecmp(p_s, "choice")==0) return GWEN_ParserElementType_Choice; } return GWEN_ParserElementType_Unknown; } const char *GWEN_ParserElementType_toString(GWEN_PARSER_ELEMENT_TYPE p_i) { switch(p_i) { case GWEN_ParserElementType_Element: return "element"; case GWEN_ParserElementType_Attribute: return "attribute"; case GWEN_ParserElementType_Data: return "data"; case GWEN_ParserElementType_Choice: return "choice"; default: return "unknown"; } } GWEN_PARSER_ELEMENT *GWEN_ParserElement_new(void) { GWEN_PARSER_ELEMENT *p_struct; GWEN_NEW_OBJECT(GWEN_PARSER_ELEMENT, p_struct) p_struct->_refCount=1; GWEN_LIST_INIT(GWEN_PARSER_ELEMENT, p_struct) GWEN_TREE_INIT(GWEN_PARSER_ELEMENT, p_struct) /* members */ p_struct->flags=0; p_struct->elementType=GWEN_ParserElementType_Element; p_struct->name=NULL; p_struct->type=NULL; p_struct->dbName=NULL; p_struct->minOccurs=1; p_struct->maxOccurs=1; p_struct->minSize=0; p_struct->maxSize=-1; p_struct->data=NULL; p_struct->runtimeFlags=0; /* virtual functions */ return p_struct; } void GWEN_ParserElement_free(GWEN_PARSER_ELEMENT *p_struct) { if (p_struct) { assert(p_struct->_refCount); if (p_struct->_refCount==1) { GWEN_LIST_FINI(GWEN_PARSER_ELEMENT, p_struct) GWEN_TREE_FINI(GWEN_PARSER_ELEMENT, p_struct) /* members */ free(p_struct->name); free(p_struct->type); free(p_struct->dbName); free(p_struct->data); p_struct->_refCount=0; GWEN_FREE_OBJECT(p_struct); } else p_struct->_refCount--; } } void GWEN_ParserElement_Attach(GWEN_PARSER_ELEMENT *p_struct) { assert(p_struct); assert(p_struct->_refCount); p_struct->_refCount++; } GWEN_PARSER_ELEMENT *GWEN_ParserElement_dup(const GWEN_PARSER_ELEMENT *p_src) { GWEN_PARSER_ELEMENT *p_struct; assert(p_src); p_struct=GWEN_ParserElement_new(); /* member "flags" */ p_struct->flags=p_src->flags; /* member "elementType" */ p_struct->elementType=p_src->elementType; /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; } if (p_src->name) { p_struct->name=strdup(p_src->name); } /* member "type" */ if (p_struct->type) { free(p_struct->type); p_struct->type=NULL; } if (p_src->type) { p_struct->type=strdup(p_src->type); } /* member "dbName" */ if (p_struct->dbName) { free(p_struct->dbName); p_struct->dbName=NULL; } if (p_src->dbName) { p_struct->dbName=strdup(p_src->dbName); } /* member "minOccurs" */ p_struct->minOccurs=p_src->minOccurs; /* member "maxOccurs" */ p_struct->maxOccurs=p_src->maxOccurs; /* member "minSize" */ p_struct->minSize=p_src->minSize; /* member "maxSize" */ p_struct->maxSize=p_src->maxSize; /* member "data" */ if (p_struct->data) { free(p_struct->data); p_struct->data=NULL; } if (p_src->data) { p_struct->data=strdup(p_src->data); } /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } GWEN_PARSER_ELEMENT *GWEN_ParserElement_copy(GWEN_PARSER_ELEMENT *p_struct, const GWEN_PARSER_ELEMENT *p_src) { assert(p_struct); assert(p_src); /* member "flags" */ p_struct->flags=p_src->flags; /* member "elementType" */ p_struct->elementType=p_src->elementType; /* member "name" */ if (p_struct->name) { free(p_struct->name); } if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; } if (p_src->name) { p_struct->name=strdup(p_src->name); } /* member "type" */ if (p_struct->type) { free(p_struct->type); } if (p_struct->type) { free(p_struct->type); p_struct->type=NULL; } if (p_src->type) { p_struct->type=strdup(p_src->type); } /* member "dbName" */ if (p_struct->dbName) { free(p_struct->dbName); } if (p_struct->dbName) { free(p_struct->dbName); p_struct->dbName=NULL; } if (p_src->dbName) { p_struct->dbName=strdup(p_src->dbName); } /* member "minOccurs" */ p_struct->minOccurs=p_src->minOccurs; /* member "maxOccurs" */ p_struct->maxOccurs=p_src->maxOccurs; /* member "minSize" */ p_struct->minSize=p_src->minSize; /* member "maxSize" */ p_struct->maxSize=p_src->maxSize; /* member "data" */ if (p_struct->data) { free(p_struct->data); } if (p_struct->data) { free(p_struct->data); p_struct->data=NULL; } if (p_src->data) { p_struct->data=strdup(p_src->data); } /* member "runtimeFlags" */ p_struct->runtimeFlags=p_src->runtimeFlags; return p_struct; } uint32_t GWEN_ParserElement_GetFlags(const GWEN_PARSER_ELEMENT *p_struct) { assert(p_struct); return p_struct->flags; } GWEN_PARSER_ELEMENT_TYPE GWEN_ParserElement_GetElementType(const GWEN_PARSER_ELEMENT *p_struct) { assert(p_struct); return p_struct->elementType; } const char *GWEN_ParserElement_GetName(const GWEN_PARSER_ELEMENT *p_struct) { assert(p_struct); return p_struct->name; } const char *GWEN_ParserElement_GetType(const GWEN_PARSER_ELEMENT *p_struct) { assert(p_struct); return p_struct->type; } const char *GWEN_ParserElement_GetDbName(const GWEN_PARSER_ELEMENT *p_struct) { assert(p_struct); return p_struct->dbName; } int GWEN_ParserElement_GetMinOccurs(const GWEN_PARSER_ELEMENT *p_struct) { assert(p_struct); return p_struct->minOccurs; } int GWEN_ParserElement_GetMaxOccurs(const GWEN_PARSER_ELEMENT *p_struct) { assert(p_struct); return p_struct->maxOccurs; } int GWEN_ParserElement_GetMinSize(const GWEN_PARSER_ELEMENT *p_struct) { assert(p_struct); return p_struct->minSize; } int GWEN_ParserElement_GetMaxSize(const GWEN_PARSER_ELEMENT *p_struct) { assert(p_struct); return p_struct->maxSize; } const char *GWEN_ParserElement_GetData(const GWEN_PARSER_ELEMENT *p_struct) { assert(p_struct); return p_struct->data; } uint32_t GWEN_ParserElement_GetRuntimeFlags(const GWEN_PARSER_ELEMENT *p_struct) { assert(p_struct); return p_struct->runtimeFlags; } void GWEN_ParserElement_SetFlags(GWEN_PARSER_ELEMENT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags=p_src; } void GWEN_ParserElement_AddFlags(GWEN_PARSER_ELEMENT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags|=p_src; } void GWEN_ParserElement_SubFlags(GWEN_PARSER_ELEMENT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags&=~p_src; } void GWEN_ParserElement_SetElementType(GWEN_PARSER_ELEMENT *p_struct, GWEN_PARSER_ELEMENT_TYPE p_src) { assert(p_struct); p_struct->elementType=p_src; } void GWEN_ParserElement_SetName(GWEN_PARSER_ELEMENT *p_struct, const char *p_src) { assert(p_struct); if (p_struct->name) { free(p_struct->name); } if (p_src) { p_struct->name=strdup(p_src); } else { p_struct->name=NULL; } } void GWEN_ParserElement_SetType(GWEN_PARSER_ELEMENT *p_struct, const char *p_src) { assert(p_struct); if (p_struct->type) { free(p_struct->type); } if (p_src) { p_struct->type=strdup(p_src); } else { p_struct->type=NULL; } } void GWEN_ParserElement_SetDbName(GWEN_PARSER_ELEMENT *p_struct, const char *p_src) { assert(p_struct); if (p_struct->dbName) { free(p_struct->dbName); } if (p_src) { p_struct->dbName=strdup(p_src); } else { p_struct->dbName=NULL; } } void GWEN_ParserElement_SetMinOccurs(GWEN_PARSER_ELEMENT *p_struct, int p_src) { assert(p_struct); p_struct->minOccurs=p_src; } void GWEN_ParserElement_SetMaxOccurs(GWEN_PARSER_ELEMENT *p_struct, int p_src) { assert(p_struct); p_struct->maxOccurs=p_src; } void GWEN_ParserElement_SetMinSize(GWEN_PARSER_ELEMENT *p_struct, int p_src) { assert(p_struct); p_struct->minSize=p_src; } void GWEN_ParserElement_SetMaxSize(GWEN_PARSER_ELEMENT *p_struct, int p_src) { assert(p_struct); p_struct->maxSize=p_src; } void GWEN_ParserElement_SetData(GWEN_PARSER_ELEMENT *p_struct, const char *p_src) { assert(p_struct); if (p_struct->data) { free(p_struct->data); } if (p_src) { p_struct->data=strdup(p_src); } else { p_struct->data=NULL; } } void GWEN_ParserElement_SetRuntimeFlags(GWEN_PARSER_ELEMENT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags=p_src; } void GWEN_ParserElement_AddRuntimeFlags(GWEN_PARSER_ELEMENT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags|=p_src; } void GWEN_ParserElement_SubRuntimeFlags(GWEN_PARSER_ELEMENT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->runtimeFlags&=~p_src; } /* list1 functions */ GWEN_PARSER_ELEMENT_LIST *GWEN_ParserElement_List_dup(const GWEN_PARSER_ELEMENT_LIST *p_src) { GWEN_PARSER_ELEMENT_LIST *p_dest; GWEN_PARSER_ELEMENT *p_elem; assert(p_src); p_dest=GWEN_ParserElement_List_new(); p_elem=GWEN_ParserElement_List_First(p_src); while(p_elem) { GWEN_PARSER_ELEMENT *p_cpy; p_cpy=GWEN_ParserElement_dup(p_elem); GWEN_ParserElement_List_Add(p_cpy, p_dest); p_elem=GWEN_ParserElement_List_Next(p_elem); } return p_dest; } void GWEN_ParserElement_ReadDb(GWEN_PARSER_ELEMENT *p_struct, GWEN_DB_NODE *p_db) { assert(p_struct); /* member "flags" */ p_struct->flags=GWEN_DB_GetIntValue(p_db, "flags", 0, 0); /* member "elementType" */ { const char *s; s=GWEN_DB_GetCharValue(p_db, "elementType", 0, NULL); if (s) p_struct->elementType=GWEN_ParserElementType_fromString(s); else p_struct->elementType=GWEN_ParserElementType_Element; } /* member "name" */ if (p_struct->name) { free(p_struct->name); } { const char *s; s=GWEN_DB_GetCharValue(p_db, "name", 0, NULL); if (s) p_struct->name=strdup(s); } if (p_struct->name==NULL) { p_struct->name=NULL; } /* member "type" */ if (p_struct->type) { free(p_struct->type); } { const char *s; s=GWEN_DB_GetCharValue(p_db, "type", 0, NULL); if (s) p_struct->type=strdup(s); } if (p_struct->type==NULL) { p_struct->type=NULL; } /* member "dbName" */ if (p_struct->dbName) { free(p_struct->dbName); } { const char *s; s=GWEN_DB_GetCharValue(p_db, "dbName", 0, NULL); if (s) p_struct->dbName=strdup(s); } if (p_struct->dbName==NULL) { p_struct->dbName=NULL; } /* member "minOccurs" */ p_struct->minOccurs=GWEN_DB_GetIntValue(p_db, "minOccurs", 0, 1); /* member "maxOccurs" */ p_struct->maxOccurs=GWEN_DB_GetIntValue(p_db, "maxOccurs", 0, 1); /* member "minSize" */ p_struct->minSize=GWEN_DB_GetIntValue(p_db, "minSize", 0, 0); /* member "maxSize" */ p_struct->maxSize=GWEN_DB_GetIntValue(p_db, "maxSize", 0, -1); /* member "data" */ if (p_struct->data) { free(p_struct->data); } { const char *s; s=GWEN_DB_GetCharValue(p_db, "data", 0, NULL); if (s) p_struct->data=strdup(s); } if (p_struct->data==NULL) { p_struct->data=NULL; } /* member "runtimeFlags" */ /* member "runtimeFlags" is volatile, just presetting */ p_struct->runtimeFlags=0; } int GWEN_ParserElement_WriteDb(const GWEN_PARSER_ELEMENT *p_struct, GWEN_DB_NODE *p_db) { int p_rv; assert(p_struct); /* member "flags" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "flags", p_struct->flags); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "elementType" */ p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "elementType", GWEN_ParserElementType_toString(p_struct->elementType)); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "name" */ if (p_struct->name) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "name", p_struct->name); else { GWEN_DB_DeleteVar(p_db, "name"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "type" */ if (p_struct->type) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "type", p_struct->type); else { GWEN_DB_DeleteVar(p_db, "type"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "dbName" */ if (p_struct->dbName) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "dbName", p_struct->dbName); else { GWEN_DB_DeleteVar(p_db, "dbName"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "minOccurs" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "minOccurs", p_struct->minOccurs); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "maxOccurs" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxOccurs", p_struct->maxOccurs); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "minSize" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "minSize", p_struct->minSize); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "maxSize" */ p_rv=GWEN_DB_SetIntValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxSize", p_struct->maxSize); if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "data" */ if (p_struct->data) p_rv=GWEN_DB_SetCharValue(p_db, GWEN_DB_FLAGS_OVERWRITE_VARS, "data", p_struct->data); else { GWEN_DB_DeleteVar(p_db, "data"); p_rv=0; } if (p_rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)\n", p_rv); return p_rv; } /* member "runtimeFlags" is volatile, not writing to db */ return 0; } GWEN_PARSER_ELEMENT *GWEN_ParserElement_fromDb(GWEN_DB_NODE *p_db) { GWEN_PARSER_ELEMENT *p_struct; p_struct=GWEN_ParserElement_new(); GWEN_ParserElement_ReadDb(p_struct, p_db); return p_struct; } int GWEN_ParserElement_toDb(const GWEN_PARSER_ELEMENT *p_struct, GWEN_DB_NODE *p_db) { return GWEN_ParserElement_WriteDb(p_struct, p_db); } /* code headers */ #include "gwen_parser_element_fns.c" gwenhywfar-4.15.2beta/src/gparser/parser_xml.c0000644000175000017500000000753612364015347016333 00000000000000/*************************************************************************** begin : Fri Apr 18 2014 copyright : (C) 2014 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include #include int GWEN_ParserXml__Read(GWEN_PARSER_ELEMENT_TREE *et, GWEN_PARSER_ELEMENT *eParent, GWEN_XMLNODE *node) { GWEN_PARSER_ELEMENT *e=NULL; const char *s; switch(GWEN_XMLNode_GetType(node)) { case GWEN_XMLNodeTypeTag: e=GWEN_ParserElement_new(); GWEN_ParserElement_SetType(e, GWEN_ParserElementType_Element); s=GWEN_XMLNode_GetData(node); if (s && *s) GWEN_ParserElement_SetName(e, s); /* TODO: Read attributes */ break; case GWEN_XMLNodeTypeData: e=GWEN_ParserElement_new(); GWEN_ParserElement_SetElementType(e, GWEN_ParserElementType_Data); s=GWEN_XMLNode_GetData(node); if (s && *s) GWEN_ParserElement_SetData(e, s); break; case GWEN_XMLNodeTypeComment: e=NULL; break; } if (e) { GWEN_XMLNODE *n; const char *name; name=GWEN_ParserElement_GetName(e); DBG_INFO(GWEN_LOGDOMAIN, "Adding element \"%s\" (%s)", name?name:"-?-", GWEN_ParserElementType_toString(GWEN_ParserElement_GetElementType(e))); if (eParent) GWEN_ParserElement_Tree_AddChild(eParent, e); else GWEN_ParserElement_Tree_Add(et, e); n=GWEN_XMLNode_GetChild(node); while(n) { int rv; rv=GWEN_ParserXml__Read(et, e, n); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } n=GWEN_XMLNode_Next(n); } } return 0; } int GWEN_ParserXml_Read(GWEN_PARSER_ELEMENT_TREE *et, GWEN_XMLNODE *node) { return GWEN_ParserXml__Read(et, NULL, node); } int GWEN_ParserXml_ReadFile(GWEN_PARSER_ELEMENT_TREE *et, const char *fname) { int rv; GWEN_XMLNODE *rootNode; GWEN_XMLNODE *n; rootNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); rv=GWEN_XML_ReadFile(rootNode, fname, GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_HANDLE_HEADERS); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_XMLNode_free(rootNode); return rv; } n=GWEN_XMLNode_GetChild(rootNode); while(n) { int rv; rv=GWEN_ParserXml_Read(et, n); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_XMLNode_free(rootNode); return rv; } n=GWEN_XMLNode_Next(n); } GWEN_XMLNode_free(rootNode); return 0; } gwenhywfar-4.15.2beta/depcomp0000755000175000017500000005601612261335263013131 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2013 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gwenhywfar-4.15.2beta/doc/0000755000175000017500000000000012643267242012376 500000000000000gwenhywfar-4.15.2beta/doc/widgets_be.h0000644000175000017500000001103512364015347014600 00000000000000 /** * @defgroup MOD_DIALOG_IMPL Implementation Notes * @ingroup MOD_DIALOG * * @brief Implementation hints. * * * The dialog framework is part of the GWEN_GUI framework (@ref MOD_GUI). * To make your implementation available to the application you will have to * set the following callbacks in GWEN_GUI: *
    *
  • @ref GWEN_Gui_ExecDialog (use @ref GWEN_Gui_SetExecDialogFn)
  • *
  • @ref GWEN_Gui_OpenDialog (use @ref GWEN_Gui_SetOpenDialogFn)
  • *
  • @ref GWEN_Gui_CloseDialog (use @ref GWEN_Gui_SetCloseDialogFn)
  • *
  • @ref GWEN_Gui_RunDialog (use @ref GWEN_Gui_SetRunDialogFn)
  • *
* * The function @ref GWEN_Gui_ExecDialog can be implemented by just calling the other * functions (first @ref GWEN_Gui_OpenDialog followed by @ref GWEN_Gui_RunDialog and * @ref GWEN_Gui_CloseDialog). * * Your implementation of @ref GWEN_Gui_OpenDialog must set the follwing callbacks in * the object pointed to by the first argument (@ref GWEN_DIALOG): *
    *
  • @ref GWEN_Dialog_SetIntProperty (use @ref GWEN_Dialog_SetSetIntPropertyFn)
  • *
  • @ref GWEN_Dialog_GetIntProperty (use @ref GWEN_Dialog_SetGetIntPropertyFn)
  • *
  • @ref GWEN_Dialog_SetCharProperty (use @ref GWEN_Dialog_SetSetCharPropertyFn)
  • *
  • @ref GWEN_Dialog_GetCharProperty (use @ref GWEN_Dialog_SetGetCharPropertyFn)
  • *
* * The GKT2 implementation does it like this: * @code * GWEN_INHERIT(GWEN_DIALOG, GTK2_GUI_DIALOG) * * void Gtk2Gui_Dialog_Extend(GWEN_DIALOG *dlg) { * GTK2_GUI_DIALOG *xdlg; * * GWEN_NEW_OBJECT(GTK2_GUI_DIALOG, xdlg); * GWEN_INHERIT_SETDATA(GWEN_DIALOG, GTK2_GUI_DIALOG, dlg, xdlg, Gtk2Gui_Dialog_FreeData); * * GWEN_Dialog_SetSetIntPropertyFn(dlg, Gtk2Gui_Dialog_SetIntProperty); * GWEN_Dialog_SetGetIntPropertyFn(dlg, Gtk2Gui_Dialog_GetIntProperty); * GWEN_Dialog_SetSetCharPropertyFn(dlg, Gtk2Gui_Dialog_SetCharProperty); * GWEN_Dialog_SetGetCharPropertyFn(dlg, Gtk2Gui_Dialog_GetCharProperty); * } * @endcode * * It must also create the actual widgets used by your GUI toolkit (e.g. QLabel for label * widgets with QT). To do that you should call @ref GWEN_Dialog_GetWidgets to get the * tree of widget descriptions. The most important information about a widget is its type * (@ref GWEN_Widget_GetType). The implementation of @ref GWEN_Gui_OpenDialog can use that * information to decide what GUI widget should be created to represent that widget description. * * For example the QT implementation creates a QLabel object for the widget type * @ref GWEN_Widget_TypeLabel. * * You can call the function @ref GWEN_Widget_SetImplData to store a pointer to the GUI widget * created (e.g. the QT implementation stores a pointer to the created QLabel object for widgets * of type @ref GWEN_Widget_TypeLabel). To retrieve that pointer later call * @ref GWEN_Widget_GetImplData. Currently up to 4 pointers can be stored per GWEN_WIDGET object * (in the case that there are multiple GUI objects required to represent a given GWEN_WIDGET). * * Another important hint comes from the widget flags (get them with @ref GWEN_Widget_GetFlags). * Those flag tell the implementation about some layout options and other things. * * For widgets using media like icons or images the implementation can call * @ref GWEN_Dialog_GetMediaPaths to get a list of paths where those icons can be found. This * information is provided by the dialog itself. You can use functions like * @ref GWEN_Directory_FindFileInPaths to actually find the icon or image file using the media * paths. * * * This example shows how the GTK2 implementation creates a GUI representation of type * @ref GWEN_Widget_TypeLabel: * @code * #define GTK2_DIALOG_WIDGET_REAL 0 * #define GTK2_DIALOG_WIDGET_CONTENT 1 * * int Gtk2Gui_WLabel_Setup(GWEN_WIDGET *w) { * GtkWidget *g; * const char *s; * uint32_t flags; * GWEN_WIDGET *wParent; * * flags=GWEN_Widget_GetFlags(w); * wParent=GWEN_Widget_Tree_GetParent(w); * s=GWEN_Widget_GetText(w, 0); * * g=gtk_label_new(s); * GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g); * GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g); * * GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WLabel_SetIntProperty); * GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WLabel_GetIntProperty); * GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WLabel_SetCharProperty); * GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WLabel_GetCharProperty); * * if (wParent) * GWEN_Widget_AddChildGuiWidget(wParent, w); * * return 0; * } * @endcode * * */ gwenhywfar-4.15.2beta/doc/db2.png0000644000175000017500000013450612364015347013501 00000000000000‰PNG  IHDR^éS2Ö pHYs_^ΑëˆtIMEÓ âěHi IDATxœěÝipcç}çű/ÎÁ @wp'{a[í–eËąt˝$rf2g2ucOŞnÍÜŞ[uóâÖ$5˝É2“ëʝš¤fœI\ŠÄwâĖíÄV,Ť-ľ––ÚjŠŠěnî¸$ąďŔš/ZÄôŢd7›`˙OU—ŕœƒ$„óĂsžç˙€B!„B!„B!„BŹ›NÓ4­ÜB!„¨Jš „BQ)$x !„Bl ^B!„›D‚—B!Ä&‘ŕ%„BąI$x !„Bl ^B!„›D‚—B!Ä&‘ŕ%„BąI$x !„Bl ^B!„›D‚—B!Ä&‘ŕ%„BąI$x !„Bl ^B!„›D‚—B!Ä&‘ŕ%„BąIôĺn€ŘĹb‘|>N§C§Ó•ť9⚌ĄiŞŞ˘Şjš›#„˘Œ$xm—/_ć›ßü&íííŘíör7GÜ"•J166Ć?úG˙ˆăǏ—ť9B!ĘH‚×6‘Éd…Bô÷÷Ł×ë …BĺnRĹÓëőx<ŹV+/^$N—ťIB!ĘL‚×6ałŮčěěäŘącÄăqąŮl(Š ă+MÓČfłěÜš“úúz&''q8ĺn–Bˆ2“ŕľÍ$“I–——‰Çăô÷÷c6›ËݤŠ”ĎçůÉO~‚Ë增žžÜÍBąEHđÚf4MCŻ×ăt:innĆbą”ťI)ŸĎc6›e˘ƒBˆŰHđچ VŤ§Ó‰ŐjÝđăGŁQ‚Á ‹‹‹˜L&ěv;ŞŞ‹Ĺđxř€ááaöěكŃhÄl6c2™čííĹëőréŇ%ţÍżů7Ľąe~żƒÁ@}}=}}}8NŒFcšeB!*œ/ńXVĺ^=xŕŔşşşčěědnnŽöövršĹbŁŃH:&S(0˜L&t:]]]ěۡšš9ţüĎ˙œl6KSSmmmĽ’Ůl˝^ÉdÂjľbˇŰihh ŤŤ‹H$Âüü<ÉdłŮŒŰíFŻ×S]]MCCCšMB! ÁK<ƒÁ@KK ýýýtwwßö˜Śi444 Ş*@€+WŽ0::ĘĘĘĘmE]F#nˇƒÁÜ?11A[[˝˝˝=z€/ůËĽšŚmދB!6/ńDʍżűťż#Nó›żů›čőzRŠąXěĄűÇb1˘Ńčm÷ĺóyÂá°,6-„âŠ%ÁK<étšË—/388Huu5ŐŐŐ¤RŠŇLÇŮŮYâńř]ű™L&zzzâÜšs8l6‰D‚BĄŔΝ;×=31ŸĎ“H$°X,2ÎK!DYIđë–L&I§Ó‹Eâń8Ńh”d2‰Ĺb)UŞ_}ŹX,’Íf#R(Čçó,,,H$H&“hšF"‘ NcłŮ8räSSS óúëŻăńxĐ4 §ÓÉÁƒŃét‹E Éd’••âń8.—‹bąH*•BQjkk)‹ĚĎĎŁiƒA‚—Bˆ˛’ŞbÝfff˜ŸŸ'—Ë1>>ÎľkטššşmťÝÎóĎ?O?‘H„o~ó›¸\.ÚÚÚJŰŹÖű˜ššbqqťÝΑ#Gxůĺ—9|ř0CCC\ťv ˇŰͧ>ő)ŒF#ąXŒl6‹Ëĺbvv–‹/266ĆĄC‡ČĺrL&Ď=÷…BsçÎQ(6őw$„B܋ôx‰uŤŻŻçšçžŁżż“É„ËĺÂĺrÝśŞŞÔÖÖňŇK/qâÄ L&‡ţţ~Nœ8ACC=z”\.Gcc#.— N‡^Ż§ŻŻÚÚZž}öYŒF#‡ššTUeďŢ˝řý~ršNG{{;{÷îĹëőâńx0™L|ń‹_$ŸĎcłŮđx<ŇŰ%„˘ě$x‰u[­ ßŢŢ~ßmEÁl6ÓŮŮůHĎávťqťÝ÷|Ěçóáóůîş˙ÎöÜ9ÓR!„(7šÔ(„BąI$x !„BlšÔ¸ ­]ý'6ßjĄW)ö*„âVźśEQ(‹Äb1ĆĆĆ0™LĺnREZ-›ąŢšcB!ś7 ^یŮlfyy™ńńq&&&ĘݜŠćp8n[I!„ŕľÍX,8€ßď/wS*žÁ`Ŕĺr‘ÉdĘÝ!„[„Żm&‰P(X^^.wS*šN§ŁşşZĆx !„¸Żm¤X,255E"‘`br‚‚ :EWîfUŹO÷źgÍ1!„•I‚×6˘i‹‹‹´´´Đšť—pFQĆv—E1ŸçÚß˙œP($ÁK!D‰Żm&ŸĎŁ×ëqT;ÉŐ7=x-/„˜™dvt ‹ÝJľÇ…Ńj!HPíqămŽÇbł˘¨ŰˇŒ\!—§HQֈBq ^bCĺsyăS\<{Ÿż‘śT{kHFă¤I‚ć&fhŰمŤśłmmłţ2é ů\îf`Sśo`Bą˝ÉLl(o“—׃Ţh Ą˝™žťŘú(ĎźôÝűv2;<Á_üű˙ÂĎ_{›ĽšĹ‡>_-B .3?>K!/=HB!ž^Ňă%6ˇšžŁżp“ŐÂkőCrŮ<'żđŢŚúűîS,¸Áő‹“Š'¨ooĆ`4lbŤ…Bˆ#ÁKl N‡ĹfĽĽťL*Ăó*Ó×ǘşÖ†Íagěę Đé°9ěgçqÖ¸đ4ÖáŹq13:ÉŘŔu2Š 37Ćiěl!›Ę2u} ŁĹŒŞWČesD—#tö÷RŰXWî—+„Bܓ/ąŠl;ž–;ZˆGbL^ĹçoââŮó-&ęýM\yű"žz/˝‡włűřâáńpŒl&ĂÂônŸ‡Ľš o˙ŕušşZąŘ-„C+\zó/˙Ë*ÁK!Ė%cźÄŚSTťËA!Ÿ'Z&şŚŚĄ–î};ŘýĚúO 1ym ˘ŁŽĽžş–zj}ě<ş—ˇ†l6K"c׹ýœř_ž§{ďNn\ ’ÂąB!ś.éń›N+IǓ(ŞŠĂí˘ŽľUUÉçrĚ O°X$ŽSíÉĄÓéĐ ŸüËc˛˜Qőzۛyî—_$“N3=<Áüä,ŠDŠbĄXî—'„Bܗôx‰M•ĎçIœ„‹˜­j›|¨ŞB"#“Ďć(ä hڃTą¨‘ĎćHŒ¤)ňšü&˝!„âŃIđ›BÓ4ŠĹ"ÉXœŕěóS\u5x›|L Žđę_źB`lšžƒťięňcuŘoîS(ŢUr˘X(2řţ%ţřˇ~ŸBĄ@Çîü;:QTĺfů‰â'˙dD!„[Œ\j›fqzŽŸżö6ž=ϧůóţě)ŒfϞ'‰Ëd™"Žaś˜™'“JßvœéáqFŻ^'˛´B!Ÿ'˛´ĚüÔě'Á.AdiťĂŽŢ oq!„[‡œ•ĆŠ,­Ä(äó,/„ŒM‘IgČ$ӄCË‹EşěbĎÉC4uś’IĽŠ÷71;2Éň|á>Ćîr`śŢŹhŻÓ)T{ÜXŤlD–Ă̌L`4›đ6ŐÓŇÝÎřŕŠNĄ{ß ů‘ĺ0žú:t:Y \!ÄÖ"ÁKl¨d,ŞŞx}¨ŠJl%F>_$‰Đśł‹ÖŢěNŞ^%›Î°÷ŮĂÄV"D—ÂgčÜŰG!ŸGU\ľnŕ搊dŠ•Ĺ%:÷ôąűŘ~â‘ńp”D$N]K'żđ\ľ5 l[9 B!Ä=IđĘŰTťÎĂÁOG§SPUZńć`yUUQ úRo”ÁdÄĺ­á…_ýĹbEUĐ ´öv C‡ŃlŕŕsϰďŮĂč Tƒžj›—ţׯ 5T˝ŠŞŞtíéCQT˝ź­…BlMr†JŐŤ¨z“ĹźŚíu:ŞŞbą[oť˙ÎeL`şĺ‰¸kü–Ád|¤6 !„›Ef5 !„Bl ^B!„›D‚—B!Ä&‘1^ŰP<gi>ˆZ´˘Ş’­ËAÉç!S"ŽB!n#Ák›ąŮl‹E–烸łnE‚W9h…“ ŤŐúđ…BT ^ۈ˘(tuuĄÓéXXX`iiŠÜMŞX:ŽÝťwă÷űËÝ!„[ˆŻmD§ÓávťqťÝx˝Ţr7§âY­VńxźÜMBąEHđÚf4Mcii‰ééiœN§\j,MӘ˜˜ ĽĽ‡ĂQîć!„Ř"$xm3ąXŒĄĄ!Ţ|óMvî܉Ń(EEËĄX,200Ŕ™3g8sćLš›#„b‹ŕľ ů|>žyćžţyÜ]&š\MÓp:ĺnŠBˆ-D‚×6d2™p:ÔŐŐmz𚘘`||œP(„ßď§­­ ÇSz< –śńz˝řýţm9=—ËałŮĐËş‘B!n!€Ä†ŠĹb đĘ+ŻđÝď~—‰Déńt:Íôô4Żžú*Äbą yŢ|>O4%›ÍnČń„Bˆ'A‚—ŘP;wî¤ŁŁƒ••ţäOţ„ýčGĚĚ̔olläŔ˜L&:;;Ůšsç†ßůÎwČĺrôôô”œ={–ŠŠ)ŞŞŞpš\¸Ýn^ýućççůěg?ËłĎ>K*•ÂbąđŃGQWWÇÁƒůĚg>CUUšŚá÷űQU•ŢŢ^úűű12ŁP!Ė#g&ńDy˝^Ž;Ćמö5~öłŸńÚkŻĄiZiöa$áŇĽK444ĐŐŐE{{;]]]ěÝť—Ë…N§ĂáppôčQršßüć7Ke*\.WéyL&:‹Ĺ‚Íf+×ËB!H‚—x˘Ěf3|őŤ_ehhˆ‘‘TU%•JÉd˜ŸŸÇď÷ÓĐĐPšĺxâÄ …étŁŃˆŰ팼ĽEQˆD"2{Q!ÄSIf5Š'Îh4âńxřęWżJ]]ßůÎwîZ8:‰L&oť/“ɰ´´D.—czzš‘‘8Ŕ… řţ÷żż™/A!„ŘŇă%ž8NŔîÝťcttƒÁ€ŰíćŘącœ;wŽh4ĘĘĘ ‡ƒĹĹEœN''Ož$‘H Ńëőü“ňO0 ĚĎĎó­o}‹^xşşşŰž/N“H$p8ĽçB!ś ^bCÍÎβ¸¸H&“áă?FUUź^/:ˇŰÍáÇÉfłœN'555œ8q‚ůůyVVVx˙ý÷ńxýéOsňäIE)U›KÓ44MĂd2ą˛˛Rîć!„Ř"$xm#:EQáňĺˍF ^e‹Ĺčęę˘ŽŽŽbąXîć!„Ř$xmCsss ĐÓӃŃh,ws*RąXdll ‹Ĺ‚Ăáĺ‹„Bźś%ŁŃHCC/żü2UUUĺnNEĘçóüđ‡?ÄjľR(ĘÝ!„[„”“B!„Ř$Ňă%6T(" …¨ŠŠ!ŸĎŁiZi‰ ťÝŽ^ŻçĂ?ÄĺrŃŇŇBssó]ÇIĽR,--177GOO‡ƒH$ÂG}D6›ĹçóŃßß×~Éd’ŠŠ)Ž]ťFss3---ÔÖÖ>ń×-„BŹ…/ą!’É$@€‰‰ ąX żßO6›%NŁŞ*ńxź„~řĂŇÖÖĆɓ'§§šxń" 8âń8ď˝÷Á`Ýťwß3xełYnܸÁßţíßrňäIŹVŤ/!„[†/ą!ĆĆĆřĆ7žA.—ăÔŠSüúŻ˙:ŞŞ˘i ź˙ţű\˝zƒÁ@ww7ОţŤÜ‹…îînBĄŃhôžŰ8×&„b˒ŕ%[0d``€×_ßřßŕŕÁƒĽK‹^Ż—Ă‡“ÉdhjjZS}1›ÍFgg'nˇ—ËÜ,—Ą×ëŃét÷%¨(Ę#…:!„b3HđmzzšááavěŘAggçm[,Z[[I§ÓˇUrÇăĚĎĎ3>>Îôô4fł™ŚŚ&ź^/ąXŒÉÉI†‡‡qš\ˇš;ćççKË#ą´´D>ŸŻvëű×k¨Ýö;RŢB!ĘB‚W…şłÇéqęLMNN8tčÍÍÍŘlś{>_oo/333,--122‚N§ă•W^ÁĺrńüóĎsćĚڧ§ůëżţkţř˙˜˙řÇx˝ŢťŽŠi…BK—.ńöŰoÓŘŘˆŞŞ 033C&“yä×´U­%T !„Řş$xU˜ű]â{Đ廇I$D"‘uďˇ:3ńŕÁƒäóyřđĂyć™gčîŻďű &&&…B¸Ýn^|ńEĚf3^Ż—@ °-_튒&„O' ^äaăŞ5| RŠÉd’\.ˇćýL&‡ˇŰ×ëĹ`0‰DĐ4 ›Í†Ýnŕţš\Ž÷ߟ`0Hcc#uuu˜Ífjjj°ŮlŰzp `Bńt’QČâ6˛śăęLÂŮŮYâńřşÂ×ă( |üńÇŹŹŹP]]]‘ëR>îX- nBąš$xUˆ'JúűűŮťw/ׯ_'ÇŸŘsÝK2™$WězˆżŁi2Xţ_ëtĄ⠓ŕ%ŰęX­#GŽđýďŸď|ç;ŹŹŹ”ff2BĄ—.]b|||Þ×`0pâÄ Ţxă Čd2¤Ói–——7­çmŤŘ虊ĄbăÉ/q—őŽő˛ŮlôôôđŤżúŤ 1;;Ë[o˝Egg'fł™\.G<GÓ4˛Ů,Ńh”BĄ@,cqqąô/S,I&“DŁQ–––hiiayy™……Ňé4‹‹‹hš†ŚiŹŹŹ°cÇŚŚŚř裏xçwđů|LMMałŮČfł$ RŠfłš".EŽeěףŽ[Ý^JQ!ÄŁ“ŕ%îň(—ěš››ůú׿ÎČČďžű.oźńÉdňśň‡FÓ4p8äóy™™™! R,ąŰí$ ĆĆƈFŁ|ęSŸ"3==Ńhdyy‡ĂÝng~~žÎÎN>őŠOałŮ8ţ<6› ŤŐJ?&“‰d2I"‘Ŕd2UDđZľžö¨$ˆ !ÄúI𪚚™Ďţóœ9s›Ív[ůŐ"¨‡.Őô2™LX,–ŇşŽŠ˘ŕrš¨ŻŻg˙ţýdłYŹV+‹NG]]ĹbƒÁ€ŐjĹd2ŃÚÚJmm-§OŸ.UŽ×ét¨ŞŠĹbŠ˜ŢŽ{ůM[sĎÖ­ęQ.1ŢÄ$˜ !ÄÝ$xUMÓ6%|˜L&L&Óˇ1 w­§xgŃUłŮŒĂá¸kß[+߯RUłŮŒŰí~„orińΰ´c˝$ˆ !„/q‡JX 'đÜk_šT)„ë'ÁŤ‚ÜŞ6rÉ !@‚˜BŹ…Żm(3::ĘŤŻžşćes~řĂ>áVU–BĄŔ|@ww7§ÜÍ) bBq7 ^ېĎçcǎĆ5ëŞÔÁçOŠ˘(´´´ĐĐĐpĎqi•H‚˜BHđÚ6 …Éd’••ęęęxöŮgKLעľľő śŽ2ľľľałŮˆÇă¤Óéuý=*Áă( aBˆ§•Żm"‰péŇ% .—‹bą¸Žq[?řÁž`ë*—˘(Äăq>üđCNžňwânź„Ej„m_Re_ˆ'ÁKˆ5ĹÚÝďwő 5#´ŸŘş$ˆ ą~ź„OœÔŤ Ąx8 ^BŹÓ=6r’X;š YY$ˆ q7 ^B÷ޝkňA'žVŮ$ˆ !ÁŤbhšöĐđ%ÖF>ô7ŽÔŤlRe_T" ^Bˆ-EN˘•IŠťŠJ!ÁKÜE.3>˜ŒńÚOkk+VŤľÜM{ęœ˙ěgןmWW×}›žžŚX,ŇÚÚJMM\^‡|>O$ĄşşŤŐĘÂÂBš›´!ní%M$ˇÝwçí‡őşn6˝^OMM ľľľ ’ÍfËݤ˛ş|ů2WŽ\Áëő˘Şjš›s_ĎźöZéçŸţô§źóüóˇÝžŐ­ˇW^Ý~ő8wŢފ‰‘H„Ď~öłÔŐՕť9źśťl6‹N§#™LŇĐЀ×ë-w“ž:ç׹mww÷}eqqńńTŹV+mmm:tˆbąH&“Ááp (Jš›öxţÇ˙¸íćĐ/˙régżßóž;o˛MßűnśT*Eww7]]]LLLl‹žČÇ188Čwżű]>\z>ţŐż*ýxîÜ9Ôűooť  ŢńóÝvű“ý ˇˇ\EÁfł …d˙ţýźÄć0¸ÝnˇÄ›n;űV[˙W.wĎÇ\.ů|~“[´˝$“I’É$‘H„ÝťwcˇŰËݤ ŐwĺĘ]÷­Żžžž{Ţţn?_žÇžwZÝv­Ű?Č?üĂ?`ľZŘË[Ijkk9rä_ůĘWfjjŞÜMz4˙őż>đžŔ'˙mnn^ŰíŻ} €†{÷!V÷]ľžc(Š‚Őjeßž}D"‘Ňí­@‚WĐét(Š‚ŞŞčő˙'ƒŒŽŽňóŸ˙ťÝNmm-ŐŐŐhoo§ĄĄaßw+zĐ8ˆ§q`řVd0p:455UD/Ë˙ßóţ–––ŢžŐ7ŞŤďşďťýý÷=öZŘlś§żÇq­~žjšF,CQ”ö€?­z?éŮZľ´z{{×tűěŠSœšă8ˇZÝćNŻ}íűÝ*‹qůňez{{ąX, †-ó~•ŕ%6ÄĘĘ ożý6mmm¨ŞŠÓé$NsńâEĆÇÇ9uę^ŻË-3¸6[4E§ÓQUUUś6ˆÇ§×ëąZ­8œNç†?˛¸¸ČÜÜ&“‰ŞŞ* ŃhˇŰŰí.[ŕťu`ôŻ}őö3Ň4˜z5=ĘŔiłŮźĽÇ2•ƒŚidłYňů<‹Ľ"f-wĚÎŢvűěęýŸźö‡ÝţoüĆ'ÇY˝}?gO*mű źőÖ[¤Óil6ŰCˇßLźÄcŤ­­ĽĄĄNG}}=ťví˘żżŸîînţăüüřÇ?F§Óqć̙˛/MÓ(‹ŒĄ×ëŮľk׺ö˙M{¤™@âé …xçwřńL]]]]]¸\.Ž_żNww7ťwˇˇ,ß W’Śiäóyţď;Ę7żôKżÄž}űĘÖóU,™œœäëss÷,K˛Ţ÷˘” xzär9&&&8ţ<###¸\.ü~?š\Ž••öîÝKgg'§ÜMÖ÷^Ź”/ źÄĄÓéJĹu:vťL&Ăĺ˗Ĺď÷ Éçóřý~Z[[ ‡ĂŒŒŒ°¸¸ˆÉd*•řÜç>G>ŸgvvŤŐJ @Ó4Z[[ńűý„B!Ž_żÎää$X­VBĄ‰D‚;wâ÷űYZZâÚľkŘív†††¨­­ĽŞŞ “É´Ś×ó°^/9imfłłŮŒN§Ăjľât:ńz˝ŘívŹV+ĂĂĂź˙ţűtuu•%xełY"‘?řÁčęęâĹ_,=ö¸ĚĹÖ§( N§“x<ÎÜÜ.—‹ššôz=š\ŽW^y…˝{÷rôčŃŇLŘrH§Ó„B!Ün÷mƒÚ7ę=ú4Yŕ%6T2™$ł¸¸H2™$R]]Íáǁ›SŽ/\¸€Á`ŕÚľk„B!fffp:,..ňŢ{ďqńâE:::¨ŞŞb~~žžž>"‘ƒƒƒÔ××sĺĘÂá0mmmüĘŻü óóóœ?žˇŢz‹—^z‰ŚŚ&ĆĆĆxçwřĹ_üEü~?šŚ‘JĽČĺr„B!l6Űşg¸<­˙“‹Ç§×ëKuńE!L&™››#‘Hŕt:‰Ĺbčt:œN'‡ƒD"A8&•JĄ×ë) ‹EÚÚÚH§Ó¤R) ‘H¤Twoő8+++Äb1jjj€›'ą\.‡ĎçCUUyőŐW …B?~ŤŐŠÁ`1W@Ż×SWWGUUfł™ĆĆFşşş¨ŽŽĆfłńń„Ăaěv{قW>Ÿ' ňĆopâÄ ÚÚÚîš]Ľ~ŚJđjffŁŃČÂÂ7nÜ ‹qčĐ!žřĹ/2::ŠŃhd÷îÝ<óĚ3ÔÖÖňîťďňöŰosâÄ , UUUD"Ž9Âç>÷92™ ˙đ˙Ŕ7J'žŞŞ*Ž^˝Ę+ŻźÂéÓ§ąZ­x<<{öěáŘąc,,,đío›ééiŹV+===TUUát:9vě˜Ě0$˘( ¤R)Ţ|óM8~ü8|đFŁ‘ăǏsüřqŽ^˝Ęšsç¸ví555D"˛Ů,˙á?ü&&&¸v폇wŢyťÝ^ÚďŇĽKźöÚk\¸p—^z ˝^ĎŘŘĄPˆ_űľ_ŁżżŸP(D0äÚľk\¸pžžź^ď–D,6ĹbÁëőŇŐŐE0d``ŕśŢĐ͔H$ŕţŕđx<÷ ^•J‚—ŘPőőőěŘąƒ;v°{÷n …‡ŁŃHSSFŁ‘`0Čőëךvísss 4MC§ÓĄ×ëq:Řl6Ěf3šŚ199I6›Ľˇˇ—#Gް˙~N:ĹŇŇĚĎĎŁ( Š˘ ×ë1F4M+WUŐRY­8ŘRl=…BÉÉÉRĎëěě,™L†C‡ń™Ď|†L&ƒÉd˘ŁŁƒƒ˘iׯ_ç… ěŮłłŮ\ę{á…ččč sĺĘĆÇljÇăTWWc2™¸ző*ƒƒƒěÜšłŮ\şŹŮ×ׇßďghhˆßţíßćůçŸçřńă´ˇˇc2™đů|ěٳ瞗ÍeRHeŃéthšF4Ĺnˇăńx…Büô§?ĽX,RWWÇĐЍôőőŃŐŐŅ fee…ŞŞ*‚Á ÍÍÍ|ĺ+_á… $“I4Mchh¨4ÎŃď÷sáÂŽ^˝J<çđáĂ,-- …( |ůË_ŚP( ™ĺňĺË´´´P___š!źžćŢ29‰ UUUE]]­­­ˇÝż:łpii‰‰‰ Z[[Ńëőw]Q‹Ĺr[8ŠFŁär9ěv; Ľ™‘šŚ‘N§+~ŠńäŹÖf2˜Íf8€ßď§ŁŁƒšš9ÚÚÚH&“ E!Nł´´D>ŸÇ`0`2™P…śś6Ž9ÂŇŇögF"‘ ĄĄśś6Ěf3ŐŐՄĂáҗŤŐŠŐjĹçóŃŐŐE&“aii‰d2‰ÉdÂívc0p8Ô××?öë|šOb•,›Í˛¸¸ČÔÔ+++LOOŁŞ*}}}ôôô …˜œœÄnˇăóůXZZbii MÓčęębii‰ŤWŻxîšç°Ůld2¸tépł÷ÇĚŐŤW ƒ´´´ "‹qäČL&333œ?žÓ§Oăőz1™LĽEßWgY>ě*CĽ|Yŕ%6…ŚiLLLđ“Ÿü„ÁÁAţđ˙UU™ŸŸgrr’Ü}Ş˝ĂÍ˙ńŁŃ(@€h4JąX,M§Ďd2ë^šc5Žö€ q/ŞŞŇÔÔÄŽ]ťŘącÇmiš†ĎçC§Ó¸~ý:ăă㏏ŹÜśÁ`Ŕĺr•žĺçóyڧ§Š­­ĽŤŤ‹ƒđŇK/•Ţ—“““ö*ĺDVŠŇétiŒl>Ÿgff†śś6Nž‡ƒ––~úӟb0řęWżZďhˇŰŮż?vťĽĽ%ţäOţ„d2IMM ĽËň===k~MkyĎ>í_$x‰MsőęUĆĆĆJˇçç癙™`jjęž3ÄTUeϞ=üčG?â{ßű>ŸL&ĂÂÂ_üâ×=HžP(‡ąX,2&F<’|>Ďřř8?ţń ƒü‹ń/0 ¤Óif×PÜ1‰Dî:f8.ől”ČžöXĽłŮlôöörřđajkkK˝˙‡łŮLoo/ŐŐՄB!Ţ}÷] ‡ĂÔÖ֖ŽaąX¨ŽŽ.} Ĺb ÓßßĎţýűéëëăÔŠSźüň˘ÍćMy]÷šů¸ŢŤźÄc[^^fqqMÓX\\drr’şş:ź^ďm×óŰŰŰghhˆłgϢŞ* ,..’Éd…B …Biđ°ŰífϞ=Ľ™_CCC,,,PWWGGGvť`0H*•* ĚfnnŽŚŚ& óóóx˝^úúúˆÇăź˙ţűř|ž5—’âNš\Ž+WŽ088Xš‘˜JĽˆĹbäóyŔ={q ===\ž|™Ÿýěg¸\.l6ŠTŠt:M˙şÇ ćóy‰‹ŁŃxĎmśÓIKüOŞŞ–VqXť*™L 9wî6›ŽŽ‚Á wĂ`0”. ’É$ŮlśÔc 7żđŽ–2ŮĚ5gˇă{W‚—xlŮlśTŢáp ( Éd’bąXÚF§ÓąsçNRŠŞŞ‡éééÁăńËĺđz˝d2Ün7}}}Řl6Ňé4ŞŞŇÚÚĘŠS§pš\\˝złŮLSSGŽÁnˇc6›ńů|X,ŹV+ąXŒL&ĂéÓ§ńűý¤Ói4Măĉ–——ill”Š÷âžVâ.‹ĽžŠx<ŽŐj-ő hšF&“)]ň)]/‹„B!rš‰DMÓH$¤R), dzzš7npöěY<Š˘`łŮ8xđ :ŽBĄ€Éd"•Ją´´D$)“É$:Ż×[şÔš:1ĺ~ÁKTžh4Zš!{řđažţy†‡‡Kőžî L&555ĚÎÎ222‚Ďç+ő漉KëQ(Jăex‡/ąV{ˇNž@iĐ3Ü,łŇŇ҂ßďçŕÁƒ(ŠÂŰożÍůóçńx<=z´4¸9“N§ŠŠŠannŽH$ÂÔÔ{öě)Ťľľ•gŸ}–P(ÄŮłg9qâDy~YbËZYYá­ˇŢ*;ĚĺrŒŒŒ‡1™LܸqƒD"q×~‡#GŽđß˙űgnnŽ••jjj˜˜˜ ąą‘—_~yÝ˝˛étšH$‚Çă‘/Hđ`5=(ĚŹ˘{mˇ–ô çXk=.ŠŰ%Ö˘žžžçž{Žţţ~ŒF#N§óś10đ?—ÄúÜç>Ǒ#G0¸ÝnršGŽ)­Yzüřq2™ >ŸˇŰ]zwuuávť9qâDi_ˇŰŞŞô÷÷ÓŇŇB6›ĽŚŚEQčîîf˙ţý¸Ýnjjj0 źřâ‹dłY, 555réźBär9fffX^^&‘HpýúujkkQĺśĺŁź^//˝ôŮl–ńńqţţď˙žžžžR/lĄP`zzšĹĹEŠĹ"ŁŁŁ¨ŞŠÇăáŮgŸ%™L222Âŕŕ ‡;v°k×.4M+O4™LŒŽŽ’ÍfYYYáŔ„B!–––pťÝ|ţóŸgvv–>úˆööörýĘś ^Bq ›Í†ÍfŁĽĽĺžŰčt:L&~ż˙Žęŕw–Rš§Ó‰ÓéźçɨśśöśÁĎ÷;ŽĽŹ\ƒ;vŕrš°Űí¸ÝîťzĄŞŞŞŘłgąXŒp8ŒŰí.‹]ý2°Zń^Q”Ň G‹ĹBSSgΜĄĽĽ………ŞŞŞŘšs'ÍÍÍĽáfłš4ĆLUŐR{VWWđz˝üăü1™LĽştrĽá& ^`ľčę?QňűB<.ƒÁ@SSMMMÜnľ&ÜK/˝tŰýŤĂ2:::îšŻŞŞtwwÓÝÝ}ĎÇWË Üj׎]wÝ÷…/|ámŹTź*Äj [ź !„bsIđÚćVË9,--qîÜšuן' nH•ńJwë—ů"Q>ňťâŃHđÚćŒF#.—‹†††GŞň.6Nmm-ÍÍÍĺnĆSMQ …ńxœŃŃQů"QF™LFÖ=˝ÚQ~[ů÷/˙×ls&“‰ŢŢŢu-Ů žŒŐY•~Ůl&“É033SZő@”‡Ăáŕ{ĹbąTťJ”ÇVŕľÍΝ;Çőë×)ŠPNuuutvvĘ´ęÇ`6›ikk{ŕŒCą9TUĹétnŮ^…rĐétX,2™ 7nÜ`~~žÜMŞXš\ƒÁ°%ë†IđÚć‚Á ů|“ŮDĘŞQT%x•ËT0€Á`ŕő"‘Š˘ …ĘݔŠW]]Íf“ nĄ( VŤ•îînŞŞŞĘݜŠŚÓéčééÁëő ËݜŰHđÚć˘Ń(ľľľ9v”%o‘ě&×XĚesdSi’ńŠŞ˘7čŃëő T˝“ĺf=˛˝CáŐď˝Íňňrš›ńT›err’ą‰q * eĘĆëŹa˙ž}÷-IPŠ4MĂď÷ÓŘŘXîŚT4N‡ŃhÄjľJđ•eyq‰á>ćƒ×ŢŚĘ]ˇÉ‡ŤÎCl%BąPÄĺ­ĄçŔ.Ş\NŒŚ­×%,ś–ĹĹEü~?Ÿůü ,×)Ę'XŮ ýÝ{,..JđşE:fxx˜áááŇš˘<Ěfsi‰Ž­F>śÄewVa­˛Y ăöyń4ÖŃŇÝF6!\avlŠo˙ÁăŔ§ÓŮßKmŁďáRńÄÍcÖy0šeŠ”JQ(PU{•´łHÁ°šĎż˛¸ÄĚČ$S×FąŘmT{\˜íVR‰$h଩ĆçoÂbˇnűKpšŽRĎľ¸)›Í2==Muu5vŸ‹¤˝Ü-Ş\šdšńĄ şşşĘݔťHđO”­ĘFUľ€*—ƒÚF7—>Y^Ć¸đ“ˇČŚ38cĂZe{ŕŇą•s3̌Ną˙ô ^bÓ ‚3ó|řĆűÔˇ5ÓśŁ“ƒžL*M*–$4ˇČěčíťşŠŠ÷b­˛­é¸™t†\&‹ŐnEŮćm;+‹DŁQq´{YńlîăbĄ@2ž`ea‰d<ÁhÄjˇ‚˘Łť9ĂŇît`­˛aŘćW˘óËL]¸F:Ţrë˜JđeăŽó°çä!œ5.ţË˙ůťÄĂ1ęۚń÷vÜ<ůh:EĄX,~˛@ś˘03<Áĺˇ?`bp„ÎÝ=8ÜŐčĐQ(äčíćX EUś}σŘ<žz/nŸUŻâkm ko-=7'ǨLrî{?፿}•çĺ%}úZz;J cßOąP$Zaeq _&‹ź_ĹŁÉçň,LxďŐsL]Ăĺ­Ąľ§Ĺ ’ˆÄŃ´"m;şiémÇ彚űZ/‡jĹ"Čz‹@‚—(+ŤÝFKO;-=d3Ž˙|‡ËÉŕ…ËDB+´ôś3vĺ:śę*:v÷ĐžŤ‡Đ\š‰Y–—¸ţ᳣ÉĚ{?z㓟ňyŚě<ś='•űeŠ ŕi¨ăđgNb´˜xë•×Čfr˜mVęšn~¸ńÁaŽ_`eq _k&‹yó-ś˝Ń@C{3U.'›…–žvúďÁáv’NŚX˜žăâëďrţG?ăÄKŸŚ}w7U.皎š˘5źMk"îO‚—(+˝AÍaÇ]çanb†ůÉYÂÁebá(ĹB*—Eݞ85GąP¤Ľ§ŁŮ„ŮjĆh2bŻv`śXHœŒ Ü çŔ.jękIĆźöí⨊–ŕ%6…ŮjŚąŁ™|>Ďšďý„ŮŃI&G°;Œ|ƒBĄ@•ŰIpz{ľołoS=ńiĆ?žAd)ĚÔőqü}7Ťó]˝ÉbBŐëÉçrD–´ďęĄŢ/łĺÄ˝)Š‚ĹnĂ`4 ęo~ś:jŞq×yČçrÍ&ćĆg¸öÁUţţĎ˙†_řő_¤Ťż›óţĽ/2Š ÁŮyFŽ aąŮ$xm ^bK0˜ čtI§ÉçňÔ6x1˜Œx›|Ôű›/.˘X(଩ŚĆWKt9LsW.o Ůt{uőmMřwt.š] \)÷KÄbˇQ×\OC[3éDЉÁšşÚ¸ňöh€żŻƒ+o@•ËI÷ţ]x›ęIF$˘qRń$Ks‹ÔľÔÇx燯ÓÜ݆ÝYE,áâŮóźřĎž"ÁK<˝Á€§ĄŽCŸ9A6á›żý˙ĐžŤ›jŐ '˛´rłŘ¨NG&™Ćlˇ`ąYI'ÓÜřčcŢýOƒ—G÷bąYH'Ó¤âIT˝ :(ä ryÜužm?~ěqIđ[ÂÍńŕöŐŇÜ姐obi.ČŐw?drp”phš4H˙^< u|ĺ_ţS&Žrő‹ÄĂћ3̈́Řd:EÁ^í`in‘đŇ ‘ĽŞëjđÔ{é=¸€k˙řG>{oł_K&ł™žĂ{¨ńyYY\"˛ćůCýřű:˜ź6ĘßüѡXYÂąâń¸ë<´ôśÓÜÝF`lš‰ĄQr™ŻýŐ÷ŠokFŻ×3|yˆGöĐw¨k•Ů‘I‚˛™ ƒď]˘ďp?#WŽóńůŠŞq˘č˘KaÂĄe~ńű*žVůrđ 2JN”U.›%şf~r˝AOko;áĐ2ď˙ä-Žř1m;ť¨okÂţ€Žp€ŕě<ßţOĘň\úśfZű:0YśÖLQ4M#O˘ÓépÖ¸đľ6Đ˝o'6§ƒ‰ÁŚćˆ‡Łä?™eŚęőŸüS1šŒŸ ÜoäĹö2…|ž‰ÁfG&I%’[zý9ńtPUłŐBu­›d,ÁĘBˆd<˝ÚAcG3ţ4´513<Áüä,ŁOŁj›Ÿ˙ŽNLV ‰ČÍ/ˇ}űŮýĚ,U6.żőÉX˘Ü/q˓ŕ%Ę&O23<Á{?zŁŮDŰÎN|ţFŚnŒ3pţ#ć§fŠknŔh1ĄÓéČçóD—ĂdďXd:‰118Ěë˙ăďˆ.‡Šr91ŰŹč…|.G:™&LSČKÍ!ńdĺóyŇńĄŔFł‰ş–zU!ś&ŽP,×´śa!—'‰‘Š'Éf˛hEYQl,Ý'3>TUĹţÉäĽj˝Á€Ůj!\&ŽĄęő8kŞoŽs;ń6×c4oöœő´csTaľŰ(ć gçÉgse~e[Ÿ/ńD‹EŠŸY, äsů›Ëe˛„ \:÷sžű_ţ‚G÷râĹç¨ö¸™ş>Nl%JąX$LąX$Ž’Ë㘟œ%HĄSthšF>—'4ťŔäĐ(Éh‚t2Mt)ĚüÄ ZQ#›Î -ŇĂ âÉ) $"1Śçpz\řüL_ç§˙ßß394Jρ]4v´`uŘŃ4B>W¨*ä _â˙ý?ţ=Šx˙Ž˙Ÿ˝;ŽŤ<ü˙­}SŠ•öŐZlËť-yˇqł4k09@7„9?zšN†žCĎÉé“IfN&I“NOŚ'=̈́Lč !, ťĂjll°dÉ6x“,Yűž•jß8şmْ-ْJR=Ÿs8ŘUˇęžošęŢçžďsŸˇœâĺhu:ńÄůßÔ8!.6v\Ɣf&ł —üŇBJVTŕ÷ú9w˘‘žÖNÂÁĐeß§|m%ëwmŚőt ő'či뜣,|’ă%fŐPď}˝ôś÷`0Ä3äĆ;:JČ$ÍnĺŻ˙áď(XZ‚#Ó Ŕć›věęăÝç^##/‹ěQĂ}C¤;íč|Ł^ęOŇtü4eŤ—ąn×ZĎœŁ˝ń*ľŠ’ĺlř“-X6şz)_ť\>ĹŹęďęĺČ{9řևlťízŞo؎9ÍÂÁ?Ŕ34@,Ľë\;ža7* íĚšKrťšÚ8{üîa˘‘ž!7Ýç:ˆEcř}~ÜĂ :_S§ŸăŇýbÁóűü tőŇŢŘĚÎťnŔbKăTÍçě{e/[nŮĹňŤIÄăřŽ0extd€ IDATŕ÷ďńůĄ:nyŕ+8ł3ěž_ë!Îgx‰Ye0É/+b×Ý7c4›HłŸŻšœfO#O`˛ZČ*ČĹh6ĄŃjˆÇb䕲ńĆŒô b˛˜É*Ę#3?ŸŰƒ+7 ­^Gٚĺh´˛‹ň°gžżážŰń{ź¤ŮÓÉ)Îgç]7˘Óëqfg 3¤đŸ¸fîÁF‡ÜÄc1†zč<ŰJ$!č0:8B<gŐÖ ŹŢVEAE1ńhŒ‚Šş[:éâħG•e´P/lĎtbą[émďŚăl Vťœâ|Ę×VŇÖpíƒŤŠu•¨Ő*F†Č*̕ﳘ–h$‚{`˜cjiŹ?ÁŚ›vţńfgŽœ ˝Ą…M7íD§×ău{ˆEŁř<^†úĆ- ‹Ćčmďâô‘Ďi:~AO<'“ˆÇ řüřF˝¨5j &Ł|O' —˜UV{:V{:ĽŤ–Ni{ľFƒŮjaՖő—ÝžFŃŇ%ăŰpý–q—;kÄL ůhuZň–b4 ú v÷áuB —.ĄdE9›­VK$főöj<#Ł ő 0ĐŐKŮÚĺ$€H(Œ-Á-ĂÁčđžáQźnŮĹůŹŘ´–‘ţa<#Łź> ĘKŘ~Çnҝvń8Ť,(.Ç BDÑó#¤ßůŃUľšßOOkgž"Žpű˙÷UĘV/§łŠ•€Ç‹FŁÁ3<Ępďá@D`÷ůi;ӌJĽBŁÓâőĹŮđĽ­.]BFś ľVCAy Ő7n§żł—ÓľÇńzXšm=îÁa &ٙ8ł\4;ÉH˙gŽ|βęŐlźqńhŒ÷_xƒŞ/m%ť0—7îŔ;â!äU3ĺĺˆR^B1EjľFnŠé‚cë4^˛ťnüĄW­W_’ŻuńšZŽĹĺitZ2 rŘvűőŹťn:ƒKúůime‘lG:–tŤ2…mJ3SźźŒ;˙ęk RaśŚ‘î°aľŰ0[Ó°šlťýK„ƒaě™ŇŇ­,ŤZ…+7‹p(LFN&jš’XŹi¤gŘdŠń2ä—,„B,ŤĂ6ĺőá|@Ÿî´“{ÜţǛĆ//÷÷ŒœL2r2Ç=–]”7ͧ& źR@<'‰ˆ¨PÉEHňÄR@!Rœ^)ŔçóŃÚ܂ÍçÄ %’F퉂äD !DJ“Ŕk‘ËĘĘÂĺráőzŃ ¸Ńh4W~‘˜9Ž,˛łł“ÝŒĎëőŇß݋:jA§“ďs˛¨‚1Áâ*HŕľČĺääPPP@WWW˛›’ňJKK%đşF‹€ÁŢá˜\H$QşŢ‚Őzů5TSU0Äŕ  6Ę)6YÔţ‰yšŢ!ߊE.==ââb9áĎjľ˝^ŚzŻEYY&“‰ÎÎN†††’Ýœ”ś|ůrŠ‹‹“ÝŒyŠżżŸH4ŠËăJvSRVp$Ńůš¨ź^‹œ×뼞žž÷ߟüü|L&S˛›”˛úúú(((ŕśŰnKvS,ťÝN^^.—œĐ’Íh4’žžN8NvSć ŁŃHee%>Ÿ`0Č`˙@˛›”˛‰›6m";;ˇŰěćŒ#×"‰D‡Ăô÷÷SZZŠÍ6őیĹĚ:sć Z­üäŽE<g``€ŚŚ&ěvť|žIävťÉĎĎ'/OJŒŃëőáóůđx<ÉnNJÓjľŘl6‡^bîŮl6VŻ^ÍîÝťÉÉəÓ}‡Ăa‚Á ĄPƒÁ€Ńh7ݍF …B„B!Ôj5ƒĂ"]WŃëő‰D’ÝŒÍçóqúôiöîÝËŞUŤd7‰>˙üs6mÚÄ]wݕěŚĚŤŐŠŃhÄbąČ…A% ˘Ń蟏ž/ß 1ŤÎž=ˑ#G¨ŤŤŁŞŞŠŞŞ**++•ç9räGŽÁfł)ۍ˛Ć—˜XVV[ˇnĺć›o&===ŮÍIY*• ťÝ~ĺ SH4ehhˆ÷ߟsçÎI\ƒAZZZ¸çž{HK›_u|$đłĘĺraˇŰéčč ŠŠ‰ŢŢ^ŇÓÓÉÎÎFŤŐbąX())aßž}Řl6ňóógä*1‹ŃŰۋŮl–“Ă"Ł×ëąZ­dddĚůÔyKK ÍÍÍtwwSZZzɝރƒƒ477ÓÜ܌ĂáPśYŒ#¸2˘3ąh4Š^Ż'//ŞŞŞd7'e ŇÚÚJ<>˙ěĺW#fUVVůůůtuuqäČňňň¸ńĆąŰí¤ĽĽQQQŮlĆétRRRrÍűŒFŁx<8@yy96l¸ć÷ ĐŘŘȇ~HAA7Üp;věŔbą RЇĂôőőńᇲ|ůň›ÚĹbř|>e*^Ěo.—‹üü|6oŢ<§űFŁ 322B4Ĺápŕp8Ć}gÜn7###ŒŒŒ(Ď/Ʋ ]]]ÔŐŐÍËßËâť óÖ­ˇŢŠZ­ćńÇçÜšsƒÁYŮO(˘˝˝'žx‚O>ůdVö1™ąE‘çc^¸v˗/géŇĽřý~ž|ňI~˙űߏťŞÎÉÉaóć͘Íf–,YÂęŐŤgäť …8{ö,###×ü^bń ƒÔÖÖňË_ţ’Ÿ˙üçěßżŸáááqۜ={–W_}•˙řÇźöÚk477'ŠľŠK/1'T*ۡoçşëŽĂápđŇK/qňäÉIˇŻŤŤăÍ7ßäĂ?ä˙ď˙Í3Ďřŕ°ŰíŘl6JJJčîîćŘącDŁQVŹXA"‘Ŕď÷sňäIrssŠŽŽf׎]ĘݐEEE ňňňXąbE2ťœňăÉ\Ż×S]]^Żgpp—^z‰ŹŹ,Ǹí"‘^Ż—Ă‡3<<ŒŃhäŕÁƒ¸\.6oŢL~~>ÍÍÍźüňË|ňÉ'üű˙ď$ ąnÝ:˛˛˛Đh4řý~FFFččč ˝˝]šŘ˜)]<Œ=śĐ˙Íă÷o* ¸ëŽťřÍo~ƒFŁĄ˘˘‚˛˛˛ sžbą^Ż8_+/ b2™0™Lh4ź^/nˇ[š“5 RŠ0¤ĽĽáńx¨ŤŤă™gža׎]8Nt:fQ€_- źÄœ2›Í,[śŒď}ď{ü˙ń?xóÍ7Ѝ¨PrWBĄäççłnÝ:6mÚÄÖ­[ůĘWžB"‘PîP,//çžűîă‘G ¤¤$)ëöMő ráv÷Ýwßl5gŢ[l'Á7âóůxôŃGyĺ•WˆĹblٲEyžżżŸ˝{÷ŇŢގŮlĆbąŕt:9pŕ---Üu×]lßž]™ŚöěŮCZZŻżţ:żţőŻš˙ţű•ş]cWéáp˜ÁÁAœN§^óÔB>Ůét:222¸çž{xůĺ—yńĹ• ÎÝn7ŁŁŁÄb1ĺ{ &##ƒŽŽ.Nž<ɚ5k8xđ ^Ż—[nšľZ}IŔságľ˜ƒĄdYLA˜JĽÂfłń§ú§deeńŔ‘‘1nőĄĄ!:;;Ůšs'6l ŹŹ €żúŤż"‘H(ŸÁΝ;桿ý-ög†ÓéLJŸ9 ‰YŐÔÔĉ'řä“OPŠTŹ[ˇNy~éŇĽ|űŰßćóĎ?§´´‹ĹÂć͛ ƒÔŐŐqęÔ)233Yž|9k׎EŻ×+CŢhľZŠ‹‹Yšr%§OŸćÜšsäää`ąXŘ˝{7ąXŒ?ţ˜ĺ˗'ë#Püć7ż!‰đ•Ż|…§žzŠňňrnşéŚd7kĆL7Xč'ľ‹UVV˛qăFžřâ %ĆnˇłcÇ>üđC†††đz˝Řl60™LÜtÓMřý~H$|őŤ_Ĺh4ŇŘŘČ˙ýż˙—[o˝•ÂÂÂqű …Bx˝^ŇÓÓg4Á^\jąa&“‰˛˛2ţćoţ†#GŽđîťďŽ œbąCCC—”Üńűý„B!l6 ˛aĂ^yĺt:,‰t•$đłĘl6SVVĆwÜAvvö%’ÓÓÓY˝z5iiiJهĚĚL6oŢLVVmmmX,–,YBii)Z­VIŘ´Z­˜ÍfŠ‹‹ŮľkEEE+‹qß~űíĘmůVŤuVFť‰Ä”ŽD"Á‹/ž8ăű_hňÉ ÎWĂîîî&‰pňäIŒF#šššŔů kÆ řý~:::p8JŕŐ××Gww7Ÿ}ö™™™Řív˛˛˛0œ:uŠžžĚf3%%%ŹYłˇŰM]]+WŽ$==]Idöů|466ât:ügš,–ĎXŤŐârš¸őÖ[éííĽŤŤKyÎáp••ĹŃŁGq8D" CCC8ňňňđů|tvvb4šëŽťxţůç9yň$GŽa͚5—äֆB!˘Ń¨äyMB/1ŤňóóÉĎĎgǎ“nŁVŤ•áí1………—\鏚xôĘbą““ĂÖ­[Ç=~Ýu×]eŤĹLZ,'/8—b0$''‡ŽŽ%‘xLEEÔŐՑ——‡Ője͚5DŁQęęęhhh ‰PVVĆÚľkókĘĹăqrssŃjľ”——+w–ů|>|>6›;JEWWYYYs~Bťřßń—żü%‡ƒ;vđÔSOą}űvśoß>§mšŠT‰ĹbĘ(U8f``@5TVV˛iÓ&BĄĄPFCAAŤV­˘ŽŽŽƒ244„Óédppęęj–,YBkk+CCC¸\.věŘAcc#mmmź˙ţűcˇŰ1 Řívź^/CCCh4L&“^ŔKˆk4v žčłâ×bąöť˛˛’ŇŇR"‘Z­VŠw!ƒÁ@UUŐ¸r+Wޤ˘˘‚H$‚Z­Ć`0(ӄ۷o'ŁŃhĐëő”——STTÄ­ˇŢŠŃhDŻ×ŁRŠřó?˙sŕüč…Á`˜‘‚ŔSą]ěË÷5 RSSCgg'źňĘ+ÜrË-ă.bošĺ*++ŠŻŻÇnˇ“™™É 7܀FŁĄžžžÓ§O“Í 7ÜŔŠ+đx<|ú駨T*ňóóŃjľŹ[ˇŽ@ @ww7gΜĄ˛˛’˘˘"n¸áęëëI$R?ń2$đb†,–ƒ÷ŐJ…ţOĽpŠZ­ž$ ťÜâÖ—‡˜l3Qaüj-ĆŰĹŘ'˝^OEEéééƒAěvťRűpŒĹbĄ¤¤łŮŒĂá@§ÓáršŘšs'L&%%%Řívbą›7oFŁŃ`ˇŰ•Ŕ+''‡P(¤źWyy9˙îßý; .— ŤŐ*Aý$$đBˆ–J#ś‹­?Óét—MÓ3–7;FŻ×STT4é’WŢ ——G^^޸njF#™™™WŮňÔ"W H$DŁQe^_$G4]ô~ąp-Öďćbí—X¸$đZäÔj5ŁŁŁÔ××ăńxĆU‚sŤľľ•ŇŇŇd7C!DIŕľČ ˙~éK_"--M–ÔI˘üü|Šč|T*ŁŁŁ466˛oß>eŮ1÷:::äóâ*HŕľČ™L& 1VÁs'‹a0ˆD"Ęڔbzt::Žh4ĘŮłge%‚$RŤŐ2‚>‰`0ˆ×뼽˝=ŮMIYýýý„BĄyyŹ•ŁV hhhŕŮgŸĹd2ɉ*‰Ün7ĽĽĽ|ůË_&&ť9 Rzz:ëׯgŰśm¨T*šH˘D"VŤĹëő&ť)óŠFŁĄŁŁƒÓ§OÓĐАě椏p8L__ĄP() Ë_Žœ…S@"‘@ŁŃ°sçNšë$‰ęëëŃjľD"Iř˝JjľšŚŚ&>űě3 ƒ^Iäńx(--ĽŹŹl^Ž*$ƒFŁÁfłqóÍ7łe˖ 뼉šÇ‰D"”––ŇŰۛěćŒ#W Ť ź|ůrY[+‰†‡‡• ëő÷÷sňäIVŹX!'ś$ęěěÄ`0——'×ŠŐjL&FŁŸĎ—ě椟x< źÄŹęé饥ĄŁGRRR‚FŁ!`ˇŰŃh4X­V yőŐWQŤŐŹ_żžuëÖ]2’á÷űéé饞žžŞŞ*JKK …BüîwżŁ§§‡œœöěŮ3áëxőŐWŠŹŹdÝşu˛”…bV *++šőÖ[“Ý””5<<̇~ˆŐjwx‰Yáńxءo¨ŐjV­ZEFFjľÇC?mmm8NĘËËééé ŹŹlЏx"‘h4ź^/ýýýŘívDŽŻÂëőbłŮHOOŸtŇT%—˜qĂĂĂ|ńĹśnÝĘ_ţĺ_*ŁXýýý:tˆ“'O‹Ĺ¨ŽŽžŞď¨^Ż§ŹŹŒžžÜn÷„ŰX­Öy—Ż"ćp8Lss3‡fppŠŠ ŃjľJžYqq1ƒƒƒ<÷ÜslÝş•mŰśązőęqď“H$pťÝ|ţůçô÷÷sÇw`6›ijjâ…^`÷îÝÜpĂ ă^ÇáíˇßćŘąclŰśmŰśQPP07Ŕ!—˜q]]]|ńĹ”——SQQÓé÷üŘŐײeËĆM qęÔ)ôz=§OŸ&˛qăF*++Ľśś–W^y…|]ťvMş˙łgĎrčĐ!ŹV+Z­–––NŸ>MEEĹŹőY,^|ńĹ|ôŃGÜ{ď˝lßž}Ü|FF›7o&ât:§T¨Řl6SVV†ÍfSJźŒÝhrš×Jí21™úúzŢ{ď=<ŤWŻfŰśmX­VBĄ˝˝˝œ={–S§NaˇŰ1™LƒÁËsN$ĘÍQcĚf3ůůůœ:uŠŃŃŃK^ŁVŤIOOGŁŃ …d}ÚIHŕ%fÜČČmmmdddŕt:'fŚŽD"Ŕů­FŁQŠ2vvv‰DČĎĎWŚr^ýőKޞ.ävťimmĺĉTWWc6›ŃétW<Ą 1™ŽŽ.Μ9ƒZ­fůň唗—{Ţ`0PPP@UUŐ¸Ĺ^Ż—îînΝ;G{{;:Ž˘˘"˛łłńx<œ;wŽcǎqÓM7]2Ősńţ;::”Ő'éďďŸwy+"yFFF¨ŤŤăÍ7ßd׎]”––Žť‰(--`0Čšsç0S*¤m4ÉËËĂjľ*#¸ƒ‡ĂqI@6FĽRa4ĺÎń+ŔK̸P(„ŰíVJ@L•ÝngéŇĽTUUa0Řż?őőőÜrË-,_žœ+V\ńÝÖÖFgg'iiilÝşUš:;pŕ€,o"ŽJGG­­­Ź^˝šÂÂÂIżGcŮŕŕ pţdxîÜ9L&ožů&:ŽÝťwł{÷nşťťyă7řţ÷żĎ[o˝5av"‘ râÄ >řŕ Đét444ĐŃŃA(š˝N‹eěbłťť››nş‰e˖{>''‹ĹB"‘ 77—ţţ~%klyŁ`0ˆ^ŻÇ`0(˙ĎÍÍ%33󊁚ßď'*Óď@@ E_†^bVÄb1FFF.šqś>|˜––V­Z%Ĺ5Ōđů|ŒŒŒLűuYYYŹYł†mŰśpôčQjjjŘśmeeeŹZľę˛ŻO$´ľľŃßßOzz:ˇÜr éééÔÖÖŇŘŘ( T Ĺɓ'ńűýlٲ…źźź —ČË­5 JŕŐŢŢN}}=---ź˙ţűŹYł†;v°jŐ*Ž;ĆK/˝DKK ?˙ůĎÉČȘt˙|đ---JţáčččŔkę+o"ÄôäĺĺąnÝ:úúúčéé™Ó Ώ‡ŃŃQÂá°TÓ3"+ُcÓâSĄ×ëIKKĂfł‘‘‘^ŻÇăńÇ1™L—^ŰoMM ]]]™™‰ËĺÂáp`6›ĺ&ĄčëëSî7 ~74͸; U*6›ÜÜ\ŠŠŠČĎϧŤŤ‹S§NĄVŤÉÉÉ!‰pöěŮIď8ƒ´ˇˇÓŮŮI"‘`ŊŹXą‚˘˘"l6›¤wLB/1ă Řşu+z˝ž3gÎpôčQ‚Á ’H?v"žŞ‘„Ëťíů̙3ŒŽŽF‰Çăăö/ÄtŘl6ěv;ÝÝ݌ŽŽN+řşV `ˇŰ/Š&Ę@ €Ďç# Mů‚SĽR‘‘‘AII +VŹ ŞŞŠX,FWWjľš˘˘˘+Ží;V{Îď÷SPP@uu5ŐŐŐ,[ś —Ë%×$ä—,fœĂá`ĺʕlŰśO?ý”Ÿýěg HůŐž IDAT ('ŹX,ĆĐĐ_|ń'OžœŃ}oÚ´‰ŹŹ,Ţ|óMZZZđűýD"%Y\•ĘĘJ6oŢĚšsçčččŔăńĚéţĂĂĂ2‚+.+ 2444§ß“ááaŢxă âń8yyysśß…NrźÄŒSŠT8Nzč!víÚE{{;O>ů$ëÖ­###ƒD"A8&;;ŤŐʙ3g”˘§OŸ&33“Ó§OÓŐŐĽÔ…ŠŻŻ§śś–ľk×2<<ĚńăÇÉČČ ŠŠ żßĹbáěŮłdff˛sçNű÷ďçřń㔖–’H$`hhH)Ú*RËĹWŕSÉAÉĘĘbőęŐlÝş•˝{÷‡š˙ţűIOOG§Ó‰DĽŁŁłŮ|Iů”kiëśmŰřĂţŔťďžËŚM›(..& 1888§#ob~ť0řôÓOéííĹĺrÍY`<Çăńŕőzçd‹œyÄŹ0Ź^˝šÜÜ\ĺśy›ÍŚ , ŮŮŮJeĺM›6p:˜Íf Ńjľ„B!222ˆFŁrď˝÷RXXˆÁ`@§ÓądÉ222”ĽZŇÓÓYž|9Z­–łgĎ*m)**Âbą››+Ľ%RĐd˙Ţ*•ęŠÁ—Éd˘ŹŹŒű'N088ČG}DEEfł™h4Š×ëUŒîďď'‰ŕńxčééQţU*‹ˇ´´ĐÓÓCYY###tuu‘H$čëë#‹ĄRŠčď梨˘‚ÎÎN†‡‡9tč­­­tww“žžN$Áëőâ÷ű•R"5UVVRYYIMM o˝őńxœ5kÖ(IöápżßĎđđđŒ]ŔůßĆʕ+•Z‰[ślÁh4‡ ’\? źÄŹrš\¸\.6nÜ8é6ĺĺĺ—ÔFşřvh8pšŘ…KIKKSŠZ qĽ {*ÁWvv6_˙ú×9wî555|ňÉ'„Ăal6›˛ÍúőëŃétœ>}›ÍF4exx˜îîn†‡‡•‘ŕ`0Hoo/###üéŸţ)ĄPˆÎÎNŹV+nˇ›Í†Ăá §§‡ŇŇRvî܉Ńh¤ŚŚ†łgĎb6›Ů°a‹…P(„ßď—%YR\NNëׯç‹/žŕÝwß%-- §ÓInn.pţÎÜÁÁA:::(++#+3Á`Pů/‹Ç•2ąX ˝^ßď' ‡ …B¨T*âń8fł™oź‘Çœ'NĐÜ܌Ëĺbtt”`0H4U–Ö’›Aţ^Bˆ”7•ŕ ??§ÓÉΝ;1™LăN&FŁ•JĹúő늨¨ ‘H ×ë1™L,Y˛D™´Ůl”””°víZÂá0&“Išížűî#ŁŃh0™LčőzŒF#ěÚľ •JĽŒli4 ƒAFťŐŐŐrúôiŽ?ÎsĎ=§\|ĆăqŒF#ëׯgttTš ą˝˝Ó§O 9}ú4###8z{{Š­­ett”ĽK—RWW‡ßďg``€łgĎb4ńűýôőőQVVĆ]wÝE]]O<ń.—‹@ @~~>ĂĂĂ ŕp8”%‹„^BˆElڧ”őz=z˝~ÜH×Ĺ´Zí%Ľ"&ŞŤ4Q!։FŽ4Í÷)„ĹbĄ¨¨ŤŐJff&~ż\Âť^ŻÇnˇŁ×ëYłf iii˜L&\.éééčőúq [/[śŒŒŒ Âá0yyyddd`ľZ•ľwN'™™™˜ÍfÖ­[GVV}}}ʉZ­Ćd2‘››+5/"W ËAťĘÉŃÓÓ#%-„łFŤŐ’™™yŮ26› ›ÍĆňĺËÇ=^\\<îď“-Ć^TTtÉcšššĘ´Ś¸2 źR@0¤łł“?üpŇ“˜} äää$ť ^"‘÷ßLË[S#qB\ źR@yy9=ôTťN˛ľk×*IŻRĘâęÝ¸wď^ŹV댽ďď~÷;^{íľ{żĹŽŚŚ†˘˘˘KFJ„—'G˙E*ÓŐŐE}}=nˇ›@ €×땫Ô$óů| ĐÜÜ,Ł_Wiě.ŤŐzĹEÓ§c&ß+,Y˛„‚‚Ěfł”gšČXây}}}˛›’˛FFFhkk#//oŢýś%đZÄbąMMM¸Ýîd7E\ *5ÄÔÄb1ĺ–řüü|śmŰ6Ľ|šŁG˛nÝş)í#??˙Z›™Rňóó1ƒA€t˝€FŁÁăńpôčŃd7%eůý~FFFˆÇăóîŽ_ źŠ‚‚~řâŃhdzqžI$D"‘9Ť,˝x<Ž?ŽVŤĹĺrÍxĐúƒü@ŚŻ‚JĽ" *ŤJˆóžôĽ/QUU%ÇŢ$ŠÇăěÜš“œœÚŰۓݜq$đZ¤t:ŮŮŮÉn†3˘¸¸˜Gy‡Ă1í[Ó/,˛ťuëÖqĎ:thFڗʢŃ(›6mbĺʕÉnJR qěŘ1~˙űߣŐj‰FŁ2Ş= :;;ill$$ť9€^Bˆ ;;›={öĚřűnٲeĆßS¤&§ÓIaa!ĄPHŽy$ ĄÓé(//Ÿ7őÄT ÉśB¤ˆŤY$[!fŇüĘ8B!„XÄ$đB!„˜#x !„BĚ ź„B!ćˆ^B!„sD/!„Bˆ9"—B!Ä‘ŔK!„bŽHŕ%„B1G$đB!„˜#x !„BĚY$[!Ä%žŻRń˝ZËňű­‘ ĚŘ{ ąĐHŕ%„bV}/‘¸$řš(ŰVˆĹL•Hȡ\‘Těĺđ7ąą hڃ É‚­Š€L,’ă%„bB×(MD‚'!$đB1‡Ž&ř’€M,&x !„PĚô(×D$ŠL/!„“š‹@ěr$H‹^B!ćœT"UIŕ%„˜űŃ­+_>Ÿě‘7!fŠ^B!.k6ƒžŠŒ|IĐ% ź„B$ŐDÁ×ŘcŐűžJ%Á˜X°$đB‘ô@f˛‘Żď%2ĺ( ź„B\Ń\–™˜,ť° Œ‰…JÖjB1o\.çk˘ç$č Œx !DŠ[¨Á‹ä‰…H/!„S2ßšŠä͡6 !—Bˆo˛ü/!ćU"!ßP!DjP]4ú!‡żK]gŰběÓľ’ŻŤçvťinnĆbą ŐŚÜ ţź‹Ĺđů|ŕrš’Ý1Ď\tĽRţן:JiľZžúŐŻ*WII ĺĺĺüěg?#đË_ţ’ż˙űżçG?úќˇďЧžJ‰}ÎśĹŘ'‘<'NœŕŰßţ6ŤV­Âáp$ť9‹‚ţÇ×đwžsMďăóů8qâ?ü0_ţň—g˘ib™(¸J…°y5âuń{\üÚăǏłvíZŠŠŠhmm˝úF^…ŚŚ&VŻ^M ˜łŃˆděsś-Ć>ÍńşzGĺąÇăśŰnCŁŃĐŇҒě&-H#<2ésöţçi˝—Á` ??Ÿôôt^yĺîşë.ŽżţúkmbJ¨ŠŠáwżűĹĹōĆd7gN{ŕ–<ýôeKŸĎGkk+ńÁęŐŤŻú}ćՈו,[ś €îîîq' üq{ě1š››)..ćÁä[ßú֏Їúúzžzę)ž{î9†††&|ě™gžáż˙÷˙NSS×]wĎ<ó ™™™ÜyçŕßN’Żżţ:ˇß~;Á`G}”§Ÿ~šŢŢ^*++yôŃGšíśŰĆíç׿ţ5]]]|ó›ßäůçŸçË_ţ2Ď?˙ü„ý˝Ň>§Úď‰LľßcŽÔżÉ‡ęęjŽ9˘<žbŊËöIˆé2 dffRTTD0¤ŤŤ‹źź<™vœ†Ú+üţFy„ę7ޘňűuuuałŮXž|9999˜LŚkmbĘpťÝ455QPP€ÇăÁív'ťIsF÷čŁtttůîw•çĆK­V‹Óé$ÓŘ؈Çăšś÷›Ąv͉žž>ŕüÔă…~řa^ýu^}őU***xôŃGůĎ˙ů?sôčQ^xáeťťîş‹śśśqŻ˝ű+äüŕTWWsřđa}ôQ}ôQžő­ońôÓOsâĉIGâ‰{öě!‰°˙~ŹV+÷wǝwŢÉŢ˝{šá†¸ýöŰéęęŕ§?ý)ßűŢ÷čëëă̙3“ö÷rűœNż'2Ő~Oľ­­­Üyç;vl\Ÿ^{í5ňóóůűż˙{žńoŕt:/Ű'!ŽV(btt”`0HII ‹%ŮMZ0j§˛ÍíˇóWÜ.‘HpâÄ úúúXž|ůľ7.ĹŘív*++Ů˝{7˝˝˝444¤ÜČŔŮűîSţ\ţěłăżđďseíÚľ˜ÍfşťťąZ­×ô^ jŞńŻ˙úŻůĹ/~Á˙ű˙ţ8ü¸˙~Žťî:~őŤ_)ša;věŕ“O>ᥗ^â+_ů ###JČŘ{ŽŽbłŮ8uę”r čîî&//ĚĚL%ŕ›Ź]żúŐŻxŕhmmĽ¨¨€ááaœN';wîäă?ĆăńžžŔ{ď˝ÇîÝťŻéł˜Nż'2~OĽp>Pܰa_ýęWů×ýWŒF#Żžú*żýíoůőŻ}Ĺ>Ľ2™jźz§Nâ駟ćŽ;î  ŇŃŃÁmˇÝvÍÇTńăiœÔż ^q›x<ÎÓO?Mnn.[ˇnĺÉ'ŸäúëŻg˖-×Ň̔Q[[˛ožÉwŢI[[lÚ´ F“ěŚ%ÝëUUÜqÁ,Ęľl7@€}űöąyóf–,YÂSO=ĹמöľĹ;Őřꍯ˛gĎ>űě3ţëýŻź÷Ţ{|÷ťßU‚.€˙óţ7Ţxă¸×>ôĐC|ňÉ'üâżPą@ăBœ/ź:ËÎÎ```ŕŠí|ć™g(..žäšąiś´´4幊]—3~Od:ýžJ˙VŽ\ɏ~ô#žő­oałŮř˙ń?ňă˙˜ˇß~{:]⪊Őjt:ƒƒÁ0ăďßßßOss3 X,\.ƒžž>ŠŠŠ((( ##cĆ÷;_Lĺ3ÇăhľZÔęyU­hÁ‰Çă¨ŐjŹV+ĹĹĹ)?uţŘW388ĽÇŕß° ŸŸ.Ż×‹Z­&_ő{\l^˙K~ík_#‰`6›šůć›9pŕŰśmˇÍG}@VVָǡnÝ œżzsń¨ÂdĘAc*#őőőD"‘I“íçjM§ßÓiĎDýžJ˙Ćü§˙ôŸřĂţŔă?ÎÇĚË/żŒÓéźěk„X(Âá0MMMźőÖ[”””°bĹ œN'---´ˇˇSZZJUUvťN—”6Ćăqü~?Z­vƧ¨űmţó^ŻÇjľât:g<đJ$ř|>†††pťÝčt:ez>ŕp8HKK›7ůy—Ť~ďt:/{7äX0v5ß]N‡ÉdšŃĎ^^ápřŠŰôööçó;.ü‚äĺĺ\sÜTŒŒŒçsĐĆö;Űć˛ßÓéŸJĽâÉ'Ÿ¤¤¤„öövôzýŒľCˆdËËË#77FCII UUU”––˛fÍžóďđŃGFŮšsç„#ěs!ÓŇ҂Ífٰ°pFß[‚ŽĹ#‘HĐÖÖĆ|Ŕ§Ÿ~ŠËĺbéŇĽh4š››Ůąc‡RE`žš¸ţ×TKP̗ ‡?ՕŹZľ €Ç{lÜ㍍,]ştVö9—ýžN˙ţéŸţ ŤŐĘ˙ú_˙‹ď~÷ťSŤŒçŤa_źmYY ěۡ‘‘žxâ Ţyçzč!žţy<Č?˙ó?óĎŹňŹÓé”R 555ĘűőôôL9l˛}N§ß™Nż§ŇżĂ‡sĎ=÷đá‡* úZ­–ţđ‡üţ÷żçţűďgďŢ˝”——OÚ'!Šh4JKK z˝žććf𛛉D"lÝş•›nş‰ŽŽ.ŹV+kÖŹaǎh4Ž9BMM ;věŔl6c6›ŕßřk׎edd„ÚÚZZZZH$dffbłŮřěłĎ¨­­ĺúëŻ'-- —ËEff&UUU”——sěŘ1ž{î9z{{ąŮlTTT`2™(**˘şş˝^ĹRWʓ‘ +ő¸ÝnL&………¸ÝnŢ{ď=Xšr%555dff˛qăFŞŤŤŠŠŠĄśś–öövœN'ýýýŘívžűÝďňŮgŸŃŰۋÁ` śś–źź<ŞŤŤŮ¸q#Ÿ~ú) ĽĽ…›nş ŸĎGGGCCC<ôĐCdff200@?_|ńuuu”••át:gĺŽĺš2ŻŻ‹_˙ú×ůú׿~Ĺ; ˙ő_˙•uëÖń/˙ň/deeQVVĆ#<Â7żůÍqŰmŢźYůsuu5‰D‚;v(­[ˇNŮ׆ .Ůö‰'žŕÁäŽ;îŕîťďVŠ”ęt:Ţyçžóďđ /ŕőzŠŽŽć‡?üĄ2%xa ›âââ)ÝNśĎéô{"Óé÷Tú7öŮŽ]ťVyŻ`0Ț5khnnŚ˘˘â˛ŸŁ …Z­ĆĺrQRRBaa!ůůů$ ˛łłÇ ĺěŮłtuu144D("‘H Ńh”;Ö‡RĆĽĄĄFCEE6l`ɒ%Ź_żž`0Hzz:­V‹N§Ăl6cˇŰIOO' F•iOľZ^ݟVY ŽRW8Ś­­'NĐŮŮIww7† 6°yófź^/‰D‚ŒŒ ***čé饝ť›ŁG˛nÝ:ŕüw˝ĽĽ…;v`ľZ•Qߓ'OFqš\ƒAöíŰG[[6l@ĽRF‰D"a6›‰Ĺbüú׿ćîťďfɒ%äää RŠpš\cľZ|Młyx]mŃH•JĹĂ?ĚĂ?<í÷ŸlŸ=žk×.Ξ=;áöVŤ•Ç{ě’<¨+íçJ.ˇĎŠö{:í™ěńŤéŸŃhœöç(ÄB ŃhČČČ ¨¨ˆĘĘĘqĎĹb1t:‘HDšťx,0şř=ŇŇҔýX,ĆŔŔYYYdeeQQQĄlÇ ‡Ărي˜‰D‚p8L @ŤŐâńxXťv-k׎eůňĺ´ˇˇłdÉ4 ‹‡ĂAss3Äăq%ÇQ­VłfÍ–-[Fkk+żúŐŻˆÇăäççSXXˆJĽ"‘H(ßyŁŃHZZ6›’’ ”Zy~ż‹ĹBff&Z­–ĚĚĚżK7YćUŕ%„ ÝX^ĚË/żŒĎçăţĎ˙ œ/ËŇŮŮI"‘˜ôGĽRáőzqťÝăňX"‘ĂĂÄBĄiľĺÂýĚt-Aąx ĘËËŠŽŽŚ´´tÜs‰D‚ňňrěv;ííí:tˆÓ§O3888ŽŽ¤Ńh$##CŠ_hlldíÚľŹYł†M›6pß}÷)ß˙ZĄcŞ%%ć˨Ž^B1ƒÂá0uuuttt(K”uttĐÓÓC$ĄŠŠiÂT“ÉÄƍůŕƒxĺ•WˆĹbŘl6<áp˜oźqÚQŁŃ(nˇ›´´´”\ďO\ť`0H[[o˝őZ­–={ö Őj Naů(8_SŇëőŽ{,‰ŕvťg´LĹXP5Q6_Ž1x !Ä 322B,ŁżżŸŽŽ.233q:ĘM%†œœ\.>Ÿ}űö‹ĹHOOÇď÷ăőz•;ƒá| ˜ąDć7ŇßßĎŠS§řěłĎpš\8ňóó1D""‘‹…‘‘ZZZčî¸˜x<Îđđ0Z­VYěäɓŘívĚfsŇ>3ą°ůý~Ž=ĘŃŁG)..Ćĺr‹ĹˆD"¨T*zzz—źÎd2Q^^Ž”NąŮl˜L&ĽĆ]YYŮ´—•ŠD"ƒÁËV’ŸoAÖD$đBˆ)%“——‡JĽbtt”‘‘ed ÎOŰlŢźÇĂącÇ8rä6lPr`ŇŇŇđx_úҗ°Ű팎Ž’ÍîÝťĺÜšsTUUÉ4ُÄXI”p8L<'ŕ÷ű …Băî ‡Ătww‡•şZCCCĎřv˘ IDATƒA4 Ę4x"‘  ‰DHOOgŰśmJ)ˆąů@ €ÓédýúőJΗFŁ! âńx…B¤§§‹Ĺ‡ĂĘw>‹ń˙ˇwçńQ•÷âÇ?ł/ÉdŸ$$!!d!@aQAˆ¸`EŠÔjmďľ˝/TŞŐ{ľöek[~^kimëmľ´n˝ĽŠľbëWKËž/ …ěűžĚ’ŮĎď8§’ŔÉňź_Ży˝2gÎyÎóœ3“ůÎ9Ďó}ÚÚÚpťÝh4šQ=wĺč­š Â0KHH &&†E‹É#ľZmŻ_î*•ŠČČH–/_Î-ˇÜ‚RŠD§Óáőzšůć›1 x˝^nšĺ|>ƒĄ×ÔZéééLœ8‘ŰnťMŢÖt͞=›ěěl|>:…BANNK—.E§ÓĄŐjQŤŐ|ůË_–'Ťöo+çóOÔÔԄÓéäÜšsÄÄÄ`4{ő󊈈ŕK_ú‹…ŠŠ ţüç?“ĹbĄŚŚ€şş:ęëëńx<”——Ill, ,ŔëőrčĐ! ‰‰‰aŢźy\{íľ(•J, “ÉDUUŐŐŐÔÖÖ˛`Ál6 „††rë­ˇbąX8pŕŔ€Š’Fx ‚ ’FŁé5™p_ …ű,ĽĽĽTUUąoßž€ďŻŻă}Ľ†zž8pѲ'N Ќ`˝_…žéőzy$_iii°Ť3Ž………]ÔI[ĽR‰ĎçĂjľR[[;ęç'­ěv;^Ż7  FTŕušŁ€ŽÔ† .ZŹşĂ?˙ůO9ˆP(źýöŰWm}ď+ˆó5Ô2ĆÓ{d4ĐëőL:•3fť*ăžRŠD­VÓŃŃ쪌Zƒ—ËEII •••ÁŽÎ¸ŚŐj:óÈ ź‚‘äŻ´´”ßýîw#˘.ÁŇÜÜ 0,ˇű;ŢW*çk¨eŒ§÷ČH'Iuuu455Éš…Äů ž¸¸8&OžŒÁ`vUF%ĽR‰Á``öěŮ$''ť:ăšBĄ@ŁŃOWWW@ĘąwÚÚÚřÎwžC\\ĄĄĄ|őŤ_ĽŽŽN~=??ŸG}”ččhœN'ŤWŻĆh4rď˝÷ĘëH’Äď˙{˛˛˛ĐjľdddđÜsĎáńxäuVŹX!Ow P(P(|üńÇŐçŐW_eʔ)Fnżývyş?‡ĂÁÚľkINNF§Ó‘››Ë'Ÿ|2¤úög0í¸œňýíő÷đ?÷aůˌŠŠô~˙ő_˙…Ůl&$$„+VpčĐ!šĚÁďžźńĆ̚5 ˝^Oll,>ř ííí}Ž{ŠóŐWťcűöíäĺĺBvv6CÚ^¸şęęꨍŤŁĂŇIŁťƒzxĺáîŕtIĄ CçżĹxţ\†ç˙á} yňď@QWźÎ÷ÄOđ˝ď}çž{Žßüć7<ýôÓäççsüřqÂÂÂXž|šˆů_ojj˘¨¨H.ă‘Gᣏ>bóćÍddd°nÝ:žzę)Nœ8ÁŚM›8}ú´ô×çhíÚľ,X°€'Nđß˙ýßüň—żäÉ'ŸäüŁźÝwމŰífϞ=˜L&ž|ňIVŹXÁśm۸馛Ußţ Ś—Sžż˝ýľżŻÎăíçťßý. ”––"I˙üç?šóÎ;ĺísźűňÄO°aĂţú׿rĂ 7°qăF|đAΞ=˞={z­;ĐůşœNńďźóßřĆ7řĺ/ÉÖ­[ĺŕM9Z[[ÉĚĚ$űš\Zc}x‡ůż›×ëĹëöŕńxP*”(TJyJ蹊ĄRŤzý¸‹$ŸÄŃ?˙śśś`WeÔňg€oll¤ŹźI)Žŕ‹JĽ"%)™y×]°+¸ )Ŕ W.|s ľx˙ö6›­×ÄŽ÷Ýwožů&k׎ĺ'?ů ‹E}űv–.]ÚŤœ={öČ_Đ˙ţď˙./_¸p!űöíăÝwßĺ+_ůJŻ}^XW˙ňłgĎʓÎÖ×ד@BBľľľlܸ‘o~ó›TVVʗ…ŰŰۉŠŠ"//ÝťwXßţ ś—[ţĽÚţtţ×ÚODDDDDČËvěŘÁ’%K ôúłmŰ6–-[Ćoű[9ŘqťÝŹ\š’ŠŠ NŸ>ݍ܁ÎW_íşÔą¨ŤŤ#++‹Ż}íkźöÚkňňżýíoÜ}÷ÝCjKŽôs3ž={–×_ÄÄD233™˜™”ŔŤąŞŽâg(>ö9Ąa˜“â 1…bíěš=aNˆ#yZĄáĄŁ>óöĽřŻŠ&sÝu×ńÇ?ţ‘Ĺ‹3oŢź`WmT8zô(ď˝÷“'Of„ ÍátDú@Ä]Aáq¸(űçIĚžŽ„„6lŘŔ=÷ÜsE}IGě§˙ü  `͚5źů曼˙ţűüä'?éŐąšŻ ă•W^ŕć›ož¨œ}űöńꍯʁ×@ü_âfł€––yٛož ĐgŢcǎ Xßţ ś—[ţĽ„‡‡_´l ýH’ÄŞUŤŘ°a“&M`ńâĹWHřű„­ZľJ^ŚŃhzÝĘ=ß@獯v]ʋ/žˆĹbaőęŐ˝–ę8 cƒ>Ĉ×ăĽĄŞŽƒŁ)sbڍp:[ŰŠ,*ăôárÎ!)}áŃ Ř,VœváѨĆpŔ&ôćt:ŃëőÄęÁě֎A>ŸÎ–vęĘŞiŠkDo4ZŤÁŐí <&Ščx3:Ł~T¤ş\Nk7nŻˇŰ°2GÍŃňG—ţaâ]vÝšs'ąąą˝–ĎŸ?čůUq9üżTĎż÷žŸŸô\…š0sśÍfT}ű3Řv\ËĐ}•9Đ~îż˙~věŘAff&ßúÖˇäŤQWâĐĄCÄÇÇyŰžÎ×P•żڅÓX ľ˜0ś…GG`Šč™Ł.*.†ÄÉÉLž1…i×Î$uz&’$qjßQ|˛ƒŠłçp|ńÖI’°uY¨+ŤŚět1nWŕţń Â%I[7Ľ…ěűřŸ|~ŕ8ueŐ´Ő7ÓXUGUq9%ů§)Î?MGs.§kŕ2żŕrşpŘťÇőUýQxů'ĽěÉjllz~5œĎ?§”Ĺb XÝüCŚ›ššVŚßpś#~ţóŸóĐCáőzyă7˜1ckÖŹéř •ż}°ÚęöĹ-árĹ&ĆsݲE,šg9;ßŰĆÁOwŇTSÉm$I˘ěóbŽlßÇąŔŮíźäú‚( Ľ’¸äÂ͑hő:ÓSȚ›ÍœĽóš~ůR2fNĽ8˙ o>÷2Çw¤Łyđýů:šZiŹŽׁרšní˙ňíëv^_ÂĂĂikkŁ˘˘‚ŠS§ĘËýŮŹVˇşşş8xđ`ŻŰa0œí­VËK/˝Äc=Ćúőëyýő×yíľ×PŠTźôŇK—Ufhh(äççłxńâ×x`ţą---ýNö*—˘T)‰0G‘:-ƒ¸ä:šŰ)=YHDt$G˙šÉ'CeQ)1bIž2™ÄôŤęŠ/ŻÁŢeĽčŘçdäfár¸8šçFSj—ÓEsm#sĎgŇ´ô`7U  •Ľ˛g€ˆJĽBĽVŁÖhPŞTÄOJâš[˘ÖjřřĹëőrÍŇDĹÇô[ŚŰ墪°Œâü3H’Ä´”1}‹ňRFMŤýˇónżýöA­ďďČéżUççO+Čţ9ŮŮŮŹ_żž×ň’’233ݍěálG eff˛~ýzŞŞŞ¸˙ţűĺ~p—#''€×_=@ľš)SŚ}gť„ÁŇéuDÄDbNŒÇŮí ŽźšŽ–vŤęčjë łšŇSĹTœ9ô\yP*(”Š/FD*éjmçĚá“8ěÔ v‹˝n§Ž˘:˜ÍĆ ĽRIh¸‰Œ™S™:w-u”*˘Ś´kggpîÄY* Ë8ąë0ĺ§KčliÇăňPYXFɉ3”.ĄĄź‡˝›öŚV ž˘ěóbĘϔPrâ ů;ŃŮÚwŞ ą`Ä^ç稂žNć|ď{ßč5oU_sX­Ył€—_~Ż×+/ßťw/ …‚‡zH^濢qţzç˙}ţ%Ńó˙öďןĂjçΝ<ţřătuuŃÚÚĘ3Ď<#^Őˇ?ƒmÇĺ–~‡Á ;žż?™íGĄP°{÷nůydd$/žřbŻŹż}ďKůĆ7žô břß˙ý_šžeeerGúĄœŻžÚuŠĺţóűüóĎ÷Z^_˙Ż[E#햯02)” Œ!F$Ÿ{— ‡ÍŽ91žÔéLšžAZÎ6;ľĽU( b&˜‰Iˆ#*.†ô™S‰0÷ô+T*¤eOaƂ9L̜LĺŮRşZE–xař˜"ĂI˜œLbú$ڛڨ8{Ž–Ú&vżˇ#Ű÷qćđI>{ë}ś‡š’ |^/m-t´´ÓŃÜłž˝ËJíšJvžű)'vćôÁ|mÝÍß~ű: c7܈ źf͚ŔmˇÝĆéÓ§ąZ­üż˙÷˙řÇ?ţÁ| w°>r䈟MCCĂEĺŹXą‚ŐŤWsęÔ)~řa:::8{ö,?řÁxüńǙ;wŽźnZZťvíâ˝÷Ţcٲe˝Ę?yň¤ü÷ŠS§äżýWáÖŹYĂő×_Ŕ /ź@xx8111üőŻĺÇ?ţń ę۟ÁśărĘ÷z˝lܸQ~ţá‡ö Tü#2Ďoë`ös×]wńĆoĐÖֆŐjĺç?˙y݁}ďKY˝z5yyyH’Ä<€N§#!!ŻýëršC9_}ľëÂĺǏ—˙ţĎ˙üOćΝ˞}ű¸÷Ţ{ŠŠŠĄŞŞŠŸţô§ň:bša0|^–Ž.”*•|Kqę53Ńęuœ>˜OřRŹ—ÎŽ=qĘdžú_˙ľŁ‹SűŽqîÄů„‡zˆˆˆ´Z-ąąąÜsĎ=<ńÄC:_}ľëÂĺ×\süˇN§cűöíŹYł†ż˙ýďL™2…‡zˆţđ‡DDDđđĂóŢ{ď]˛ ‚ŕvş°´wŇPYƒŃB\J-íœÚŒŚŞzbă‰ř˘3óĽ4U׳ă˙>ĹŃÝMDl4QńćqŰWF.ŸĎ‡łŰRĽ"4܄91ŽŒYÓчhŠkÄÚaĹÖiÁŮíDĄT 3čĐę{Ąá&Ô ““šöÖ<ÜNmőÍ´7ľaë˛âő îŽČh4â:×k4yäyä‘KŽ7˜ …bPe-Z´ˆsçÎ Şüţ–›L&ÖŻ_Q?ŻĄÔˇ?ƒiÇĺ”?Đ6}˝>Řm^yĺ9مú:Ţ1™LźôŇKývĐĘů깅žA}ľŠż)‹á|{7 •u;…ZŁ&)#…čx3ç 9ş}Ysf0wéőԖVĄŇ¨ń¸=_|ůôž’eˇX)Î?ÍŻžÍţćÇDǛąwŮP(xÜyXżZŁÁ˜pUy=6;­őMLÎÎ"&!˝Á€ôE* ‡ÝŽĂf0€Ňô„†™°św˘P*éśÚ†ŠÁ#>™‚ WYSM{Ţ˙Œ÷_ů y+ofŢm7˘1pjß1Źí=ˇ=n7ľĺŐXŰťčśŮŠ..ÇaďëŤć\Ľ' {:+ť=tľuP_UƒĎëŁŰj§łĽŽÖźâÖŁp•9ěZšŠ.*'&ÁLT| Ľ§ŠřŕŐˇiŽm`Úľš$gMĆh šd9Çwäľý˝ŽĚ9ә4=c˜Z<# ÂhÔ\×H[c ˇ›úŠt!Z뛰Ylt[íÄ%'đoß˙6ŠÓ3ˆŽ7ăvš˜˙Ľq94TÖpđÓ]$Ľ'ă°ŘPŞU„EE` ĄĽž™ćÚŠŽ">%‘™7\CmigÄiď&$,”kn^ˆZ­Śłľ‰™Š"Ă˝pŐx˝^Zj9üŮÎ:Ámßú łĎGĽRqćđIŹ=ÜuĽUt[íX;-ԖU]”hľ˛°ŒňSE´7ˇâóúčji§ľŽ'Ś­ËJgkJĽcXˆ<(k,ŸNA„PŠŐħ$0{ń< Ą!DÄDĄ3đů$ !FÂc"‰KNÄj@ĽRĄqk˜"đAA&OÉľˇ,DŠRĄÖjP*r.CľVƒV§“çžŐč´Ä&Ĺł|őÝH>j­Qτ”D”J•Ü×kŢm‹đ,Î GkĐÖ3Ňçő˘5čQŠU¤ĎĚBŁŐ˘Őiƒv Ž&x ‚ ‚ S(htZ4C|”J%J­–ČŘč^Ëő}Żçڈ°^ĎŐj5ş Ö1†^şCţh'F5 ‚ ‚ qĹK„1C’¤ž|l’—Ÿ:O¸_˙+É](c™źA3:;;Q•Wc´…ŁVá磉$I(ěc7ë¸ \)x ‚0&˜ÍfBBB°vYPHˆĚíA"I ąńÄĆĆť*ŁžÍfŁłš Ęą–TatđÚ]ŕöô ŽźAő )))FęëëńxDćö`ĘĘĘ"111ŘŐľ z˝žîînZk›ˆęŽ?$‚Dĺr˘ŃŁŐn„ĽźA"""HJJb„ ÁŽĘ¸§VŤ1 X­Ö`WeTŇh4deeávťimmĽľľ5ŘUˇ”J%łfÍ"%%ˇŰ2Eŕ%˜ĐÝÝÍɓ')(( >>ľ˜6'($I˘ŠŠ‰ŹŹ,˛˛˛‚]QIŠTb6›Ńëő˜Íć`Wg\S*•F"""hnnH™â?“ c‚Ăá śś–˘˘"L&ƒ!ŘU—$IâěŮł x]ĽR‰ÍfŁľľ“É$'*†—Ď磼Ľ% eŠŔK„1#..ŽyóćqÇw`2™†uß=óŃőtÂU(= %Ďë—ăÍçóőůúXáóůčęę""""ŘUľ$I˘łł“pčĐ!ŚN:&ß+فŰ팰°;3ٳg¤Lx ‚ Ŕ™3g((( ˛˛’œœf̘Arr˛üz}}=˜˜HNN999—(QďY¸p!7Ýt“¸u$6›˙űż˙#,,lŕ•IœIA„0™L¸\.ňóó9uę˗/ç–[n!::…BN§Ăh4R^^NtttŔŽČš\.ÚÚÚ Ăh4¤Lad0ÄĆƒ’’2ʁ—Ď磺şššš, IIILœ8‘đđpyććfjjj¨ŠŠ!..ޤ¤$†­ŽĂĹbą†FŁ X™âÚĽ B¤¤¤””„ĂáŕđáĂěÚľ‹“'Oât:ńů|ÄÄЕ•…N§#!!ÔÔÔ+ާ×ëĽŁŁƒĐŘŘ€V žBĄÂŘâóůhjjbßž}źýöŰ|řᇜ;w§Ó)ŻÓŮŮÉéÓ§yçw8věXŔF^z˝^l6ۘN #/A„ ĺŤ_ý*---źńĆ455őú $ťÝNQQ/źđWeę+ŘËŘx 0U*999¤¤¤ĐŘŘȋ/žČgŸ}Fmm­źNJJ ššš¨ŐjŚL™Â”)S˛oŤŐJaaá˜NE"n5 ‚ Á`ŕć›oĆh4rňäI6mÚÄŞUŤHOOďsýcǎaľZQ*•Gff&ééé;vŒýű÷SUUĹňĺËinnŚťť›ÄÄDfϞŰ팥Ą˛˛2 ČČČ`„ „††ôֈß@Á‡BĄŔëťÓßţą<Ľ˙Ö¸FŁ!,,ŒĹ‹óů矣×ëůÖˇž%żżt: …­VŁvťÓ§OóĘ+ŻđÝď~—ÜÜÜ´f䁗 Bi4ŇÓÓĺ‘iŰśm#!!N×ëËÉfłQSSC~~>N§ŁŃČŃŁGžŽřéééx˝^ŞŤŤŮż?áááŘl6ŒF#qqqH’„FŁAŁŃĐÝݍËĺ’GN“JĽâřCPë0ĆKĹM7ÝÄ'Ÿ|ÂńăÇÉĘĘâşëŽ#**ę˘u=ľľľx˝^|>ÍÍÍDEECXXľľľ”——ăp8˜6mmmmH’DDD‰‰‰X­VJKKůôÓOYśl‰‰‰„††˘ÓéĆÔ¨Nx ‚ \sćĚÁnˇłuëV>úč#T*yyyň—tSS~ř!DGGE||<˙űßiooç`Ţźy¸\.NŸ>Mjj*sçÎeٲeň~üŻÓŇŇČÎΞjíĘ­śxŕŞŐc$ËAXxx87ß|3­­­ěÚľ‹ˇŢz‹ÄÄċ‡x˝^, ťvíÂĺrávťŮťw/ŮŮŮäĺ呛›ËÁƒyýő×ŠŻŻçťßý.ůůů( rssšăŽ;čîîŚŁŁƒÖÖVΜ9äI“HKK#::Z^Ăá™/ŢČOą7ą ăChh(sçÎĺůçŸçĹ_d˖-čőzěv;Đ3ZęěŮłL›6Yłf1}út,XŔʕ+Ńétr93gÎD’$ÖŽ]Ë´iÓHJJ V“„AŤA؍7ވÍfcăƍźóÎ;ÜqÇDGGËŻWUUąwď^***ˆˆˆŔ`0͖-[°X,̟?ŸĽK—ŇŐŐĹîݝٿ?ŃŃŃäćć˛hŃ"L&FŁ‘‰'0}út˛łłŃëő¨TŞ`5űŞQ×3}ü˘ŻŘůÇbźľ]ĆľZMLL óçĎçȑ#ňŃGałŮ€ž+VŤÇƒ^Ż'66€äädÜn7]]]FÜn7‡ &PQQA~~>3gÎ fӄAKAŘĉY¸p!­­­?~œĐĐPfϞ-÷ékiiáäɓÄÄКšJBBÉÉɤĽĽ‘’’‚JĽÂl6łhŃ"|>o˝ő_úҗ˜ŁŃHNNQQQ|ţůçrŞ˙ÄŃvť††RSSIMM•o{ßzë­x˝^\.jľš‰'’‘‘ĂáŔápŒé´ýUŸĚ‚łńŕ…B~‚0:LŸ>šs璖–&ßFŒŒŒ$//łgϲyóf>üđCvîÜÉťďžËΝ;‰‰‰ÁnˇËó~ík_ăĆoÄívłaĂęëë/ڏÓ餼ĽEţ2 –?üá|řá‡466ňłŸýŒ IҨ| Օl;Ňét:š˙ţű1|đÁ˝RĽř|>ÚŰŰ卺~‡ƒÖÖV<ĺĺĺTVV¤nŠŠIDAT2ţ|věŘÁ§Ÿ~:ÜÍşqĹër‚ˆ oAŽľçC9CÝN„Ŕ+..ŚŹŹ ‡ĂÁž={˜?>“'OzŽn͝;ƒÁ@aa!ńńńDEE‘——Ggg'çΝăÔŠS˜ÍfŇŇҘ>}:gϞĽĄĄđđpŒF#YYY´´´P]]MYY&“‰°°0–,YBkk+ůůůLš4骴Ď?Ľpąądőş:âškŽĄźźœššůĘjLL ŮŮŮ;v ˇŰMgg'&“‰ĆĆF˘ŁŁ™5kVŤ•ŚŚ&t:÷Ýw’$ŃÔÔÄć͛Y˛dIŻĚř€|UĚd2Š~^#"đޜÂ!¸  ̛7“ÉtQ2aÂ"##1›ÍÄĹĹa0HNNféŇĽ$%%Q[[‹Édbúô餼ĽĄP(Đëő$$$FŁ!##ŸĎGyyšźČČHîşë.T*•ÜG&˜ˇ˝^/6lÚţ‡ËXśü™ëŰŰŰéî¸˜ŒŒ """PŠTÄÇÇ3oŢ<Ün7MMM„„„ËüůóŠŽŽŚŽŽŽýű÷#ßR×h4”””ĐÖֆÉd"77—S§NqâÄ :Dff&†ŚNJ[[555„††ěCPŁ.đĎ}˝Ka‚0ü222ČČȸä:z˝ţ˘Žń—Ęú}íľ×özîď?sĄUŤV ąś—ÇlôuĺË˙šĎç–şĂXśÎçóů8wîííí:tˆ°°0"""äuŽ˝öZŇÓÓ9xđ fłłŮĚüůóQ(:tˆĘĘJź^/ˇÜr ŮŮŮx<JJJđx<ÄÇÇŁP(˜>}:‹…ňňręęꈉ‰!>>žťîş‹ÖÖVJKK™5kV°ĂU3ę/H L#AŽŚń€ŔřjŤŸJĽbć̙¤ĽĽát:ŃëőÝ ăú믗'g×jľĚž=›ĚĚLœN§<¸Ä?RqéŇĽH’$'D6mÉÉÉ8N"""0„‡‡s˙ý÷ŁVŤŃëő„„„ŒŠŰŒ0 /ż ƒ‹ąö|¨D°%‚ ‚BĄŔd2]”$őBjľş×U0ĽRyÉ4ççýúź¨ŃhĆ|Žşx=-Ib”ŢeÁ– ‚ Œ.#"đ,hˆc ‚ ŁŮˆ ź.LŤĐ×kăŐxoż †BĄ ­­ŁGbłŮzMť# I’())łYÇáJ˜ŔËO=Äq„ĄŃëő$%%1uęTÂĂĂEćö š>}şœĄ_¸< …‹ĹBUU‡sĚG‹îînÚÚÚš”xÄ^‚ —#44”ääd222DĐd^ŻN‡Ĺb—ŁAŁŃŕp8¨ŹŹÄfł‰÷tř|>ěv{@żźA3ňóóŮž};z˝^|Q‰$Ittt““CNNΘÎëuľ(•JÂĂĂůҗžÄ7ވZ-žŞƒÉëő&OßuĽÄŮaĚp8¸\.ćΝ+熗$I?~I’pš\ÁŽÎ¨¤P(PŤŐÔÖÖR\\ŒVŤÓ5‰ĎçĂfł‘™™‰N§ Č\x ‚0f¨T*"""˜7o‘‘‘ÁŽÎ¸$I]]]h4qľë •••qřđa&Ož,Žŕ‰Ű팴´ľZ°~‹"đA„HŁŃ0iŇ$žő­oĄŃh‚]qÉnˇóńlj×ë H™"đA€ÚÚZJJJ¨¨¨ )) Ç#÷ Q(ň”([ˇn%::šéÓ§“}Q9VŤ•ÚÚZ ™?>ąąą´ľľąmŰ6l6“&M⦛nşh;‹Ĺ™3gŘ˝{7Ó§OgÚ´iLš4iZ.\- ……BRŠWź‚DŠTĘç!PDŕ%‚püšĂđů|DEEa2™đx>žôôô>ˇŤŽŽŚşşš &Đkz˘ŃL^‚ —ÉívS^^ÎK/˝Dxx8ˇÜr +Vʐ_oiiáȑ#œ/˙—_II ǎ#;;­V‹ŐjĹétŠ4ÂeŠŞŞâÜšs8f͚uŃ-@“ÉDFF.—‹ČČH9O›ÍfŁĽĽ…ęęj !66–¨¨(ůÖecc#'NÄ`0ôť˙††:::Đjľ@π•ÎÎ΀&)Dŕ%‚p™ěv;CJŹGNN .D’$öěŮĂńăÇYśléééL›6í’Ű{˝^***hjj"<<œŰnť “É„Ůlڰ°P$.ËšsçhnnfÁ‚$''÷yŤOŁŃ›› @II uuuĐŇŇÂć͛IKKăśŰn#//ÂÂB6nÜȇ~ȧŸ~JNNÎEeú?;äđáØÍf ůůů”——tžÄ‘`\^ ,@ĄP°wďŢ`WE„1ÂívÓŐŐ5ŹYÚ}>ťwł“ŹŹŹ1{KF^‹‹Ĺ2äÔ‰‰‰äć撕•…Ç㥴´”“'O˛`ÁŚNJffć%ˇwťÝTUUŃÖÖFll,+WŽ”űEÚíö1—ĂlÄ$ńçÉ8˙ĄRЈŒŒdŢźyüęWżÂét^Ń>|>Ÿ˜°U„€ILL$%%…ĘĘJZZZp8ò_I’hjj˘ŤŤKäwĆăń`ˇŰąX,x<žAog4‰ŠŠ">>ž‰'˘RŠhooG’$""" ťäö‡ƒC‡ŃŮŮIbb"ÉÉɤ¤¤Éds?,FĚ'Öívóć›oĘĎËËËéîîćȑ#̙3‡'Ÿ|’oźťÝ~Ůű8pŕűö흏m ‡}ŽŹ`ěs´ÇF 233™={6‹…˘˘"***ä|GĐócĎívcľZéîîčžĂÂÂpš\TWWăp8đů|ňţD/ár„„„ VŤihh ťť{ŘúV9NŽ=ŠĹb!::zĚ˙o1—Z­ćîťď–ŸOš4 ­VKzz:ż˙ýďů˙ř<ČOúÓ ÔoÆ ăbŸŁ…86ÂH`6›™1c .äă?făƍ´ľľÉW \.---äççsîÜš€íWĽRqĂ 7 VŤůěłĎ¨ŻŻ—'omms}b„á1{ölŚM›Faa!uuuý挻ZŹV+]]]ĂşĎ`Q}źü#úňŘcń§?ý‰ˇŢz‹ŸýěgĂX+(--ĺwżűݘßçh!Ž0R¨ŐjRSSyôŃG),,¤łł“żýío̘1ƒź^/‡CńXUU…Ű팼Ľ…˛˛2)++ŁĽĽŻ×Kgg'őőő”——3kÖ,ęëë)))AĄPP^^Ž×ëEĄPPUUEbb˘Üoő“O>Ál6ÓŃŃARR.—‹öövşşş ˇ#…A™8q"3gÎ$33“÷Ţ{—ËŲeËä÷ÓéÄbąP__OTTTŔöŤ×ë™?>{öěáŔäĺĺa2™p8crTă¨ů4N™2€úúú^Ë%Iâ÷ż˙=YYYhľZ222xîšç.ş?ŸŸĎŁ>ÚëÍrá˛7ß|“3f`4YślÍÍÍŹXąBžMŕďöńÇËĺ8ÖŽ]Krr2:ŽÜÜ\>ů䓋öÓédőęՍFî˝÷Ţ~Ű;Đ>Ű8q‚Ç{ łŮŒËĺbíÚľ$%%a4šýöŰ)//ďľžĎçăżřéééhľZbccůˇű7yhü`Ű8ŘătĽçC†Sdd$‹/ćË_ţ2sćĚA’$Ün7.— Ż×‹FŁa„ DEEĄŃhČÉÉ!33“đđp<ááádff2sćL´Z-nˇ›ŘŘXîžűnbbbđx<¨T*Ěf3ŮŮŮdffâőz‰ˆˆ`Μ9ÜtÓMčt:yˆ˙’%KHKK#44Tôk†$,,Œěělîşë.Ôj5………=z”ĘĘJjjjä‡ÍfĂjľŇŮىĎçĂbąĐÚÚ*?şťťńů|twwSSSƒĹbÁl6ÓÖÖF[[VŤ•śś6 çűĹáp0{öl&NœHgg' ??ŸĆĆF4 N§ťÝ~ĹýźGŠuĹëRššš.Ę+ňČ#đŃGąyóf222XˇnO=ő'Nœ`ÓŚMňz+WŽ¤ŞŞŞ×śŤV­˘˘˘€Ÿüä'̝;—ÇłnÝ:Ö­[Ç÷ž÷=Ţxă NŸ>-ßsžđŸ˜$IÜy睸ÝnöěكÉdâÉ'ŸdŊlŰś›nş‰ĺ˗SWWŔo~óž~úiššš(**꡽—ÚçPÚݗĺ˗S[[ ŔSO=Ĺ=÷ÜĂSO=Ĺoű[žzę)–,YÂɓ'ĺ‘ß˙ţ÷yţůçyë­ˇXšr%?ţńůÍo~CGG‡đ ÔĆÁ§@œA˙ü‹7ß|sżëDFFĘCńý.ń5iҤ> ŚŚŚ^´Ěh4’””tÉ} ÂPdffňÄOPTTĎ;xď˝÷¸ţúëĺu†ëŻż‡ĂAQQ†śś6ĘËË Ą˘˘ŤŐJtt4œ8q‚ÖÖVćΝ+Żăóů¨¨¨szŐÖÖ2eĘ–-[Ćž}űxçwˆŽŽĆ`0žžŽŰ팣Ł‹Ĺ‚N§ ćá )Ŕ€^ËÝţBkÖŹ‘éő×_——íŢ˝[¤7öZwÁ‚ ˝űîťň˛ööö‹Ęîě씗={V^^WW'’Ůl°^oźń†H•••ň˛śś6 ňňň$I’¤ŽŽ.yűíۡ_ńąJťűŇÜÜ,—]ZZÚ뵕+WJ€ôß˙ýßň2“É$) ůš˙ř„††ĘËjă`ŽS ÎÇhuĽŸ›ńě̙3Ň÷ż˙}Ѝ¨HÚľk—ôüóĎKmmmÁŽÖ¸ĺóů¤>ř@Ú˛e‹”ŸŸ/=űěłŇ‚]­Qăȑ#ŇłĎ>+ŐÖÖJ[śl‘^~ůeÉĺr k|>ŸdľZĽššЏ¸Xjhhššš¤ŚŚ&ŠššYrš\’Ăᐚ››ĽÂÂBЏ¸XŞŠŠ‘ÚŰŰĽĘĘJЍ¨H*++“ěvťÔÔÔ$•••I………R]]ÔŮŮ)uvvJeeeRiiŠT[[+Y,ÉăńH‹EŞŠŠ‘Îœ9#•””HĽĽĽRYY™T]]-ľˇˇűq$I˛ŮlŇŚM›¤íۡKű÷ď—~řĂJWT戽âľyófîźóN:ÄÚľkŮž};?úяřć7ż)ŻóĘ+Ż\ôko͚5ěۡW_}•Ż|ĺ+}Γf2™äżĎĎíŸčłĽĽeŔzúGbڤ¤\ôÚącǀÍâ°téŇËČPÚݗ󧀘G•—ő5<ľż!ŤţŽ¨Ň ncĺçç=é0Ôęžg ‡ĆĽÝC­ĎěŮłe$ŘľkĐs/ţoűżţő݁ŢÇg 6^ÉqĘůĆ7Ż×‹Ýn§ĽĽEŒě I’ččččőCJ„ą×`˛@ű;w;Î^ó?ůçEłX,W§rçéččzú ů÷{ľ]Ívű݆]8ŠdϞ=|űŰßFŻ×óŤ_ýjČWî‚qœ„ńÇfłQ^^ÎÖ­[/9'œpőH’Äɓ'™6mZŸýŇaźą×`„‡‡ÓÖÖFEES§N•—ű;ß Çĺʐşşş8xđ ŤV­şęűƒŤŰn˙hÁóËřř㏹óÎ;Yšr%ůË_.kú†`'aüÉĘĘâ+_ůʘĚv=š$$$GXXؘO†y5Y­VĘËËŮž}ťx?‰Ó餠 €œœ’““R樟ć͛ǖ-[ŘšsgݤľľLށdggł˙~ÖŻ_ß+ ())áöŰo§¸¸8ŕű dť=OŻ[………,Z´H^öÄOŕńxřőŻ}Ůsfă8 ăƒÓ餹ą‘3gΏŃhÖy…‹ét:şťť)--ĽĄĄáŠfĎĚf3 Řív‘‹-H<ŃŃŃDEElDĺˆ źÎď“ávťü’_łf [śláĺ—_ćÁ”ěÝť…BÁC=$Ż{ţ­3ŸĎ‡RŠě•óJ’¤>Sř×UŠTx˝^ź^oŻ_÷Ţ{/ű÷ďgçΝ<ţřă<óĚ3¸Ýnžyćy˜řůÓwřËŒţö9”väôéÓ̜9S~ţć›o˘T*ůÎwž#/+++ţŐi˛Żă3Psœq>„ńÇápPSSÎ;.ęŘ+—Ýn§ŹŹlŘ3 f>Ÿ—ËEww7ÓŚM#99yĚ%mrss ĽĽĽÇsĹSr˜ŔËçóń׿ţU~žiÓ&î˝÷Ţ~;bCO"ÍŐŤWóÇ?ţ‘‡~˜_üâÔ××óƒü€ÇœšsçĘëúGÎAOGď9sćpčĐ!yYAA€œ8qâ˘uÓŇŇ(..f׎]tttđÚkŻąuëVÖŹYĂŰożÍţýűyá…xá…€ž\'ťwďŕȑ#ry ƒîăÔß>‡Ňî|űŰßćOúŠŠŠüĺ/áĺ—_ćG?úsć̑י1cůůůźôŇKŹ^˝šçž{NśJKKy÷ÝwY˛dÉ%Ű8˜ăˆó!Œ?Ó§Oç…^Ŕh4Š |„ń'ŃôLÖÖÖĆącÇĐjľ„††âőzĹŔ˘Ŕ?ń÷‰'Xž|ů•Ľ|F/źŸ?Řâűë0ĐöŇÜűŰßRQQAZZ>ú(?üđ€őꯎ}-ßľkŤWŻŚžžžUŤVą~ýzů׾Ĺbá‡?ü!›6mÂjľ2wî\ž}öYnźńƋĘSŤŐƒmuŠ}śÝýń×éă?ćńǧ˛˛’ôôt{ě1xŕ^ë^ă8G#8'‚ ăÈI'! ńĽ.‚ Á!n5 ‚ ‚ x ‚ ‚ x ‚ ‚ x ‚ ‚ x ‚ ‚ “Ť>Şąż9AAĆqĹKAa˜ˆŔKAa˜ˆŔKF‘ŕVaě x/ńĽ!‚ ‚Đ7qĹKAa˜ˆŔKAa˜ˆŔKAa˜ˆŔKAa˜ˆŔKAa˜ˆŔKAa˜ˆŔKAa˜ˆŔKAa˜ˆŔKAa˜üg=M ďÖtIENDŽB`‚gwenhywfar-4.15.2beta/doc/plugindescr.xml0000644000175000017500000000121712364015347015355 00000000000000 1.3.0 Martin Preuss(martin@libchipcard.de) Exporter for CSV This plugin exports data to a CSV file according to a given configuration.

This plugin exports data to a CSV file according to a given configuration.

Diese Erweiterung importiert und exportiert CSV-Dateien.

gwenhywfar-4.15.2beta/doc/dialog/0000755000175000017500000000000012643267242013635 500000000000000gwenhywfar-4.15.2beta/doc/dialog/testdialog.h0000644000175000017500000000177412364015347016073 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ /** @file dialog/testdialog.h * This is the public header file for the dialog. It is to be included * by the sources using this dialog. */ #ifndef TESTDIALOG_H #define TESTDIALOG_H #include #include #include /** * This is the constructor for the test dialog. * It reads the dialog description from the XML file * "testdialog.dlg". It also sets the signal handler. * As a result of this call the dialog is completely * setup for use with @ref GWEN_Gui_ExecDialog(). */ GWEN_DIALOG *TestDialog_new(); #endif gwenhywfar-4.15.2beta/doc/dialog/main.c0000644000175000017500000000153312364015347014644 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include "testdialog.h" #include "gtk2_gui.h" int main(int argc, char **argv) { GWEN_GUI *gui; GWEN_DIALOG *dlg; int rv; rv=GWEN_Init(); if (rv) { DBG_ERROR_ERR(0, rv); return 2; } gtk_set_locale(); gtk_init(&argc, &argv); gui=Gtk2_Gui_new(); GWEN_Gui_SetGui(gui); dlg=TestDialog_new(); assert(dlg); rv=GWEN_Gui_ExecDialog(dlg, 0); fprintf(stderr, "Result: %d\n", rv); return 0; } gwenhywfar-4.15.2beta/doc/dialog/testdialog_p.h0000644000175000017500000000140112364015347016375 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ /** @file dialog/testdialog_p.h * This is the private header file for the dialog only to be used by * testdialog.c. */ #ifndef TESTDIALOG_P_H #define TESTDIALOG_P_H #include "testdialog.h" static int GWENHYWFAR_CB TestDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); #endif gwenhywfar-4.15.2beta/doc/dialog/Makefile.in0000644000175000017500000005532412634022412015617 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc/dialog DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ SUBDIRS = images EXTRA_DIST = \ main.c \ testdialog.c \ testdialog.h \ testdialog_p.h all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/dialog/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/dialog/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/doc/dialog/images/0000755000175000017500000000000012643267242015102 500000000000000gwenhywfar-4.15.2beta/doc/dialog/images/gtk2-1.jpg0000644000175000017500000005047312364015347016537 00000000000000˙Ř˙ŕJFIFQP˙ŰC  !"$"$˙ŰC˙Ŕë?"˙Ä ˙Äľ}!1AQa"q2‘Ą#BąÁRŃđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚáâăäĺćçčéęńňóôőö÷řůú˙Ä ˙Äľw!1AQaq"2B‘ĄąÁ #3RđbrŃ $4á%ń&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚâăäĺćçčéęňóôőö÷řůú˙Ú ?úNŇÂ+čŒ×^3ţ­<Ě)Ś°Ç‘_,ř“řľačQqüŤŇe]Nî{i˛"ľľ˝ŇM$€ mĘ=Ę=ëÖÎňšuUĎ­´oő"„’=ŁűL˙Ÿ+OűůGö.™˙>VŸ÷ň¸OÚWÔôO†w†“rÖWKcšĂ{¨•‡ĐŠ ýkřcă˙=Ÿ‹Ż|Uiľ™â˝>}šę=’#U]Ń(čçć=ëäÝY§kżźŮB6˝]ţĹÓ?çĘÓţţQý‹Śϕ§ýüŻÔ˜ţĹÓ?çĘÓţţQý‹Śϕ§ýüݏřšă 3Bđ•‡ö™­kşĆ’ÚƒKlf’9]ąŚDŹ[ćŔ žâľő‹:厳 5׆ Ň4MJŢÉćťźĘ#–vĂBZ%"6^.bGAÍ?m/ćbökąë?ŘşgüůZßĘ?ątĎůň´˙ż•ćż|KăÜř˛?ĎŁ\G§kזPˆ‰bňä&€cîł|Ç˝z†éœ_÷ŃŞU&ŐîÄăЇűL˙Ÿ+OűůGö.™˙>VŸ÷ňŚĎý3‹ţú4gţ™Ĺ˙}|óîţńZ=ˆątĎůň´˙ż”béŸóĺi˙*l˙Ó8żďŁFéœ_÷ŃŁž}ßޏbě]3ţ|­?ďĺŘşgüůZßʛ?ôÎ/űčџúgýôhçŸw÷…ŁŘ‡űL˙Ÿ+OűůGö.™˙>VŸ÷ňŚĎý3‹ţú4gţ™Ĺ˙}9çÝýáhö!ţĹÓ?çĘÓţţQý‹Śϕ§ýüŠł˙Lâ˙ž˙ŚqßFŽy÷xZ=ˆątĎůň´˙ż”béŸóĺi˙*l˙Ó8żďŁFéœ_÷ŃŁž}ßޏbě]3ţ|­?ďĺŘşgüůZßʛ?ôÎ/űčџúgýôhçŸw÷…ŁŘ‡űL˙Ÿ+OűůGö.™˙>VŸ÷ňŚĎý3‹ţú4gţ™Ĺ˙}9çÝýáhö!ţĹÓ?çĘÓţţQý‹Śϕ§ýüŠł˙Lâ˙ž˙ŚqßFŽy÷xZ=ˆątĎůň´˙ż•qŸöć°ÓôHďîP đ‘çŚć=°É­|˙Ó8żďŁYŢ•—CYAi¤g˜÷.IÎkĺx§ˆędÔŠ´ßźŢ˝­ë§SŻ †fîś*NśV˘kZv !ÚłůťâјcoԌ{֕ΙŁ[[Isqmc1Šwv—@ęjo˛Ühwq]ŃŽwjóÔnoži&` mŠi’KĹ’*gţřJóň.0ŠĄ^nďŮŤëůiĄ–gJ8:.ŞW˛gUo1żí:WƒÖkCĘKqsä™ŞŽ ÇŚqVô)t-Râk6Ó#łż€f[[†Úŕx`á—ÜŽ+ukđ ,űTQŠćźKŤ\ŰřŻĂ—čC]č­ĎmńČáXu$ÔeÜ_W‰…&Űćvűű[őšň<úëß.îŰ#˝ń=΁ ­źRi‰w{tĹm­-Žé%#ŠęQ݉VUƧ%„?jŐ| ąŮ™ÖđO$cÔŚ@ﴓőŽ/Ç:•őŻĹ RT`ź0Ŕqą” q˙-T˙á%ÖyÝxX ¨ŻœU§UÁ7ĄűVYÁĐĹa!YŮó+őëÚß­ĎeŇěü=ŠéđęX\ZÎťŁ‘ éôę+*_§‚őU™ŚšM ‰I­Ăo16 0HÇÍÔtÁ=ń\?Ŕ By.źIŚSkÄsĆ ŔF“~ŕ=žPqS|[Фů#ćáz­}\ţˇ ÔŮŁáł*ÁâgI}—kžŸĄČ˛?ş‹Ü×ń?Ŕíâ9˘ŐtĎąGŞA”Vä†ć<çcăA$†2zçŽŰD‘ăđÜ2E.× Ťš8 ůüĺXzgˆüUŠčöú‹Ewn'ˇ­łeYehňŃÄéČů(Σ̓iq™pxéáqT÷LΚá~‡‹ÉŕË1ľ°đ&‘§JNÓ{-úË´Ť’JőŸ† ƒÁ~6"Dť˝¸Íyrxód>ƒ°mOŞxŔyžMĽ‹ă—żV•wcÍٜBqśůë2Lnň×Í'Ő<`<ß&ŇĹńżËߍJťąćěÎ!8ÎŰ|őǙ&7ykćŢ/;Äbíí]íćWŐíł,jzvŸŞZ=OMą˝ś,Ža¸ŒH…”†Sľ˛2z* E°Ôîő;Kľżźćęć%Ÿý÷-ř“I>Šăćů6–/ţ^ýZUݏ7fq ĆvŰçŽ<É1ťË_4:׈âÔm š‚5ˇ¸¸h„°ŢO+*;`!Úż,pýć şG]ÄŞyź_[ţč{1“xsĂó^ľôžŃäşyÖĺ§kd2Uv,…ąÁIPÝ@8éUôŻxKI–itż č/<g•­ŹŁŒÉ÷Đ2žÝ+œřSâMFó q¨íżšmWS =ĂČÎ@žœ(Îî@PJę˙śßţ|m?ň'˙GÖ˙şÁ÷)\xÁWT:Lţ đäš|4Ú›ź¨Ýžó*íŔ'šjI|á u =F_ hyb‰¤ćĘ2đ*}ĹCŒ¨^ŔtíVśßţ|m?ň'˙GöŰ˙ύ§ţD˙âŠ}m({ܒÇCŃl5;˝NÇDŇíoď9şš†Ig˙}ŔË~$ևýłţúŹżíˇ˙ŸOü‰˙ĹV‰ŻćvöÎ?űęűgýőYŰo˙>6Ÿů˙ŠŁűm˙çĆÓ˙"ńT}sČ>ŻćjŰ8˙ďŞ?íœ÷Őe˙mżüřÚäOţ*íˇ˙ŸOü‰˙ĹQőĎ úż™Š˙lă˙ž¨˙śq˙ßU—ýś˙óăi˙‘?řŞŔđoŻćvöÎ?űęűgýőYŰo˙>6Ÿů˙ŠŁűm˙çĆÓ˙"ńT}sČ>ŻćjŰ8˙ďŞ?íœ÷Őe˙mżüřÚäOţ*íˇ˙ŸOü‰˙ĹQőĎ úż™Š˙lă˙ž¨˙śq˙ßUĆx“ơšwˆü1ŚAŚŘő[頝›ĚʢZÍ(Űóő܋Ϧ}r7˙śßţ|m?ň'˙G×<ƒęţf§ýłţúŁţŮÇ˙}V_öŰ˙ύ§ţD˙â¨ţŰůń´˙ȟüU\ňŤůšŸöÎ?űęűgýőYŰo˙>6Ÿů˙ŠŁűm˙çĆÓ˙"ńT}sČ>ŻćjŰ8˙ďŞ?íœ÷Őqžń­çˆ<9ý§uŚŘG!ž˝€*y˜ Ôą'ńňv˘ä÷9éҡ˙śßţ|m?ň'˙G×<ƒęţf§ýłţúŹ[˜ő&ęk˝Ţ Č&%ĺłiçŠBxçŠÔßŰo˙>6Ÿů˙ŠŁűm˙çĆÓ˙"ńUŏĽ‡ÇŇöUátiNŚďszôž:ńTGK‹K‹ĂÖRq=Ěł#žŢűIÉúŕ}zWE‡tŘź/‡bˇTłŠŠyGSčđšŚ7 KŮSЧőçůœÇĂżĹá ­žTťžš—Ďźš‹ćVů× ˙~źWWÔí´ăŁk—:śŸŹƒ¤éű4ˇÖ¤ŠńI˙–śá%”NŇn]Ëlǚŕ潍I9đź_2ˇÎ˝űőÎiąřžÇIś´m?HźžÖßĘYŸRœyŹŤ( KÇ#Ű`'sť2Lł˜Á—ÍĹ˙^Ś´?†7Ô|oâÍ'ÄĆâ]4,uA.,ą müâ<"żšrݸw]Łčë>&Őô+Ď˜ľÁ<ńkVŃĽľĂGţƒk$Vť§ˆÚ€ł€I,sógĐŚ›ÄJŇ´FíóˆËęR)|yŰ7bŒâ őǙ&7ykćŹóřŒ D:N’řßĺďÔ¤]ßëśggmžză̓źľóyŒżjSjŢť¸×/íÓĆ×v׈?p?‰¤…śŁJ°ÁzwáöŸŞřB„Z¨ąń žbÍöŚ…3z#,ĺ$+”*!€Ţwyrv˛Íâ$YßHŇ.˙(6Ľ"nǛł8€íÎŰ|ă8ó$Ćď-|Řî-ľkÝ[NšęĂOŽ +ƙdKŻ1đcšˆŻĘvź'äe?<‹¸Şb`4đ2jr|*ÔcŃgŠ IŻľuľ’LmY őĆŇrëęĐôŞqxş÷J4łŐŰY–ĺRHőˇB1<ĐÁˆňŰ H# NÁę>xkR“Ŕ’Řę~ťxŚÔu"đ\YąY#{ŮŘeXrʤ؂+a<§&žúzx:ÝmA+Â4ᱜ #oŢżZŕľřŠ@MźJż˙‰8–ŒČ‰çŢK ¨R2sÁÁŠeâÍfçĹéŃiuĽ­ęŘÜȑIŢZłKťî…‡Ęy+ógľvÁ°7ł>ŒŰIBđňě$ Ůlq†űŮ\`çžzĐ#“řywŠ˝Öš§ę’Ýy–wH"†ęD–XŁh•†d@ۈ‘ÜôĆWĂäÔäřG{‹ËŚÍϊ%Ó˘Ň<ëK[Őąš‘"“!źľf—wÝ ”ňWćĎjĽńĹwZoˆ4Ë k››(!˝ł7NśŹâäK2Ј6Ň0qls’€ź+ź ś„Z€đ¤bňUŽq§ča@mšAWnt+˕EšŃ§™QÖEZ– ęrŹ28 €AěE8_Čůŕű ]éĹCăKÍ[J×Wź›R˙„zaËiÓD ťďo1ĺGu §Ý$€<Ÿř^ŸĆž¸ƒDÔĽ†ŰQšyäKWe‰M”ę 0 ł“܁ޜoźm¨G¨ŢřR;›Čöěž]?t‹´ĺ~bšŕň=JyŐçŽu‹­ZżG™4ř­/ĚsF$áh7…-!Ib‡îň§ć䋗ž)×tš|E,ÂŢö(u¨4ë–&Ý›šśňŔyŒqŒ–8Čc¸oŮľŐÍÓxFžéY.$:p-*°Ă;~`G={ԗ^†ę[ŠŽ|-Ň] ŽĺäÓĂ4Č1…rWćƒč(œ‚ďÄ:ςuAżö^´b¸‚ŇGVE2m")@`JŒ•8 ŕƒ×Š_^\¸Ôô˝@ܛű …YŒˇKp¸x՗c„N0zö ×I„R-ô¨|5˛Â@ÂKeąÄNďeqƒžůëNŇ|,ÚEŠľŇź:Ö0.cˇł1ŠcՈ“ÇZyçĂäÔäřG{‹“˙ßł^ańŚx^ÂKdžšÖdŠâ Axœ¨pŹ:ŠÚčŘ=˜„WĽ•ź|™†#ŕ='I9đź_2ˇÎ˝űőĚř›ÄśzŐž‹ĽÁdnŇ[닋ٌpŰÁ*’p bKtŕŹIŕ˝l‘ĎákfXŚő Et+Ŕ͂=Ee랇PžłÔ,ŻŽtkŰ8¤‚)Źc‰G”ä3ĆQѐŠeVéFA9ćĹ˙^ĽPţ(ZxÖÄÇĽE9†ňçP†iŐôŠ~Ól"ŠEI$óp *ď\ç§#’9,†ö÷LӍ°´?dňËů!6l̈ăÇ8Ďh ˘Ť[YĆśĂ|"Ő%‰6}˘öÖ‘†Iç䓅rxŠ>ɧ˙Đ+K˙Ŕřš@KEEöM?ţZ_ţC˙ÄŃöM?ţZ_ţC˙ÄĐ´T_dÓ˙čĽ˙ŕ?üMdÓ˙čĽ˙ŕ?üMKEEöM?ţZ_ţC˙ÄŃöM?ţZ_ţC˙ÄĐ´T_dÓ˙čĽ˙ŕ?üMdÓ˙čĽ˙ŕ?üMKEEöM?ţZ_ţC˙ÄŃöM?ţZ_ţC˙ÄĐ´T_dÓ˙čĽ˙ŕ?üMdÓ˙čĽ˙ŕ?üMKEEöM?ţZ_ţC˙ÄŃöM?ţZ_ţC˙ÄĐ´T_dÓ˙čĽ˙ŕ?üMdÓ˙čĽ˙ŕ?üMKEEöM?ţZ_ţC˙ÄŃöM?ţZ_ţC˙ÄĐ´T_dÓ˙čĽ˙ŕ?üMdÓ˙čĽ˙ŕ?üMKEEöM?ţZ_ţC˙ÄŃöM?ţZ_ţC˙ÄĐ´T_dÓ˙čĽ˙ŕ?üMdÓ˙čĽ˙ŕ?üMKEEöM?ţZ_ţC˙ÄŃöM?ţZ_ţC˙ÄĐ´T_dÓ˙čĽ˙ŕ?üMdÓ˙čĽ˙ŕ?üMKEEöM?ţZ_ţC˙ÄŃöM?ţZ_ţC˙ÄĐľŕšěŽóř케ŸřJ@ůš8V ~ W´ë–ś+˘ß2išj0ś†K(•Úy.A÷ŻńY˙‰ˇÄAšGüV Á˙ÇĽľzYWűÇɘb>ÜlN|7ŚüĘßń2łč?é˝8ş–Pä<1“úÎ›bsá˝7ćV˙‰•ŸA˙MëřُşÇö†…麃šĚpMm r— öF%o;Şő;NÁŽ|_ńĺęUáÄô*+ÉüGqŹhŢ%łŇnu_}^0g‰I¤ŒŘÜ;˘˛)bždhÇhĘäăhé:ߌ­t›¨.á×ĺťšł´:k.Ÿ#1ę`í!TÄry>K8m˝x⚏jzí2)b—w•">ÖÚŰXCď\‡Â›&Ó´˝JĘeŐá5[ÖuźIBm{Š6qľƒ#+„ňyćŤ|)V×ţ)˛Óô{Í.Ńőo´ZÇ&“5œMś2›ŃTüčüxĎCš@MŹiڏˆţ/iž‡Ĺ:ޅbúÝü‡LhCÉ$wńŽ|ŘäÄĎĐӞ+˘˙…Es˙EWâýţ°˙äZĄ˘ÉĹé_ö(ęúYe^ťV’°™ć?đ¨ŽčŞü@˙żÖü‹Gü*+Ÿú*ż?ďő‡˙"×§QNČW<ÇţĎý_ˆ÷úĂ˙‘h˙…Es˙EWâýţ°˙äZôę(˛ žc˙ ŠçţŠŻÄűýa˙Č´¢š˙˘Ťńţ˙Xň-zuYĎ1˙…Es˙EWâýţ°˙äZ?áQ\˙ŃUř˙Ź?ů˝:Š,‚ç˜˙¢š˙˘Ťńţ˙Xň-đ¨ŽčŞü@˙żÖü‹^EAsĚáQ\˙ŃUř˙Ź?ůřTW?ôU~ ßëţEŻN˘‹ šć?đ¨ŽčŞü@˙żÖü‹Gü*+Ÿú*ż?ďő‡˙"×§QE\óřTW?ôU~ ßëţEŁţĎý_ˆ÷úĂ˙‘kÓ¨˘Č.yü*+Ÿú*ż?ďő‡˙"Ń˙ ŠçţŠŻÄűýa˙ČľéÔQd<ÇţĎý_ˆ÷úĂ˙‘h˙…Es˙EWâýţ°˙äZôę(˛ žc˙ ŠçţŠŻÄűýa˙Č´¢š˙˘Ťńţ˙Xň-zuYĎ1˙…Es˙EWâýţ°˙äZ?áQ\˙ŃUř˙Ź?ů˝:Š,‚ç˜˙¢š˙˘Ťńţ˙Xň-đ¨ŽčŞü@˙żÖü‹^EAsĚáQ\˙ŃUř˙Ź?ůřTW?ôU~ ßëţEŻN˘‹ šć?đ¨ŽčŞü@˙żÖü‹Gü*+Ÿú*ż?ďő‡˙"×§QE\ňűĎ ˇ†ź3ŞZÉŻë:äŽ&?hÔ䍤Uň“HŠ%ÝĎ<’ÇüVâmńnQ˙ƒpG?ńém^ýńţAZ‡ýs›˙DĽxŠĎüMž" Ę?â°nçţ=-Ťż+˙yů3,GŔ{‰Ď†ôߙ[ţ&V}ý7Š*;Ÿ éż2ˇüLŹúúoRW.3řňő*‡đŃöÖóÍÓA’[š’eĆĹJ–SŘíf‰ęZ(ŽcP˘Š('MÓ.ĄřąiâŁ%˛Ů[hW:{+ťi%ž Pđ œăď.3Î;żí¨˝`˙žß˙ˆŻ2ń‰ő;YřoDđ˙ˆoîležŮkuoČŁtF$Ěč>ôŠŔ$ňxâ›ýąńţˆöż˙ƒ}3˙’*“b=?űj/X?ďˇ˙â(ţڋÖűí˙řŠó폈ŸôGľ˙üéŸü‘GöÇÄOú#Ú˙ţ ôĎţH˘ěOţڋÖűí˙řŠ?ś˘őƒţűţ"źĂűcâ'ýí˙úg˙$Qýąńţˆöż˙ƒ}3˙’(ťÓ˙ś˘őƒţűţ"í¨˝`˙žß˙ˆŻ0ţŘř‰˙D{_˙Áž™˙Él|D˙˘=Ż˙ŕßL˙äŠ.Ŕô˙í¨˝`˙žß˙ˆŁűj/X?ďˇ˙â+Ě?ś>"Ń×˙đoŚňEŰ?čk˙ř7Ó?ů"‹°=?űj/X?ďˇ˙â(ţڋÖűí˙řŠó폈ŸôGľ˙üéŸü‘GöÇÄOú#Ú˙ţ ôĎţH˘ěOţڋÖűí˙řŠ?ś˘őƒţűţ"źĂűcâ'ýí˙úg˙$Qýąńţˆöż˙ƒ}3˙’(ťÓ˙ś˘őƒţűţ"í¨˝`˙žß˙ˆŻ0ţŘř‰˙D{_˙Áž™˙Él|D˙˘=Ż˙ŕßL˙äŠ.Ŕô˙í¨˝`˙žß˙ˆŁűj/X?ďˇ˙â+Ě?ś>"Ń×˙đoŚňEŰ?čk˙ř7Ó?ů"‹°=?űj/X?ďˇ˙â(ţڋÖűí˙řŠó폈ŸôGľ˙üéŸü‘GöÇÄOú#Ú˙ţ ôĎţH˘ěOţڋÖűí˙řŠ?ś˘őƒţűţ"źĂűcâ'ýí˙úg˙$Qýąńţˆöż˙ƒ}3˙’(ťÓ˙ś˘őƒţűţ"í¨˝`˙žß˙ˆŻ0ţŘř‰˙D{_˙Áž™˙Él|D˙˘=Ż˙ŕßL˙äŠ.Ŕô˙í¨˝`˙žß˙ˆŁűj/X?ďˇ˙â+Ě?ś>"Ń×˙đoŚňEŰ?čk˙ř7Ó?ů"‹°=?űj/X?ďˇ˙â(ţڋÖűí˙řŠó폈ŸôGľ˙üéŸü‘GöÇÄOú#Ú˙ţ ôĎţH˘ěOţڋÖűí˙řŠ?ś˘őƒţűţ"źĂűcâ'ýí˙úg˙$Qýąńţˆöż˙ƒ}3˙’(ťÓ˙ś˘őƒţűţ"í¨˝`˙žß˙ˆŻ0ţŘř‰˙D{_˙Áž™˙Él|D˙˘=Ż˙ŕßL˙äŠ.Ŕë|ksΉ|ččĚa™ˆ\ŕ-@äýÓ^âł˙oˆƒrřŹ‚9˙Kjőq­Ýř_SŸ\đÝχĺT–$śšş†iĂoĚ,ęć|ŮČ9‚|ŸĹgţ&ßĺńX7s˙–Őče_ď&cˆřqą9đޛó+ÄĘĎ ˙ŚőĘxŰœxkXBđyö1h–Šƒţ›ÖvˇáíZv}NĎĎf˛žŔŸ1×÷˜ĚŠň‘÷ŒIĎQˇ‚2sϋţ<˝JĄü8œüŢ9ź‹RGo Î5io–Ń-ÍŇl­ädgؘ Ž7 śŹntÍBôi×Q›`yâf]ÁäžXY8ă*đ°'ĄíWŞ[“œméZ.ŸĽ‹ĹąIâKɞySí22‡vfrŠXˆňĚÄěÇ'5WžŃü/mömo˘ƒnՊmFâádŸ•ev I$’0OzƒD˙“‹ŇżěQÔ?ô˛Ę˝vźI–(żh)Ľ‘#Sá-@e˜ŸľŮWŹýśĎţ~ŕ˙ż‚Ş; “ŃP}śĎţ~ŕ˙ż‚śŮ˙ĎÜ÷đUžŠƒíśó÷ýü}śĎţ~ŕ˙ż‚€'˘ űmŸüýÁ˙mł˙Ÿ¸?ďŕ  č¨>Űg˙?pßÁGŰl˙çîűř(z*śŮ˙ĎÜ÷đQöŰ?ůűƒţţ žŠƒíśó÷ýü}śĎţ~ŕ˙ż‚€'˘ űmŸüýÁ˙mł˙Ÿ¸?ďŕ  č¨>Űg˙?pßÁGŰl˙çîűř(z*śŮ˙ĎÜ÷đQöŰ?ůűƒţţ žŠƒíśó÷ýü}śĎţ~ŕ˙ż‚€'˘ űmŸüýÁ˙mł˙Ÿ¸?ďŕ  č¨>Űg˙?pßÁGŰl˙çîűř(z*śŮ˙ĎÜ÷đQöŰ?ůűƒţţ žŠƒíśó÷ýü}śĎţ~ŕ˙ż‚€'˘ űmŸüýÁ˙mł˙Ÿ¸?ďŕ Sâü‚ľúç7ţ‰JđŸř›|D”Ĺ`ÜĎüz[WžřőŇMýăuu1͂§ ţé+ŔźVâmńnQ˙ƒpG?ńém]Ů_űĎɘâ>Ü´ô’_ Úžń]A0ŢJŠŘĺđHŒíÇCM٨Ô/˙f˙ă56’sáxžeoz÷ë™ń7ˆ/lőŤ}K‚ČÜ=¤ˇ×ł᷂6U$ŕĖéŔX“Ŕ—üyz—Cřhč6jő ˙Ŕ™żřÍ5ú…˙ŕLßüfšŤOؘô¨§0Ţ\ęÍ:ž•/Úm„QHŠ$žn]ëœôärG%‡4;ąRúÜĎöfˇŰ3Çq Ž)tąÎ äd Œóš.ÍCţĄř7˙ŁfĄ˙Pżü ›˙Œ×5¨xďGľž{ˇÔŽîSí%ăśľ.UmĚbVú5=ÎpĂĽiĐžŐŽĎݗţĎ˙ĆhűVš˙?v_ř?˙ŚŃEŔwÚľĎůű˛˙ŔŮ˙řÍj×?çîË˙g˙ă4Ú(¸űVš˙?v_ř?˙ŁíZçüýŮŕl˙üf›Eßj×?çîË˙g˙ă4}Ť\˙Ÿť/ü Ÿ˙ŒÓh˘ŕ;íZçüýŮŕl˙üfľkŸó÷e˙ł˙ńšm\}Ť\˙Ÿť/ü Ÿ˙ŒŃö­sţ~ěżđ6ţ3M˘‹€ďľkŸó÷e˙ł˙ńš>ŐŽĎݗţĎ˙Ći´Qpö­sţ~ěżđ6ţ3GÚľĎůű˛˙ŔŮ˙řÍ6Š.žŐŽĎݗţĎ˙ĆhűVš˙?v_ř?˙ŚŃEŔwÚľĎůű˛˙ŔŮ˙řÍj×?çîË˙g˙ă4Ú(¸űVš˙?v_ř?˙ŁíZçüýŮŕl˙üf›Eßj×?çîË˙g˙ă4}Ť\˙Ÿť/ü Ÿ˙ŒÓh˘ŕ;íZçüýŮŕl˙üfľkŸó÷e˙ł˙ńšm\}Ť\˙Ÿť/ü Ÿ˙ŒŃö­sţ~ěżđ6ţ3M˘‹€ďľkŸó÷e˙ł˙ńš>ŐŽĎݗţĎ˙Ći´Qp+ę‘ęڅŒÖŇÜiÇĚ‰Ł ×S6ÝĂǓ^!âyMK⣎Öńs0Čäƒgk^ď^­ŢřđnQ˙WB9˙+ZôrŻ÷“0Ä|ť[$sřZ–)Ł}BŃ] ä03`‚QYzď‡aÔ/Źő +ëöÎ) ŠkâQĺ9 ń”td*YUşdFNuěN|7ŚüĘßń2łč?é˝I\ŘĎăËÔŞĂG5¤x3KӚ3ÝÝ4v÷°Hgdý÷ÚçYćg  dşńˇF:c>?‡v"ĐE.ˇŹO41[Ceq#CćZ%ź˘XÂb0­ó*ä¸bÁ@5ÚŃ\ƧŸˇĂť˜őč.ŹüKŞÁ[_­ÝČhMĒ\ÉnÄbŘ7@ ¸ă5ˇâYjŢÓ´ľ CL°°hŒqÚyL$X×’ QĂ Ŕ8#’Ł5ŇŃL ÖÖq­¤0ވu9b@Ÿhźľ…äaל ’NÉâ¤ű&Ÿ˙@­/˙!˙âjúHbą‘",Ҹ%ŁV8qÔ{šgÚĺţä÷á?€)ý“O˙ V—˙€˙ń4}“O˙ V—˙€˙ń5sír˙rűđŸáGÚĺţä÷á?€)ý“O˙ V—˙€˙ń4}“O˙ V—˙€˙ń5sír˙rűđŸáGÚĺţä÷á?€)ý“O˙ V—˙€˙ń4}“O˙ V—˙€˙ń5sír˙rűđŸáGÚĺţä÷á?€)ý“O˙ V—˙€˙ń4}“O˙ V—˙€˙ń5sír˙rűđŸáGÚĺţä÷á?€)ý“O˙ V—˙€˙ń4}“O˙ V—˙€˙ń5sír˙rűđŸáGÚĺţä÷á?€)ý“O˙ V—˙€˙ń4}“O˙ V—˙€˙ń5sír˙rűđŸáGÚĺţä÷á?€)ý“O˙ V—˙€˙ń4}“O˙ V—˙€˙ń5sír˙rűđŸáGÚĺţä÷á?€)ý“O˙ V—˙€˙ń4}“O˙ V—˙€˙ń5sír˙rűđŸáGÚĺţä÷á?€)ý“O˙ V—˙€˙ń4}“O˙ V—˙€˙ń5sír˙rűđŸáGÚĺţä÷á?€)ý“O˙ V—˙€˙ń4}“O˙ V—˙€˙ń5sír˙rűđŸáGÚĺţä÷á?€)ý“O˙ V—˙€˙ń4}“O˙ V—˙€˙ń5sír˙rűđŸáGÚĺţä÷á?€)ý“O˙ V—˙€˙ń4}“O˙ V—˙€˙ń5sír˙rűđŸáGÚĺţä÷á?€)ý“O˙ V—˙€˙ń4}“O˙ V—˙€˙ń5sír˙rűđŸáGÚĺţä÷á?€)ý“O˙ V—˙€˙ń4}“O˙ V—˙€˙ń5sír˙rűđŸáQÝęMmk5̑ÂR$g`śńä€3Ç_ěšý´żü‡˙‰Łěšý´żü‡˙‰ŤŚęáNŮ!†724’§¸8~F“ír˙rűđŸá@Ú孊čˇĚšfšŒ-¤!’Ę%`vžA }ëÇÜlN|7ŚüĘßń2łč?é˝q_Ăm)VB7ˇÍ#Aţ!é^˜˙ň‡ţşÉü’°fđdžŚÖNľ7‡´‰52ĘćńěŁ3–PNünČsĐ@u§|J4\Ôě4ű=;S´Žň{˜ášx탏eb}źŠĂ12°cÖ łńŸ‰­4{5ťK[űíGZÔ,­äŽÖFG×ćDĺÎ؂€1ĆI$ƒžęçĂ~š6hĐ´É~Š–›íPů ¸ÚŠÇĘéIsᏠÜÇsú•"]L'¸ h‡Í”gÜrĂ'ć<ňh‡áox‡Yń°šŇm´Č­ôë{ŤÄ™œÍžW6 ŔŔŮnpŘĆzr˙5=[Þ6ˆ[kZŐĚWĹ$V›ÔÄ%’éc…Œą@ äđ23šôý?LÓtዠ>ŇÓ÷Iî!TůąUŕ}ĐY°: ÇÔÓu'JÔDƒPÓ,îÄąy2yđ+ď;śŽW tČ g Şü@Öô7O—PĐáŽâúîKÖFh@|Ż—pĘß2ŰŕüääĄÚěćş_뗞!ńD•Ő¤śv:ˇľXâ*č ľź˜Îy‘99'œ` KoxzÚŮ­­ô-2(^‘mPÎ]Ç*ÄGCŢŹ[éZ]śĄ.ŁoŚŮĂy*,r\GŹŽŠ X 00=…pKâýxB Ňí,ĺ“fľu#ŢĚ텴˝ň•ŃüA¸ţčŽ0uźKŹ]ŢŻ„­Źď&Ň­ľéń5Ä{|Ĺ_łźŤ–b gŔl`GNšV–‡)ŚŮŠŰ*d@Łĺ•ˇĘ:tv›űǓ“Eö•ĽßéŸŮ—şmÍŽ~Í,*Ńżtm#`cÓČëzÖŤáٟGÓncÔ¤ľÓŽu9§Ő&˜ă*<QG?7ßlíČlńM|qâËÝÚv™§-”š¤l_i‘ÄĄĽ´ŽŕHŔ aL›Jő>ŤßŹ“Â^’ĆŢĆO éklĚđBÖq”›– cžţ˝ë@éÚy‘¤6ĽÚqr[É\™B„gx( ťŽçGŞ%źÖtś˛ţ͂eÓľľÁ<Ž-ŢK;¸a,¸ç’ýĐç9Ć ÍâöŤ-ŽŁo“w¨C§ŰíJň[ŹĄČű¸€Ű×h/ŸáŽłPđdžľDżđţ•tഌ‚k8Ü)‘ˇČFGŰćoďNjaĄhƒXČŇ,¤Ť´]ý|ŕ1ˇńžœ}8 F7ĂéŻÍljloőK­KěÁ‚ŽBŘm­äÁŘŞżzFčZęŤ/Fđ燴Yç¸Ń´-/Mšăýt––‘ÄŇźTÔ¤0˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(ŞZ÷ü€ď˙ëÚOýŐڃPˇkť ‹TtFš&Œ3çh$“ŒœPűFÚüN]2}[ᖻ%˝íœŽgӅ¤}Š2yC"1Ţ?ťœӜgOᇍěź% Ÿ5ďí]năJ‹1Ľ¨#ˆÇ–Ť¸Žä瞜 žÚőÖKÉäC•iƒę ¨iˆó¨?ä§üC˙°™˙ˇŐÇřŹ˙ÄŰâ ÜŁţ+ŕŽăŇÚť?ä§üC˙°™˙ˇŐÇřŹ˙ÄŰâ ÜŁţ+ŕŽăŇÚ˝ŤýăäĚq?î6'>Ó~eoř™Yôôޤ¨ěN|7ŚüĘßń2łč?é˝I\ŘĎăËÔŞĂAEW1¨QEĎx§Áş'‰n˘¸ŐŽŹÍ lmľ‹ťhŔÎIŮŞťvĆH€1‘˙ §ÁżóĎ_˙“Q˙ăôšŻ‡4Ď|oŇtMlß˝€đÝíוk¨ÜZn•.mUX˜] adq‚Hůużđ¤~˙Ϟż˙…>§˙ÉI\W9?řU> ˙žz˙ţš˙ŁţOƒ瞿˙…&Ł˙ÇëŹ˙…#đďţ|ő˙ü)ő?ţHŁţĂżůó×˙đ§Ô˙ů"ŽV9?řU> ˙žz˙ţš˙ŁţOƒ瞿˙…&Ł˙ÇëŹ˙…#đďţ|ő˙ü)ő?ţHŁţĂżůó×˙đ§Ô˙ů"ŽV9?řU> ˙žz˙ţš˙ŁţOƒ瞿˙…&Ł˙ÇëŹ˙…#đďţ|ő˙ü)ő?ţHŁţĂżůó×˙đ§Ô˙ů"ŽV9?řU> ˙žz˙ţš˙ŁţOƒ瞿˙…&Ł˙ÇëŹ˙…#đďţ|ő˙ü)ő?ţHŁţĂżůó×˙đ§Ô˙ů"ŽV9?řU> ˙žz˙ţš˙ŁţOƒ瞿˙…&Ł˙ÇëŹ˙…#đďţ|ő˙ü)ő?ţHŁţĂżůó×˙đ§Ô˙ů"ŽV9?řU> ˙žz˙ţš˙ŁţOƒ瞿˙…&Ł˙ÇëŹ˙…#đďţ|ő˙ü)ő?ţHŁţĂżůó×˙đ§Ô˙ů"ŽV9?řU> ˙žz˙ţš˙ŁţOƒ瞿˙…&Ł˙ÇëŹ˙…#đďţ|ő˙ü)ő?ţHŁţĂżůó×˙đ§Ô˙ů"ŽV9?řU> ˙žz˙ţš˙ŁţOƒ瞿˙…&Ł˙ÇëŹ˙…#đďţ|ő˙ü)ő?ţHŁţĂżůó×˙đ§Ô˙ů"ŽV9?řU> ˙žz˙ţš˙ŁţOƒ瞿˙…&Ł˙ÇëŹ˙…#đďţ|ő˙ü)ő?ţHŁţĂżůó×˙đ§Ô˙ů"ŽV9?řU> ˙žz˙ţš˙ŁţOƒ瞿˙…&Ł˙ÇëŹ˙…#đďţ|ő˙ü)ő?ţHŁţĂżůó×˙đ§Ô˙ů"ŽV9?řU> ˙žz˙ţš˙ŁţOƒ瞿˙…&Ł˙ÇëŹ˙…#đďţ|ő˙ü)ő?ţHŁţĂżůó×˙đ§Ô˙ů"ŽV9?řU> ˙žz˙ţš˙ŁţOƒ瞿˙…&Ł˙ÇëŹ˙…#đďţ|ő˙ü)ő?ţHŁţĂżůó×˙đ§Ô˙ů"ŽV9?řU> ˙žz˙ţš˙ŁţOƒ瞿˙…&Ł˙ÇëŹ˙…#đďţ|ő˙ü)ő?ţHŁţĂżůó×˙đ§Ô˙ů"ŽV9?řU> ˙žz˙ţš˙ŁţOƒ瞿˙…&Ł˙ÇëŹ˙…#đďţ|ő˙ü)ő?ţH­;-"ËÂÚ Ś•ĄýŚŢŐ&œü÷RÍ#3ŤI#3šě €(jÁs€˙…SŕßůçŻ˙áI¨˙ńú?áTř7ţyë˙řRj?ü~ť˙śŢĎÜ˙÷đŃöŰĎůűŸţţC8ťřÂÚfˇsŁ[Ţ$÷ś{'’çP¸şfXÖBŠ ÎÄdsźkÍüVâmńnQ˙ƒpG?ńém]§Ú'¸řŸńĎ4’ěđö˜Ť˝‹mž8č2IüMq~+?ń6řˆ7(˙ŠÁ¸#ŸřôśŻG*˙xů3 GŔ{‰Ď†ôߙ[ţ&V}ý7Ž△ŠhšŘžÓ§Ů-ˇ„ő›¸Ńňc2Ç%‘FeÎ2>ľß؜řoMů•żâegĐÓz’šńǗŠT?‡ËuĎëş?ˆaĐuYZĂ&Ť2jRÚ˘yqIg<ťpNŔ|Ȁ {0qëV‰:„ZEŰęÚ|7mgi&›” öÝ÷SDŇƤ啒8ß;CƒĐć˝FűNłžš˛šş‡Ě–ĆVšÜî#k´o8–F9ëV°2GCé\ƧđĆţéô=\]ë2ë7֚•ň=ąd3Bę`ˆGnPťC`cŔĹdü*Ô5›Ÿř‘5ŤmV ŠŹŹŽĽŠä*Ý٧8Ŕb…  €7ye&˝2Šç4oů8/ţĹC˙J썐řSŻÍÂýóEń‡fׯmô[{‰#ŐeżšíŰĹ+Ď ž˙xŮĆ0ÜW[¤Ë_´N”ŇȑŠđ– 2ĚĎÚěŤÖ~Űg˙?pßÁU„Ďń˙ŠüEioâ˙˙ÂS$ˇŃia&–Öěń˜mƒ–˜!óĄ›pnBěĺ@!ŠćîľăívĂŚi> Ň.­ÚÖkKŤ‹‹XâŐ|É]e×(@"ŤrŮČZőáwb°šś x'zäĐněX‚nm‰SKŻB9oËŞx‹BŐnľëőšˇšżż˛ŠÚź‘ 0ÝOůÔî,UNGNäŸ:Ľď…<]ŞŰécMSy¨Çˆ˜ü–ůš” Qš˜ó‘÷J€ĆžŠűmŸüýÁ˙#]ذĂ\Ű0Îyu 3ľńŸˆoźw‡šîÎßMž˙hA˜ôŰ:z?Ügóƒ÷Qłɨ4mná˙eťbMquëč|0ň\K3Ť˛Îś€źR•9,!ˇŮ'<ת}śĎţ~ŕ˙ż‚śŮ˙ĎÜ÷đPÍâOGă×ţŃś:]ˇ‰ŕіËěŁ-śČ\ɜîK‘Ž0 䊎tř“Š[x÷Yn™›lú:\jOg„´ž{ŤPŇŠƒÉ(ťHĆâO¤ýśĎţ~ŕ˙ż‚‘Žě[ŽmŽF]x4ĺĂĆú¤~0uś­jűutÓâŃ]7\Ifm„Ÿl,O˜y%ˇýÍ ŠůžjŋĆ^>‹ÁďŽÍŻŘĘńx2´CNU .ĆfˇÎî#`¸Ďސ@⽯ív;ˇ}Śßv1Ÿ1sŠ_śŮ˙ĎÜ÷đPÍâÍSFń÷ŠaÓľ{{Űłâ{{xźź¸ńŸˆ­5]hö—÷ŻdĆŘÚ^I&ŃfJ8?3`s¸mmäƒÇłýŽÇpoľ[äp˜([ťÎۛq““‰“@żÁĚ[:ęöڒI<ňĆmďţٲ<ŹËn&ÉßĺŠ œ˙ŘTmł˙Ÿ¸?ďŕŁíśó÷ýü=Űl˙çîűř(űmŸüýÁ˙OEAöŰ?ůűƒţţ >Űg˙?pßÁ@ŃP}śĎţ~ŕ˙ż‚śŮ˙ĎÜ÷đPôTmł˙Ÿ¸?ďŕŁíśó÷ýü=Űl˙çîűř(űmŸüýÁ˙OEAöŰ?ůűƒţţ >Űg˙?pßÁ@×5ݍƒţşĎ˙ĄÖ÷Űl˙çîűř+šń5흽ľŁOwK$ł”/ PĂlőę*d4xÇ9ń4ÖzŻ€ö‚Ä”ÁeĎQ\˙ü-χ˙ô>x3˙Ż˙Ćk˛ą[™4ŰÔF#}ě`26r0Üź}ěœúqSů?ô‹˙Ç˙W6/řňő*‡đâpßđˇ>˙ĐůŕĎüż˙ŁţçĂ˙ú<˙ƒW˙ă5Üů?ô‹˙Ç˙Qä\˙ĐR/üţ=\Ƨ ˙ sá˙ýž ˙ÁŤ˙ńš?án|?˙ĄóÁŸř5ţ3]ϑs˙AHżđ\řőEĎý"˙Áq˙ăÔÄCńŔPHŇCă˙FîfMZ@X ŕEÎ23SÂčđ_ý ˙ŕć_ţ5]‘s˙AHżđ\řőEĎý"˙Áq˙ăÔŔăżátx/ţŠ?„˙đs/˙ŁţG‚˙čŁřO˙2˙ńŞě|‹Ÿú E˙‚ă˙Ǩň.č)ţ ˙ ;ţG‚˙čŁřO˙2˙ńŞ?átx/ţŠ?„˙đs/˙ŽÇČš˙ ¤_ř.?üz"çţ‚‘ŕ¸˙ńęăżátx/ţŠ?„˙đs/˙ŁţG‚˙čŁřO˙2˙ńŞě|‹Ÿú E˙‚ă˙Ǩň.č)ţ ˙ ;ţG‚˙čŁřO˙2˙ńŞ?átx/ţŠ?„˙đs/˙ŽÇČš˙ ¤_ř.?üz"çţ‚‘ŕ¸˙ńęăżátx/ţŠ?„˙đs/˙ŁţG‚˙čŁřO˙2˙ńŞě|‹Ÿú E˙‚ă˙Ǩň.č)ţ ˙ ;ţG‚˙čŁřO˙2˙ńŞ?átx/ţŠ?„˙đs/˙ŽÇČš˙ ¤_ř.?üz"çţ‚‘ŕ¸˙ńęăżátx/ţŠ?„˙đs/˙ŁţG‚˙čŁřO˙2˙ńŞě|‹Ÿú E˙‚ă˙Ǩň.č)ţ ˙ ;ţG‚˙čŁřO˙2˙ńŞ?átx/ţŠ?„˙đs/˙ŽÇČš˙ ¤_ř.?üz"çţ‚‘ŕ¸˙ńęăżátx/ţŠ?„˙đs/˙ŁţG‚˙čŁřO˙2˙ńŞě|‹Ÿú E˙‚ă˙Ǩň.č)ţ ˙ ;ţG‚˙čŁřO˙2˙ńŞ?átx/ţŠ?„˙đs/˙ŽÇČš˙ ¤_ř.?üz"çţ‚‘ŕ¸˙ńęăżátx/ţŠ?„˙đs/˙ŁţG‚˙čŁřO˙2˙ńŞě|‹Ÿú E˙‚ă˙Ǩň.č)ţ ˙ ;ţG‚˙čŁřO˙2˙ńŞ?átx/ţŠ?„˙đs/˙ŽÇČš˙ ¤_ř.?üz"çţ‚‘ŕ¸˙ńęăżátx/ţŠ?„˙đs/˙ŁţG‚˙čŁřO˙2˙ńŞě|‹Ÿú E˙‚ă˙Ǩň.č)ţ ˙ ;ţG‚˙čŁřO˙2˙ńŞçüIă‚ţ%žKďë 5›¸â¤÷ó‹‰$ g€šf8é’}kÔ|‹Ÿú E˙‚ă˙Ǩň.č)ţ ˙ ţĐýž?çŸÂűâ/ţGŁűCöx˙ž?ů˝“Čš˙ ¤_ř.?üz"çţ‚‘ŕ¸˙ńęň­7Ĺ˙ô{ëoëß ´_ˇEĺĚÖ7ř °HěnlgÔú×/ŤişŕńŢ­ŁęˇÖ~,i ž’)´śäů}kß|‹Ÿú E˙‚ă˙ÇŤ€řŘh°/ž˛>W{śdînƒ-Œw<潍ýăäĚ1ßišţÇ´Ë)ůOAŽő5CŚśíÓćSňžƒŢŚŽl_ńĺęUá ˘Š+˜Ô(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šťwusˆ‘ÜLŠ"\€>ATW[ ÓŽŽ PgÍqsňǎťŽxÇ˝düT´ÔŻüŹŮčţaž›MŮ ĆűɈ|ŞÜmb2ČÁ äW˜řłN‡R˛ŐÁž˝ąˇO _Ú]F4Šm<ůGöxDlŠduŰ/Ýnâ3ó☏aÖľ řô{Ů#˝šG[y ˛ĘŔ‚ň9Ź/‚RËÁ/ 4RŰy˙?s˙ßĂ^Kl!ÄâHî5Ő#Žôck3ŁçÉ0–ˆB(pç~pŔœŕÚ$Ô§ăI/äF‘śĆ­1Î Ŕ瓀OĐŰo?çîűřkĚŻ´äÖŠŚ]ř•­bÖe{‹›ˆçŠx—ě3ŻŢ•*–e\đ2ÄŸ†óÇď}e őŢŠhcˇm&kIÝeu™ÖC2ĹĚŞ™Tm;—íżmź˙Ÿš˙ďᯟüC<ÓÜřňYç2?ü% –l P9=€~ÜřZ?EŽé÷—ˇZÄÉw{ŞEu Â&(Ry>ĚBí>U]­üAťńŽZ8“ÇŁrŒřŻĄôĺk^–Uţň˝Ž#ŕ=‹ÂZţ•ŹxrÂîĆö)`––' ĄxÜVÚŔAäfľ~Ńo˙=â˙žĹ|3ű-řŁ_]R˙ĂĂS›ű2×O–ęːÍ’­Ŕa›ĺÎÜą8É&˝Ńľ˝Xř˙›óވ`Ą‹ýíÚšľ•/p÷/´[˙ĎxżďąGÚ-˙çź_÷ŘŻ :ŢŹĺţűę“űkU˙Ÿů˙ďŞÓűĚY—cÝ~Ńo˙=â˙žĹhˇ˙žńßbź+űkU˙Ÿů˙ďŞ?śľ_ů˙ŸţúŁűÍřÖeŘ÷_´[˙ĎxżďąGÚ-˙çź_÷ŘŻ ţÚŐçţűęí­Wţç˙ž¨ţƇó~ő™v=×í˙óŢ/űěQö‹ůďýö+Âżśľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ?ąĄü߀}f]uűEżü÷‹ţű}˘ßţ{Ĺ˙}ŠđŻí­Wţç˙ž¨ţÚŐçţűęěh7ŕY—cÝ~Ńo˙=â˙žĹhˇ˙žńßbź+űkU˙Ÿů˙ďŞ?śľ_ů˙ŸţúŁűÍřÖeŘ÷_´[˙ĎxżďąGÚ-˙çź_÷ŘŻ ţÚŐçţűęí­Wţç˙ž¨ţƇó~ő™v=×í˙óŢ/űěQö‹ůďýö+Âżśľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ?ąĄü߀}f]uűEżü÷‹ţű}˘ßţ{Ĺ˙}ŠđŻí­Wţç˙ž¨ţÚŐçţűęěh7ŕY—cÝ~Ńo˙=â˙žĹhˇ˙žńßbź+űkU˙Ÿů˙ďŞ?śľ_ů˙ŸţúŁűÍřÖeŘ÷_´[˙ĎxżďąGÚ-˙çź_÷ŘŻ ţÚŐçţűęí­Wţç˙ž¨ţƇó~ő™v=×í˙óŢ/űěQö‹ůďýö+Âżśľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ?ąĄü߀}f]uűEżü÷‹ţű}˘ßţ{Ĺ˙}ŠđŻí­Wţç˙ž¨ţÚŐçţűęěh7ŕY—cŇőž­5ŸöOŠîMžŘš[ŢI2¨VÚâ<0Č8az‚F Q˙…ŤĄ˙ĐßřLŢ˙ńşŕżśľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ?ąĄüĚ>ł.ÇkŠüNŃntë›hô–E-á›ÜAţîĽđw‰ŹüđsÁö:žŸ­Ézt›(ŢÚËI¸š’&ŽÝC‰h|˛  ‚Np8_í­Wţç˙ž¨ţÚŐçţűęěh3ŹËąŢ˙ÂŐĐ˙čăOü&ořÝđľt?úřÓ˙ ›ßţ7\öÖŤ˙?ó˙ßTmjżó˙?ýőGö4?™‡ÖĽŘďájčôń§ţ7żünřZşý|i˙„Íď˙Ž űkU˙Ÿů˙ďŞ?śľ_ů˙ŸţúŁűĚĂëRěwżđľt?úřÓ˙ ›ßţ7H~+hCރă1˙rÍç˙ŽűkU˙Ÿů˙ďŞCŹę‡­ü˙÷ŐŘĐţfY—c˝˙…­ ˙Đ ĆřLŢńşŕôHo<]Şx–ËJ°źŠm_Ä wiíŤŰHŃ­¸,VP¤ ٌž SŠOíSţ§˙žŤß~ éZ|>´Ö’Ů´/QÄ÷–fFsĐp8Îjg‡Ž÷ąw{"”ÝouŸ˙Ůgwenhywfar-4.15.2beta/doc/dialog/images/fox16-1.jpg0000644000175000017500000011403712364015347016630 00000000000000˙Ř˙ŕJFIFQP˙ŰC  !"$"$˙ŰC˙Ŕüˆ"˙Ä ˙Äľ}!1AQa"q2‘Ą#BąÁRŃđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚáâăäĺćçčéęńňóôőö÷řůú˙Ä ˙Äľw!1AQaq"2B‘ĄąÁ #3RđbrŃ $4á%ń&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚâăäĺćçčéęňóôőö÷řůú˙Ú ?ő€˙ź9ŕ_ŮŻŘ,ŚÖ¤ˇ˙Mż˝ćv dQ! ŢVĺWaA ą$ú/ö&Ÿ˙>vż÷đŇh_ňˇ;#űŸŢúՒ}#‹ţúŻNNP“Œ]’8ôi6ŠŸŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŻŸôŻ‹>4Ń<'ă kÄ6Ú>Žú‰ćŇ,á…ŮZóÖ5V ™0¨<1ŰĄëšNŹÖ킄_CŢżątĎůň´˙ż”béŸóĺi˙+Č'řŤăUđ§Ű‡€ö_AŞ=Ó4S˛, ˜.žq —ŠŕŠŤŁüIńNŁńBĐ[Üč7>ŸÂ0ë&Ţ&pď$x‹F$2eJ„l  f—ś—ó1ň.Ç´˙béŸóĺi˙(ţĹÓ?çĘÓţţWÍWß|YŤĘšĚŇZiöW> Ôuhlô˝E™”ŠYrËňʸ# ’xâş{?Wśţ#đţ’šužŁ§]ßXi7ŚCq<(ß4ŒĄl˝šČ<íĺüĚ~Ív=ťűL˙Ÿ+OűůGö.™˙>VŸ÷ňž~đ÷ĹŮÜęš$iڅđŐuť•šŐîÚ(Łľľ”… ‚K`ńŘžjŢšń÷R]&]WIđć“ ˝Ż‡mľ™âÔŻž9e3śŐŽç zž38ŁŰËů˜˝šě{ˇö.™˙>VŸ÷ňě]3ţ|­?ďĺ7Mš7zuľÓC ™ĄI xČc?ôÎ/űč֜óîţňmÄ?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ň›ý‹¤˙υ§ýő˙׍˙ŚqßF˘?őÎ/Κ•GöŸŢcĹi?†žń6w4V6°ępÈ.ˇmh™wđO—–9\É ‚ ë~' čzŸÉ(;űŠ+Ҏ•xŠOr#QÁ´ŽëB˙$dt˙šŠÎ?šýőY0čö?2ˇĘÝ˝6źđéş°ş>эƜ‚;~ËűUŒă(=—ę(úç÷CęĎůŠVžđ]ĄœŰx7Л„’9ĘXD<ēŐž^U°24˙řBüýښŸü">űtm%ĎŘbóǏ,†ŰWtŔÇJľE\_ĘWĚUÔ<á BŰě×ţđýÔh{Ÿ.[(Ů|ç9y0GŢnçŠď\˙Ä?…zî­›RžkkXmÖŘŰZĂlFŤ#DŇĆv‘¨ bşŞ)ťýĐúˇ™§˙lă˙ž¨˙śq˙ßU™E]ţč}[ĚÓ˙śq˙ßTŰ8˙ďŞĚ˘Ž˙t>­ći˙Ű8˙ďŞ?íœ÷ŐfQG׺Vó4˙íœ÷ŐöÎ?űęł(ŁëżÝŤyšöÎ?űęűgýőY”Qőßî‡ŐźÍ?űgýőGýłţúŹĘ(úď÷CęŢfŸýłţúŁţŮÇ˙}Ve}wűĄőo3OţŮÇ˙}Q˙lă˙žŤ2Š>ťýĐúˇ™§˙lă˙ž¨˙śq˙ßU™E]ţč}[ĚÓ˙śq˙ßTŰ8˙ďŞĚ˘Ž˙t>­ći˙Ű8˙ďŞ?íœ÷ŐfQG׺Vó4˙íœ÷ŐöÎ?űęł(ŁëżÝŤyšöÎ?űęűgýőY”Qőßî‡ŐźÍ?űgýőGýłţúŹĘ(úď÷CęŢfŸýłţúŁţŮÇ˙}Ve}wűĄőo3OţŮÇ˙}Q˙lă˙žŤ2Š>ťýĐúˇ™§˙lă˙ž¨˙śq˙ßU™E]ţč}[ĚÓ˙śq˙ßTŰ8˙ďŞĚ˘Ž˙t>­ći˙Ű8˙ďŞ?íœ÷ŐfQG׺Vó4˙íœ÷ŐöÎ?űęł(ŁëżÝŤyšöÎ?űęűgýőY”Qőßî‡ŐźÍ?űgýőGýłţúŹĘ(úď÷CęŢfŸýłţúŁţŮÇ˙}Ve}wűĄőo3OţŮÇ˙}Q˙lă˙žŤ2Š>ťýĐúˇ™§˙lă˙ž¨˙śq˙ßU™E]ţč}[ĚÓ˙śq˙ßTŰ8˙ďŞĚ˘Ž˙t>­ći˙Ű8˙ďŞ?íœ÷ŐfQG׺Vó4˙íœ÷ŐöÎ?űęł(ŁëżÝŤyšöÎ?űęűgýőY”Qőßî‡ŐźÍ?űgýőQ`r/űę¨ŃBÇwńŐźÎOâX˙‰ |¸ţď÷˝čŠ>&œxZăćQň÷âŠú<%okB3ľŽZ‘ĺ›GUΏcó+|­Đ{ÓiĐčö?2ˇĘÝ˝6ž_üyzřáD‚âî#ůŒŘÎŘâg z ăż_CéQ˙hŰ˙Ď;żü—˙‰ŞwşŒFŸŻj×+#ÁežâEŒĹRb$ ŕzŠË˛ńuÝޒuđĹţ• y ş­ĺŹ1J˛ČŤĂG,„6 08\äÖ-Eœ™ĐhŰ˙Ď;żü—˙‰ŁűFßţyÝ˙ŕ$żüMR—Ĺ>Š[ˆĽń–Ęďp{1*6Ć,3ň€ß)ĎCÇZÎŐž řCM´Ňďe×ôélľ;łiÔW‘4!‚333îhۂFpYF9Ľîöţžŕ÷ť˙_y˝ýŁo˙<î˙đ_ţ&íůçw˙€’˙ń5GĹ"˛Đ<1/ˆ$ŠkëTl[BŒŇůލ›K2ŠÉqÉ`1T´iˇrjj–×^¸Ň’)o"Ő$ňă“vÉ7Ł´eIF Á8ŁÝíř˙Ŕ{żő÷›Ú6˙óÎď˙%˙âhţѡ˙žwř /˙PŮëşîúŞł§\鱆/wĘ<*ďŕíďÍ3Oń‡őIŽôýwKťś‚1,ŇÁw¤hs†f|­ÉţéôŁÝíý}ÁďwţžňĎö°ĺ…ĘěöŇ*rJŕsVëęúNľáťëÍS˛Ô­ź™δeMÁNFĺ$gÚĄ_ě 7Öúޞúu­şÁ’ćő‘TdŽý=>€UrĹǛúý ć—7)żEdiđŒëK{¤djŹHZůrĆHę7.E\ţËÓ?či˙~Wü*m˙‡üŻ.ß×Ü[˘ŞeéŸô´˙ż+ţeéŸô´˙ż+ţZ=˙ř#źť_qnŠŠý—ŚĐ:ÓţüŻřU=xW°[í:ÖŇ{vy#ö`ż2;#  Ź? -˙‡ü^]żŻ¸×˘š˝Wđ&ľxöz6§á˝Jć0KĂi<2şÁ%T’+gű/L˙ u§ýů_đ˘ŃďřÁ ˡő÷誟Ůzgý­?ďĘ˙…Ůzgý­?ďĘ˙…Ăţď.ß×Ü[˘š}:ć×~°uym×NÓ]˜‚Ť‚ĺ˜“Ŕ/S÷@8ŔÍCa⏆š…ě6V"đÝÔî(`˝ˇy$cĐ*ƒ’}…Té¨>VȅG5tŽşŠČŃG‡ő&×UÓmm'łşŒK Ÿf šOC†ÄSôČ4MF ëK v‚t{O-ˆ>ŞĘ}6Ăţ W—oëî5(Ź‹Ááű;ű›[D¸żwŽŮ>Ě˜Ę…Řd *“Î:U}zűÁžX[^źĐ4•œ‘˝–„c!w‘œdtő˘ŃďřÁ ˡő÷ôVuĽŚ‰ykŐĽśqo*‡ŽXŁFGSЂ8"ŚţËÓ?či˙~Wü(´{ţđBňíý}Ĺş*§ö^™˙@ëOűňżáY* ¤ŘĹuŚĹ ŹŢpRńĆ •*Ü9ČUBšœ”SՓ:Žrh訏 ~˙ÁŢH_Äú˜'$Fú„ńDe#ĂHAcČĎSĎ5sNƒ@ÔŹbžÓĄÓ/-&]ŃO¤‘ČžŞĂ‚>•6Ăţ W—oëî4誟Ůzgý­?ďĘ˙…Ůzgý­?ďĘ˙…Ăţď.ß×Ü[˘°¤šđŞEŚĚN–-Ra”Â˛$ÎQœĘĆÔcžœuéZ_Ůzgý­?ďĘ˙…ĂţŻ.ß×Ü[˘š¸5\kO˘AŠřn]QĆÖI<-:°ęŚ0w;ŒVĎö^™˙@ëOűňżáEŁßđ˙‚—oëî-ŃU?˛ôĎúZߕ˙ ?˛ôĎúZߕ˙ -˙‡üŢ]żŻ¸ˇEsś˜“Ä÷šS˘ă%žŃ°6ˇ§$ăŚyëÍDšß€ZţÄM_Ă Ş‰L?b0üÁŐ<źîÝÇLfŞtÔ-wćDj9^ČéčŽRm{ÁpýÍŽűeť]!m6Aĺ½e—äýĘí&ŃďZR7‡#Ôě´Öˇ˛űUôRMl‚Ü"Gł{bu<çŒóSh÷ü?ŕ•yvţžăfŠŠý—ŚĐ:ÓţüŻřV6ŤřZź{=SđŢĽs%ᴞ]@ŕ’ŞIZ=˙ř!yvţžă¤˘ŞeéŸô´˙ż+ţeéŸô´˙ż+ţZ=˙ř#źť_qnŠŠý—ŚĐ:ÓţüŻřVF…‹ŰíJŇí{{IŠÁ¨*€łvöŔĐp0*ŁMJ.IěC¨ÓI­ÎŠŠçŹu/ßę˛i67ţşÔb$Ii мɎš@r1ôŤşd&ŁaőĽ…ťA:Œ˝§–ÄUe >„ ›Gżá˙ŤËˇő÷”V-ôž˛łÔŽîNiq´ˇŰ"Wh'˜w*‚AنĆ2AëW!°Ňf…&ŽÂёÔ2Ÿ!FAäv˘ŃďřÁ ˡő÷¨Žs[Ő| ĄÝĹg­j^Ó.f]ńĂw<0ťŽqŹA# Ž=+]4Ý-Ô:XY2°Č" Ę‹Gżá˙/.ß×Ü\˘ŞeéŸô´˙ż+ţeéŸô´˙ż+ţZ=˙ř#źť_qnŠÇ#˛×tŘlâŽŢ;(•c@Ąđ ŒăĐ˙3ë[N<ś}Ĺ^ë°QE…Q@Q@Q@Q@Q@Q@Q@Q@żÄӏ \|Ę>^ăÜQGÄӏ \|Ę>^ăÜQ_W–˙şĂçůžmâ3Ş€çGąů•žVč=é´čt{™[ĺnƒŢ›_=ţ<˝NĚ?đ˘sž)˛šÔź+âÍ:Ę/6ęęÚxaMÁw;[*¨ÉŔ$rk˝đMͯøôÍ7űRęţGÓZhnőIn<›ˆöy˛@c…ĆpŮł=Ş^KkäÉó 2ŔeB~VhëÓ(Џěr4›˙ü>şÓlm&űUËŰ7“ç,n€O¸Ţ… ČnŁ‚xŞÚż…äĐü?¨IŕűYćŐŻ&ˇ73Ý]Ť™cIíŻrÄT.P1ŘńŽÖŠ. xžKOwiu0šŐ´ÝB5)íK偣2Fţ@+7–gƒ…É늗ÚNŠâí_ljcŚ6—tÓhň˝łË’S´„y‘*ď\ÝÁ {5őĽĽýœśwÖ°][Lťe†hĂŁŻĄSÁZ‡GŇ´˝ĚYimžj°†Ö‰2zŞÍ w…´›ťX|KŤęúü7WöąÇ'öŤŮţZI‚Ťh6ŽąÉGQă¸4‡đˇ‡/uOŰhX\EsgwtŠöâa Ž$W!HÚÍÔŠkśÔ!k>âÝ ,LŠOLE-”?fł‚ßv˙*5MŘĆp1šÓ™r[̎WĎ#Ću/뺇†â•&ӗKO›[ýfÂâ]>ÖňÜ[—YDĘ$xPĘR6u,2¸Č৆´ó∛ĂSkďÖŁŚëÝk?ł–HŢđŞ><ü)“¨VP[ŠŻd˘łšv<Ż\Ôtď<=ž-źˇđ\śˇŽ5(őšBÍt˛F#ďď )˜¨/†+ŽpWđüšžšqŕk=_UÖc†ćËU’_.ćKY.âŽh–Ůä(UˇŮ_#,{ŽQEÂǍ隬ˇVţˇńOˆŻě4@ş¤Ox5ľ3ÜAv"%Y[>PvÁaźŠ'8ĹuŸ›Ă 9ÄŇÍşâđů’Ž×ôŠžf'ŠÜQCacČ>xkRżđçƒ|CŠjvoiŁC<Ö6śś “"źdI)‘ˇ 1ůUW'éTź âkŤŻhÇJšvƒU°ş’k9üA6Ą"HŞŽ‚hÝvŰHADlrĂ.GśQEÂLjxGZóľŻ ?ęˇúĺÜw ŽŘO#˘Ü‹Gb’ÄNŘ6ɐ¨Œ ŕíMđ§TÖŻľÝ ďń5‰d™6JyŹĺŢŔäqŠöŠÍ״˝N(Ň×]Ô´†Bs%„—t"XÜ~ ďEÂNJŰkÚ̞đ›ęZĚ˙ŘӍHÜßjÔúa–dş+ ËqO“y ňˇůBžâÖKů~éOŠjvşœ˙hp.­§3$‘†F|ÂŤź„Ú m žőÚř{HłĐ´[]#OWÖÉľKšfcœ–bzą$’{’iÚƛŠlś÷"޸pP€s‚;ƒëZѨĄQIěeZtÜQĹüCV—âGƒEşąśťň5=ĺłOݰämWCŸ}Տă}@Úř‚ö×ĹŢ'ťŃŇ 4§ÓîełŽęě™|ćEV&WaŰ áş6IŻY˘˛š­+__éw­7‹5Ón.üi*A$…Ż”ÎgX“ź ´C 7—ĐS< ׈uÍ"SY֚Ý|Ś]4PęSÂ$Ú]Ňąƒ!pryďœ z˝\,x/…ě´›Ÿ|?ŇŹľ‹żś&ľ:”qęrI5¤‹it<3“8# ´ŽŁ^™đŃî#"Ňĺźťť‡LÖ¤śľ{ŠÚiV# 229,Ř20‰8ÇîÖ}~iŚhó"ö%LpŚT20`qłŽěWľQEÂLj\kGűBÁŽ|OŞĂâ‡ńr[^i‰ D´űYXÔÁŤˆF|Ě ĺ°Xî"¤jÚýnj‚^kÖÚëďŮÝx‚dwł•Ľ‡•ĺ°hpV@I$†,9Qéw~KÝr GPÖőkť{k‘uo§ČŃ xĺ…o–1#mÉ 38ŕc˘˘ác°˙‘óP˙ŻqüŁŽkád:ůŐ”ß húŇř§Tń.źś\ÝÚ[ŮCme3̉-+îgdBYšfăn“ÉŞ^2Ňü]{ă=TŃôýk-&IdÍÖ§,2Jd‰Ł#jŔŕcvAÜsÓ€:]w[Ń´Dź×5}?KśyK5ĺĘBŒä3 Ŕ'Ćąád|;˙Ą÷Âżř7ˇ˙â몢ÎWţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨ WţGĂżú|+˙ƒ{ţ.řY˙č}đŻţ í˙řşę¨  şNĽ§jú|ZŽ“k¨YKŸ.âÖe–7Á*pĘH8 ¨5jš_…żň,Ý˙Ř{X˙ӕÍuTËüM8đľÇĚŁĺî=Ĺ|M8đľÇĚŁĺî=ĹőyoűŹ>™ć×ţ#:¨t{™[ĺnƒŢ›N€çGąů•žVč=éľóŘßăËÔěĂ˙ '+ńKţE›Oűh˙úrśŽŞš_Š_ň,ÚŘ{G˙ӕľ3ÄwwQ|Lđ•¤W3Gm=ž f‰d!$*ąm,˝2qž™5Ěju´Wœř/Ć&ż‹ÂşĘiŰđČVHnë J­˝ƒ)Tn6‚ œdˇÁţ3ń-ćŸŕýWZ]­|K!ˇŮĂ"Éo'“$ŞŰ™Ř:‘ 6‚Ľ‡'%‚ç¤Q\‡ă _SŃ| qĺŘEsâKw{ƒĺ;$N-^PQwƒĘ2 ÂÝřc˙CƉ˙"ř[ż čxŃ?đ$WĐtQȃ˜ůóţďĂú4Oü ÂÝřc˙CƉ˙"žƒ˘ŽDÇϟđˇ~˙Đń˘ŕHŁţďĂú4Oü ôr ć>|˙…ťđÇţ‡˙Eđˇ~˙Đń˘ŕHŻ čŁ‘1óçü-߆?ôÂÝřc˙CƉ˙"ř[ż čxŃ?đ$WĐtQȃ˜ůóţďĂú4Oü ÂÝřc˙CƉ˙"žƒ˘ŽDÇϟđˇ~˙Đń˘ŕHŁţďĂú4Oü ôr ć>|˙…ťđÇţ‡˙Eđˇ~˙Đń˘ŕHŻ čŁ‘1óçü-߆?ôÂÝřc˙CƉ˙"ř[ż čxŃ?đ$WĐtQȃ˜ůóţďĂú4Oü ÂÝřc˙CƉ˙"žƒ˘ŽDÇϟđˇ~˙Đń˘ŕHŁţďĂú4Oü ôr ć>|˙…ťđÇţ‡˙Eđˇ~˙Đń˘ŕHŻ čŁ‘1óçü-߆?ôÂÝřc˙CƉ˙"ř[ż čxŃ?đ$WĐtQȃ˜ůóţďĂú4Oü ÂÝřc˙CƉ˙"žƒ˘ŽDÇϟđˇ~˙Đń˘ŕHŁţďĂú4Oü ôr ć>|˙…ťđÇţ‡˙Eđˇ~˙Đń˘ŕHŻ čŁ‘1óçü-߆?ôd+3Ľ˘šŻřI?é§ţJ˙öĘ?á$˙ڟů+˙Ű(ćAft´W5˙ 'ý4˙É_ţŮGü$ŸôÓ˙%űeČ,Ɗćżá$˙ڟů+˙Ű(˙„“ţšäŻ˙lŁ™™ŇŃ\×ü$ŸôÓ˙%űeđ’ÓOü•˙í”s ł:Z+š˙„“ţšäŻ˙lŁţOúi˙’żý˛ŽdgKEs_đ’ÓOü•˙í”ÂI˙M?ňW˙śQ̂ĚéhŽkţOúi˙’żý˛řI?é§ţJ˙öĘ9Y-ÍÂI˙M?ňW˙śQ˙ 'ý4˙É_ţŮG2 3Ľ˘šŻřI?é§ţJ˙öĘ?á$˙ڟů+˙Ű(ćAft´W5˙ 'ý4˙É_ţŮGü$ŸôÓ˙%űeČ,Ɗćżá$˙ڟů+˙Ű(˙„“ţšäŻ˙lŁ™™ŇŃ\×ü$ŸôÓ˙%űeđ’ÓOü•˙í”s ł:Z+š˙„“ţšäŻ˙lŁţOúi˙’żý˛ŽdgKEs_đ’ÓOü•˙í”ÂI˙M?ňW˙śQ̂ĚéhŽkţOúi˙’żý˛řI?é§ţJ˙öĘ9Y-ÍÂI˙M?ňW˙śQ˙ 'ý4˙É_ţŮG2 3Ľ˘šŻřI?é§ţJ˙öĘ?á$˙ڟů+˙Ű(ćAft´W5˙ 'ý4˙É_ţŮGü$ŸôÓ˙%űeČ,Ɗćżá$˙ڟů+˙Ű(˙„“ţšäŻ˙lŁ™™ŇŃ\×ü$ŸôÓ˙%űeđ’ÓOü•˙í”s ł:Z+š˙„“ţšäŻ˙lŁţOúi˙’żý˛ŽdgKEs_đ’ÓOü•˙í”ÂI˙M?ňW˙śQ̂ĚéhŽkţOúi˙’żý˛řI?é§ţJ˙öĘ9Y-ÍÂI˙M?ňW˙śQ˙ 'ý4˙É_ţŮG2 3Ľ˘šŻřI?é§ţJ˙öĘ?á$˙ڟů+˙Ű(ćAft´W5˙ 'ý4˙É_ţŮGü$ŸôÓ˙%űeČ,Ɗćżá$˙ڟů+˙Ű(˙„“ţšäŻ˙lŁ™™ŇŃ\×ü$ŸôÓ˙%űeđ’ÓOü•˙í”s ł:Z+š˙„“ţšäŻ˙lŁţOúi˙’żý˛ŽdgKEs_đ’ÓOü•˙í”ÂI˙M?ňW˙śQ̂ĚéhŽkţOúi˙’żý˛řI?é§ţJ˙öĘ9Y-s^0ţ?űc˙ľh˙„“ţšäŻ˙lŹícRŽú#ó3HY?ĺ–Ŕď˙hóóR”“CHŕ>˙Čłw˙aíc˙NW5ŐW+đˇţE›żűkúršŽŞ˛e#—řšqák™GËÜ{Š(řšqák™GËÜ{Š+ęňß÷X|˙3ÎŻüFuPčö?2ˇĘÝ˝6Ώcó+|­Đ{Ók籿ǗŠŮ‡ţNWâ—ü‹6ŸöŃ˙ôĺmZ:Śťö/čşŮ|Ďí8ŽdóźĚy^HC¸ç;ýF1Ţłž)Čłi˙aí˙NVŐkYŃ.Ż‹â WÂ^žřéé:B čd‚G7ĐI#!P¨LŮ!›qQÂäŃd= hSŘiWĐ^<°jń´ś-äfDfS… ¸ŠNôńUžřŽßĆ>´Öa˛ť˛i˘Gx§ˇ•K áŃDƒýĽČŽsĂń6?ƒŹŽŸHţÍđȖ1,SČÓ\ĄâśŔB]ÍÔŕńƒĐ|6Ňu}ÂöşŠŽÍ>5‚Ú{k‡s: áYËnœĂŢŻ¨x§ZŇüAckŞřrtÍCPű­Ô:‡™1rŁ<>XX!<;žG\uŐÁYhţ3ˆkšÎŸ ^ÚE3E§:ę“+XŰ ,&ÜŤLĂď1“§ĘĎ{CŒđ„uęž1ťťńď‹4¨ôß=…ľś5˛Äą‹kyĺ¤.ŮÝ+wĆ01Ĺu_đڟţŠŸÄüą˙äZ?gőŸżěo—˙HlëŐ+T•ˆ<ŻţÓ˙ŃSřƒ˙?ü‹Gü)§˙˘§ń˙,ů˝RŠvBšĺđڟţŠŸÄüą˙äZ?áM?ý?ˆ?řc˙Čľę”Qd<ŻţÓ˙ŃSřƒ˙?ü‹Gü)§˙˘§ń˙,ů˝RŠ,‚ç•˙šú*đ"Ç˙‘h˙…4˙ôTţ ˙ŕE˙"תQE\ňżřSO˙EOâţX˙ň-đڟţŠŸÄüą˙äZőJ(˛ žW˙ i˙čŠüA˙Ŕ‹ţEŁţÓ˙ŃSřƒ˙?ü‹^ŠEAsĘ˙áM?ý?ˆ?řc˙Č´šú*đ"Ç˙‘kŐ(˘Č.y_ü)§˙˘§ń˙,ůřSO˙EOâţX˙ň-zĽYĎ+˙…4˙ôTţ ˙ŕE˙"Ń˙ i˙čŠüA˙Ŕ‹ţEŻT˘‹ šĺđڟţŠŸÄüą˙äZ?áM?ý?ˆ?řc˙Čľę”Qd<ŻţÓ˙ŃSřƒ˙?ü‹Gü)§˙˘§ń˙,ů˝RŠ,‚ç•˙šú*đ"Ç˙‘h˙…4˙ôTţ ˙ŕE˙"תQE\ňżřSO˙EOâţX˙ň-đڟţŠŸÄüą˙äZőJ(˛ žW˙ i˙čŠüA˙Ŕ‹ţEŁţÓ˙ŃSřƒ˙?ü‹^ŠEAsĘ˙áM?ý?ˆ?řc˙Č´šú*đ"Ç˙‘kŐ(˘Č.y_ü)§˙˘§ń˙,ůřSO˙EOâţX˙ň-zĽYĎ+˙…4˙ôTţ ˙ŕE˙"Ń˙ i˙čŠüA˙Ŕ‹ţEŻT˘‹ šĺđڟţŠŸÄüą˙äZ?áM?ý?ˆ?řc˙Čľę”Qd<ŻţÓ˙ŃSřƒ˙?ü‹Gü)§˙˘§ń˙,ů˝RŠ,‚ç•˙šú*đ"Ç˙‘h˙…4˙ôTţ ˙ŕE˙"תQE\ňżřSO˙EOâţX˙ň-đڟţŠŸÄüą˙äZőJ(˛ žW˙ i˙čŠüA˙Ŕ‹ţEŁţÓ˙ŃSřƒ˙?ü‹^ŠEAsĘ˙áM?ý?ˆ?řc˙Č´šú*đ"Ç˙‘kŐ(˘Č.y_ü)§˙˘§ń˙,ůřSO˙EOâţX˙ň-zĽYĎ+˙…4˙ôTţ ˙ŕE˙"Ń˙ i˙čŠüA˙Ŕ‹ţEŻT˘‹ šĺđڟţŠŸÄüą˙äZ?áM?ý?ˆ?řc˙Čľę”Qd<ŻţÓ˙ŃSřƒ˙?ü‹Gü)§˙˘§ń˙,ů˝RŠ,‚ç•˙šú*đ"Ç˙‘h˙…4˙ôTţ ˙ŕE˙"תQE\ňżřSO˙EOâţX˙ň-đڟţŠŸÄüą˙äZőJ(˛ žW˙ i˙čŠüA˙Ŕ‹ţEŁţÓ˙ŃSřƒ˙?ü‹^ŠEAsĘ˙áM?ý?ˆ?řc˙Č´šú*đ"Ç˙‘kŐ(˘Č.y_ü)§˙˘§ń˙,ůřSO˙EOâţX˙ň-zĽYĎ+˙…4˙ôTţ ˙ŕE˙"ŐËO /…tű‹V׾rI%ŠO´ę’Dň "Aą|¸ŃBüšé’O$€ôŠćźaüöÇ˙jÔÉ+ _đˇţE›żűkúršŽŞš_…żň,Ý˙Ř{X˙ӕÍuU“-żÄӏ \|Ę>^ăÜQGÄӏ \|Ę>^ăÜQ_W–˙şĂçůžuâ3Ş€çGąů•žVč=é´čt{™[ĺnƒŢ›_=ţ<˝NĚ?đ˘rżżäY´˙°ö˙§+j꫕řĽ˙"ͧý‡´ý9[WU\Ý ‚Š(¤EPEPđRÂ˙E1—SąşˇMOÄr^ٟ%›Í€ÚŰFm´npN3Ђ} íĐ˙rç˙¤˙âkĎhŤç'”ô/ˇCý˟ü“˙‰ŁíĐ˙rç˙¤˙âkĎhٜ9OBűt?Üš˙Ŕi?řš>Ý÷.đOţ&źöŠ9Ôô/ˇCý˟ü“˙‰ŁíĐ˙rç˙¤˙âkĎhٜ9OBűt?Üš˙Ŕi?řš>Ý÷.đOţ&źöŠ9Ôô/ˇCý˟ü“˙‰ŁíĐ˙rç˙¤˙âkĎhٜ9OBűt?Üš˙Ŕi?řš>Ý÷.đOţ&źöŠ9Ôô/ˇCý˟ü“˙‰ŁíĐ˙rç˙¤˙âkĎhٜ9OBűt?Üš˙Ŕi?řš>Ý÷.đOţ&źöŠ9Ôô/ˇCý˟ü“˙‰ŁíĐ˙rç˙¤˙âkĎhٜ9OBűt?Üš˙Ŕi?řš>Ý÷.đOţ&źöŠ9Ôô/ˇCý˟ü“˙‰ŁíĐ˙rç˙¤˙âkĎhٜ9OBűt?Üš˙Ŕi?řš>Ý÷.đOţ&źöŠ9Ôô/ˇCý˟ü“˙‰ŁíĐ˙rç˙¤˙âkĎhٜ9OBűt?Üš˙Ŕi?řš>Ý÷.đOţ&źöŠ9Ôô/ˇCý˟ü“˙‰ŁíĐ˙rç˙¤˙âkĎhٜ9OBűt?Üš˙Ŕi?řš>Ý÷.đOţ&źöŠ9Ôô/ˇCý˟ü“˙‰ŁíĐ˙rç˙¤˙âkĎhٜ9OBűt?Üš˙Ŕi?řš>Ý÷.đOţ&źöŠ9Ôô/ˇCý˟ü“˙‰ŁíĐ˙rç˙¤˙âkĎhٜ9OBűt?Üš˙Ŕi?řš>Ý÷.đOţ&źöŠ9Ôô/ˇCý˟ü“˙‰ŁíĐ˙rç˙¤˙âkĎhٜ9OBűt?Üš˙Ŕi?řš>Ý÷.đOţ&źöŠ9Ôô/ˇCý˟ü“˙‰ŁíĐ˙rç˙¤˙âkĎhٜ9OBűt?Üš˙Ŕi?řš>Ý÷.đOţ&źöŠ9Ôô/ˇCý˟ü“˙‰ŁíĐ˙rç˙¤˙âkĎhٜ9OBűt?Üš˙Ŕi?řš>Ý÷.đOţ&źöŠ9Ôô/ˇCý˟ü“˙‰ŁíĐ˙rç˙¤˙âkĎhٜ9OBűt?Üš˙Ŕi?řš>Ý÷.đOţ&źöŠ9Ôô/ˇCý˟ü“˙‰ŁíĐ˙rç˙¤˙âkĎhٜ9OBűt?Üš˙Ŕi?řš>Ý÷.đOţ&źöŠ9Ôô/ˇCý˟ü“˙‰ŁíĐ˙rç˙¤˙âkĎhٜ9OBűt?Üš˙Ŕi?řš>Ý÷.đOţ&źöŠ9Ôô/ˇCý˟ü“˙‰Ź?›JŠ(BŃ(/&HósÔQ\ĺ9Ülrż äYť˙°öą˙§+šęŤ•ř[˙"Íßý‡ľý9\×UPƎ_âiDžŽ>e/qî(ŁâiDžŽ>e/qî(ŻŤËÝaóüĎ:żńŐ@sŁŘüĘß+tôÚt:=Ě­ňˇAďMŻžĆ˙^§fřQ9_Š_ň,ÚŘ{G˙ӕľuUĘüR˙‘fÓţĂÚ?ţœ­ŤŞŽn†ÁER˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(•ř[˙"Íßý‡ľý9\×U\ŻÂßůn˙ě=ŹéĘ溪‘ËüM8đľÇĚŁĺî=Ĺ|M8đľÇĚŁĺî=ĹőyoűŹ>™çWţ#:¨t{™[ĺnƒŢ›N€çGąů•žVč=éľóŘßăËÔěĂ˙ '+ńKţE›Oűh˙úrśŽŞš_Š_ň,ÚŘ{G˙ӕľuUÍĐŘ(˘Š@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQErż äYť˙°öą˙§+šęŤ•ř[˙"Íßý‡ľý9\×UC9‰§¸ů”|˝Ç¸˘‰§¸ů”|˝Ç¸˘žŻ-˙u‡Ďó<ę˙ÄgUΏcó+|­Đ{ÓiĐčö?2ˇĘÝ˝6ž{üyz˜áDĺ~)Čłi˙aí˙NVŐŐW+ńKţE›Oűh˙úrśŽŞšşQHŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Wáoü‹7öÖ?ôĺs]Urż äYť˙°öą˙§+šę¨bG/ń4ăÂ×2—¸÷Qń4ăÂ×2—¸÷WŐĺżî°ůţg_řŒę 9Ńě~eo•şzm:ÇćVů[ ÷Ś×Ďc/Słü(œŻĹ/ům?ě=Ł˙éĘÚşŞĺ~)Čłi˙aí˙NVŐŐW7C`˘Š)QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEĘü-˙‘fďţĂÚÇţœŽkŞŽWáoü‹7öÖ?ôĺs]U Hĺţ&œxZăćQň÷âŠ>&œxZăćQň÷âŠúźˇýÖ?ĚóŤ˙T:=Ě­ňˇAďM§@sŁŘüĘß+tôÚůěońĺęva˙…•řĽ˙"ͧý‡´ý9[WU\ŻĹ/ům?ě=Ł˙éĘÚşŞćčlQE (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€9_…żň,Ý˙Ř{X˙ӕÍuUĘü-˙‘fďţĂÚÇţœŽkŞĄ‰żÄӏ \|Ę>^ăÜQGÄӏ \|Ę>^ăÜQ_W–˙şĂçůžuâ3Ş€çGąů•žVč=é´čt{™[ĺnƒŢ›_=ţ<˝NĚ?đ˘rżżäY´˙°ö˙§+j꫕řĽ˙"ͧý‡´ý9[WU\Ý ‚Š(¤EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP+đˇţE›żűkúršŽŞš_…żň,Ý˙Ř{X˙ӕÍuT1#—řšqák™GËÜ{Š(řšqák™GËÜ{Š+ęňß÷X|˙3ÎŻüFuPčö?2ˇĘÝ˝6Ώcó+|­Đ{Ók籿ǗŠŮ‡ţNWâ—ü‹6ŸöŃ˙ôĺm]UrżżäY´˙°ö˙§+jꫛĄ°QE€(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šĺ~˙Čłw˙aíc˙NW5ŐW+đˇţE›żűkúršŽŞ†$r˙N<-qó(ů{qEN<-qó(ů{qE}^[ţëŸćyŐ˙ˆÎޝÇćVů[ ÷ŚÓ 9Ńě~eo•şzm|ö7řňő;0˙‰ĘüR˙‘fÓţĂÚ?ţœ­ŤŞŹ˙hú~˝Ľ>™ŠÇ,–Ď$rţęy!uxäY•ăee!ŃH Ž•‹˙‡˙?Ţ*˙§R˙ăőĚluTW+˙‡˙?Ţ*˙§R˙ăôÂĄ˙Ď÷ŠżđŠÔżřý :Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€:Ş+•˙„ C˙ŸďáSŠńú?áĐ˙çűĹ_řTę_ü~€…żň,Ý˙Ř{X˙ӕÍuUŸáýOĐt¤Ó4ČĺŽŮ$’_ŢĎ$ÎĎ$#ł<ŒĚÄťą$“Ö´(—řšqák™GËÜ{Š(řšqák™GËÜ{Š+ęňß÷X|˙3ÍŻüFuPčö?2ˇĘÝ˝6Ώcó+|­Đ{Ók籿ǗŠŮ‡ţL˙k~ƒĽ>§ŠÉ,vÉ$q~ę &vy$XŃU#Vf%Ý@ľGVńNŸ§ř"˙ĹŻ 貳ľ–壞ÖKy˜FW˕U”’¸9ĄÍSřĽ˙"ͧý‡´ý9[VŮëz%ö¨ÇćŮß[˝źč GR§ąÁë\Ƨ+a­x’×WÓ-üIŽx:ÎmCi źw@ŃČҟ4ƒÇ¨<ôŠOÄ-8[ęWGHÖĽ…ěš{OĺG‰î–a†%߽ٜ§nŢy ‚+ŕÝzćm&kĹPjUÜWPcMňîĽhó°K/˜Uşóś5ĎľX›Á '†Żt‘Şe/qî(ŁâiDžŽ>e/qî(ŻŤËÝaóüĎ6żńŐ@sŁŘüĘß+tôÚt:=Ě­ňˇAďMŻžĆ˙^§fřQ9_Š_ň,ÚŘ{G˙ӕľuUĘüR˙‘fÓţĂÚ?ţœ­ŞˇŠ?äŤř/ţ˝ľ/ýć5;:+Ë| ŽxšKojŽ˝.˘˝ŠXřu/ź7áŮŁ‡VÔ ÷—2“rťC–D‹J…‹:w kĹž!Ó~.xF|A1Ńő‰n ŸLű4>Xňí^@Ţfß3;”ŘŁ‘3/˙Â1˙=­żďŚ˙ ?áż˙žÖß÷Ó…uôQȃ™œ‡ü#˙óÚŰţúođŁţ‹˙ůím˙}7řW_Eˆ9™ČÂ1˙=­żďŚ˙ ?áż˙žÖß÷Ó…uôQȃ™œ‡ü#˙óÚŰţúođŁţ‹˙ůím˙}7řW_Eˆ9™ČÂ1˙=­żďŚ˙ ?áż˙žÖß÷Ó…uôQȃ™œ‡ü#˙óÚŰţúođŁţ‹˙ůím˙}7řW_Eˆ9™ČÂ1˙=­żďŚ˙ ?áż˙žÖß÷Ó…uôQȃ™œ‡ü#˙óÚŰţúođŁţ‹˙ůím˙}7řW_Eˆ9™ČÂ1˙=­żďŚ˙ ?áż˙žÖß÷Ó…uôQȃ™œ‡ü#˙óÚŰţúođŁţ‹˙ůím˙}7řW_Eˆ9™ČÂ1˙=­żďŚ˙ ?áż˙žÖß÷Ó…uôQȃ™œ‡ü#˙óÚŰţúođŁţ‹˙ůím˙}7řW_Eˆ9™ČÂ1˙=­żďŚ˙ ?áż˙žÖß÷Ó…uôQȃ™œ‡ü#˙óÚŰţúođŁţ‹˙ůím˙}7řW_Eˆ9™ČÂ1˙=­żďŚ˙ ?áż˙žÖß÷Ó…uôQȃ™œ‡ü#˙óÚŰţúođŁţ‹˙ůím˙}7řW_Eˆ9™ČÂ1˙=­żďŚ˙ ?áż˙žÖß÷Ó…uôQȃ™œ‡ü#˙óÚŰţúođŁţ‹˙ůím˙}7řW_Eˆ9™ČÂ1˙=­żďŚ˙ ?áż˙žÖß÷Ó…uôQȃ™œ‡ü#˙óÚŰţúođŁţ‹˙ůím˙}7řW_Eˆ9™ČÂ1˙=­żďŚ˙ ?áż˙žÖß÷Ó…uôQȃ™œ‡ü#˙óÚŰţúođŁţ‹˙ůím˙}7řW_Eˆ9™ČÂ1˙=­żďŚ˙ ?áż˙žÖß÷Ó…uôQȃ™œ‡ü#˙óÚŰţúođ¨5 îĆÍ‰Œ…bO$OzíŞ†ż˙ ˇ˙Ž‘˙čĹŤ§N2’L™IĽs‹ű ßüń?÷Ň˙E4rBű%]ŹFqxü+Ÿ˝ř™ŚhóÝXřšŇëKÔ-ԺªfŽĺrŰL22– ‚pzjŘßŢęvé{{ŚžœdĹ’n—ËĎĘdÂ1•ÉÇsœŰ[ÓrKcWr’G;đˇţE›żűkúršŽŞš_…żň,Ý˙Ř{X˙ӕÍuUĺ3­żÄӏ \|Ę>^ăÜQGÄӏ \|Ę>^ăÜQ_W–˙şĂçůžuâ3Ş€çGąů•žVč=é´čt{™[ĺnƒŢ›_=ţ<˝NĚ?đ˘rżżäY´˙°ö˙§+jé%´ľ–îšmĄ’ćÂZ0^0ŘÜşŒŕgp+›řĽ˙"ͧý‡´ý9[WI-ÝŹWpÚKs w3†0ÄŇňĆâŤÔă#8é‘\Ý ˆ`ŇôČ#łŽ:Î$ąĎŮ P-ňĽvů>RGŕ‘Xžđ^áM*Ć,ě%Ô­íÖmI,Ň)§U|Ě2ŘŕpIé]5€Ë´đ燬ő¨ÚhZ]˝é‘¤7ZF˛`AmŔg$3}Ď­MĽčúF”÷2izU‹ÝIć\5ľşFfď>Đ7O&ŻT6WVˇÖ‘]Ů\Ăsm2‡Žh\::ž„0੡káŻZkk6ş•§)c%ävqŹî[Š.ăžüÖ­UšÔtűkű]>âúÖËÍ˙eˇ’UY'Ř76Ĺ'-ÉÇAV¨k]đrřź;ŤÁâgCÔ4ŤyŢ}8[’Vd@á„ńH§î `ÖŻXxM"Őtm[P×5][QŇmî­ăšş+Lˇ 6őŠ$\Ż”v…ă9Éć ´đןk ˙mŰć"ž<Źă#8ëR˙Â)˙O˙ů˙˛­“}Œěˆ-źńe—ˆľëz´ş{Ěú}˝ŮˇZTŤm1Ďß)*7ł`{óT,ţiöš žˆ5ĺKš4Áŕéd+ŚŘ˜EóŠIH”Ipk[ţOú˙Č?ý•đŠÓ˙ţA˙쨝ěBÂńéÚşöąŞÜiZŸö”7&w“Ę’ Ź#‰fŮáUNps×=5s_đŠÓ˙ţA˙ě¨˙„SţŸ˙ň˙eEß`˛ śđ‡ĂťOůˇĎ§ŮŹfŢs([ˆ¤ŽA$rŤ¨:¸VăFi.|ú‡‡o´=kĹŢ#ŐmďŠ-ĂĚÖŃ;B§-ňa@ĆUˆˆ$cţOú˙Č?ý•đŠÓ˙ţA˙쨝ěFd˙ ´Uś’ßKÔuM%ŐU˛K#M>ä##´ń˛…pîY2嘀 5żâOŰxƒĂ‹˘jWwo–ÚV ,ŽđʒŠ?.ŢZ1œ(ŕœcŒS˙„SţŸ˙ň˙eGü"Ÿô˙˙ű*.ű‘ü z?öWöwÚoźŻí˙íěďMßhűWÚvýßő{řÇ]˝óÍhřÇĂ:wŠtŘŹőš…íîęŇęÚ_.{iÓ;dť ‚$A"ŞÂ)˙O˙ů˙˛ŁţOú˙Č?ý•}‚ȧ7€ažŃotÝsÄţ"֚ĺŕ’;›ŠáŽ[Y!2)!ƈŽŽnÚIÚd TKđŰK—OÔ Ôu}cS˝ÔîŹînő—ˆO'ŮeI!ŒcT:* ďcÔć´á˙§˙üƒ˙ŮQ˙§ý?˙äţʋžÁdGŽxIŐáńdW7ČűËu8ÄRG˜ň§ ‰–Ü2šZĎÂÍ'TÔuˉ5ďAkݘ†­a ń {¸ă…"œĆ]TŞaś2łn œ` ŸřE?é˙˙ ˙öTÂ)˙O˙ů˙˛˘ď°YšçĂ=VÔu ›SŐí4íVXŚŐtŤic[KçQApPşĺcEa ` 6yŠź[ŕI^ăÜQGÄӏ \|Ę>^ăÜQ_W–˙şĂçůžuâ3Ş€çGąů•žVč=é´čt{™[ĺnƒŢ›_=ţ<˝NĚ?đ˘rżżäY´˙°ö˙§+j­âů*ţ ˙ŻmK˙@†ŹüR˙‘fÓţĂÚ?ţœ­ŤŞŽcSČ~˨[Ů|8ÔdÖľ{ˍn9cÔ>×}$É(ű,’ŠŘÄŞ˛´j7(ŒäœšĎř]Ž›¸| ýŸâMSUÖî÷vÚćúIś[y2Hؑ$„ppÝ[q5í՛á×ĂްĐ줚Kkšb •Q€I ý˘ácĚ|#â6ÔmţčSkˇSęmđkP­ŰůÂD´2ÎAÜŽdn ĺr:fˇgőŇĄřyakc¨=ĹíźŨ[ɨI;ZĚ ;$đ~P§Jô:(¸Xń=F}kţç†5mcÂşş^Í­\ÁnţełD–Ťip¨ą‘6z3Lä€y gjƒí”QCw'â´÷mâo‡úlvŢ)ż´šłžiět YŹf˜¤plfežBäđ_żCZŸÚž$ÓľřOĂv¤ŽŠi¨\\Ë.ĽwmäźErÂä™2f<N\ˇiŰÖź9áO[č÷ÍĹÂ]éвŰMgŹOe,^b¨qş ˆ;W “ŇŽéš'…tůôۘn¤žăLŠxm'źŐfş•vV–FgÉDĆâpŠŮ=9Ÿ xżÄ÷ž1šĐľŰ7Eş–[¸´ű ô;Ó,eźšRčËäϔF°‚F3\§…E^ *´^ đz3ččX›…š†/íyĎŮ$\á­Ď™›|noőE:š.#œ_řŇm#H†-2Ň×Sźń?ö)şżŇŽ­ažm$âć;yYe\m ľ˜‚Čŕ7!‡Ťh Žč–śíő÷Y%›IžšÓwČ‚A†PáIŘ]‡Lä€j§‡ü#moaž÷Ů÷ßoś’ďUšâUŸËh÷™$‘™žGa†$sӁ[˙Úóým˙Wüh¸!ŕ}^_üŇ|t.uýk]ŐÚĎţ&:ľőüfYîV%$ťô, ŽćĆŃÉŽŸLń§Œ§đ˙Š%{;3s˘Á圥}Ł^i6—‘í,[.[tn˘6MĚŁĚF#Ş×WŕČźžXl[CH„Ki%Áp6áó3ČlŮČ rTO x+ű"ăJ¸žâúÎćXĽž;ýrćčČcmČŹŇĘÄŚzŚvž„EŔóŮ|mâďéžń'‡őNŐ7V–ŒŤ{§G"O y,Íy #î_˜ŕœă—j~đ6˘oZuHŢöň;ůžŰR–Ý…Ę&ř9Ćűx,›K˝šÔŐlü;ŞčŠŁę3Ăsf „’ń‹‰ÖHÉ}ۉ ŠrIÎ9ÎM„´ńߋ÷˙k]چtqâů<=öhíĽ ÚÍ´syŚMĄƒmĘě €H+œ Ż‹—úŠ]xOĂÖZ•Ć•ż­}Šňú݂ËKo4ŢZ7đ4 aČ qƒ‚5ż°|öąmśű?öŻöžĎľˇü}ůţ™Ů˙Yómű˝ąŽ*߈ěü3â=*M/Zű íŁ˛šG”ʧ*ĘŔ‚Ź0 ƒĐŃp9Ÿ#|9đě×ZŢŤŠ\ęWÖZ}¤Ί=Ü0Ď<됟ŹŇ̀˛†ÁŘÚNk]ń÷‹ô?ÄúmĚ:ĄŻhÓi_g¸Š `ľ¸ŠúŕBFdv×lŸĆĂî6:­tÖţ đ$ZVŁŚH>ŰoŠ*-ŃżŐ§ť•Äd´`I4Œëľ‰eÚFÓČÁ§ÚxGŔśÚM֘¨“Cyu Ýԗ:œłĎ<°şßDŇQ ÇÉp"y…¤+ňjö˝âoř“âljôSŁ>›ŁËm¨ÝŰ]Ĺ#Mt‰ŚŔîˆęę!;á™dœ`“ézž‡á J=z;Őś•|Ah,ľAöś_>ށxaˇĺv\zôŹÍSŔż5=ZďT˝ˇŽK‹ç‰ď@ÔćHŽź¤Tf‰d "¨EÂş•ęq’I.?â?ˆž%ˇˇńg‰4¸4á˙ \G ÝĽĚ2ËŃäĂ<Ź’  0 ĽqSʂ*OŠ–RYEá­Ä#Ć7÷0Kii§/Ří­ŁtK5ž|Ż'hl–RĚí…9#ąáęúăë7đÁ-ÔŻ“Şę$-<śšqĹp0]XŒAPjđ5ď‰ďˇŹRe„Â'ĺFb~vŤz2nůŢÇň¨Ý‹žqĐW­‰pTefŽJJ\čĺ~˙Čłw˙aíc˙NW5ŐW+đˇţE›żűkúršŽŞžyž‚9‰§¸ů”|˝Ç¸˘‰§¸ů”|˝Ç¸˘žŻ-˙u‡Ďó<ę˙ÄgUΏcó+|­Đ{ÓiĐčö?2ˇĘÝ˝6ž{üyz˜áDĺ~)Čłi˙aí˙NVŐŐW+ńKţE›Oűh˙úrśŽŞšşQHŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Wáoü‹7öÖ?ôĺs]Urż äYť˙°öą˙§+šę¨bG/ń4ăÂ×2—¸÷Qń4ăÂ×2—¸÷WŐĺżî°ůţg_řŒę 9Ńě~eo•şzm:ÇćVů[ ÷Ś×Ďc/Słü(œŻĹ/ům?ě=Ł˙éĘÚşŞĺ~)Čłi˙aí˙NVŐŐW7C`˘Š)QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEĘü-˙‘fďţĂÚÇţœŽkŞŽWáoü‹7öÖ?ôĺs]U Hĺţ&œxZăćQň÷âŠ>&œxZăćQň÷âŠúźˇýÖ?ĚóŤ˙T:=Ě­ňˇAďM§@sŁŘüĘß+tôÚůěońĺęva˙…•řĽ˙"ͧý‡´ý9[WU\ŻĹ/ům?ě=Ł˙éĘÚşŞćčlQE (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€9_…żň,Ý˙Ř{X˙ӕÍuUĘü-˙‘fďţĂÚÇţœŽkŞĄ‰żÄӏ \|Ę>^ăÜQGÄӏ \|Ę>^ăÜQ_W–˙şĂçůžuâ3Ş€çGąů•žVč=é´čt{™[ĺnƒŢ›_=ţ<˝NĚ?đ˘rżżäY´˙°ö˙§+j꫕řĽ˙"ͧý‡´ý9[WU\Ý ‚Š(¤EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP+đˇţE›żűkúršŽŞš_…żň,Ý˙Ř{X˙ӕÍuT1#—řšqák™GËÜ{Š(řšqák™GËÜ{Š+ęňß÷X|˙3ÎŻüFuPčö?2ˇĘÝ˝6Ώcó+|­Đ{Ók籿ǗŠŮ‡ţNWâ—ü‹6ŸöŃ˙ôĺm]UrżżäY´˙°ö˙§+jꫛĄ°QE€(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šĺ~˙Čłw˙aíc˙NW5ŐW+đˇţE›żűkúršŽŞ†$r˙N<-qó(ů{qEN<-qó(ů{qE}^[ţëŸćyŐ˙ˆÎޝÇćVů[ ÷ŚÓ 9Ńě~eo•şzm|ö7řňő;0˙‰ĘüR˙‘fÓţĂÚ?ţœ­ŤŞŽWâ—ü‹6ŸöŃ˙ôĺm]Ust6 (˘Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ŻÂßůn˙ě=ŹéĘ溪ĺ~˙Čłw˙aíc˙NW5ŐPĎ_âiDžŽ>e/qî(ŁâiDžŽ>e/qî(ŻŤËÝaóüĎ:żńŐ@sŁŘüĘß+tôÚt:=Ě­ňˇAďMŻžĆ˙^§fřQ9_Š_ň,ÚŘ{G˙ӕľuUĘüR˙‘fÓţĂÚ?ţœ­ŤŞŽn†ÁER˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(•ř[˙"Íßý‡ľý9\×U\ŻÂßůn˙ě=ŹéĘ溪‘ËüM8đľÇĚŁĺî=Ĺ|M8đľÇĚŁĺî=ĹőyoűŹ>™çWţ#:¨t{™[ĺnƒŢ›N€çGąů•žVč=éľóŘßăËÔěĂ˙ &ô˝GWđŕśŇVŐďbż˛ź.ŚhŁ"ę)ʗUrš‘§’8ŞŸnř‰˙Bˇ…đُ˙ä*ꨎSc•űwÄOúź+˙…Ç˙!Qöô+xW˙ ;ţBŽŞŠĺ~Ýńţ…o ˙áGq˙ČT}ťâ'ý Ţ˙Žă˙ŤŞ˘€9_ˇ|D˙Ą[ÂżřQÜňnř‰˙Bˇ…đُ˙ä*ꨠWíß?čVđŻţwü…GŰž"Đ­á_ü(î?ů şŞ(•űwÄOúź+˙…Ç˙!Qöô+xW˙ ;ţBŽŞŠĺ~Ýńţ…o ˙áGq˙ČT}ťâ'ý Ţ˙Žă˙ŤŞ˘€9_ˇ|D˙Ą[ÂżřQÜňnř‰˙Bˇ…đُ˙ä*ꨠWíß?čVđŻţwü…GŰž"Đ­á_ü(î?ů şŞ(•űwÄOúź+˙…Ç˙!Qöô+xW˙ ;ţBŽŞŠĺ~Ýńţ…o ˙áGq˙ČT}ťâ'ý Ţ˙Žă˙ŤŞ˘€9_ˇ|D˙Ą[ÂżřQÜňnř‰˙Bˇ…đُ˙ä*ꨠWíß?čVđŻţwü…GŰž"Đ­á_ü(î?ů şŞ(•űwÄOúź+˙…Ç˙!Qöô+xW˙ ;ţBŽŞŠĺ~Ýńţ…o ˙áGq˙ČT}ťâ'ý Ţ˙Žă˙ŤŞ˘€9_ˇ|D˙Ą[ÂżřQÜňnř‰˙Bˇ…đُ˙ä*ꨠWíß?čVđŻţwü…GŰž"Đ­á_ü(î?ů şŞ(•űwÄOúź+˙…Ç˙!Qöô+xW˙ ;ţBŽŞŠĺ~Ýńţ…o ˙áGq˙ČT}ťâ'ý Ţ˙Žă˙ŤŞ˘€9_ˇ|D˙Ą[ÂżřQÜňnř‰˙Bˇ…đُ˙ä*ꨠWíß?čVđŻţwü…GŰž"Đ­á_ü(î?ů şŞ(•űwÄOúź+˙…Ç˙!Qöô+xW˙ ;ţBŽŞŠĺ~Ýńţ…o ˙áGq˙ČT}ťâ'ý Ţ˙Žă˙ŤŞ˘€9_ˇ|D˙Ą[ÂżřQÜňnř‰˙Bˇ…đُ˙ä*ꨠWíß?čVđŻţwü…GŰž"Đ­á_ü(î?ů şŞ(•űwÄOúź+˙…Ç˙!Qöô+xW˙ ;ţBŽŞŠĺ~Ýńţ…o ˙áGq˙ČT}ťâ'ý Ţ˙Žă˙ŤŞ˘€9_ˇ|D˙Ą[ÂżřQÜňnř‰˙Bˇ…đُ˙ä*ꨠWíß?čVđŻţwü…GŰž"Đ­á_ü(î?ů şŞ(•űwÄOúź+˙…Ç˙!Qöô+xW˙ ;ţBŽŞŠĺ~Ýńţ…o ˙áGq˙ČT}ťâ'ý Ţ˙Žă˙ŤŞ˘€9_ˇ|D˙Ą[ÂżřQÜňnř‰˙Bˇ…đُ˙ä*ꨠWíß?čVđŻţwü…GŰž"Đ­á_ü(î?ů şŞ(•űwÄOúź+˙…Ç˙!Qöô+xW˙ ;ţBŽŞŠĺ~Ýńţ…o ˙áGq˙ČT}ťâ'ý Ţ˙Žă˙ŤŞ˘€9_ˇ|D˙Ą[ÂżřQÜňnř‰˙Bˇ…đُ˙ä*ꨠWíß?čVđŻţwü…GŰž"Đ­á_ü(î?ů şŞ(•űwÄOúź+˙…Ç˙!Qöô+xW˙ ;ţBŽŞŠŔđ—¨é6Ú˛ÚĽěˇ÷ˇ’%ŹÍ,içÝK8Pě¨[@3´rżEËüM8đľÇĚŁĺî=Ĺ|M8đľÇĚŁĺî=ĹőyoűŹ>™ć×ţ#:¨t{™[ĺnƒŢ˜B°*ಞ W#ę#ę4řt{™[ĺnƒŢ›_=ţ<˝NĚ?đ˘Eö=?ţ}%˙Á…×˙ŁězüúK˙ƒ Żţ;RŃ\×5ąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE §} LSâuWŐnAúПhđçüőƒ˙×üzşŤM{HđπôíKWźŽÎ×ěĐłťešIdŕ–wgcŔ’xüJđĚşšŞŰĎy!Ń,ŢňöÎ[9mŽŇ5Fp|™Őć ŰI:ő­œ"ŒÓ“W9Řĺđü’,qźNě@U]Vä’O@V^×MDg{YTÄę7@:“űÚî'ťŠ˙Cy6n†âŘśÇĺYzÓĄŽĂĎuáď<´›Ř;î$îeÜë†PßP ‰ěÍnUűG‡?çŹř6¸˙ăÔ}ŁĂŸóÖü\ńęíużč.šŁčšŚĽśĄŹČńéđ˛ą32Xd¨b2H’K‰m$ńmφV9Ĺ彄WÎä,Ç$’"€sŮ‰łĆ0G>…ŁýĂźpżhđçüőƒ˙×üz´xsţzÁ˙ƒkţ=]Ô^%´“š>Xç–ö_;<ł’HŠÎwf&ĎÁúj}ŁŢ‹Gú˙†xó´xsţzÁ˙ƒkţ=GÚ<9˙=`˙ÁľÇ˙ŻNűG˝Pń&˝o řwS×oY-´ëInćX€.É`  Ŕ8ÉZ-ëţ=ă€űG‡?çŹř6¸˙ăÔ}ŁĂŸóÖü\ńęôŤKôš´†ć0Á%Eu Ô3ÍIöz-ëţ=ăĚ~ŃáĎůëţ Ž?řőhTUJ¨ŕŰ>¤’~¤“]÷Ú=ëÍôÎ-GÝIćE•DŒ€Ő3ŠľĐâÝě̉§¸ů”|˝Ç¸˘‰§¸ů”|˝Ç¸˘ž›-˙u‡Ďó8k˙T:=Ě­ňˇAďM§Ĺ˙ ‹|ĐűÓ+çqŸÇ—ŠŮCřq (˘š‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ?[ßdř\ľ°ŸSƒBšˇźťłwČńľœůˆżĆČŇŤí2p=ăoí^ř“^Ň4]^(<¨éq›Ť m翸Ÿk"$2(„ňĎ%FL¸\ó]ÝśŁqikŁX\MöxR$E¸U dzç¨ć¤ţ؟ţWż÷Ô_ü]o-dÚü̢ҊLćţÚ_éłęPxšĆęoIn¤ęí.-ĺœQœb 'œĺňű‹VυŽ$đńôBňVJ´uk‡WLşđ źaGԆ'@~†ŤZE%Œv- óšÉpó–ŃœsÁĂ;dHęťoýhĹ%}ż­<ńöăŸř“ĹzŚ• Zi˝Ž…s{%ʰËm"Ü´ńÇä°uyś.w(aěsRx…´˝wĆéâ/ř]żÓď|%h#ˇ:L× Ł4ěb(”™C`9g÷—pϤ˙lO˙@Ťßűę/ţ.í‰˙č{˙}E˙ĹÔŮ˙Muý#É×Hňľ2O‰ŐüDŃř&ĆŇi"°–ů~Ú˛L]r€ţűž%ănIÜť†w|ámNçÄşe׋ôŃ{ŞXř7M„]^EçD—É,ĺ›qZT;Náó Ů{žďűbú^˙ßQńtlO˙@Ťßűę/ţ.‹?é şţ‘ĺ_ ô^ĎXĐĺşi4ßZŰĚş´ƒĂQ=ô­ űEóJĐÜ7lŠŔ•gFÓ4äřMŽéŠá N?…îíőKšt™Lח&H>ŐłmÁy9PŹÜccéŸŰ˙Đ*÷ţú‹˙‹Łűbú^˙ßQńtY˙M×ô™çşˇ…uM"[ËéŇéwš‚â1‰oŐĄ´’ řypěwu$ńĆF›ĄHžńiŃ­'ľ3řNňŇM.ÓÂWzhš¸dýŰ;K#‰ç:‚›‹o9c^łýą?ýŻ憎řş?ś'˙ Uďýő˙EŸôĐ]Iœ÷„´(ź=ń Km'Hk  Hş„‘BU%šI`ňĚ­š]­/-óťŽ+WL˙Q/ý|Ď˙Ł^ŽlO˙@Ťßűę/ţ.ŤŮÄĐÂUČ,Ň<Ž€ł ză8ĎôĽ¤uÖZďÄӏ \|Ę>^ăÜQKń/ţEkŻ•OČzŸqE}NXŻ…Ďó8+˙{i XĎe=˝Ä,…’X$ާ0`pA Žľ=|wű5|HńUőĺ燯ď…ä6v/uÄűž|‰"P…‰ů”ob2  ŕ=¤řŻXýl÷Ĺy˙Ůß[ýôekůÁ4wIr5ąëtW‘ë'ţ[G˙| ?á+ÖçşßŸöżŸđ˙‚?ŽtőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Čżá+ÖçşßřJőŸůîŸ÷ŔŁű _ĎřÁŽ˙tőÚ+Č[Ĺ:Áë:ß›˙ >ą˙=Óţřażçü?ŕëŸÝ;/Š×6öŢ˜ÜË HUł$ŽT I'É=¨Ż–żiox‚;Řź;ÂGk{błO"%`^DhÁÎŤO#8$“ĹË•knżˆ{5Qóž§˙Ůgwenhywfar-4.15.2beta/doc/dialog/images/fox16-4.jpg0000644000175000017500000006472712364015347016645 00000000000000˙Ř˙ŕJFIFQP˙ŰC  !"$"$˙ŰC˙Ŕüˆ"˙Ä ˙Äľ}!1AQa"q2‘Ą#BąÁRŃđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚáâăäĺćçčéęńňóôőö÷řůú˙Ä ˙Äľw!1AQaq"2B‘ĄąÁ #3RđbrŃ $4á%ń&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚâăäĺćçčéęňóôőö÷řůú˙Ú ?ő€˙ź9ŕ_ŮŻŘ,ŚÖ¤ˇ˙Mż˝ćv dQ! ŢVĺWaA ą$ú/ö&Ÿ˙>vż÷đŇh_ňˇ;#űŸŢúՒ}#‹ţúŻNNP“Œ]’8ôi6ŠŸŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŻŸôŻ‹>4Ń<'ă kÄ6Ú>Žú‰ćŇ,á…ŮZóÖ5V ™0¨<1ŰĄëšNŹÖ킄_CŢżątĎůň´˙ż”béŸóĺi˙+Č'řŤăUđ§Ű‡€ö_AŞ=Ó4S˛, ˜.žq —ŠŕŠŤŁüIńNŁńBĐ[Üč7>ŸÂ0ë&Ţ&pď$x‹F$2eJ„l  f—ś—ó1ň.Ç´˙béŸóĺi˙(ţĹÓ?çĘÓţţWÍWß|YŤĘšĚŇZiöW> Ôuhlô˝E™”ŠYrËňʸ# ’xâş{?Wśţ#đţ’šužŁ§]ßXi7ŚCq<(ß4ŒĄl˝šČ<íĺüĚ~Ív=ťűL˙Ÿ+OűůGö.™˙>VŸ÷ňž~đ÷ĹŮÜęš$iڅđŐuť•šŐîÚ(Łľľ”… ‚K`ńŘžjŢšń÷R]&]WIđć“ ˝Ż‡mľ™âÔŻž9e3śŐŽç zž38ŁŰËů˜˝šě{ˇö.™˙>VŸ÷ňě]3ţ|­?ďĺ7Mš7zuľÓC ™ĄI xČc?ôÎ/űč֜óîţňmÄ?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ň›ý‹¤˙υ§ýő˙׍˙ŚqßF˘?őÎ/Κ•GöŸŢcĹi?†žń6w4V6°ępÈ.ˇmh™wđO—–9\É ‚ ë~' čzŸÉ(;űŠ+Ҏ•xŠOr#QÁ´ŽëB˙$dt˙šŠÎ?šýőY0čö?2ˇĘÝ˝6źđéş°ş>эƜ‚;~ËűUŒă(=—ę(úç÷CęĎůŠVžđ]ĄœŰx7Л„’9ĘXD<ēŐž^U°24˙řBüýښŸü">űtm%ĎŘbóǏ,†ŰWtŔÇJľE\_ĘWĚUÔ<á BŰě×ţđýÔh{Ÿ.[(Ů|ç9y0GŢnçŠď\˙Ä?…zî­›RžkkXmÖŘŰZĂlFŤ#DŇĆv‘¨ bşŞ)ťýĐúˇ™§˙lă˙ž¨˙śq˙ßU™E]ţč}[ĚÓ˙śq˙ßTŰ8˙ďŞĚ˘Ž˙t>­ći˙Ű8˙ďŞ?íœ÷ŐfQG׺Vó4˙íœ÷ŐöÎ?űęł(ŁëżÝŤyšöÎ?űęűgýőY”Qőßî‡ŐźÍ?űgýőGýłţúŹĘ(úď÷CęŢfŸýłţúŁţŮÇ˙}Ve}wűĄőo3OţŮÇ˙}Q˙lă˙žŤ2Š>ťýĐúˇ™§˙lă˙ž¨˙śq˙ßU™E]ţč}[ĚÓ˙śq˙ßTŰ8˙ďŞĚ˘Ž˙t>­ći˙Ű8˙ďŞ?íœ÷ŐfQG׺Vó4˙íœ÷ŐöÎ?űęł(ŁëżÝŤyšöÎ?űęűgýőY”Qőßî‡ŐźÍ?űgýőGýłţúŹĘ(úď÷CęŢfŸýłţúŁţŮÇ˙}Ve}wűĄőo3OţŮÇ˙}Q˙lă˙žŤ2Š>ťýĐúˇ™§˙lă˙ž¨˙śq˙ßU™E]ţč}[ĚÓ˙śq˙ßTŰ8˙ďŞĚ˘Ž˙t>­ći˙Ű8˙ďŞ?íœ÷ŐfQG׺Vó4˙íœ÷ŐöÎ?űęł(ŁëżÝŤyšöÎ?űęűgýőY”Qőßî‡ŐźÍ?űgýőGýłţúŹĘ(úď÷CęŢfŸýłţúŁţŮÇ˙}Ve}wűĄőo3OţŮÇ˙}Q˙lă˙žŤ2Š>ťýĐúˇ™§˙lă˙ž¨˙śq˙ßU™E]ţč}[ĚÓ˙śq˙ßTŰ8˙ďŞĚ˘Ž˙t>­ći˙Ű8˙ďŞ?íœ÷ŐfQG׺Vó4˙íœ÷ŐöÎ?űęł(ŁëżÝŤyšöÎ?űęűgýőY”Qőßî‡ŐźÍ?űgýőQ`r/űę¨ŃBÇwńŐźÎOâX˙‰ |¸ţď÷˝čŠ>&œxZăćQň÷âŠú<%okB3ľŽZ‘ĺ›GUΏcó+|­Đ{ÓiĐčö?2ˇĘÝ˝6ž_üyzřáD(ŞWŠłę[L˘HZ)Ła•b ‘ߏCÔ ĹMoŔ­b&Żá†ŐDŚą ˜ ţ`ęž^wnăŚ3XrŤj_3ž‡OEeéhš„֖íč2öž[}U”0ú*KŤ=ŇÖ[ŤŤ]> xPÉ,˛FŠˆ dłŔrI˘ŃďřÁ ˡő÷U$Ó´Š],,™eXB¤ę8ŹWđ&ľxöz6§á˝Jć0KĂi<2şÁ%T’(´{ţđBňíý}ÇIETţËÓ?či˙~Wü(ţËÓ?či˙~Wü(´{ţđGyvţžâÝSű/L˙ u§ýů_𬍠ˇÚ•ĽÚ$öö“‚'PUfí퀠ŕ`UFš”\“؇QŚ“[ĎXę^ żŐdŇloü=u¨ÄH’ŇĄy“r€äcéZßŮzgý­?ďĘ˙…MŁßđ˙‚UĺŰúű‹tUOě˝3ţÖŸ÷ĺě˝3ţÖŸ÷ĺ‹Gżá˙w—oëî-ŃU?˛ôĎúZߕ˙ ŚĂĂë­GŁ5­ ž’ÝŽR/łbVUfÎ1ŐÔc9ć‹Gżá˙W—oëî5čŽs[Ő| ĄÝĹg­j^Ó.f]ńĂw<0ťŽqŹA# Ž=+]4Ý-Ô:XY2°Č" Ę‹Gżá˙/.ß×Ü\˘ŞeéŸô´˙ż+ţeéŸô´˙ż+ţZ=˙ř#źť_qnŠçuźiúž™ Š%Ş]HcœDĄwŽäťňpzŒœUm[ÄtB];U×|)ay<Ë{›ťx¤L€FUˆ# ƒô"ŠÓI)_rFŰVŘęčŽIžđŽ­wöm-ôťç6Šv­oÉDÎ菎ÓóFマ*âÁ˘6¤úp°ˇűBBł0ű'Ëą™”|Űv“•ŃŐx\Ōlm-FűÂ6ößižń,VĐ\yŰd}qăVÚβm>`+LWş|ąĆÄŰ>çf?{šˇýŁo˙<î˙đ_ţ&íůçw˙€’˙ń5ŔÜxßšٍé:„×ňZęÎ{dÖÝşks(Ů#mLÎ̧6ěM˝^—˙ö˝o5Γ­6Ł÷ŽI,ľ‰dUcćn\¤˜R<ćŕcLcbm~çf÷sOűFßţyÝ˙ŕ$żüMÚ6˙óÎď˙%˙âk†ń'‹tm+QÖŕşŇRdÜ: WťQJăąÎü9—E—ÂVoĄjŸÚVťi´ď´n]îĚF?ťž=p_<5Š_řsÁž!Ôľ;7´ŃĄžk[[I‰‘^2$”ČۆüŞŤ“ŒôŻ_˘‹â~ń5Ő׍´cĽ\ťAŞŘ]I5œţ ›P‘$UWA4nťm¤ ˘69a—!žÖźíkŔÂĎÄú­ţšwĂkśßČčˇ"Ńؤąś ˛d*Ł8;Aß\폅R-~fű[ŐľY­VEłŽí˘Űyœ1QjXŕm˖ gžNK…8řSŞkWÚî„÷ž!˛ţӒ)ťa6ż4÷,Ć&%~ÄŃ*ې/Ý meň z/†v˙jëۉ çóޏÜőŇU-?M‚Ęćęâ'‘šé÷¸b0IăsZÂiBIőˇćg878ľÓü(đFą‰Šh𞝥řłN ,0Ÿ[Ý5e’gF+‚T!܈ĸ<œŠ­đÇV×ďu]IuëÖ Nľ§\x‚iîO)Žßą4JśĹe ÷Hr2ů˝śŠĘć–k|Š’Š“ÁĄˇĹËa x†ó[ś˙„nVy'ż{˝Žn!ĎÎä•b0Jdăĺ\óęôQpąć^*ÓľWâÝ톓ŚŮŹţŽ;†ź°k QŽ%*‰őÜ=Ťâđř_JĂuőĺľÎ…á؍Ěţ!šÇÍ(ŽŞb†4au 1ĘĂ2Žőí”QpąăŢ#×D÷rĎâ?ß襟7owŁ-­ăŰ­ĹӉLĹUHH¤BGpÁű§5{­kCĄÇŹk‰§ŮKá{ŹîŻĄŚÁ{skq+Č­jűĐ)' óǰŤľ¤ćœ"—KţfpƒR“}Čó?i Ş|NցÔu;!…íÝ ŰŰś˙>ëkB ۃň“´çxŽkX׾íCEˇŸűjţÖ{Ď ř~v’Ţb›%žűlŽ p ƒÇ#ƒ‘Ĺ{•Í,yŒÖĎMÖu}/VńąĽŘŰč‹.Œ§UŸuÍĂ4ŢqË97¸ˆ›p†šŰOů7˙b‡ţŮ× ŃEÂǖéš>Ą¤čmăÍrůoĺ˛đťŰAm¤Y5źžQTĺšG/'îÔ)ů@äăšçôŻëą7‹-|9zˇŒž7ÖIoŽMŹ„¸ 딒T~ýŘ,2Śy÷*dče…ăgÝ}ۗsăc ŒlMşrčö’oÝ6 7îÎÝBuĆď38ĂńţľąŽ˜LcËMŽác#Ăňyž#‘źß3\Ž|Íý.äÎ÷éŒc#ĆÔĆĹçţCŻSÄG}Ľ xPßnÖNnIó¤žnĐ3ƒ÷őŰ[ižF°×Š+˜Ě,]ŮŰsH]šbpp@8 ŃŤŠ$ínÄS‹Wżsçk})üCáéďnîőŤÍF‡Í.WSš 4šU\*Aő“]U•Ž…­ëţśŃőëŰŤŚę&Y­u™¤°™ĎdLŞĂÇBAőú+;—c–řUwwyŕ{Wžşšîhn.­źé›sşĹs,HX÷m¨š=Ď5Äü đÖĽáĎř‡RÔěŢÓF†yŹmml&&ExȒS#ncňŞŽN3Ň˝~Š.÷ FÉśüĚççş‘ĺžŐěômkÞđďˆ4_é?źc‚Ř-ö™ÄĚ$™ŃŠŕîDb\u9„ÚöźŢđÜÚnˇŹÍ,ş$OâY#‘ŚkK"ăý%2Ů[Œy˜#,T;`˜Ö˝öŠĘć–!Ď…ô¨ü1§_^[\č^ˆŮÜĎâŹ|ҊęŚ(cFRÜŹ1ó(ď^ŮE =â=tOw,ţ#ń ţŠĂv÷z2ÚŢ=şÜ]8”ĚUT4ŠD Dw şsX÷şÖą$:zƸš}”žąšÎęóÄSi‹5ÓŤyÎdHßϐb3ąÎ9ÎÖÜqëž(đôšôfŻęúu´‘47Y4*ł!ę xٔă#(Tó׼kY[AegŹKźŹQ"ôUQ€Đ w î˜÷˛/„¤ÔŽ-îošĚ›™ Ď—,†ÜɐŇrGƒŇşŠ­qgל×lÎŰ~ŔÁÜ0sVj§$ÔRčżVL"ӓî˙DQEfXQEQEQEQEQEQEQEQEËüM8đľÇĚŁĺî=Ĺ|M8đľÇĚŁĺî=ĹőyoűŹ>™ć×ţ#:¨t{™[ĺnƒŢ›N€çGąů•žVč=éľóŘßăËÔěĂ˙ !EW)°QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEĚüUÖŻź;đç^×tÖEź°łyá.ť—ró‚;ŠÔ˙…qń;ţІ‰˙„Ą˙äşĎř™ _x§Ŕ߇4ơ[ÍFŃíâiäĆĽ¸Ë7`:ž§ĐĹz×öŐˇ÷ň` ˆíž+żńŠéö6ÇI#pę7 #œ¤ŒŕŽőç^Ň|iáÍ;MđÜ?ŘWzFž#ˇŠúYĺ[ł&Ą„&Ňá]Ţ`ŰÚĽŒ_ ü@ÓŻŻŽtÍRu‚őu›˝:.Öo$˜ĺu\ÄŹŞŇŔœđ9Žž2đăkŘë~ćçí×ŮĽň<đ2aóśů~gűˇgŒf°Çƒu!˘}ˆMgć˙ÂUýłťscÉűoŸˇîýýœcŚxÎ9ŹÝ+áí톮 –Ţ CK]]ľ(Ś—^˝Ł&ŕÜöEesÁÜŔ$g94 NĘ×ĹZ%޸ú5Ź÷71ĘĐČńYLđ$Š2Čӄňƒ rĽłž1šĺí>!ůż Yvľo7‡ĽŐţË24Iś6`_ěBĂsŘ AĆŻƒôxvâM!bŇŽtF˝šşKłs"Ý*Í#˰Ĺĺ•bČÝźdvÍržřkŻxŔş†ŹnôŮcÖ4ymď|Ů0Ţ<Ľ’7ŘYâ<ŹÜexůhĐ5;MĆţŐ-† !’ !{9ž O'4¨Ň(ţú–^œóOÓ|káÍFŢňk[ťŁö;oľK–Ç)‡œH‘˛‘N jĺu/xƒÄ–Żkâ.É Đ.t{g°wĘÓů[Śue] y+ˆÁn§ćéZ–ş?Œe×fń-üZ Zś‘%……ź2ź;ş;I+˜Ő•saśď˜ćé4ŸčÚľé´Ó/㼑mbťc,‚)3ĺ’ŕmËHÎ9Ć9ŹÝS̍‡ŽtM#aŞR+ďś|áŇ&+gO—Ü>•ŸđËÁˇž {ëîíŻ4ëҡ)ŒG0ť`¸U]žS`ĘrźŒa|eĽřş÷ĆzŠŁéúÖZL’É›­NXd”ÉFFՁŔĆ샸çŚv´QE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@żÄӏ \|Ę>^ăÜQGÄӏ \|Ę>^ăÜQ_W–˙şĂçůžmâ3Ş€çGąů•žVč=é´čt{™[ĺnƒŢ›_=ţ<˝NĚ?đ˘QEr›Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@É|eÔo´…ž#Ő4ۙ-oml$– ňŽŁ ×I˙ i˙čŠüA˙Ŕ‹ţEŞQ¸›ąfŠ}ݔ:mh×w+i,—W,YśČ໐,q“€`ŔŽÂ:ˇ3ý`ŮťfÝÜn˘ÁsŹ˘ší#ĹQęÚ´–şvŞÜXÇq-łębŢld‡Q™Œ)]Á äc5Ćio/žOyo<÷šíˇ‡%žťžŠü›YÄĐ?EŢNES‚Ŕ2X.zĽĹéż4Ő˛gÖí5-#ĘŇŰS^Ċˇ6č̑3Ë”`Żó–­éž3ŽîkŤIKť…äŽpX֊(¤0˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(—řšqák™GËÜ{Š(řšqák™GËÜ{Š+ęňß÷X|˙3ÍŻüFuPčö?2ˇĘÝ˝6Ώcó+|­Đ{Ók籿ǗŠŮ‡ţBŠ(ŽS`˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(Ǟ>,đnŤáĄ{ö•ł[›™¸ˆ7VÚ98¸Éî:׼ÂC­ˇýü“˙×!ER“BjĺÝrXnĽ]Ź’ŠVŢ;~gvÇ g†Ťđď…uý='MńL#@łu[K§šHTäB&ó6ěĺĆ[o|ó]Ž9řBżâSöí?ů˜ś÷ůô÷ö+żŕ;żvŹÝ3᝞™â}k‡d´:ƒ_ľhI-ěnŇKă1;IBĘ0ŕW ŃEÂÇ/áżjş ô–öZŐłh/u=в–ęѼv‘‘fł{’ŒœqšŔŇ>Âw>ŇőßłÚ_éRŘęm7G,ÍŒ\˘ď[óó ŕ ŕüŐčôQpąÁMđň}V-üOŻiDşDÚM§Ůí>ÎŃG.Íň1ŢŰĺ>T|€Ş0~^j姅|@/î5‹˙Ű\k+ŚžŸaq™ĺÇnŹĘÍ#Fdo1Ë"ó*üź“]\,rŢđt~¸šMÔn%ÓŽ‘d–Ţă29şé$ţa=d,¸Ćá¸c$ZŻ…żđîŁqqmg¨B`žH]šă8čNq׼w_đ’ÓOü•˙í•qi"Z9ÝFĘÇ@ÓmělaxěŹ-Ý#Bí#lI$ęĚK3qÉbI<’IŻ?đ ńWˆô-š>*–Ůuâ˝d6p5˛@řqbži}„űŔÝÎÜq^‘ŞÜÇu2_šíĺC€r}hŇŕuQE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@żÄӏ \|Ę>^ăÜQGÄӏ \|Ę>^ăÜQ_W–˙şĂçůžmâ3Ş€çGąů•žVč=é´čt{™[ĺnƒŢ›_=ţ<˝NĚ?đ˘QEr›Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ÜM źM4ňÇk÷Ř(şšŤýł¤ĐVÇ˙ük•řů˙$cĹżö —ůW¨§řY˙DÓÁŸř"ś˙â*ă’ÝŒXdŽhxdY"އ*ŔëČ#đ4곎[ŰévąZéÖQCmiÇokn$*"Žp+ĚţéRřƒÂÚŒ5k“j—đĹ}/“¨Č–Č[`ĺl_¸rĽ¸<皛 ô:+É|/ŹxƒD[›ľţĚ}ăĆWv@b´:őĐH$Ý´aŘ|›@'pÎ*ޙń^Ôu¤–ÓK’m1ő‡ÓMŹz5ăHąŹć¸7Xň0K”Ç ݸb‹ĎO˘šęţ"ń̺˼[h‹{sj–ŚÚGşe†G‹y—Ě ¤şˇaŔďšó_k÷šĎŔ}[O´ŽŢßOŇŤh–(ń´fÜEş™ƒƒç&$z—ĽmŘk-‹ÄřkS›C“PšŇdżąšˇś•a‰ŃŐ9ČK€dB2Ásľ˘¸…ž3žń˛ß_k;K6[F‰$ód{JáÇ“ó(CŒ°ů¸ äž)řęĐxŽĘĆßĹśÚD.ˇ§ÇyżXeşgž3(uÜ !cť?).sţŹŃ`šě´R#+ t`ĘĂ ƒE-!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@żÄӏ \|Ę>^ăÜQGÄӏ \|Ę>^ăÜQ_W–˙şĂçůžmâ3Ş€çGąů•žVč=é´čt{™[ĺnƒŢ›_=ţ<˝NĚ?đ˘QEr›Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ľÝ#L×ô{­Y‚K:î3ĚQĘc2!껇#=29ÇB5Ô˙ÂC7­Ďýü˙×1Ťę6:F›>ĽŠ\Ľ­şďšgű¨ž§Đ{×%˙ wáý'ţŠiž‚v=QşRŁ„eڤ̒Y˜ž[Ňš(ź áˆu! Œđ°¸űO‘ěëmćîÝćyü­ŰžlíëĎZŢÓŽ­ő 2ÓS˛•fłźˆMo*ýŮc$ᇱǸÁSQ¨đhŸdű'ŘżsýŁý§ˇÍřůó|ď39Ďúϛ;cT á =eľh`ť‚áçűCÇ üńŔňő.ĐŤˆŮ‰ä’¤“É­‹KŤ[´wľš†uŽF‰ĚN+Š*ĘqЂ#¨"ڤ3×Âş%Śš&łkͽ̒´Ň$Wł,# 3˜ůEŽybšĎ9ÍV>đˇŘa˛]/d0éďŚ(K‰TľŤŽÖ‰˜6]pN7ƒČÁćşJŞš–œúWö˛_ÚśŸĺţÔ&S–KďÎ6ăœçČŇüá7ígÓw­ĹŠłu¸žK…[sÖ3ý…ÂôăŠeź5ei{mÉ[Űo˛Lň_ÜI/3ˆ’Frń ÉůP]2ş+ŁVV ZZ.nŸ é~˘u $ľ­c´>Q*†(óąJ´íÉă gSőLŐâ†=FŃ'Xnbş’¸–'Fpʸ"ŻŃ@Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( _âiDžŽ>e/qî(ŁâiDžŽ>e/qî(ŻŤËÝaóüĎ6żńŐ@sŁŘüĘß+tôÚt:=Ě­ňˇAďMŻžĆ˙^§fřQ (˘šM‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ăçü‘˙Ř._ĺ_Aח_YŘę’Yjv6÷ör˛ŰÎĽŁ”u†yŁĄčr+gűjçűżůoţ.Ž2ą-\ĹFU‘š (IJ)č[͓ź{ánŕýCÁÚ‰őhŹŽÉńoý‚ĺţUô\b™-Řó 9ăN´˝kk›Quš°ÜÄcš1’0čyFă•<Ž„3[ÄŢMhhâ %uBp,äbr}<źîý+ĽńP•¤e‚ĘRPŒzódÁŻř[Źř?Ođv‡áZ[+FbKÝ:ĺťkýĂ|Ľ,ٓ.$Á!łŽjl;žĽjv:¤3Ka?œ\Km!ŘWląšG^@Ξ‡ľ\ŻÓ-î4č_ľŐ58îÇsZ˜Eۋs şƒDčacd1mÄ8¨4[_¸ńKÍzÂĂ[]}ă{;ŻLŽöbr˘4°ňźś  Č $Ĺ‡* ĎmʍźCŁËácâˆď3¤ Fź7[˙Š XśÜnč Ć3í\_oôëż\ {Äw‘řąu+¸Ć“&Ľ$j°ŤČ" j#§’ěNIÎěđ8 ^Ţ7Â;űO]ÜZJ<#qý‰k…mn`ű1Ţů÷“÷•žŕÁQÉbX.} ‰4)4mšC)Ć2"Ÿ^#ą}oer<­ęZÝĘřVć{čĺ¸{Żł^¨‹ČÂ1")NfýČ >AňŒVŚ…ŤhcUÔŁÓ<_Šę]Iľ[é5If6—Ô)YKŠB†RQHÚQp ő,=jłumBŇ.-íľmkMÓçš;`Žćé"iNq… Ao¸ƒšŽšy¨GâŰťőÖŢkip<Ľk|“˜Ă2łnóU`c<ˇŒŻľĆţ8ÔżˇÓUqhú›%¤RU* ˝K˛ů˘Aś"ĽK3‚(°\÷:)’€˛í$r3œRŇQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEËüM8đľÇĚŁĺî=Ĺ|M8đľÇĚŁĺî=ĹőyoűŹ>™ć×ţ#:¨t{™[ĺnƒŢ›N€çGąů•žVč=éľóŘßăËÔěĂ˙ !EW)°QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEŤ€ĘĹ#}¤0 q‘Č8 Ž?Ząöéżšm˙€Ń˙ń5ĎxŰ^‡ÂŢÔźEqn÷éđ4ňD„e^ gŒâŠh|I˙˘=­˙ŕăM˙äŠi7°›GUq<“˛™ üŤľB PIčI¨Šśéx4űIľ 6ąťš-óZ´Šín`P˛’ŹF9*HÎpHäó‘xëĂjBÂéćcqöo>;)ŢŰÎݡËóÂy[ˇ|¸Ý׎´jKEfřYľÖíîgľŽd[kŮěÜJ%ᑣb0OŠÇ|vĽHaEoâ˝:Ÿ$7CO{jYUóźľBäcv7`tÎ=č~ŠŽÖe¸śŠá *PzŕŒÔ”QEs>#ńχź=s,ąŐŕ˛+̚-ä°řÚ<ԈĆrXŠÇ^(Ś˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(—řšqák™GËÜ{Š(řšqák™GËÜ{Š+ęňß÷X|˙3ÍŻüFuPčö?2ˇĘÝ˝6Ώcó+|­Đ{Ók籿ǗŠŮ‡ţBŠ(ŽS`˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(Œřáms{đÄövvňÜ\ϧÉ0ąŢGnUG$’@uŻuţа˙Ÿëoűúżă^’E ’'hÜte8#ńŠ˙´/˙çúçţţˇřŐFV%Ť’ř }ĄŠĹ.ß1% "œă2ɂ+Ëžę˛xÂşƒőëę–Ĺc/“§HöÎW gĺložrÁšR ozĽ¤xU2ęŚKmm5÷šńřrćifśóÉXţܲyK BB můK Ÿm˘‹…6đ-†kâKíďŢIâĂŠ]Č5i4Ů$V…žCK­Ľ<’ˆ#Ü0F6ç“Ĺřg@×m>_YxƒDÔŻu; ύ*Úť Eű9 jb1L[ř2d ĄžŃEÂlj.‹¨ÉkvžĐľ= ďţk›{÷šŮíMĹ󟁽Ŕ̸›÷Ŕ°ů‡Ěsƞ…aŁCŞęWZGƒőK/ `IŠ`úTą5íÁuÚŤ (2ČÍVpmëóŢľE kđsIÖ´›ýB?Ú^>­%ź&ÖňW3˘Y„ľóBćFۡ÷rwäçĺŰń•Ţˇâßh˘ÖsĽŰĚÚ­üŢYň˜Ă"-Ý YdÇ\Eď]}\Š(¤0˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(—řšqák™GËÜ{Š(řšqák™GËÜ{Š+ęňß÷X|˙3ÍŻüFuPčö?2ˇĘÝ˝6Ώcó+|­Đ{Ók籿ǗŠŮ‡ţBŠ(ŽS`˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(â6˝7…ź ŹxŠ xî$Ó­Zábr@}źă#Ś}i˙Ř?żčđű˙7Ÿü‹Tž-čúŸˆ>řƒDŃŹä˝ÔoŹž h#Ć]Ř`xS€'ŠöżˇCý˟ü“˙‰ŤŠMjKlóčíŻ­l,×Uű0Ô"n–Ů™ĄY˛…€%FŢ ž¸Ŕä´ŻAŞÍšg‡őëÍ*i„1ęąÁŮßćŰź'šS?Ćn9Î9ŽďĹQ ÜĹ ‘hä‚­ľ¤“žyóOřsBŃü%sáYnWNŽ+!ŠĂyŰ< „•-ć‡Ř2Sa¸ÝŽjXÍo řÓGŐďgÓŚź°łÔŇúęÖ+źC4ËŻ˜¨pŘ; ŕzœfľF˝Ąoű k:wöŽÝßbűRyřĆsĺçv1ĎJácđާŠČš\kxŢ5ţÖ$<{Œmßćç=|žß{cľgi> Öíľ§ęQx‚ćŐ!Ńľ¨¤:vŠau, Śę(.RFˇb3ľŔ?)ë×),|Máťë+ťë/i7Vś@›Šáźă€IŢŔáp<ăĽyÎĽáx†Ĺ­"ŃĂFŰ¡Z2ťO-̲ˆśŞůLH…<Śĺ‚ˇď8QÍlXYë’xŠ>ŸŚ‚úzisnZúBęę Ł” BŞ\ƒűĆůGrŔw‘ßXÉyö8ď-ŢçÉů+*—ňÉŔ}šÎŇAéĹs ńţ™Łj:…´şfŤsmĽ˜†§}Q˜,üŔwîpíň˛ąŘ­€Fk3á…užĄ§ę6đ\%ŇEp—Đš+oŘđě_dXýŮmnpŮ݁ă˙řRńˆ.-´[Ëť›Öś:EäńĂek€¸óśČžd—*@qEĂE8ç­†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEr˙N<-qó(ů{qEN<-qó(ů{qE}^[ţëŸćyľ˙ˆÎޝÇćVů[ ÷ŚÓ 9Ńě~eo•şzm|ö7řňő;0˙ˆQEĘlQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW3ńWZžđďÝ{]ÓYňÂÍ焺î]ËÎî+SţÇÄďú*'ţ‡˙’ę”[v4¨§=œÚ]…Ľ˝ýę^]E WB/)euw á2v/ œ¤œ“ĆxwĹZţż Ś­ŚřZ# ^:˜.eÔB\ź,p&ů{vód GlńJŔv4WáˆuőőΙŞN°^Žłw§AĺÚÍ䓎ąŁKƒ••AÚXž"ľ×Ć^moűoÜÜý Úďű4žGžL>vß/Ě˙cvěńŒŃ`šżEbZřŤDť×Fľžćâć9Z+)ž‘FYpžPaŽTśsĆ3\˝§Ä?7á˘ë.Ö­âđôşżŮc†F‰6ĆĚ ŕˆX`n`[H8,=Šć´ř{Tśv€†H,…ěćx$<œ|ŇŁH ĆŘé$nC†á¤s‚T‘œŢźëÂ:O<9§iž‡ű ďHÓÄvń_K<ŤqödŔT0„Ú\ ťĚ#;{WoE+ÂęCDűšĎÍ˙„ŤűgvćǓöß?oÝűű8ÇLńœsYşWĂŰŰ \A-ꆖşťjQM.˝{FMÁ¸ěŠ ,Ę烸€HÎsé´QpąČř?Hń‡n$Ň-*çDkۛ¤ť72-ŇŹŇ<ť ^YV!܍ŰĆGl×)áφş÷‡ü ¨řjĆďM–=cG–Ţ÷͑ó áƒĘY#}…ž#Ŕ*ŔmĆW–˝fŠ.<ĎRđ'ˆÇćVů[ ÷Ś×Ďc/Słü(‘}O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´W5ÍlEö=?ţ}%˙Á…×˙ŁězüúK˙ƒ Żţ;RŃEÂÄ_cÓ˙çŇ_ü]ńÚ>ǧ˙Ϥżř0ş˙ăľ-\,Eö=?ţ}%˙Á…×˙ŁězüúK˙ƒ Żţ;RŃEÂÄ_cÓ˙çŇ_ü]ńÚ>ǧ˙Ϥżř0ş˙ăľ-\,Eö=?ţ}%˙Á…×˙ŁězüúK˙ƒ Żţ;RŃEÂÄ_cÓ˙çŇ_ü]ńÚ>ǧ˙Ϥżř0ş˙ăľ-\,Eö=?ţ}%˙Á…×˙ŁězüúK˙ƒ Żţ;RŃEÂÄ_cÓ˙çŇ_ü]ńÚ>ǧ˙Ϥżř0ş˙ăľ-\,Eö=?ţ}%˙Á…×˙ŁězüúK˙ƒ Żţ;RŃEÂÄ_cÓ˙çŇ_ü]ńÚ>ǧ˙Ϥżř0ş˙ăľ-\,Eö=?ţ}%˙Á…×˙ŁězüúK˙ƒ Żţ;RŃEÂÄ_cÓ˙çŇ_ü]ńÚ>ǧ˙Ϥżř0ş˙ăľ-\,Eö=?ţ}%˙Á…×˙ŁězüúK˙ƒ Żţ;RŃEÂÄ_cÓ˙çŇ_ü]ńÚ>ǧ˙Ϥżř0ş˙ăľ-\,Eö=?ţ}%˙Á…×˙ŁězüúK˙ƒ Żţ;RŃEÂÄ_cÓ˙çŇ_ü]ńÚ>ǧ˙Ϥżř0ş˙ăľ-\,Eö=?ţ}%˙Á…×˙ŁězüúK˙ƒ Żţ;RŃEÂÄ_cÓ˙çŇ_ü]ńÚ>ǧ˙Ϥżř0ş˙ăľ-\,Eö=?ţ}%˙Á…×˙ŁězüúK˙ƒ Żţ;RŃEÂÄ_cÓ˙çŇ_ü]ńÚ>ǧ˙Ϥżř0ş˙ăľ-\,Eö=?ţ}%˙Á…×˙ŁězüúK˙ƒ Żţ;RŃEÂÄ_cÓ˙çŇ_ü]ńÚ>ǧ˙Ϥżř0ş˙ăľ-\,Eö=?ţ}%˙Á…×˙ŁězüúK˙ƒ Żţ;RŃEÂÄ_cÓ˙çŇ_ü]ńÚ>ǧ˙Ϥżř0ş˙ăľ-\,Eö=?ţ}%˙Á…×˙ŁězüúK˙ƒ Żţ;RŃEÂÄ_cÓ˙çŇ_ü]ńÚ>ǧ˙Ϥżř0ş˙ăľ-\,Eö=?ţ}%˙Á…×˙ŁězüúK˙ƒ Żţ;RŃEÂÄ_cÓ˙çŇ_ü]ńÚ>ǧ˙Ϥżř0ş˙ăľ-\,Eö=?ţ}%˙Á…×˙ŁězüúK˙ƒ Żţ;RŃEÂÄ_cÓ˙çŇ_ü]ńÚ>ǧ˙Ϥżř0ş˙ăľ-\,Eö=?ţ}%˙Á…×˙ŁězüúK˙ƒ Żţ;RŃEÂĹ)ßA‚SĆ8¤Uő[G~†jgÚ<9˙=`˙ÁľÇ˙ŽŞÓ^Ň<3ŕ=;RŐď#łľű4,îŮf’Y8eŮŘđ$ž@żź3.…ŽjśóŢHtK7ź˝ł–Î[k´Qœ&uFů‚śŇ@Ž˝kg§c4äŐÎv9|?$‹oťWUš$“ĐçU—ľÓQŢÖEUą:Đ¤ţöť‰îâżĐŢM›Ą¸ś-ąŔ9V^„tčk‡đÁ3Ýx{Ď-&öű‰;™`wúá”7ÔG"{3[•~ŃáĎůëţ Ž?řőhđçüőƒ˙×üzť]oĆ:‹Žhú&ŠŠGm¨k2šŸh÷˘ŃţżáƒŢ<Çí˙ž°ŕÚă˙QöĎX?đmq˙ÇŤÓžŃďTÔőŰĖKm:Ň[š– ˛F…Ř($p2G֋Gú˙†xŕ>ŃáĎůëţ Ž?řőhđçüőƒ˙×üz˝*Ňý.m!šŒ0IQ]CuŒóR}ŁŢ‹Gú˙†xó´xsţzÁ˙ƒkţ=ZUŐRŞ8ąlŠ$ŸŠ$×}özó}3‹gQ÷Ry‘GeQ# ľLâ­t8ˇ{3âiDžŽ>e/qî(ŁâiDžŽ>e/qî(ŻŚËÝaóüÎ˙ÄgUΏcó+|­Đ{ÓińČ"Dž#t>ôĘůÜgńĺęvPţBŠ(Žc`˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(ĆÖ÷ßŮ>×-l'ÔŕĐŽmď.ěŕ]ňb/ń˛4ŞűG$ŒœĎxŰűCĆž$×´W†Ęę:\fęÂ[yďî'Úȉ Š$!<łÉQ“.<×wm¨ÜZZÁhÖ}ž„I@ŽBƒ†`AŔšę9Š?ś'˙ Uďýő˙[ËY6ż3(´˘“9ż…v—úlú”&ąş›ÄR[Š:ťDĆ ‹_ůgg‡gC ç9|žâŐłác‰<<}Ÿü•’­ZáÁUÓ.<ďQő!‰ÇĐĄŞÖ‘Ic‹B|ć˛\F<Áĺ´gđpĎŮ:‚.Ű˙Z1I_oëcĎ<}ŁřçĹž$ń^ŠĽh€ZGocĄ\ßŢÉk,2ŰHˇ- ÓaW‘yŃ%ňK9fÜAV•Ó¸|ĂvGŢçťţ؟ţWż÷Ô_ü]Ű˙Đ*÷ţú‹˙‹˘Ďúh.ż¤yWÂ}WłÖ49nšM7ÄVśó.­ đĹÔO}+BÁžŃ|Ň´7ÍŰ"°%@ YŃ´Í9>kşjxCSƒÇá{ť}Rî]&S5ĺɇľlŰp^NT+7ŔĹzgöÄ˙ô ˝˙ž˘˙âčţ؟ţWż÷Ô_ü]ÓAuý&yî­á]SH–ňßŔztş]ćŁŕť¨ä¸…Lb[őhD-$‡ƒ>\;ÝIçŸ"H”!b~e،‚G8i>+Ö˙[ýń^öwÖ˙}Zţ_đM#]Ň\lzÝäGĹzÉ˙–Ń˙ߏřJőŸůîŸ÷Ŕ§ý‡/çü?ŕëŸÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠň/řJőŸůîŸ÷ŔŁţ˝gţ{§ýđ(ţ—óţđCëżÝ=vŠňńN°zΟ÷ŔŚ˙ÂOŹĎt˙žŘoů˙ř#úç÷NËâľÍ˝ˇ…ć72ĂlÉ+„U’IŔrOj+ĺŻÚ[Ç^ Žö/Ĺp‘ÚŢŘŹÓȀ‰X‘0s€„*ä“ČÎ ¤ńrÁĽBŰŻâÍT|ďŠ˙Ůgwenhywfar-4.15.2beta/doc/dialog/images/gtk2-6.jpg0000644000175000017500000003300212364015347016531 00000000000000˙Ř˙ŕJFIFQP˙ŰC  !"$"$˙ŰC˙Ŕë?"˙Ä ˙Äľ}!1AQa"q2‘Ą#BąÁRŃđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚáâăäĺćçčéęńňóôőö÷řůú˙Ä ˙Äľw!1AQaq"2B‘ĄąÁ #3RđbrŃ $4á%ń&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚâăäĺćçčéęňóôőö÷řůú˙Ú ?÷_x/LÓ4xžH –éăýäĄóźœnů°܎|’ž3Ő<;ᅶŠ}4^ęŒRŇĆŐˇK1O$Q݉WCĄČÜěî{ë_7üfÖő]?ă.Ť4.#0ÚÁťc;c(íúšjúźŤ<Çčó[w÷Up´# q˛HőüE6ŸŰ5Ÿ‡ë ˆ’K;őš–!ęŃár}ĽąŽĎHśđöŻŚ[ęZlvV—)RS†ĐűE|°śŃżÔŇ„’=ŁűL˙Ÿ+OűůGö.™˙>VŸ÷ň¸OÚWÔôO†w†“rÖWKcšĂ{¨•‡ĐŠ ýkřcă˙=Ÿ‹Ż|Uiľ™â˝>}šę=’#U]Ń(čçć=ëäÝY§kżźŮB6˝]ţĹÓ?çĘÓţţQý‹Śϕ§ýüŻÔ˜ţĹÓ?çĘÓţţQý‹Śϕ§ýüݏřšă 3Bđ•‡ö™­kşĆ’ÚƒKlf’9]ąŚDŹ[ćŔ žâľő‹:厳 5׆ Ň4MJŢÉćťźĘ#–vĂBZ%"6^.bGAÍ?m/ćbökąë?ŘşgüůZßĘ?ątĎůň´˙ż•ćż|KăÜř˛?ĎŁ\G§kזPˆ‰bňä&€cîł|Ç˝z†éœ_÷ŃŞU&ŐîÄăЇűL˙Ÿ+OűůGö.™˙>VŸ÷ňŚĎý3‹ţú4gţ™Ĺ˙}|óîţńZ=ˆątĎůň´˙ż”béŸóĺi˙*l˙Ó8żďŁFéœ_÷ŃŁž}ßޏbě]3ţ|­?ďĺŘşgüůZßʛ?ôÎ/űčџúgýôhçŸw÷…ŁŘ‡űL˙Ÿ+OűůGö.™˙>VŸ÷ňŚĎý3‹ţú4gţ™Ĺ˙}9çÝýáhö!ţĹÓ?çĘÓţţQý‹Śϕ§ýüŠł˙Lâ˙ž˙ŚqßFŽy÷xZ=ˆątĎůň´˙ż”béŸóĺi˙*l˙Ó8żďŁFéœ_÷ŃŁž}ßޏbě]3ţ|­?ďĺŘşgüůZßʛ?ôÎ/űčџúgýôhçŸw÷…ŁŘ‡űL˙Ÿ+OűůGö.™˙>VŸ÷ňŚĎý3‹ţú4gţ™Ĺ˙}9çÝýáhö!ţĹÓ?çĘÓţţQý‹Śϕ§ýüŠł˙Lâ˙ž˙ŚqßFŽy÷xZ=ˆątĎůň´˙ż•qŸöć°ÓôHďîP đ‘çŚć=°É­|˙Ó8żďŁYŢ•—CYAi¤g˜÷.IÎkĺx§ˆędÔŠ´ßźŢ˝­ë§SŻ †fîś*NśV˘kZv !ÚłůťâјcoԌ{֕ΙŁ[[Isqmc1Šwv—@ęjo˛Ühwq]ŃŽwjóÔnoži&` mŠi’KĹ’*gţřJóň.0ŠĄ^nďŮŤëůiĄ–gJ8:.ŞW˛gUo1żí:WƒÖkCĘKqsä™ŞŽ ÇŚqVô)t-Râk6Ó#łż€f[[†Úŕx`á—ÜŽ+ukđ ,űTQŠćźKŤ\ŰřŻĂ—čC]č­ĎmńČáXu$ÔeÜ_W‰…&Űćvűű[őšň<úëß.îŰ#˝ń=΁ ­źRi‰w{tĹm­-Žé%#ŠęQ݉VUƧ%„?jŐ| ąŮ™ÖđO$cÔŚ@ﴓőŽ/Ç:•őŻĹ RT`ź0Ŕqą” q˙-T˙á%ÖyÝxX ¨ŻœU§UÁ7ĄűVYÁĐĹa!YŮó+őëÚß­ĎeŇěü=ŠéđęX\ZÎťŁ‘ éôę+Ë>-řNŠĺ5+6ň6>Öğ)$†äp1Ücƒ‚ŔÍđPžKŻi…TÚÁqń‚p¤ß¸o”TßĆt)>Hů¸^‡ë_M•Ő–"*roT~}ĺtcRŚ˘M&Ő˙ާ§č_ň€ěîŸâ÷5ĹüOđ;xŽhľ]3ěQęG嚥š9ŘřäI!‡LžšăŞś¸ű7†mŽBC3í`@î=ˆ9ůGëU˙śßţ|m?ň'˙\Ż<.!ʞ3HRç„]ú'ük,ĆÖĂŔšF);Měˇë,iţŇŽIý+Ö~x2řx؉îöâC5ĺÉă͐úŔtŻýś˙óăi˙‘?řŞ?śßţ|m?ň'˙U‹Îńť{W{y•ő{lËzž§ę–†ĎSÓlom‹+˜n#!e!”ílŒ‚„ ‚ÇCŃl5;˝NÇDŇíoď9şš†Ig˙}ŔË~$ÔŰo˙>6Ÿů˙ŠŁűm˙çĆÓ˙"ńUÇőżî‡°ó ź9áůŻZú_hň]<ërÓľ˛ ŞťBŘÎनn tŞúWƒź%¤Ë4ş_„ô žłĘÖÖQĆd‹ű‡h_n•‘ŕŢxƒĂŸÚwZm„rëا™€‘]K'j.Osž+űm˙çĆÓ˙"ńT}oűĄěr•ǁ|qĽC¤ĎŕĎI§Á#I а‹ĘŰď2ŽÜ{‘Ö¤—Áž—PłÔeđ–€÷–(‘ÚNlŁ/§ÜT8ʅěNŐgűm˙çĆÓ˙"ńTmżüřÚäOţ*—Ö×ň‡°}É,t=ĂSťÔětM.Öţ󛫘`D–÷Ü ˇâMhŰ8˙ďŞËţŰůń´˙ȟüU`x“ơšwˆü1ŚAŚŘő[頝›ĚʢZÍ(Űóő܋Ϧ}rÖüƒęţgg˙lă˙ž¨˙śq˙ßU—ýś˙óăi˙‘?řŞ?śßţ|m?ň'˙G×<ƒęţf§ýłţúŁţŮÇ˙}V_öŰ˙ύ§ţD˙â¨ţŰůń´˙ȟüU\ňŤůšŸöÎ?űęűgýőYŰo˙>6Ÿů˙ŠŹřÖóÄţÓşÓl#ß^Ŕ<ĚŠęX“řů;Qr{œôéG×<ƒęţgg˙lă˙ž¨˙śq˙ßU—ýś˙óăi˙‘?řŞ?śßţ|m?ň'˙G×<ƒęţf§ýłţúŁţŮÇ˙}V_öŰ˙ύ§ţD˙â¨ţŰůń´˙ȟüU\ňŤůšŸöÎ?űęűgýő\g‰ŻćjŰ8˙ďŞ?íœ÷Őe˙mżüřÚäOţ*íˇ˙ŸOü‰˙ĹQőĎ úż™Š˙lă˙ž¨˙śq˙ßU—ýś˙óăi˙‘?řŞ?śßţ|m?ň'˙G×<ƒęţf§ýłţúŁţŮÇ˙}U?kšľ–şšN“SÜMÔȓęgEHś€œĺä‰IT*ŞX“‰$Sęž0o“ibřßĺďŐĽ]Řóvgœgmžză̓źľó_×<ƒęţfýłţúŹ[˜ő&ęk˝Ţ Č&%ĺłiçŠBxçŠՙőO7É´ą|oň÷ęŇŽěyť3ˆN3śß=qćIŢZů¤ú§Œ›äÚXž7ů{őiWv<ݙÄ'Űož¸ó$Ćď-|Ţ},>>—˛Ż ŁJp•7xČć5é|u⨎——‡Ź¤â{™fG}˝ö*““őŔúôފ?éąx^?ĹnŠg+x™vôl˙{#9őŠgŐ<`<ß&ŇĹńżËߍJťąćěÎ!8ÎŰ|őǙ&7ykćňţ&ńłqâżŰ=ÍŐ´:íü3Ŕ$”,É­ŘBÁŐ bž0W8*\s– …ŔStčÓŃďćĄ*ß!źƒĹzXň‡-uŔź%Ä7 #śĺfý8¨ü/á-nűÄĐx—ĹiiŮ2ltč\0ˆ#{‘Á €3ë“Ć=ŠĎ €ÁáŞűZtőţźż3ĎŁ”ĐŁ>x-}_Ç>—Wš-OLű$Z”)唟˜Ž#Îv7q‚ItÉü8KĆÓ1´°đNc3|Śň[Őx×Ü “úö:+ŞŹh՟<ŁŠôx\Ó…ĽěŠÔÓúóüÎcá߄bđŽ„ÖĎ*]ß\ËçŢ\ž<ÉDzŔË|Xń#?ťýz˙Ö˝Bźďăa˙‰Lcr™x#žŚ˝źłOfŁm;ÎNíłś”çÁÖ˙2ˇď“ ö’źťĆ—šś•Ž>Ży6Ľ˙ôÖӦˆwŢŢcʎ2ęAOşI.y>­^-âk†Ą+@ĂőĹswŢ śżÔ#Ôo|)Íä{vO.ŸşEÚrż1\đy‡Ľy¸żăËÔևđŃçWž9Ö.´=jţ=dÓâ´ż1Í’7… Ţ´„m%ŠťĘœ›’.^ř§]Ňĺńł {ŘĄÖ ÓŹbX›t~lVänŰËć1Ć2Xă Žáźf×W7MáZ{Ľd¸éŔ´ŞĂ íůőďR]x:ŠnŚšđ´sIv‚;—“O Ó ĆÉ_˜  Žcc#ášžŻĄĚu y´ť˝ňB$Hö’?†TYÇ08 ŽGX>ÜÝÝx]^úî[šăźź€Í.7şÇu,k  íP8ş+O ›M9´ë_´6N=şYb6 ÷˛¸ÁĎZfáôX^Ă ŚĹ#nt´°ň•›Ô…Q“@?ř|šœŸďcŃgŠ IŻ5Uľ’LmY őĆŇrëęĐôŞŃxş÷J4łŐŰY–ĺRHőˇB1<ĐÁˆňŰ H# NÁéţř[Vm7XđĺčYoő6Úîɰń˝ěě2Ź9VVg‚=ëe<§&žúzx:ÝmA+Â4ᱜ #oŢżZpZ‰üE &ŢĽ_˙ĜK ĆdDóď%…Ô) 9ŕŕŽ„ Ô˛ńfłsâ‰t贏:ŇÖőlndH¤Čo-YĽÝ÷B‚Ăĺ<•ůłÚťŕŘ ›ŮŸ Ćm¤‰!xNž64hK"ۂŞYˆ'i‚­†Ą <)ź…UcœiăzPnFĐP#—ńƒŢ˙oiöú6Ż|5Ie‰Ĺš6én˛:IA\í+šG9-´.9"/Čůŕű ]éĹuwţłżÔSRžđ„WČ-ĚÚhyT)ĘáŠä`’GŚkĆ>×§ń§‚. Ń5)aśÔn^yŐŮbSe:‚Ä (,Ŕd÷ w  o^jÚV¸ú˝äڗü#ĐC[Nš mß{y*8ËŠ>é$pšäć^xçXşĐőŤřôy“OŠŇüÇ4bHŢƒxRŇ´–(~ď*p>nHô[ď[_ęę7žŽćň=ť'—OÝ"í9_˜Žx<Cґźf×W7MáZ{Ľd¸éŔ´ŞĂ íůőď@Î÷Ĺ:î—/ˆĽ˜[ŢĹľcÄŰŁóbˇ#vŢX1Ž1’ÇŒtžźÔu í+i´Ë’ňBĄ#˘ĘŠŕ•Č áÁ¨äëÝx:ŠnŚšđ´sIv‚;—“O Ó ĆÉ_˜  §Aá%ƒK}* yvlś8‰Ă}ěŽ0sß=hÉü<ťÔŢë\ÓőInźË;¤Cu"K,Q´JĂ2 mÄHîzc+áňjr|#˝Ež(5&źŐVÖI1ľd7×IČ#ݍ?CŇ˝HđŠŇ-šŰJđëXÂĚ]َł1ŠcԐ'Ís_ |-Ťś›Źxrô,ˇú›mwdŘxŢövVŤ+3Áô ć"ńuî•:h)gŤśł-ʤ‘ę%n„*byĄƒ— 圐Fœ‚ýGÄţ"oŇŻ˙âN%†ă2"y÷’ÂęŒ…đpGBwŠŕ94÷ÓÓÁÖëhň ^§ Œŕ`9~đúÔçÁ°7ł>ŒŰIBđŽi.ĐGrňiášdš+óÁôÎAwâgÁ: Šßű/Z1\Ai#Ť"™6‘ 0%FJœpAëÔŻ/.\jz^ nMý…ÂŹĆ[Ľ¸\Ůa a%˛Řâ' ÷˛¸ÁĎ|ő§i>m"ÔÚé^k 1Ű٘ԹęÄÉă­â‘2jÖkŻ.ˆfŇľ]ľĆÁó irđťžđF+ťýdYĞsmă)ô¸?ł4˜ôŰH´˝VÇTV4ęK‚9 P[#‘Ըǯx˘-Tëë¨i grąĽÔmĹÔ°Ť—ÚѰ(ÍSş2ÁdfVd–´ŇxRXŕŃôwAżËWÔdPßëśçggŽ<É>÷–žh™ęšţľse5ÝĆŻkŚÍZ×7ö2ŤFc{ůŇF/’ž^Ő FHÁ`IŤ§řÇ\šńéŇŇ˙Nű÷–žh3Ξ#ęל?ç–îkVľ˛˛˛›MÓćžXŢúWžE”@ÔF#‡ĆPaC’oj‘y>0ř|žO•Ÿk ˇĘňóş ăť\yÎs§vsž\ůŰÜMâ,ČbŇ4‰ ďň‹ęR.×lĎîÜâ ă8ó$űŢZůźś§ĄęIâ˙ˆ4ç• ×őKŠÚÖ éKoxĘîR4 “"‚HÎćÁi.ŔEOö+ĎůôŸţýš>Ĺy˙>“˙ßłH(ŠţĹy˙>“˙ßłGŘŻ?çŇűöh 󿍇ţ%1Ę>eŕŽzšôżą^Ϥ˙÷ěט|iž°’Ů'…Śľ™"¸ˆ^'*+Şvş6fĄée_ď&aˆřIŇN|/Ě­óŻAţý`KâI'Ô.Źtë^"–ÍüťśÓŇ%ŠĆJ&’4gŒŞ’Ă# fˇô“Ÿ Ĺó+|ëĐż^-ă}âψ~ ř/OřGŤKiŠésI‰Ąľż[IÚôcĚfrW3Ír3ó °ĂϊWŻ/QŃţ=WAÖí5p‘Gskwi ŽîÎîöěF@e=ˆä0ʰä*ô÷6Đ:$÷DŇ wąöĎ^˘šĺűkxűF‚öî ÍcNđşŰx’âš%Ó<-8ďňÝ0@”Ă<çŏ jŢ$ń>››m§:U‰ĽÔtöš]äłŘ™ ˘7mŹCÜ+|­ƒŽfľ5=&Ąšşśľ]×70Â6łfG Œąç°ŸJňmOUń"K .§ř’ĎěöúhOč2´ĄgY§–ěç= Á9ž"_]ůóŹ>"šÖa˛Ö„ń5Œm…X[ŹDŚĆĘŕ(Bw˝–˘Ă=ƘŇIJ$m"+žvŠa–Ç\őçuâ?řNĚaőŸ?űaQaďöěď ĹöěÝť';ˇďÂýŢ*ߎ…”|¨ ň{¸.äóď-´™§1ŔÖתŇƄó~Rxݜcšî袊@QEQEQEQEQEQEQEQEQEQEQEQEQEQEŕšěŽóř케ŸřJ@ůš8V ~ W˝×kG÷ž<”ĹUЎăĘÖ˝,ŤýăäĚ1ďÚIυâů•žuč?ߏ-Wš&ٍžĽ$7vˇŇ(Intűů쥕GEwĐ¸ƒŠÝŇN|/Ě­óŻAţý`KâI'Ô.Źtë^"–ÍüťśÓŇ%ŠĆJ&’4gŒŞ’Ă# fšńǗ¨č Śh–?bҬⵀš‘‚]ĎŢv'–c݉$÷5zł4nÓX w6ˇv’îěîá1OnÄdS؎C ŤA"ŻOsm˘OqM!Âp lőę+”Ř–Š*›ŤkUÝss #k6dpź(Ë{Éô  ¨˘˘’ćÚ;ˆížâ%š@JFÎ0p:š–Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ź Z?˝ńŕÜŁţ*Ž„s˙VľďľŕZŃýďĺńUt#ŸřňľŻK*˙xů3 GŔ{ö’sáxžeoz÷é~Kn~höjčoěc6ÚŞó-ň“ö‚ĂŐ¤,ů=CƒĐƒI¤œř^/™[ç^ƒýúÂŐ|)˘j:‹ęRCwk}"„–çOżžĘYTtWx Ř18Ž|SľyzŽđŃcÄňŰÝ|eű=њËC’XĄÎćíQżÚ .[@ââž,xkVń'‰ôŘ4Űm9Ôh:ŹM.٧ľĚ ď%žÄČeťmbîá[ĺlwzŚh–?bҬⵀš‘‚]ĎŢv'–c݉$÷5zš›ÔÔň OUń"K .§ř’ĎěöúhOč2´ĄgY§–ěç= Á9ž"_]ůóŹ>"šÖa˛Ö„ń5Œm…X[ŹDŚĆĘŕ(Bw˝–Żq˘‹Œó—şńü'f0úϟý°¨°‹wűöw bűvnݓŰ÷á~ďďˆKa¨xˇMŃßAťG2Ű]Üë1hÓNTE0xáŽXă`ŹY~f$B{ˇ‰EQE (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ đ-hţ÷ǃrřŞşĎüyZמׁkG÷ž<”ĹUЎăĘÖ˝,ŤýăäĚ1ďÚIυâů•žuč?ߏ |I$ú…ŐŽáÝkÄRŮż—vÚzDąBřÉC$ŇFŒŕ•RXdd Öţ’sáxžeoz÷é~Kn~höjčoěc6ÚŞó-ň“ö‚ĂŐ¤,ů=CƒĐƒ\řĽzňőáŁ+AÖí5p‘Gskwi ŽîÎîöěF@e=ˆä0ʰä*ô÷6Đ:$÷DŇ wąöĎ^˘¨xž[{݌ą˙gş3YhrCŤ9ßѽŞ7űAEËc¨üC››m§:U‰ĽÔtöš]äłŘ™ ˘7mŹCÜ+|­ƒŽfľ5=&Ąšşśľ]×70Â6łfG Œąç°ŸJňmOUń"K .§ř’ĎěöúhOč2´ĄgY§–ěç= Á9ž"_]ůóŹ>"šÖa˛Ö„ń5Œm…X[ŹDŚĆĘŕ(Bw˝–˘Ă=ĆĄ’ęÖ;˜í¤š…'e#g›č:šó÷şńü'f0úϟý°¨°‹wűöw bűvnݓŰ÷á~ď|[ˇŠúďOˇ´ąžăRŽćÖ]‰ŁI!uuQvl!päÜgśF@=Š(¤EPEPEPEPEPEPEPEPEPEPEPEPEPEP^­ŢřđnQ˙WB9˙+Z÷Úđ-hţ÷ǃrřŞşĎüyZ׼•ź|™†#ŕ=űI9đź_2ˇÎ˝űő…ŞřSDÔuÔ¤†îÖúE -Ο=”˛¨čŽđ:°bq[şIυâů•žuč?ߏ |I$ú…ŐŽáÝkÄRŮż—vÚzDąBřÉC$ŇFŒŕ•RXdd ×>/řňőáŁCCŃôÍÇěZUœV°20AËšűÎÄňĚ{ą$žćŻVfƒ­Úká"ŽćÖîŇAݝÜ&)í،€Ę{Ča•aČ$Uéîm tIî"‰¤8@îcힽEr›ŃECsumjťŽna„mf̎…cĎ`9>”5Sd’8öůŽŠš‚ŽăŒ“Đ}hÔQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEŕZŃýďĺńUt#ŸřňľŻ}Ż֏ď|x7(˙ŠŤĄ˙Ǖ­zYWűÇɘb>ß´“Ÿ Ĺó+|ëĐż^-ă}âψ~ ř/OřGŤKiŠésI‰Ąľż[IÚôcĚfrW3Ír3ó °Ăí:Iυâů•žuč?ߏ-Wš&ٍžĽ$7vˇŇ(Intűů쥕GEwĐ¸ƒŠçĹ;W—¨č˙ Wí­ăí ۸/5;ÂëmâKˆ>ä—Lđ´ ăżËtŔuPp óŸ<5Ťx“Äúlmśœę4V&—QÓÚćw’Ďbd2ˆÝśą wp­ňś;˝GÓ4KąiVqZŔ\ČÁ.çď;Ë1îĒ{š˝\Íęjy§Şř‘%ĐGÓüIgö{}4§‚âF™ZPłŹSË ˆösž…@ŕœß/‰ŽüůÖ\ë0ŮkBxšĆFśŠBŹ-Ö"Scep!;‡ŢËW¸ŃEĆyËÝxţł}gĎţŘTXEťýƒű;Čą}ť7nÉÎíűđżwŠŻńWMń=÷ˆ´›ťmu>ĂQ°’Ńc¸!’O´)–WM§˘€Ąż…L‡ř¸ôę(¸QHŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ź Z?˝ńŕÜŁţ*Ž„s˙VľďľŕZŃýďĺńUt#ŸřňľŻK*˙xů3 GŔ{ö’sáxžeoz÷ë_I>Ąuc xwZńśoĺÝśž‘,Pž2PÉ4‘Ł8eT–5ż¤œř^/™[ç^ƒýú_۟…Ú=šşűÍśŞ€üË|¤ý °ői >OPŕô ×>)^ź˝GGřhĘĐuťM`\$QÜÚÝÚH#ťłť„Ĺ=ťOb9 2Ź9Š˝=Í´‰=ÄQ4‡Ŕ,}ł×¨Ş'–Ţëă,ŮîŒÖZęĹpď4ojţĐQrŘę€˙ĎńcĂZˇ‰LĂđý¤œř^/™[ç^ƒýúÂŐ|)˘j:‹ęRCwk}"„–çOżžĘYTtWx Ř18­Ý$çÂń|Ęß:ôďÖž$’}BęÇ@đîľâ)lßËťm="XĄ|dĄ’i#FpĘŠ,22kŸüyzއđŃĄĄčúf‰cö-*Î+X ™ ĺÜýçbyf=ؒOsWŤ3AÖí5p‘Gskwi ŽîÎîöěF@e=ˆä0ʰä*ô÷6Đ:$÷DŇ wąöĎ^˘šM‰h˘Ąšşśľ]×70Â6łfG Œąç°ŸJšŠ*)îmŕhÖyâˆČŰ#áw7 ĎS@ŃEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWkG÷ž<”ĹUЎăĘÖ˝öź Z?˝ńŕÜŁţ*Ž„s˙Vľée_ď&aˆř~ŇN|/Ě­óŻAţý/Ŕ‰mĎÂíÍ] ýŒfŰU@~ežR~ĐXz´…Ÿ'¨pzi4“Ÿ Ĺó+|ëĐżXZŻ…4MGQ}JHnío¤P’Üé÷óŮK*ŽŠďĄp;'ϊvŻ/QŃţ,xž[{݌ą˙gş3YhrCŤ9ßѽŞ7űAEËc¨üC››m§:U‰ĽÔtöš]äłŘ™ ˘7mŹCÜ+|­ƒŽďCŃôÍÇěZUœV°20AËšűÎÄňĚ{ą$žćŻW3zšžAŠęž$ItŃô˙YýžßM)ฑŚV”,ë TňĂ"˝œçĄP8'7ÄKâkż>u‡ÄW:Ě6ZО&ą‘­˘Ť uˆ”ŘŮ\Ná÷˛Őî4Qqžr÷^#˙„ěĆYó˙śn˙`ţÎň,_nÍ۲sť~ü/Ýâł~ ŮëQ|BšŐ`ś¸ťqafš<#KPË(žC4rHQꁃ;˜ąE˘Š)QEQEQEQEQEQEQEQEQEQEQEQEQEQEWkG÷ž<”ĹUЎăĘÖ˝öź Z?˝ńŕÜŁţ*Ž„s˙Vľée_ď&aˆřcŐžÓsýi–Sňžƒęj‡MmÚ=§Ě§ĺ=˝M\ŘżăËÔŞ?ĂAEW1¨QEQEQEQEQEQEQEQEQEQEQEQEvîęć9#¸™Eš|‚¨Žś §]\ ĎšâçĺwńzÉřŠiŠ_ř/YłŃüĂ}6›˛ö;“ůU¸ÚÄd‘‚AČŻ1ńfĽeŞ?ƒ<7{cnžż´şŒiRÚyň0ěđˆŮČëś_şÝÄgçĹ1Ă­jńč÷˛G{rŽśňe•)äsX_Ľ–/‚^h¤xŘčšhĘąfKB—U—šÇöđş]UDÂé^2°)ŮŔˇ=,`ƒ’ܝŘlkŕżü‘ ŘM˙ŇjęNĄr$›éCX/šr@ęqŸqůÓŽâŮîNŚÂ÷o—ĎůWi!˛s‚>˜5äÚÝż‰äř†ţ3ƒB’KM2ö˜âáěŔd¸)–w‚ň—Ča¸[ĆFxĎ;ŞZř‹ţ/iZmˇ‰%ş¸ţßű]œśRySÉpÖć¨VvfnŇK|ôúíˇŸó÷?ýü4}śóţ~ç˙ż†ź–Řx‡Qń ­…˙ŠĂŇj(%¸¸†HgÇŮ.U,čcóżÍ€3*‘ŔŃ^|B˙‰Ä‘Üj ŞGč6ĆÖgFϒa-„0P áÎüá9Ŕ´IŠOƒ_ȍ#mZb œĎ'Ÿ 4˙śŢĎÜ˙÷đי_iÉŹ?…SLťń+ZĹŹĘ÷7Ďń/Řg_˝*U,Ęšŕeˆ? çŢúĘë˝RĐÇoÚL֓şĘë3ʆeŠ&™U2¨Úw.9 Ű~Űy˙?s˙ßĂ_?ř†y§šńäłÎdřJ@-!,Ř6 r{ü+šđ´~&‹]Óď/nľ‰’î÷TŠę„>LP¤ň}˜…Ú6|Şť[řƒwă´q'Fĺń_B?éĘÖ˝,Ťýĺz3GŔ{v›yZ‹)f‰gľvŽE$jĎÚ-˙çź_÷ŘŽ3Ç -ź?§Ţ[ÂévdHœ[Í>ź*Ž}+€moVţ?ćüë˘(c/U6ŽcíeKÜ=Ëí˙óŢ/űěQö‹ůďýö+ÂΡŤůŸţú¤ţÚŐçţűę´ţƇóÖeŘ÷_´[˙ĎxżďąGÚ-˙çź_÷ŘŻ ţÚŐçţűęí­Wţç˙ž¨ţƇó~ő™v=×í˙óŢ/űěQö‹ůďýö+Âżśľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ?ąĄü߀}f]uűEżü÷‹ţű}˘ßţ{Ĺ˙}ŠđŻí­Wţç˙ž¨ţÚŐçţűęěh7ŕY—cÝ~Ńo˙=â˙žĹhˇ˙žńßbź+űkU˙Ÿů˙ďŞ?śľ_ů˙ŸţúŁűÍřÖeŘ÷_´[˙ĎxżďąGÚ-˙çź_÷ŘŻ ţÚŐçţűęí­Wţç˙ž¨ţƇó~ő™v=×í˙óŢ/űěQö‹ůďýö+Âżśľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ?ąĄü߀}f]uűEżü÷‹ţű}˘ßţ{Ĺ˙}ŠđŻí­Wţç˙ž¨ţÚŐçţűęěh7ŕY—cÝ~Ńo˙=â˙žĹhˇ˙žńßbź+űkU˙Ÿů˙ďŞ?śľ_ů˙ŸţúŁűÍřÖeŘ÷_´[˙ĎxżďąGÚ-˙çź_÷ŘŻ ţÚŐçţűęí­Wţç˙ž¨ţƇó~ő™v=×í˙óŢ/űěQö‹ůďýö+Âżśľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ?ąĄü߀}f]uűEżü÷‹ţű}˘ßţ{Ĺ˙}ŠđŻí­Wţç˙ž¨ţÚŐçţűęěh7ŕY—cÝ~Ńo˙=â˙žĹhˇ˙žńßbź+űkU˙Ÿů˙ďŞ?śľ_ů˙ŸţúŁűÍřÖeŘô˝{âf…gŤMgý“âť“oś&–ßá’DĚŞś¸ 2d ‘ƒTájčôń§ţ7żün¸/í­Wţç˙ž¨ţÚŐçţűęěh3ŹËąÚę´[:ćÚ=ĆAĺ…ŃKxf÷G?ťŠ|âk?üđ}ŽŻ§ër^&Ę7ś˛Ňn.d‰ŁˇPâA,‚@Ă`“œƒŽűkU˙Ÿů˙ďŞ?śľ_ů˙ŸţúŁűĚĂë2ěwżđľt?úřÓ˙ ›ßţ7Gü-]ţ€>4˙Âf÷˙×ýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}QýćaőŠv;ßřZşý|i˙„Íď˙Łţއ˙@á3{˙Ćë‚ţÚŐçţűęí­Wţç˙ž¨ţƇó0úÔťďü-]ţ€>4˙Âf÷˙ŇŠÚë řĚÜły˙ĆëƒţÚŐçţűęë:Ąë?ýőGö4?™‡ÖeŘďákh?ôńŸţ7Ÿünź˙KűG‰ŻźOo§Ů^@ú݈îŐ/m$ś‘Ł[;pXʊ¤ Ł ô%N)˙ۧü˙O˙}WŞü;˛ľM HB>Ůr­ćĚI,ŘcÇ=QR„rőíbîވ¨ÍÖ÷Y˙Ůgwenhywfar-4.15.2beta/doc/dialog/images/cocoa-4.png0000644000175000017500000014013212364015347016753 00000000000000‰PNG  IHDRĐ0Ż\ xiCCPICC ProfilexՖgTɆŤ{r"Ě C†!g$ 9Ar•a† ă0dDEdqLˆˆ`X0(¸*Aրˆb`0ÇdPŽ‹(ˇŹçÜť˙îŸ[çtŐÓo}őuuW矐;9A ,@*?CčáĚ ˆdâ€H"‡›.pň÷÷˙Ř>ސxňŽ‘8×?†ý÷ i^l:Č™ŽáĽsS>‹đ W Ě>…pv†aTÂt!˛A„+Ä?ĎőbŽ™çós1Á.HL?x2‡#Œ€ôљYÜx$ia>/‘Ůa{n‡‡°xŠkÄ\…°nĚyâ`'f1'‡żČóD욘.HáäÎÝü/ťÔ”Lä{Í5*ғů)ËĹgCGŽ1ÇŐ{)sg6§ÇňC‚t~ĚrżŽş.° Ăůö^Đó\–/plşŰbž$Ž—řĚćň 3C8=+Čmó‚Ă˜뺨Ç%şłôÄ öⳒ×x/î\Ŕ\ŕ 8 d€X ̈ÍÉ@Ö—5‚\ab|BÓ ůăb ™l>×ؐifbj"žţżiâZ›ßě{Ć\ AŒ›k91Ř%#5ŕůˇ@ł.ňákڊАşiŰĘÍfÍçC‹ "Lň@h]`̀%°ŽŔ x? "Ŕ*ä '€T Ů lĹ ěťA58zpœmŕ<¸ ށ[ ÜO€Œ€×`|Óá Dƒä!UH 2€Ě dšA>P ECńʄňĄMP)TUCľPô+tş ݀ GĐ4˝ƒžÂ(˜ ÓaeX^ł`'؆WÂńpœÁŰŕ*¸>ˇÂ—á[đ=Xż†§PEB1Pj(# ĺ‚ňCE˘âPBÔzT ŞU‡jBu zPwP"Ôę ‹ŚĄ™h#´-Ú‚ć˘ÓĐëŃečjt=şݍžƒBO˘żc(%ŒĆĂƄcâ1٘bL%ć(Śss3‚ůˆĹbXŹÖM®Ŗa÷c›ąŘě0v ‡ĂÉă pv8?—+ĆíŝŔ] âFpŸń$ź*Ţ ďŽÄóń…řJüqüEü ~?M"hl~!—°p˜ĐA¸M!LĽ‰:D;b01‰¸‘XEl"^%>%ž'‘Hę$kR)‘T@Ş""]' ‘žŠd}˛ 9ŠœIŢF>Fî$?"ż§P(ÚGJ$%ƒ˛Ň@šByNů,A“0–`Kđ$6HÔH´J Jź‘$HjI:IŽ’Ě“Ź”<#y[rBŠ Ľ-ĺ"őZ/U#uNęÔ”4MÚTÚO:UşLú¸ô é1*ŽŞMuŁň¨EÔCÔ+ÔaŠŚAsĄqi›h‡iWi#t,]‡ÎŚ'ŃKé'é}ôIŞĚR™P™™™ 2"ŠĄÍ`3Rۧ÷_e•edceˇČ6ÉĘ~’S”s”‹•+‘k–ť'÷Už)ď&Ÿ,żSžMţ™ZA_!@![á€ÂU… Eş˘­"WąDń´âc%XI_)Pi­Ň!Ľ^Ľ)eeeň^ĺ+Ę* G•$• •‹*ăŞ4U{ŐDŐ ŐKŞŻ˜2L'f łŠŮ͜TSRóTËTŤUëS›V×QQ/ToVŚAÔ`iÄiThtiLjŞjújćk6j>Ö"hą´´öhőh}ŇÖŃÓŢŹÝŚ=Ś#§ĂÖÉÓiÔyŞKŃuĐMÓ­Ó˝Ť‡Őcé%ëí×ëׇő-ôôkôoŔ–‰ű  1†Ö†|Ă:ĂFd#'Ł,ŁFŁ!c†ąqĄq›ń›%šK"—ě\ҳ仉…IŠÉa“'ŚTS/ÓBÓÓwfúf\łłťćswó ćíćo—,]z`éC š…ŻĹf‹.‹o–V–BË&Ëq+MŤhŤ}VXt–?ŤŒuÝcíl˝ÁúźőK› ›Ó6ŮŮ&ۡ[Śł,vŮáeĂvęvťZ;‘=Ó>Úţ{‘ƒšÇĄÎᅣ†#Ďń¨ă¨“žS’Ó §7Î&ÎBççO.6.ë\:]QŽŽ%Ž}nTˇˇjˇçîęîńîî“k=:=1žŢž;=°•Ů\v{ŇËĘkWˇ7Ů;ČťÚű…žĐ§ĂöőňÝĺűtšÖrţň6?ŕÇöŰĺ÷Ě_Ç?Í˙ˇl€@MŔË@ÓŔüŔž ZĐę ăAƒƒˇ? Ń É é •  mýćV& _ž.üV„BDbD{$.24ňhäÔ ˇťWŒDYDGÝ_Šł2gĺU ŤRV]X-ššłúL4&:,úxô ǏSǙŠaÇ싙äşp÷p_óyźńXťŘňŘŃ8ť¸ň¸ąxťř]ńă  • ‰.‰Ő‰o“<“&}JöK>–<›–ŇœŠON=ǧň“ůÝkTÖ䏊˘4›´Ýi“BoáŃt(}ez{15˝™ş™?eeŮgŐd}ÎÍ>“#ĂĎéÍŐĎݒ;šçžwd-z-wmWžZţĆüĄuNëj×CëcÖwmĐŘP´a¤ŔŁ ~#qcňĆß M Ë ?l ŰÔQ¤\TP4ü“ÇOĹĹÂâ›m7üýsâĎ}[̡ěÝň˝„WrłÔ¤´˛tڌ[vsŤéÖŞ­łŰâśőmˇÜ~`vÇý;ëËĽËóʇwůîj­`V”T|Ř˝z÷ĘĽ•÷÷dîUůTľďŐÜťcďLuBő˝çšć}Jűśěű´Ÿˇđ€ăŚƒĘK~ý%ń—‡ľľ­uÚu•‡°‡˛˝<z¸çëHĂQ…ŁĽGżăŐÖw7X54W:ž˝nĚl?u˘˙¤ëÉö&ŁŚÚfFsé)p*óÔŤ_Ł˝Úűt×Ö™ŚłZg÷ľĐZJZĄÖÜÖÉś„6Q{DűŔ9Żs]ś-ż˙věźÚůš 2ś_$^,ş8{)ďŇT§ sârüĺáŽŐ]OŽ„_šŰĐÝwŐűęőkî׎ô8ő\şnwýü ›çn˛nśÝ˛źŐÚkŃŰňťĹď-}–}­ˇ­nˇ÷[÷w ,¸8č0xůŽëkwŮwoÝ[~oŕ~Čý‡˘ˆňŽ=JyôöqÖăé'O1OKžI=Ť|Žôźî˝?šE–˘ CŽC˝/‚^<ćżţ3ýϙ‘˘—”—•ŁŞŁ cfcçÇÝÇű_­x5ňZđzz˘ř_Ň˙Ú÷F÷ÍŮż˙ę Ÿy+|;űŽě˝üűc–~čšňŸzţ1őăô§’ĎňŸëż°žô| ű::=ƒ›ŠúŚ÷­ăť÷÷§łŠłłސ3çPHÇĹđî”Ä+ ž˜Ř9ď…ç" y˙ްŘÇĎyů˙äyż<o Ŕ‘NB đDĆdÔFFŞ#bKě`sóĹ QÄ-=ÎÜl ˛ą&Ÿggß+€ëŕ›pvvz˙ěěˇĂˆg@gÚźGű€Ľşš›YőĚöÍ-˙ąű7…čŞÍöě pHYs  šœ IDATxěœŐŮ˙śzGDPşŠ ‰bPÁ‚b_Ľ)&¨ƒ†?ŠŸ€Š’XˆyM˘Fߗ ChžQTTˆ  E(éEzŰÂ˙üÎîs=;;ˇĚÝ]Ü˝üާŸ9óŮšżűÜgÎT:yň¤0     ÄF )śflE$@$@$@$@$ĐźH€H€H€H€H  č°Ř”H€H€H€H€( y     @Đ`ą)     P@ó     R´­pM+™Pá&Í “   @0K%'ěZɕ*ÚąQ'Ŕ_H€H€H€Ml—[MĄě\UL’   ŔiH ź ër% K(šéŽqţańI€H€H€*¸Ý:ʓ˜ţÁt@Ń\‘\’žęĘädI€H€H€Hŕ"ˇ@6óšď-Ś@4Ç"zció]CÜ-    €XÄr,mä‡Ó§T@Ç(œ# âHu>çF‚ś÷ƒe$@$@$@$@Á Ä$€a#ľTg‡8•Bú”č„s8ĄŽÜałHŽe,w\ŚI€H€H€H€‚ˆ*t ‡‹Ľ]¸6áĘíЧBH—š€Ž"žýD­_™žş u‘ÚęxŒI€H€H€H€ʎ€Wězóօm_Ö"şĚt) çp"Ř-wÓîIpÓą´qŰ3M$@$@$@$°ÂÖÎm㦝&žúľő+łă”•.P<ű‰[o™ć5váj:RÚDŤ×q“    ÄG ʘ-.R˝ÖiŹ3đćQî-óćľo™Z쎡ioď˜ÚNËCqIEt‰tńě§nޛöćq`( ZâÓuîxn[MGŤ×vŒI€H€H€Hŕt' Â5o=ň~eč킖ű…2 îxśŹ$":EG-ŁŘŚŢ´ć#ŨK5[śŮ*ŚMŮÚeš×8\™mě´×zô¨œ˙    $Hx–äää‹üăw3G÷ĽŮ˜MĹ/´Ą+MÖÖĄÜm-~ĄM/t\:´×ď*€ż/)šRAŒRmŤeŢXŰ <­ZľjWÁňĚ@$@$@$@$Ř ¤kÔ¨ŃŐĺŸÍښQ†VČZ†<ÚiŒro”iĐśš+. íœ_eZîĆZîq „ň$ó­ ąŮPćP§ßZ:$6lýű÷Űś¨3_,ĈpiҤ‰TŽ\YRRR? <\đŽš~ýz9p`ż1óô@ߪUŤĘŮgŸhL|ł2>>˛÷Ŕ.Yôő\YżcľĎ=‚Ÿ$=5KΊŰZ:śě*5ŤÖ‘ôôt;×Hó 7–“   @E%`tQc3whAĚ^Ëł÷Đ Đ ě4F˝Ś#h˝7m+ƒţX@A^y~żwmƒŘMŁ…–Ĺ'AtF yyy ő–-[B"švíڒ••e…é‘#GÂzɒ%Vđ6lŘĐúؘŸÂŤc~űíˇĄ1kÖŞ%Y™™fö•ä¨ó°üűß˙ścžyć™QÇÄá†ňůşOĺíe˙ĘUłĽÎu¤V&’—Ÿ'{žŰ.Ťś&‹×}(×_Ř_ڞs‰dšýÁˆH€H€H€N…ĎťŠ1‡­B:W0ŤötËÂö…ś5˘]…vŘvnE`ív6i Š5íĆnZŰ ,ڦВ !˘Żo8qâ„lÝşŐ čşuëŠnŐŤWˇzßž}˛k×.1OvÚ6äŒ3ΰ^ßM!ĆÜśm›ˇ^˝zvĚ:uk ĆÄÄ÷íŰ/;͘ťĚ˜Ř7,Ú 4ˆ8&,ĎË×|*ł˙ý˛ÔlXYÎ:ťžü¸Ĺ5riËkĺč‰Ăňáʙ˛´ę‡˛món™šče9ižkľoŃ ž@áŚÉr   HTЂ*œŁY •+˜UƒzËT(Ł^ÓÚ?ć8€Ž`}ÖIFÚ1ÚIJŠxFۨúđáòwď^+`ay†ŐFňcǎٹ á —ÔĄ-\:"Yv1&D7DąŽ™T)É k{&]˝š3-]222m[¸tDsďţ]2gÉŠŢ Kꝝ%ŮU’ĺPŢNYżçKăĆqTŽVÚ#UŤ§›UŻłĽ’9hۤ^ 3~ŁHLYG$@$@$@‰H@ő Ž é ":HšbÂ7ˆ:€Ž4›Â:L Áę̂d(­e~1Ŕ (,“áN)|÷ÝwV ĂR ˙fXŕá.Ą–x¸€ 6čSĽJ•°ĂîŮłGjÖŹiŰŤ(ÎÍ͓cGŰ>ęV’‘‘}"ůď˙̗Դd9ű|ă^’.F{Ëţ“›éƅĂřF§ě‘Źę)’’YÝ ýŐ{w útŻÝ'ěšv다Ąyś‹Ú.&]däâďä5ďśD™–ťą–#Vń즓ÔŇëćŚńÂźyËÖĽĽĽYK4ôžj~X†10Ú@Hc;ÔîXšF=֏†ŘV­ăĄ Ň|äbüˇŹ—ąÓiř˜–éÄ5FoŽĂ˜H€H€H€H ń řiAՊ~u ˘ĺ.í㖕8Ńíy‰J¸E›˜ˇ^óněM#Ż[¸ý˛œH€H€H€H 1 ¨tcŠć5íĆH# M¤­^˘iŕˆ:Ҟ}ęÜŇjď5Ż1Úiąnn9Ň $@$@$@$@§X4˘ŰĆĽŁĺZćjL-‹;.Mmz Ł˝Ś˝ĺ–G—ő$@$@$@$@‰EŔO şzQëqԚָĚI”Ľ€ÖƒĐŘ=”éć–#­ĺ{ë™'   HlŞ5ö­–#ö-ÓŘ[_â|PëDźíźywâ¨óŰÜ6L“    œ~ü4b4]éRŠÔ6žvśOIVáp'äŚÝɸi´ŃvťőŢ´ŰŢ[8âÄ ™?ž|ýő×rŕŔ8‡ƒž'°oß>Š^˝ú÷L•˛-5”Eú×gIĽ$c38YXě˝°źLNžĚ—+ŻŘT„73%#Ŕű@Éř…ëMŽáČÄ_~ňäIŠRĽŠ´lŮR~ň“ŸHZZZüƒíŤÔťyöîNÓE÷%We蘪݃Ö @ë´<îâů•W^‘zőęɀ¤V­Z’œœ\lꐍö˘Ô™°ź€™á°vÝZiÚ´é÷bDi’U‰p Ű‹Š őr´qá8_ŽŰ-gQˇH3ĽC`Ó֝rţ9ľy?(ĹkvíZŢcÝżßĐ_˝dădMŽ…ăäąěäóóóeϞ=2oŢ<™4i’ 8°,D´Îť×´Ćî”NY:Vd’AÚşŠ~ޞޟŰ>ćô|`Eó-ˇÜ"I°@!ŕpGW‹´çâ°mѐĺŔ 9œ40d‚ŤŁôŻ ˛-řŤ+mśťçIćş s°÷÷F€J– Š؆úŚ ˘Ň˙ű(2|üý•—ńyĐ3Qş×š–Œ+mj€t‚ŽŞ]§śôęŐK&˙ăÍuÍ5×h“’Ä؝÷–šő‘ŇAúĄ­{˜žăĆ* };G)t'ëŚŃ͛2TüŐřf´bĹ róó$ݐĽO5‹J@€lK/B×ďŽćÉĄcBĎýÓwoF,/”Řć劈ŽpX3ŢbF¨!šÂľąk‘FúŠË/—‰'ĘUW]ő˝Á2ę(%nŕŢĆ1˜›GÚ˝Ľ•xg:@Y hěĂ=ݧƨ‹TŻíJăŚw5jŘźZ q˘C.%ÚĂéŮůdţIc€.“kňŞ"ŔĎĹçTMŹ,Řćććڛ™^˙Ľu,999’’’R!ţ–Žœ8)Gs*Ţ5[V玴ŽŒś§â~°qăFŠ_żž¤§§›>Œ#Řp=&B(‹ű@I¸ŕo=55ľ$C”‹žĺkiAůĄîúwžÂu‚ĎŇŇţźńaĽ:2܍őáę|† VtŞď4~‚Y`ćŢzo>ŘљÖG őÁÉĹ V…łžř‚Ýƅ{ŤT˜˜5k–ěÚľËĐ/ŕň‹/žXš7o.SŚL‘ž7ő´‹ś×šíľ qň/żüR-^dťggeK“&M¤cǎvîAĆ şßXŰŰ+óŕPcÇřżćýKŢ{ď=iĐ eů“Î?ąÇdt(Ťöƒ’jUŤÉłĎ>kçĽ˙œJćAŮNŸ>]>–IŸŢ}îK—]v™Œ5Ę÷:|çw¤^ýzŇŽ]ť°ăř1Çә3gʕW^ЍBăŻürĽ,^źŘ–geeIă&í5œTŠĐŞ°ÇŠb{,÷¤œh$˙ţ,ůnĎÎĐą!qnŰŇŹU›"ee™ůŐĎn ôš}ب˛ÜM‰ĆŰü€÷Ü_wďÚ]dż¸ż6kŢLŚN™*7ÝtSčA克ĘÝżźŰŠăʕ+ËÜšsm?÷Ú?~źüď˙ţŻüűß˙]ƒ~×,:˘÷XďőůŁŽ? }> ;>ňNEyĐűćî{ěŘąbLƒ>Ď>űlű™tnësƒýĆ9tčLŸ1Ý֧ڤÚç.˝ôRÁšók†§Şź4šbޑŽ1Ôk(ëăë~CwůÉe?ą÷xÝ'âŇŢŻ°X°â…uČC{•Â.ŻÔeQ~Üˆźœź˘÷[äün6ZţˇżŒ“cǎJë .˛SBy­zgJăćçťS´‘Ć)ŇŘdt|oůáCeű– Ň´ĺ÷móĚ/>ŢšŁo¸qNu9Ř˝<ýű§ŁŢ_ŤV­jýmŇߏOĺď~÷;›ßżżŔ}ţůç׎ďH׸íXřÚš>ŃŢ/”eyĐűćî{řĐaŃĎ,eŞÇăw [śląD|F!€kABbş7⁲ażfďCǏˇ_j𫾴@D#ří÷T”—&×S1_?NŢóƒyŕő^˙śźđżq şťśÝ15­×ôŇĐ\úkŽś)aěęBż[-†Gš{0Ţź_”ĹJ[@Ç=‘˛ě˜‘‘aOŚţ¤€Ÿô„GŰ/üx~űŰßkżj„XÇq€5ŕ’K.ąVˆ–pĄvíÚň /Řę &Čȑ#ĺ‰'ž°D†ësŞĘqÜAŽO>żűîťöË~‚Őd ís*âr^Aَ;6„ä7żů,\¸Pž{îšP™›w\/˝ô’mŽŢێ4ßňt Ÿ(Ąúź°Jg=fżr܍/žě*šă~ˇ‚ű6ÚCĚúľ›’”Ďo–LüÓůűÜŐĄq ]ĚÔCş$ăc~‘Ž7Ţůƒ­Ž‹1b ąŢ_?űě3šăŽ;Bű€őúąÇł†ݗî_c-—§ëÓ;OGc‰tĹ/EA>ł~ýë_ŰU–üq;-GŹsŇö<đ€\xᅲcÇ9÷Üsĺ˙ţď˙ěJXŢc=•ůXA牍ś9Őą÷ü¸űWönYYŚ­b5תýbRCsĄčoŠ zÄ8™XĘ?qEÚňL=6´Á…ˆ‹iˇ|÷îÝŇž}{ťŚ4Ę÷ćß˙}šöÚkíĎĺ(˙ä“OäĆo´–fÜ<śmŰfÇšŃX•°¤Ɓ vÇÇţôbÔr,´5kÖŘuŹďžűnůń~dÝIđÁ‚ŸĚtžŰśn•ž}űJăƍ­…7Á+ޏ"t\ۡo—[o˝ŐÎ ţƒýŤÝ/Ćt7-ĎOS‡Í­×9xËá—žsŒŤ€_űž9ýËĚILJEÇŰŞU+iذĄ=&˙ÓO?ľ+œy晖ĺ ů‹ĺ„}čyZh>|qźgŸ}śüüç?ˇütž}řĄý2V8°äâ)mߝŤÎÇ-ÓqJł}PśîpÝ čuÎz-?ůä“öƒějóĹp‘ÚÚnȐ!ö˚śG"üŢ{ďľ×Éw{÷JŽšţđk}žwŢyňÇ?ţąŕoÄçď ăč5ŹűĐkx­š†ľLcÝŻć5.ÍňŁĆO÷XNžńƒÎ7>ťŘňL[~Řr×\ó_űĺKʰ~]ĽgÇ3dĐumeĆßţ"Gí˜ů˛Î,ó8¨[[Ůa~úÖńÇ$˙œü×Đ~Ÿxŕ2ýĺçĺżšWnúQ#ů÷góĺŸ%{vm—Á׾“gĆüÚî7ßüÝ`“žRníÚÚîsů’EĄqtü Ç”C´ö`‹s†óĽçNăpç×$ţÖ´Ćz?Śý(Óý1¸öpż„ťŃC=$¸!1}赏.72gč¸ë|ź×g3Ÿ{ě|îąËuÁ˘÷;ďźÓZP‡ń#ÝĎtë|4ŻqĐű@¤{Ź—éŻ~ő+4hý›Ćţa1îŇĽ‹ŕ׌0$ IDATŹqăĆÉG}$˙űß-_|YÁœv›ë9Ü˝ăčÜŐú˜oî (‡_l͚5­ďaˆôůőŻ0lu|Ě î ¸çßb~•kÝŻĆhŤíľ 1ĘJ“+Ć wŽqŒţóŸ‹ĚmřđáöWdĚ%Ňqŕţűsí>eî׸ŽńE†ô w~ô>ĐnŸH<Âq WîňTŚ8ßůXXŔÄ'ŽŸÓE@ŸVhŐ Ní¸Án5bôă?ś7\¸0!VqC?xđ 1~> ó¸Šă÷\`ËG-?ýéOíÔß~ű­]íŸ{ţyűs9Ä ÚBcsňřƒ°ă›ý@ĚÔ­[׊@řAřţż˙÷˙ěńtíÚUp“ëŢ˝ťbđíˇ[•7ß|ÓşˆŔr˝nÝ:;@D6jÔH`Őyíľ×däƒ Ä€ya‹5ŕćyĎ=÷Č0#Čć/X`?QŚávϜtć„T6oŢ,ŕ…EÚ7lŘ`÷/$đ“ćžú]´h‘ŕ•f0ęÝťwč<Ýy×]2lŘ0Á‡F˙ţýĺ7޸‘ŔŻŻ—i‘ř‹_üB–-[fÓpÓ rlz Ľeëî74\ˇŽď?ęQöňË/Űkäoű›<ýôÓň‡˙ţoůë_˙jťƒ/žœčq#klq%™Ÿ_'šţř%äOú“tčĐÁ^×č|Ü|™ňîĺz Ł+z 71_düÚŁOY†M{ŽKrć 9i ɕŹŮ¤ŕ÷žJöW?óŻO9„óşM[ĺ­yŸÚŠĽ¤gHƒłĎ•ťˇË‡ôN˙uˇü×o&ˆ•ŸÉäg†Éž™rá5ýd÷–#˛uÓZYńíŠr8Űô­$6n’ôşťdĹV3S˛aÓfY4˙}étóÝň‹˙~GŽŐj$z—Ś˙Q<5K’RÓmŰCÇóeÖ´‰rŢe?•žL‘šŻ<)˙ňé˙Đ$šßoţŘďŠ(Ű ç×äŸűŤŢOqÍ`Ě˙6×)îm?űŮĎěß5^؀żg\O˙üç?C÷U\o¸_Chă^Œ{ôĂ?lžUš)ä6`Obá?ŢëóŮďąŘ w™űĘĐĄC卯ž˛iPeé~ćÎ!R:č} Ň=ÖË_:`ěyʈe°Ä}î0ř’ C^:†/#FŒ°ěđ™‡pš‡úÝK˝ÇĎZ„cĆ}űţ‡YÚ †¸=‚Q¸Ď/°í†-xྏ/T8÷řsß}÷É˙ˇFÄą†ŇäŠ}†;×řr#ž¨ŔetŻ1BLž<Ů.ń†ĎăHǁű/ž⺟TxżĆßî×~çLýîńÚ'V6%igźŃ,yyš§€Nx 4~:ŇoCÖ⍇Ůb °p…Ű˙üĎ˙D솛6žőAč"Ŕ"K*ü• Xőí<úżjŐŞEtÇŔ ąM›6˛~ýzűÇß"<…?>ě?ÍAÔĂr€€v˜3ŹŇgĄ‚Ÿ(˙ëżţËÖář .0˘üźKöUÖ˘ 7ŹŠđDš“Öá&„9ƒa‹-ěTńá‰nž`Š1ń0˘ŕÖ^°šâCâóĎ?ˇŐřňż<|‚+Ź‘\jÜ1+b8p÷€öĘ!Üą\wÝu–Í9çœcż¨áćË^çΝ-/\cEŸ%(>R¸k¸x˲/Á[óŒ Ě7Š2Żp+H‡/ÇŹÖńąź3aŒÝüß_Lß$YöŻöŘŇo„¤UŽ!-~t4ť¨Ť,š=ąpü‚ăqÇG ťĹžQqŰúŇîҊ׽RăŒf’”’.i™U̸I’Q­Ž¤eUľmѮɝ亻ž”ڍ[KóW˖o–‡ĆÁ|‚Wiˇˇox,8ä@˙ĆrĹß6 đĹK°p@×ňÔP‡çD`9Ćó#r˙ůĎ´şXîúŒt…îíĄhwŃEšoč=Ť<Ýc˝^§Nű‹ޘ1c콄ěělËŸ›ŕëŽxî^ę_ółmŰśöó_fpď( [°ÇÜ!ôqîđE–ܲń|vÝpĂ öWPŞ^}őUůńl-çąG¸űu¤óŽOYóąš ş ›ůťÄľí•č!Ą-Đ8°Bŕf‹06űK“ů!š€ĽřnP+śŽŠyŹ,Ąi´ÇJřoݰä! KŰhwlMc^ř`€e–A1¨ÇĎ$° Âę ýÍ7ßX‘ń`UEŔMËÝʐÇ7|řVk=>pÓw}“mŁ˙ ŻöĐŹXDţČa îׯŸőˋ4'XT n˝űƒU˘Xż˜ ŽÖw~X5Eű˘-Ř"żiÓ&ۆP§őZvŞcwîA÷š#čńşýńĄŁĺúĽRóhç=nźšÓ­Ç5‚/tn™_?Ý'Ć w k›SgŚašVpŽAÉďk´ˇÇĐŽK/šáÎąEÚÜő­4hzžTÎĘ•ŸŐęBYżüCťÝOzzŠd˜ cĽŚ˜9擒*Iő: l{Ýojj˛m§ýQŽvőÎję—ažěĄ\ÇÁŘtÍk\Öĺ`ë˝.tߑâXîŻčvŘtˆÝźś˘A…Új?[Qřú‡ť>#Ýc!Ü`´pď;îü"ÝĎ~¨{ŹżË÷aˆ|X5ń „™÷xPŚýĂÝKľŸĆ菀űD.î=:~IŮ◠üŇŤ÷oŸ–EŠ]‘Úyë‚~váK,ČX% Vxqě×H´ăˆtżöžk¤>ÚŚ¤ąk€´isŞ­žÂßgĄŸ/Đ^0đás$QĂ÷Ę!–_LüÁ"ŕÂŐ yý#÷Ś‘GĐśŢ5ő1ęźů‚Ţb›1c†ľŤŰÄíĆ˝BÇĂřšÖ>cL|Sďb,…Ţń‹ołřć/˘:~6ÂĹ Ť2\đÓöĽOUătĹWŘňxţŃýĹÓpđă‚pÇŞřr€ŕ7'¸k ŔŽ%Ö܀/,řV˜ŽRáÎ Úéyƒ%{Μ9ĹÎAIŽÍ_źé’ě_YxŻ+÷¸1/䴝_˝r˛ Í?ŕ…ż)íƒrÜ@˝í´=ĘĂ]ĂÚćTĆ)ɒ•žüý.UA đ-‡xMMŽ$™čç´ŻUď YńŃFüškŻđËřžÍ˙ą‚ű@9B†é†<|AŢoÇĘJ+˜ƒÚ ęМĚřiF`ĂĽ$TfĆ°í’ Ëš§ŁéŤăîŢîĎţăĚóűB“*Ăr°uŻ‹"ű “Á5‡ÍŰ× ‚÷şrۢמŰen­óŽŁÓAy¸ë3Ň=_ćńë—îăáŮ ü˘ˆ}–Ç{,\\řüXştŠýŒy޸^}őŐĄeÇŔŃm‹´ˇżˇmPř˛‡ˆ„QĂ %a‹_r1śşî¸ăÚvŻ‘Xűhť Ÿ]čƒĎćŰnťÍş bĺˆpĚ?ÚqxŮ" \˝ő¨ó–yű MiW@c<äÍ˙HŮ4\I Ađˇ…Ď‹DĐ8ö ¸€°d~žÇ…‡›€ťé‡2¤˝xË4ď­óćŃN˙ďřŚ2\X(ÇĹq‹%}t|Řw_¨÷ŰÂ1ók‹2XÉńs-,ĘČĂJŒ9ás¤9ĄßŢΉĽüĐţcřŁĹO´8nÜLđS-\f`ŐŇy \ӈ5 wřÔáË~ꅅŕă^‚ŕöqÓhďž7<œŠŸč°T“śC=, šeëŽo'ď3żr”i_o˝7vŕ…•Tŕó‰4ń‹ ‚ŽáýĆpۀxjY,lľm<1,ś™iŠ’‘šjăĚt“6y”…+O2ǝbÓţÇW÷’cFńŻ˙łä˝ß~#˙Yذţ1ž~Öýşçe¸°a\ě~đĆO“°ĆŔ‡ZëýŽëő×_ˇÂQÇÇVZAŹí!,ŃNYhšć5ŽTKƒśEŒš#¸eZŽÇ…<ú"ŻsĐ´öCŢmr|ŕ'ď+ޏÂ~ŠÁĎżÚOÇŃţş—żˇÎË wꃹh ‘śˆýĆ×} Î;\šœŃfƒ‹DŚŮ˛2ŒˆF>L9,Đ)ĆâëmvŤó嗿{EŚţa¸<đÓsd쀎rѕ=䧃†Űńaź~ŔpyéŃÁ2ú–óĽY›ŽŇ¸U;+˜użvlcg>m:üDÚ^v˝ŒîÝFŢxa´Ýo˛9ŠĆÂŤóL3n:Ž–ë8'얧yľ;°+t\“Ÿú•,›;#tźËć˝*“ŸZě¸ÂqˆVśzb=Wzůľ×ëFĎ­^gznaŮÄý@}>QŽ6:Ä~ă‡kr´X°zLJfăˇŢzËZLź‚BÔ+Fc ţ8źăEë‹ö͚5‹Ř,Ҝô˂ßęwčW­ _<ĘSˆ‡íМżú֟Ę}–Ćž˛ÍˇĘß?'U0$nP˜Ţsšy­ň™ˇ\Ÿq*›•4âżrvÁăĐ´bžOaSÜl“ŻřŠî}Ż,öî k"žáŔý}Ú´iÖxKŁ÷žé~mžńÜbšÇFŰŻ[WÁ˛ %eď}¨Ź¸Ć{Žă=œ—˛Fx¸KፂŢoMĺüqz$@$Pî L.÷3äI€ʂt6ź›Z šëtĐY - Őż–ŹĂ|×]wŮ5#÷íŰgýtĘâBâ˜$@$@$@$pş€ĆÂľx¨ŽĐ^x˜P5X˘rHhíž4œH<ô†oFúíČ­gšH€H€H€H Ęë]q[Ÿ6ZO‘ž`ľœ1     ÄB 1—ĄˆĺČنH€H€H€H€â @4v!   8} P@ŸžçžGN$@$@$@$ č8 ą    ŔéK€úô=÷}Ď=œH€H€H€H Đq@c    Ó—ôé{îyä$@$@$@$@qH‰ŁOBv9ăŒ3ň¸xP$@$@$@$ŕXťv­¤¤¤Ř---M’““%55ŐĆ(OJJ˛›ö9yň¤äĺĺI~~žěÝťW‹Oë˜čÓúôóŕI€H€H€H€‚ €JŒíI€H€H€H€Nk - ń“    ŔŠ%č,ĄtĽJ•NíŐ½‘    H˘k°„Đź~I€H€H€H€H ´ P@—6QŽG$@$@$@$Đ( úôňŕH€H€H€H€J›tiuĆ{饗䢋.’K.šD6mÚäÔ0I$@$@$@$PQ đE*Ďܖ-dÄČ9˛ęË풜ţ!ĹܜĂňŸŐ/IFFŽ<ôĐp9돳î‰ÍI€H€H€H€Ę# č€geäCďËš—œ)#{­dĽ'KJR%óś#¤ĄĽíŞyćm=ů"/üů’–Y_rNV—Ĺ_ԉ¸źÝgÆ ö@5 ˝ýç÷ż˙˝tďŢ]Î=÷܈ýc­œ3gŽ}ƒPż~ýŠu‰TWŹq)œ8qBŽ;&UŤV-Ľ9    ”=şp` Ąűá;¤yűsdǁٲď„lݟ#[÷ĺČvłm3é-&žżpšź÷ŢťrÂéžĂî—ĎVíľŻŔôîęđáĂ2|řpiذĄ 2DhÓ#FŒ°M'L˜ kÖŹńv‹;ż`Á™={śo˙HužJP8kÖ,šňĘ+ĽV­ZňĆo”`$v%   SO€čĚí{ŕÓ3dϑ|9™|RRBN61ŒĎXﰒ1AçääÉ+/˝ &’]uŁ$×h"’ńĐxן† &ŤWŻ–•+WZ1‰:źg~çΝnł„KŸţůňꍯJˇnÝîŘx@$@$@$@‰O€čçŘ č´TŮb,Í+W|)c=@v›|öń|Ů4_ö=)Î}[6mÜ Ů5ęJ›+n–˝Gó$/=ľ˜zóćÍ2qâD7n\H)—öźCç§J’i›–múx,Ď:tđÔ͎9R.żürŰË/ž(ŤV­˛ öîÝkEękŻ˝&óć͓ącÇĘÁƒmݓO>)ăǏ—§Ÿ~ZvěŘ!đĽvžôéÓGŽžúę"űď˝÷Ź%ýíˇß–f͚Ƀ>hťA$÷ěŮSŕŸýő×_Ëc=&ƒ–ĽK—Úö?ü°ÝÇG}d÷ń×   HDtáxVS˛ŇeÇĄ\К+ŇŹsůϊĽ˛÷ť2sęc=N‘ƒĆbÜěÂ+%˝aůÎXĽ˗´ŹŒb{Ůľk—dggKZZqqí6ž÷Ţ{ĺÎ;ď´E-[ś”e˖ه !rąD^ffŚ­kѢ…ŔůşëŽ“—_~YnšĺéŐŤW¨Ÿ;ćý÷ßo÷ýČ#¸ĹŇšsgѲѣGËe—]fňƒh_ž|š@Ź×ŠSǎűüóĎ ,Ííۡˇóh0`€´mŰVîšçk/283$@$@$@$ ( žČtcMN5žĚi)’‘š.WőťWfž0J6~ąŔŽ”]šštę1HŇÓSä˜ń‘N5>ŇFt{Źš‡’ýű÷[7 o˝ć›7oŽÉ"b{îÜš˛bĹ šőÖ[CőŰśmłi¸‡@üúXž'OžlĹś÷=őééßĎłUŤVV<Ż[ˇÎŽa W¸^hh׎Ŕ­CĂÝwß-O<ń„,\¸Đú7k9c   H4táxFÓ3ÓĽJF˛TËJ5[š´lÓ^.šś—¤$'Ůíš>wIƒúuM]şTËN•Ş)ƅă{aŞťĂŇt2cĆ - ׎][`u^´hQhťýöŰígœq†ľTű a — řUoߞݯ‰-ƒŤVÉ@{ř_CčĂjŽő(×đÜsĎ Ä>Ü=ŚM›ŚĹŒI€H€H€H áP@<ĽYU2¤şÄŐ+gIjŮRŤZešĄßŇ Ń9ҺݏĽS×îRłJśTŻ’)5*gšśiRšjqˆSÔ7 XĚ_yĺ+aĹÜőáDäŸzę)kŮĆŰq\ëׯË    $ č€głAí,ŠeÄqšŘR¤VÍJŇ AŚüüţ‘r›ńWŽS;Yj×J–şľŇL}–Ô1"űĚşYž{yüńÇíĂx]şt‘sÎ1ÜŹn§ÄňÚoˆZ<(Řťwoëo űüĂîţËx}xǎíşŇxĐ tá˛qŰmˇYQŒzˆúkŽšĆZ’aEĆ8h7eĘůӟţdç‰}c žëŻż^rss­ď3TÄz֘?Ƅk Vô pő€•üóĎ?ˇă ‡H€H€H€H "¨Ëe¸`|d+ÖůĹ(ónäŘPŽi7ĆBČČk läŁL7-om,˘ăMy\á›ožąBÍťţ˛ß`qŃޚ7ćŻČš—v1ţŔi’nž˙KÁŒq´ŔX#itĽœ8&˛eË Yőé2jpgë˛aŞŠˆĐľk×JÝşuËÄ 8pŀ;–ŔsƒZ¤cyÓßŃŁGmW<”1ëşg¸cb_pIIÁ)b   ¨h 9đ9Ž ‹@'ĽŚŚÚeĐŽŚ€Ö°Kůš_¨ą X´€ś[ˇnľšhmĂŐŁŢS÷•ŮĚkéĨ*UN7äľ1ĘÝiwƒ4Ó<Ň~›).x§´Ćć¸ŃÎ7$´ ŠpÜž0˘Ú m×g˛w]e9űŹć5ŢF=´!źš6ąq‰6z:OöŹY,I;>5i—°Ăc\ʰOŔwœ řvE8kG]ÍůpâuîŐČ3   €—@ik0ďř?t>Ąô÷ôŇÁŒoh}z÷˛žŔSć¸KD". ąXÁŁĹz   ¨J[ƒ•ˇcNh]Ú°q1`ő ź(ná||użͰćVŠRĹžpDË“    T\ĐĎD4ŹĘAÜ#î‚ÍI€H€H€H€Ę1˘O•ă‰rj$@$@$@$@$PP@—‡łŔ9    TĐćTq˘$@$@$@$@ĺty8 œ    @…!Ŕ‡ž*, ţúëŻŰÂc銴ŕM€5k֌Ľ9ې    ”sĐOĐ̙3ĺ‚ ÚĘ AƒŠźĽÇo˜|óƞĽK—Ęoźa_Ůí×eXoÆ ö@x%ˇžýŻÇĆŤąą˝\Ş• IDATt^i„9sćŘ7őëׯŘp‘ęŠ5.…ź%ńȑ#|1K)°ä$@$@$@§–]8đÖWSžwŢšqŒ oÚńnZ‡öżŰśmó]3úđáĂ2|řpiذĄ 2DhÓ#FŒ°łš0a‚ŹYł&Ŕ #7]°`Ěž=ۡQ¤:ßqîÚľKÚˇo/×]wÜtÓMŇšsgÁ+×H€H€H€H ˘ :Ŕ™‚ ÎĘʲÂieŹ -ôÚJˆjSŽzíƒŘű6ÂaÆÉęŐŤeĺʕbŢůnÇBŸ;wÚt"ţƒőłaíŽS§Ž=źťďž[~÷ťßÉË/żœˆ‡Ëc"  H@´@8Š*šsNäHnnŽäaËĎł"ŮćHF›\lŚ[NNNHHťťÚźyłLœ8QƍϨ‡űFýúőCMaĽîßżż}Łá}÷Ý*GbęÔŠŇ´iSŰţ™gž ŐaŸx[băƍĽZľjŇŁGP&öěŮ#:u’Ĺ‹k‘ÇŒcÇkÓŚ,Y˛$TˇqăFéÖ­›Ô¨QCZˇn-Ó§OˇuřŇСo_yôŃGCm'Mš$C‡ ĺÝDzzzH<ŁüĚ3ϔM›6šM˜&   rM€:ŕéĚ?™_  ľ8?ŻŔĘ áŹ›Zž! 222Ší–g„:Ťs FŽ)—_~šĚš5K^|ńEYľj•­ĆÌŠŻ˝öšĚ›7OƎ+´uO>ů¤Œ?^ž~úiűĘqřRťóěÓ§\}őŐEö˙Ţ{ďYKúŰoż-͚5“|ĐvƒHƃđĎţúëŻĺąÇł>Ýđď†ĺýá‡ě㣏>˛űƒx‡kJ´pôčQ™ŹćPr Ď=÷œ@ěă Ä´iÓ´Ř7†kÉ_|a…<Ř1   @E"@đlAôŞ`†X†Őeş!Ż›śC7@œÂ ;jÔ(ůä“OBŐ°"żóÎ;Ą|¸ÜűřăĺÝwßľM \ąś2ÖyĆC~ú ,ŇnŔ°PăáBŹĹŹŤŕáB¸WŕĹŽ]ťZ7¸iŔbţĘ+ŻX +6ćŹ'"˙ÔSOYAüŇK/ŮăZż~˝[$Ćƒ=ôő݆{,đ°Ä3   @E!Đ.ęNQš'ËŘA8CĂ íuƒĐ}A„j=|ýÂă?nŰtéŇE`5†đ†Oó]wÝĺןHD-ěÝťˇľ?~\෌žˆáz˙bŹčMĹ´Ą{ŐUWÉmˇÝrš€¨żćškdßž}öČ7ß|Ó6ÇźŕjŤőłĎ>kÄZŐ×_˝}˜žĎxˆëYcØp-™?~ąĽű>űě3ë˘â;8˙üó­;ŠÎ1   @Ĺ&PŹ<Šé8Ô'äüb”y7X´ąĄ\Ónœ\XŽ1<ęŁL7-om,˘ăMy\/č€0…E´€vŃ,ŚxŤ „'^Íý=˙ž`‹Ő2Ţ˙}šńĆ­čök‰Ő:ÖŽ]+uëÖľËÄůľ W†}ŔîúCmŤiŹ˝-Ŕ~ǎEÜ3ÜžŘÜGđ倁H€H€H â€ćŔç86Ą“𫹺¨BO¸šZ+xÁ8]- íÖ­[­kg´śáęQoˆŠűĘlxé–5Ës6äľ1ęÜiwłŻç(,CÚo3Ĺś<›ăF;ß@ä‹ĹżÜ`QĆjф9. Ď?˙ÜŽbiŠ6Œ‹6â ń 4đí‹p֎şšňŽołÖkěŽQ­eŒI€H€H€Hŕt"@ŕlC0cýdřżőÖ[1ő„ˆ…KC4ąÓ`lD$@$@$@$đƒ €p `íĹęxQÜ`aŽ šaÍ­RĽJTwH㰎H€H€H€H ü €x. ˘aUâplN$@$@$@$PŽ ŕ>      P@ÇŠÍH€H€H€H€H( y    @Đ`ą)     đ!€×ýő×íáątĹ Zzöěi_źK{ś!   (ß( žŸ™3gĘ´•AƒyKß0xcĎŇĽKíŰ ě×Ėa9ź 6Ř75jÔ(4.^Ý˝{wťt^ŘÎ*ć̙cß ÔŻ_żb˝"Ők\ÂźŘgóćÍö͌xű"    T$tápśôՔçwŽ}%2Ä wC96´ÇşŃŰśmó]3úđáĂ2|řpiذĄ 2DhÓ#FŒ°łš0a‚ŹYł&Ŕ #7]°`Ěž=ۡQ¤:ß%(ė„_üâÖ2ßşukٸqc FcW   8ľhŔ‚8+++$Ž!’°64śĐ+Ó!ŞMšŠhôA_ďۇ &ŤWŻśŻ7ď|ˇcĄĎΝ;m:Q˙Ů´iSČʎ7;žđ ňä“O&ęáň¸H€H€H€Œ-ĐN(D0nΉÉÍ͕úČîâŽ)áž<<ńÄrÝu×É 7Ü ˇŢzk¸Ś,'   rG€.OIffŚ9rÄşcŔ’ é :a†ŔöĐťví’ěělIKKóë*ť÷Ţ{ĺÎ;ď´ů–-[ʲeËŹ_5DîE]$˜B‹-~ĚĽ/żü˛ÜrË-ŇŤWŻP?›(üçţűďˇű~ä‘GÜbéÜšłhŮčŃŁĺ˛Ë.“cǎYŃž|ůr+ÖëÔŠcÇ}ţůç–ćöíŰŰů@´0@Úśm+÷ÜsľŒÜÉ=zÔú…űíˇv[ˇnľÖr§ “$@$@$@$Pn ĐđÔŔ Ń fhlHëŚeI•LyR˛m‹>ŢkîĄC‡d˙ţýŢŞ"ůć͛‡ňŽŘž;wŽŹXąÂZoaÁ…Ő+"Ŕ ńë`ů†ťÇËpiҤIhČvíÚŮr-¸űîť­ťĘ… E‚Ô:o ą˙ç?˙ŮÎbúĄ‡ň6ažH€H€H€Ę-„ĐĄ‡úJ?ŹÉË)))Öz Q›ššÚBů´‚2´őł@cu”Ď˜1#ŽŮŐŽ]ŰZ-Z$şÝ~űív,Ź= Kľ_€0†ËüŞˇoßî×ĖÁUžŮh_Ż^=+ôa5׀z”kxîšçb̧M›ŚĹQc¸†|đÁQŰą   @Ĺ!PŹ<}B čpî%9˝*˜!–aľE™nČëŚíPç §đa5j”|ňÉ'ĄjX‘ßyçP>\î}üńÇňîťďÚ&¸P8`ÓXçůéC€°HťüÁB‡ Ꭲaĺʕ‚‡ aÍĆŠ]ťvľv¸iŔbţĘ+ŻX +6ćŹ'"˙ÔSOÉäɓ套^˛Çľ~ýzśHŒŐW>â˙üç?íC‰E1C$@$@$PĄ ”…+O@čđl`I:gˆbXĄĂ] ĄZ_gżđřăŰ6]ştX!źáÓ|×]wů5/RQ‹{÷îm-ĹǏř-Ł/b¸^těŘŃŽ¨U=TLë şW]u•ÜvŰmňꍯÚbˆúkŽšFöíŰgˆ|óÍ7m9ć5eĘkľ~öŮg탂pÓ¸ţúëíÔđ}ĆC„XĎƄ[Éüůó­ľ^÷‰Kôa吋/žŘşšŔ˙Ç?ţŃmÂ4    ”k•"™Ř8Ô'äüb”y7X´ąĄ\Ónœ\XŽ1<ęŁL7-om,˘ăMy\á›ožąÂnŃl´Ÿŕ7Ţxà Ϛ5k†Ď:ŘbľŒ÷ß_nźńF+şľÎa‰]ťv­ŕ­|X&.HŔ>ŕŠw ř_ťA-ŇUŤVu‹}ÓđEF€€ßącG÷ ˇö÷|9ˆ7@ěĂB ćąĚ-Ţý°   @qĐřÇŁ t~5WU}žK{Bk`/Ąk˘´Ĺîs\ŃúxëQoˆ)űĘlxé–5Ës6äľ1ęÜiwłŻç(,CÚo3Ĺś<›ăF;ßż ň.ą qĄÁÍeŹ6M˜ăúüóĎí*7ß|sX8+lÄđ§Aƒž]ƒˆS]ÍšžÍށÝ5Ş˝uąćaŃćÚĎąŇb;   ňF€:Ŕ`ĆúÉđ~ë­ˇbę  —†hb;ŚÁ؈H€H€H€Hŕ'@ŕŔÚ Ÿ]ź(n°0G ͰćVŠR%ŞťG¤qXG$@$@$@$P~P@<Ѱ*q¸ 6'   (ÇŠ>uVŽ'ĘŠ‘    @y @]Îç@$@$@$@$PaP@W˜Sʼn’    ”Đĺá,p$@$@$@$@†" xް€ř믿nĽ+^ŇłgOÁ‹WH€H€H€H€*> č€çpć̙rÁmeĐ AĹŢüç oěYştŠ}{áŕÁƒ˝ŐĄ<–Ă۰aƒ}#PŁFBăâőŘÝťwˇKç…— 1gÎűĄ~ýú%R]ąĆ,    Ó˜]8œ|}5ĺyçk_g Œˇ,Ç—† ʐ!CdŕŔ6=bÄ;Ť &Ț5kĚ0rÓ ČěŮł}EŞóíP …řrWˆâUç $@$@$@$PQĐŕLAgee…Ä1D2ֆĆze:Dľ)W>čë}á°aĂdőęŐöőŕćďv,ôŮšs§M'ň?řňpűíˇŰ/ ‰|œ<6   Ä#@ t€s  ›s"Grss%[~žÇ6oęŃ&›ŠĂ–““ŇîŽ6oŢ,'N”qăƉŠgÔ'%%IýúőCM!4ű÷ďoßhxß}÷…Ę‘˜:uŞ4mÚÔść™gBuŘ'ޖظqcŠV­šôčŃ#T§‰={öH§NdńâĹZdă1cĆŘńÚ´i#K–, ŐmܸQşuë&5jԐ֭[ËôéÓmž4ôíŰW}ôŃPŰI“&ÉĐĄCCyżÄ˝÷Ţkô9çœăWÍ2   (ˇ( žšôôtÉ?™_  ˜ÎĎ+pՀpÖM-ĎĐĹöË3B‡ŠŐš#GŽ”Ë/ż\f͚%/žř˘ŹZľĘVăaFˆÔ×^{Mć͛'cǎ•ƒÚş'Ÿ|RƏ/O?ý´}ĺ8|ŠÝ€yöéÓGŽžúę"űď˝÷Ź%ýíˇß–f͚Ƀ>hťA$ăAHřgýő×ňŘc |şá‚ËűĂ?,ŘÇG}d÷ńהpáŐW_•ożýV~őŤ_…kÂr   (ˇڅ#äRQŠř333ĺȑ#ÖÖbHż€}Ă: í' wíÚ%ŮŮŮÖŘŻż–ÁR{çwÚl˖-eٲeÖŻ"÷˘‹.ĚĄE‹?ć뎝N^~ůešĺ–[¤WŻ^Ą~6QřĎý÷ßo÷ýČ#¸ĹŇšsgѲѣGËe—]&ǎł˘}ůňĺVŹ×ŠSǎűüóĎ ,Ííۡˇóh0`€´mŰVîšçk/2xa–wě?ü0,;ż~,#  ¨8ĘBƒ•§ŁOhNܖäŔqáόX7S/˜“ůĆ ÚŘ÷Ł7Ŕš{čĐ!ŮżżułđÖkžyóćš,"śçΝ++Vʐ[o˝5T‡ R!~ý,ߓ'OśbŰËǝgŤV­Źx^ˇnlÚ´ÉÎąI“&Ą!Űľk'pëĐp÷ÝwËOůä“P5ŹČďźóN(.÷>ţřcy÷ÝwmőŘ4ÖyĆC~ú ,ŇnŔ°PăáB¸ŁhXšrĽŕáB< ŘľkWűP#Ü4`1ĺ•WěXą1g}8ů§žzĘZś_zé%{\ëׯ×a‹Äđť†ˆÖ /˜šöÚk탉E2C$@$@$@ĺ”-ĐO –¤ƒp†(†:ÜOĄZ_gżđřăŰ6]ştX!źáÓ|×]wů5/RQ‹{÷îm-ĹǏř-Ł/b¸^těŘŃZ˜aeV1­ƒ@č^uŐUrŰmˇ…\. ęáFąoß>ű@ä›oži›c^SŚLąVëgŸ}Ö>(ˆľŞŻżţzű0%|Ÿń!ֳƆ1aýž?žľŇë>“   @"¨Ëe¸`ÄĄ>!çŁĚťÁ˘ ĺšvăäÂr!ŕQeşiykcoĘă ß|óŚŢő—ýƒ€đ@Ýoźa…',§ßăńď śX-/ šńĆ­čök‰Ő:ÖŽ]+uëÖľËÄůľ W†}lßžÝ.s‡‡Ý éŞUŤşĹžéŁGÚrř;vŘńüb_pÁ—   ŠGšŸăŘ`„NÂŻćę˘ =áj h Źŕă tM´€ś[ˇnľŽŃچŤ7F˝!Śî+łáĽXÖ,Ďِ×rĨsc¤Ý bWóHűmŚŘ–‡bsÜaE2U0ĹpĄÁÍeŹ6M˜ăúüóĎí*7ß|sŘ˝`\ʰO€ˆoĐ o×X„łvÔŐ<ŻWŻž‹ĂůLkČ   HPĐN,3ÖO†/đ[o˝SOˆX¸4DŰ1 ĆF$@$@$@$@?8 č§Ö^ŹžuŒáć s¤Ń kn•*U˘ş{D‡u$@$@$@$@ĺ‡tŔs Ťr÷ˆ€ť`s    rL čSgĺx˘œ     ”Đĺá,p$@$@$@$@†t…9Uœ(    @y @]†g/+šč˘‹ä’K.‘M›6•áž84    ŔŠ"Ŕ‡’Ţ˛ĺ€Œ9GV}š]’Sôý2ĹÉÍ9,˙Yý’yyJŽ<ôĐp9돳Š7b    @…#@đ”|č}9÷’3eäoŻ•ŹôdIIŞdŢÖc„4´´}_y[y×Í ţƒ¤e֗œ“Őeńu"îËámذÁž¨QŁFĄˇ˙ŕőŘÝťwˇKçE ĆĘ9sćŘ7őëׯXHuĹł€H€H€H€Nctápň!t?üb‡4oŽě8#[ö­űsdëžŮnśm&˝ĹÄó.—÷Ţ{WN!ÝwŘýňŮŞ˝žkF>|X†. 6”!C†ČŔmzĈvV&L5kÖ˜aäŚ ,Ůłgű6ŠTçŰĄ…×\sŕ͇•+WśŽ›H€H€H€* Z œ)čüô Ůs$_N&Ÿ”Tِ“M ă3ևŽdLĐ99yňĘK/ˆ‰äGWÝ(É5šˆd|c´÷m„Æ “ŐŤWŰ׃›wžŰ™ŕ=ó;wî 0ŤŠŮôŸ˙ü§\wÝusňœ5   ŔiM Ą-Đ'OZŸŠR;ÁV@§ĽĘci^šâKűëňذŰ䳏çËţŁů˛ďčIůpî۲iăÉŽQWÚ\qłě=š'yéŠĹ,Л7o–‰'ʸqăDĹ3&š””$őë×ÍVęţýűŰ7Ţwß}Ąr$ŚN*M›6ľíŸyć™P]NNŽ}[băƍĽZľjŇŁGP&öěŮ#:u’Ĺ‹k‘ÇŒcÇkÓŚ,Y˛$TˇqăFéÖ­›Ô¨QCZˇn-Ó§Oˇu`ܡo_yôŃGCm'Mš$C‡ ĺ™   8˝”ś+oôZ@Ă*\Ú!-+͘›“$łAKiŇć9p`żĚžň?˛sĎw˛s÷^y÷ľżč“riĎ;äp~Ş$™śiŮŚ'ŔňŒĐĄCOMŃěȑ#ĺňË/—Yłfɋ/ž(ŤV­˛ öîÝkEękŻ˝&óć͓ącÇĘÁƒmݓO>)ăǏ—§Ÿ~ÚžržÔnŔ>}úČŐW_]d˙ď˝÷žľ¤żýöŰŇŹY3yđÁm7üôěŮSŕŸýő×_Ëc=&ƒ–ĽK—Úö?ü°`}ô‘Ý^uהHmî¸ăůâ‹/"5c   @$PŹ`Ŕ+Šďšçk/2¸“ůË_ţbǂľÇđÉ'Ÿ8ľL’   @ů&@č€ç'ÝX“S““%#-E2RÓĺŞ~÷ĘĚFÉĆ/ ÄkvĺjŇŠÇ IOO‘cĆG:ŐřHgŃí °ć:tHöďßoÝ,źőšoŢźš&‹ˆíšsçƊ+äÖ[o Őoۜ͌árŮe—…ĘÝ,ߓ'OśâŘűí0=ýűyśjŐJ ž×­[g×°†+H“&MBCľk×NŕÖĄáîťď–'žxB.\(ŻžúŞűưncƒČ_ťv­üáK/˝Ôˇ- I€H€H€H ź :ŕIĎL—*ÉR-+ŐliҲM{šäÚ^’’œdˇkúÜ% ę×5uéR-;UŞf¤Žď…ŠîV[X‡g̘ĄEâÚľk[Ťó˘E‹DˇŰożÝŽqĆg„,ŐŢA!Œárżęíۡ{ŤCy¸jŔ7íëŐŤg…>ŹćPr Ď=÷œ@ěĂÝcÚ´iZ5†ö–-[˘śc   (/( ž‰Ź*RÝâꕳ¤FľlŠU­˛ÜĐďiĐčiÝîÇŇŠkwŠY%[ŞWɔ•3MŰ4Š\ľ¸ Ä)´ƒ[„ëÂ+ň;ďźuVxpďă?–wß}ל…p=pŕ€Mcg<ä§Â"í<đ 5.~ü¸ő[F_ř/Ăő˘cǎvE ŹęĄbZǀнꪫäśŰn š\@Ôcć}űöŮUCŢ|óMŰóš2eŠľZ?űěłöAAŹU}ýő×KnnŽő}ĆC„XĎƄkÉüůó ČÚśmkçŒ×›ă5çx(‘H€H€H€* J‘–1>˛şŒ…_Œ2ď‹66”kڍĄŚ×yÄ(ÓMË[‹čxSWřć›oŹ0őqŢ!`ŁXLÇüő9÷Ň.Ć8MŇÍó)˜1Ž+ćĆH])'މqO8!Ť>ý@F îl]6LUą _ŕşuëÚeâŠ5ˆP€óW ¸SŕĄ<7¨EşjŐŞnąoúčŃŁś~ǎEÜ3ÜŘÜGRRâ˙î+7ĆÁÍ%ǝÓ$@$@$@ą€ćŔç/6,f„ Ł zÂŐĐv)_ó 5V‹ĐvëÖ­Öľ3ZŰpőƨ7ÄÔ}e6óZ:1ŞJŒy2´!ŻĺˆQçĆHť¤™ć‘öŰLqÁ;Ľ56Ǎvž!~ä;\bÚ m×g˛w]e9űŹć5ŢF=´!źš6ąq‰6z:OöŹY,I;>5d—°p0ŽwĽŒ°=řŽÓ AOiA6áŹ!œ5¸žÍZŚąťFľ–aéĆĆ@$@$@$@‘t€ł†of}z÷řO™÷˜zBÄÂĽ!+xL˛    ŔJ€:~X{ąz^7üD)@4Ú[ĽJű‘HmYG$@$@$@$P1P@uVŽ'ĘŠ‘    @y @]Îç@$@$@$@$PaP@W˜Sʼn’    ”Đĺá,p$@$@$@$@†" xް€ř믿nĽ+^ĐŇłgOŠYłf,ÍنH€H€H€H œ €x‚fΜ)\ĐV Tä-=~Ăä›7ö,]şTŢxă |ř° >\6l(C† ‘Úôˆ#ěü&L˜ kÖŹ‰kŽ~,X łgĎöŤ’HužJPřŐW_Iťví엊Ÿ˙üçҢE‹ŒĆŽ$@$@$@ĺ@ik°ňv| mĆšÍĽ ˆł˛˛ŹpFBűÁşX ŞM9ęľbďۇ &ŤWŻ–•+W†^m>;wî´ă&â?8ž›nşI|đAkĹÇ1†¸%âó˜H€H€Hŕ4$PÚŹź!Lh tiĂVќs"Grss%[~žÉ6oD2Úäb3uŘrrrBBڝĎć͛eâĉ2nܸxF}RR’ÔŻ_?ÔVęţýűŰ7Ţwß}Ąr$ŚN*M›6ľíŸyć™Pö‰ˇ%6nÜXŞUŤ&=zôŐibϞ=ŇŠS'YźxąŮx̘1vź6mÚȒ%KBu7n”nÝşI5¤uëÖ2}út[ńۡo_yôŃGCm'Mš$C‡ ĺÝÄÜšsűĆëÍ5$ú™'c   Ä @đ<ڧ§KţÉümŹŠůyVfgÝÔň ‘‘Ql/°<#tčĐĄX[0räHšüňËeÖŹYňâ‹/ĘŞ˙ßŢŮGŰ5¤ůżnŢHŇi‘0ф¤Ž‘fMƒFź/эDÖdŃh´Ě Ţfy›ôĎXcMÚŰä—!˘^BfZЃ ŇidňJX!Ź´ź!ď÷ˇżuďsRwß}Î=űÜssÎŮçSkíűT=őTíŞĎ>˝ú›Rťö‡új˝Ě(‘úĚ3ϸW_}ŐÝqÇnÝşužîîťďv'Nt&LđŸ×^ę0iœ#GŽtÆ kq˙—_~ŮŻ¤Ď˜1ĂpŔ~•Xí$’ő"¤ög/\¸ĐÝ~űí~ű…öwKüŽ?Ţ鯽öšżŸÄťśŚ$ĽE‹šýöŰĎ÷ąĎ>űx1Žű‘ @€@­ČôŽŽxÝťwwß~ű­ßŽĄŐâ|Ť§Z–ŔNĐ_}ő•ëŮł§ëÖ­[Áa^uŐUî’K.ń1t{ď˝÷üžj‰ÎĄC‡:GIűˆľů”SNq=ö˜;űěłÝ9眓kç3Íƍçď}Ë-ˇ„nwôŃG;óÝtÓMŽr6lđ˘ýý÷ß÷b}÷Ýw÷ý>řŕƒN+͇v˜Dű…^č† ⎸⠿2ޢó悶§HxkŐZ{Ą%ôľ˙{ůň幗'“Úრ@ŐB€č”OB+ĐÍÚĎ,­KyťĚ׊!ňwęěcŐ&ž´šť~ýzˇf͚xU‹ňŔsĺPlk+ÄüůóݨQŁüĽUo˝Ź¨¤í!żII+ßÚîqÝu׾˙á8 äĹóŇĽK˝¸ŐVŃi–ô DŻĽË.ťĚoWyë­ˇœ˝iuĄŐ=÷ÜÓýęWżň"ţ—żüĽç0gΜ0Œ< @¨Z蔏FŤÉË]ştńŤÇľ]ťvÍ]šrˇ&Ÿb“V u:‡üS§NM9‚Śđž}űúUçˇß~ŰŮ5fĚ_Šł§ľR”$ŒľĺBűŞżř⋤ďÓVÝvŰÍ)ž˙ţ^čkŐܒęĺˇôŔ8‰}­źO™2ĹÜ­Źölýő×^lŤR|tŸśţ!ŃŞ#€ @ BĐ)ÁKôš`–XÖŞ­|vŠl—ĹŠ.ž$ľ‡ůĆotožůfŽZŤČ3gÎ̕óe´â7ŢpłfÍň!Žk׎őyóŹ—üě%@­H‡I/üi…Z/j;Š%˘ü´š­?ţxżÂŽmZ1Ÿ4i’ČZĹ֘íĺD•ďšç7yňd÷Č#řy-[śĚşmaO:é$żňl/!jkˆśuüä'?iG€ T+ö@§|2:ĆNÂY˘XŤĐůö@K„Z˝ö:'Ľ;ďźÓÇwÜqNŤĆŢÚÓ|饗&…ˇđIÔj˙đˆ#ü îƍö-Ť­Źś^qÄţD ęabÚ:‘Đ=á„üiO?ý´wKԟxâ‰nőęŐţ…ČiÓŚyżĆőÄOřUëűďżßż(¨m§žzŞ™R{ŸőĄÎłÖĽ6´ľDŰ2´Â&ýŁB}ýüç?÷[I4ÎßţöˇN{ŤI€ @ 4hĺ2_ŠÄĄ¤œdĺ‹_ZŃÖ%żĺC+5Ľ˛Y x•eĺłËüƒŁщ‘ż¤¤$Lă".Š3Ĺľ•ôBž*(áŠOsoǓÜRluZĆěŮłÝđáĂ˝čNŠÔiK–,qýúőóÇÄ%ĹäóéڊĄíÚ&[‘îŐŤWčNĚ÷ÝwŢ/żrĺĘŰ3Âş—śčíIšłžŽÚÓ?JH€ ěŇú˙q]Z”NŇ—Ź|ö>—FZC'xiqPşŚ­¤Ř+Vř­mĹ櫏őĆFuE—>şĄcÍś—Ęć—U]h•/˙yŽfŸňIWäöţœćW$ˇOéu”ôŁŇ6­(봉ś„š~@óćÍó§XœuÖYyIŠ_°QJ’ˆ×KyIŠálíě4•Ă˝ÍVo6<ŁÚ|ĽXÍYçI“ @€@­@@§xbĚ:?Y{§OŸ^TK‰XmihKlŐA€ @'€€Nń´ÚŤÓ3ôĄmsĐ sĄ$ŃŹŐÜ]vŮĽÍí…úĄ€ @ z  S> ‰h­*§Ů‘ň„C€ T1–oUń@ @€ށşžc€ @¨čšyT € @   Ťá)0@€ š!é— œ]ňŇâĎ>űŹ? ź˜Nô–3Ď<ÓxĽ˜xb @€@­č VML2- ŰúR`)âůçŸw?úŃ7zôčV_ţ‹÷§/öźűîťţë…_|qź:WÖqxüą˙úĎŢ{ďëWŸÇ>í´ÓüŃyšŕvd^zé%˙ĄóÎ;ŻU/…ęZ〠@t„+pť^ĹŽČíӔüC˙9K dý +~ÉŻKń:7úóĎ?O<3ú›ožq×\sŰkŻ˝ÜŘącÝE]äó×^{­ŐĂ?ě/^œb„…C_ýu÷â‹/&ŞKlP˘SŸC×˙¨â× 7ÜPb4ƒ @;–@ŚW ËR‚¸G9q,‘Źdb0÷Ÿ+$Ş#ż‰hľQŰřׯźňJˇ`Á˙yđč›ďž/ľůňË/}>‹vŢygˇiÓŚÜÔ6oŢě;ě0wâ‰'ć|d @€@5`:Ĺӑ–ŔÝźiłŰ˛e‹ŰŞkŰV/Ž}9ŞWĚ]Q. DŇá­>ýôS÷裏ş{ď˝×™xV}§NÜ{ě‘ Ő*őůçŸďżhxőŐWçüĘ<ůä“n˙ý÷÷ń÷Ýw_ŽN÷Ô×÷Ýw_םwowĆgäę,łjŐ*wä‘GşwŢyÇ\ŢŢzë­žżC9Ä͝;7W÷É'Ÿ¸“O>ŮőéÓÇ <Ř=őÔSžN˙h8÷ÜsÝmˇÝ–‹}üńÇÝĺ—_ž+Ç3]ťvuv=řŕƒnĐ Aî¸ăŽ‹‡Q† @UIňąě´ÓNn[ăś&‰ém[›śjH8Űe‚YZIŤŽń¤•gĽĂ?<^Ő˘|ýőםcŽ9Ć˝đ r~řĄŻ×ˌŠĎ<óŒ{őŐWÝwÜáÖ­[çëîžűn7qâD7aÂ˙ÉqíĽ“Ć9räH7lذ÷ůĺ—ýjúŒ3Üŕl[…D˛^„Ôţě… şŰożÝiOˇöwkő}üřńN÷xíľ×üý$Ţľ5Ľ­ôŮgŸ9Uă$A€ Z!ŔŽ”OŞ{÷îîŰożőŰ1´Z,™”$:ľ:-$ żúę+׳gO×­[ˇ¤ć9ßUW]ĺ.šä_>蠃Ü{ď˝ç÷UKä:ÔićSN9Ĺ=öŘcîěłĎvçœsNŽĎ4˙7nœż÷-ˇÜşÝŃGíĚwÓM7šŁŽ:ĘiϲDűűďżďĹúîťďîűŐĘąVšľýBűź%„/źđB7dČwĹWř•ń'$˛%Ä%ÖI€ @ V  S>)­@K4k?łí}E´íƒnÜ킎Ö÷eŐ&ž´šť~ýzˇfÍżÍ"^oĺZś…Ř~ĺ•WÜüůóݨQŁrőzYQIŰC$~“’Vž'OžěĹv8nņăÔś ‰çĽK—şĺ˗ű10 ×塇ę´­ĂŇe—]ćîşë.÷Ö[oš§Ÿ~ÚÜy­â´âýqtú € Ôśp¤|ZZM–xîŇĽ‹´ZAśýź˛šrˇŚ}žŠMZÖŞ­üS§NM9‚Śđž}űúUçˇß~ŰŮ5fĚ_Šł§ľR”$ŒľĺBűŞżř⋤ďÓV íÍV|˙ţý˝Đתš%ŐËoépűúĔ)S̝×jĽ{řđá˙ńˇ1€ @ ‚Đ)áKôš`–XÖŞ­|vŠl—ĹŠ.ž$Nľ‡ůĆotožůfŽZŤČ3gÎ̕óeôâŢoźáf͚ĺC$\׎]ëó:çY/ůŮK€Z‘“^řÓ ľ^.ÔvK|đÓ˅ÚĂ­?ţx˙RŁśihĹ|ҤI^ k[cś—Užçž{üĘö#<âçľlŮ2붕ժśÎÖ6 @¨5láHůÄt$„łDąVĄăŰ Ź;‰PŤ×^ç¤tçwú@ĄUc oíižôŇK“Â[ř$jő˘ŕˆ#üJńƍö-Ť­ŹDęGáOÔĐŠ&Ś­ ÝN8Á]pÁš-ő:NnőęŐţ…ČiÓŚůpë‰'žđŤÖ÷ßżQPgUŸzęŠţeJí}ÖK„:ĎZ—úÔ֒9sć´:şOΞ=ŰŻtĘgřüóĎťýhˆ=zt‹Żô$uŁ/öźűîťţë…_|qRˆ÷é8ź?ţŘPeď˝÷ÎőŤĎcŸvÚiţčźźSTźôŇKţ Bçw^ŤV…ęZ—ÉńŮgŸůŻćűBc™nC7€ @ Ź2˝…ŁŹ¤˘ÎěӔüC˙9K díń‰_ňëRźÎţüóĎόţć›oÜ5×\ăöÚk/7věXwŃEůüľ×^ë‡ţđÝŋ—mŻżţş{ńĹű+T—Ř N}Íń§?ýŠűĹ/~á†ęnžůćvôFS@€ °c °‚ˇq=râX"YIű|tĺ6ĚKTG~ŃjŁśńŻ^yĺ•nÁ‚ţóŕŃ7ß}_jóĺ—_ú|V˙ÜvŰmîŇK/ő_u\łfMî ˝{÷Îꔙ @"Ŕ tЇ),ťyÓfˇeˡUל­^űrTݘ-ş˘:]›7oÎ éđVŸ~úŠ{ôŃGÝ˝÷ŢëL<ŤžS§Nn=öȅj•úüóĎ÷_4źúęŤs~ež|ňIˇ˙ţűűřűîť/W§{ęk‰ű“(=ăŒ3ru–Yľj•;ňČ#Ý;ďźc.oo˝őVßß!‡âćΝ›Ťűä“OÜÉ'Ÿěúôéăěžzę)_§4œ{îšN˘ŘŇă?î.żür+ś˛]ştqÚ #VK—.u?řÁü8[†@UHňĄě´ÓNn[ăś&‰ém[›śjH Úe+ĎĐJI{|ľňŹtřá‡{›ďĎő×_ďŽ9ć÷ /¸‡zČ}řá‡>T/3J¤>óĚ3îŐW_uwÜq‡[ˇnŻťűîťÝĉ݄ ü'Çľ—:Lçȑ#ݰaĂZÜ˙ĺ—_ö+é3fĚpp€ťá†|3‰d˝ŠýŮ .tˇß~ťÓžníďÖĘűřńăîńÚkŻůűIźkkJž¤4źńĆîŘcős˜&A€ Z!ŔŽ”OŞ{÷îîŰożőŰ1´Zœď˜‰N­NK`' 诞úĘőěŮÓuë֭஺ę*wÉ%—ř˜ƒ:Č˝÷Ţ{~_ľDŽökćSN9Ĺ=öŘcîěłĎvçœsNŽĎ4˙7nœż÷-ˇÜşÝŃGíĚwÓM7šŁŽ:ĘmذÁ‹ö÷ßߋőÝwßÝ÷űŕƒ:­4vŘa~<í^xĄ2dˆťâŠ+üĘx‹Îƒ‚^Ôʸć˙‡?üÁýńt "ČB€ ę%€€Nůl´-ŃŹý̲vY7śşq[´ :ZߗU›xŇjîúőëöÚű;pŕŔ\ÓPlżňĘ+nţüůnÔ¨Qšz˝Ź¨¤í!żII+ߓ'Oöb;.ţĂq4ȋgmąXž|šc(r=ôP§m–.ťě2w×]wšˇŢzË=ýôÓćneľú}úé§ťß˙ţ÷îŕƒv÷ÜsűŮĎ~ćWśľ…@€ޝ[8R>!­&K܋î¤HÖądÉׯ_?L\RL>ŸîĄ­ÚNĄ—Ăd+Ň˝ző ݉ůďžűÎű%pWŽ\Ůb{FŘ@÷Ňöýă ˝I"_űŞăănoż´‡ @ ?iý˙¸.- J'鿚ŰUý˙rř˙ÍŇz‡I‹ƒŇ5m%ĹŽXąÂoíl+6_}´¨76Şű(şôŃ kś5¸T6żŹęBŤ|xE/ŚĺĘĘ']‘Űűs6šˇâSűUPbˇŮtꇦmZQÖim sý€ć͛çOą8돳ňBQż:aŁ”$żçž{&6-F8[C;ÍCĺpołŐ› Ϩ6_ŠVç?“ @€@­@@§xbĚ:?Y{‹}éM"V[ÚŰ)†A( @€@  SŔ×jŻNĎЇB´ÍA+̅’DłVswŮe—6ˇ{ę‡:@€ ę!€€Nů,$˘ľŞœf{DĘ[@€ PĹZžuVĹ-ehö~—Ňm @€Š u –iÝÖ)E<B @€RȺ˴€NůŹ ‡ @€@›Đm""€ @Ű đávEĺt€řłĎ>ë/ځ>Đrć™g:}x…@€ PűĐ)ŸáóĎ?ď~ôŁ!nôčŃ-žŇ“ԍžŘóîťďúŻ^|ńĹI!ާăđ>ţřc˙E ˝÷Ţ;ׯ>}Úi§ůŁóň6NQńŇK/ů/wŢy­ZŞk\ǡß~ë>űě3§ŠčC2$@€ P+Ř‘âI٧)>ř‡ţs–ČzË4~ÉŻKń:7úóĎ?O<3ú›ožq×\sŰkŻ˝ÜŘącÝE]äó×^{­ŐĂ?ě/^œb„…C_ýu÷â‹/&ŞKlЧćuŔ¸K.šÄéˆ/żür;zŁ) @ŘąXúKÁ[‚¸G9q,‘ʤ7MuĺŽl‘¨Žü&˘ŐFmă_#źňĘ+݂ üçÁŁožűžÔćË/żôů,ţY´h‘űĺ/é–/_îúöíë^xá7jÔ(ż/N$@€ PíXNń„$‚%p7oÚěślŮâśęڶՋc_ŽęłEWT§kóćÍ9!ŢęÓO?u>ú¨ť÷Ţ{‰gŐwęÔÉŻĘZŹVŠĎ?˙|˙EĂŤŻžÚÜŢ>ůä“n˙ý÷÷ń÷Ýw_ŽN÷Ô×÷Ýw_םwowĆgäę,łjŐ*wä‘GşwŢyÇ\ŢŢzë­žżC9Ä͝;7W÷É'Ÿ¸“ŮPx IDATO>ŮőéÓÇ <Ř=őÔSžN˙h8÷ÜsÝmˇÝ–‹}üńÇÝĺ—_ž+‡™ˇŢzË 4ȋgůO:é$ˇqăF÷Ę+Ż„aä!@€@Ő@@§|4;í´“ŰÖ¸­I@GbzŰÖŚ­ÎvŮĘł´ŇÎ;ďÜę.ZyV:üđĂ[ՅŽëŻżŢsĚ1~ĽöĄ‡r~řĄŻÖˌŠĎ<óŒ{őŐWÝwÜáÖ­[çëîžűn7qâD7aÂ˙ÉqíĽ“Ć9räH7lذ÷×V ­¤Ď˜1Ăoą¸á†|3‰d˝ŠýŮ .tˇß~ťÓžníďVüřńăîńÚkŻůűIźkkJRŇ|5w‰fĽďžűÎsӊ4 € Ôśp¤|JÝťwwzNŰ1´Z,™”$:ľ:-$ żúę+׳gO×­[ˇ¤ć9ßUW]ĺ÷ ËqĐAš÷Ţ{Ď𥳐Č:t¨Óx”<đ@§}̧œrŠ{ěąÇÜŮgŸíÎ9ç_§va7nœż÷-ˇÜşÝŃGíĚwÓM7šŁŽ:ĘmذÁ‹ö÷ßߋőÝwßÝ÷űŕƒ:­4vŘa~<í^xĄ2dˆťâŠ+üĘx‹Î› ‹Vˇ˙áţÁżˆŠýĐ$@€ PKXNů´´-ŃlZ"ZyťTöWCäďÔŮÇŞMiŇ$/vľŠ­1Űˉ*ßsĎ=nňäÉî‘GńóZśl™uŰĘjś%ĹkźŐ$@€ P ؝ň)é¨5 g‰b­BçŰ-jőÚ뜔îźóNsÜqÇ9­KxkOóĽ—^šŢÂ'QŤGŒáWŠőRžö-Ť­Źś^qÄţD ľlbÚ:‘p=á„Ü\ŕž~úi?ńÄÝęŐŤý‹}ÓŚMó~ë‰'žđŤÖ÷ßżQPŰ4N=őT˙2Ľö>ë%Bg­K}j[ɜ9süj˝ÝӏIJVśľ}EçAK˜“ @€@­hĐĘež‰C{C.ÉĘż´˘­K~ˇśsłßŹźęeĺłËüƒŁщ‘ż¤¤3‡%Lľ˘­¤¸ś’ö?÷Üs^xęÓÜŰń$ˇ[–1{öl7|řp/ş“"uZǒ%K\ż~ýü1qI1ů|ş‡śbh;…ö^‡ÉV¤{őęşó: CI~ĺʕ-śg„ t/miĎ×%ö%đ%¤wÝu×°{ň€ t0iý˙¸.- J'鿚ŰU{ŸË†!­Ą˙zŹĹA隶’bWŹXáˇvś›Ż>ZÔŐ}]ú膎5ÓžśKeóËĘZĺĂËžŁŮ§|Ňš˝?gŁyçÉŹ@ S‘I?4msЊ˛N›hK˜ë4oŢ<ŠĹYg•÷.ę7~RFŢŕX…D|žíĹgëÎNóP9ÜŰlőfľšÝޤm%M‚ @ľHâŠI0ëüdm9˜>}zQ-%bľĽĄ-ą]TgA€ Tœ@Śt•÷’ŔkľW§gčC!Úćž —ÔĄDłVswŮe—6ˇ{$ľÇ@€j‘@š5Xľ1Č´€nkr)C}jU9ÍöˆRîC@€ PŤ:BƒU‹–oUÓČ  @€ސş  C‚ @¨^čę}6Œ € @   ŤđĄ0$@€ ę%€€ŽŢgĂČ @€ސş  C‚ @¨^čę}6Œ € @   ŤđĄ0$@€ ę%€€ŽŢgĂČ @€ސş  C‚ @¨^čę}6Œ € @   ŤđĄ0$@€ ę%€€ŽŢgĂČ @€ސş  C‚ @¨^čę}6Œ € @   ŤđĄ0$@€ ę%iÝŘŘX˝ä @Č(Źk°L 膆†Œţ,™ @¨^Y×`™ĐŐűłbd€ @ľJ]ŤOŽqC€ T„ş"Řš) @€@­@@×ę“cÜ€ @!€€Žvn @€ PŤĐľúä7 @€@E  +‚›B€ Ô*t­>9Ć @€ PčŠ`猀 @ľJ]ŤOŽqC€ T„ş"Řš) @€@­@@×ę“cÜ€ @!€€Žvn @€ PŤĐľúä7 @€@E  +‚›B€ Ô*t­>9Ć @€ P™ЍĘM!@€@=Ⱥ˴€nhh¨çß.s‡ @!u –i]‘_ 7… @Č4tŚ/“ƒ @(7tš‰Ň @€@Ś  3ýx™ @€@š  ËM”ţ @€2MéÇËä @€ĘM]n˘ô@€ ičL?^&@€ PnčrĽ?@€ L@@gúń29@€ r@@—›(ýA€ dš:ӏ—ÉA€ ”›şÜDé€ @ ÓЙ~źL€ @ ÜĐĺ&J€ @™&€€Îôăer€ @ĺ&iÝŘŘXn^ô@€ ЁŹk°L 膆†6/Ő€ @ĺ&u –i]îýA€ @Ío€ @)  SŔ"€ @h~€ @HAĄ€ @@@ó€ @€@ č°… @€šß @€R@@§€E( @€Đü @€ ‚:,B!@€ €€ć7@€ Đ)` @€ 4ż@€ ¤ €€N‹P@€   ů @€ @ L čĆĆĆ(… @(Źk°L 膆†rüč€ @ Źk°L čϙP@€ E]&‚ @€ ĐDÍ/€ @)  SŔ"€ @h~€ @HAĄ€ @@@ó€ @€@ č°… @€šß @€R@@§€E( @€Đü @€ ‚:,B!@€ €€ć7@€ Đ)` @€ 4ż@€ ¤ €€N‹P@€ dZ@766ň„!@€v0Źk°L 膆†üsáv€ @Y×`™Đü|!@€ PnčrĽ?@€ L@@gúń29@€ r@@—›(ýA€ dš:ӏ—ÉA€ ”›şÜDé€ @ ÓЙ~źL€ @ ÜĐĺ&J€ @™&€€Îôăer€ @ĺ&€€.7Qúƒ @Č4tŚ/“ƒ @(7tš‰Ň @€@Ś  3ýx™ @€@š  ËM”ţ @€2MéÇËä @€ĘM]n˘ô@€ i™Ѝ™~xL€ T#Źk°L 膆†jüM1&@€ iY×`™Йţe29@€ Š@@W;7… @¨UčZ}rŒ€ @ "ĐÁÎM!@€j•şVŸă† @¨tE°sS@€ Z%€€ŽŐ'Ǹ!@€*B]ěÜ€ @ V  kőÉ1n@€ Š@@W;7… @¨UčZ}rŒ€ @ "ĐÁÎM!@€j•şVŸă† @¨.škŢtɒ%U8*†@€ĘK`˙ý÷OÝaçΝSˇÉrtóÓíŇYţĄ37@€ P.¨Ćf’črý¤č€ d›@ŚtcccŃOŻ[ˇnEÇ@€ Ÿ@ –ż—ę­É´€nhh(š<{{ŠFE  @(H +ŘQ•VfZ@§aŢľk×4áÄB€ Ô)tóƒgşN˙Ŕ´!@€@Jčf`źD˜ň—C8 @¨SčćߊߔŠÓ˙ 0m@€ Šş:Őď†`@€ PˇXv­ŰGĎÄ!@€J!€€.…m @€ę–[8š}ÖüŽŰ_8‡ @e&€€nşuëÖ2ŁĽ;@€ P}8şˇýĎÝĚpŰśmí§I€ @™'€€n~ÄţóŸ3˙°™  @€@ű đaűŇ @€@@@×ŃĂfŞ€ @í'€€n?Cz€ @¨#č:zŘL€ @ ýĐígH€ @uD]G›ŠB€ ´Ÿ@ŚtCCƒă ƒí˙‘Đ @(–€´—4X–SŚtϞ=Ýć͛łüü˜ @¨*Ň^Ň`YN™ţJŸ>}ÜşuëÜŚM›\׎]YÎň/™šA€ PQZu–x޲e‹“ËrĘ´€îŃŁ‡ëÔŠ“۰aƒżŘΑĺŸ2sƒ @ ’$ ;wîěz÷îívŢygˇmŰśJ§Cďi­×­[7u(E:‡ @ČȲxÖ$3˝:÷É@€ @ LĐeI7€ @őA]ϙYB€ ”‰şL é€ @ >  ëă93K@€ 2@@— $Ý@€ Ôt}ž3ł„ @(t™@Ň  @€@}čRëӜřŕ÷Ç?ţŃ-Y˛Ä­[ˇÎmŰśÍ_6¤ĆĆFŸmhh0—3_Îeň՛_śĄsƒëÚšŤëŐŤ—0`€;äCÜÁěştŮ1hGĚט؟UNĂKńÖś˜i<՞’Ű #ˆöËM˛ňĹ/­hë’ßňĄíÜě7Ť_ŻęeĺłËüƒW­Z51ň“ @¨aŇúӟܳĎ>ëzöěéŽ=öXw衇ú|ˇnÝ:tf›7ovëׯ÷÷˙Ż˙ú/ˇzőjwć™gz1˝]ę”w•œo9fR fá¸wŰmˇąQůŁčÚ][˘kkpŠl~YՅVůđҿȏŹ|Ňš˝?gŁgŘô/9yb B€ ňŘşuŤ›>}ş›;wŽťúęŤÝ~űí—[ń,ďň÷fZHŤÝ˗/w&Lp‡~¸;í´Ó\çÎZż+_ކů–c6;’Y|źŐ. wĚżˆSĄ @€@]`1c†űđĂÝ 7Üŕúöíë$0ő߸óŻď•M´ŽŘŘź¸(Q¸Ç{¸qăĆšxŔuęÔɝzęŠŢ–ăŽU1ßrLd2+ÇpwtÚ>A‚ @e' ąŞ˝Îş~öłŸšď}ď{~Żłô–-[˝VžĐőç?˙Ů}ôŃGnÆ ­âţĺ_ţĹoËHj/!›óoۚťŻ|×.ťôr#GŽôÂ^ăłŐÖö@(Ç|scŽqŃ?Bţă?ţcűœbőůÚĽńW‚Y{xW˛-ş’ôš7 @ Ăžýö[7{ölwä‘Gú•g 4i–íÖ­˝MÂwÁ‚~ŸôŃG펺ę*7pŕ@wÍ5×ř˝Ě& }ôQˇhѢV˘R}J [ßݞDn“݉č]Üßţíßşß˙ţ÷NcmojĎ|mŒ˙÷ďţâ/ţÂ}÷Ýw-ćőĆořm0Wn[)fíe^ŠöčJ‘瞀   Óśď˙űnŸ}öń3Ý´i“…ŞKş%pˇy‘Źm§Ÿ~şß7=mÚ4÷Ţ{ďůŐć뮻΋`[1–_ę[ýŘ=Ź^ĺ­ÍŤŃzIN/ţĺ_ţĽ‹öŰúUn՗šÔśÔůÚř´Ú>kÖ,ĎH{ĆÍoVcł|{í°aĂܓO>™ëOăßŃĚJe] íĐŐđ @ c6nÜčţ÷˙׋çwŢŮĎNžožůĆy!g×zuK´rźĹ=ňČ#ţ˜š_üâNBwKtŠ›ožŮiŐů“O>ń~‰HĹŤ^‚S/Ž]ťśÉ—Ř˙Vˇiă&tžĆ˘—wÚi'ˇ÷Ţ{ű•lůJM홯ć¨K‚ö¸ăŽsgu–›4i’÷YŽŽ;î¸Ăż„Š ßyç\ŒN7:t¨_˝>-úLJŘ[ŰáÇť§žzĘďőžč˘‹ÜíˇßîţçţÇýÓ?ý“2dˆ_íöw0łRYWC;^"ʆ§Ŕ @# -:ăYMg.KŹJJÔIŹiőˇĄSƒëäß&Ôéˇö˘_´ozţýYÍ6nłépÜČ Zŕž\ůĽűéOę~<ôÇnżýös˙ďw˙ĎĎÇĆţ“Ÿüğ2äGCÜŻŽţ•{űíˇýŠúďžţ}Ü AƒœłĘV§d|ůĺ—^D[ېƒůÂţŹ­lۑĚJe] íĐŐđ @ c$ÄôBŸÄœ„šD™ 3Y­J[ŮD›•ţóŸ{a¨Ż*Š^ŤŠZ•`Ţu×]}[ŐiĺXŤˇožůŚÓšĐևÚč˛űÄý*ŰĽýËúźˇâKMj[ę|uň†DłNŃü´ęŹŁűţîďţÎĎMăCí§q*Ż—9ć??˝<ŠSJ´ZuZšÖÉ"ú‡ˆÚ*Ů\e5V­â+ŢüňŮľŁ˜•ĘşÚą…Łžc€ dˆ€D\ˇnÝüƒ¤hŐëʗ$ę$ǎëW›%ö/^ě.šä˙5C =KŠŐšÉS§Nu't’;ŕ€܈#ŹÚ[ÝËV—mĽŘĆ Ő_­@KDk̅ĆŐ˘Ó  6í™ďäɓݨQŁZ řóĎ?ßýă?ţŁťëŽťźĐ•(ÖĘôš5kü &SŚLńmtVöľ×^ët‚‡VŁ5d˘ýç–L8[yôčŃîŇK/ő/je?ž:šYü~ľVn°TŇŔ#xöëN˛ňĹ/ý3G—ü–­~ń*›•€WYV>ťĚ?xŐŞU#? € " ŐŘ9sćřbmšřÓ^c‰_ɋíŁđ¤´âşrĺJˇ˙ţűűŐÖÂŃmך€Öh ÍŻżţÚŻěę f­řjr)Š\óÍwo |%"z0žô•H7ůO•Çë’ʊ׸ől ĽŽbVčžŃ˜ĆFőE—çŢ][ƒKeóËŞ.´Ę‡—öćXYů¤+r{ÎFóÎť§‡ha"A€ PV=zôđ˘÷Ĺ_ôV‚ŐVAĂdŇů´Jßž}ýÉĺœîŁąXҙÔřĂüqnsŠŠ\óÍwbiŻ˝ö˛l Ť­Ú RlR|1ÇöułbÇYqčj|*Œ € Pă$’uňĂ~đ7cĆ ż­B'KČo{l+1E‰gť´Şű /ř#ă4ÖPا[ľÎ7í<’⍗l9™%ÝŤV|Ú>A‚ @e% •e­šęëxÚgŹŰ6lŘQxéLIDATŕˇnh%şRI÷ÖĽ3ŸŸxâ JˆĆ¨ąÚjx)cŤÖů–2—x›ŽbżO-•+÷ Ž%JŒ€ Ô´*Ť˝şÇ{ŹŞú őűďżďóZÍ̡m#őŠh`Ű$ćç͛çnťí6/č5śöŽ>ŰíŤiž6ŚöŘÁŹ=ăŤd[^"Ź$}î @Č8‰0í3Ö1t˙ýß˙íćϟď?rŘa‡9}Yoß}÷őĺŽÄ Őf+­ŁîćΝëWŸ9ä÷7ó7ţ} ¤\Šć[ŽšěHfIă­ö—ĐIO  @e% /t˘†„ěG}ä?üĄ0t„DgG&mŻĐ úđȀügŻu4žÎ“Ö~ěŽH•œo9ćS fḍ]@wĚŻ&$@€ ş' ĄŞăŇ´×X"VXŃjú<ˇśUt”ˆ–ÔÖ }ÁPGÔé´ ]Ľžů\샏Ô|‹_Ą¸J1+4ŚjŤC@WŰa<€ Œ0Óv ]ZýŐţčŽφŃĄ„´ň;*Ujžĺ˜_Ľ˜•cě;˘ôŽ Ě= @hA@MŤ´ľ…˘ĹÍŞ Poó­ä:NáčPźt@€ 5čŹ=Qć@€ ĐĄĐŠ—Î!@€˛Fľ'Ę| @€:”şCńŇ9 @€@Ö  łöD™ @€@‡@@w(^:‡ @Čt֞(ó @čPčĹKç€ @ĹXślYąĄŤFÝŃE‚ @¨Ď3f̈Ϝ*uaš?ĺ$|ăžxŮ@%Ękm°€ @5N`éŇĽnć̙nôčŃ6“¸L҉…b­Îlź?ó—dwô t8xaś¤ Đ€ @ v „âšGmMÄtŁY‹Wy‡ĽŽĐ6ł6ąxŮüX@€ :!°xńâÜĘłÄs { ăšŇĘf;„dGh°ŮbŽř°Mź\l?ÄA€ T9… ş—^zÉoŰ0ń쁎ëŔxš˜Ů™Ž4[L›˘bĘ˝ş¨›A6!łŞR>,ád!@€j€ÄóË/żě.žřb'ńźdɒœ˜ŽÍ-Ž M#š…ď˜bą+Đĺ¤őcśĐ,SL\Ą>¨ƒ @¨"IâŮ^ ö@ŤM+šmďL‹ę§X4˜đa>_lžů“ޤ~đA€ Ô( ´Zy–xW˘cSK҈miĘX-ŠaŰ0ß"¨­B{tĄžĂ…ů°üIuć7ś!@€ Pƒ´Mă•W^i!–ăâYĺćd:ĐŹůÍćóŤ^u–ÂźůÚmÓ č4ƒˆÇZY6ĚkĄĎĘĄUž@€ Pƒ$ž“Är¸ňlőÍӋkEšC˝ևůŽůC_ž|šX×Đؘ?ž!JÁ],/ky pËËŞl>•;7כ_Ö|zŃĘň)o>YůZľjŐă‘%A€ Ô ÝvŰí˘hŞ˙][ŁkKtm Ź|şĚ'1keůt™OVW菊9ŸĺcůŚL‘\îS8ěćMChœĺÍ*FâÚbeăyó5F/Žę%ŚMd›}ęĎüfĺÓĽ8%+›5_h•'A€ ä'ę6Eĺt[s^> Zó›x5+żňĄś:óYŰĐFMr}Z>´Ę+Y›ŚRÓ_ůʖĘ! 5 ‰ŇB)iĐńɅ1Vˇ(ęÔąYŇfuoŤ“UYu6&óŠ^Q1—,6ç @€ H Ôl 0ÝZ b%ůLL›H–•_VuĄÇ(ÎR<–“b̡Iíâ1ËĺĐńŘ â˘T~ťÂ6ćK˛‚¨~T§ƨNIŮüňŠlíÔ6ĚŤlW”͉lĺI€ @mu™˘M‡˛Ňca˝Ęq_ŘWź.lŤ|˜ÂşĐŻźŐĹýí*ĐŃ֏ĆŘ>hť™cÂV6)ـ­^eKVgV~Ë'YŐ ¤‰eĺíţŠWYÉę­Ĺȗ/)NÉĆŘTâ/ @€@>ڟŹŢtWhM+Ćüň™?ô…ů0ŢüĄMŞ—OIq–Ź•ăÖbÍś¨—nሠčXlŠE›@(x՗ ,^oulm”7qlyYKŞ Ëň›(–_yťÂ:‹1Ť: @€@~Ą†STX6]Zi1ťäˇźŹ•-Ţ|Ą? kuB>ľíĐT.m•UŢi˜'bţĐ*ŻKŕL,[ŮúSňfăm䡤8]֗•e-Š˝Rčkňđ€ @ ‰€é'Ť3=fV~i2++oełaňň+YŢę勷ą¸Đ*&ľˇdů°OŤ+ɖK@ŰÍ50Łń|8hĺ•̡eŤĘęOőĄĎę"ˇOvĎĐ/Ÿľľ|h››śhúČC€ ´&`:Îjâ:.^6,›/ŻžŹÎt_hă}ŞŹZ‹iŞŮ^ĆY]ťl)Zƒ“-”˜x^e%ŮxŢ|qż€ęž˛ĄHŽŠ>…ăąźŹ.ĹŤ?+›\š$ € @ mŚÓ,2ÔoV—O ›_Ö.ľ ý֟úˇ|h ů­NVIíÚJĹÄ´č#€VçĄĐ´›…>už/ÎüĄU^Ŕԇňá%ż‰eŐ[Y1JÖVy‹SŢĆ#kýZ>Ź‹ÇŞL‚ @(L ÔbŠ ËĘÇŻ¸8VŮ|aŹůâ6ŒQŢę•WĘg›jˇ×[ŮÚX;óÇËćoeÓčV 84€PźZYM”ˇ+^6żŔX{ůT“ fĊ‘OÉ|–—ß|˛vY˝, € @ é/%ÓoaŮDŽę-/歝ů͚_ÖâCŸňJĄŻÉÓäłşĐZ}Yl9´/Qj“1ąj~¨MReË[+ ’őĎ[?fM0+ξꏽlĹ)ŠŹdśŠÄ_@€ |Býf1Śĺ YĂfŤ|ü˛>âqć/dm<˛ŠłdmTýVŸĘ–C@'ÝP3ńŞú°ŠŐĐŻź.Á˛śĘ+…šÉÓôWqŞÓWldŐ^V~ťOźÖYLN‚ @HA@şKÉ4\˜7 gu&†Í–•ˇKńaŢĘÖŹ’ŮŚŇör[qß.[.­ÁšľźY Đ&ćÍ—Ď ^˜$„ă>ÝSí­.,Ť­Éň*Ç}Ş#A€ ¤# f)ÔsňIłY˝ĺ-&,+o—ę-oÖÚ¤ąQ7>Š’ŮxŢW–ň§Zƒ Ei|VoVőĘŰ%@jˇ&ŠŁŞ\2ŸÚ*…‚Řň˛vŻ0ˇrh•'A€ ä'`:ĚŹ"•ˇ˛ĺóYi>ŤÓ.˛h6+k#kÉňf͡mŐÇă[•Ó hÝP˘ÔRRŮęd­Ţ*+&„­Ż°^íŁdqMĽŚżňYźÚ[YVĺĐs>ť—YŤ ­ň$@€ üL‡™U¤ĺeí˛¤ëĚgůĐ*NĺđRź•­m܆}„uę/,[^~Kň…)^ëZĺŰĐúxC”b-u“Đ/[¸ &ŒUĹ›Ë&ˆĺS2żňaŞWżňY•-e[‰çЧźĽřř̏… @hIŔô˜yU}V6ŸŹ‰ÝxŢbm%Úâd-ś‘OI>%łMĽŚżÖgčł|<>^vŇžœĎś) ó5Lđëfů„¨ D“–ŔU’O—ů²őcLD›_V>Y]jĎG.ďłűYŮâT&A€ ´€i8YKŇpV–ľrúĂzĺăĺ°]XgţĐgcˆ[Ŗ%•" uóP´& $>@Ĺ[ Ű[œŹ&ŽdbلočW˝Ęv˙PD›0śţ힯ścuň‘ @€J' íe—zIʛ/´ŇhaYyůBżĺă~k…焺ňJVgśÉŰúŻę•Ě6•Šř[Š€ŽwŤ›J†7ˇ˛Ů°Ní­œdHIuČ&¨UVĄh6ŸůŁj_/+Ÿ’lRŢW6˙ąúĐG€ @ 5Óoa|ćçgúÎąĹ˜űU6ŸY‹-Ć꞊S ă­ě+JýSm E¨ŞrhĂ1 „ ăĐÚDĂzľS_vYŸ&¤Uo}„÷”ßÚ(ݤr˜Źl6Ź#@€ К€é5ł–•ˇ˛Ź‰`Ĺ*Żú-ެśÍç×+N)n›źŰýV.É% óźH˜tC 6Ł6x‹MŞÓÄM+N1V–ľ¤Č^v/ů,esŔäWRJVóĄĎń€ @ (ŚóĚŞ‘ĺĽď”’ĘňşŹ­‰ă|Öúö7JčÓü˛ńذ.—/ćB% s˝nĎhIÂ5ôYŒľRYLК_Öü˛&j­/ӊ“OeŮ0Îʲńű†}FŐšvńźĘ$@€ âHsYŠç“Ęň…—ÚZYzÍÚČZšPŢچ1ęӒüJq›Ď烋ůSŞ€.Ôˇ ŇĬŚŕľzó›(×&zUÖ ´ÚZ]Xś{X߲vEŮy+ËƓľű)C€ ´$O˅~ĺ­lů°ŹU6ĄœTś:k/›ßúľ>Ě–•/[*Z@'lăĐŕ$<ÍjPa^eKň“BálmLÜŞNIBZua˝‰fłŠS˛śůlSÔö8+c!@€’ ˜łZ+糊S]ü2żŹéź0Ć|˛Ąż­źú‹'ľądyłŢ_ěö - íŽyŹ`"U!6 ůŹÎ|Şo+ ”ÚšUŢ.[ś˛ú˛žÍ'ŤˇMŢí­~ť‡ @€@1LĹcÍZĺ­Źx+›MňY]ký˜UŰ0ĹËa]ŃůT:a:éF˜„Š Đňf“Ú˜OmlŤ†őŁváĽX+ĘŤN)Œľ˛ŻhŽł<€ @ xŚőÔ"žËVo>ŮByŤcl5:Ź‹çí>fĂöňĺMiVŸŐI*pW LU))oWŒŐ›Ď7 ţX}¸ęŹjó‡B¸P^mlL–ËňĹS[őńxĘ€ @ ^ äÓrĆCőaŒĺC[(ŻSŮ.ÝĂňĄ5żYŐYž9›8&ŤKe"ĹŞ‚˘4 óž:ĄN1Zó›ľöI1Iu…|ŞS˛žšJ­ËI1‹… @hI I<Ć}aŮňĄ óę]ĺЗTăŹ>lÖ[^VÉâšJA9íęł:hď ´ú°ŅŞę,)Ćę-oíc>‹ąvIuÖNąşŹ­ľ1ż•eĂ~Ă|C€ @ 4ŚĎÔ:Ě[9ôY^ÖňaœůBkąqŸľ“U˛úŚRëżmŐˇn‘ŕ)‡€ŽwŤ™Hm+o“PźĺăýYŮú˛žĺˇ6ćł~ŹlmeC_˜cČC€ ¤#`zL­Âźőbž¸ ăUŻËńú°.~Ÿ°ßxŢbŰeKÚÂĄ;ĆśqŘ Baš”7_1V1çoŮ|óĺłńąXœůĂžBy@€ ôL̆-ÍgÖęŹÜ–Uźbě˛rĆĆó*ťRśo¨]ÉÚ7nšZ.ĽP°Ę'ŐÉgţślž{Y;Ő+ĹËMޖ‹‰iق @¨O&~ Í>cełj›”7_’űŹó[YV)ŸżŠ˛”}Ëňěnî*Ńhŕ&Năy5ˆ×…ľ­]ÜŞŢ|a>އÝĂú‹—­­Őc!@€ŇˆëŻxY˝…ž¤źů̆mĚgÖęâeů•B“§ŒŰľ­qą•ÇĹĆl"6nĂXŤ }a>_}ŁźĽ0Ţ|X@€ ňHŽq_XśźY$)_ČÖĹŰ'•KŢşĄÎ”:â%BőŤ‰„‚5_9œ°Ĺ‡>ő•/YœÚ…yĹŤlýŠŹd1MĽ–ăą-k)A€ BšĘb̆ąůňŠÍWú-.ô…yŤ—ľŻ7ťlťW íîí\‰Îueâb6mY}ĹŰX˙mՅqä!@€Š#PH¨&ŐĹ}Ŕ‹‰ Go÷ĘłuŢQ+ĐÖż Üm1eĹ(>ŢĆúŒ[‹űó•m ůęńC€ ”@\{ĹËşS’Ďüńş´ĺňÍ¤š§˛­@ŰČňŹDŤÚą…&ůâ1a9Ěę#ŹKşGźž2 @€@y ÄEnź÷|őĄ?ĚŤ}[ĺ¤ßRŤóţtô txK›t(„ĺ‹—­üÖFžxŹľ cŹ-€ @ rŠŐga\˜ˇ‘'ůT÷ÇËÖžClŮW m”V˘bâ×ÂóůŹ>)>_]ĄXkƒ… @Řqâ7^G’ś.o|šWžm& uƒ6D´ąÄl1"¸˜˜B÷ˆÝ’" @€@™äľąţ‹‰Ë“ĎďoŃQâYw¨€6@Ei?‹O°ĹŠekš6ŢÚa!@€ĘK  ĐM¸UĄřBužŤŽÎ6Ö" s7‹”´ĺ۰ĹÄÓĆm¨† @¨ 6q4śbbĘvD]1,v¨€śš"má˛íËíiށ< @€@qŠ˝yşJŐvGŹ8ÇÇY˘16W'B€ T7T"9>•Jˆćp Đá`”/ƒ ŽwI€ @ † TZ0ÇŃU€ŽPeDu|€ @ {ŞM,'Ž 4đ$B;‰ >@€ Pyľ Œ‹Ľ”)]줉ƒ @€@Š:•ڐv€ @¨Gčz|ęĚ€ @ dč’ŃŃ€ @   ëńŠ3g@€ ’  KFGC@€ z$€€ŽÇ§Îœ!@€J&đ˙HŠ$}kΑŚIENDŽB`‚gwenhywfar-4.15.2beta/doc/dialog/images/gtk2-3.jpg0000644000175000017500000005007112364015347016533 00000000000000˙Ř˙ŕJFIFQP˙ŰC  !"$"$˙ŰC˙Ŕë?"˙Ä ˙Äľ}!1AQa"q2‘Ą#BąÁRŃđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚáâăäĺćçčéęńňóôőö÷řůú˙Ä ˙Äľw!1AQaq"2B‘ĄąÁ #3RđbrŃ $4á%ń&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚâăäĺćçčéęňóôőö÷řůú˙Ú ?÷_x/LÓ4xžH –éăýäĄóźœnů°܎|’ž3Ő<;ᅶŠ}4^ęŒRŇĆŐˇK1O$Q݉WCĄČÜěî{ë_7üfÖő]?ă.Ť4.#0ÚÁťc;c(íúšjúźŤ<Çčó[w÷Up´# q˛HőüE6ŸŰ5Ÿ‡ë ˆ’K;őš–!ęŃár}ĽąŽĎHśđöŻŚ[ęZlvV—)RS†ĐűE|°śŃżÔŇ„’=ŁűL˙Ÿ+OűůGö.™˙>VŸ÷ň¸OÚWÔôO†w†“rÖWKcšĂ{¨•‡ĐŠ ýkřcă˙=Ÿ‹Ż|Uiľ™â˝>}šę=’#U]Ń(čçć=ëäÝY§kżźŮB6˝]ţĹÓ?çĘÓţţQý‹Śϕ§ýüŻÔ˜ţĹÓ?çĘÓţţQý‹Śϕ§ýüݏřšă 3Bđ•‡ö™­kşĆ’ÚƒKlf’9]ąŚDŹ[ćŔ žâľő‹:厳 5׆ Ň4MJŢÉćťźĘ#–vĂBZ%"6^.bGAÍ?m/ćbökąë?ŘşgüůZßĘ?ątĎůň´˙ż•ćż|KăÜř˛?ĎŁ\G§kזPˆ‰bňä&€cîł|Ç˝z†éœ_÷ŃŞU&ŐîÄăЇűL˙Ÿ+OűůGö.™˙>VŸ÷ňŚĎý3‹ţú4gţ™Ĺ˙}|óîţńZ=ˆątĎůň´˙ż”béŸóĺi˙*l˙Ó8żďŁFéœ_÷ŃŁž}ßޏbě]3ţ|­?ďĺŘşgüůZßʛ?ôÎ/űčџúgýôhçŸw÷…ŁŘ‡űL˙Ÿ+OűůGö.™˙>VŸ÷ňŚĎý3‹ţú4gţ™Ĺ˙}9çÝýáhö!ţĹÓ?çĘÓţţQý‹Śϕ§ýüŠł˙Lâ˙ž˙ŚqßFŽy÷xZ=ˆątĎůň´˙ż”béŸóĺi˙*l˙Ó8żďŁFéœ_÷ŃŁž}ßޏbě]3ţ|­?ďĺŘşgüůZßʛ?ôÎ/űčџúgýôhçŸw÷…ŁŘ‡űL˙Ÿ+OűůGö.™˙>VŸ÷ňŚĎý3‹ţú4gţ™Ĺ˙}9çÝýáhö!ţĹÓ?çĘÓţţQý‹Śϕ§ýüŠł˙Lâ˙ž˙ŚqßFŽy÷xZ=ˆątĎůň´˙ż•qŸöć°ÓôHďîP đ‘çŚć=°É­|˙Ó8żďŁYŢ•—CYAi¤g˜÷.IÎkĺx§ˆędÔŠ´ßźŢ˝­ë§SŻ †fîś*NśV˘kZv !ÚłůťâјcoԌ{֕ΙŁ[[Isqmc1Šwv—@ęjo˛Ühwq]ŃŽwjóÔnoži&` mŠi’KĹ’*gţřJóň.0ŠĄ^nďŮŤëůiĄ–gJ8:.ŞW˛gUo1żí:WƒÖkCĘKqsä™ŞŽ ÇŚqVô)t-Râk6Ó#łż€f[[†Úŕx`á—ÜŽ+ukđ ,űTQŠćźKŤ\ŰřŻĂ—čC]č­ĎmńČáXu$ÔeÜ_W‰…&Űćvűű[őšň<úëß.îŰ#˝ń=΁ ­źRi‰w{tĹm­-Žé%#ŠęQ݉VUƧ%„?jŐ| ąŮ™ÖđO$cÔŚ@ﴓőŽ/Ç:•őŻĹ RT`ź0Ŕqą” q˙-T˙á%ÖyÝxX ¨ŻœU§UÁ7ĄűVYÁĐĹa!YŮó+őëÚß­ĎeŇěü=ŠéđęX\ZÎťŁ‘ éôę+Ë>-řNŠĺ5+6ň6>Öğ)$†äp1Ücƒ‚ŔÍđPžKŻi…TÚÁqń‚p¤ß¸o”TßĆt)>Hů¸^‡ë_M•Ő–"*roT~}ĺtcRŚ˘M&Ő˙ާ§č_ň€ěîŸâ÷5ĹüOđ;xŽhľ]3ěQęG嚥š9ŘřäI!‡LžšăŞś¸ű7†mŽBC3í`@î=ˆ9ůGëU˙śßţ|m?ň'˙\Ż<.!ʞ3HRç„]ú'ük,ĆÖĂŔšF);Měˇë,iţŇŽIý+Ö~x2řx؉îöâC5ĺÉă͐úŔtŻýś˙óăi˙‘?řŞ?śßţ|m?ň'˙U‹Îńť{W{y•ő{lËzž§ę–†ĎSÓlom‹+˜n#!e!”ílŒ‚„ ‚ÇCŃl5;˝NÇDŇíoď9şš†Ig˙}ŔË~$ÔŰo˙>6Ÿů˙ŠŁűm˙çĆÓ˙"ńUÇőżî‡°ó ź9áůŻZú_hň]<ërÓľ˛ ŞťBŘÎनn tŞúWƒź%¤Ë4ş_„ô žłĘÖÖQĆd‹ű‡h_n•‘ŕŢxƒĂŸÚwZm„rëا™€‘]K'j.Osž+űm˙çĆÓ˙"ńT}oűĄěr•ǁ|qĽC¤ĎŕĎI§Á#I а‹ĘŰď2ŽÜ{‘Ö¤—Áž—PłÔeđ–€÷–(‘ÚNlŁ/§ÜT8ʅěNŐgűm˙çĆÓ˙"ńTmżüřÚäOţ*—Ö×ň‡°}É,t=ĂSťÔětM.Öţ󛫘`D–÷Ü ˇâMhŰ8˙ďŞËţŰůń´˙ȟüUiiZŒłŮÜH‘Çlé$jŔCäd“č)ýoČ=‡˜ďűgýőGýłţúŠ>Űy˙?s˙ßĂGŰo?çîűřhúç}_̏ţŮÇ˙}Q˙lă˙žŞOśŢĎÜ˙÷đŃöŰĎůűŸţţ>šäWó#˙śq˙ßTŰ8˙ďŞ“íˇŸó÷?ýü5çŸ |I¨ŢxAŽ5ˇ÷-Şęa§¸yČӅÝĐ( ŕéG×<ƒęţg˙lă˙ž¨˙śq˙ßU—ýś˙óăi˙‘?řŞ?śßţ|m?ň'˙G×<ƒęţf§ýłţúŁţŮÇ˙}V_öŰ˙ύ§ţD˙â¨ţŰůń´˙ȟüU\ňŤůšŸöÎ?űęűgýő\g‰ŻćjŰ8˙ďŞ?íœ÷Őe˙mżüřÚäOţ*íˇ˙ŸOü‰˙ĹQőĎ úż™Š˙lă˙ž¨˙śq˙ßU—ýś˙óăi˙‘?řŞ?śßţ|m?ň'˙G×<ƒęţf§ýłţúŁţŮÇ˙}WŕŢxƒĂŸÚwZm„rëا™€‘]K'j.Osž+űm˙çĆÓ˙"ńT}sČ>ŻćjŰ8˙ďŞĹšXŇnŚťŃ­ŕź‚b^[6)z”'ŽzMMýś˙óăi˙‘?řŞ?śßţ|m?ň'˙\XúX|}/e^F”á*nńg7ŻKăŻDt¸´¸ź=e'ÜË2;íďąTœŸŽ׼tQřwM‹Âńřv+uK8ĄXŁĂüˡŁgűŮĎ­;űm˙çĆÓ˙"ńU‰­xşîŰĹ^ŃĄ°˛Xő{頞Oœ˛¤vłJ6屒ѯ' šcp´˝•:š^™Ě|;đŒ^КŮĺKťë™|ű˓Ǚ!ŕvP8šo‹ţ$g÷q˙Ż_âúרWül?ń)ŒnQó/sÔס–bSŠěÔmĄăb#'yÉÝśvҜř:ßćVýňtŇW—xŇóVŇľÇŐď&Ôżá‚rÚtŃnűŰĚyQĆ]H)÷I …Ď'ŐŁ‚âëÂ0%źMpÂT%bBH~¸ŽnűÁV×ú„zď…#šźnÉĺÓ÷HťNWć+ž#ĐôŻ7üyzšĐţ<ęóÇ:Ĺև­_ǣ̚|V—ć9ŁF𴖐¤ąC÷ySórEËßëş\ž"–ao{:ÔuŒKnÍŠÜŰy`<Ć8ĆKd1Ü7ěÚęćéź# OtŹ—8•Xaƒż0#ƒž˝ęKŻCu-Ô×>Ži.ĐGrňiášdš+óÁôĚldxvóSŐô9ŽĄo6—wžHD‰ŇGđʋ 8ŕƒ†ČëĂť›ťŻ Ťß]ËwßFŐ,ą8łB†Ý-ÖAçI(+Ľw(ç%ś…Ç$zG‡˙äy˙]bţRW;ŕ‹;ýE5+ďAu|BÜÍŚ‡•BœŽŽF $zfş}"ÚâÖĆĺnm偞XʉŠ`ç댏ĚP™üJžśŃüaý­s¨iú˜H-•4gŐdśźˆůóŰƇ3îi˜ÝŽFŁăŢi>&7é AcŞ téeˆKoä‡áüӐíŔ¸2íÚJŠ`ĹA#ĄÇJ¨bÁFăÁ8拌ň}gÄÚž…yă¸'ž-jÚ4ś¸h˙ĐmdŠ×tŕ1Pp !eŽ~lőžՎĽŕŤËżj6 j­4r^CySţ'’&ڌ •#gŽƒ­<ŒEUU  8(€ř98‘üE7v÷Vą_§ÖWosh€Â™HärNr eޤ×3ŕdÔäřU¨Ç˘Ď“_jëk$˜Ú˛덤ä×ÔĄé^ĘŞŞĄUBĐ^mđÓĂZ”ž–ÇSđýŰĹ6ŁŠ‚â͊ÉŢÎĂ*Õe ŽÄ@ź^.˝Ň§M,ővÖešT’=D­Đ…LO t0rἶ’Ă€0_¨řŸÄRmŕU˙üIİÜfDO>ňX]B1Łžč@Žő<§&žúzx:ÝmA+Â4ᱜ #oŢżZœř6fögÂą›i"H^§ȅvખb@IÇZăěźYŹÜř˘]:-#δľ˝[™)2ËViw}Đ °ůO%~löŞ_źWuŚřƒL°śšš˛‚Ű3tëjÎ.Dł*˜ƒm#7Ç9(űÂťÁŕŤa¨E¨ F/!UXçxށFۑŔôvçBźšT[y•dQ%Š`ާ*Ă#‚ÄP#…ńÇüž˙°Ľ×ţ\T>4źŐ´­qő{Éľ/řG †ś4@ŰžöóTq—R }ŇHásÉŮń‡őéüiŕ‹ˆ4MJXmľ—žDľvX”ŮN ą 0=ČëfűÁV×ú„zď…#šźnÉĺÓ÷HťNWć+ž#Đô g^xçXşĐőŤřôy“OŠŇüÇ4bHŢƒxRŇ´–(~ď*p>nHš{âwK—ÄRĚ-ďb‡ZƒNą‰bmŃůą[‘ťo,˜ÇÉcŒ€F;†đ=›]\Ý7„aiâC§ŇŤ 0cˇćps×˝IuŕčnĽşšçÂŃÍ%Úî^M<3LƒW%~`08>‚€9Č.üCŹř'T[˙eëF+ˆ-$udS&Ň"”¨ÉS‚=z•đ%ĺˍOKÔ Éż°¸U˜Ëtˇ ‡Yv8DăĄPAĎb třE!ŇßJ‡Ă[,$ $ś[DážöW9í'ÂͤZ›]+Ă­cbć;{3–=X€9MNO„wąčłĹ¤×šŞÚÉ&6ʆúăi9uőčzUhź]{ĽNš YęíŹËrŠ$z‰[Ą ˜ž@č`ĺĂym…$†'`ô˙ |-Ťś›Źxrô,ˇú›mwdŘxŢövVŤ+3Áő˛žӓO}=<nś •ápŘΑˇďß­8-GÄţ"oŇŻ˙âN%†ă2"y÷’ÂęŒ…đpGBjYxłYšńDştZGikzś72$Rd7–ŹŇîűĄAaňžJüŮí]đlÍěυc6ŇDź'O4%‘ íÁU,Ä€“Ž´ƒÁVĂP‹PŒ^BŞąÎ4ń˝Œ( ˇ#č(ŔxÇÄ­§ŒoWý)4}ĘŇęqop‘3ů˛ČĽ°QŒ˜ăfT}îI*ç‰?äĽü<˙°Ľßţ›îkŚÔ<"š…Ý˝ĺ˙†EŐÍąĚÍc˝ă9ĺ$dr㸲ľý\—â.ŁŃľ‚×Qş{‰VŐĘDŚĆáAcŒ(,Ę=Č螢§űçüúO˙~Íbź˙ŸI˙ď٤2 *ą^Ϥ˙÷ěŃö+ĎůôŸţýš‚źďăa˙‰Lcr™x#žŚ˝/ěWŸóé?ýű5ćg…ě$śIái­fHŽ"‰Ę‡ ĂŞŽƒŮčEzYWűÇɘb>Ô|4AđüDůo´ĐFBHFAŚýŽ_îA˙~ü)Ţ9đň|Ęß+tôÎZâ|ŒŸ&Ĺ …ôůŰ+ňă5…âűŰkKˆŽöÜ‹]˝Ęř!moĚhŸî…`3Ř(ŽcSŇţ×/÷ ˙ż ţ}Ž_îA˙~ü+Ě ńljo.­4Ý)m¤Ô ÓW͖Má峎ăĚ8ÚĽńˇŤzŻw?źE=˝źv:v–.ÖÓTščÍ#ů{ěnVЁœ9$‚~čÇ\`šéżk—ű߄˙ >×/÷ ˙ż ţÂ麍íÇÄ-.DÔnŰNŐtŻEŒž_—ŤÚ…*B†Î$|î'“ĆěčľËýČ?ďÂ…k—ű߄˙ ‚ŠC'ű\żÜƒţü'řQöššýřOđ¨(  ţ×/÷ ˙ż ţĘ|#Őoďźo{{8š¸—QŐ7É,jěBęWH dpŞŞŞŕt•Ä|%–H>Ă<0™¤ŽóXtŒur5;˛ńéLűír˙rűđŸáGÚĺţä÷á?ÂźËKŐo4߇Pxöë_˝ŐŽ&ÓííZHŇÖImP1Ş“Œ‚HPKn"?‰ľąâ˝7Fźňâ×V1\5™aĚm§\ĚŞCdŠ ƒ#'˘žřKű\żÜƒţü'řQöššýřOđŻ2šř…¨?F’ËO˛’çSÓ´Ű ˛LÁŽî#‡’;FňAé/×ßS´ƒSąÓDj—ZIkw}ĆXb–Q(€Ź°°ŰɃ¸Ń¨‰öššýřOđŁír˙rűđŸá^_ĽxşűUŃ"›Ä—PčVך-ž°—:|§|Hänˆ—S’r ;ˆྫŔY˙„f×áŽYZ!rN°²íy‚=ť°:őÉÉ 7Úĺţä÷á?ľËýČ?ďÂ…AE!“ýŽ_îA˙~ü(ű\żÜƒţü'řTP˙k—ű߄˙ >×/÷ ˙ż ţ?Úĺţä÷á?šOjˇóüRń…´Ó‡ˇ´Ó´łÂc_.2í|\…Ć6ŐÉĆHUŕ t•Çx_ţJ׎żě˘˙;ú`wk—ű߄˙ >×/÷ ˙ż ţÁiMŻx‡ÄÜř‚˙N]'Q[X-mŒj‰Š)7ČIbűÉ瀸Ć$óŢ'ńŢ´ŢÔîă†ŢŇ+Ý;Um:H$o´[=¨`óÇ;Iă óg4őďľËýČ?ďÂ…k—ű߄˙ â.üa,w0}–ïǤŽ\啭Ňmß_œńč3\Ü_|T<>u‰ô­DžÄ.‰4…ź’ĽšÇßŔČ~śž´j­ýŽ_îA˙~ü(ű\żÜƒţü'řW'‹5„ń=Íą˛ąţʡ֢ŇKyçą’Ţ9Dƒ .;ŒœŒ`ˇÁÓę֞=Őô=BóP’Ő,âžŐoeŽg—÷’+ĘŹŠ6) ß Đ3żű\żÜƒţü'řQöššýřOđ¨(¤˙k—ű߄˙ >×/÷ ˙ż ţÝ[PšƒJťž!Éę~ĎÁ HţůƒŔ—ˇš‡Ă;ëŰűÉnާž˛’iŽÉ$Œtť,ł1É'Ü×Қ÷ü€ď˙ëÚOý×̟ üZkšGú]s˙ Ť*ô˛Ż÷“0Ä|Ö>9đň|Ęß+tôÎZČÖt}'ZˇK}cLłÔ!Gމs ČąŒĂƒ‚y÷Şšý”zˇĂQ¤MŠ\XG¨]ÚŮ=͝ĎŮćˆM7–J?›ćŔl’—6|§§qű3YLt /̰U[6ű"fÝTĺBqň€yčioü5áÝB(˘žĐtť¨á’IcI­ŐF,ěbI=Ď&łî?gËćěńŽ!ó7íŮâ)ϗťÎĆÝÄýß6^ď;w÷|Řńœ˙ÇźYݙ|ŢnVksf-+Kˆ›f€Jł°(Ċú}ŕ (=@tĄ4­- dÓlԕ•I(ȕ÷Ę:tvů›űǓ“X×łÇƒeóvxƒÇů›öěńçËÝçcnâ~ď›3Ÿř÷‹;ł/š\~Ď —ÍŮâCćoŰłÄSŸ/wť‰űžlxÎăŢ,îĚžiĘÂĺáᏠVXx{HţсUbťű~ta@Pń¸ ­zćŽ?gËćěńŽ!ó7íŮâ)ϗťÎĆÝÄýß6^ď;w÷|Řńœ˙ÇźYݙ|ӕ…ΖŠćŽ?gËćěńŽ!ó7íŮâ)ϗťÎĆÝÄýß6^ď;w÷|Řńœ˙ÇźYݙ|Ӕ.t´W5qűfýťfýť^ď;w÷|Řńœ˙ÇźYݙ|ŇăöxđlžnĎxâ3~ݞ"œů{źěmÜOÝócĆs˙ńgveóNV:Z+š¸ýž</›łÄ8‡Ěߡgˆ§>^ď;w÷|Řńœ˙ÇźYݙ|ŇăöxđlžnĎxâ3~ݞ"œů{źěmÜOÝócĆs˙ńgveóNPšŇŃ\ŐÇěńŕŮ|ݞ ńÄ>fýť^ď;w÷|Řńœ˙ÇźYݙ|Ӕ.tľÇx_ţJ׎żě˘˙;úšqűăöxđlžnĎxâ3~ݞ"œů{źěmÜOÝócĆs˙ńgveóKŮăÁ˛ůť^ď;w÷|Řńœ˙ÇźYݙ|ӕ…ÍŠ4Í6C!“O´s$Âá÷B§tĄB‡Sŕ|`žđ^ĄăX<-â;MýĄŽ}Rúmi­ŢŰ'lq/˜ Í&Čbĺ%oůňŰř6Úî!u(śźľžUłŽG—ĘIwɄŽDwů˛ŞX°ČňćϔýENJôˆ<ÝńęÇĘßťf‘tůŮçgnŘÎďř÷“ÎíŃc>t[đĹ^ŁŁü4pxß^›â<ú,zdVú‚ZĹe=Ě ×†a:n6F%‹)PP…+‚AaĎXxťYŇź;ľd#ŽIü+á5Î<›4šKĄ,¸v  ŒąŔŕś@5ë÷)ŃĄiZHuVhD€”Ńîœüžvíťc;łöwĆ3ťtXϝő¸ń^‘˜IŹŢVýŰ4{§ÎĎ;;vĆwÇź˜Ćwn‹ó˘ßŠ—ŕmZ}kŔח^!ÔŹ¤^â&˝´žEÜgçia}ą¸‚Q† îz ς:ž™Šü74ďEzś—ú”&tź/ bî(łbw°Ç•ÁäWM7Š´{e•LZŽ!ޏGşaňyŮŰś3ťţ=äĆ3ťt[sçE˝nVýŰ4‹§ÎĎ;;vĆwÇź˜Ćwn‹ó˘ŢâzO‹O…tŠtý;ZĐďoiŤsâ[=R[űwŽ[Ř ’K˜ÝˆŠR˛;˛rŐ˙üTÖ4ÝőŹľë9ć°7ňŮ_şŔ–ÚŹPЁŸőŽÚ2°ŕąBrźęć­á›ŰfˇÔ,őYbśš[źE¤ŢËo$’+ ‘ü˙=ŁCć 7 ˘ßrhśâ@Đę„[ď˙WŁÝ?Üóóˇlgwü{ɍšÝş,g΋x˜Ţj÷ąřťí§Ä˛čVřĐEs#H˘- ÄčŽ_ĺÚdx,Ŕ›­đďĆŢ#×|m%•ýΝ^}ěWkĎĎj"ŹEP9”œ¸¸ÁŢvŒÜÜxŻHƒÍߏ|­űśiOžvvíŒî˙y1ŒîÝ3çE˝'ńNLĎŞZ0áĚz=ӓłĎÎ6ĆwÇź˜Ćwn‹n|跀rˇZś…cűBXŘėˇşŇÜXÉŞĚÂ[O$, řF)ćAa¸óÉŻHŹ+éyťăՏ•żvÍ"éółÎÎÝąßńď&1Ű˘Ć|跗+Ň ówÇŤ+~íšEÓçgťc;żăŢLc;ˇEŒůŃoÝŹ_hšg„ľMCÄwgŇ-íšKš7˛€d੠žŔIŕTW+Ň ówÇŤ+~íšEÓçgťc;żăŢLc;ˇEŒůŃo.VýŰ4‹§ÎĎ;;vĆwÇź˜Ćwn‹ó˘ŢăÚ'ˆ,t?jž)đŢš§ÜjZÝ˘Oe˛ˇąč–M(@ĎşR˘L3‘ŽŔÄ ”N_âoë:„usywas'ü"^!xo,çŽFe‰­BĐąEqź† ÝAsŠőëé‰„‘ęÍĺoÝłGş|ěółˇlgwü{Ɍgv豟:-é7Š´{e•LZŽ!ޏGşaňyŮŰś3ťţ=äĆ3ťt[sçEź‡ĆŢ#›â­Î‡ö:Ö }Q-…ÄđFó[Uźĺ ţkšf%JŽĚ)\dž#ęÚ‘ńGŔ’Ţx†+ Éď&†[yľC<Ňçi0—s.ŔnKŕ ęŽvyŮŰś3ťţ=äĆ3ťtXϝđ'ㄶÖwú~§w­č‚[+–:6§ŹI§‹Ł”>ln„“"…*2Ź™Á\ó‘§|IÔ¤×f)ŠG‹V˛´‡Ă’Űƒz֓Y[Í$Éź~d‘Ć"`rNGŚ]x§FĚóaŐ_Č.NÝéůO;%qÝ˙ňcÝş-šó˘ßNßWđ֓uŞ]AiŤ,×WsvÉĽ^IćH‘źdŽ#9ĘŮ`áżtFLŃďňÍ7ÇÚ§‰!k9u8om…÷‡o š)"2Ć'ԑ^)<ŸŞż&IŽK*x|gŽčÚVÇĹîi|M¨ŮßÜ\Én$ÓQgş0Ą2¨d›|Î6áTr¸ő‰źUŁŰ ‹UÄ^ao/Gş|íó÷mŰݟłÉŒgv豟:-ĺ׊´xÖe–-UÖ=űÂč÷NĎ;8Ägwü{Ɍgv豟:-ŕî§â-*?ƒąxƒÇ÷–˘×ÉFš}>đŹwżjxßyŰňî+ó`’5ĄđsŔ–Îş˝ś¤’O<ą›{˙śGl+2ۉ˛wůjBg?ĂĆiĎâ˝"7|ząňwî٤]>vyŮŰś3ťţ=äĆ3ťtXϝňăĹzDnřőcĺoÝłHş|ěółˇlgwü{Ɍgv豟:-ŕ´VNJôˆ<ÝńęÇĘßťf‘tůŮçgnŘÎďř÷“ÎíŃc>t[ˏéyťăՏ•żvÍ"éółÎÎÝąßńď&1Ű˘Ć|跀nŃXW+Ň ówÇŤ+~íšEÓçgťc;żăŢLc;ˇEŒůŃo.VýŰ4‹§ÎĎ;;vĆwÇź˜Ćwn‹ó˘Ţ床ŕ­_âEÖŠĄëö‹ý“%ÄV:jkŹn5kĐ914„ůJw*.ߙ˛ŘÚ¨L>ń߈u˝Ňâţ÷I˝Iď4g––6ŇiuÓˍ˪€ÇO™Y9ÎŹ\xŻHƒÍߏ|­űśiOžvvíŒî˙y1ŒîÝ3çE˝&ńNng-Ť˜Ë—ňô{§ÝłÎÎ6ĆwÇťăÝş,g΋x’\xĎÄ-śŸek§Ăq{ŻĚˇˇ˛ÂŠ$Ńęs,p–™Őv…$•yQň• Mu˙ŻícřŠjšžŚšMÚéÍ=łÁŠľş›ż%Š":˛ůœç rŕŕcŹşńN”KŞâĺśč÷Ožvvâ3ťţ=äĆ3ťt[sçE˝nVýŰ4‹§ÎĎ;;vĆwÇź˜Ćwn‹ó˘Ţń*âÇXř{öŤézu”Ó[ʗŇŢůvˇ%Rbi‘ 2­ü]ú9ąř‚ÖégŚŮkZG„ôôľŐ]Ž×Űíngś{mŸgš]ť˘>sĺ@(ę¸#uzőϊ´x„Ë,ZŤüŔá4{§ÎĎ;8Ägv~Ď&1Ű˘Ć|čˇŇźŐź2şÂjÓYę­ycm=˛:i7Že¤UUŒ†ËYeHŸÝmϝđMř™ŹŢřŰDą‘ăľÓÇg¤Ü–kiŔÜ3"Ţ큽đ§$÷XăxcÄúî…áŐžƒ\’ęć/‡şEÜëq(†ă͑Tďˇjťí9#ŸťdŸĹZ< 3vyŮŰś3ťţ=äĆ3ťtXϝđ ?…>!ÔuŤ-N]CUÓľŰÝAuo#í)–y P`ňŤ Ž2pţ\؉!ľŃ5K+ý ŘA$Ůşœ—°!óeĽgf ;)^ň$œ íĺńNl&W ô{ŚÎß?vÝąŮű<˜Ćwn‹ó˘ŢKâŘL :ŻîŒ…ü˝é˛WÎݍąŮű<˜Ćwn‹ó˘Ţ˝_éóýŁĂž&Ÿí+?›ŻBţa—Í2gO´;ˇůłnĎ]Ţlšë˝ţńúśăĹzDnřőcĺoÝłHş|ěółˇlgwü{Ɍgv豟:-˙,,wPi^-‚÷ĚK¤ńk:ÎĹä,-n&YI9ÎI–CŸăź} łýáz3GŔ}%ოŰćVůÇAí%Qń4Ď $Ňę–:šˇ…žâ %ˆn8rŽX’$;Őď čvß2ˇÎ:i+žń^“âű˙YßÁ§hZŽ‹§"ËgkuŞKnĆëœÍ"­źśŒŕ–c“ˇo6+řŇőᣎ‰ťK3w Ýź^jŰ4€Kł×g\V~›âm.úYcöć>ŰP”Î,qOćlÉÎSçӎkŒ‹ŔZˇü'W:ĹС¸ś¸ÔÓRIüŁŔâfß —Aól1Í ~kÇĂVööÇĎśŇ4+]‹+š[ %yąŒáĚ]­ľŽFJńƒŠę2jV‹¤žŠ ľĺ°ŒČ­h†s Ü ’ÇŘf¨č$Óu˜/¤‡í6˛iňywÝÂĐÉl7ěU•=x5—áXĐ<o§ZŮ&Ż4“ÜĂÍóK™ůÝbBŞ[– IęNißô}cJŃo[ľ°mVîc=ŐÄWŻp/%*ť–†=€U Ş t  š‹t˝fĎíĐÇ}kdѤ°Ý^Ú˝źSF˙u•œšG Ú֎°ÚĚÚľ€Žěíśsp›f>ˆsó~ä:˙üEk§•˛Ń4űM5Ż4Ĺ] NâöŃäMB2mx€‚5E`B)I%~P |9ń~ŠĽjś˙cAŹ/Ź’ńăŠÎY–5F!-"ţ흔Üőŕ€E›Ć^ˇŐMźÔc´¸]@éĘ'ůD“‹u¸ ˜ňÜœ ńԌěC}e5ěÖPŢ[ÉuXVP^0z\äg޸)|­&ޚ˛.•}4~!]LEq; xŽ˜śl ym‡ ‚OřŔz–…â…˝żňŽcˇžňX/÷ââBä<^HäänĚŹ2Ą‡ ěŁńœţ+ âíuśkĄžÖD‰ăRŠH@WÁ•3´œgAŻ\•ö™â9>(iúä6zIŇ-´éěŢţE¸>kŔĺ„bźqüîÎF1]mĄr,켺hg˜DťŒpFd‘˝•G$ÔőCÄ_ŰŘWŁĂâČęĆŸmvX˜ůK•íp8Çh/Ańž‘Ź^ęv‰ő”şZ$—Ÿnľh ŕ•Ë7ŔÎ:€AčEXÖ|S¤ézdڜ˛´öQióę =ž$C;w`ƒÉ;†1ךâ&đO‰îü t m4ŤKˆď`Ôá5g¸}Fu•dĚÍlĄKmČ!\) íP*Ÿ†Úźú-ýźb´š÷EŐě™$˝i€¸źkvWÜ!@÷L[ Án7dšő}d/×O7–âń“Ě[s(ó ˙{nszĘ×|UŚč—đÚęj1Ç#Ĺť[9Ţ6‘ö iŔË=Fqšäâđ¤Ÿîu™źŤť)ľTÔă›ížT°°…cÚSÉbř @ý₭‚>moé>)ŐźUŚě´Ńîź5hŃÜ=źÚ„K-ĘžCşˆ\:G…eM˗Á?tPĆżâk ţßN’ űËۈžtˇ˛ľiœD…C9Ú8şŽy$đ5~-ON’é,ÖöÜ]:îí 㟐üÂxă5ËüLđĺîź-ŰOŃěn.â†T‚ůľyě.-ąĘ<1ł$FG*8=š ÁŢ)¸Öľhć‡NGŻY^>š2˛\JĐXÚŤăنGuu$8<Ł€ze߉tX,Vö;řnŕ7Yľ‘eŰ,ҤH3Ž}7NńO‡5 6}JÓZą{;yž ŚiB,n’4lv1ó)ô=FAźëBřuâ¨î$šÔ'ÓRIŒeŮxňůŻgyçĘř˘ e$"€x$ŋď‡Ţ 6VŰ.˜żŮÚíîĄ Çvc7QÜ<ě7„rF&pŕ€ÜŽxôSR†ĂM7ŢEŐÚ|ťÎ™ßq`.xçŻ@9'‡5ŤL†žŇůbY!tš&ŽH¤Š:2°ŔÔd`Ö hţ"Ń~âřR=:ßV†!ňíŢo˜‡eśŠ;G–@ŔĹiřKŸFđÜ}͕˝¤ČÎŇoëĚvbÍ#JŃĆY݉f;G$ĐĺQ@Q@ÂxŰL˙„ŽË@šĂYˇź˝’Dˇó´ůËRĚŰą NTw­.ľ§Ý๊ďËšŽÖUˇ‘\Ç#ş  ă9çŽ?EĐüi˙ Ť¨ëVZŸQßl—öÚ´ĆK+N|¸âˆŰ‘Ă1Ţ79'8 Ł Ă ő›:ÎŢálcšł}2?=/‹¤ŃZÝĹ3b1m$#mŸČÎ2ÄŇ,|GŁÝiâüŢĹm^MdŚĺÄ{ĽŠg‰”dóóFŘő.˝ŤÇ¤[$ŇYj7…ßjÇehóˇBrBŽN='暿Ă]nfˇ=•ęgVŠkVťňWËźźiԇh$ça ë´{1Ç=‡‹´ßˇ„Ź´ ˝œrâ8.ĺšż’)¸o*QŸ0ŕ ĺxž¸  óřˇC‹Â֞%[‰gÓďD?e0Ŕí$Í) *cvâX 1Îqƒ‹Ţ Ó^Ę;ŤÉKó¨‹Pg“ ŃąžHädŠËÔt;ŔÚ řkF™aŠƘ÷˛-źb26ě˜Eż+´m€äkĎżáńd!°†ăKÓľ•m3WŽuéî ąŠi,Äq}ĽâgüŽpĘŇŔ/ ÁýĽ§ý˝ôń}lo#O1íÄŞe ęW9Ç˝dřwĆ^מŢ J/ľO§Űę+m'Ë ‚ufŒ{áX #ă#<>đűĹvţ%Đînľ ;Ëm&ć7[śše–HVČەň„xŢX–.Ň6G€5>ë‹áš´Q.”ŚďÂ6:,×bWß öé2’ŤĺüńżšäŠ Ľz•…í–Ąoö‹ ť{¸rŴ@ë‘ÔdqY~ńFŸŹę7lvú…íźI;A{hđ;D傺îŒŤQŽ@ȬχžžĐâÔî/-a‚îőљR˙ĎG(›Aâ‚đáI ôŔ‡Á~ŐěźcŤř‡P˛ÓôĹÔ-ăŽK{mB[Ă,ŞîĆBňF›Ţ@E䓎vľó7ˆĎúwÄšGüU§‚9˙;Zúfžfń˙Nř€7(˙Š´đG?ńçk^†Yţđ˝Ž#ŕ>†đ‚yÚEŹ~bňă:|˛WCöúk˙Ž˙őëÁ':uŸĚ­óŽƒý™+ŤŽlWńĽę:?ĂE/°Ó_üw˙ŻGŘ?éŻţ;˙׍´VĽ/°Ó_üw˙ŻGŘ?éŻţ;˙׍´P/°Ó_üw˙ŻGŘ?éŻţ;˙׍´P/°Ó_üw˙ŻGŘ?éŻţ;˙׍´P/°Ó_üw˙ŻGŘ?éŻţ;˙׍´P/°Ó_üw˙ŻGŘ?éŻţ;˙׍´P/°Ó_üw˙ŻGŘ?éŻţ;˙׍´P/°Ó_üw˙ŻGŘ?éŻţ;˙׍´P/°Ó_üw˙ŻGŘ?éŻţ;˙׍´P/°Ó_üw˙ŻGŘ?éŻţ;˙׍´P/°Ó_üw˙ŻGŘ?éŻţ;˙׍´P/°Ó_üw˙ŻGŘ?éŻţ;˙׍´P/°Ó_üw˙ŻGŘ?éŻţ;˙׍´P/°Ó_üw˙ŻGŘ?éŻţ;˙׍´P/°Ó_üw˙ŻGŘ?éŻţ;˙׍´P/°Ó_üw˙ŻGŘ?éŻţ;˙׍´P/°Ó_üw˙ŻGŘ?éŻţ;˙׍´P/°Ó_üw˙ŻGŘ?éŻţ;˙׍´P/°Ó_üw˙Ż_-xœlÔž!&őăĹě9Ÿô;ZúĘžOńY˙‰ˇÄAšGüV Á˙ÇĽľzgűÂôf8€úÁ':uŸĚ­óŽƒý™+ŤŽSÁ':uŸĚ­óŽƒý™+ŤŽlWńĽę:?ĂAEVĄEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_'řŹ˙ÄŰâ ÜŁţ+ŕŽăŇÚž°Ż“üVâmńnQ˙ƒpG?ńém^†Yţđ˝Ž#ŕ>…đIΝgó+|ă ˙fJęë”đIΝgó+|ă ˙fJęë›üizŽđĐQE¨QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWÉţ+?ń6řˆ7(˙ŠÁ¸#ŸřôśŻŹ+ä˙Ÿř›|D”Ĺ`ÜĎüz[WĄ–ź/FcˆřĄ|s§YüĘß8č?ْşşĺ<s§YüĘß8č?ْşşćĹ^ŁŁü4QE`jQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEňŠĎüMž" Ę?â°nçţ=-Ťë ů?Ĺgţ&ßĺńX7s˙–ŐčeŸď јâ>čĎEŹ˛ČĄĆH^Ÿ,‚şí;ţ~?ńĆ˙ ĺ4“Ÿ Ĺó+|ëĐżI\˜ˇjŇő*‡đŃÖlißóń˙Ž7řQýą§ĎÇţ8ßá\ĎĚÍluŸŰwüüăţlißóń˙Ž7řW'EĚ,uŸŰwüüăţlißóń˙Ž7řW'EĚ,uŸŰwüüăţlißóń˙Ž7řW'EĚ,uŸŰwüüăţlißóń˙Ž7řW'EĚ,uŸŰwüüăţlißóń˙Ž7řW'EĚ,uŸŰwüüăţlißóń˙Ž7řWžh:Ăęz§ˆ,šŒi:‚ŮŤϘ Źî>œĚF?ŮĎzç5?ˆú|VWgkrז—–0Ďk$y“Ëš¸XC(Brß œ‚@ČŁ™…fţŘÓżçă˙ođŁűcN˙ŸüqżÂźŽçâ&o$‹PűRyßh´ůšÜEˇĚ.3Œ ęF , Zż6˛šűXŢÂčCfÁČYĂZÁ2’{d͎;G3 ™ýą§ĎÇţ8ßáGöƝ˙?řă…xC|TěÍzš^ëOřG?ľUüߘÝlöLcďme?Ňś.ť[ˆnn X$e]’°ŒÉ´`îűŞÜAĎs0ąéŰwüüăţlißóń˙Ž7řW™xOĹú_‰YŒ7ĐůśqŢŔnmĚ~t}×\öĎ8<ƒĐ‚héž8‚ć%´ëšďžóP…mŹÓĚa­ŰۙXœŐ8ÎIb84s0ąëŰwüüăţlißóń˙Ž7řW™Kă "=m´ś-ĎŘÚčB|qĺůžV˙ďmďŒgĺÎî(đŸ‹ôż˛ oĄól㽀Üۘüč$űŽšížpyĄœĚ,zoöƝ˙?řă…ŰwüüăţÉŃG3 göƝ˙?řă…ŰwüüăţÉŃG3 göƝ˙?řă…ŰwüüăţÉŃG3 göƝ˙?řă…ŰwüüăţÉŃG3 göƝ˙?řă…ŰwüüăţÉŃG3 göƝ˙?řă…ŰwüüăţÉŃG3 göƝ˙?řă…|šâyMK⣎Öńs0Čäƒgk^ď^­ŢřđnQ˙WB9˙+Zôrˇ|Gɘb>ŘőOx_žą>$ń—Ľ}ŚL@.gXÚMťˇm䁚rGMĂ=E`˙ÂŢř_˙Cć˙‹]eŠÜÉŚŘˆŽ Š1ďc‘ł‘€ĺăďdçӊŸČš˙ ¤_ř.?üzšqŸÇ—Št?‡Œ˙…˝đżţ‡Í˙ř[ß ˙č|Đ?đ1kłň.č)ţ ˙ŁČš˙ ¤_ř.?üzšN3ţ÷Â˙ú4ü Z?áo|/˙Ąó@˙ŔĹŽĎČš˙ ¤_ř.?üz"çţ‚‘ŕ¸˙ńęă?áo|/˙Ąó@˙ŔĹŁţ÷Â˙ú4ü Zěü‹Ÿú E˙‚ă˙Ǩň.č)ţ ˙ 3ţ÷Â˙ú4ü Z?áo|/˙Ąó@˙ŔĹŽĎČš˙ ¤_ř.?üz"çţ‚‘ŕ¸˙ńęă?áo|/˙Ąó@˙ŔĹŁţ÷Â˙ú4ü Zěü‹Ÿú E˙‚ă˙Ǩň.č)ţ ˙ 3ţ÷Â˙ú4ü Z?áo|/˙Ąó@˙ŔĹŽĎČš˙ ¤_ř.?üz"çţ‚‘ŕ¸˙ńęň„ńŸÂřőÍSRˇřˇo:¤ââîĹ.í|—qppĆ3"ĺ"NŽ9ÉŹ[K߃VöüU€8ŽĘ(eKťXÚ´›Î‡hX‚“ťď#Š÷"çţ‚‘ŕ¸˙ńę<‹Ÿú E˙‚ă˙ÇŠâ“ęŸćš[÷ř›§6ŚĎ+\^É5¤Ż?™ł!‘âhĆhj‚ő99ét?ˆż t‰/äśńţŠćţán%ßy,1B…ś%8ő'śôo"çţ‚‘ŕ¸˙ńę<‹Ÿú E˙‚ă˙ǨĹ˙ŔŃb–C⏔şďöŘÚ1˙­č"űżęv€ťzŕsÍj^xżá÷ďÄË KśŐ¨˛Ă{)/ŮEŠPl1ŽAä’ăŻä\˙ĐR/üţ=G‘s˙AHżđ\řőyvŸă_ƒö3XËÄ-)šĘćîć-×ŃŕľËťČsŒcŒg5Ÿ/ˆ~ÉâoíĂń.Ŕ7ŰžßöuťˇŘf0˜r[g˜WiáK` Ř|‹Ÿú E˙‚ă˙Ǩň.č)ţ ˙ 0Đ|ođƒF}9­~ éNtý.=./2ú3ş$ۆló|Ł‘íT"ńGÂ[Kˆî´żŠvšuŇKxí4W–îd[›†¸‘:2ŕ;§Œœœú÷‘s˙AHżđ\řőEĎý"˙Áq˙ăÔä’řŤá šÓߟ‰–Ůď´Ŕ^Ă䝛<ĚíßŘ6ÝŰw âŽh>7řAŁ>œÖżt§:~——™}ÝmĂ6ůžQČŔöŻOň.č)ţ ˙ŁČš˙ ¤_ř.?üz€8Ďř[ß ˙č|Đ?đ1h˙…˝đżţ‡Í˙ť?"çţ‚‘ŕ¸˙ńę<‹Ÿú E˙‚ă˙ÇŠĆÂŢř_˙Cć˙‹Gü-ď…˙ô>hřľŮů?ô‹˙Ç˙Qä\˙ĐR/üţ=@gü-ď…˙ô>hř´ÂŢř_˙Cć˙‹]Ÿ‘s˙AHżđ\řőEĎý"˙Áq˙ăÔĆÂŢř_˙Cć˙‹Gü-ď…˙ô>hřľŮů?ô‹˙Ç˙Qä\˙ĐR/üţ=@gü-ď…˙ô>hř´ÂŢř_˙Cć˙‹]Ÿ‘s˙AHżđ\řőEĎý"˙Áq˙ăÔĆÂŢř_˙Cć˙‹Gü-ď…˙ô>hřľŮů?ô‹˙Ç˙Qä\˙ĐR/üţ=@gü-ď…˙ô>hřľĺíŠéúŗ5-*ţÖöĘăĹណ>Çj2÷ČúŠúČš˙ ¤_ř.?üz¸€&‹ůë#ĺwą‹fNćč2ŘÇsÎkŇĘżŢ>LĂđö›Ÿě{L˛Ÿ”ôďST:knŃí>e?)č=ęjćĹ˙^ĽQţ (˘šBŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ˇwW1ȉÄȢ(đČäEu°ĐM:ęŕĹ|×?,xë¸çŒ{ÖOĹKMJ˙Áz͞ćé´ÝŹoąÜ˜‡Ę­ĆÖ# ŒEy‹4ču+-QüáťŰtđľýĽÔcJ–Óϑ„g„FČŚG]˛ýĐvî#?>)ˆökPżG˝’;۔uˇŤ,Ź!O#šÂř%,ą|đ“E#ĆÇDÓFUˆ8ű0ŞZşŹžÖ?ˇ…ŇęŞ&Jń•NΚčŃc–äîĂd _˙äˆxKţŔşoţ“PRu ‘ ŒßJ‚Á|ӒSŒűÎ˜uwĎru6Gť|žĘťI “œ AôÁŻ&ÖíüO'Ä7ńœ’Zi—°ŘÄ|Çf%ÁH<łź”žC ÂŢ23ĆyÝR×Ä_đ‰xƒJÓmźI-ŐÇö˙Úě岓ČňžK†ˇ0ĺBłł4{v’X;ç ŔĐmź˙Ÿš˙ďáŁíˇŸó÷?ýü5äśĂÄ:ˆml,oüPž“QA-ĹÄ2C>>ÉpŇŠg@˘-ţl™TŽÎŠóâüN$ŽăPMR8ďAś6ł:0|“ h„!‚€Wwç Î=˘MJxŢ4’ţDiljÓ\ŕœy8ý§ýśóţ~ç˙ż†źĘűNMaü*še߉ZÖ-fW¸š¸Žx§‰~Ă:ýéP2ŠfUĎ,@ đ9řo<~÷ÖPß]ꖆ;xŇf´ÖWYd3,Q0,ĘŠĺFÓšqÉŰöŰĎůűŸţţů˙Ä3Í=Ϗ%žs#˙ÂRi fŔąľ“Řá]υŁń4ZîŸy{uŹL—wş¤WPÜ!ňb…'“ěÄ.ŃłĺUÚßÄżŕőىŰ´ŰČÔYK4K=Ť´r) sV~Ńo˙=â˙žĹqž8Qmáý>ňÜŽKł"Dŕ’Ţh9őáTsé\kz°ń˙7ç]ÁCzŠľsk*^áî_hˇ˙žńßb´[˙Ďxżďą^u˝X˙Ëü˙÷Ő'öÖŤ˙?ó˙ßU§ö4?˜>ł.Çşý˘ßţ{Ĺ˙}Š>Ńo˙=â˙žĹxWöÖŤ˙?ó˙ßTmjżó˙?ýőGö4?›đŹËąîżhˇ˙žńßb´[˙Ďxżďą^ýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}Qýćüë2ě{ŻÚ-˙çź_÷ŘŁí˙óŢ/űěW…mjżó˙?ýőGöÖŤ˙?ó˙ßTcCůżúĚťëö‹ůďýö(űEżü÷‹ţűá_ŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐŘĐţoŔ>ł.Çşý˘ßţ{Ĺ˙}Š>Ńo˙=â˙žĹxWöÖŤ˙?ó˙ßTmjżó˙?ýőGö4?›đŹËąîżhˇ˙žńßb´[˙Ďxżďą^ýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}Qýćüë2ě{ŻÚ-˙çź_÷ŘŁí˙óŢ/űěW…mjżó˙?ýőGöÖŤ˙?ó˙ßTcCůżúĚťëö‹ůďýö(űEżü÷‹ţűá_ŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐŘĐţoŔ>ł.Çşý˘ßţ{Ĺ˙}Š>Ńo˙=â˙žĹxWöÖŤ˙?ó˙ßTmjżó˙?ýőGö4?›đŹËąîżhˇ˙žńßb´[˙Ďxżďą^ýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}Qýćüë2ě{ŻÚ-˙çź_÷ŘŁí˙óŢ/űěW…mjżó˙?ýőGöÖŤ˙?ó˙ßTcCůżúĚťëö‹ůďýö(űEżü÷‹ţűá_ŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐŘĐţoŔ>ł.ÇĽëß4+=Zk?ěŸܛ}ą4śţź’&eP­ľÄxapĂ őŒŁ˙ WC˙ ?đ™˝˙ăuÁmjżó˙?ýőGöÖŤ˙?ó˙ßTcCů˜}f]Ž×Sř˘Üé×6Ńč>2,.Š[Ă7¸‚9ýÝKŕďYř?ŕçƒěu}?[’ôé6Q˝ľ–“qs$Mş‡ĐůdœŕpżŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐŘĐţfY—c˝˙…ŤĄ˙ĐßřLŢ˙ńş?ájčôń§ţ7żün¸/í­Wţç˙ž¨ţÚŐçţűęěh3­KąŢ˙ÂŐĐ˙čăOü&ořÝđľt?úřÓ˙ ›ßţ7\öÖŤ˙?ó˙ßTmjżó˙?ýőGö4?™‡ÖĽŘďájčôń§ţ7żünüVЇ]Ćcţĺ›Ďţ7\öÖŤ˙?ó˙ßT‡YŐ[ů˙ďŞ?ąĄüĚ>ł.Ç{˙ [A˙ Œ˙đ™ź˙ăuçú_ÚĘňŐ|@×vŠ{i%´ŮۂĹdU egĄ*qOţŘŐ?çúűę˝WáݕŞh0jBö˕o6bIfĂ9č8 Š”#—ŻkvôEFnˇşĎ˙Ůgwenhywfar-4.15.2beta/doc/dialog/images/cocoa-7.png0000644000175000017500000015717212364015347016772 00000000000000‰PNG  IHDRĐ0Ż\ xiCCPICC ProfilexՖgTɆŤ{r"Ě C†!g$ 9Ar•a† ă0dDEdqLˆˆ`X0(¸*Aրˆb`0ÇdPŽ‹(ˇŹçÜť˙îŸ[çtŐÓo}őuuW矐;9A ,@*?CčáĚ ˆdâ€H"‡›.pň÷÷˙Ř>ސxňŽ‘8×?†ý÷ i^l:Č™ŽáĽsS>‹đ W Ě>…pv†aTÂt!˛A„+Ä?ĎőbŽ™çós1Á.HL?x2‡#Œ€ôљYÜx$ia>/‘Ůa{n‡‡°xŠkÄ\…°nĚyâ`'f1'‡żČóD욘.HáäÎÝü/ťÔ”Lä{Í5*ғů)ËĹgCGŽ1ÇŐ{)sg6§ÇňC‚t~ĚrżŽş.° Ăůö^Đó\–/plşŰbž$Ž—řĚćň 3C8=+Čmó‚Ă˜뺨Ç%şłôÄ öⳒ×x/î\Ŕ\ŕ 8 d€X ̈ÍÉ@Ö—5‚\ab|BÓ ůăb ™l>×ؐifbj"žţżiâZ›ßě{Ć\ AŒ›k91Ř%#5ŕůˇ@ł.ňákڊАşiŰĘÍfÍçC‹ "Lň@h]`̀%°ŽŔ x? "Ŕ*ä '€T Ů lĹ ěťA58zpœmŕ<¸ ށ[ ÜO€Œ€×`|Óá Dƒä!UH 2€Ě dšA>P ECńʄňĄMP)TUCľPô+tş ݀ GĐ4˝ƒžÂ(˜ ÓaeX^ł`'؆WÂńpœÁŰŕ*¸>ˇÂ—á[đ=Xż†§PEB1Pj(# ĺ‚ňCE˘âPBÔzT ŞU‡jBu zPwP"Ôę ‹ŚĄ™h#´-Ú‚ć˘ÓĐëŃečjt=şݍžƒBO˘żc(%ŒĆĂƄcâ1٘bL%ć(Śss3‚ůˆĹbXŹÖM®Ŗa÷c›ąŘě0v ‡ĂÉă pv8?—+ĆíŝŔ] âFpŸń$ź*Ţ ďŽÄóń…řJüqüEü ~?M"hl~!—°p˜ĐA¸M!LĽ‰:D;b01‰¸‘XEl"^%>%ž'‘Hę$kR)‘T@Ş""]' ‘žŠd}˛ 9ŠœIŢF>Fî$?"ż§P(ÚGJ$%ƒ˛Ň@šByNů,A“0–`Kđ$6HÔH´J Jź‘$HjI:IŽ’Ě“Ź”<#y[rBŠ Ľ-ĺ"őZ/U#uNęÔ”4MÚTÚO:UşLú¸ô é1*ŽŞMuŁň¨EÔCÔ+ÔaŠŚAsĄqi›h‡iWi#t,]‡ÎŚ'ŃKé'é}ôIŞĚR™P™™™ 2"ŠĄÍ`3Rۧ÷_e•edceˇČ6ÉĘ~’S”s”‹•+‘k–ť'÷Už)ď&Ÿ,żSžMţ™ZA_!@![á€ÂU… Eş˘­"WąDń´âc%XI_)Pi­Ň!Ľ^Ľ)eeeň^ĺ+Ę* G•$• •‹*ăŞ4U{ŐDŐ ŐKŞŻ˜2L'f łŠŮ͜TSRóTËTŤUëS›V×QQ/ToVŚAÔ`iÄiThtiLjŞjújćk6j>Ö"hą´´öhőh}ŇÖŃÓŢŹÝŚ=Ś#§ĂÖÉÓiÔyŞKŃuĐMÓ­Ó˝Ť‡Őcé%ëí×ëׇő-ôôkôoŔ–‰ű  1†Ö†|Ă:ĂFd#'Ł,ŁFŁ!c†ąqĄq›ń›%šK"—ě\ҳ仉…IŠÉa“'ŚTS/ÓBÓÓwfúf\łłťćswó ćíćo—,]z`éC š…ŻĹf‹.‹o–V–BË&Ëq+MŤhŤ}VXt–?ŤŒuÝcíl˝ÁúźőK› ›Ó6ŮŮ&ۡ[Śł,vŮáeĂvęvťZ;‘=Ó>Úţ{‘ƒšÇĄÎᅣ†#Ďń¨ă¨“žS’Ó §7Î&ÎBççO.6.ë\:]QŽŽ%Ž}nTˇˇjˇçîęîńîî“k=:=1žŢž;=°•Ů\v{ŇËĘkWˇ7Ů;ČťÚű…žĐ§ĂöőňÝĺűtšÖrţň6?ŕÇöŰĺ÷Ě_Ç?Í˙ˇl€@MŔË@ÓŔüŔž ZĐę ăAƒƒˇ? Ń É é •  mýćV& _ž.üV„BDbD{$.24ňhäÔ ˇťWŒDYDGÝ_Šł2gĺU ŤRV]X-ššłúL4&:,úxô ǏSǙŠaÇ싙äşp÷p_óyźńXťŘňŘŃ8ť¸ň¸ąxťř]ńă  • ‰.‰Ő‰o“<“&}JöK>–<›–ŇœŠON=ǧň“ůÝkTÖ䏊˘4›´Ýi“BoáŃt(}ez{15˝™ş™?eeŮgŐd}ÎÍ>“#ĂĎéÍŐĎݒ;šçžwd-z-wmWžZţĆüĄuNëj×CëcÖwmĐŘP´a¤ŔŁ ~#qcňĆß M Ë ?l ŰÔQ¤\TP4ü“ÇOĹĹÂâ›m7üýsâĎ}[̡ěÝň˝„WrłÔ¤´˛tڌ[vsŤéÖŞ­łŰâśőmˇÜ~`vÇý;ëËĽËóʇwůîj­`V”T|Ř˝z÷ĘĽ•÷÷dîUůTľďŐÜťcďLuBő˝çšć}Jűśěű´Ÿˇđ€ăŚƒĘK~ý%ń—‡ľľ­uÚu•‡°‡˛˝<z¸çëHĂQ…ŁĽGżăŐÖw7X54W:ž˝nĚl?u˘˙¤ëÉö&ŁŚÚfFsé)p*óÔŤ_Ł˝Úűt×Ö™ŚłZg÷ľĐZJZĄÖÜÖÉś„6Q{DűŔ9Żs]ś-ż˙věźÚůš 2ś_$^,ş8{)ďŇT§ sârüĺáŽŐ]OŽ„_šŰĐÝwŐűęőkî׎ô8ő\şnwýü ›çn˛nśÝ˛źŐÚkŃŰňťĹď-}–}­ˇ­nˇ÷[÷w ,¸8č0xůŽëkwŮwoÝ[~oŕ~Čý‡˘ˆňŽ=JyôöqÖăé'O1OKžI=Ť|Žôźî˝?šE–˘ CŽC˝/‚^<ćżţ3ýϙ‘˘—”—•ŁŞŁ cfcçÇÝÇű_­x5ňZđzz˘ř_Ň˙Ú÷F÷ÍŮż˙ę Ÿy+|;űŽě˝üűc–~čšňŸzţ1őăô§’ĎňŸëż°žô| ű::=ƒ›ŠúŚ÷­ăť÷÷§łŠłłސ3çPHÇĹđî”Ä+ ž˜Ř9ď…ç" y˙ްŘÇĎyů˙äyż<o Ŕ‘NB đDĆdÔFFŞ#bKě`sóĹ QÄ-=ÎÜl ˛ą&Ÿggß+€ëŕ›pvvz˙ěěˇĂˆg@gÚźGű€Ľşš›YőĚöÍ-˙ąű7…čŞÍöě pHYs  šœ IDATx읠ĹýÇŻ7xô" Šb%jťbůÇŢ{ŻQىcIě&–¨Xc‹1jÔ("ŒblHďĺőöŸďÜűóö핽wwÜť÷]fvÚÎ|fßîwg;—ÓÔÔ$t$@$@$@$@$@ńȍ/s‘     €4Ď    @€:,f%     hž$@$@$@$@$€tXĚJ$@$@$@$@Đ<H€H€H€H€H üyŰ]ÖăÚ]ŁŮ`   ČfŠäŹ]+9§˝ő˘8 ţ˘Ř   p´7ąąšBŮ9Ť$   H S…uF č6ŠfšktŔ?,v™H€H€H ]HŘŹ#“Äô:ĐEs[Dr[ĘśŤ3“%   uD alÚwŮu-Ś×‰€ šă˝ńäYGçK$@$@$@$ŕC ąOYb:­:NáMGKó šßŻƑ    '—vލ–?Zš­"B:-:áIčFŠwXÇ-’ăŠË­—a    `b ÝćęâÉ)O¤x[u:„tĘt ńě'jýât肤EËŤőŃ'   HŻŘőîťGš1ŞEtĘt’„s$ěĆťawÜpZœ›ć†ľľŢ8ďžÍ—ě™č¤ č6ˆgWäjX}mߛŠLŹxM§O$@$@$@$_ŃjŠĆďÍiߍwĂhaŹ}ۋdŠč¤ č8ĹłWčşűV'ěÍçÝwë@Z4$o´z˜F$@$@$@ŮFŔ+TŁőĎÍë†Q&Úž›ćö‹ÓvDKły’%˘“" “$ž]ńęö‹ W_!şiąâÜt†I€H€H€H€‚pĹŤ–ŒçŚů…ýâP/â#Ľi:|87_(‘Ć…w ´Y@ˇQ    @0^AęÝGm§žA÷cůnö–ńÖŠů4>ěˇUDˇI@GĎ^qęî{ĂŢ}t qAăĂ@|Ę#Í­ĎÍŤáX随>    tt*\#qđŚcß/ĺÝx7_Đxżş§Î­ĎĆľEDçk­)ň]aę ë~4if+3[§ć°ńÂ"[Ë"N÷Տg3;ůuŸ>    @|Z‰RSLăÔGMV_kÇžnˆŤ5[ĽŮ֘­Îlšćę:mŇ4a8ěű…mb2˙Ix:ŽŮgíÚŤáhž›ŚáBSśŰţđ‡­wŰmˇ˝űöíťgaaá THG$@$@$@$jjj~X´hŃŰĆ˝vŐUWM7˝Zj6j8Ň~aóóÝ8oű ŰC'S@ŤčE{"…s‘Řě4|oX÷ť^ýő;íż˙ţ—l[WW'Zž>    @ČÍÍŁő¤žžţ“—^zéf#˘§˜n­hîš h]Ö}$kÂŽHtă#…Đ ™pD˜}FĂáTüĆVńŹeT`k|çQŁFímlTś­ŞŞ˛•ó    ě"€ R#ž%//oŰwÜqÓťf[e6żĐ†Ž@6ť6 ńnžXa” ;hÚDlĄĐᣎ ¨^Ó2¤‚ąšWăźžćA|a—.]öÄĚ3    @v€îÖ­ŰŚ—wšM5Łv­*5űȧ>â˝y§Nóę~B~2´Ű9ż0â4Ţő5ŢëŁ#„ř\óT°Ůç됌O-kÖŹ‘üQVŽ\ió"͒óÖůĂ?ČŞU+Í4¨ʖ——ËŕÁƒՉ'+că#ËV-–Šß˝%?,üFję+ńú@Š JeHďá˛ý°=¤{y/)**˛mÖÎHíg<    ´WFm`Ú-¨‚Ů;óě턝úH×0|8M÷†mbĐ h#č"+ĎľG×<đÝ0rh\<~.Dg4×ĐĐ ˜Ąž;wŽ@čB$÷ěŮSJKK­0­ŹŹëO?ýÔ Ţţýű[óŠ bľZç/żüŽł{RZRbZŸ#UśÎ ůä“Ol ˆY'Ú3”˙}?Eţ3ýIéT^&˝úő’ÝICcƒ,]ž@žZđĄ|üý;˛ďVGËCv’s<Řё   @G!Đü˝›NŚ˘Ű*¤Ł!płjO7.bYh[#ÚUhGĚç&ĐnaÖ"ZĂŽď†5âbm -ˇ"ĘúşÚÚZ™7ožĐ˝{÷ÝşvíjôŠ+dńâĹbžě´yPIż~ýě Żo…&uΟ?ßÖۧO[gŻŢ=u˘á+VŹ”EŚÎĹŚN3Úë­ˇ^Ô:1óüŮŹ)ňĘ'H÷ţdŕྲăĆ{ɨa{KUm…źóĺK2­ü™?g‰ź4ői2ĎZ[oź3l"5“ń$@$@$@$­ U8ǚVŽ`V ęSĄŒt ků¸ý@:Ęěł62ځ‘'žMĹ3ňĆвlŮ2+`1óŒY[L’WWWŰś á “¤!/L:˘Íě˘Nˆnˆb­37'× kŰîÚĹÔYX$ĹĹ%6/L:˘ŐšlĺbyýÓ§¤ëzĽŇgpŠ”uΓ5 ‹ä‡Ľ3ŒG•Tĺ,•ňŽEfŐë2É1Éźƒúllę_?SŚ‘   @6P=ˆž!DDGă)×J8Că™…$ ŁľŚ9 ‚ł:3 ‡5ÎĎ8…Ľ~Ě)˘šĺ˗[Œ™bŘ7cć:„! ‘e:wîąÚĽK—J÷îÝm~Ĺőő R]Uc˨YIqqq¸N”‰Vç'ßž+…y2x¤1/)+Ł˝eeÓ™ľŞÖ˜pŰčüĽRÚ5_ňKşZĄ˙Ͳ%‚2űő<"b;™@$@$@$@YJŻŕĄ!v!ž†˜F9ä…Óp+áJţo[´6J}=:ö5Îë#ŚGňHtN,ˆeˆ]ˆg˜;`Ć›–Cń*¨!r1 ­éh×ĄNĚ<ťzë„ŮęDÔšdɒ¨u.ŽúInŇKzöÁlxĄäçI^nŁÔĺšryMRbÚXŘPn—pŠ)Ť—ő7ɑĹK~ŠZ§ˇÝÜ'   ,!¨]R­bŘŰMÇ(§yÔG^MG؛q\ÜÚH,šÓtő5ŻîĂ8„ý6W<#œMčڊLł0ť AŤŤk ŠÚ\ˆ\wC^¤EŤé˜]†đvEš['Â*ʑ7V EUŇżWéŇš\ ĚLs^ŽäS<ÓnŒi}#6ł˘ŮŠŠę¤w‘9ŤVEm'úOG$@$@$@YH@g U8Ł‹:óŹÚRť q A…t́łŃrq›qÄ- ľ…Íž6\}O˛ÝőČHĐ2šŽ# ß Ű¸X&ŽŘTčBD#ě:ÔĄbWóGŤWŸëŁöá žQŸúš/ZĽEĽRběĽËŠKĽĐˆçB3]”[`‚&Ši¨—jłŐ™śćČŞâz)1B:Zś1ü‡H€H€H€˛€Ť ˝"i*Ś]ÁŹÓĽá i7yݲnZĚp˘Ú[ą6ŘëťůŚ› qşď†ó#B˜P@ČŞˆ†˜…€vĹ.ĄłĐČŤeďçPvÎ*ŒąŻ˘ÇA]*lF^¤ŁîHŽW—ő¤ĄŚBŠó ĽČ´š$żŔlć#ÄźB;zŐő5’ośęÜ:Ł^Şs¤W×ő˘ÖéXŒ'   vNŔę@ÓĎđU'şqČç 0Ż`FW(뾉NÜĹ% hÄÁâqn>„Ý ĺÝ}ż° i…S@ce ŹőŒU0\ńŹÚÔ4_?üC^”‰&vńá ÖlĆę*˘ŐG}(Ť‚>ň˘L´:t&3—LcźaD´YÄéŇü#Ś QĽäć;íćó˘ÁüđâŞĹŐ˛qĎ­˘Öi ň   Č>ŞŃ3Ě*ŽĄ!áźž ĺPjč_ˇŒ†Ýôah^Łíbć‹K@ˇ¨šőގńşďćDœĆťžĆĂWńě†suŚ×­Ě ăSđ˃XśŽ°°ĐÎDCďŤćÇĚ0ę€Fi,c§‚Ú­KĂHÇúŃŰ*˘ľ>äAőďęŐŤíŻ "_´śę:R歞.‹~Z-C‡•IAŽůĐlů9˜n2áF)Ě5? cΑ?.‘’ÂÔm3Š­âϘë¸Đ'  č0TÂWA‹°ÎD4#Ň\ńša87ÝÍJMŕßD4§~hŻĺżHs7¤şűnŘ„xw?Ś€ĆŹoYY™ź˜Ć/şZg…1K ĄtüPJ´‡ ”Á‡ČQŽ2ČďŠhěC`Ch#Żťt:ëu5•M˛EżýäŤĹŻČ’NƔcý"iČ5ćÍȍJC}“,žťFV.Š”­ű“šĘZÎ@{ArŸH€H€H #€TÁěúŔşŻz<†SÚ ýëԚ†2š?RÍŰÂOD@ˇ¨ŔŮц;Q6č×9ÍŤ>@ŔÁdžxŽ&tM;ë  ł ŹĹŒY`ĚJĂ΂ÂBbůŕ0űŒäHu /„6–§Cé¨ĺU<ŁˆlĚnGŤu”—ô’M{ď'łćž%ľ•őfů˝r)+5m2bź˘ŞÚ´•,ZV!#űŽ“Î9˝dUÝŞ¨uFj?ăI€H€H€H PMaŤ˘ ?‚0|Րđ]Źń~‚Xóš"ms‰ hmœÝÝGX÷]_ăŐ {}M‹i Ůeh˜^ŹYłĆšU¸bB6ŇšČ §3ÓvÇó['Ä1ÖĆŻ §3Ř0Ű@8Ţ:!âËË{Ę΃N”Y ?•9?˙dDůJčgŠŻ+”ÎCe̐mdÍĘ +řqŹhíD:    d!°4}Sł čE8ő‘GÓÜřh‚e]qíÝG=1]Lmħ6ŇŻ2ošť°n(Ťi§ž Čó‡TP1/~~ťŚŚĆ iŹőŹŤf`6ńŻj÷Œ.ŚŮvë„ ‡_°R'Ä0ځŮëőťlfLCv ˙ü7f¨!ţÍ_lgź‘WíŹŃG:   č@\M¨‚XłúšžćQ¨4ŢöŰGœuĐžFş"[“Â~LÎ  !^§÷Ćťűš'ßÔ1g Ýƒ`6BNużöž7Î-)œě:!č!Ž-ZdÍCÜăęlłśU÷Ý< “   @ =¨Bž ăhZXMü"Λ'VšPŠćƒ č…#ě¸Cm¨7ěîkĎá}ŔȏÓüęťeüâÜôHa-§ž›Ď/ÎM÷ kˆéHNóDJg<    d1VšĐôUE4şíęKÝWQŒ47/Ň5 á6ťd hżŽhœë#ĎfÁýă˙hs'Y    @ť"­mćqő¤vqŽxv…łŚiބ}ŘxD- ;'ƒ†]ƒCœťšOGÚôˇÎ‘Žaő‡™•5ž5ńt$@$@$@$@„@=7]ýÖlřHŻě]ßĆžwƒŔņx Ťo˘Âń#N}|+‡’Zţ›Ěh­YE4ö5ŹžĆŠŻń^_Ĺ6âéH€H€H€H€:h@čA8ˆ`ŻVÔ}¤Ť^Ô8݇vĂț§ K¤2mdʞÚpäÓ°–őŰ×4äoKűPžŽH€H€H€H ýP ¨şĐőŃż}í%Ňb9-+Ÿoş6Î7ŃŠQߓlw5ÍŰ(Ýw}p÷#…ýŽĂ8    ě%Işń轝ŻaĽâî#Éišú‘ň…ăƒčp!Ÿ@¤FŠ×*4žnÚ&řšŽůé“    d?h@Ż&T­ˆŢÇ҈‘Ň#Ĺ"Ş T(Bfmúš ű§aő‘Çvă’Ů>ÔKG$@$@$@$ůt"ŐՐhľW7꾛OĂÚKÝW_ăöS)PŃHˇĄŢ°Śkźťď†î ’    ´KŽtĂ茻°:oŘÝ×&‡ȸĐ˙’››c7詞=KdÔ¨ţrôQ#¤¨¨-Ҳy\BFÇ;B-24ďhž ůÝjŘŻîˆqIëeÄ#DOp;­9€Śi|Â>Äóc=&}úô‘c=Vzôč!yyy­ę ‹j/Jm ăCĚ ‡Ůßϖ 7ÜpíEHi’UˆD8móÉÔ†z:ZżšžŮłyÎş<ÂBaľ7ĎŮfˆm`¨Ă cÄó5ůLQăŒď—ČŔ~˝›+§—Ść‹GŁŃMMMRW× Ź–§žœ&§Ÿó†üőŽ˝R!˘őŻ MÖ°ú‰tŁÍeâĐA$ŻŰ”ó–őîťůăOš4ɊćĂ;Ě<-5[­@ ťľëŒ´9Z;“‘ń!`ÍšÉĞ(É?7ČV˙“Ë–\SĂľ’mňْiň™â>ž¤˘AşŐšűWŘAšՌZň`†ƒg7ŻÁŕ,îÖIŽ>ugšęŞ˙ȃ.gžu¨xŰţuUjž7.Ţ#)‡źĄŽFŠ=^ĽŠˆIncÝ0 x÷#VŇքF#ôžřâ 9á„lU؇łłÍ1ńŘŹüLJ@}cƒůŁq/B>™•˛M[ĚBäQÂČ6at ’iD4mJX^Ő kŞlŽpE ăCˆý8 .´™yhŒ h0~cSŁÔÔ5ɞm!ĎÝ7IÎ8uËľ–ĄęRůŻ;|8Žť0Zšt—JĆşđ6iŃŇ˝ůÚohh°ćÝşu„uOQa“„jî؅šĚť}Í&8GŕüL|ŇŐĎT°­ŻŻˇçžž˙ÉęK]]äç緋żĽTpMÇhő¤jě˘3hZşŘţôÓOҡo_óz¸¨U19‚ çc6¸t1—ţÖ â͞ąů*k›¤Ę˝lséžN€`hڈgŁ0 ]S'ŇłoŠjĚkĄˇRČZud¤Ez¤´67+ÝW?ÁŹĐoşw?p‡ŤŞŞÂe řpUáźVâ0†qóŃŹ‘ź‰yůĺ—eńâĹ&%ÄńŰnť­ :Tžzę)9čŕƒě‡tš_äć×8řAâg̘!S?žj‹—•–É AƒdűíˇˇmROĐăƛßŢŹĚgžăüí‰oË˙ű_Yo˝ő,Ë]Ćěbű¤HUţăO8^ş”w‘ťîşËśK˙I'ó lŸyćYSą&"“#Ć!0_=z´üöˇżő=_{í5éÓˇlšĺ–ëńcŽӗ^zIvŰm7EŽ˙Ë_ĘÇlăKKKeƒAŘs87§ĺâ?éb”+څkŔ’ĹKÂ}C׀‘› Ä ĺüřĹ?nÜ8;vWţöJdO¸[Řü“ ŢÉdťŃЍä駞–ƒ>8üĄňGS?’3Ď8ӊăN:É[o˝eťăö偐űďż_>ů䓸úˆkŹ÷üÜaűÂ÷Ŕ­ß°ůŸtÄ'Â4Ň5śşşşÓ }Ŕ}pđŕÁöž4bř…/Ł5kÖČ3Ď>cóäŘďF%ť ÇEÉÎ_]ß$ľĄy’ýˆśޟź˙–|4ůżŇł÷z2bËídŤĆD+’ö´s~3δi9ńÜߌĺŘV|l^qŹéአ$[@ű5ŢçÝ×ţi<| kZÂ>fKJJŹpVÁ _Et¨âć1{ĄŔ-ˇÜ"•••ö†Š čׯŸHŰy睭ŘŇ?pÍŁ~¤xźęřꍯdŕŔŇšsgÍžP "óOú“pŔňÍ7ßČçŸ.‡z¨ŕ&Ą.RýéˆÇĹÝΐ´:C­ókÑG)K—.•ƒ:HžüňKůôÓO­0@ żüë$Ţ =ÎôĎĎĽŁAŮ~öŮg˛|ůrŰ\ˆ‡E‹Éžűînţhűäí—Ű<BnąůÁÇ"ŻxÎáp#MŔmO*âƒrEn˝ĺVßkŔŚ›nš’öŽ^˝Z0Ë:räČpý7ťá‹ăRÍ)‘ú“É×z}-//ˇ}žđčŮkŻ˝ä†n°ű+WŽ sR&ĘÉýۍ֗ çg´zlƒ<˙$#"L#]c+ÖT´bŞMökëÜšsí "îQp` `ś1öľ×ůsĎ9×^‡jjjěC ŢęáĄ"Îď¸éˆŻ1ş6ŽĂžŸčĐř+N/+—/•ąű,ß;CžúbšŒÜ64ůăTcú˝7/‰ć_ź 4>}ű7Os] ćáö-ŃúŁľSëÄřá´Ŕe ç‡ĐőöMg^Iž=źő´aßՅ~C…ޏćŠóî#Ţ/Nóö“- 7 Š‹‹í`Ş ^c‡/1°çž{Ęő×_ß*ěŞáâ­Ç­ł;í´“Eh‰äzöě)÷ÝwŸM~衇ä˛Ë.“?ţńöƒČHeҏ~é;ž(ă7ěĂ^ÁŞ R‡–I‡ż.Ű”íţđ‡0’+ŻźR>úč#šűîťĂqn Rżţţ÷żŰl‘ŇÝ:źáhíͤs8Z;˝}r÷ýމprëŒÌ÷ď˙{ű€í͓Şcz“Č~2ŮâřŢëë‡~(§žzjřšăÇIů¨O?2éüôś7(Óh×Xź)ň2őĎÝżŕ‚ ě*K7ŢxŁVŚńśIó_z鼲ŐV[É… eĈňüóĎە°ÜcĽ;\Ű,2×~3ŇcÚfoü/?Î’Š“ß''}'=záŢĘŻB՛?R=Ɍ˙óľçˀ 6”Ó.űc¸=¨bB6ä˘÷+áö˜Ęq{ó™J3U˜Ő7›y8Yź˛RňŠÚżŠO3Ĩ^ËwŠQłśßDh,eW1Ńś“Ž yě ižśvă—,Y"[o˝ľ]SńK›÷ß|óMŮ{ď˝íërÄđÁrŕڙf\<ćϟoë9ĐĚ*ĂaI=ÔAí֏ăŮŮóĄńX26hłfͲëXŸy晲ă;XsÜXđĘLŰ9Ţ<9ňČ#eƒ 6°3ź¸Ž;Öօ< ,˙űż˙łí‚€ŸôöŰ­˜čq‘ßÝ4žDřyçgϓĺ˖I˝9˙đ7lŘ0Á ěíˇßúńůťB=zë1ôžmÎaS_Ťűę'3>Žŕ†óAŰŁ>ÚőĄçܻל{`„4üâoç.Ę î„ă—|0\ßcŸßĚëÔ_}őŐöďe!bPÖťMÍuc‡‡$m‹Öc¸qéŒO&[˝žbÍ~ôáđĂˆCœ{ŕs#/'ô]Ď}Źş´ëŽť Xáz‰‰÷üÜČçťƒĎ5őMœ8ąĹuă´ÓNł-Ę<Úő,R{źńA™FťĆz™žsÎ9rź9ő|Ōńîťď.x›uóÍ7Ëäɓĺńǡźń°‚śÁ-1Ś‘ŽĽîů§ß’4škâń›Ýťwˇ(ř†h÷ݎ#°ŐúŃ6˜ƒŕš˜?ˆÝ­ IDATy+ Ö^vČŤůÝ4ÄUčęşFcÝ(•f5ŽJcĎQe–aĂž_|c^Ąý|˙í×}ó/X¸HŽ9űh9x‡rž[ÉÔ÷'Ůznžň yęĄ;[ÔÇď/”žxŔÖóń”ÉręA;šrýĺĘÓÔŁíšńғäŮ ÷ĘŁ÷Ü$Gď>\Î=jůěӏl;'Üwł|öá;ňÚ Ëńűl)“ţű˛ˇâوŘGÂev—˙MC˙~%_é°Ť0üÖT7ĘŞŞFY]c†íÂŐć{›" ;Ô 4„j¨pgÄčűďżo/âÂŤ¸ ăukĽąóYÝź‹:ž¸7ß|sŐUWÉţűďo× ţĺ—_¤°°ĐĆß}Ď=öu9Ä ňBcsöqă´ő›ă@ĚôîÝۊ@ŘAř^tŃEś?{챇ľŐÜożýl'œx˘5Qů÷ż˙mMD0sýý÷ßŰş"rýő×ĚęüóŸ˙”Ë.ż\ ţƒ8´ [źĎłĎ>[Î5báÝ÷Ţł7@ÄŠ;ŃӦ˝6a•9sćxí˛Ë.ňă?Úcăv’¸y=üđĂ2uęTšđ ĽĐ|`4~üřđ8vúérîšç nG}´üë_˙˛f$°ë;ÜäƒH<ůä“eúôé6 3 }Ó>$ËĘÖ=.n8o]ۤ#î‘Gœ#&L[o˝Unű󟭠C:řâáDű}œ`‹ó(ן~}ؔǛ;î¸CśŰn;{^Łly˜ňńz# +z22~ůQ&•.Žŕ6×ç€sď ŸsˇáÜCqŔľ&dp?ýüłldfâ´ď^Ć8OÁé…^°× äuÇîŃćąűł3vŠdoÝÉdŤ×S0D˙ŃWœˇżůÍo,[˜˝y9ář8ßp˝†ĐĆľüŻšć;Nj6ŕöÇ{~Ţç5ÇŔĹéćşrÖYgÉ×_mĂ :śŃŽgn˘…ƒ2vő2ĹĂ&{ţdÄ2Xâş ł!<äb"s˜T¸ř⋭ÉÎc¸łÍ5ÔďZęíîľpŐĆ|Ç~ňÉ'íĂ$ĚÁ(Ňý lˆŔ<đw‡*üŕ-îůçŸ/÷łFřńşŸ—ÖH^I­4™ ڜćÉZx9vNŐüŰ*ž§ŒžÜ}íŮňžšwí}ŇľRÚĽG8˙ĂWž Ýú ”óž&˙{ű9šűĆKĺě{'K§ÁŰÉ?żMď~ŠŠ˝e´3hŁĺŻ7ĚŔ >ňÁ7ŚĎ&Î,ggösór%Ż0ߚí—ö˜7Ť ž1  /.ŔŘě O\ć?¸Xźáßu:‹­uę>>~Ń0ňc%<ÁăŠ3y㢤y´ź[ˇ†Ń.Ü@13€™A1HÇë1Ě âŐDô̙3­ČF}˜U…ĂEË=Ⰿ'|8ŘVk:n¸čťśÉ6S”PVËGÉÖ* ‚błÁGu”ľË‹Ö&}uqë=fő!ŠqÓT‡~cöÄmVMŃ˛Č śŘ˙Ů̢rŕđí¤bńĎŇkłdł1Č矖MśÝUŚżţ˜ě}âŐöŘËćIMĺ*yůî ‡Í7Ť•”˜ŸŔF{đŮ} ˇł¤4ôŤ¸ů'˛óLzžŞš•¸eĐţbOäńëW"ń–ših#&$M Ćt061]˜g–..°Ú |¸dŤ[Ť˛°‡˜ů…ŔT{,ü‘é…ÝŐ?roXQh^ďšŔúÇ iŢ}-W`Ď>űŹVł‰y…Ö‡ú5ŹeÔGxRßÝĚzÄďsĎ=gŸźńp!ŞuÁFâłĘ0E€[fěWáp,ýŞ ącÇÚřDţŃă%R78ŘŮA¸cŐ<Ŕůľ ćp˜aÇkŽĂ "Ŕ íCżq“Š4.ȧ㆙ě×_˝Ő´Ľonű ˇĺřĘÂ{^šýFť°§ůüҕ“Íhţ/üMiÄ㍎7ŸćG|¤sXó¤ÓO„+Ęř•‹uĆ5+G¸ŹźĚÁé`ę–÷ćĂ>œ›ÇFŹĂüĹjĘř•8—öÝź~œçćQ>ŢzPâ#ŸŃŽąx˜Ç=ę¡xوcfâ5Ś‚p. ĚÜN›6ÍŢcî1f…żúŐŻÂˎŁ›aoyo›Ąůe7˜Ôp][ŘâM.ęV'ˇŢxĂĹůyRZ”ˇ6ť*čПUÔřҢräĹfÖţpóMÓ7SĽďúÚüűô[žÝĄ˛N=ŁĆ#÷_v¸lˇÇĄR]ąRśťżä™ă÷ę7Pňróĺź;_53Ék'€lŚ=FKAž9?›ŰYhˆ+-4í6>tA^ŽĐfżšýŢ2EZĆí+ żÚëkżLyTa.Sřט˜gž€618nžĐĐ^¸_dł€ýU€C:üc$źžÇ.îŚÄ!ě݀ħűŢ4ď>ňáCÜ8ń¤1 [FÄCŕBÜbI­ĎëŁ>8o<ö1ł{IÔť]˜mŕĂ ¤á†€×dxU×]ޘ]@˙‘>xđ`kG|çw fчĽú***|…tż-3żźˆĂ,9^×bFű˜%F›03­MHĂ >ěwą”Ęž"ŻhŃo\LáđŞ&3˜1Ôv ^ĂđŐ! sŘÔáaŻza§7iŇ$›Ĺ-㆑ß7|œ [r,Ő¤ůŽY(ÝęeëÖďö/V<ňjo9ď>ňVRÍ'>ĐÄ8­ĂëűŐáć'đÔ¸xŘjŢDüD¸Fę_ŹsopÝÁ"`af¤oÚv?>8ßaZ…7IŃňEjĘč9 _ëđcU4˝­~2٢-Ţţy÷“ÁÉÄüă×÷h×ŘÝͤŽ™x‹†ďđýŢfeň5ÖËçžI-1ÖÎĆG„XýEY€Ż÷üđŽA4~Ţăi˝đŰÂKšÂ†톏úđFŔ­?Vł¸%…R\`f|_b>x+†ßźyăW̝-?Ϙ"ůć´Dž˙gŢpš{×Ŕ 7‘ƒ‡™ŮĺÝdâ“‘J3ŤŒzrĚß]]ľ­óv—N]{ʓ7!Ł÷?N:™YaÔżóžGKmMĽLzúÉmŹłőVimţž 0ĂlęCţB#şŃ/mgß 6’y3żçˇÇm.ŁíGsv‡ň˜zŞ–/”Ĺ?|îožY?cΗJžůUa=î"“^ľ|Ař¸ŻÇľí1ł÷%Ř GĚäb˜gښ+Ef+(.´Ú mÎf—ŐŻđpƒÄIŠ.vŃ6äƒC97Ÿ–GšćÝGú¨5#€FؗcŹÜ6a­h¤Ą˝x5‹ôQ<Œ`U¤Á.ł¸ąaýc|á­ÇuÇqOS7?Ř@ăŐ$fc`C­é~ýzńĹ­pÔúqăÁJ+đ5?„%ň) ×}őŁĹǓGŰ yáŁípnœĆkż°˛Ř×6hXËaß͏x|€‰WŢcǎľ5xýŤĺ´-ŻÇpů{Óźœđq§~‹źé` ߯~=ŇÜş#Ĺťůâ­O9xóăďçŹ÷ÜĂš„ăƒÎCěă|Ǜ!Řß+/äqĂZ?ňâ(§_˙¨Ź?dc›˙Ź?>&Ĺ%ĽrĹ!ĂĺŞĂFȕĆ_đƒˇö2f˙cdőňŲçᧄëď?pˆ\tNj2ĺ• rŃ>ëËĺ•ŰĎůľ¤hf˜ó€Öö@@ ÚÎÝ=IV,™kËÍúôm”Ń~Ą fĽľ_Ó'>'˙él+~QOÍę%rË鿒š5KÂÇ}ň泍}ösáăB {ů”ql…5Ä}řáůÖ2,-[Ť˝ě‰“Ľ˙ä`&/’3 Ą+cBÎőönPŘŻa×Ç_!öՇ öá#N7n„ÉÚ_1‚8ĚzbF_[cĆ׾•ŇŽŠ¤Ţ ya݇Ş×á ›ť…7O´}Ü(!Ěá ŕp!ąÄë°\fÁpńwžŹĆL ^ľuř!ˆô ˘v´ʑlŁľ ŻIŃ?ź*uÎaĚřâă×.ŃÍ-Źł÷~c­\ŞŇa›ŞśřՋ$œw¸!ľ'— ŽąÎ=œ[8߃ţ"ţž!ČÔV=Ó9§‚m<}N5§xŽąxű„‡qŹţáéşh×37Ÿ_8Śń\cýŽ)"Úű-D¤źAăŰĘ×!˜0ŞmuźÇř“Ů`ý>V¤řŠˆo<¸.ţĺ),.•nć—]§ůŤ*ÖHMU…tí˛ůŐx7/ÂŢřĺćăÒ˛ÎRRZÖę¸~ůľ>Ôłtá<éjÖŚvďűŢúÝüŢ~ĹŞß/?Ę@6ęfĐX[č:ó%aum,[U%ďLűYnŢ7×ę LN%ꌹ§YÂDž6›9Š`-Eü†¤nŘ×xřˆw}„Ý ÝŃ}„ý6¤ămˇőöşŹśÖÎÂ<NŸ]Ńě†52}D";kx™o­k0sşĆŒÚh‘˘óc;Ëó¤`ŃTóöě×vZąfٟő!˜)ŕƒˆŃŁGŰW:#ďžöČŚÁĹÇ^ŘRé`*‘ˆšD*۔-u“mjF’\SĂľv4śřv"ŐŽŁ1UžŠfŰľ[˝1ŠÔŁŃO„€ŐÎćřMF@cƒmÄę•"ľsż^öĄ:‘şŰS™ŹĐxĽ…đ‘VqŔ/Z 4¨C n*ODĚěgëH*šĹS7ŮĆC)xr Î,Ţd/Šřó‘iüŹĺ4ŞŻžĺ˙*ÎĚ!á/äĚn]]˝ü2ó'ůřľWdŮO_ۏpƒšxśGŽY- 1Ó  ŘJáă,9t˝ůEAÄë,t{4ś™H€H€H€2t6Ź­ÍŐtVV hľoĆL)Öa>ýôÓ횑+VŹ°Ë e‰Ç6   @{%…jńQ/ĚfĄ˝°„Žj°öÚŻXíÎjív‰Ţđd¤OGn:Ă$@$@$@$@Á¨PV?Xéö›ťĂh"`ő5ž>     ÄC őŻnÄSŠyH€H€H€H€H ƒ €î Ďn“    $F€:1n,E$@$@$@$ĐA P@wЁgˇI€H€H€H€#@7–"   č ( ;čŔłŰ$@$@$@$@‰ €NŒK‘    tPĐtŕŮm    ÄP@'ƍĽH€H€H€H€:( č:đě6    @b( ăĆR$@$@$@$@”txv›H€H€H€H 1Љqc)    J€şƒ<ťM$@$@$@$ŹĐMMM‰Qa)    „ dťËj“““đŔł    @b˛]ƒeľ€NlČYŠH€H€H€H€" €ŽĚ†)$@$@$@$@$Њt+$Œ     Č( #ła     ´"@Ý #H€H€H€H€H 2 čČl˜B$@$@$@$@­P@ˇB    ˆL€:2ڐ    @+Đ­0‚H€H€H€H€" €ŽĚ†)$@$@$@$@$Њt+$Œ     Čň#'1…˛“@SS“466ĘA×ý"R_'R+’#M’“Ó$ ŚĎšćš2ŻIň ¤ŠPLŠHىĘÍϓÜĆiŞ7ůMd=Ę5š–O:żëŽ\>ůrrĚč˜1‹ä˜N>bbűőőőR`& čH › P@góč˛ožp‘ŻŽŽ– u•ŚF3ólîMĐ9 MF8ąbvŒRÉyÍjÚxyćaćŽÍM"TmŁ™ŽĆÄ(Ë'Ÿ_y9ožž'/#I C ŕ!⚢˘Bjkk%??Ÿ3Đ:VlVrP@'‡#kiGtşS‰1ŃhÄvFÚôĂXjHŽ™}n07„źÜ33z™gÄtSSŁÔŤF“ÖԄ?Ÿ fy3#ŸD~yyfčH€Ú LL`×WĚ@G{kĐn:ņ’@ĐQŕ¤* —ŻżţZf̘!?ţřŁŹYłĆžúÂH^|đDŻNăt~6ŚkŸŕçŃZW °Ż[ýőeÓM7•áÇŰŮ —C08644Ň˙a˘šlގĆ906łÓ†˝iCÚa`ŠŮ´đąX>eüŒ hWpóťWíď“k‰Ľúž¸öH !Ő:ÄA`Ćʋö|őŐWňĘ+ŻH§NděŘąrÜqÇIYY™šŻŐč| Ŕ^xŕ˜4i’źúꍲß~űY1­߂1"+ëŒ-´1áŔ F,c6Rš&őć#Bg“^eęÉ3v˜6™đżÔ›ąÄ÷ƒđY>ůü`bCG$Đţ@řśĹń>›^Şî‰ą,GŚi°`­;Ťt[ÄUltÁr`Ćóő×_—Ď?˙\Î?˙|’čëţ…kĽŢL?×Á–Ůg̜ŕĂÁF#ŚsŒAąĚů°6˙ç™/sÍf,8ěŹt­ذŸŽ7Ë'›Ÿy0iăM¸cý…°ˇ$°î ŕ~ ÁäžI Ú*Ţ'ă#–Ş{b|G?W&i°ř[ÎŹĐńcHmN\PŢx㠙9sŚ\~ůĺŇłgOkB`Ž7Ö, ľGςÚíŹ/ć}ÁŤÉ.“tÉ%—ČÝwßmmîöŢ{oëíé‚Ő9R•4óĚ ´Ó&œk343&› Œˆ.,„´6˙™ÁÂ>–š Ů?‘×`fŤMË'Ÿ>@˘#h`mMä6÷ÉŔRtO Đf5x—JńiÁÓŘ<vŘaÖtŠlľŃVŹ:›áÖfşuî\.Gq„<˙üóŇżŮlłÍĎčW6äK5L7rí,r˝1‹Î3 >cß°™†š6qĆŹŁŢämČ3fĄÍ fÔ5,Ÿt~y†?WŔrĎ|†I ó ŕڌë6fGƒ h”ĺ}2ú§ăž˝Lő €öIň~UU•ľŰÝyçíĚ3Ä368üAxšŽXwĹ—Ë<`ËTVVZ‡vëŽťNz÷îí-–UűĄ …ľ”°ýÂĹŐuĄFűaá¨QŁäý÷ߗ6ÚHJKKÝl1Ă%ĹĹć‡QĚxÔűf<ћIÁŠF0çó |LhŚŁsz.2ć9ö#CłĆŠiOÔľYď.ĺ“Î/,ůmłŁŒ9řĚ@$T¸.cö[P—č}r㍇ʍ7Ţh'§‚ł=ĺO×=ą=1ɄśR@§ppAÁĚ3L6h„ő1ń„Ž??í6gĎ=÷”§žzĘF-Z´H.žřbŮi§dÚ´iR^^îfm×á˝öÚKN:é$;ٌލ`öčćĐě3>ŮĂ,°ů°ü `W2ůć›odË-ˇ tńîÔŠD ÍtrM~ŁŕÎc Á\`sž9N>l6̇……f];3)jâÍŹ´ůđ°ŃçÚBč)4f,Ÿd~vaáڏC7–Q8OÔ1=d{Ş<ź>ů^S˝çö“u~`Ö÷6lA\[ď“č[´ţiKŚä]W÷ÄLé{iGđGĹöŇł hgMMĚš5ˊçb3Ű ‡8]hžÁ|(…‹NË­Ţ~@…8\X ąuďÖM~˙űß˂ äÁ´q¨çÜsϾ˝młÍ6ňńLJóϞ=[=ôPkŢ0hĐ š˙ołix <óĚ3˛ďžűÚ@P÷wß}'ëýúő“#í>ƒtď=ńoÍ÷Ä;ďźÓ~›tŐUWÉcížřsOÄd–÷žˆű¤ŢýęYᚡzŽË{bqc^Ú@§ô€„ČíÓ§]ˇtĹˆ¸Đä4°UU IDAT˙P‡ýíhÓó,m˙ľҘTVU"ŇLˆtëŢMFŒ!_|ń…ęɧdö÷łeňäÉÖřú믗 M°Ç8ꨣě,ő ˙|Aúôî#UŐUś ֝žöÚkĺękŽśâő_pÁ˛×Ţ{Ƀ=(gu–<÷üs2~üxYšjĽ`f÷Ś›n’Űţňgyö™gĺŒ3ΐ-ˇÚRxđšűŽťĄżüĺ/˛|Ĺr;CţěsĎÚžtŕArŘá!›ď•+Cő\vŮerŕWČôiÓĺřƒěąçrŇÉ'Éż˙ýo9ćŘcʍݭŤľżb…[>fů8ĚD7bů ăŰŮó`4đÄÇf˝ző˛ŕ]RR÷˜–!\hf‘jÍ̲ŠŢ|hU°•fĽČřůć§źq;Ŕd4>.Dj‹L~ca€&™Qdů¤óÊ'|śűDfFČř›ĹT@ˇĺ>‰űAMm˝ˇEťĎŕžŰâžhîÉ8.î .”'žxÂŚ˙륗lÜúÜ/+œ{⟽÷Dcr‰Űí=ńöżŘiQϙgÉłž{kŚÝ3ŕ4jWM  G ‡ ćř.]şXąç>Ą‡ÄĄcĆqf\HŽ5‹Gł— ĂŰć4¤4Čδ"łÁťÝMV­Z%Űoż˝]Ú ć _ÎřŇŽ7ýÜsĎɈá#PŹ…ƒHˇß8‡ő•1s}Í5×ČĘ+eŰmś•)L‘#8ŇíÄEĄ›™_´ë"yöŮgĺŢ{îľöĆXRîŃGľÍIoO’Í7ßÜĚŕ†ě‡ "OýXöŘc°“>LYúöékíÖĚW{ĺćcŔóĹX—ň.VčŁQx¨€ ˝– üT4~FO&Ýçœfűh0ĆşÚŕÄáĽ@ŽąÄ0ß ÚŻiMĐŘD›°Ë8f‘ńóm~ŞŰ h“-Č1â9Ďüĺ@@Cxł|růÁ\&čM8ȸ3/ @jč}-HímšOâ8¸Ú­ůĄŰď>ƒß_ŔćwOD›ń]W_}ľmś˝'š{×5WˇážhÚÔŞžm[Ţ[q0żśŽË{˘Ŕâ&@7Ş`!ţ0‹ [eD=̘şOéŃD‚^ˆ_ž˘§L™"Ç{Ź­ç˝÷Ţłöż/žř˘Í‚é`â1ţ|+@`~á–×zúöíއxF;/şč"M–ÁƒŰt´mîŃŁ‡MC0Ă ą ‡4äÁ1ĐźBƒ8Wˇxńâp=(;Ȉ8˜]ŔiYoŘ&6§k8ä‡fŁÁ,P|Ń&ôi*ůß|S˘Ůhs+ sŒ†06“ÎöƒA Çža ĚŚ˘Ů,Úa~`Ĺg“Ďx,ݜ’ČXéH€˛›@[Ł÷ř‘î3Ńî‰(‡ˇÄzŻLÖ=1V=‘ÚŞíĐ~šgâZşäŢ[ÖÍ˝X( cjCş =ŘBᏛ+:Quë?ˆĐ5ůŐÁtöÉťíś[X؞xâ‰rňÉ'kë/[śĚ I˜_Ŕ6ÚuúGŠőâGĎÇ{LÖ[o=7Ť="4ŻţaűíŁx˜cxć÷ó‡6aÓtˇź+ˆÖ ů!˘Ń&´iA\˝™°ĆŻ ˘XC]H 皿˜r`Ö?ŚS |6´Çm“Ëý@Âş!Ž­÷D÷8 Ç&@›QÂ9đ‡ ť,,C‡Y\ě놓aď†4ݐĚîb–xܸqöC<äĂşŇ&L°śĂřöÖxŞĹjł÷ÜsÜvŰmքdéŇĽö)ĺ´ k^˜iŔŒ3Ěh3ĚNžśGۍxC:Úrď˝÷Ú%űvß}wŰŻŐŤWŰxˇ­O}¤Ąíř‘͇z]Fęôb ĘŔ– Z^óFňQ?.R#˝iűŠŸQ_ąbE¤ě­âCóç­˘ăŽ`ůبŚĆÎÂ$@DĘăí"îuÝťwťe¸n'ă>Š×?_ďsî=qɒ%öGšô~ƒrkŢťîşK~÷ťßEź'˘ƒČMéîűŐsKź•Öü^÷%Äឈű5őş.Ů÷Dˇn†ă'@?Ť@9qÂăbqç}˛Ć…ţĄEŞé˙ůĎě*řŁ‚MńÁ,çw^řIůŇK/ľ&˜eŢpĂ ­-4~.vƏ<ňˆ]eŤeŕÂvúé§ >X€ĂńQ'|ˆpĚbăE\üPlĹôWóúíŁHßjŤ­̈ăâ‰/Ťńk'™ĺéüĘéąQöř㏷í›8q˘źóÎ;ś]î?8†^0T@+?Ěxŕ)ŕřXy`öQVVfëE8žrąęe:  tT˜źÁ˝Âń\S‘§-÷I°ÖűY´ű &I"ÝQNë@}hO2Ü[ľzO|űíˇÓrODżé‚0ßb­Ýó7'ˇŞ?qŢ S–ŘŻaׇjĂžúđ؇8Ý4~¸™9}ŔÄ'ä0Ť‰ĽŮT&TI a?ňŃľkWű‘Ä)ÄÚ´kńśá Ś(D:>XŔj^‡/Œ!hqÜXOä•AV˛đ։ó vŘŽM™7ß>2đtFќ hĚ@C8cćłóX'?Vƒ c9”ĹkF÷á&čˆąŽÁt čH ţ œ!@ąĹ;1‘Žű¤ŽEşď‰8n"÷ÖtŢ•M2}Ln͛7O†špľFœb m6źr†­&>[Ň űńŽ°ťAěę>Â~›‰n^­ Ů7š#˘Hć 4pĽČAˆbćřľ×^ł&jŸíŠzŇQĆ)j !# GŘ~Ĺëđqa2^?u¸đĆ#ÜÁHÍ7p _<¤ě˝÷Ţq•GđĆĹ|Ô§ŇčH€H€# 3¨đăuéşOj{ÖĹ=1‘{k:ď‰Ę†~0ĐÁxĘ ‘ŒŸÝŢ`ƒ ä•W^ą?R‚×[ˆÇG‹L gqfˆgÝ0ƒü’Yˇ&+ŕě>”DCźńćVÓH€H€'€ë0óÓű!üD˝c—Œ˙1ącsJ¨÷j˜Ţzë­­4~ŠŻşşÚ΀R<'„Ô>t€lʟ0‹ßĂ_p֙üÄjf)  tŕ}˛mÄq?ä=ąm -M(š8ËéÓ5~ÂâůşëŽ“éÓ§[A'ĆDÍ6â<|ÖdSÓ ŘU}öŮgöëh|8ްˇćlrÖ 5;B$ĐÁđ>|ŔyO Î,Ů%˛Ú„#SÄ)ž†ět§N*÷ßżýRy[óËDŁF˛iřč‚Οf™ç̙cmą8=DFŽi}kWƒ/  @ű%Ŕűdüc×^˘Áâ',gV čLyĽv@ 0Ŕš 6Ě.莙ÔI“&ŮŮčl?т–-sƒ>úĂj&Xbo“M6ą,ąV5lÉéH€H€Ú7Ţ'ăżörOD;łŮQ}¤qt!ö°¤~vžáV°„|˜&PDˇ üâő^iiŠ}ř€ łŮţÇٚcH€H ť đ>}|yOŒÎ'ŠĐé¤mŽ…“_×ÉČ*„3ĹsôAĐ „4EstVL% öN€÷Éč#Č{bt>éJĽ€NiŸăŕOŰ4CđĂ(  O€÷É d,ŽÂ‘ąCƑ    d" čLś‰H€H€H€H c P@gěаa$@$@$@$@™H€:G…m"   ČXĐ;4l    @& €ÎÄQa›H€H€H€H€2–tĆ F$@$@$@$‰( 3qTŘ&    Œ%@ąCƑ    d" čLś‰H€H€H€H c P@gěаa$@$@$@$@™H€:G…m"   ČXĐ;4l    @&ČjÝÔԔ‰ĚŮ&   ČjŮŽÁ˛Z@çäädőÉÉΑ   @&Čv –Ő:O(ś‰H€H€H€H } €nßăÇ֓    ¤™tšóp$@$@$@$@í›tű?śžH€H€H€H Í( Ó œ‡#   hß( Ű÷řąő$@$@$@$@i&@fŕ<    @ű&@ݞǏ­'   H3 č4çáH€H€H€H€Ú7 čö=~l=    @š P@§8G$@$@$@$Đž P@ˇďńcëI€H€H€H€ŇL€:ÍŔy8    öM ż}7ż}śžžž^žţúk™1c†üř㏲fÍill´›ö¨ŠŠÉsrr4J4.aL÷çŁ\ŕçäĺHA^tîÜYÖ_}ŮtÓMeřđᒟŸžÓŸă˝öŒŐqAL&ŒÍږ1D$@$@ńH‚ˆż=YřŤŻž’W^yE:uę$cǎ•ăŽ;NĘĘʤ°°0ŤűžŽ;WWWgTđĐ2iŇ$yőŐWeżýöłbÚuÉl'Ç;>šëblâks‘  €? h.Imhh×_]>˙üs9˙üóeđŕÁ-f“~@V؂@^^žÉŽťî*ťě˛‹üüóĎrë­ˇĘO?ý$ű쳏 =™Žă?ÍtMü-cN  đ'ŐÚĎäÁCjcažńĆoČ̙3ĺňË/—ž={ Ź3š-5RŰÖn@ă˙Y ΋ž}űĘ%—\"wß}ˇäććĘŢ{ďmýd âx¤˜Ćą Ř2f' H@Śh°›łXV čT˝šIŐɀf°y>ě°ĂŹéVśŸX‚uÄř{9c_ˇÎËĺˆ#ސçŸ^ú÷ď/›mśY›ß  nŽwě!_cťUĚA$@$,™ Á’Őżz¸ ‡•$ĆUUUY›ŰwŢŮÎ<ëǂ˜Ö°ë744šŮéFů裏¤¸¸X6Úh#[në­ˇś& (—ŹíwżűľÁNV}ąęšôŇKĽ[ˇn˛ÁŘŕqăĆɂ ’Ö÷ř`Z_ż–ąŚ!"7ä7Ú G%ďż˙ž`ŹÚęÚ:Ţ˙ú׿Zđ€ü_˙ú×qڗdůé8×ÜśŽŤąiëز<   ( h%‘B3Ď0Ů8p =Bmm­CHóۚš đÖÎP٘’ăƒ-8*cmöCÂŻá yŔ€ŇŤW/ůć›olţDOÔݖńF[.¸ŕYľjU˜ Ú˘mOԇ7\pîEŞÇIĺšćw]Œ úGG$@$@É"@,’>őÔÔÔČŹYłŹxĆl2â***ʘi0ËŮš3sĄp˝™9 mČ‘‡Źśßn;+p°äݝwŢimŠŻşę*kz€<•ŚÎsĎ=×.ÓśÍ6ŰČÇl˞tŇIňôÓOK˝Éƒ|óçĎ̸˘ =ôÜxă6é/žř˘ lż~ýdß}÷•ożýÖŚĄÜnťíŽűHÇjcC[°4f—˙ůφă5őŁOˆëŇĽ‹]cúôév˙†ëݎí2dˆœqĆ––}üńÇe„Š{ذarÓM7É[l!K—.ľĺĐż~+ĂÖ|¤śŚVVŻ^mÇB?`Ăňvß˙˝÷D\[ÇoĐ˙kŽš&<^Vđn`ŠŻx Ů~űíeʔ)6ň{ěąňď˙ŰîĂLâyŰmˇľ°"]Ď6çÂౝsŽ˝öÚk˛˙ţűŰqĹƒ/žřÂćCyîÝwßÝ>€œ|ňÉ2~üxyć™gÂé8ď°d >˜˝ăŽ;lźă“ÎąIdD͐ ‡H}C˝ žšóćÚňÓ˙÷™œxâ‰röŮg[säÄxÓĆŐ6"mŊśԃYńĺ+–Ű}˜<÷ÜsňÖġäÉďȖ[n·źhŽŻ˘ q_ĚřB ÎvŘa›ŢßĚ˙őo•7ßzS^~ĺeyďý÷lżüň‹ȗ^v™­ťŚśĆÎ`W€™Šç1ôŰ´ÍŰopKĺ‰}ô —F#J1ă‹1ÁzИF<śD][ÇťŃ̘_ĂővźŢmî?Ć ăî+ĆxrË1îŮŤ§|đÁrĘ)§Č’ĽK,“9żĚ‘]ĆěbËýéć?Ů.=ý§ĺ˘‹/ ‡ðŚśdąüÝ9×đ%PŚ~ĹŚ<Ćűs^]|ńĹňŕCĘ3Ď>#7ß|ł,ZźČśg]ŒM˘cĘr$@$@$ŕG€ڏJ’â0ë‡ďŔl+„ĈúŰ-C`–ăŔďŔ3˘.ÇÄĺÚx‘#ĆaE0f\o˙Ëí6y0łwőUWËĆolëÁ*ťÝMV­\eg#!j››ä€°3“Ë–.łe!tÇ>>\9š-˙üsĎŰd|č““‹.źHfϚ-Ó>fÓCí2yśŮ˛f}BűŢď}éŃ˝‡-ŻůŹžš|¨3ă{ýj/łË9蠃Źh‡C=T,˝zö’á› —_̰e&Nœ(#FŒ°éeĽeň›˙ű­ßöŰ̎{ű6ĺĺá˜ČŚĄś‡űaÓCcqÂÚÜłD][Ç<‡m<Ě áK/šÔˆüF´Üţ‡ţ†Çؘx`ĆYÇigžyŚŹˇŢzrńEۡ ˇÜ|‹äĺšţ™4Œ \ŸŢ}¤k—ŽáóN‡łçÚŚ#íXęšśÓN;Ɏ;î(Ľ%Ľ˛Ăö;ŘhŒWŚ ůđĂĺ .”n]ťÉčGŰ7śN“>éíI˛ůć›Űr……vfýăŠŰöŹ‹ąąä?$@$@$$Y˝ G’%T l>1ăZ^^.áhÎ*ä"UŽt¸ÓO?]n¸á†81Âi˜ŐF]ęŢ{ď=;+ 3 8˜ŕ=˜&@áÇ[FmăƎŰR›zć͛g…şÖŮťwo{ ÄkœśőŁ şĄ„!â ěnżývk‚|ŽC؂_ff“Ń>˜Š¨ĂÇsh#f/a‹ łÔ?uęÔíňś%ZżQˇrÔăŘĹě°lZ󇄚Ž1‚€Ć˜!Măז‹JÖxŁ]t‘5ƒÁǃh‡rŽÖWäÁ‰x 5߀9:í‹ÖŁńękşßš3˜ú̝;מ#xD=0˝)))ąŚZ|m/Ú łÎ:+œŒ7)(ŤNŤűŠ›ľő3D$@$@É!@Žžľ¨HƒÝ§ŠĚžŠČ@ĄÖ""TňÁáG>źy°Mó _=ěl.lQ˝îCąŚԘaÖ_=të`†}ŤÖ áE‹Y­qčÂč„.ú¤i8.ÄDŘu×]g?ôśÇĂ,)ěŠ]‡—9çœsäÝwßľ3•hŻöKËáĄ@ƒvÁa[´~ë1\AŒ°n8LjĐg8¤%ęPVMtoí3fĂ˙řÇ?ĘŠ§žjß4ŔĚ%V_q\؇ălŸąĆ5XĂ);ećퟦűkÇź`ťíśŰäŃGľKţ!?Ćc78wp|ěë9ˇxHB[˘90Cżát\4.™c­ L#   ÖN-Éü1 @LŹ\šŇŠMˆWT! Ó%nşŠ 7NĂŢ4Ä~řáÖvVgŒŤŤŤ­(D„-f ń1ěŁýęÁĎZ#Ďwß}g >ƒ8ĹeČ?hĐ ű3ä°_…í+쥾O8&ö1+ŽU6đ1C}ôůľŒĆÇPďÚľŤý 3ž°{Vžçž{ʧŸ~jgľ_xá;{ đĘ °ńööéş)gKă´źśöË˗/ˇíŽ9°2 Žd7fŕnjcűŽmtűŠöťcŒŮjďGyĎf~•5.~…?äŁušýG>8MƒtYŒ ěč!Ža~Ł"â"Bż°yÚi§Y1­ő˘­01Á‡Ś¨ǀýšÖ|ŘŇ56†ŒŃ$@$@$ 脰Ĺ.ÁŃa杁Vń bž†U€`Λ×M×4ř2XŤh`• ˜Rŕ•9Ň „1덢G˹DžXĂG_XUaŤ­ś˛Ť&ŕc2ľß†@ŠHƒI~xDëŔĹqąÖő“O>iëŃ4őq,0ÁŚqęC$Ă´fřˆ3Đř…@̈:Ô.ľ‡ąĄŸp0ˇ@yŹ-í×oí›újz<Ż6a3ěu(“ěńžĺ–[ěZŕĘĚí+l“uŒńĐsß}÷Yfč~˘|Μ9rĎ=÷Ř>ÌHß`fyŔE9 §űšŽ7ř€đ˜cŽąć?{,=x×]wŮň÷ßż}XÂąaÎ󫬬ĚփźČ‡Są†9D8€´nřŠ› cÉü$@$@$‹@f™"9săV%áç#ÎťáNŒ ńv}Ř%`_}˜`>âtÓřáćń&>!‡7ŘŮ⌽.fëđ˜]ĹG˛°ľE{€v-Ţäľ‚3}XU"ą×ňřŠkŻĂŹ0Ϛ€¸é8–,Y’đqQײeˤ{÷îśZ´źźö¸°ą†¸v]~Ł­Ř`"ጙgŘëbś˜ÉMÄĽkźƒôŐíŢ`9E]RŃM‹ĆşÔĽĽĽvěŃG<(xĎ<Źa >Ř>ăF8ĂtČkłŻé^?Ucă=÷I€H€RG˔âÍ0&ÁuFœbĘ~mśFłÁβÁٰŻńđ‘ćúťÄŽî#췙höÍ=)˘H†PĽK|dQ™S؃ŞM'´+ęUHG§¸[ń—¨ÄA ńĂ"~3™ŃœÚÜFË- Śę ¸ŕ Ş1ťšË.ťŘuŘCăÇ_ĐN×é78c,Ôaő <čŔüc–¨K×xéŤŰŘ%'âôĄeńƒ,ę`ďŽsc…ŸCÇŞ*xáuř5^—Şą‰÷řĚG$@$@ńhŠBâ)ÁĆcĽo9VGoźškËë9?ĆŠżc1ŽH€H€%űcşĐYI|¤‡U°Ä›ţ|5fْaś‘ÂćgUŐjŰŹĎ>űĚŽ]160ChË쳂âx+‰`~:Ć&X‹˜›H€H€"ŕ td6IKÁW0」-~ŤŕCŽmˇÝÖŽ˜4|˜E—:˜eĆʰuĆrlx˜ÁĘXÉśŰޏâÚŇŽw0zé›`-cn  đ'@íĎ%ŠąxľŒó`&^Řôbëäbĺ ÎD'yŤĘ0X+˘l¸á†˛É&›ŘńŔ2}Ţ[Áń,cŹeĚM$@$@ţ˛Z@gš(…PÊXĂ­aY8, f™Ö^˙SŚýĹB Á´Kąá>6Ě#-UŽă›ěş›Ř-c  śČvM“Ő:•â(ѓ mÂl46̆B8S<'J3ţr*Ô ¤Óy^pźcŃş›Ř-c  D ¤ó^›hŰR.Ťt[Ŕ¤Ł,N.ĚR&ۄ mç1‚ŕxgĆ$@$@$‰¸ G&Ž ŰD$@$@$@$ą( 3vhŘ0    L$@‰ŁÂ6‘    d, čŒ6ŒH€H€H€H  P@g⨰M$@$@$@$@K€:c‡† #   ČDЙ8*l    @Ć €ÎŘĄaĂH€H€H€H€2‘t&Ž ŰD$@$@$@$ą( 3vhŘ0    L$@‰ŁÂ6‘    d, čŒ6ŒH€H€H€H  P@g⨰M$@$@$@$@K€:c‡† #   ČDЙ8*l    @ĆČjÝÔԔąŕŮ0   ČVŮŽÁňłuŕĐŻœœœ¤uݏ¸8iuą"   ČDŐgĚá IDATŐŐIiV25XR”äJ˛z:ÉŹX     4O    @€:,f%     hž$@$@$@$@$€tXĚJ$@$@$@$@Đ<H€H€H€H€H  谘•H€H€H€H€( y    @Đ`1+     P@ó     ( ŔjoY—,YŇޚĚö’   @Ć €NÁmžůć˛ńĆː!CdÓM7•n¸!GńŻrţüůr 'Čȑ#ĺœsÎńĎÄX    „ P@'Œ.zÁ›ožYfϞ-÷Ţ{ŻüůĎ–ożý6z$ĽvęÔIŽşę*9őÔS%'''Iľ˛    %@­$RŕCŔnˇÝvR\\,3f̐‰'Ęa‡fg§=ôPůć›oÂG5k–ěłĎ>˛á†ʙgž)ÇsŒźřâ‹áô^xAśŢzkŮd“MŹ('x;wśuP<{Ŕp—H€H€H€’D€:I ýŞill”GyDŕCH—””ČĹ_,ŸţštďŢ]üńpąK.šD† &ÓŚM“Ł>Z>řŕYšrĽM_ž|š ýąÇł˘úÖ[o•ŐŤW‡Ë2@$@$@$@$>ůé;TÇ:ŇwÜ!W\q…TUU ´›RŘqÇĂ3ĚŤV­˛‚ůÎ;ď”.]şČčŃŁíLłÎ"żů曲ĺ–[ڙl”ßhŁäŁ>’=÷ÜSŤŁO$@$@$@$&Y- ›ššŇ„ąőaÌ#ăƍłBfp0ŮxŕdîÜšvëÚľŤ˙ä“OěěôúëŻo÷˝˙Lžú¨<÷Üs6+fŔ$cѢEŇťwokňYiu0÷€môË/żŹQôI€H€H€H c ŹK –(´NesŒ††+GŒam›§Nśc†hŢlłÍŹ}ôţó9ĺ”SdéŇĽáU49äk˛áđTç lÉH€H€H€H€ŇB€:-˜EňňňäěłĎ–c=ÖÚ8c­č~řA`÷ wß}÷Iuuľő>ř`éŰˇŻ”––Ú´-śŘBnżýv9ńÄíJŰĎ?˙źMóţSˆt|hřöŰoŰ0>>¤#   Hœh6*fú]öóçÝ Čą!^ĂŽŸ×Ż>LHqşiüp3ű€‰OČ͜9SúőëgĹkB8…°]2fŽ!Œóóóí tQQ‘ś¨ż 8|řpťěIJ:ŒŐ… ­™Gn.°Ń‘   @ň`2Ż­oÝç͛'C‡M¸Ş=zœb mśFłŐ›­ÁٰŻńđ‘ćúť>ŠÓ}„ý6măĂžŃ]?ŚËjhČ4W^^n’~\ˆˆóÎ;ϚlŔœă_˙ú—ýŃĎȃçĚLӑ    Ź;ĐëŽ}‹#Ÿ{îšňĺ—_ fŸošĺÁ*t$@$@$@$@™G€:CĆŤl`Ł#   Čl4¤ÍěńaëH€H€H€H€2Œt† ›C$@$@$@$Ů( 3{|Ř:     #@aÂ㐠   d6 čĚśŽH€H€H€H ĂP@g؀°9$@$@$@$@™M€:łÇ‡­#   Č0Đ6 l    @fŕŠÄ9>Éřmř8Ĺl$@$@$@$@L€3Đ<8l    @ćČjÝÔԔyÄŮ"   ČrŮŽÁ˛Z@çäädůéÉî‘   @ćČv Fč8Ďš~ýúř“ŮH€H€H€H`ݘ8q˘ÔŐŐI׎]ßpŐ×× mQQ‘H~~žő5œ——' RSS#Ýşu[w oGGŚ€nGƒĹŚ’   @,ĘřëßżżäććZ1]YYiĹ4ö!œÝ qRUUeóĆŞŸé"Đ< H€H€H€H ‹@@Cťbš´´TÖŹY#ҘFňé†h„1sM›tlFĚA$@$@$@톀 dľC†ú š]óÂÂBťt¤ÁԃËöĆ7ĚĐńqb.   h—`žQQQa7Ě2c_7tH…vťěÜ:j4ô:ĎÒ   @*`śY—‘Ť­­•%K–XńŒcaÖq°.++łâaş`( ƒńbn   Čh0ǀêżüň‹|ů嗲páBYšrĽľƒĆjÝťw—ÁƒË[l!˝{÷śŚ*ş3şsŇ8 č 6ƒH€H€H€’Aćř(đ믿–‰“gȇ3óä§Ę˛Ş¨—ä—ĺH÷Ş%Ňců\éýÝňÝwßÉŘącečĐĄ4ĺŸ:,f%   L'€™d˜mźňć÷ňÌn2WúK^—|)-/”ŽĺůŇš¸ťäo"˖|+˙›3]ęţű_ŰĽ 6Ř Óť–1íŁ€Î˜Ą`CH€H€H€H 9>űbŽLüŞłĚmč#ů= Ľ´kĄt//ŽňĽźŘŘ?š9şm)Uóňĺűů“eúôéÖŹËÝŃĹ&Ő?ĺťűë&Öaœ3gNă/]şTfΜ1=RB˘ĺ"ŐÇřČ‚Ž!ěĐ>řŕƒČH zěU§-+ĎŐ´ĄćH€: Üs>ůŽ@~¨č&š]ň¤´Kt)ƒx.‹ĽG—#–;Kďĺ˛ÁˆíĽąËk+=oŢźH+ą.S@'Ć­UŠqăĆٟżÜgŸ}düřńv1rçvŘa2zôhť?aÂyňÉ'ĽOŸ>ňŘcľŞC#Žšćů˙öÎNŽŞě˙Ďś„„HDŠDJ ‘Ş( Dş Ą°đ‚đŠ@@„WEńO‘W:/˝I•ŢA)ĄJ“ZŮÝě˙|ĎćÎŢĚě͝ÍÎĚţÎ'wO?÷œďĚfóĚsϙ2eŠgˎ+éwÚi§EŸ'ś°émN˝Mâ„N(ŒqőŐWĎÓô˙ýż˙×Ě=ŚM›6O}˝ä} ďžűn[}őŐmŤ­śę÷RóŢťß7 *yŻŚSÁżŻ’ŔךĎ>űŹ]qĹöüŁ0DĽăPBD@jˆťl<ţďpÚŕ¨aśÁšăě_XŘVXr¤ ;pŒX`¸1ŇFaŁĂQßcg‹,ý9{ď˝÷ěíˇßŽĄUÔöT$ ŤôúprĎ<`×\sţůq›œň/źđBťíśŰě7żůMܜ|Çw´ž|ŒŽ8âťä’KrĎŹ’~ťďžť-ľÔRń^•>}űŁý(n‡Ă ĹĆŘc=lă7îó|bžéŚ›bťţţ¨ćXŮšä} ×\sMŰu×]łĂ”Oג÷Ţeßd>7Źä˝ęSä÷Œ§Ç_yĺ/*;ć÷ôţűďˇo~ó›q':ögź˛oʆ" "0 đዯˇŮ—??ÖÖ]i”M âyŐĽFŘđpa[Řzam6bäś`đÖľ Ůře&ĆmîŢ ĺ€.SŸ­öŰoż¸LІ{îš§Mš4)Vłßbo›–/şč˘ńiŘěXĹÄiÚŚŇ~œJDčmNé}˛iúą1;ĄÔ}ÝałóÎ;Ű­ˇŢš>wžšc•şyŢא}7Ką)uʋ­%ď˝}üžŢ?Ţn~ĕžW™@ż˙ýďcxx饗<ŮkĚëŔvMđŐV[-ś-6^݃¨RD@ę€Ŕ‡­6qé‘6bX‹ľ67b?‰°5üŮ˙%Úđ ˘?&nyWK'jąt•^ĄM6٤בج|uÖ)´á+cžĆ^zéĽmĺ•WŽ_+S‰Uí׿ţľ}éK_*´=ďźóěüc,_{íľ ĺi˘Ň~é<@°ŃFEąÓN;Ĺ˝"˝žŻvžűÝďF—ÜR~üăÇ_6ŻĎĆĚgłÍ6‹ŽX_9ЎpüńÇŰe—]-ďťě˛KlϞ•|0Yo˝ő˘ŘšëŽťâXżöľŻĹ$7ß|s´(˛ĺ™gž닍ŐŰ˝˙ď˙ţĎƏoßúÖˇlÌvĆgÄüWżúU{ꊧb×ßţöˇśîşëö8â4Ďk˜˝ŠľeەZKž{—óţážřV˙ŕ?°ý÷ß?şń͇~§Ä7;찃ýä'?1\r–[n9[iĽ• ď[•ťŚţžWÎ˙ó?˙żĺáž|ËĂźĘ ¸ńˆď“šŻÜqÔND@j•@÷˙oslԈ ž›‚q+L´%Řƚƒnn겖 ţŘ*šóSZĂEWü˙ĹZ]W-ÍKz^ .¸ C,ăŤ–ŁŽ:*΄O†řhşpă\úcŽ9ĆöÚk/űď˙ţo[k­ľâ›<;íJűĽăđđŔE]d[ląEôŐŢmˇÝb5ŸHů€€PA¤žzęŠö‡?üÁśÝvŰ´{!ííŻşęŞčş‚ƸˇpŔŘâ‹/Çä ,°€q˙Ă?<şuŹąĆq^\,‡°ř׿ţíkŻ˝fˆt„7!;^z ř&óAŤäÂÁŒąřPóŠO}Ę>ó™ĎÄŽˆE\Q˜—‡r_Coď1ŻwŠľyK­ĽÜ{—űţá~|ŕÁÝäŘc5Ćç5ߟđŮĎ~6>Ą}ĺ•WĆE7Ţxc,?účŁcœgMýyŻţď˙ţŻ}á _°Ÿ˙üçĆÚxo}űŰߎ‡ŕNx÷Ýwíŕƒś“N:ÉřŕÇB>œyŔ͊`„t<ŻÇđ—żüĽýőŻľ#<Ň.żürŻR," őCŔ ßw…Y#˘ƒŁĽ5劂&DtĎ-ADó-Š,ĐRY?Z@×ň‡ůÎ˙ńl`?ţx|Á°„Nž<šđ&F0>ôĐC†%đ^ąuUÚ/:÷ ‰+1Í F_|ąÝyçQD!FǎżFGXsš`Ž?ü°7ÎŚNjŸűÜçâłŘÜ)÷ŕnř‘Ó–ń<ˆë×_Ýnšĺ–ŘvŰoż˝ýěg?‹?b-Í+[^, ˝öÚk N°P˛>Dáú믟çCšŻaö~}­-۞|v-ĺŢťÜ÷ŒńŐÇĘLŔM˙xśăľçÁWŹÎź7š7nn¸Ą=ńÄą}ž5ő罺ĺ–[Ú?˙ůĎř~BˆóA ń~ňÉ'ţáXˇyíř¸÷Ţ{Çœ|Kń•Ż|%Îó?˙ůO|xĐt: řŕʇEŢ[| ƒEćÜsύ}őCD@ę‰@WgPĐáďhgř,Šg˛a]sşÂ˙mÁâĚbđ_h üŠŚşŻż÷Ýw­ßŸ - ł˘Ł–^ŚtnRž>÷@×#BąňĐÓ>űěc&L(ř{{+íçý=^6ěBŕ͏°w׉…Zțؘ1cbq• ~˘×ƒŻÇc/ĎĆ^ϸ|ľŽĎ*î/ׅŢÝo•~Xć9A‰2÷ÁNÇóąŇ˛Riʘt˙@đČ#D7’n¸!ZšRYKv:~oŻaöžĺŹ-Ű'˝uižˇ{—űţšçž{˘Ű ÂŮĂżřŘľ‡Ŕ=Óűň~˜5kVŹËťŚtŹrçȍ°|§îP|°Ya…â7ÔóAQěsć™g˘Ĺš†>$­¸âŠńŰňéx|XB4ç;ß)|ó€›–h¨7­‹°–đ˙vĐËQ8ˇ#œĂ"Óń2ëâš %ˆ˛ŽrH˙^Tyčš.îj_M/ąÄĆvqě€=ztŸÓŽ´_úp‚ŠŻÄ ŠHő4žŃŮŔéG„áÇgŤĘÎ3Fß˝ŁXGć†5ŸqÜ+\$kŰWkƲŠXbśă“8ÖÇwŢy§˘mKÝłœľ•ę[Iy93gĆSŤř 7jÔ¨xŹÍź}ůŻÓ¸żk*gŽÜçoű[|O¸Đ'Ż:_öŰoż˝‡Ĺ˜qůśÂ–öôy…t<~Żř Á5hXĄą>#žƒM, ćöŽ9áŰŐÎ Ź›ƒîś@ĎNŹĐ°îůą††ś@Ď€}žrĆÇ÷¸ăŽ‹Ž ¸F”ó•rĽýX fŇX÷&NœH˛`m$í—yeđ&pXFŢŕŸXą‚#dÜÂÉ8XÄů:ŢĂ!‡][čC:|ŹlyŠ<žĎřţâăÍ“X3q_ÁĘɃŒŐ ĺŹ-{ŻźkńţĺžđńĆâŢ{ďőŽń}‡UśŘk\h47Qɚ|ŒrçH{Dî7žń ďß#. ÇXžýƒ>Ü´ÇEŠŔˇfwß ,K;Ž*ĺ|8ĽŻ‚ˆ€Ô:.ž #‡ľ4Ykxr°­%<4Ňm­áÂ ŹƒÄŽvačZ_IíÍOz^ţPł—â[o˝UttŹ}\Ł.H)ŁŽ<‚Ę. ţđóő´[caňŁŇ~>„ĎÉż˛Ç7 ü˜ůšýšçž‹M™×ż˙ýo›0aBt/!ř" ¸đ?ĹBˆ˙4Ű‹ąąťułXǎá‡>ŹÁěęŔö<ÔŇö^~ůĺc=b‰4âîWżúUÜĽÄçMƒt,ús_D6üRa†Őë:.*řř"Ś`°°r^Œ×ŰkH=#ŕ&ĐŰÚbŁäGv-yî]îű‡BńÇO­Ż÷Ýw_ÜiƒĂʁ÷śćáŻ{Ţ5Ń7ď{œ÷ßÓO?-Îě ‡IÜn>˙ůĎǝXĎ-ÓđőçŘ>’÷v6¡;;Pň>óoPX.<xó°ŻżG˝\ąˆ€Ô,Dr¸pш;o„DŘŐÎښƒ Ĺ\ÍĄŽMj0÷K(dš‘őŢáŃG/!4ţţ÷żÇ]R‹.ćᗉDTňG4€‡Öř ™6|mŽË˘ëÄO´?ýéOq'ĔΤŇ~ŒÁš÷ˆK„:Ö׃:(néĆN|l™BŮO[rÉ%cťRř úé§GžořÝâŕď~÷;;ĺ”SŒÝ_<ŔÝ=|/W," ľJ )X››‚Xn1ĄmXkزŽ9曃zUŃ ĄZ!&DQŠP7ńđŔÜ6iL:{ńpQîé4Ÿ{bšÇńĂO(#ŚĚ//Ÿ,h§†ňŠÂôéÓŁď°űëV4ČÜNř F@ˆ#äŘMëZöAśRsĘÓŤ‡K (%ˆ]śtËŢ+0E„|úӟÎVϓÇęËŽ¸p„p_ŻÖ?ŹÝ°zžđ q×î›'dÇ—™}•Ů­TŔʘúngóĽúURžgmŮľ”{ż<ďĆä5f' Ţs|ˆÉňŹÉÇÎ3G^C€•ţXŘSŸ}Ţse˙ňí=d9fÇó1ů°ÇëـĹż{¨eŚž8Â~şçglńńĂ­ŁŤÉ>lo˛{žoˇqcFŘÂŁGŮŘ1ÍśPxœjĈđ cŘň˙ĘçĆç}0|ő7 'Ř׿5Ždźđű´ĐďąpńŐ'[bńUˇ_作˜ň4&^ˆ]ϓ.v…âÂă”Ôó71Ƥł!Ÿ"ÉöV~Ŕ dXžó„<ýĎÄ-–ÄRĎSˆár"„‹ŕ÷čŤo*ži‹ˆŠDČŃ7;–cŹÔ˝…T<Ó.›ď­oŢşŇÝqţÁ‡v čĄýúkő" " "  JŢxJpĺB:lÉŃ\8ؑ#§çşt„XţšßĐš‘Šƒˆ€ˆ€ˆ€Ô>ś§ă1¸ ŸƒGWŘj6˘ňQT‡é#°Ăó~Ąźö×Rk3”€ŽľWDójJŸç9áDB„tgˆťŻnŃÜ„sÜg%­‹€ŒöšpŠąˆ€ˆ€ˆ€ÔnËr|r0Z›ç‡ç,ŃáĄBötC7Ófś,Đš_P čÜČÔAD@D@D@jŸ@WלŕŽN Ž~MA,wFWÎiŽř4aí/§Śf(Žšz94¨ŒţÎá •ŮM<8şŻPÓÁ˙1MZ! č|źÔZD@D@D@ęƒ@Ć]¸l„'9őľ=(ĺŮ˝d}ЊJű•ŻXůG}dwÜqGĄj~Üłp3%D@D@D@Ę'”2>Ďs‰„éÎw_áď šŰĂEyTŇ只–€t•Ţ›ožš;ÖžţőŻŰvŰmžnmąe—]ÖśŮfűň—żóůË_ěěłĎśĹ[ĚÎ:묒w>ôĐCmʔ)%ëKUTÚŻÔxŮňťďžŰV_}uŰjŤ­ U}ύ”ČE Ű˛Ě“ƒČč`yĎX˘ç„tČSF›Ů˛@çâJcy˝äFVźC{{ť=đŔQ4ÓbĈśţúëŰ駟;üöˇżľYłfŮ÷ž÷=;ňČ#‹2ˇôˆ#ްˇŢzŤ×6Ĺ*+íWlŹbekŽšŚíşëŽö›ßüŚP]î=Ýr˝Áú*!" " "0pşşćw.ëŒ~MA,wFWÎiŽř4áŔMŁ!G–şJ/ë~űíWĎņÜsĎ=mҤIąŞ-ě\ŢŰń‹.ş¨-żüňó ĂC˝…Jűů˜e8A 6ŹÇÜËš'.vŢygťőÖ[ýVŠE@D@D@˜ FçŽ&›ÝŮdÁƒŁű ĺ1Ý9×­‹€,Đšp•nźÉ&›”Ž 5 .¸ ­łÎ:…6sćĚ1ÜÎ8ă =z´]~ůĺQ€żňĘ+Ń˝ăâ‹/ś;ďź3ś?ďźó˘EúÝwßľK/˝´‡˛Xi?úßpĂ vß}÷EaĚř§œrŠ­źňĘ>tɸÜ{üńvŮe—ŮSO=eO?ý´tŇI†Ež˛{。äřŞč ŒťpŮ.żűÝď˘P˙ŐŻ~e˙űßí˝÷ŢK‡í5çžžŚ^TĽˆ€ˆ€ˆ@Utńmuř;?,œ˜ŇNOik ťG„t[8ť;œŠžő6Ö,ŃĂŞrť!5HCťpôőĐ]˝źŇl}ˇÄKŘ 'œwú¸öÚkŁßt_ó/ˇ>ϡÝv›vÚiöç?˙Ůîšçžž†.Y_î=K  ę@$‡ w Nl× "şc˝Ă¸šƒ%šWŞEƒ•â2ČJÝjţ—7‚Ĺó?˙ů˝öÚkvÜqÇŮ5×\c?ü°{îš}Â,ˇßżţő/Ý?kÜ9úúşg#źýᣞ" " "0? 4ksSËÍ!&´ k Çv7Ç|sPĎĄ*ZĄ3UUeŠţ7żĄtUŢ ÂC~<œWj/ç™3g—Üăň@y>˝qŇťpžöľŻŮ–[niŁFňŚ=âJúáďĚ|ҝÁ öŤćŢĹ>=˛.śĽóPî=^xa{ńĹcˇˇß~;niLJ"2G¨ ”´-!ͅ%:čč`8ëŃÁ(­“€tN`}5ôŃGŁEQŠeť6śŸópŃEŮ3Ď<­É<řŕƒĆ4Űťą•î´ůŕƒ˘ËbőÄO´?ýéOqŰ7„('fCĽýžńoŘŞŤŽj[lą…ń€âÔŠSŁ?6q*”š÷8çœs˘¨˙ă˙hˇß~{ŮsÝtÓMă:öŘc8.ť|üú׿Ž˘=ťĺE@D@D@Ş@ ˆćf„s8°5¨h Ń-Á—Ł5˜œĂÉńĂÖ7KAç†ÝTĚĘ裄O+u Ĺbʲ‚œ‹rO§1/yŁűMČS旗O ŘSCyEaúôéŃw˜cľűđAŒŕ[Öą.ě']NČŰ‹7§'Ε¸sôuĎ7ŢxĂx(’ŔűKˇß3ę‡ˆ€ˆ€ˆ@ż ŕň9őÄöß{}ƖţĈ°…]Řś.ě}÷słm‘…GÚ"ŁGŮ؅›lĄŃf#ßţf™]|đT›2eŠ­ľÖZýž?ßhżüňËE…+wđ°+شЖmÁ‚ˇqŘxÜ4dnLŢˉŠKcŇé<˝ yŇĹŽPË qĐ*´+Ş 5LŔ÷{Ćňœ'äí— ŮJÄ3sëëž.žiËgłôž”)ˆ€ˆ€ˆ€T‘@°4c ĺB|Ą[ƒA1Z˘ƒ)ş%(ŔhĽŽŠˇ*Ca Vh0Ńě~`HB:lÉŃÔtÔĄźŰĽ#Ä2§ć~ĺ% s#S¨}lO‡BĎń(ďQ yQ ˙âĹA*ő­€t>^j-" " " őA (evá˜N$DHw†¸űęÍíA8G/_Ô´B.2ÚçÂĽĆ" " " "Pş-ËÁĂ9üC#Ď ťqtQ Ńń‰:ĘhÆ ůH@çăĽÖ" " " "Pşşćw.ëŒ~MA,wFWÎi.=E˜˙ĺ” G~fę!" " " 5O )(ĺčďÜśąël˛ŕÁŃ}…ň˜ţψiŇ ůH@çăĽÖ" " " "P‚0îÂe#<9ČY íA)ĎćAÂö`‰Ę9¤ť]8>>`¸>ÖUł”€ŽASj@侣”ƒ4Ž!1'œg׎E:äĐíĄš& ůH@çăĽÖ" " " "Pş‚Ĺ™CRŃě3h|Ąƒhú9ěĘ"$Ą‹€"̅KE@D@D@D >t…“9AeX ~΢bá4¡6[8SĹZƒ Ö,ĐĂęc=ľ4KY kéŐĐ\D@D@D@D Zɘ ƒľ™Ó›C1Ýƹޥ˜Ť9ÔqŕŠB>B–—Z‹€ˆ€ˆ€ˆ@]h ÖćŚ –›9ł;„śa­áŘîć˜oę9TE+4†j…|ţ> " " " "0$ ĚI„ĺŚŕĘŃŇ\X˘ƒŽśśŕžA]0JW=4şkh͛EAD@D@D@†$ ƒšÎáÂÖ ”1Dˇ_ŽÖ`rn Ş•ÔâćPЍŽÁZ@É_-ZD@D@D@Žp’JsÎŘŁxqˇE:X˘Cş-¸qcVČG@ČňńRk¨ÁŇĹsP{řBˇłs´DŐÜÄsĐÎĄź;ŽŐÎ,% kçľĐLD@D@D@D jxŒýžńGŽB:lÉŃ\8ؑƒcžŁU:¸o Śň€ÎÇK­E@D@D@D .°=ű)ůŽňćHďpˆJČGQV’ń •ŽŽşXNMMRşŚ^MFD@D@D@ŞD (e|žç„ ҝ!îžÂ1ŢA4ˇ‡+nX†’VČE@Fű\¸ÔXD@D@D@ęƒ@ˇe9>9­Ís‚Ăs–č9Á –€nŚÍlY sż ˛@çFV˙^{í5ťńĆí­ˇŢ˛7ß|ÓŚOŸ> ‹ČądÂTD@D@ˆ@WלŕŽŃe!śputtFWÎiŽř4a­{~,EčůAš†îń§?ýÉf͚…óN;íd[nšĽÝzë­ö裏V}–‡z¨Ý|óÍ2vŐ'ŤE@D@D Áđ `ôwîj˛ŮM<8şŻPӝsý Ń šH@çÂUߍ?řŕŰożýěÝwß űB6Ű&›lb+ޏb´DW˛˛>úČî¸ăŰ`ƒ Šv?âˆ#zŒÝWű˘ƒ¨PD@D@D 2Awá˛\4xˆ°=¨ćŮÁäÜŃ,Ń]- ŇÝ.í• ?”{Ʌc˝ú?ü°Íž=;Šg–˝öÚkۢ‹.jË/ż|YŇc9ŰŰŰmçwŽÖëRÓąËi_j•‹€ˆ€ˆ€ä'€ČkÇÜ qŐčd7Žpw;éG@ˇĎľRç}h÷şŽ^˙sĎ=×üńh5ţöˇżkćţóŸí / Ÿ4;lŸ}öą#FŘţűďogu–]|ńĹvçwÚ<`§œrŠ?>Öüńvĺ•WÚłĎ>-ÉXŽ/˝ôŇhuŚî˛Ë.ł§žzʞ~úi;餓lÁ,Ěé•W^é1vąöďż˙žýęWż˛űďżßH˙á°ľÖZ+މŤ sĹş+HKŘüý÷ż˙˝5Ę?üpťýöŰí‡?üĄýěg?+ÜS  t‹3‡Ľ ˘Ům# f,Đ!1§Ť9jvć’PČE@:ŽÁkźîşëÚ˝÷ŢkXrç̙+žËĺ†ď~÷ť6fĚťîşë˘PĽß믿Ĺ1"˜€uú‚ .°e–YĆ>ř`Űzë­mĄ…˛cŽ9&ޛ6Żžújź˙ç°íśŰÚADUĐÚÚÚcělűÎđKßóÎ;/ ď˝÷ŢŰśŘb {ňÉ'ĂfďMvýő×ی3lu։‚}—]vąŠS§ÚîťďE>bš9îľ×^6věŘ÷VFD@D@D ¸owMNPKéœĂ!*áŘîpzJ[8ť;œŠbáOľ k îĂD+/špä%6íą<ßvŰm†1♀˜>çœsú5,͓'OŸJĂÇҰţŽ´ŇJ6qâÄ(žO>ůäh~čĄ‡ěŞŤŽŠmŚM›VhObˇXȎímźýůçŸÇáCŔ5×\c‹/žxôˇÜr‹-ˇÜrśęŞŤÚ¤I“â<°–O™2Şţů(Öq Ůwß}cĘD@D@D@Š@$óg:ü™çôÁć@LˇqŹw(ćju¸˘€ĺă5(­qŰॿ4`‰~â‰'ҢŠŇZľ €XEüz7nœmľŐVöÍo~3ş~L˜0!şSx}Ú×Ë<ΎMšˇÇe!|(Ô8ŹÂmmmŃíSĹMůügŸ}ś-ąÄv 'D?ékŻ˝Ö\ŔVz˙7Ţx#üŇśÚĆo\Ö|€HEuš.k5ĄF dN"lžk,k i.,Ń­A=iEt0J+ä$ĐÓŹ™łłšĎ;찃­žúęńfÉáÇGß`Ę:üç?˙1^9î¸ă˘Ť;yŕRâ!ݐőöË.ťl´8ł'ľ\IŘ7ZAD@D@D  ‚pF<ˇ„̢[‚/GkĐáŮüř€akˆ›Ľ sĂnhíž˝šŠÔ`| ńy>äCěŒ3Έ>Ńy§É.XŽgΜYčJúĂ?,ř5łóyœ&ȃ~„Ż}íkńŕv ,źđÂöâ‹/ĆôŰożăôGvě´ýć›oHÜsĎ=žˆtöö-őpQáACř“§œŔ< î3ú!" " "P ĐNRiÂ9hčnń\°HKtHˇ?âŕŐQőĐHŹœ@Vě6ƒSćÖÎÁš{őďŠĹů°ĂłJ,Ďwß}ˇyć™qR?˙ůĎí™gžą{îšÇ.şč"ă€Ü3ţň—żÄ-厸â ă!?'žx˘ą­ŰÖ!‚ˇŰnťXľéŚ›u{ěąGAŘzŸěŘěđ‘śçAAśžCœă ˝ňĘ+Ű*ŤŹbK.š¤Ýu×]vĂ 7Dw,ŇĎ=÷œ~úéQ@˙ň—ż´wŢyÇ~ýë_Ç[vÚiöŇK/ům‹€ˆ€ˆ€8čţDrP{řBˇłs´DŐÜÄsĐÎĄź;ö.ՊMƒeš4őö !,ś„bqä>ˇÎÓr.ňžNcž$ ďqxůbž˜2żź|b°€žĘ+ Ó§Ožťě!Ü߀đP XxqaK9ü°Ó˝žá/3–˛íÖ/źđBÜ:Ÿhţ`wŤŠ'ް÷YÁ–7<|ËśŞÓlźŘiăF°1ŁG†ËlĄđ…ňČđŒţGá‹ç ~:5îxŎ\ý |cüňË/žUŽdź`\›ú=.śăkç¸mőܘź—S—ƤӋíĆšVKŞ™YʅŁf^ MDD@D@D@ŞG ěb×íďÜŐdł;›,xpt_Ą<ڃ˙3bš´B>ĐůxŠőŕŠ]Ž-/ؓšUD@D@D@Ę „qW|x0řA‡]ľÚƒRžÍƒ„íÁ”s0HwťptąPƀjâ$ „âA%pď˝÷ÚŞŤŽjßűŢ÷JÎăĐC[ě”l  D^;J9ř@ăŞŃasZkÇ"ňčöPM…|$ óńRë"°ĆkŘúëŻ÷š.u N*źä’K ՜NxÓM7ňJˆ€ˆ€ˆ€|L€Ó<8Ę?–#úš‚_tř ýă˙ˆŽ7ŢxŁm˛É&vôŃGG1ËhKßíˇß>ÎĺSŸú”Mš4‰ŞyÖégŸ}ÖÄ8Ŕ`°íśŰÚAţ#čŒébëŕ?„믿>GžÎ:ëĝ첋M:Ővß}wCč#Ś>ř`ŰkŻ˝lěŘąóÜ_" " "POعÂÁ)qŇA8‡|GŘđ™“ŰĂ *ĂÂĤĂ5wŽŢżާľĎšŚLćÇýt `yžíśŰÂ/ÂGQh2búœsÎ){´3fŘC=dW]uUě3mÚ´(žĎ?˙ü#ĆŻšć[|ńĹíő×_ˇ[nšĹ˝ˆŕ5×\3öYmľŐěä“Ośe–Y&śeN;ě°CŹkkk‹bôŠ+ވâĹ[,Ń=yňdŰ|óÍc„÷O<Űßu×]q.ˆjŽ›nşiLű1~üxcŹŹű‰ZîmΊˆó­ˇŢÚ°O™2Şţů(žq Ůwß}ăؔ)ˆ€ˆ€ˆ@=ŕoęˆćŮöřK3ƒ`î [ŘwŽpuˇŽöŽŮ6{vťÍš5Űf}DöLłˇ^}'ţmäošBy$ Ëă4¨­ŘÚ-ëŒĹ×Ĺh9“7n\´&ó›ß´}öŮÇ&L˜Ýp‡@@6,^XhŻťî:C,#˘×^{íŕ;œ¤ć†=÷Ü3śżçž{ Q›ţ˛}ń‹_Œ­ÝúĽ}ZhĄđ ;+ÖÝ|óÍśŇJ+E+w,?p§HŰ{šÇŮń(÷ö˝­#mçc1—4ŕ˘Bŕˆ€ˆ€Ô3ţ6.5ŚÝn}p†Ý9ý}{öőěá—f!ÝiłƒjžőŃlűđŁYöÁˇÎN{óůÇăßc L ĺ GyœľBĄŠÚî”ç gŸ}ś-ąÄv 'DćkŻ˝ÖŢxăřľÍĆo<ĎP¸y<ňČ#ó”S€˙2}ń;Fř°óĐ|ó˝ýxńĹc˙lÄŮňžň˝­ŁX_>¤÷JÓĹÚŤLD@D@ę…‹'/;۞úç,ťňÖ×mÔ˘Ăm̨VťPŤÍ ~ĎÂx~?8wt̞wáx÷ĺÇěsA¸1Š^Ö9˜ó”z0é—yoÜ$đ=& üxhKąťO”3Ěţó{íľ×ě¸ăŽ‹î?ü°áÂ}XœÝ2ĚX¸I`!ĆUƒƒKx@ĐuX˜ďřăJâńńľćĄÁžBk/žÖý .|{[GĆW_¨7<(˙•UŰl…ąA&Ďč°ŢiˇďwŘ;3çŘŰtŘ[ďÍׇöć;3íĽ'°EšŢŠz€gŸĘ#ĐĐ:ë/[’Úl…ż1>χrˆqĆŃ':ĎL9ŏě_űÚ×lË-ˇŒ–ăvÚ)>PˆkĆŰożE6ű-ł]÷ą+>öŘcń:đŔ‡ýxx6ßîťďž(ŹżţőŻÇ˘ŮᓭoQGVkD7ąů„ŒOľ\U°${/÷˜ţě âŻ+żčX˛ řYc1/śęqyIÇŚOžrŸÎ7č‡ˆ€ˆ€ÔŒmË,5Ňśůr›}fÔ[ÖńölűŕíěÍ7gٛ3BüîGQDżůüżl|çóśĆ¤ 6!¸vú7ĘŐXŽ˙­ŽĆXľ8FCťp¸u˛ÁW2§<çbăŸxâ‰6räHcŰ8Ä'ť` bŮ͂‡čŘ&_iś|[rÉ%ăˆvNdW ,Ňýë_c*/ťě2űÎwžc‹,˛H|@śl3ǘřO#¨š âWĹCŠ/źđBÝ_ýęWíĚ3Ď´ď˙űą÷ÜT°Ž#ôwÜqÇKŔçú˘‹.Šî!¸ °[˛Ť.#ÄĽÖÁýo¸á†(˜ąŹóŸÄ駟óżüĺ/íżţëż 6„ÓN;ÍV^yĺÂú{LB¨hŹĐk}~Œ-ąŘ,ťîöĎWZěő÷FٌÎ&1ë}ťŕ;öšńłlŐĺ'ÄmhفŠçĄ0VU#4šË2ięíBXź?=V,Ś,{aŃć˘ÜÓiÜ2ˇÜc<őĔůĺĺƒĺôÔP^QŔýWŢDý ŒSĎË*żPěƁPeËş4`-FÜ"’Ŕiŕ=‚{;kdul-ÇŘěv‘7`ĆňpǍ¤Ô>ĐĽĆĹbM_˝­ĂŰ(F&Ŕ9ü­çBńm+cšHS†3fLÜşcehžmęoŕoűË/ż\8üŹ’ńÂÓBżÇÂ7ž&ć+lżČ{91ĺiL:˝ŘęÚó¤‹]Ą¸p¤ ő|ăcŇŮĐS)ek•o\B)˙&>u–Ŕ|Ž*&ž:?|ŢŔ/Ź ŕźâ™{y_żooëđ6ŠE@D@D Ń đ÷™żą|ł‹XĆ8Fą_üÍtŁâš˝Řč¸rŻO:72uú € K4bŮł h5őXŒő Pž×łŰ,™ŻZ‹€ˆ€ˆ€ˆ€ÔIJ fDłçëh 55U čšz94Z' ]믐ć'" " " "PS$ kę嘿“áI[vŢ(Ř;šLňü¨ŘĎšT¨dĚRcŠ\D@D@D@ƒ€ô`P݁{rŹ7;k°÷sŠp衇ڔ)SJUĎSΊ„ŤŽşjÜ7zžĘšyÇ,5ŽĘE@D@D@D`°H@ůA¸/§ďÝtÓMńÎTžϽN$źä’KzkŇŁn5Ö°ő×_?>íŰŁ"ÉdÇLç”4SRD@D@D@j–€tÍž4՝§ďźóÎvë­ˇf[žÂ-Â&ćeďńěŰß°5Žď9]lÜtĚbs*ÖGe" " " "PK$ kéŐčc.çž{ŽvŘaƑŮyĂńǏŢƢźË.ťÄăŻá‹[ĹŇK/°~öŮgăĐŻźňŠýú׿ś/}éK1˙Ŕ؞{îi|°qüőřńăăľ9ň“cľ<ňČx,7Çw— Ů1‹ÍéŐW_ľýöŰĎÖ[o=[mľŐâ1ŕŒÇi‡x`ŹťüňËíóŸ˙ź­žúęvçwÚĂ?lŰlł-žřâvÔQG•ş˝ĘE@D@D@D *$ Ť‚qŕYwÝum×]wľ_üâ†űů<ဈsŰmˇľ3Ď<łp”÷\Ĺ*Ç~ň  P,Ɉi„+#˛i{ĺ•WÚJ+­d[o˝u<ţsťíś‹ýá't’=óĚ3%­ÚŮ1łsâ$ÂÝvŰÍ?üđčj‚KČ[lÇR~ýő×G—ćÂ|?ýéOŰÔŠSíŠ+ްSN9Ľ đ9\AD@D@D@Š€ô@‘­â¸Xžoťí6Ă_Ř]%x`ŻKtÖecóÍ7ˇ6ÚȖZj)Ű`ƒ ;h`ažůdŢiôhďsZvŮeŁĹyÖŹY…z~ńąt+ˆ€ˆ€ˆ€”OALpaě1"š‹ź§=üť ݖ - 鍀4>χrˆqĆŃ':ďŰW ŹĆ´c .~řĄqy ŽźsěčččQżýöŰG‹1ţĐp7Á’Ě/cą3ţŘěÂÁnĚďľ×^3ö^~ůĺăP¸­¤ăb‘'O9ůü?˜ŃbřŰČßnÍŠXćo%ő{y˙;Z \ŽŞ1V-ŽŃĐÚ-›ľž’9aqfťJ,Ď܏üN<ńDŰc=ěâ‹/Ž;fđ°ŢC=d>ř`|pď駟6ś‰c‹ş‹.ş(nww 'Ř_ţňť˙ţűăŽ<ěGXnšĺâŽţóŸíłŸýŹ!¨q5ÁB~ŢyçĹ6éě˜ěŚ‘Î‰ńŘɃžřBŻźňĘśĘ*ŤŘ’K.ˇłťá†Œíô°H?÷Üsvúé§Ç˙ŘVďwމŰîqżÓN;Í^zéĽôÖJ‹€ˆ€ˆŔ!€xE$ť8ö˜2ψe Pü-&öŤZMƒeš4őö !,ŢOŮ(S–˝ä\”{:[ć–{Œ6őĔůĺĺĂN§†ňŠÂôéÓ 7ü}ú§ÖáqăĆUu)ü2b1f\Ü/؎.OČΉ_ć^x!ž”ˆO´‚ˆ€ˆ€ˆ@ůŘÍ ÇCůü%ćÂȅ&˘Œ H;Äł[ŸiÓ߀.xůĺ— ß W2^0¤M ý ž(|ĹĚWŰ~‘÷rbĘӘtzńĽçIťBq,/āO÷“—”d‚ÔIHŁgŤ-žáĹ/Ł›W<Óßű’&đKŽ5ZAD@D@D ?ţ.űóDdˇ@ť]]ˆČĽœ€€~ď˝÷ěŸřDţ› ŃĐCô…ײE@D@D@“Öe4VeD3 š]H#°Ésń­/Ď'á~Éö°évśI§:Ť’€ŽG"" " " 5AĄŒ5™ç°.sŽWęşá>Ď< f',ˇP×Ä"j|Đ5ţiz" " " "‡–ĺ1cĆDŸgśšĹ=cäȑŃEŇÇÁňĚN[<´Ďe‹,˛Hśźââ$ ‹sQŠˆ€ˆ€ˆ€Ô%?h Ťň‚ .h찅ˆ~÷ÝwŁkÖhś‘]qĹm…VˆÖi|˘Ę' ]>Ť†iÉţʏ<ňˆ­şęŞńç@/ *véřÔ§>UÖ­ÂÎ+öÖ[oőëéݲn¤F" " "ЀpáŔ Ëťˆ!˜ą6űVłÄ\ž3G"đ%ą…œÂ"đ§?ýÉÎ=÷\űűß˙n“&Męq<ř@`8űěłmąĹłłÎ:Ťěá=ôP›2eJŮíŐPD@D@Dŕcř2ť?3"šÝŽpŐŔיŕu÷P*/Y óŤăö|đíˇß~ń+žŢŮd“MâSˇŐ^$ÜqÇśÁ؎;îhGydŽ[pú héx^ŚXD@D@D <üÍǕáœnoçBkľB>˛@çăU×­~řá¸] żH„ľ×^ťęëáŠŢwŢŮŘÄÝ_ů/Š—őó)9=ž;;^o}U'" " "0Ż•™żýlUG@0űE>ĎßhÚ+tŸ(uB׋Ă;ĚÎ9çœÜ3ć¸mú˛'ä>űěc?ůÉOâř'˙ŕ?°ý÷ß?şMüčG?*<…ˑڣýűß˙>śĺţŘ8N{üřńŃÂ}Ůe—Ů%—\bťě˛K< œĆřcᚱôŇKÇ#şŸ}öŮ8FöÇ+ŻźäţҗžŤŽ?ţxˎ÷ꍯĆűʎŢzśÚjŤĹcžiüÔSOفë8ŽüóŸ˙ź­žúęvçwśŮf[|ńĹí¨ŁŽĘŢVyhˆcţîf>Ďü=ôŕ"Úc/WÜ7Y űfT-Ö]w]Űu×]íżřEt‹ Ÿ'|÷ťßľ=öŘ#~ĘüĂţ`ÇsLěžŮf›ŮškŽiÇ{Ź]pÁv÷ÝwŰvŰmëśß~ű؞'w ;찃M˜0Ąŕ^Á8ôšňĘ+mĽ•V˛­ˇŢÚŕˆÔmˇÝÖÎ<óĚř•}i‡ŕĹľƒ'}K‰X|ľ׈aÂĐc’ž_k­ľ˘pf˙HÄóÉ'Ÿ\p˝đ6qđcóÍ7ˇ6ÚȖZjŠčýřă{U+öäɓă/vZáăţůąćXýő×í–[n‰ÇłłG2ćÎÈü‡qĐAĹ(öÝwß؟2hTX•łÁżÁžđ Ł1ËŰxœmŻ|iĐĽŮÔL bÓý–}Rř?ńÄž­(žçž{˘ŰÂŮĂżřŘ|đÁ˝¨×‘ŠčÍź^žćǎŰëQĄ´MŰ3†çöřHó5×:ëŹc×]w]tĺHŰů}9–4 ŁGŽYDˇ‚ˆ€ˆ€4"4CV7đ łëžé˝ďžű Ć*˙ۈ,jMڅc ČVq\Ü#šěFáK4ĺý 3gδ7Ţx#ŠŮQŁFĹĄ°ţâFÁŽľ˜/óŰxăËšž=ĺőŸ„“P," "Ш˛>ÍěźqŃE3ë&ĎsBţ`aٞ¨uÉ=PdŤ8..źÉ BŢěX^Ýő˘Ň[!ŔńGĆćŹđ !nÜmÄóĺÄŐŞ>޲áT%,Ξ sá?Š›ožšœiŠˆ€ˆ€ ţw“ĹŢxăŃ`–.œç›x†Iî)•ňÓ mn¤7>ĐřBă΁đ­DŰÇëˆiK=Ż˙¤ăáK}ôŃGLJŮĄW–?ţńĆC’ňéq¤XíÉSŽŸů*ůP;ę‡ˆ€ˆ€ÔM7ÝÔŘ4€ż‡ü]Ć’osůť˜ íj.Ť‘4X1. m¨7E1óŁ Ń|Řa‡U$žÁěŠAřůĎnĎ<óLÜ!ƒ-â.˝ôҸ+ÇŐW_Lźřâ‹ă/mŮâŽÝ,°H#Xą|ŘƒSďż˙ţřĐ!÷yŕőÄOŒť~0÷ⁿ‡zČđ­&gŤšlŔ/›Ż•p!9ᄢpOÇ[nšĺ줓N2śŘĂzĺ•WśUVY%nˇw×]wŮ 7Ü`l݇Eš§ŒO?ýôřŰě˝óÎ;q‹<îyÚi§ŮK/˝”˝˝ň" " " U Đh,‹¤ŠˇOańMs;‹)Ë^r.Ę=Ćœ!IŢc,ŕä‰)óËË'žů曧†ňŠÂôéÓăđ~teEƒĚíÄYňx°mî!ÔlŔú̧VtKnśM6ľšŁCŤ˛ă1§^xÁ–Yf™‚ŘŻÖ˝4Žˆ€ˆ€Ô3 Jü Fť`iFÎqł@ăęu|űë[×ögýÜçĺ—_.ěĚUÉXÁH6-ô{,\lhÍ×ǝÉEŢˉŠKcŇéŖ$ž']ě Ĺąź}4ďV&Ԇ€PUâřĹń“˙ŠĄŕŤéŽ^V,ŽŚxfüěxĚŠ˜Ř/6•‰€ˆ€ˆ€ˆ@5 `ýU(“€,Đe‚R3¨Áý5>ŒĎ)˝ú¨ýóŸ˙´§Ÿ~ÚŢ{ď=›3gNź|J]]]1ŮÔÔäEće…‚(UďĺÄM-MÖÖŇfŁGś &ŘäɓmҤIÖÚ:$ĐüXŻ3ńu“ĎËöޡ˜1ŸZMĹű¤Dç‹)Ë^X´š(÷tˇĚ-÷˜w/őĔůĺĺß|óÍSCš‚ˆ€ˆ€ˆ@@o<ňČ#vÉ%—Ř‚ .h믿ž­şęŞ1=lذ]Y{{ť˝˙ţűńţ7ß|łÍ˜1ĂŚL™ĹôÇR§şSĚőVc%ƒÁ,÷˘‹.:-ä לpu„Ť3šČ{91uiL:˝řDćyŇĹŽPË qx ť?ÉQ’ Đ Ɗ€ˆ€ˆ€T—@gg§]uŐUv˙ý÷ŰžűîkË.ťlÁâYÝ;•ÍľÖî˙űßvĚ1ÇŘkŹa›mś™ľ´`żŤ^¨…őVc5ó“Yvžľ. çĎ÷Y*ʋ€ˆ€ˆ€ ÖŤŻžÚţőŻŮOúS7nœ!0ůŽť´}ŻĘh‚ąkŽqQřÉO~Ň8ŕ;ńÄ­ššŮ6ÝtÓWăŽ5ąŢj,d>2ŤĆtç÷¸O(ˆ€ˆ€ˆ€ˆ@Ő VńućúÖˇžeŁFŠžÎ莎Î(¤I÷v˝őÖ[öŘcŮŹYłći÷›ßü&şe돐-”Ďé,ܗ2ćľĐBŁműíˇÂžůšľľ?ŞąŢœ3\řröŮgźŚL}Š~yĘƒYxf_ čÁ¤Ż{‹€ˆ€ˆ@˜9sŚ]ýőśÎ:ëDË3ÍEš§Ó¸łŃŰ-|üńč'ý•Ż|Ĺ~üăŰňË/oűíˇ_ôevQxúé§ŰôéÓ界‰@÷ą˝=yDnw<'ˆč…líľ×śż˙ýďĆ\űúł^Ÿăwžó[b‰%ěĂ?칎Űoż=şÁxťjǃŏżĚŤżô`‘×}E@D@D  ČpŰXd‘El饗Ž+={v…Ôťşş¸s˘HĆ­bóÍ7~ӗ_~š=řŕƒŃÚ|ŕFěcâěĹ،ă÷đzňs­Ń<$Ç„K-ľ”Űh匞Ň@ßJ×ëóĂÚţˇżý-2ÂgÜË=fnžîoüŐŻ~ŐÎ=÷ÜÂxĚ~3Ť”u-ô“€Ž…WAs#đŃGŮO<Ĺó ,WGŮ|`QH‡íě澢vËq‡vÚiq›š˝öÚËşábŒC9İ:?˙üóąI{ęœ<řîťďv—żÓf4;nÇ\xxpřđáöŠO}*Z˛)Ť4ôg˝Ź‘ Aťá†ÚÖ[omguV,ó:.×/~ń‹ř&@Ţ{e6ěn˛ÚjŤEëőfáĂě˝ď–[niçŸ~ôőŢe—]ěˆ#ްűîťĎ~öłŸŮ*ŤŹ­Ý‘ă|fV)ëZ觇káUĐD@D@D Áŕ‚ŔĎ4ö\FŹ"uˆ5ŹżMÍMÖŸ&d÷[Đ/řM?üϸWóŹfQŘ˝9nˆ–_ayšĹú…Ç.­§ׇ}ÄöŮgűËY‰ "Ňéďф…:ěa,Ҍ-ˇaÔ1'ć6~üř( ™óˆ#â=ňţčĎzY"ůxŔĆÚŚl9Ş˙÷óqnÔÁíĆoŒb˙Ź˙=ˎ;î8;ôĐCíÜóÎľ'Ÿ|Ňvß}w;öŘcŁŰËąż=ÖśŰ~;ťéŚ›âŸ{î9;ě°ĂěCą5V_ĂFŒaXőwžşsŐłŰgÇ5ó›ëŞ× t˝žršˇˆ€ˆ€Ô0„- Ž3&Š8vť@°Ž&dHĎčg"Du({ű­ˇŁméؖ8\Ç ĺ3ޞó,ąźűnťŰÁlŤŽ˛j,ç>--Ía,Zt iúwD{Źďž _höŚîŻşŇő2ˇÇ{Ü^{ő5Ű`ƒ lőŐVˇe—]Öţď˘˙‹ëńšéK_Šť‡ŹňšUěżöý/ťçž{˘Eý˘ /˛‰'Ú6Űl}Í÷ßo{úЧíű(pâĆć›mn‹-ś˜PśľľŮ˜ŃcląO,6hĚxuę5Č]ŻŻœć-" " 5JŔ]+8ýĄćhÎ.dKM—ŠkŽšfž­ĺË<¨G=cţüç?Ç:ŘĺĂË|\îÓ3t[Ł™ÖpŻgŽˆ_,ăÔyyĎžĽsý]/#㞯#<2Ţ—Ü.ž愻‰Żq…Vˆ‚˙…^°—_~ŮV^yĺBÝ'>ń‰(”)÷ölÝçé8ŕÜ1‹•y}w<0ĚzŢŁţr˛@×ßkŚ‹€ˆ€ˆ@Í@Tráz€Hăr tw[‹ą|áßëÂ0-gˇ ,şýěgc{DĺŢ{ďTÜ˙ý{Œáýüžä››?ś€wçťçĺ.%̡ŇПőâ ~ŃEEßgjäÂ?fśŘcŽŹ•Ëׅ[ĆŘącmĽ•V23yŻăCĆkŻ˝E´÷M9xY:ž÷%NŰ$łJY×B? čZx4h01čCĚ!Ôe.̈ąJ{ŢE›çˇÚjŤ( 9-@=ÖTŹłć…^8öĽË1ÖŰ;î¸ĂŘÚÇ —ß'[NŢ/ü—9ޛö•úVş^vŢ@4łĂëĂęĚÖ}뎝n\ó„![ű1OŇ<4¸ŢzëĹőńđ$ť”ŕ M–kváƒ} žVbćŠŸö^N™_ó‹YĽŹkĄŸ\8jáUĐD@D@D  ↠] ŠY Šç*uÄiÓŚEk3bž˛=÷Ü3žfˆĐó@[öMžŕ‚ l“M6ąĎ|ć3śÝvŰyuŒš—[—ÝRěsŔú‹͜{›WA“ }úłŢżţőŻśÓN;Í#ŕwÜqG;蠃ě裏ŽBQŒeúwމ;˜œwŢyą{e˙ä'?1vđŔÍzŘÉ˙s.œ=żëŽťÚ÷ż˙ýř !–ýlhfŮűŐ[žÉßPĹ&ŕůťťXLYöâcĺžNcŢńä=FŔ“'ŚĚ//Ÿřć›ožĘD@D@D@ęˆÖŘ[o˝5Zˆqš@üákŒřE^|,1z_×W_}Ֆ[nšhmí˝ußľ. ńFhžýöŰѲËĚX|ńCŽ$Tk˝ĽîŔ'°K=˛@ƒIAD@D@D ŞFŽEď•W^cŤ[AS ˛ éRZeܸqqg‰jMŽű0ěI}çwĆíܘsĽĄZë-uv ń°ä’Kz˛GŒëŽ ĺڗłmß@1+wžľŘNş_ÍID@D@ęœ"™>ýéOŰŐW_Ý*ŘY‚r÷ąŒ%"žýÂŞ{ĹWÄ-ă˜k*ěóέVכwĹÚ;/âj2+vŻz)Ă}BAD@D@D@ŞJË2VSNÇĂϘŰf͚]7°DVŕŢ\ěů|Î9çÄ]B˜#sukx%sŤŐőV˛–lŸb–˝O=ĺď\O”4WÜ°Ę⍝ţúëGĄĘ1Ô=ôPLcÍ,嶑űFetp7Äü?ţń;üđĂŁ gnýľ>űíki˝>§ţÄóƒYć7˜}őá`Ň×˝E@D@D Á Âđ3fşťîşË~řáx Čžđăd˝e–Y&ćÖfö•fŤťűďż?ZŸ'Ožlk­ľVÜÁƒJŞja˝ŐXËüdVlžľţĄtąWMe" " " U%ŔŽ쨁}ěąÇâÁě€ÁNˆÎ ¸W°L˜0!{ÍÖxě'?ö@„Á\o5Ö3ĚŇy׺€˜wMJ@i!OĄĘviř#b9`…-Ô8žˇŠŃA\+8Á-ęŘ-ƒŤŇ=ŸË}!k˝ĺÎŻˇvƒĹʎ9ŐZt­˝"šˆ€ˆ€4(„î\XńHńě]"¤IĎŻ0Xë­Ćú‹Y5ć>?Ɛ€ž”uhXiʅ˘ÇÍj 3ÔÖ[Čt څc@ńjpF# ÝhݍÖ#" " " "0 $ Żh4ЍöŠj=" " " " J@z@ńjpF# ÝhݍÖ#" " " "0 $ Ż›ß%`IDATh4ЍöŠj=" " " " J@z@ńjpr <űěłĺ6Ôvľ( ť.!Bń|őŐWgW[“ş°ÚGyžŮ˛lŢATŞ­÷Q," " " "Pçžyćťćškl×]wő•d5`1Ř[[Żó8;ž—WĎo t:yáqE P'ú%Šç‘#Göľ׍{{ňó- ´€öĹxě Ëć˝\ąˆ€ˆ€ˆ€ˆŔ!đÔSO,ψç | łšŇóɁĐ>aË8íÓ>Ů|šă¨ˆ€ˆ€ˆ€ˆ@xňÉ'íÚkŻn.žčŹĚćËYëJËéSV›jű@—uÓ¤‘/ČcŞH§ů¤š’" " " " őNń|Ýu×Ůnťífˆç§Ÿ~ş Ś3kËęB׈gšĎŸlščjMŇÇń¸ˇUŇŚœv˝Ą:"PL<ű„‰tš:Đľ˘Çý]iYă”+ ‹M&˝Aš.ŐśTʋ]ĹĆQ™ˆ€ˆ€ˆ€ˆ@xüńÇçą<#žSKtfiĹ4b_š23DlÚ7M÷hÔWŚ?şˇąÓ Ľé´ĺĹęźÜ㴏Ň" " " " uH7n¸Ą‡XΊgňsƒë@˝ÜăRĺÔSç!M{Yżăź:Ď$˛m=OœŚYDZćů4&­ " " " "P‡ĎĹÄrjyöúšËËjEŠS˝˜Ö§é”Ž—§eĽŇyÚZSWWéöM!$wń4ą§ŕž&&ďeä[ćÖ{9ą—ńŁç)#íeĔ­řć›ožb!B`ŃEÝ%,ő‰pu†Ť#\s’˜2./CĚzž2./#ćJËCśPćiÚxş;ыHŽö.~óî)tOÎÓÓqím‰łi/ë w őˆiŮ.ĆÓ2Ćór)ă˘Áó{Y“V(M Őm´*čśšiĘ´^îâŐcĘI§BŘëźĚűŚqčRÓÓiLšŕ}şsÝ?)ŤZ¨†€fBˆŇŢBąIg—śńşéaPÄťö˜{{1yę|N^F>˝BśźmĄ@ ˘RÍF×miŒ &PćbÚE21ĺÄÔĽqś í[–Ž•­Kű’NCZ—–“öşlyżň˝ čŕúѕńƒö›1śÄłOŘëÉ{đ:)÷tą˜z@şX&í÷§=y‚×ű´ĄŹT Áç؝ÓOR\?y˝ëŽ4vL/§ĚËÓ˛4ś÷ň4.VOvźçłąˇő¸G=¸GA&ÓŤ€Î´­4ë H/cůIJő^`ďCÚĹą§‰=P—ć)wQL9iżŇ:oă1u " " " " Ľ ¤ŽViŢu]ŁĹü˘ÜÓĞ÷ö^––‡fóÜŁˇ2úh¨–€ö‰"DIť MÓéBź<IsÎŲç}<ęH{œíCšÚqůXž'ö@BZÖ]˘Ÿ" " " " Ÿ~ň:×cSŽ&óž&ć˘=ăyŢăPT”)ˆ€ˆ€ˆ€ˆ€ôMŔušˇLő›×•Ă^Ně}Ňrń=Ć˝•{1~}…rÚô#€fđThúÍŇ2/ŐÎËӘ4ŔƒtzQîb™zĎӆŕ}I{;Ň>b×Ói]ś-yŢ ¤ZŒ–ižtöƊcň^–śő˛lœś!íő¤ Ľâîڏë=ď}źŸ—gó^>OœG@ĎÓš—&ŠWĎӅ´_Ůź—ĆűSF> .˜]ӆ2‚—yšr/#öËë‰D@D@D@D@ň@\żĽyšÔ{š8M{?/÷Řˉ˝}ZFš–u—t—y]{}Uâjh&(őŸXőrŸ¨/’ź§˝çäceÓ>ŽÇ.˜i炚:ďOœM{íä wçôSD@D@D@D Tży×r˝Ĺ.†=Ś-éěĺcdŰyyoąĎ‡˜vźů´ÜësĹŐĐĹnČÄ\źRŸćSąš–“ć–÷%MHrwI÷OÚQÇ)6Äô'ŚÜď“ͧuŢ&4WČAÝEp —Ś]Ăy‹a/Oó¤ý˘}šöźCLđ¸;÷qžŻvŢž_qľ4“u1ęi™ /&M{YŠxi@g˸'ý˝.ÍÓ×çäiňŮ2ęD@D@D@D@ň@ƒyHőeh6Ż÷´ˇIó¤ý˘ŢÓ{Ÿ˝hďyÓ1Ň:ĆKóžŚÜeiČćÓşyŇ} hÎo !ӓ›¤eŮź7÷ɤmŠóöŔŲ bĘ^N:zĆĽĚű÷tHÎ#žÓ2ҲóórĹ" " " " = ¸óRňi™ç˝ŒŘĹn6ímÝííˆ=öĄŒ@Áăî\÷O3-ótś}6oh_o\*îS@—ęX¤œ›•˘>Ŕ%PĆĺeiŢÇqH.˘˝œ˜2b.úfÓĄ(–ůý<ďíČ+ˆ€ˆ€ˆ€ˆ€ô€k8bh8Ď{>m›–§ő¤łů´_Zçĺi™Ď!Óś*ĄÍÍSŃZl"Ů ŇŢCÚßŰłp‚‹eži9őäýţЈvaěăű=˝=}˝×QŚ " " " "P9´—_ŒR,íeiŒFKó¤)KË=-÷~ĄyA¨“&xÇÝĽóţ¤žŕqwތŸ•čě°ÜAšŢÜó§uô÷|ą@ęČ.¨É3^*š˝ĚËCuŹ'ڌ@\,+çţđú´Liy ¸~Kk(óňlšvŽď\{łĺä˝Ěco[NĚ=iGHŰ{>VTúŁÚ'’ŠP&J>Ó9…qűBÓzú1–_>Ś ię}Œôž”{ŇňiđźÇiŇ" " " " óp˝ćąˇHó¤=Oě"˜ś¤ išˇ÷ŘŰ{\Ş<[O;B6î.ý¸ÜóĹe čť!“MŨOŢŰŤcá.€iGĎű!)”§—ß‹2O‡dĺĆ x>M§eą‘~ˆ€ˆ€ˆ€ˆ€”EŔužÇtň4úŽP,OYo—÷uq\*öąăŠŒéĺÄŮśi]!]΄4.K@Fý8Á$Š ×´ĚŰx/ňpAëĺÄ^Ně˘ÖÇr1M;ĘȧímăÖč´.›öűxœö§ŹdČc}f\şČ]™•P,í§×{Yě”üđúÔęLľ—§B¸ˇ4}|NžNó”eC_őŮöʋ€ˆ€ˆ€ˆŔP%PJË9ęÓ6žNăŢŇŮ:ň~qO§ą—{L§ç&‹ÎÉërĹMAqçę@㌒Ni:VŠŁˇKc/÷ŘűkSŹŽˇ2ę>VwnŢ|ą6ŢVąˆ€ˆ€ˆ€ˆ@OĹÄcś,Í{:Ó4Ł“OˊĺÓv^ŸöIë=MLđvÝš$Ÿ×úĚýľ@3†O(+TŠó@Ż÷´÷Ł—yďWŹÎűіËűz/÷^ćą×eó”Ňňî’*ţě—šy”áĘ›ećě"6§m˝.-KÓĽęÓ6¤=¤í˝Ląˆ€ˆ€ˆ€ˆ@őŽŮ˛4ďi™Iątoei]śą|ĹŽ Fˆ‡—…¤‚ľT>]°ˇOËŤTđvôKÓ´'ďă‘'x›î\ϟٶ=k•p˝i*oăqÚśTšśĽęŇro—–ĽiŻ'ö­÷ň~Ĺýś@űÝűi‰. Y1›7ĎXŮ>>~_ui;ĽE@D@D@D@Ę#ЛP-V—-+'_N›tśŮöýś<űŕeöń}â.hËÉӆöŮ>>f6ööŮňRyŸCŠz•‹€ˆ€ˆ€ˆ€T@V{eóÜŠX™—gëň捡’š#UÍí3+a‰ŚÚą7-V–m“ćÓtoc¤uĹW^D@D@D@D ş˛"7;zŠú´DtlâÉÄĺˆŕrÚôvĚ-•¨’˘63~9íJľ)Uo1Pâ™ÁT@; 2„tœ‹ˇ/—+–˝kŢöŢOąˆ€ˆ€ˆ€ˆ@u ô*t‹ÜŞˇö˝ŐĹĄR8ű\狀.Ü,(iO÷—Óޜ6}ÜFŐ" " " " ƒH OAćVN›ŞmQW‹ů* }BeZ¤˝9qÄrúŚsPZD@D@D@D <e‰ŢCĺę;?,ÎŮyŠ€N'Q˜Nť“–@ÎQ^D@D@D@j›@.‘œ]Ę`ˆćtƒ. Óɐނ ÎŠźˆ€ˆ€ˆ€ˆ@lÁœEWs:;AňŐŨ¨LD@D@D@@­‰ĺb„ëB@›xą2 íbTT&" " " ƒO „qš”J@—ťhľJ 4WÚQýD@D@D@D@D`(€ŠŻşÖ," " " "P1 čŠŃŠŁˆ€ˆ€ˆ€ˆŔP$ =_u­YD@D@D@D bĐŁSGĄH@z(žęZłˆ€ˆ€ˆ€ˆ@Ĺţ? ŻçŽmF˛IENDŽB`‚gwenhywfar-4.15.2beta/doc/dialog/images/Makefile.in0000644000175000017500000004145112634022412017060 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc/dialog/images DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ EXTRA_DIST = \ fox16-1.jpg \ fox16-2.jpg \ fox16-3.jpg \ fox16-4.jpg \ fox16-5.jpg \ fox16-6.jpg \ gtk2-1.jpg \ gtk2-2.jpg \ gtk2-3.jpg \ gtk2-4.jpg \ gtk2-5.jpg \ gtk2-6.jpg \ qt4-1.jpg \ qt4-2.jpg \ qt4-3.jpg \ qt4-4.jpg \ qt4-5.jpg \ qt4-6.jpg \ cocoa-1.png \ cocoa-2.png \ cocoa-3.png \ cocoa-4.png \ cocoa-5.png \ cocoa-6.png \ cocoa-7.png all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/dialog/images/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/dialog/images/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/doc/dialog/images/qt4-6.jpg0000644000175000017500000006437412364015347016412 00000000000000˙Ř˙ŕJFIFQP˙ŰC  !"$"$˙ŰC˙Ŕن"˙Ä ˙Äľ}!1AQa"q2‘Ą#BąÁRŃđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚáâăäĺćçčéęńňóôőö÷řůú˙Ä ˙Äľw!1AQaq"2B‘ĄąÁ #3RđbrŃ $4á%ń&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚâăäĺćçčéęňóôőö÷řůú˙Ú ?ú/GŃíćľÎMĂĺg =MdxĎTđď†Ú)ôŃ{¨^1KKVÝ,Äu<Gv$]…˙ {s˛?šýď­|ßń›[Őt˙ŒşŹĐ¸ŒĂkíŒíŒ sˇęĺŤęrŒńřÇAJÉ_Ëc‚N1‚mŁ?ˆŚÓáűfłđýaą2Ig~ˇ2Ä=Z<.@ď´ąö5ŮéŢŐôË}KMŽÂęŇáĹ*JpĂúcČŻ–|IüZ‹0ô(¸ţUé?˛Ž§w=ż‰4ŮZÚŢé&ˆ@F6ĺƒĺőęçy \ş‚ŞçÖÚ7ú“ BNÉŃý‹Śϕ§ýüŁűL˙Ÿ+Oűů\'íŤęz'Ă;CIšk+ĽżąŒM ႽÔJĂčT~ľÎü1ń˙‹žĎĹמ*´‹Z‹Lń ޟ žMuÉ„ŞŽč”tsóőňnŹÓľßŢlĄ^ÇŽ˙béŸóĺi˙(ţĹÓ?çĘÓţţW€j:×âfĄho5$´“Ĺ:u­˝ąŸĘň#“OiYH9†JńĎ~+Ă?|s‹8dţËťÔŻź/¨j6Z—Úškˆ¤ľÉw mÉ\ěĘqœOˇ—v?fťLbéŸóĺi˙(ţĹÓ?çĘÓţţW‡Ü|\ń†™ĄxJĂű LÖľÝcImAĽś3Iˆˆ„.ŘÓ"V-ó`OqZúĹr×YĐëĂi&Ľodó]Ţ ĺË;aĄ-‘/1# ćŸś—ó1{5ŘőŸě]3ţ|­?ďĺŘşgüůZßĘó_>%ń‡ˆn|Y‰çŃŽ#ÓľëË(DDąyr@1÷YžcŢ˝C?ôÎ/űčŐ*“j÷bqŠčCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙ž>y÷x­Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙+Ÿńö‰Ľ_ĹĽÚčÉŠę“&ôľˇ¸7ť„_Ż'°5Ógţ™Ĺ˙}đ{Ý_Rľń—ˆćI<šŢýă-Œˆv íˇÏĆÔĂSRMę{Ü?“Ă4Ä:nÚ+úž…sŹ[éaeń„#ą˛$şˇşűJEîŕŔ{€kŤIŃ&śY⾲’)rÓô–KÉîÖ]ŁšP¤œţę+Ň|)áŰ? x^ Ě,‹łI+ŸšY–sîMtTVxuOđDߍÄăÚu§{1ńpb+!˛1óˇń{QVž9ôťqš~÷Ls÷Eő”ęsSŒťŁĆjÍŁŐ4s×ćVůOAďVjśŽsŁÚüĘß)č=ęÍ|Î'řŇő;(˙ Ug˝E‘Ńmuś1BĐŘM*înT Až ň+BÍWíĂţúÇţ ŽřŠ>Ü?čŹŕŞç˙ˆ  TU_ˇúëř*š˙â(űp˙ ~ą˙‚ŤŸţ"€-QU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐWíĂţúÇţ ŽřŠô{‚˝žĄlěŘÍň;WrÍ€Nђpxâ€-QU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐWíĂţúÇţ ŽřŠ>Ü?čŹŕŞç˙ˆ  TU_ˇúëř*š˙â(űp˙ ~ą˙‚ŤŸţ"€-QU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐWíĂţúÇţ ŽřŠAd%žĄ#)Úč–3ĆpBer# dЎEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐWíĂţúÇţ ŽřŠ>Ü?čŹŕŞç˙ˆ  TU_ˇúëř*š˙â(űp˙ ~ą˙‚ŤŸţ"€-QU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐPßĸ2Űę)!wĎa4H 8ł $€9ä;Ňý¸Đ?X˙ÁUĎ˙@¨ŞżnôÖ?đUs˙ÄQöá˙@ýc˙W?üEZ˘Şý¸Đ?X˙ÁUĎ˙Gۇýőü\˙ńjŠŤöá˙@ýc˙W?üEnôÖ?đUs˙ÄPŞ*ŻŰ‡ýőü\˙ń}¸Đ?X˙ÁUĎ˙@¨ŞżnôÖ?đUs˙ÄQöá˙@ýc˙W?üEZ˘Şý¸Đ?X˙ÁUĎ˙Iöřˇlk}A$ ˛Ćö,Ž2UJeą‘œŒŒâ€-ŃU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐWíĂţúÇţ ŽřŠ>Ü?čŹŕŞç˙ˆ  TU_ˇúëř*š˙â(űp˙ ~ą˙‚ŤŸţ"€-QU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľEfęŤŰÚłÁĽj“Ü!…ěf‹Ělg™“ÔŕĆ+ţ/˙Оßř'˙ŞŒś%ÍGsŹ˘š?řHźO˙B{ŕLŸüfřHźO˙B{ŕLŸüfŤŮH^Ň'YErđ‘xŸţ„ö˙Ŕ™?řÍđ‘xŸţ„ö˙Ŕ™?řÍĘAí"u”W'˙ ‰˙čOoü “˙ŒŃ˙ ‰˙čOoü “˙ŒŃě¤Ň'YErđ‘xŸţ„ö˙Ŕ™?řÍđ‘xŸţ„ö˙Ŕ™?řÍĘAí"u”W'˙ ‰˙čOoü “˙ŒŃ˙ ‰˙čOoü “˙ŒŃě¤Ň'YEVÓ/bÔ,cť…dE|‚’.HőĆGVk2Š( Š( "řäŇíĆĺűÝ1ĎÝQńČ˙ĽŰË÷şcŸş(ŻŞĄüz#‚_=SG9Ńí~eo”ôőfŤhç:=ŻĚ­ňžƒŢŹ×Îb/SŽđĐVełôűPűšŔĚJMiÖ“mľĎü¸Ű蔬 ţ+ń^Ń[S–Îę÷÷đ[ÇokłĚ’IŚHQFöU4‹É`ÍUłńKˇď5;ţč’ ‰ĺMRöÝfĹĺfPą<ˆbCšËŠB*C‚2ţ$i—÷†LśI\žĽ§Ë'•9…Ö(ď!’FWJˆÄ!¸ăœW/ăŢ5Ľőށýäsř_Z˛SyŞIrććŕZˆŁq#0 äˇpŁœČ3Đ&ńŻ„Ął{ÉźSĄÇl—ŮŚmB ‹0˜ËnŔp;zň*_xjăĆSxJ-^ČęŃŰCp°ýŚ<Ę$0T]ۙ•#ŢĂ+Łtjćź}¤ÜĢç@Ó5?´éđÍ´šTś¨Öčá>CÇîÚ3ąsüChŔäŇřbŰ]Ó|Wos¤Ł%îags=“Fśö“Ű›–uŘĚa3(]ŠÝ9Ŕć€:oř­´}ZĂJśĐu]fňöŢ{•ŽÄŔť#…˘Wf3Kë2` žž”Ëx]´‹=J÷Z˛ŇŁźwŽ8őŇŢO1¤‘•r>eu*@Ď"ą€úâ¤ë!‚+ĄŃŕI’¸pp>ňpO=ˆś‹â&ž†éďô}KC6ŞQ¨,avœÂHÝă m9ĂdqœdU3ÄZ&§ŚÉŠişÎ{cá%Í˝ĘIml˛’^xŻ/šđ÷‰ľo řƒLŒjşuÁ´}>ĎSÔRîĺZ)|Ɂ‘ŒĘET@ŽŇw0qL‡Ă:Ýîâ ŚśÖ$˝˝kňu™ŹGږÚo1˘Űh]vY‰$yz|>)đôÚ,šÜ:ö—&•!ďRî3ŕŕć@vŽ}č“ŏJƒU“^ŇÓO¸$At×qˆe!YŽ×Îđz)=qzäZŽŤaŚjąxRKytýaoeŇĺž6íˆ1*ć=ę]YAůdźŽƒ>Çڕ֥Śę7ş,vĐIâš5y,^HßěqgË ł`•.fÚä!l4™ÉÁ4čÉâmô3ŽŚšŚ6’Ł&ř]Ąˇ8ϙ˝xëT<â…ń ߈ ˝Ĺ•͍†˘–ÖsÚžő–6´ˇ›q`HcşgžIâő-V‡RÔu+m%o ‡Ĺ1jĐŘŹąŠť‡ű>(XŽâ0˜ź€9\´yČČ5ŻđŇĎP˛›Ä÷š†Š4aŠëFň o67; ľşo,źnHĎ\ňF ˝kń ÚkŔ˛čŐŽžÚœš\zœŤˇyŇvˇĆV‘CJĽAd’:fˇŹŸRą˝ˇśŇî&ű\kýŸŒ(Öł Ë ůĆ=ĺű¤ŠĆTŐ­üSáۍU´˜5ý*]E$15˘^FÓ ĚT ;ˇmV8Ćp¤ö5-Ÿˆ´[ÝRăJłÖ4ëBŘfâÖ+”y˘ç2•üExvZďÍçC†9´{˨¤Ô’âÎË;ˆä‘1pʗŢTryŤź'Żi:žƒoޝvtŃLظytőłźN…—ËŒ\śâÁŠšňYŠŒ€{?›T —ţ*Ă˙NčsQç{Ő(e˙‰ĺŃĎüťC˙ĄK@Ď6š GÇWś~"] | â[›™cžkvŠ[“Ĺ Ə"–š Ëo›§ďX֗rüCŃőd‹6vÚMýź˛n,’ÍfȸÎNDRˇžŁ đ‡ŽtÍU¤°żŐ´ˆ5íűhŹVáVgŽ šĄF–,IHÁ$qœ‘Ŕż7‹´; ?´kZ㇧ЖáUŸQM…b›ËcšśüĘJ_ŕvۓ€O†ocđƒ[&™ę â˙íFĂ cöżćîĎ_łvÎě|¸Ďď řsPśńV•¨jzyVoâŒčĆ6şÔc–0IËDńĐdŠtŢ2ńśŸŁ´6zŚ•&°Ú……ťŘÉ:™„SÝĂ ˇ–7 ! ôÎ Čâ´ԇ­¤żúŤţmaëŇçCżëm'ţ‚jďď@ˆ|Wâź=˘ś§-Őďď෎Ţ×g™$“L˘ěŞ>i’ŔšeŸˆĐhÓęşí„ţ‚!˙ľ.-ÔŔůËE+ RN9`r3‰ń#L¸×ź0şe˛Jĺő->Y<ŠĚ.ąGy ’2¸*T„F Š ÇâłźEáײÓô—Ń­ŻőtÓľeÔ%łźÔ丒ŕyOK™ —YKܝ‰Í;{MwIťśłš´Ő,n žr–’Epʎ ˜ˆČ8cľŕg…cŘÔwţ#Đôô•ďő­6Ńa›ČĎtˆO/ÍŘrxo/çÁçoÍӚóhô~ßČń Z ‰SÄŇj˙ŘńÜB%H^ĹíH XEćs)ń–ať4–:&šŠřŽ-WVĐŹ-â˙íCłĹ)ŽŇ>χk¸L`dƒČȨwRřŤáëŻ řÂëÂÚƕ¨ę^°¸šŽ!sŠ?—n˛‰Fűš-Ň*ăć ˝ł]n“â=Wžâ 'YÓľ ­[mÄv×I+D})%O­y爴˝răLř—ŁŰéÍýżk<Ö"hDR;iđŰH.\źdäŽĚu`xށ´–ˇńö¨ŘŮEŸkŁ^YČŃíPĽĽ´hSoR1¸ŔŔçŚF@.ëž4m7^¸Ň-ź5­ęňZŮE{s%ˆˇ+r<ŞźI*;6a“„Vč;œUČ|iáyłWţ.9uHcžĆn’9nŔ(Q†9Ňšm[ĂšŽ§ăíSQMsVŃôůô‹+]Ö n äˇlęĆHÝ×h•0Wgß<’8ăüᏝ7]đ˙†4ťČté,cƒLKaˇDQpóИČ6ŠLaU>e ëúNJ|;ŁÜ­śŻŻéZtďJą]^GPK0 AÚ9= Kâ-ĂQśÓoő:ÖúěâÚÚk”Ifç"“–çŇźwâú]Řč mQ5ť5–“q ý›ýaH݃ç̍ž=ŠŮw#ƒ“Vüoá=z÷Ä^!1vćĂ]ŕiŇéń¤A"TŰ#\FŇŚK†ˆś 0Éö6¨j’ćűJöťoý-w˝RÔeÍć›ĎK–˙Ń2P#sÍŹř­ô^ĂIľĐu]föö î;ˇ]‘ÂŃ+łĽŒu™“×Ň´<ďzä|WáÓŻxßDź¸:‚iöšmôRMg¨Íhë,’ÚRĐş;ąČqĘüŁ<í xĎâ"čńiöŇę~Đ/u @ZƒŞÝ¤żbQh.$3ƒ  TÚ˛ýěMżçĽ“ↇ¨řf]cĂzŚ›wömf×OşV¸I<¨äÔŐĽ!ĺVMď‚6ś1‘Y6~Ôí|Y ÄVŇľŒ>([Ֆ[Ÿ1ͰĐţČ$ff.ÇÍůNěąűÇ#š‚]Wťđ•˙†Ž´9Äń߉$–†îÚM_íNTo-ňÄNĺu\žu='D×ô}rŮît]ZĂScIip“*ˇĄ*HÚšíWâś›¨jńM kRiú4ËĄŠÄ°5źĂŊůžiUIP’# séF™aqkńZŐşÇewŚXD’)Qžhäşß9ČW‡’988Â>ťŐuß6ŤŤęśÚ>ЍĆ˙Ůđ<ČE´l]źł(Łt*rŚHw˙ .ƒýˇý‡ýšŚjă?aűRyřĆsĺçwNzS.|SáŰmWű&ă_ŇĄÔrƒě’^FłeŘ* „îů™”9$Öź§YŃźkwŻEXŢÇi‰ žUśţώÄۋľv“•7&câüŽI|kAâ4ť°0č“hpÜ4ž6ľžML\BÖ_$ávnó|Չścn<ľÎěq@Ä|E˘Žś43ŹiĂU+źY”óĘă9ňóťç8­6źb ëŃx˘HŽNťqdţ!ţ×I`—OK@<˙5w–í[•~B Ŕ`2ŠŔő;ށ˛nÖ,űr˙é<ľŻşší2MÚՈĎyţKË[{¨ÍxƒĹZ”*_ č:Mö˘śK{'Űľi–ÎčĄ Ç#;f6Č …r~aRK⼰k6ńG‘ěnŽŽ,ŒmpÁa–2‰ŁůDkćŠ ŽH‘[äŘâ¨x˙EżÖć†1ářŠĹSˆu–hŢ2ręÂ)AmăjAůŽxËŇü!âm%4ií/ôë‹Í?IÔŹÁ¸yLq˝ŐÍ´ąŞ‚ 8,ʧBĄW–uńÇLńŐýާs¨&šÚŸinšTňK’[ą,މ‘Xá ź¤s‚Nrm>j†Žź?áËŤ;‹3yaŞ@oXÇ'Ú­Ž •‘™-Ä 1çJí ×čÚ^˘ž1żń –q}ťG°´ha™Ľňć†K§(ť“ý!ś89Uâ˜eρ5Ű+/jz•ĺ­§Ú-ôۋT}Z÷Tňdą¸–çI8ŢČħ°šĺŞivw˙Ż|i;^é+ÍŚ‘ ­Ö‘y,ÖŢu­Ä÷ˆَZ=̛J‡Ŕ9\Đ­xoÄşOˆRá´É§/lá'†âÖ[iŁ$ewG*Ť€G ‘ƒŰ5Żş¸‡źĐîő;ýFŇ{›Ä‚"Fť{Ş;,FB3-Ö ŒČŘUQŒœ–ČÇeş˙?ýźÜ˙č÷­ZĘđ§ü˙íćç˙G˝jÓ˘Š(˘Š(Čž9ôťqš~÷Ls÷E|r?évărýî˜çîŠ+ę¨ˆŕ—ÄĎTŃÎt{_™[ĺ=˝YŞÚ9Ώkó+|§ ÷Ť5ó˜ŸăKÔëŁü4ƒŸuee8—NZÎßj´Ňgh‰@'ă$`ăœfˇŞŚ›˙ }7ţź-żôJV†wö>Ą˙?:gýý—˙Qý¨ĎΙ˙e˙ăUąEc˙cęóóŚßŮřŐŘú‡üüéŸ÷ö_ţ5[P?ö>Ą˙?:gýý—˙Qý¨ĎΙ˙e˙ăUąEsǃ­ő……u{?ę+ ďˆ]#Ę#oď.čN¸ŤăGżçL˙ż˛˙ńŞŘ˘€1˙ąőůůÓ?ďěżüjĄťĐ5 ˆ–?śi‹‰óćJ~ë†ÇúŻjޢ€1˙ąőůůÓ?ďěżüjě}Cţ~tĎűű/˙­Š(űP˙Ÿ3ţţË˙ƨţÇÔ?ççL˙ż˛˙ńŞŘ˘€1˙ąőůůÓ?ďěżüjě}Cţ~tĎűű/˙­Š(űP˙Ÿ3ţţË˙ƨţÇÔ?ççL˙ż˛˙ńŞŘ˘€1˙ąőůůÓ?ďěżüjě}Cţ~tĎűű/˙­Š(˜´đm˝ŚŠqŞZŮřv ű‘‰î˘GYeí8‡-ÓšŤ˙Řú‡üüéŸ÷ö_ţ5[P3űP˙Ÿ3ţţË˙ĆŞĐ5˝–çíšgď#DŰćKĆŇÇ?ężÚý+zŠc˙cęóóŚßŮřŐŘú‡üüéŸ÷ö_ţ5[P?ö>Ą˙?:gýý—˙Qý¨ĎΙ˙e˙ăUąEc˙cęóóŚßŮřŐŘú‡üüéŸ÷ö_ţ5[P?ö>Ą˙?:gýý—˙UM_ÂiŹY›-Z Pľ$1†č<¨Hčv´Dfş:(‰o Ý[ÁňiĂ„HŃĺUU‹S˙ąőůůÓ?ďěżüjś( F \ŮOmöÍ1|ŘŮ7y’œdc?ęŞoě}Cţ~tĎűű/˙­Š(űP˙Ÿ3ţţË˙ƨţÇÔ?ççL˙ż˛˙ńŞŘ˘€1˙ąőůůÓ?ďěżüjě}Cţ~tĎűű/˙­Š(űP˙Ÿ3ţţË˙ƨţÇÔ?ççL˙ż˛˙ńŞŘ˘€1˙ąőůůÓ?ďěżüjě}Cţ~tĎűű/˙­Š(˜žđm˝ţĄm¨_YřvęňÔćŢâdw’œüŒaĘţűP˙Ÿ3ţţË˙ĆŤbŠÇţÇÔ?ççL˙ż˛˙ńކă@Ô%–ŢOśiƒÉž<ÉyůqţŤýŻŇˇ¨  ě}Cţ~tĎűű/˙ŁűP˙Ÿ3ţţË˙ĆŤbŠÇţÇÔ?ççL˙ż˛˙ńŞ?ąőůůÓ?ďěżüjś(  ě}Cţ~tĎűű/˙ŁűP˙Ÿ3ţţË˙ĆŤbŠÇţÇÔ?ççL˙ż˛˙ńŞ Ţ ˇmeuŚłđéÔŐ6-áGóÂăßäîĆ;fşz(ý¨ĎΙ˙e˙ăTcęóóŚßŮřŐlQ@ŒÝ?NťľÔmîfšÉăĚȅܷÍ űČŁŤőĽ“EdѓEdѓEdѓEdѓEdѓEŸ¤ZęVVfýšĂΕÁ{™Tá¤f";úšˇ˙/îé_ř7˙Šh żâeýÝ+˙ć˙ă5—Wp]ÚĂq‘[‰ aĄ¸v*B3r5ăĺÇZłTuůé_őňßú&JҢŠ(Čž9ôťqš~÷Ls÷E|r?évărýî˜çîŠ+ę¨ˆŕ—ÄĎTŃÎt{_™[ĺ=˝YŞÚ9Ώkó+|§ ÷Ť5ó˜ŸăKÔëŁü4SM˙>›˙^ßú%*ÝTÓäŚ˙ׅˇţ‰JŔОŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¨ęňŇżëĺżôL•z¨ęňŇżëĺżôL”ĽEP‘|r?évărýî˜çîŠ(řäŇíĆĺűÝ1ĎÝWŐPţ =Á/‰žŠŁœčöż2ˇĘzzłU´s×ćVůOAďVkç1?ƗŠ×Gřh*Ś›˙ }7ţź-żôJUşŠŚ˙ČM˙Ż oý•Ą=Ew7‘nŇcqŕ*úą8ń$TľĚ^t%3´‚OŁ?˜žÚ nr'ĆÚD^&‹EšÔn"ž{˛Ĺ)Š?ł™óˇf3ć}ŕFzfşřźyeÚęĹşĘH#đ ×sđë×:ƒĹ“XęO{ßhŽŘܧؖl–ó1÷ţńÎ=kś qá›słvţó1$ŸÄ“Io ß™ÁŰřóXóc˝ťđöŸ‹6ť.‹ńjŹ÷FEź{Us…WÓq #§<ŕÖ˙ü&~ţŰ]#íł}Ąî ˛Éö9žÎfƒŸg•ż ťłF3ĹrĐ|2ˇłł›W°Ó´H<_ľyŠŰjkW‘eź–UŠYo*ĐÉĺ7 ˇ?.vŠŞZ߁›˙^ßú%*ÝTÓäŚ˙ׅˇţ‰JŔОŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¨ęňŇżëĺżôL•z¨ęňŇżëĺżôL”ĽEP‘|r?évărýî˜çîŠ(řäŇíĆĺűÝ1ĎÝWŐPţ =Á/‰žŠŁœčöż2ˇĘzzłU´s×ćVůOAďVkç1?ƗŠ×Gřh*Ś›˙ }7ţź-żôJUşŠŚ˙ČM˙Ż oý•Ą=T˛´6ĺeË* ˙iˆQú‘Ič2z+R Ä!ß-őŮš+÷ğ(?î}Ü~3!cĚGhß7+8öČ4“¸Ú$˘źcKń~ˇ'ˆ í`žúmAfW_6äşk­Čvŕm‘˛š€3žs•7Í>K֐kşäVGVMcű>9a}Ľnŕą>_˜Ęd\•g g€R;z*„q—˙4ű˝@L5­nŢČj‘jĂM†hŷڒe›1—Ă:ĺ—vÜą ÁÍŕ["ßěś­ŚŢ[^^ÝC{lńyËöšÚiŁĂĆČČY†RFĹç#5ÖQ@ŢŃěô *ÇÍ0øď•÷źŽĚ]ݛť331>¤×=ŕßÉá‹×žßĆ>!žŽiŢ{˜ǒͅÝ$‹n˛’8ÇÎ0GÝŽĘŠ(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š*ŽĄ˙!+ţž[˙DÉWގĄ˙!+ţž[˙DÉ@TQEyÇ#ţ—n7/ŢéŽ~袏ŽGý.Ün_˝ÓýŃE}UŕĂŃř™ęš9Ώkó+|§ ÷Ť5[G9Ńí~eo”ôőfžsüizt†‚ŞiżňÓëÂŰ˙DĽ[Şšoüôßúđś˙Ń)XŃEQPýŞŰĎň>Ń›˙<÷ß•MHaESQPÝÝ[ZD˛ÝÜEoH‘•‚îÁr{ł2¨Érjj(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š*ŽĄ˙!+ţž[˙DÉWގĄ˙!+ţž[˙DÉ@TQEyÇ#ţ—n7/ŢéŽ~袏ŽGý.Ün_˝ÓýŃE}UŕĂŃř™ęš9Ώkó+|§ ÷Ť5[G9Ńí~eo”ôőfžsüizt†‚ŞiżňÓëÂŰ˙DĽ[Şšoüôßúđś˙Ń)XŐmE™mFÚY‘ t3Oŕ ?…Y¤eVRŹR0AďIꆷ:ˆt:+˛ 8L[pAAĎż×Ţš+Cű˘Ą‹ŞČčŒ‰C­ř€ăOÍߕöíĎłăVńŒznĆě{fœŞŞĄT `ÚŚ*ĚmžŚ^ęËŤ[ޤ>,ˇšo]ÚžŻuŹ´š[@şŒÉäýœÎŰsˆS÷H7•Ăt'ĽÔţ ęV>*Š=•ŢžÚÄZ\[h÷Żĺ™'7Řű8ufRѕ9PāžŢO č˛hW:ŮfÂęyŽ%‹ÍpL’ĚÓ;Îĺ>c#ĆfOđűÂsęÚ2é÷ (ž]Acű}Ŕ.VA(™a嫗$(ݓœäć„qŢ1֛˙^ßú%+Bz(˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ ٍČGJ˙Ż–˙Ń2U꣨ČGJ˙Ż–˙Ń2P•Q@EńČ˙ĽŰË÷şcŸş(Łă‘˙Kˇ—ďtÇ?tQ_UCř0ôGž&zŚŽsŁÚüĘß)č=ęÍVŃÎt{_™[ĺ=˝YݜÄ˙^§]á Şšoüôßúđś˙Ń)Vꦛ˙ }7ţź-żôJV„ô‡“KUľ0M›HRĘ$#˛nżńÜŇnČi]€žś,@v*:Č#mƒţż­XŒŠě"ŽÚ; ¨#á=śíÇĺŒWg$ěϕ˝üŹ˙Ď=Çgţ;Š”ÝĆŇčMEx›¤=ľĚ^ >Đ4űqă[ÓqâKy‰ÔB VeŮ"—÷n@„Ÿ5ŔFÜTňďęţ5Öm “I7šŽşú(!2•łžhaˇA"2dĆrIRH„÷$ШQ\çĂ}Zď[đ…ľýôŃ\Oç\@n"]ŠpąO$K2Ŕ¨Ž>n8Ż8đ6ݧńŁLÖ/ě5Ë][UŇu4xo4{¸´+5‘‚ŇF ŞěĚ _2R3ó  ŐESQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEUCţB:Wý|ˇţ‰’ŻUCţB:Wý|ˇţ‰’€4¨˘Šň/ŽGý.Ün_˝ÓýŃEú]¸Üż{Ś9ű˘ŠúŞÁ‡˘8%ń3Ő4s×ćVůOAďVjśŽsŁÚüĘß)č=ęÍ|ć'řŇő:č˙ TÓäŚ˙ׅˇţ‰JˇU4ßůéżőám˙˘R°4'¤<ŇŃ@}–mýů^ky÷Ćvţ•5-’HwšM´˝1´ů´ćÓ­Îv‘ڎ0ŠŽC#rˌĚĚÇ=I$ňj”ž𼚳ęňxoF}EÝ${śąŒĚ̌žÝĆU 炠ö­š)ˆÉšđφîu틟é3jYCöš,ăi˛Œň7|ŹŞG<t§jđţ٧7PĐ´Ëť™Ž ´ö‘źFVběűHĆâĚĚN2KÔÖĽź0Ű[ÇoopĂ„Ž8Ô*˘€=)Żkl÷‘Ţ5źMsosŃŠe ÔQ öݠЍ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¨ęňŇżëĺżôL•z¨ęňŇżëĺżôL”ĽEP‘|r?évărýî˜çîŠ(řäŇíĆĺűÝ1ĎÝWŐPţ =Á/‰žŠŁœčöż2ˇĘzzłU´s×ćVůOAďVkç1?ƗŠ×Gřh*Ś›˙ }7ţź-żôJUşŠŚ˙ČM˙Ż oý•Ą=S]•ł ’{P¨¨c–y#3&ŸxmŔϝĺü¸őĆwcđŠQ•Ô2TŒ‚;ŇM1´Đ´W/măß \jŸŮÉu|’ÇąYĽÓ.bś{„‘ŁhÖvŒDÍ˝YpäŒ ×QLAEdřŻYţÂŇá˝ű7Ú<ÝBĘĎfý¸űEÔPnÎÝówcž1‘œ Idš&y-eśa# IJ’BąP˙)# aÎpĂ €5W=áOhž(ňŰF´‘Kn.bžăGťś‚XÎ0É,ą*6C$‘Čŕ@ Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@QÔ?ä#Ľ×Ëč™*őQÔ?ä#Ľ×Ëč™(JŠ( "řäŇíĆĺűÝ1ĎÝQńČ˙ĽŰË÷şcŸş(ŻŞĄüz#‚_=SG9Ńí~eo”ôőfŤhç:=ŻĚ­ňžƒŢŹ×Îb/SŽđĐUM7ţ@úoýx[蔫uSM˙>›˙^ßú%+Bz­¨Ą{B$Fp:˛†‡âfŠM] ;Rßié`.–ęl‡Ü1ôúűuŽ>Đ~č°RŠň;˘ŸáRÄŞţřQö[o?Ďű4>o÷ö ߝMI-FŮă°řk^ˇŃYš÷]ť´łń]îĄ'‡šÚ1‘ NgI#Ű™ˆĘ\(.ÁČ ŒjÓWĹeᏲęxšóÇáűšnšĐÝŞź§Q2üډ˜˜‚°E;pĄw/źQLG‡kú,OŤ¨ťđŚŻwâŸřLmnżľ#°•Óě#Qă>x|¤€*˜óň˛–*0ZŻI¤„ˇÓĹÔ5?ÇŤřîl—O’ë÷Ňę=ŹĎŠgO/ÍÚŰHb7Lö:(™ř_k}gŕ‹+{řn-ÜI;AĂfXmĚÎmă|’w,&5 žĹržľ‡Oń.‰§řBÇĹömş<:ŽŹnÚÖ¤Fŕ˛ď€ňXŽÝůí^ŁEQE1Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@QÔ?ä#Ľ×Ëč™*őQÔ?ä#Ľ×Ëč™(JŠ( "řäŇíĆĺűÝ1ĎÝQńČ˙ĽŰË÷şcŸş(ŻŞĄüz#‚_=SG9Ńí~eo”ôőfŤhç:=ŻĚ­ňžƒŢŹ×Îb/SŽđĐUM7ţ@úoýx[蔫uSM˙>›˙^ßú%+Bz(˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ ٍČGJ˙Ż–˙Ń2U꣨ČGJ˙Ż–˙Ń2P•Q@EńČ˙ĽŰË÷şcŸş(Łă‘˙Kˇ—ďtÇ?tQ_UCř0ôGž&zŚŽsŁÚüĘß)č=ęÍVŃÎt{_™[ĺ=˝YݜÄ˙^§]á Şšoüôßúđś˙Ń)Vꦛ˙ }7ţź-żôJV„őÄŤ +ôQĐu>‚¤¨o"2ÁľqšY]sÓ*Á†}˛)=†ˇ.CŁërCö‚mȀîÜ}ˇçü*´2 #ŕƒÔÁÜŰ>&´ňqö[Ď´cýW”qŸ÷ţî=óřV ʄɏ1ݤ|tÜĚXăŰ$ÔÇqłśřm-ßď|;ŽŰi­ŞIĽ&Š ˇ6ípˇ mŒ$­*ŤJťAd‘œfˇ˙á"đ˙öďööî—ý݌ýƒíqýŁÎ|źîéĎJóČ|{kŚśšžĄ>šiâ;ÝN>]RG´¸‰ďćtÄ-!…ÂáՀRŻ´ˇ;Ş–ˇá˙^x‚(ŁÓŻŁ´ƒÄđ_ŞŰ:+l/ÚNTܙŒ{‹ňšbř,ÖĄǍľ˘ř˛cQHlt]]ôůŇ-Tğe‘“9ÇĎćmůHP#q†9>é7š'ƒíŹ/ĄŠŢ:âsonKu–y%XAŠá8ăĺăŠâ>ř"ëĂúdžíŹü/ý”Ú4o§Ź‹ˆö´B ĆF˘äýâŽĎ/jäP­QEÄQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEGP˙Ž•˙_-˙˘dŤŐGP˙Ž•˙_-˙˘d  *(˘€<‹ă‘˙Kˇ—ďtÇ?tQGÇ#ţ—n7/ŢéŽ~č˘žŞ‡đačŽ |LőMçGľů•žSĐ{՚­Łœčöż2ˇĘzzł_9‰ţ4˝Nş?ĂAU4ßůéżőám˙˘R­ŐM7ţ@úoýx[蔬 袊(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š*ŽĄ˙!+ţž[˙DÉWގĄ˙!+ţž[˙DÉ@TQEyÇ#ţ—n7/ŢéŽ~袏ŽGý.Ün_˝ÓýŃE}UŕĂŃř™ęš9Ώkó+|§ ÷Ť5[G9Ńí~eo”ôőfžsüizt†‚ŞiżňÓëÂŰ˙DĽ[ŹŤyďí­mí[I¸ŰĂâ–2ŽB†˜3‚8Î9ëX4Uś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ŐGP˙Ž•˙_-˙˘dŁí—żô˝˙ż˙ńtĹw—öŽö2ÚÇní#4Ž„ą(Ę O÷ł“ŽóŔ­Q@EńČ˙ĽŰË÷şcŸş(Łă‘˙Kˇ—ďtÇ?tQ_UCř0ôGž&zŚŽsŁÚüĘß)č=ęÍVŃÎt{_™[ĺ=˝YݜÄ˙^§]á Źüř‡ţ}4/üO˙ČŐĄE`hgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŠ-Žłç/Úíô”‡Ć ŮdqÇVAçýĄý*ĺQEä_ú]¸Üż{Ś9ű˘Š>9ôťqš~÷Ls÷EőT?ƒDpKâgŞhç:=ŻĚ­ňžƒŢŹŐmçGľů•žSĐ{՚ůĚOńĽęuŃţ (˘°4 (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (Ş$wĂş”‘ł#­¤ĽYN!4ž!Đb•â—ZÓŇDbŹ­p ‚:ƒÍ7ţ_˙ĐsM˙Ŕ”˙ěŁ)k¤QF""€ŞŁ€§yíë@_ü$ž˙ ć›˙)ţ4ÂKáßúiżřŸă]§žŢ´yíë@_ü$ž˙ ć›˙)ţ4ÂKáßúiżřŸă[ßđ–xwű{ţ˙řHtŸíŒgělí3ţŻ;şsҤŇ5ű}SPÖl­Ňe“H˝[;‚ŕÎÖđÎ ŕœł ç!¸Ć çá%đďý4ßü OńŁţ_˙ĐsM˙Ŕ”˙í<öőŁĎoZâ˙á%đďý4ßü OńŠě5&ţc–§gs(]Ĺ"™Xă××[硭ařŐ÷iVě@ޗöĹşćeSƒŰ*Ě>„Žô óE/<ň$QFĽÜŕ(I5›˙ /‡č9Ś˙ŕJ\¸ Ú̎ĄŢ1*Ă •‚V^=™TBí[úžŤgĽŘM¨jwśÖVp.ůŽ.%Xă}Y˜€š Sţ_˙ĐsM˙Ŕ”˙?á%đďý4ßü Oń­ýGĖvWZź˙ŰwfÖŇHv˛nó\n'?t¤ ‚3É^Đý__ˇŇő Ęá&i5{Öłˇ( ëo4äśHŔŰŽ2rWŒd€wţ_˙ĐsM˙Ŕ”˙?á%đďý4ßü OńŽÓĎoZ<öő /ţ_˙ĐsM˙Ŕ”˙?á%đďý4ßü OńŽÓĎoZÍđćżoŽéňŢÚ$ÉWˇVl%ö÷@ç‚x-ßdŔçá%đďý4ßü OńŁţ_˙ĐsM˙Ŕ”˙í<öőŁĎoZć,/ěľš[¸.ŁVÚ́€>œUŠ‹\lřśÉ€˝„áČţ-˛Eˇ>¸ÜŘôÜ}MK@Q@EńČ˙ĽŰË÷şcŸş(Łă‘˙Kˇ—ďtÇ?tQ_UCř0ôGž&zŚŽsŁÚüĘß)č=ęÍVŃÎt{_™[ĺ=˝YݜÄ˙^§]á ˘Š+@˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(ŹďČľŞלßú­ĄâDy<;ŠGłťZJTd’Pŕ@,űĆúšnúĽöŘeýě.˛F˙2:œ†Ą¸Łí+@wŃžŠ}ĽhűJĐŠ˙hč?đŚ?á Ýü'ŢNϰm˙Mţ×Î~סďmóż{ç}ÝźçrKűëoŠž'‹TžšŇü%'ˆ óîěĺhÝŽ˙łt˙.)ä4PˇŻŢl+ëßiZ>Ň´ ťžőKí+GÚVwÖ?‹Ű:T#ţŸ­ôzUż´­exžu’ĘÚ!Ë˝őśŐîq*ąÇĐ)?@MIrqŹč§ţžä˙ŇiŤ›řĽ.Ť­kÚ/…4M?OÔLR.ŻŠŰŢŢ5ź- N<”gX¤9iś¸H"Đę.ąj:LÎB˘]ść<ş Uy÷fP=ČëSí+@ĎÔřKž/žmřĹ_g–ků1Œšuë[•Ÿj8@‡Éi0„yR—Šľ­NÂm3ĂŇ^ř›SƒÇE§km“Í{?컍Çí9Ţc´Ńůť˛gwŤÜ~Ň´}ĽiX"´¸şÖ#Đtťërx~ăĆSZŘßèJ&źą].âVO?;äO=dPů$„R 5f|BŐĽâ›Ëf•D(Kýa—íěeóƒł9ی)!›Ü>Ň´}ĽiŔĎŠX7Ĺ;ű_x—QÓo"źľMÂ+é ŽîŠ2Ě"Sś|ĘfGÜb¨?'ŢŽ{Ią›KđáńMžłŹÇx|y=°€_Č-|‰ľ÷ˇ’3>YĘČí¸Š`Ç €Ż_űJŃö• ‹\ń#üLxnőŤ M|GäÇiqâ;•’M?ĎÚŞšjŔbpĐa„ťÎî. 6ąßŰč_đ—˙ÂEŻÉ¨IbąÉŠJÖÂŐőÖ´0ů;ź˛˘68%K)őŸ´­iZĎՎ|Wa˙^7ú2łY÷R‰źUkˇŸ.ĆmřţŇEˇ>™ÚŘőÁô­ QEyÇ#ţ—n7/ŢéŽ~袏ŽGý.Ün_˝ÓýŃE}UŕĂŃř™ęš9Ώkó+|§ ÷Ť5[HĎö=ŽYOĘz wŤ5ó˜ŸăKÔëĽđ ˘Š+@˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(“hú;ť;čúkłYšŇ2I=I$sIý‹˘˙ĐK˙Ŕ8˙řš˝EQţĹŃč Ľ˙ŕüMŘş/ýtżü˙‰ŤÔPě]ţ€ş_ţÇ˙ÄŃý‹˘˙ĐK˙Ŕ8˙řš˝EQţĹŃč Ľ˙ŕüMŘş/ýtżü˙‰ŤÔPě]ţ€ş_ţÇ˙ÄÔśÚvk/›k§Y[Ɍo†ÝăÓ łE6hٚ&ŠhŇHÜa‘ĆCB SţĹŃč Ľ˙ŕüM^˘€(˙bčżôŇ˙đ?ţ&ě]ţ€ş_ţÇ˙ÄŐę(ö.‹˙@]/˙ă˙âhţĹŃč Ľ˙ŕüM^˘€(˙bčżôŇ˙đ?ţ&ě]ţ€ş_ţÇ˙ÄŐę(ö.‹˙@]/˙ă˙âhţĹŃč Ľ˙ŕüM^˘€!´´´´FKK[{ec’°Ä¨ őŔ5PEP‘|r?évărýî˜çîŠ(řćqwmó(ĎQţȢžŤżsDpKâgŞi ťGľů”ü§ ÷Ť5…ŕÝJŐü9cwe} °K Ë Pźn7+m`Č ň3[iś˙Ÿˆżďą_=‰„˝Ź´:ŠIr"Z*/´ŰĎÄ_÷ŘŁí6ßóńýö+Iv4ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*wj:ÜĂ˙}Š>×i˙?PßÁGł—`ćG”|s?éVĂr}óÁěŠ+#ö‚ń>ƒŚÜC6ĽŞCml˛ˆÄÂ'”dČ_‘Xç ߕô”ą4éS„%+;#Ó”›iű-řŁ_]R˙ĂĂS›ű2×O–ęːÍ’­Ŕa›ĺÎÜą8É&˝Ńľ˝Xř˙›ó˘ŠÇ-“tu}BşJz :ŢŹĺţűę“űkU˙Ÿů˙ďŞ(ŻDĘČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,„:ƨĺúűęí}Lđo§Á˙jŠ(cI&ü^×umcÇ:ĽśĽzóçß\[ÚĆ@  Xc œ ““Ŕ˘Š+ăę6ćŰ=%ą˙Ůgwenhywfar-4.15.2beta/doc/dialog/images/qt4-2.jpg0000644000175000017500000007565012364015347016405 00000000000000˙Ř˙ŕJFIFQP˙ŰC  !"$"$˙ŰC˙Ŕن"˙Ä ˙Äľ}!1AQa"q2‘Ą#BąÁRŃđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚáâăäĺćçčéęńňóôőö÷řůú˙Ä ˙Äľw!1AQaq"2B‘ĄąÁ #3RđbrŃ $4á%ń&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚâăäĺćçčéęňóôőö÷řůú˙Ú ?ú/GŃíćľÎMĂĺg =MdxĎTđď†Ú)ôŃ{¨^1KKVÝ,Äu<Gv$]…˙ {s˛?šýď­|ßń›[Őt˙ŒşŹĐ¸ŒĂkíŒíŒ sˇęĺŤęrŒńřÇAJÉ_Ëc‚N1‚mŁ?ˆŚÓáűfłđýaą2Ig~ˇ2Ä=Z<.@ď´ąö5ŮéŢŐôË}KMŽÂęŇáĹ*JpĂúcČŻ–|IüZ‹0ô(¸ţUé?˛Ž§w=ż‰4ŮZÚŢé&ˆ@F6ĺƒĺőęçy \ş‚ŞçÖÚ7ú“ BNÉŃý‹Śϕ§ýüŁűL˙Ÿ+Oűů\'íŤęz'Ă;CIšk+ĽżąŒM ႽÔJĂčT~ľÎü1ń˙‹žĎĹמ*´‹Z‹Lń ޟ žMuÉ„ŞŽč”tsóőňnŹÓľßŢlĄ^ÇŽ˙béŸóĺi˙(ţĹÓ?çĘÓţţW€j:×âfĄho5$´“Ĺ:u­˝ąŸĘň#“OiYH9†JńĎ~+Ă?|s‹8dţËťÔŻź/¨j6Z—Úškˆ¤ľÉw mÉ\ěĘqœOˇ—v?fťLbéŸóĺi˙(ţĹÓ?çĘÓţţW‡Ü|\ń†™ĄxJĂű LÖľÝcImAĽś3Iˆˆ„.ŘÓ"V-ó`OqZúĹr×YĐëĂi&Ľodó]Ţ ĺË;aĄ-‘/1# ćŸś—ó1{5ŘőŸě]3ţ|­?ďĺŘşgüůZßĘó_>%ń‡ˆn|Y‰çŃŽ#ÓľëË(DDąyr@1÷YžcŢ˝C?ôÎ/űčŐ*“j÷bqŠčCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙ž>y÷x­Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙+Ÿńö‰Ľ_ĹĽÚčÉŠę“&ôľˇ¸7ť„_Ż'°5Ógţ™Ĺ˙}đ{Ý_Rľń—ˆćI<šŢýă-Œˆv íˇÏĆÔĂSRMę{Ü?“Ă4Ä:nÚ+úž…sŹ[éaeń„#ą˛$şˇşűJEîŕŔ{€kŤIŃ&śY⾲’)rÓô–KÉîÖ]ŁšP¤œţę+Ň|)áŰ? x^ Ě,‹łI+ŸšY–sîMtTVxuOđDߍÄăÚu§{1ńpb+!˛1óˇń{QVž9ôťqš~÷Ls÷Eő”ęsSŒťŁĆjÍŁŐ4s×ćVůOAďVjśŽsŁÚüĘß)č=ęÍ|Î'řŇő;(˙ Ug˝E‘Ńmuś1BĐŘM*înT Až ň+BÍWíĂţúÇţ ŽřŠ>Ü?čŹŕŞç˙ˆ  TU_ˇúëř*š˙â(űp˙ ~ą˙‚ŤŸţ"€-QU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐWíĂţúÇţ ŽřŠlšŒqFŇKgŞÇĚďŚ\*¨I%0˝\˘šY|CâQ+ü8@Ço›;Ťăý " P úšoü$^'˙Ą=żđ&Oţ3Z{)í"u”W'˙ ‰˙čOoü “˙ŒŃ˙ ‰˙čOoü “˙ŒŃě¤Ň'YErđ‘xŸţ„ö˙Ŕ™?řÍđ‘xŸţ„ö˙Ŕ™?řÍĘAí"u”W'˙ ‰˙čOoü “˙ŒŃ˙ ‰˙čOoü “˙ŒŃě¤Ň'YErđ‘xŸţ„ö˙Ŕ™?řÍđ‘xŸţ„ö˙Ŕ™?řÍĘAí"u”W'˙ ‰˙čOoü “˙ŒŃ˙ ‰˙čOoü “˙ŒŃě¤Ň'YErđ‘xŸţ„ö˙Ŕ™?řÍičúäˇqźwšNĄmy °Ek,ŕ)ÎÖʧCƒÔ•<‚fP”UŘÔÓŃ4U_ˇúëř*š˙â(űp˙ ~ą˙‚ŤŸţ"¤˘ŐWíĂţúÇţ ŽřŠ>Ü?čŹŕŞç˙ˆ  TU_ˇúëř*š˙â(űp˙ ~ą˙‚ŤŸţ"€-QU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐPßĸ2Űę)!wĎa4H 8ł $€9ä;Ňý¸Đ?X˙ÁUĎ˙@¨ŞżnôÖ?đUs˙ÄQöá˙@ýc˙W?üEZ˘Şý¸Đ?X˙ÁUĎ˙Gۇýőü\˙ńjŠŤöá˙@ýc˙W?üEnôÖ?đUs˙ÄPŞ*ŻŰ‡ýőü\˙ń}¸Đ?X˙ÁUĎ˙@¨ŞżnôÖ?đUs˙ÄQöá˙@ýc˙W?üEZ˘Şý¸Đ?X˙ÁUĎ˙Iöřˇlk}A$ ˛Ćö,Ž2UJeą‘œŒŒâ€-ŃU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐWíĂţúÇţ ŽřŠ>Ü?čŹŕŞç˙ˆ  TU_ˇúëř*š˙â(űp˙ ~ą˙‚ŤŸţ"€-QU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľETńP[ęUÁ1}‚o4œ6͛śđFěc Œć—íĂţúÇţ ŽřŠľEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐWíĂţúÇţ ŽřŠ>Ü?čŹŕŞç˙ˆ  TU_ˇúëř*š˙â(űp˙ ~ą˙‚ŤŸţ"€-QU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐŘdŽh’XdŔee9 BĽ:€ (˘€ (˘€<‹ă‘˙Kˇ—ďtÇ?tQGÇ#ţ—n7/ŢéŽ~č˘žŞ‡đačŽ |LőMçGľů•žSĐ{՚­Łœčöż2ˇĘzzł_9‰ţ4˝Nş?ĂAY–Ě#ÓěU@ěVçw1)5§XFMśÖC?ňăm˙˘R°4+řŻÄx{EmN[;ŤßßÁo˝ŽĎ2I&™!EŮT|Ň/%€5VĎĹ.ßźÖ4ďřG˘H.'•5KŰu˜G•™BÄň!ˆ ç.Ľ\ŠËř‘Ś\kŢ]2Ů%rú–Ÿ,žTćXŁź†I\*B#T†ăŽq\żŽ<xֺ֗W÷‘Ďá}jÉMćŠ%˛›j"Œ=ČŔ7’ÝŒpO Ď@›Ćž†Íď&ńN‡˛\f™ľ‚,Ŕc-ťŔ íëȨm|u᫏Má(ľ{#ŤGm ÂĂö˜ó(HÁQwnfT{ pŽŃŤšńö“q˙‹LÔţÓ§Ă4ŇiRÚŁ[Ł„ů wťhÎĹĎń Ł“Ká‹mwMń]˝Íţ’Œ—ş…ĚöMŰÚOnnY×c0m„ĚĄv+tçšéźKâśŃők *ŰAŐu›ËŰyîV;쎉]˜Í,cŹÉ€2zúS-üyávŇ,ő+ÝjËJŽńŢ8ăÔgKy<Är’FUČů•ÔŠ<ŠÄń^‹ŞęŢ7ŃoěumCIśľÓoĄšîĎěĺ÷É-ĄHșa„Nr#`äg×ü9Ži—QéŢľÔdÓdą1IshlZâyŢY^Oľ=Ú11“&ďÝŠ;žN9€=?Vń‹¤5şęşĆŸ`n›e¸ššHźÖô]Än<ŽE{âŻŘŮYŢŢřƒJśľž m'šň4Žŕ0؜>Ac=Ey]•Ž­á­/J¸Ö48uY_ÂşuÜ2Ţ@że’c9s#€Ń1•C˛n?ť^Efé>ńxsš•¨Ö¤ü!cŚÍm§}ƒĚ• }âń ě`ŕ„d7÷ą6FAŞşÄšŇ/Ź˙ šČđľłi~Ň´Ç2î´˛†ćĘ$|˘ůœńÉgŽJľŞK6čgŹ/˙ šv—­ţ™?ýtoç\׍üJ|9gbb´ŽęďP˝[+T–ŕA˜Čď™$ ě\F܀I;@‘]ű§\×Vţuă[ýCFk[ QŢăδŐCyǃ•ČVÚs´äŤÇ9Ůkúž›}ă 6ÇD‚͆â Cí0:œç cGČŔŕ Îá‚yÁeăo Ýi7ú ÔŢßNÁź–ŇŰI#*Z9U\nw›śkˆ‹áĹőφőý5˘Ňź=˘örÚišEÄßeś–Ţ_7xu2™"ąP€€›š’ÇŔ:›hÚŔš;[ Néěe‚I5ťÝ[sZNgŒI%ÎF_ˆŁ›–ČŔ3˛˙„ßĂŁB}jKŤ¨mRqm˛k ă¸2œmŒ@Č%f!)$ŒŠ†ˆ>ƒG´ŐeÔ¤÷wc ‹9ŒĆä#š„ÄĚY1|Ź äԀsľ7ĹşžŸŚjĂĄŰëZNŠöëkTş–Kiɒ)Œ0%e‘ƒţSˇƒ‚MM3Â:ŃŐtígQ—N[ĂâI5Ťč`whŁS§If‘ÄĹAr3Bçç8čÇ^mőżˇĘ-c¸ű##Y̡|ŒEäó|ÎA١vqŠŠđçÄçÄמ*ž+ˇ¸ąłÖVÖĚ=š…˘AejŞÁ„˛Kăp$Ž€•ŠřKZţŐÔu­:]9ď‰#ÖlažGX¤Q§GfńĘÁIBq+ăä8<Šđ÷I×4šźG{Ż4]kˇŰ’;ă‰>ËoBYT–Î9ŕŕghP´ńî´Îˇ÷ž˛‹A}v].ĄŐK•uźk4‘á0Ş…iT}Ů€Ŕóƒ[ş?ü7Ťę‘éś7łźÓ+=ťÉg4PÜŞŒ“ Ž‚9F9ů¸çĽaxOáö›§Ď&ĄŤ ď/˙ś/ľTęW2ZÄfťšX™`fň•Ő$\œ6â ?1Ŕđď|e‹ź9ŤëzŒ_ŮWrÍwrÚíěć÷}Źń[WéíPp3†ĂvÖź'}ŽZčÖş”Żwy<ZfĘuŠáăGy<šJÜ(˛ĘÄÎH}#ĆžŐuƒ¤Ř_ź—$Č#fś•"œĆpâ)YDr•﹛垖ţ?xÁPŢčwÖţť¸YMœŇ=ÚÕź=Äeƒ™}ćó nR­żü9žđ毣%ÂGue˘ď—rřƒPŘyO‘fíäDŰ\‚Aa‚ŰUr0ëŤœwŰâ˝DúŰ[˙9kwus7ˇĹ7Ç=m ţrSŠć×!¨řęöĎÄKĄ/|Kss,sÍnŃK`xĄxŃäR× ™cŔ`­ótŕă ó˝ëúŇî_ˆz>Ź‘fÎŰIżˇ–MĂĺ’YŹŮÉȊC06óÔdţńΙ޴–úś‘ąýŁmŠÜ*ĚńÁw4(Â2ʼn)$Ž3’08ćńv‡agök\Đôő2Ü*łę)°ŹSylw6ߙI@ëüŰrp âcđÍě~kdÓ"]Aź_ý¨Řd bţ×óźÝŮëönŮݏ—âájŢ*Ňľ COO*ÍüC ‘Ć×ZŒrŔF 9hƒž: ƒ‚q@ΛĆ^6Óôv†ÂĎTҤÖP°ˇ{'S0Š{¸avňĂá$$™Á9V‡ŠüL4ӕt­CUšÔnţÉmmdbÎ"’RI–DPD˙ĹéĹyŽŠĄëß.……ćŇľ-jóĂ?١ˇVc՚â{ťo$ÉcšpŤ)ËH‹ŹpÄńŒ€ K?č ĽOŞÝÇ  kŁis­4p43VŘNℕe`Uˆ!´őčz~—Ť­iśš|Ű|ťŠî‘"}Ă+‡'#§<םxƒĂÚΏ-”ž:ŽĄ$ŇÜMŠjý‰ľ'•Ö%R­r˘%ŒŹaX*Ž< fřwK×ü;ŚřbűRŇPšą›VěEŐ°˜}˘ä˨IŽ"DQBěÂČŘQ‚´ę—>(đőś5{{K‡M2…Ü—qŹ;Ă+źš ŹĎPGjѡź†ćŢ;‹yٚT$i—÷†LśI\žĽ§Ë'•9…Ö(ď!’FWJˆÄ!¸ăœVwˆź:öZ~’ú5ľţޚvŹş„śwšœ—\)ăÂIs!ÁRë"Š`ť“ą9 goiŽé7vÖw6šĽÄÎRŇHŽ–Ⴓ vٜ đŹ{Ž˙Äzž’˝ţľŚÚ,3yî‘IĺůťO ĺüř<íůşs^m“ŻŰů!‹Aq*xšM_ű;ˆDŠ Ř˝Š‹źÂÎe#~2Ě7f’ÇD×5?ĹŞęÚľ…ź_ý¨`–xĽ1ŔşGŮăíb7 ‚Œ yunę_|=uáż]x[XŇľKĂö1Ä.c•'ňíÖQ"ˆßsEşEBÜ|Á—śk­Ň|G˘jóÜA¤ë:vĄ5Ťm¸ŽÚé%hŁ$ŠŕőŻ<ń—Ž\iŸô{}"yżˇígšÂäMŠGm>a ĂŤ—Œœ•ŮŽŹĐ6’Öţ>Ńľ(ĄÓítkË9=Ş´ś męF#—ôČČÝwƍŚë×Eˇ†ľ˝^K[(ŻndąĺbŽG•W‰%GfĚ2pŠÝsŠšŸ>‘ekşÁ­Á¸t–íXÉşíŚ ěűç’Gü1ⳌëžđƗy%Œpi‰`l#‚@–čŠ.u3&Ő)Œ*§Ě¤=XńO‡t{•śŐőý+NăiV+ŤČâbŠ fˆ;@' ÁŠoüE˘Řj6Úmţą§Zß]œ[[Mr‰,ÜăäRrÜúWŽü_Kťâ ĄĂŞ&ˇf˛Ărn!_łŁŹ)Ł0|ů‘łÇą[.äprjߍü'Ż^ř‹Ä&#ŽÜŘk˘ :]>4ˆ$J›dkˆÚTĂ)pŃÁbB† ĎćŐ R\ßi^×m˙˘%ŁÎ÷ŞZŒšźÓyérßú&Jnyľâ_ž‘ŤŘi6şŤŹŢŢÁ=ÂGbÖë˛8Z%vc4ąŽł zúV‡ď\Šü:uď藗PM>ÓMžŠIŹő­e’[BŠZG`V99_”g´ĎüD]->Ú]OĂÚ Pu[´—ěJ-ĆxŇDÁ*›VBż˝‰ˇüŕT˛|PĐő ËŹxoTÓnţÍŹÚé÷J× '•š‚Ú´¤#üŞÉ˝ăbpFÖĆ2+&ĎÚŻ‹!¸ŠÚVą‡Ĺ z˛Ësć9śŮŒĚĹŘůż)ݖ?xäsPK˘j÷~żđŐև#"řž;ń$’ÂĐÝŰIŤýŠĘĺžX‰ÜŽŤ“Âî g¤čšţŽ[=΋ŤXjp#ěi-.eVô%IűW=ŞüBśÓu ^)´ jM?F™aÔ58–ˇ€˜c˜ą_7Í*Š*Dd}(Ó,.-~ ëZ ˇXěŽôË’E*7Í—[ň9 đňG#gGÁ×zŽťâĆŐu}VŰGŐ5ßű>€Cyłś‹ˇ–e´n…CŽBôÁÉî˙á%Đś˙°˙ˇ4Ďí\gě?jO?Î|źîéĎJeϊ|;mŞ˙dÜkúT:ŽP}’KČÖlťA°ß32Ç$€:הë:7nőčŁKŘí!ń$ĘśßŮń؛qvŽŇrŚäĚcÜ_•É/‚Ŕíh^wcçĄć׌Cá=z/IÉ×n,ŸÄ?Úé,ééhŸćŽňŃýŤrŻČT U8ąç{Đ ž_ř¨lĎý:O˙ĄĂWüÚÚ_řžZœ˙Ë´ßúUwÎ÷  ýsŋ§ęßŮ6Z.Š­_Ź s,"!äÄĚĘŹÍ,ˆż1GIÚxŠ`ń5ť‹9nź­2)ŕ–G‹P˜ArŒ’Gda—/‚á° GÁÁˇŽěEÖ­×ü"zśĽ"ÁĺĽö‘Ş­Ě1%™b%:ó7$üŁžd_ŠWű&ďTÓWYž Tłšî#!Œ÷6Śec€ßşŒ‡p;ňHŰřËĆŢđŹ3뺼­§q ’\FŽ|ÉV=řv"î,DzŤ՞˙4[oÝYę:ć‰i¤.ÂöĆî[´Ap×]ľËmuŰ ev˙xœœŒqţń‹áű˝7Ë}~çíšf —žrŹł k˜dk_ŢżDmĺ’vüÇq –~łOÓóÇZ–ż¨é(/4D[Ȍ%şyĄmŹĂ$YÁ*{ŠęźEŽÚč~ÔuűĄ$śš}œˇ’ˆ@gd š @ă$zËÓVô5äQč)žßŗş¤7Ś˜tšâ]b{%{˛ÜK,ŃIöe d ™mÜ0Ë`a[ye¨řťYńÜzSh—SŘčŕÄÓ@ŇJĐĎ<Œ˛ó" ÉľpŰĆÖBĂěÚ.ť¤ëv†óFŐ,u+`Š֗ *nFĺ$gÚŽůľç ôÝFĎRŐőMN=u'˝KxÉŐ$ą.Ţ_™Č[E8p71,@(Ďkç{Đ"ç†Ntś>ˇw?ú>JÓŹŻ œčůőšš˙ŃďZ´QEQEä_ú]¸Üż{Ś9ű˘Š>9ôťqš~÷Ls÷EőT?ƒDpKâgŞhç:=ŻĚ­ňžƒŢŹŐmçGľů•žSĐ{՚ůĚOńĽęuŃţ Á‡Ożş˛˛œK§F­goľZi3´D ˆń’0qÎ3[ŐSM˙>›˙^ßú%+C;űP˙Ÿ3ţţË˙ƨţÇÔ?ççL˙ż˛˙ńŞŘ˘€1˙ąőůůÓ?ďěżüjě}Cţ~tĎűű/˙­Š(űP˙Ÿ3ţţË˙ƨţÇÔ?ççL˙ż˛˙ńŞŘ˘€9cÁÖúÂÂş˝Ÿ‡u…÷Ä.‘ĺˇ÷—t'ÜUńŁßsŚßŮřŐlQ@˙Řú‡üüéŸ÷ö_ţ5QÝhš„–˛Ć.tߝ ń,šä×:ܢ€%ş”Ku,ŤŽĺ†zŕš‹&Š(ÉŁ&Š(ÉŁ&Š(ÉŁ&Š(ÉŁ&Š(ÉŁ&Š(ÉŹ{˝&ň}f{ČfłHä†4gprĽó÷Qżź+bŠÇţÇÔ?ççL˙ż˛˙ńŞ?ąőůůÓ?ďěżüjś(  ě}Cţ~tĎűű/˙ŁűP˙Ÿ3ţţË˙ĆŤbŠÇţÇÔ?ççL˙ż˛˙ńŞ?ąőůůÓ?ďěżüjś(  ě}Cţ~tĎűű/˙Şšż„ÓXł6Z´ĄjHc ĐyP‘ĐíhˆÍttP3ßAşˇ‚8-äŇ!†5‘ŁĘŞŞ8§˙cęóóŚßŮřŐlQ@ŒÝPš˛žŰíšbůą˛nó%8ČĆŐTßŘú‡üüéŸ÷ö_ţ5[P?ö>Ą˙?:gýý—˙Qý¨ĎΙ˙e˙ăUąEc˙cęóóŚßŮřŐŘú‡üüéŸ÷ö_ţ5[P?ö>Ą˙?:gýý—˙Qý¨ĎΙ˙e˙ăUąEc˙cęóóŚßŮřŐŘú‡üüéŸ÷ö_ţ5[P1}ŕŰ{ýBŰPžłđíŐĺŠÍ˝ÄČď$'9ůÕü*˙ö>Ą˙?:gýý—˙Vŏý¨ĎΙ˙e˙ăU Ɓ¨K-źŸlÓ“!|y’óň2ăýWű_ĽoQ@˙Řú‡üüéŸ÷ö_ţ5Gö>Ą˙?:gýý—˙Vŏý¨ĎΙ˙e˙ăTcęóóŚßŮřŐlQ@˙Řú‡üüéŸ÷ö_ţ5Gö>Ą˙?:gýý—˙Vŏý¨ĎΙ˙e˙ăUAźnÚĘëMgáÓŠŞl[ç…Ć1żÉ݌vÍtôP3űP˙Ÿ3ţţË˙ƨţÇÔ?ççL˙ż˛˙ńŞŘ˘/ j {ĎŰ4ĎÝĆéˇĚ—ĹNŐłúÔßŘú‡üüéŸ÷ö_ţ5[P?ö>Ą˙?:gýý—˙Qý¨ĎΙ˙e˙ăUąEc˙cęóóŚßŮřŐŘú‡üüéŸ÷ö_ţ5[P?ö>Ą˙?:gýý—˙Qý¨ĎΙ˙e˙ăUąEbËĄŢKĹ,ÚT‘ş•ei%!ęňšSGđŒZ5Ą´Ńíź?§[–/ĺZŤÄ›Sľa>őŇŃ@˙Řú‡üüéŸ÷ö_ţ5Gö>Ą˙?:gýý—˙VĹCIłÔtű!lJ—HűžÓ2ý÷fĆ<“Óv? ľ˙/îé_ř7˙Šh żâeýÝ+˙ć˙ă5—Wp]ÚĂq‘[‰ aĄ¸v*B3r5ăĺÇZłTuůé_őňßú&JҢŠ(Čž9ôťqš~÷Ls÷E|r?évărýî˜çîŠ+ę¨ˆŕ—ÄĎTŃÎt{_™[ĺ=˝YŞÚ9Ώkó+|§ ÷Ť5ó˜ŸăKÔëŁü4SM˙>›˙^ßú%*ÝTÓäŚ˙ׅˇţ‰JŔОŠ+']Öł5MËěŢoöž ö{÷íňśÚĎ>ě`î˙Qˇ}ěçŒ j+–đßÄ xŠâÎ 'Qšc}–ÎI,g†+… ¸ˆät ě%A,0r ;Âţ>𧉦ś‹FÔĽœÝÂgľy,ć….[ËyUĘän I^r tôVxŻB.“Ź-Ô˛Ůë‰4óʞ=Ŕ6ďpĆŞ_&(݂ă'q¸€břuâ˜éŇÍhfđǓöÖFm˛mÓ§ś>_˓óʧż('Żœř9Łř“QđwÛ˝Pi0éz>™ÝŤŰJí=ĂIfbEt(0Š3g ű˜ňôŻ[˘káż řĆČř'Kž:Ň|).xn%k‹¸ÖĘ{hŘĄŒ,műĹ%w0<F=7ĂM/WĐ|ŚhÄv"M*Ú+eľ¤YâŠ5E‘ƒ"ěcƒ”€ăć9㤢€8ÝVĂŲüMÓ5ŤM7D}"ĘÎâČźş¤ŠpÉ<–ŽňybÜŽSěěďůˇY:WeEŔ(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š*ŽĄ˙!+ţž[˙DÉWގĄ˙!+ţž[˙DÉ@TQEyÇ#ţ—n7/ŢéŽ~袏ŽGý.Ün_˝ÓýŃE}UŕĂŃř™ęš9Ώkó+|§ ÷Ť5[G9Ńí~eo”ôőfžsüizt†‚ŞiżňÓëÂŰ˙DĽ[Şšoüôßúđś˙Ń)XÓlěíoźEeoyO†bUĆFFĘuK˘ČŐc˙\&˙Ů) Ý˙„cĂ˙ô ś˙žh˙„cĂ˙ô ś˙žk^ŠC2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďš?áđ˙ýmżďš×˘€2?áđ˙ýmżďšä´ĽT´(ŠVi@`ć5z%yć›˙ď˙]ĺ˙эM –ŞŽĄ˙!+ţž[˙DÉWގĄ˙!+ţž[˙DÉLF•Q@EńČ˙ĽŰË÷şcŸş(Łă‘˙Kˇ—ďtÇ?tQ_UCř0ôGž&zŚŽsŁÚüĘß)č=ęÍVŃÎt{_™[ĺ=˝YݜÄ˙^§]á Şšoüôßúđś˙Ń)Vꦛ˙ }7ţź-żôJV„ő.‰˙#Uýp›˙d¨Ş]ţFŤúá7ţÉHgiERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWžiżńî˙őŢ_ýŐčuçšoü{żýw—˙F54&ZŞ:‡ü„tŻúůoý%^Ş:‡ü„tŻúůoý%1TQEyÇ#ţ—n7/ŢéŽ~袏ŽGý.Ün_˝ÓýŃE}UŕĂŃř™ęš9Ώkó+|§ ÷Ť5[G9Ńí~eo”ôőfžsüizt†‚ŞiżňÓëÂŰ˙DĽ[Şšoüôßúđś˙Ń)XÔş'üV?őÂoý’˘ŠtOůŹë„ßű%!ĽQHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^yŚ˙Çť˙×yôcWĄ×žiżńî˙őŢ_ýÔЙj¨ęňŇżëĺżôL•z¨ęňŇżëĺżôL”ÄiQEä_ú]¸Üż{Ś9ű˘Š>9ôťqš~÷Ls÷EőT?ƒDpKâgŞhç:=ŻĚ­ňžƒŢŹŐmçGľů•žSĐ{՚ůĚOńĽęuŃţ ŠŚ˙ČM˙Ż oý•nŞiżňÓëÂŰ˙DĽ`hORčŸň5X˙× żöJŠĽŃ?äją˙Ž씆v”QE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@yć›˙ď˙]ĺ˙э^‡^yŚ˙Çť˙×yôcSBeŞŁ¨ČGJ˙Ż–˙Ń2U꣨ČGJ˙Ż–˙Ń2SĽEP‘|r?évărýî˜çîŠ(řäŇíĆĺűÝ1ĎÝWŐPţ =Á/‰žŠŁœčöż2ˇĘzzłU´s×ćVůOAďVkç1?ƗŠ×Gřh*Ś›˙ }7ţź-żôJUşŠŚ˙ČM˙Ż oý•Ą=K˘ČŐc˙\&˙Ů**—D˙‘ŞÇţ¸M˙˛RÚQE†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEçšoü{żýw—˙F5zyć›˙ď˙]ĺ˙эM –ŞŽĄ˙!+ţž[˙DÉWގĄ˙!+ţž[˙DÉLF•Q@EńČ˙ĽŰË÷şcŸş(Łă‘˙Kˇ—ďtÇ?tQ_UCř0ôGž&zŚŽsŁÚüĘß)č=ęÍVŃÎt{_™[ĺ=˝YݜÄ˙^§]á Şšoüôßúđś˙Ń)Vꦛ˙ }7ţź-żôJV„ő.‰˙#Uýp›˙d¨Ş]ţFŤúá7ţÉHgiERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWžiżńî˙őŢ_ýŐčuçšoü{żýw—˙F54&ZŞ:‡ü„tŻúůoý%^Ş:‡ü„tŻúůoý%1TQEyÇ#ţ—n7/ŢéŽ~袏ŽGý.Ün_˝ÓýŃE}UŕĂŃř™ęš9Ώkó+|§ ÷Ť5[G9Ńí~eo”ôőfžsüizt†‚ŞiżňÓëÂŰ˙DĽ[Şšoüôßúđś˙Ń)XÔş'üV?őÂoý’˘¨ˆşŠöË9ŇbWP^=㠏qéHg}Eqڞ ˙ ˇţöTjxƒţ‚6ßř ˙ŮQ`šÚQ\_ö§ˆ?č#m˙€Ÿý•ڞ ˙ ˇţöTX.v”WýŠâúŰŕ'˙eGö§ˆ?č#m˙€Ÿý• ĽĹ˙jxƒţ‚6ßř ˙ŮQýŠâúŰŕ'˙eE‚çiEqڞ ˙ ˇţöTjxƒţ‚6ßř ˙ŮQ`šÚQ\_ö§ˆ?č#m˙€Ÿý•ڞ ˙ ˇţöTX.v”WýŠâúŰŕ'˙eGö§ˆ?č#m˙€Ÿý• ĽĹ˙jxƒţ‚6ßř ˙ŮQýŠâúŰŕ'˙eE‚çiEqڞ ˙ ˇţöTjxƒţ‚6ßř ˙ŮQ`šÚQ\_ö§ˆ?č#m˙€Ÿý•ڞ ˙ ˇţöTX.v”WýŠâúŰŕ'˙eGö§ˆ?č#m˙€Ÿý• ĽĹ˙jxƒţ‚6ßř ˙ŮQýŠâúŰŕ'˙eE‚çiEqڞ ˙ ˇţöTjxƒţ‚6ßř ˙ŮQ`šÚQ\_ö§ˆ?č#m˙€Ÿý•ڞ ˙ ˇţöTX.v”WýŠâúŰŕ'˙eGö§ˆ?č#m˙€Ÿý• ĽĹ˙jxƒţ‚6ßř ˙ŮQýŠâúŰŕ'˙eE‚çiEqڞ ˙ ˇţöTjxƒţ‚6ßř ˙ŮQ`šÚQ\_ö§ˆ?č#m˙€Ÿý•ڞ ˙ ˇţöTX.v”WýŠâúŰŕ'˙eGö§ˆ?č#m˙€Ÿý• ĽĹ˙jxƒţ‚6ßř ˙ŮQýŠâúŰŕ'˙eE‚çiEqڞ ˙ ˇţöTjxƒţ‚6ßř ˙ŮQ`šÚQ\_ö§ˆ?č#m˙€Ÿý•ڞ ˙ ˇţöTX.v”WýŠâúŰŕ'˙eGö§ˆ?č#m˙€Ÿý• ĽĹ˙jxƒţ‚6ßř ˙ŮQýŠâúŰŕ'˙eE‚çiEqڞ ˙ ˇţöTjxƒţ‚6ßř ˙ŮQ`šÚQ\_ö§ˆ?č#m˙€Ÿý•ڞ ˙ ˇţöTX.v”WýŠâúŰŕ'˙eGö§ˆ?č#m˙€Ÿý• ĽĹ˙jxƒţ‚6ßř ˙ŮQýŠâúŰŕ'˙eE‚çiEqڞ ˙ ˇţöTjxƒţ‚6ßř ˙ŮQ`šÚQ\_ö§ˆ?č#m˙€Ÿý•ڞ ˙ ˇţöTX.v”WýŠâúŰŕ'˙eGö§ˆ?č#m˙€Ÿý• ĽĹ˙jxƒţ‚6ßř ˙ŮQýŠâúŰŕ'˙eE‚çiEqڞ ˙ ˇţöTjxƒţ‚6ßř ˙ŮQ`šÚQ\_ö§ˆ?č#m˙€Ÿý•ڞ ˙ ˇţöTX.v•çšoü{żýw—˙F5_ţÔńýmżđ˙˛Ş–p´lwř‰ –bzdúĐŐGP˙Ž•˙_-˙˘dŤŐGP˙Ž•˙_-˙˘dŚ#JŠ( "řäŇíĆĺűÝ1ĎÝQńČ˙ĽŰË÷şcŸş(ŻŞĄüz#‚_=SG9Ńí~eo”ôőfŤhç:=ŻĚ­ňžƒŢŹ×Îb/SŽđĐUM7ţ@úoýx[蔫uSM˙>›˙^ßú%+Bzd˛G•Őuf8ŸM˙—‹Oúűƒ˙F­Aöűůýś˙żŤţ5,3E2–†T‘AĆQü+˝Ž/T˙öĽ˙]“˙DÇHdU VÓËqK%´‚)Ő1‰ĘŤ…`>éÚęŘ=˜„W  éRxąőM_Q×5Ëk˜u[ťKhlľ-ă´H&h“÷hBHX ůóżŚ0+űUń>¨|Mń–ÚAÓtEonmî`‘ćšévo"#ŤŞÇň(Á*ů'äÖ¨Ż.ń‡Ä=sOń6ącŁésÝŢ´I%´Z őä—ÎŃ$ŹŠ<*b„í‘@ßť'¨Qƒ],ˇˆľOjVzYŇ Ó4{¸mnÖć){†xŁ™Ę2°…IWWÜŔ—­t֗V×q4ś—\F˛iNT´9ŰÁÍcĚwƒžÚj§I›KÖ4Č--RÚ'YíÚ;3*3šr˛H[8TÚÄ›­=nŠóŸřˇĹëáÍFčhɧxŠű:( ÍdĆŢKˆŒ¤É‰AHČ`˘<1ÖŽřĆמ)×nt´łśľ:@hőF/źK6÷Œ}œƒĚyÉvścpm ÎćŠă~*ŔÉŚé:¤š…ľÍގŚD†ÚúhQŇkűhäY$ Ą+‡ Œœc&ť*b (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ ٍČGJ˙Ż–˙Ń2U꣨ČGJ˙Ż–˙Ń2P•Q@EńČ˙ĽŰË÷şcŸş(Łă‘˙Kˇ—ďtÇ?tQ_UCř0ôGž&zŚŽsŁÚüĘß)č=ęÍVŃÎt{_™[ĺ=˝YݜÄ˙^§]á Şšoüôßúđś˙Ń)Vꦛ˙ }7ţź-żôJV„ôÉC*źr$ŠYr2ŹddzzÓč  żŰz×üôÓ˙đ˙řĺQ-4ˇ3ÜÜÔőŻîŹîkŒ•‚úx"šŔyŃĆę’đůÁŕŇŽÝřsFťą×,Ž,÷ŰëŰż´ÓÍqçî nAĘţî4_—3ԓZÔSĎë~đţą¨ľýő¤ţ|ˆŠ7‘y4 pŁ˘Ę‘şŹ dŒ8aŽ*[ß čwšôzäÖ˛‹ô1’ń]KJc9C$jÁ$*yÁÇjۢ€1"đځö“ĹaĺÍgwqwŠ3‡I'‘¤›ć ’ŽîÄĄĘôお~đ…<35´ş6›,ŇŞIy4Én„ŢZHě¨[qP s’rk§˘€9˝?Ŕްż–öÎÂhŚt•“lˇ˙ŹňPžŘ w1…5ĄiáíŇm:kKíßM­­LDŚČˆĄüËňƒ†ČȨÍjQ@~,đŽâˆ­âÖ ŃŰH%mu;›Qź2şłd]ĹY”śv‘‘ƒZÖVńÚYĂiJŃĂĆŚYZW Îäł9f$ž¤“SQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@QÔ?ä#Ľ×Ëč™*őQÔ?ä#Ľ×Ëč™(JŠ( "řäŇíĆĺűÝ1ĎÝQńČ˙ĽŰË÷şcŸş(ŻŞĄüz#‚_=SG9Ńí~eo”ôőfŤhç:=ŻĚ­ňžƒŢŹ×Îb/SŽđĐUM7ţ@úoýx[蔫uSM˙>›˙^ßú%+BzdŽP.ŘÚFgTU\dł0P9 u"ŸM˙—‹Oúűƒ˙F­'ű­˙@‹Ÿűű˙P –Xf…á–& čĺI¨aʒ:]Ýqz§ü‡ľ/úěŸú&:@bj~%đ旨æęzţ•c{><›k‹Čă–Lđ6ŤOáRé:˝śĽŤŮŔ’ŹšUâÚN\ĚN ŕœł(çƒĆ0OĄë>ПÄ:_‹î,-ukÍVîIĄź@dżĺcoĺŠ̢aC`Š\dbąüQa,6˙źSkŤęö—ÚEË]YĽľô‘B˛Ĺ¤ÚHăR]ÄC†É ËExÄ­cÄPxßZ€k:L°?°M߈.l•Ç”ŹYmcÖď2™Š%° ^ő3_ءÄëë_ř‹PÓŻ"ťľ] Ć;Ů!Žęe˜D§lů”̍¸6ĹP~^´ŰxWśÖě%ź´IR8ď.m”wÁ<9ŕž FÄ{xgWśń†ôÍzÍ%ŽŰRłŠî”ę’ u  œőŻ,řwyzž(k]vöćĂHmwWţĹ[y pŢ\hÝy‰;‚ qÎȏĘĂ'ća„Ěř¨X3á휁âMKRž—MT×,%źycľm V0“ś ˛ˆQ …ŢŹOÍր=ފń_ë1Ď{ |OŠĎŹÜĹp|_e6Ą&Í=źŒěc-‹]“Ń „Ę’~nľšđëUׯ%ť˝ŠĚŰťx|ČžQÔ"ÜŔËpćaÂ# |Ź_něˆŔ;­kÄ^Ń%‚-k]ŇôÉ.![ť¸á2E F Ó9ĄŻ<řŁă čZ˘h3Ýř~Ó_Őlö™őYbŠ(-w0ß)r7¨bűb,ŮűŁsĂÂ6Ö^Ň,ôŤÁ}§ŰŘĂ­Č”H&‰P}ÆČäuÍ05(˘ŠQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEGP˙Ž•˙_-˙˘dŤŐGP˙Ž•˙_-˙˘d  *(˘€<‹ă‘˙Kˇ—ďtÇ?tQGÇ#ţ—n7/ŢéŽ~č˘žŞ‡đačŽ |LőMçGľů•žSĐ{՚­Łœčöż2ˇĘzzł_9‰ţ4˝Nş?ĂAU4ßůéżőám˙˘R­ŐM7ţ@úoýx[蔬 钢Ȼ[pÁ ąR9Čä }QÖőm/CÓdÔőF×N˛ˆ%ĹĚŤk’ËIń  Ÿž˙ŸíC˙e˙âŠ#@…ŰtŽÎۙ¤‘‰Ŕ’Ičrđľ>ĐýáŸüĹ˙ĹQ˙ Sá§ýŢ˙Áœ_üU!•Ć˙ÂÔři˙C÷†đg˙Gü-O†Ÿô?xg˙qńTŔ쨎7ţ§ĂOúź3˙ƒ8żřŞ?áj|4˙ĄűĂ?ř3‹˙Š Ɗăáj|4˙ĄűĂ?ř3‹˙ŠŁţ§ĂOúź3˙ƒ8żřŞě¨Ž7ţ§ĂOúź3˙ƒ8żřŞ?áj|4˙ĄűĂ?ř3‹˙Š Ɗăáj|4˙ĄűĂ?ř3‹˙ŠŁţ§ĂOúź3˙ƒ8żřŞě¨Ž7ţ§ĂOúź3˙ƒ8żřŞ?áj|4˙ĄűĂ?ř3‹˙Š Ɗăáj|4˙ĄűĂ?ř3‹˙ŠŁţ§ĂOúź3˙ƒ8żřŞě¨Ž7ţ§ĂOúź3˙ƒ8żřŞ?áj|4˙ĄűĂ?ř3‹˙Š Ɗăáj|4˙ĄűĂ?ř3‹˙ŠŁţ§ĂOúź3˙ƒ8żřŞě¨Ž7ţ§ĂOúź3˙ƒ8żřŞ?áj|4˙ĄűĂ?ř3‹˙Š Ɗăáj|4˙ĄűĂ?ř3‹˙ŠŁţ§ĂOúź3˙ƒ8żřŞě¨Ž7ţ§ĂOúź3˙ƒ8żřŞ?áj|4˙ĄűĂ?ř3‹˙Š Ɗăáj|4˙ĄűĂ?ř3‹˙ŠŁţ§ĂOúź3˙ƒ8żřŞě¨Ž7ţ§ĂOúź3˙ƒ8żřŞ?áj|4˙ĄűĂ?ř3‹˙Š Ɗăáj|4˙ĄűĂ?ř3‹˙ŠŁţ§ĂOúź3˙ƒ8żřŞě¨Ž7ţ§ĂOúź3˙ƒ8żřŞ?áj|4˙ĄűĂ?ř3‹˙Š Ɗăáj|4˙ĄűĂ?ř3‹˙ŠŁţ§ĂOúź3˙ƒ8żřŞě¨Ž7ţ§ĂOúź3˙ƒ8żřŞ?áj|4˙ĄűĂ?ř3‹˙Š Ɗăáj|4˙ĄűĂ?ř3‹˙ŠŁţ§ĂOúź3˙ƒ8żřŞě¨Ž7ţ§ĂOúź3˙ƒ8żřŞ?áj|4˙ĄűĂ?ř3‹˙Š Ɗăáj|4˙ĄűĂ?ř3‹˙ŠŁţ§ĂOúź3˙ƒ8żřŞě¨Ž7ţ§ĂOúź3˙ƒ8żřŞ?áj|4˙ĄűĂ?ř3‹˙Š Ɗăáj|4˙ĄűĂ?ř3‹˙ŠŁţ§ĂOúź3˙ƒ8żřŞě¨Ž7ţ§ĂOúź3˙ƒ8żřŞ?áj|4˙ĄűĂ?ř3‹˙Š Ɗăáj|4˙ĄűĂ?ř3‹˙ŠŁţ§ĂOúź3˙ƒ8żřŞě¨Ž7ţ§ĂOúź3˙ƒ8żřŞ?áj|4˙ĄűĂ?ř3‹˙Š Ɗăáj|4˙ĄűĂ?ř3‹˙ŠŁţ§ĂOúź3˙ƒ8żřŞě¨Ž7ţ§ĂOúź3˙ƒ8żřŞ?áj|4˙ĄűĂ?ř3‹˙Š Ɗăáj|4˙ĄűĂ?ř3‹˙ŠŁţ§ĂOúź3˙ƒ8żřŞě¨Ž7ţ§ĂOúź3˙ƒ8żřŞ?áj|4˙ĄűĂ?ř3‹˙Š Ɗăáj|4˙ĄűĂ?ř3‹˙ŠŁţ§ĂOúź3˙ƒ8żřŞě¨Ž7ţ§ĂOúź3˙ƒ8żřŞ?áj|4˙ĄűĂ?ř3‹˙Š Ɗăáj|4˙ĄűĂ?ř3‹˙ŠŁţ§ĂOúź3˙ƒ8żřŞě¨Ž7ţ§ĂOúź3˙ƒ8żřŞěT†PĘAdށ Tuůé_őňßú&J˝Tuůé_őňßú&JҢŠ(Čž9ôťqš~÷Ls÷E|r?évărýî˜çîŠ+ę¨ˆŕ—ÄĎTŃÎt{_™[ĺ=˝YŞÚ9Ώkó+|§ ÷Ť5ó˜ŸăKÔëŁü4SM˙>›˙^ßú%*ÝTÓäŚ˙ׅˇţ‰JŔО°0˛|cđÚJŤ"C˘j—1+Œ„˜McŃÂM*í‘ÇF9ߎxœ|dĐOýKšˇţ”é´†z'žŢ´yíëU7Ńž˜‹~{zŃ硭TßFúˇçˇ­{zŐMôo  ~{zŃ硭TßFúˇçˇ­{zŐMôo  ~{zŃ硭TßFúˇçˇ­{zŐMôo  ~{zŃ硭TßFúˇçˇ­{zŐMôo  ~{zŃ硭TßFúˇçˇ­{zŐMôo  ~{zŃ硭TßFúˇçˇ­{zŐMôo  ~{zŃ硭TßFúČŃ~!x'[żM?EńŸ‡u;ÇĽ˝Ś§ Ň698UbMt^{z×ĚכUđ7Ă=ţoë‹m&ŒN‰ŚZăRƒËňąžO>LyDůqĺQĆW8ŽşëĆđÚč?đOâ)“ÄßđœG Z›†űRÚÉŽŠ@FwZٕA?!V ߆{/öޝöOľ˙iYýŸíeó|őŮçyžO•œă›ű˝˝w|˝xŤž{z×ͧJđÄ? őŤ&ÖľAqŚxÚ9őH›ÄWfK+qŽšI\ł03KżĹD¤—@ăŠń–Ť ĹŹ[AŤxĎSŇ|6ž‚m îÓW•~Ű9i°˜6nd‹r¨ĚűüĆ8lć€=§ĎoZ†óQˇł‰eťş†Ţ6‘"V–@€ť°TPOvb¤Zň ĂXńo‰'Ö:řŁŽ§tEöłáűY¤š—8”ĹdĂp)ß‹čšĺí„ń™ăE‘ă 7*ą`ŹGP V÷Ú} Rąń&•z°ľśĄ Çs(ŠÖBvĽŰ|áä1âaĺĺˇFX|ŻÎQ€ůükZţľŞMŹ$WVw~1ţpŠú$ĐüÖ†6}QłßĘ_Zżâť}%ÔcńBj—‘GŁ›é!fŹâŮŘPÂ#“Í۝翆°~ër\ëŢň|GŞ_řŽďÎ˙„ˇMšňIc˛Ä3f;mö\ŁMĄw+˝Öé硭{zׇ|:Ž˙OĐţëâ-~ţóÄ1E§öíJYâ™_Kžä-آ˛ź)†PŒî,I5ěŰčoĎoZ<öőŞ›čßL ~{zŃ硭TßFúˇçˇ­{zŐMôo  ~{zŃ硭TßFúˇçˇ­{zŐMôo  ~{zŃ硭TßFúˇçˇ­{zŐMôo  ~{zŃ硭TßFúˇçˇ­{zŐMôo  ~{zŃ硭TßFúˇçˇ­{zŐMôo  ~{zŃ硭TßFúˇçˇ­{zŐMôo  ~{zטü) „淍BAmŹęśĐFŁ 1ę j:***ިŕ` ô=őçŸ ˙äY˝˙ąƒZ˙ÓŐ :şŁ¨ČGJ˙Ż–˙Ń2U꣨ČGJ˙Ż–˙Ń2SJŠ( "řäŇíĆĺűÝ1ĎÝQńČ˙ĽŰË÷şcŸş(ŻŞĄüz#‚_=SG9Ńí~eo”ôőfŤhç:=ŻĚ­ňžƒŢŹ×Îb/SŽđĐUM7ţ@úoýx[蔫uSM˙>›˙^ßú%+Bzć/ĽKo‹~žfÇ.‰Ş[FĚpfšĆEŒîR)X/]ąšč§=RÖ´/[Ó¤Óu:ÓQ˛”ƒ%˝Ô+$m‚ʰ ŕ€ ŘűJŃö•ŽţĂ_ú<-˙‚˜?řš?áWü5˙ĄÂßř)ƒ˙‰ guö•Łí+\/ü*˙†żô x[˙0ń4ÂŻřk˙B…żđS˙@×ÚV´­pżđŤţ˙ЁáoüÁ˙ÄŃ˙ żáŻý˙ÁLüMw_iZ>ŇľÂ˙ÂŻřk˙B…żđS˙Gü*˙†żô x[˙0ń4Ý}ĽhűJ× ˙ żáŻý˙ÁLüMđŤţ˙ЁáoüÁ˙ÄĐuö•Łí+\/ü*˙†żô x[˙0ń4ÂŻřk˙B…żđS˙@×ÚV´­pżđŤţ˙ЁáoüÁ˙ÄŃ˙ żáŻý˙ÁLüMw_iZ>ŇľÂ˙ÂŻřk˙B…żđS˙Gü*˙†żô x[˙0ń4Ý}ĽhűJ× ˙ żáŻý˙ÁLüMđŤţ˙ЁáoüÁ˙ÄĐuö•Łí+\/ü*˙†żô x[˙0ń4ÂŻřk˙B…żđS˙@×ÚV´­pżđŤţ˙ЁáoüÁ˙ÄŃ˙ żáŻý˙ÁLüMw_iZ>ŇľÂ˙ÂŻřk˙B…żđS˙Gü*˙†żô x[˙0ń4Ý}ĽhűJ× ˙ żáŻý˙ÁLüMđŤţ˙ЁáoüÁ˙ÄĐuö•Łí+\/ü*˙†żô x[˙0ń4ÂŻřk˙B…żđS˙@×ÚV´­pżđŤţ˙ЁáoüÁ˙ÄŃ˙ żáŻý˙ÁLüMw_iZ>ŇľÂ˙ÂŻřk˙B…żđS˙Gü*˙†żô x[˙0ń4Ý}ĽhűJ× ˙ żáŻý˙ÁLüMđŤţ˙ЁáoüÁ˙ÄĐuö•Łí+\/ü*˙†żô x[˙0ń4ÂŻřk˙B…żđS˙@×ÚV´­pżđŤţ˙ЁáoüÁ˙ÄŃ˙ żáŻý˙ÁLüMw_iZ>ŇľÂ˙ÂŻřk˙B…żđS˙Gü*˙†żô x[˙0ń4Ý}ĽhűJ× ˙ żáŻý˙ÁLüMđŤţ˙ЁáoüÁ˙ÄĐuö•Łí+\/ü*˙†żô x[˙0ń4ÂŻřk˙B…żđS˙@×ÚV´­pżđŤţ˙ЁáoüÁ˙ÄŃ˙ żáŻý˙ÁLüMw_iZ>ŇľÂ˙ÂŻřk˙B…żđS˙Gü*˙†żô x[˙0ń4Ý}ĽhűJ× ˙ żáŻý˙ÁLüMđŤţ˙ЁáoüÁ˙ÄĐuö•Łí+\/ü*˙†żô x[˙0ń4ÂŻřk˙B…żđS˙@×ÚV´­pżđŤţ˙ЁáoüÁ˙ÄŃ˙ żáŻý˙ÁLüMw_iZ>ŇľÂ˙ÂŻřk˙B…żđS˙Gü*˙†żô x[˙0ń4Ý}ĽhűJ× ˙ żáŻý˙ÁLüMđŤţ˙ЁáoüÁ˙ÄĐuö•Łí+\/ü*˙†żô x[˙0ń4ÂŻřk˙B…żđS˙@×ÚV´­pżđŤţ˙ЁáoüÁ˙ÄŃ˙ żáŻý˙ÁLüMw_iZ>ŇľÂ˙ÂŻřk˙B…żđS˙Gü*˙†żô x[˙0ń4Ý}ĽhűJ× ˙ żáŻý˙ÁLüMđŤţ˙ЁáoüÁ˙ÄĐuö•Łí+\/ü*˙†żô x[˙0ń4ÂŻřk˙B…żđS˙@×ÚV¸„Ź$đ|—(CCsŹjˇ0H9Yb“P¸’9ôedeeaÁ ŕÓáW|5˙ĄÂßř*ƒ˙‰Žš@U  ¨jŽĄ˙!+ţž[˙DÉWގĄ˙!+ţž[˙DÉ@*(˘€<‹ă‘˙Kˇ—ďtÇ?tQGÇ#ţ—n7/ŢéŽ~č˘žŞ‡đačŽ |LőMçGľů•žSĐ{՚­Łœčöż2ˇĘzzł_9‰ţ4˝Nş?ĂAU4ßůéżőám˙˘R­ÖUź÷öÖśö­¤ÜHmᎠńKWĄC ĚČÁgőŹ *Ű/č {˙!˙âčűeďýoďä?ü]^˘¨ý˛÷ţ€ˇż÷ňţ.ś^˙Đ÷ţţC˙ĹĐę*Ű/č {˙!˙âčűeďýoďä?ü]^˘¨ý˛÷ţ€ˇż÷ňţ.ś^˙Đ÷ţţC˙ĹĐę*Ű/č {˙!˙âčűeďýoďä?ü]^˘¨ý˛÷ţ€ˇż÷ňţ.ś^˙Đ÷ţţC˙ĹĐę*Ű/č {˙!˙âčűeďýoďä?ü]^˘¨ý˛÷ţ€ˇż÷ňţ.ś^˙Đ÷ţţC˙ĹĐę*Ű/č {˙!˙âčűeďýoďä?ü]^˘¨ý˛÷ţ€ˇż÷ňţ.ś^˙Đ÷ţţC˙ĹĐę*Ű/č {˙!˙âčűeďýoďä?ü]^˘¨ý˛÷ţ€ˇż÷ňţ.ś^˙Đ÷ţţC˙ĹĐę*Ű/č {˙!˙âčűeďýoďä?ü]^˘¨ý˛÷ţ€ˇż÷ňţ.ś^˙Đ÷ţţC˙ĹĐę*Ű/č {˙!˙âčűeďýoďä?ü]^˘¨ý˛÷ţ€ˇż÷ňţ.ś^˙Đ÷ţţC˙ĹĐę*Ű/č {˙!˙âčűeďýoďä?ü]^˘¨ý˛÷ţ€ˇż÷ňţ.ś^˙Đ÷ţţC˙ĹĐę*Ű/č {˙!˙âčűeďýoďä?ü]^˘¨ý˛÷ţ€ˇż÷ňţ.ś^˙Đ÷ţţC˙ĹĐę*Ű/č {˙!˙âčűeďýoďä?ü]^˘¨ý˛÷ţ€ˇż÷ňţ.ś^˙Đ÷ţţC˙ĹĐę*Ű/č {˙!˙âčűeďýoďä?ü]^˘¨ý˛÷ţ€ˇż÷ňţ.ś^˙Đ÷ţţC˙ĹĐę*Ű/č {˙!˙âčűeďýoďä?ü]^˘¨ý˛÷ţ€ˇż÷ňţ.ś^˙Đ÷ţţC˙ĹĐę*Ű/č {˙!˙âčűeďýoďä?ü]^˘¨ý˛÷ţ€ˇż÷ňţ.ś^˙Đ÷ţţC˙ĹĐę*Ű/č {˙!˙âčűeďýoďä?ü]^˘¨ý˛÷ţ€ˇż÷ňţ.ś^˙Đ÷ţţC˙ĹĐę*Ű/č {˙!˙âčűeďýoďä?ü]^˘¨ý˛÷ţ€ˇż÷ňţ.ś^˙Đ÷ţţC˙ĹĐę*Ű/č {˙!˙âčűeďýoďä?ü]^˘¨ý˛÷ţ€ˇż÷ňţ.ś^˙Đ÷ţţC˙ĹĐę*Ű/č {˙!˙âčűeďýoďä?ü]^˘¨ý˛÷ţ€ˇż÷ňţ.ś^˙Đ÷ţţC˙ĹĐ꣨ČGJ˙Ż–˙Ń2QöËßúŢ˙ßČřşb‹ťËűG{mcˇv‘šWBX”e'űŮÉÇNůŕVŠ( "řäŇíĆĺűÝ1ĎÝQńČ˙ĽŰË÷şcŸş(ŻŞĄüz#‚_=SG9Ńí~eo”ôőfŤhç:=ŻĚ­ňžƒŢŹ×Îb/SŽđĐV~|C˙>šţ §˙äjТ°43óâůôĐżđe?˙#QŸ˙ĎŚ…˙ƒ)˙ů´(  üř‡ţ}4/üO˙ČÔgÄ?óéĄŕĘţF­ (?>!˙ŸM ˙S˙ň5ńüúh_ř2Ÿ˙‘ŤBŠĎψçÓB˙Á”˙üF|C˙>šţ §˙äjТ€3óâůôĐżđe?˙#QŸ˙ĎŚ…˙ƒ)˙ů´(  üř‡ţ}4/üO˙ČÔgÄ?óéĄŕĘţF­ (?>!˙ŸM ˙S˙ň5ńüúh_ř2Ÿ˙‘ŤBŠĎψçÓB˙Á”˙üF|C˙>šţ §˙äjТ€3óâůôĐżđe?˙#QŸ˙ĎŚ…˙ƒ)˙ů´(  üř‡ţ}4/üO˙ČÔgÄ?óéĄŕĘţF­ (?>!˙ŸM ˙S˙ň5ńüúh_ř2Ÿ˙‘ŤBŠĎψçÓB˙Á”˙üF|C˙>šţ §˙äjТ€3óâůôĐżđe?˙#QŸ˙ĎŚ…˙ƒ)˙ů´(  üř‡ţ}4/üO˙ČÔgÄ?óéĄŕĘţF­ (?>!˙ŸM ˙S˙ň5ńüúh_ř2Ÿ˙‘ŤBŠĎψçÓB˙Á”˙üF|C˙>šţ §˙äjТ€3óâůôĐżđe?˙#QŸ˙ĎŚ…˙ƒ)˙ů´(  üř‡ţ}4/üO˙ČÔgÄ?óéĄŕĘţF­ (?>!˙ŸM ˙S˙ň5ńüúh_ř2Ÿ˙‘ŤBŠĎψçÓB˙Á”˙üF|C˙>šţ §˙äjТ€3óâůôĐżđe?˙#QŸ˙ĎŚ…˙ƒ)˙ů´(  üř‡ţ}4/üO˙ČÔgÄ?óéĄŕĘţF­ (?>!˙ŸM ˙S˙ň5ńüúh_ř2Ÿ˙‘ŤBŠĎψçÓB˙Á”˙üF|C˙>šţ §˙äjТ€3óâůôĐżđe?˙#QŸ˙ĎŚ…˙ƒ)˙ů´(  üř‡ţ}4/üO˙ČÔgÄ?óéĄŕĘţF­ (?>!˙ŸM ˙S˙ň5ńüúh_ř2Ÿ˙‘ŤBŠĎψçÓB˙Á”˙üF|C˙>šţ §˙äjТ€3óâůôĐżđe?˙#QŸ˙ĎŚ…˙ƒ)˙ů´(  üř‡ţ}4/üO˙ČÔgÄ?óéĄŕĘţF­ (?>!˙ŸM ˙S˙ň5ńüúh_ř2Ÿ˙‘ŤBŠĎψçÓB˙Á”˙üF|C˙>šţ §˙äjТ€3óâůôĐżđe?˙#QŸ˙ĎŚ…˙ƒ)˙ů´(  üř‡ţ}4/üO˙ČÔgÄ?óéĄŕĘţF­ (?>!˙ŸM ˙S˙ň5ńüúh_ř2Ÿ˙‘ŤBŠĎψçÓB˙Á”˙üF|C˙>šţ §˙äjТ€3óâůôĐżđe?˙#T–ÇYó—ívúJCÎăě˛8ăŒ+@ óţĐţ•rŠ(˘Šň/ŽGý.Ün_˝ÓýŃEú]¸Üż{Ś9ű˘ŠúŞÁ‡˘8%ń3Ő4s×ćVůOAďVjśŽsŁÚüĘß)č=ęÍ|ć'řŇő:č˙ QXQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@U;ÇáÝJHّÖŇRʧ‡Ž_č1JńK­ié"1VV¸PAAć›˙ /‡č9Ś˙ŕJvQ”‚5‚Ň(Ł@UQŔ€Sźöő /ţ_˙ĐsM˙Ŕ”˙?á%đďý4ßü OńŽÓĎoZ<öő /ţ_˙ĐsM˙Ŕ”˙?á%đďý4ßü Oń­ďřK<;ý˝˙˙ü$:OöĆ3öśGöŽ™˙WÝ9éRiýžŠ¨k6Vé2ɤ^­ÁpgkxgpNFŮĐsƒÜc€sżđ’řwţƒšoţ§řŃ˙ /‡č9Ś˙ŕJvž{zŃ硭qđ’řwţƒšoţ§řÔöƓ1‚ËSłš”.â‘LŹqë€k­óŰÖ°üjű´Ťv oKűbÝs2ŠÁí•fBGz†y˘‚žy(ŁRÎîp¤šÍ˙„—ĂżôÓđ%?ĆŽ\mcFGPČo•aJÁ+/ĚŞGĄö­ýOUłŇě&Ô5;Űk+8|׏qĆžŹĚ@ÜĐ)˙ /‡č9Ś˙ŕJđ’řwţƒšoţ§řÖţŁâK;+­^íťłki$;Y7 yŽ7ŸşRÁäŻbH~ŻŻŰéz†ep“4š˝ëY۔…uˇšr[$`mÇ9+Ć2@;˙ /‡č9Ś˙ŕJđ’řwţƒšoţ§ř×i硭{zĐ˙ /‡č9Ś˙ŕJđ’řwţƒšoţ§ř×i硭fřs_ˇ×tůomdŽ+ŰŤ6€ű{‰ sÁ<‰ˆď‚2ŕsżđ’řwţƒšoţ§řŃ˙ /‡č9Ś˙ŕJvž{zŃ硭söZ„M-ÜQŤmfŠ@ŔN*ĹEŽ6|[dŔ^ÂpäŮ"۟\nlzn>ŚĽ Š( "řäŇíĆĺűÝ1ĎÝQńČ˙ĽŰË÷şcŸş(ŻŞĄüz#‚_=SG9Ńí~eo”ôőfŤhç:=ŻĚ­ňžƒŢŹ×Îb/SŽđĐQE QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVwŠ?äZŐ?ëÎoý֍Pń"<žÔŁYÝ­% Ş2I(p –Gýă}M7}Rűl2ţöY#™NCЃÜQö•  ťčßTžŇ´}ĽhĹ´třSđ…nƒţď'gŘ6˙Ś˙kç?kŰ÷śůß˝óžîŢsŠš%ýőˇĹOĹŞ_\é~“ÄPy÷vr´n×Ůş—ň([ŽWď6Šƒ‡őď´­iZ]ßFúĽö•Łí+@‹ťëĹí*˙OÖżú=*ßÚV˛źO:ÉemĺŢúŰj÷8•XăčŸ &€$š8ÖtS˙Oré4ŐÍüR—UÖľíš&Ÿ§ę&)WÔíďoކ'J3ŹR´Ű\ ¤ƒŠčuXľ&g!Q.ŰsÝŞźűł(äőŠö• g„jwƒLŃü%áOß6„|?⯳Ë5ü˜ŽĆM:ő­ĘĎľ C䴘B<ŠˌÔÚÖ§a6™áé/|MŠ Áă‰"ÓľśÉ潟ö]Ćăöœď1‰ZhüÝŮ3ťŐî?iZ>Ň´Ź‘Z\]kč:]‰uš!jž Ňü]Şé°ë–ÚSXĹm‡RńMĺłJ˘%ţΰËöö2ůŠÁٜíƐÍîiZ>Ň´ŔŕgÔŹâý݉e3#î ąT“ďW=¤ŘÍĽřpřŚĎYÖcź><žŘ@/äžDÚűŰÉ€,ĺdvÜT°c@WŻýĽhűJĐŠĹŽx‘ţ&<7zՅ†Śž#ňc´¸ńĘÉ&ŸçíUM5`18h0Â]ç wP Xďíô/řK˙á"×äÔŽ$ąXäÔĽkajúëZ|ŢYQĽ”‚zĎÚV´­gęÇ>+°˙Żý YŹűŠDŢ*ľŰϗc6üé"۟LílzŕúV… (˘€<‹ă‘˙Kˇ—ďtÇ?tQGÇ#ţ—n7/ŢéŽ~č˘žŞ‡đačŽ |LőMçGľů•žSĐ{՚­¤gű×,§ĺ=;՚ůĚOńĽęuŇřQE QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEI´}ݝô}5ى,Íi$ž¤’9¤ţĹŃč Ľ˙ŕüM^˘€(˙bčżôŇ˙đ?ţ&ě]ţ€ş_ţÇ˙ÄŐę(ö.‹˙@]/˙ă˙âhţĹŃč Ľ˙ŕüM^˘€(˙bčżôŇ˙đ?ţ&ě]ţ€ş_ţÇ˙ÄŐę(ö.‹˙@]/˙ă˙âj[m;Nľ—ÍľÓŹ­äĆ7ĂnˆqéY˘€4QÍE4i$n0Čă!‡ĄŠ˙bčżôŇ˙đ?ţ&ŻQ@ąt_úéř˙Gö.‹˙@]/˙ă˙âjőGűE˙ .—˙€q˙ń4bčżôŇ˙đ?ţ&ŻQ@ąt_úéř˙Gö.‹˙@]/˙ă˙âjőGűE˙ .—˙€q˙ń4bčżôŇ˙đ?ţ&ŻQ@ÚZZZ#%Ľ­˝˛ąÉXbTúŕ šŠ(˘Š(Čž9ôťqš~÷Ls÷E|s8ťśů” ç¨˙dQ_U‡_š‡˘8%ń3Ő4†ÝŁÚüĘ~SĐ{՚ÂđnżĽjţąť˛ž†X%…e…Č(^7•ś°dy­´ŰĎÄ_÷ŘŻžÄÂ^ÖZT¤š-Úmżçâ/űěQö›oůř‹ţű‡$ť]ŃQ}ŚŰţ~"˙žĹiś˙ŸˆżďąG$ťŃ-Úmżçâ/űěQö›oůř‹ţűrK°]ŃQ}ŚŰţ~"˙žĹiś˙ŸˆżďąG$ťŃ-Úmżçâ/űěQö›oůř‹ţűrK°]ŃQ}ŚŰţ~"˙žĹiś˙ŸˆżďąG$ťŃ-Úmżçâ/űěQö›oůř‹ţűrK°]ŃQ}ŚŰţ~"˙žĹiś˙ŸˆżďąG$ťŃ-Úmżçâ/űěQö›oůř‹ţűrK°]ŃQ}ŚŰţ~"˙žĹiś˙ŸˆżďąG$ťŃ-Úmżçâ/űěQö›oůř‹ţűrK°]ŃQ}ŚŰţ~"˙žĹiś˙ŸˆżďąG$ťŃ-Úmżçâ/űěQö›oůř‹ţűrK°]ŃQ}ŚŰţ~"˙žĹiś˙ŸˆżďąG$ťŃ-Úmżçâ/űěQö›oůř‹ţűrK°]ŃQ}ŚŰţ~"˙žĹiś˙ŸˆżďąG$ťŃ-Úmżçâ/űěQö›oůř‹ţűrK°]ŃQ}ŚŰţ~"˙žĹiś˙ŸˆżďąG$ťŃ-Úmżçâ/űěQö›oůř‹ţűrK°]ŃQ}ŚŰţ~"˙žĹiś˙ŸˆżďąG$ťŃ-Úmżçâ/űěQö›oůř‹ţűrK°]ŃQ}ŚŰţ~"˙žĹiś˙ŸˆżďąG$ťŃ-Úmżçâ/űěQö›oůř‹ţűrK°]ŃQ}ŚŰţ~"˙žĹiś˙ŸˆżďąG$ťŃ-Úmżçâ/űěQö›oůř‹ţűrK°]ŃQ}ŚŰţ~"˙žĹiś˙ŸˆżďąG$ťŃ-Úmżçâ/űěQö›oůř‹ţűrK°]ŃQ}ŚŰţ~"˙žĹiś˙ŸˆżďąG$ťŃ-Úmżçâ/űěQö›oůř‹ţűrK°]ŃQ}ŚŰţ~"˙žĹiś˙ŸˆżďąG$ťŃ-Úmżçâ/űěQö›oůř‹ţűrK°]ŃQ}ŚŰţ~"˙žĹiś˙ŸˆżďąG$ťŃ-Úmżçâ/űěQö›oůř‹ţűrK°]ŃQ}ŚŰţ~"˙žĹiś˙ŸˆżďąG$ťŃ-Úmżçâ/űěQö›oůř‹ţűrK°]ŃQ}ŚŰţ~"˙žĹiś˙ŸˆżďąG$ťŃ-Úmżçâ/űěQö›oůř‹ţűrK°]ŃQ}ŚŰţ~"˙žĹiś˙ŸˆżďąG$ťŃ- ťľna˙žĹk´˙Ÿ¨?ďŕŁŮ˰s#Ę>9ŸôŤaš>ůŕöE‘űAxŸAÓn!›RŐ!śśYDbaĘ ˛d/ČŹs…oƊúJXštŠÂ•‘ĆéĘM´ý–üQŻŽŠááŠÍý™k§ËuĺČf‰IVĆŕ0ÍňçnXœd“^čÚŢŹüÍůŃEc–Éş:žĄ]%=oV?ň˙?ýőIýľŞ˙Ďü˙÷ŐW˘edŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐPAýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}QEdŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐPAýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}QEdŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐPAýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}QEdŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐPAýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}QEdŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐPAýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}QEdŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐPAýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}QEdŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐPAýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}QEdŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐPAýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}QEdŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐPAýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}QEdŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐPAýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}QEdŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐPAýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}QEdŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐPAýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}QEdŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐPAýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}QEdŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐPAýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}QEdŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐPAýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}QEdŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐPAýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}QEdŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐPAýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}QEdŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐPAýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}QEdŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐPBcT?ňý?ýőGöžŚx7Óŕ˙ľE1¤“~/kşśąăRŰR˝yáÓďŽ-íc Ź1€NŽIŔÉŕQEńősmž’Ř˙Ůgwenhywfar-4.15.2beta/doc/dialog/images/fox16-5.jpg0000644000175000017500000007160612364015347016640 00000000000000˙Ř˙ŕJFIFQP˙ŰC  !"$"$˙ŰC˙Ŕüˆ"˙Ä ˙Äľ}!1AQa"q2‘Ą#BąÁRŃđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚáâăäĺćçčéęńňóôőö÷řůú˙Ä ˙Äľw!1AQaq"2B‘ĄąÁ #3RđbrŃ $4á%ń&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚâăäĺćçčéęňóôőö÷řůú˙Ú ?ő€˙ź9ŕ_ŮŻŘ,ŚÖ¤ˇ˙Mż˝ćv dQ! ŢVĺWaA ą$ú/ö&Ÿ˙>vż÷đŇh_ňˇ;#űŸŢúՒ}#‹ţúŻNNP“Œ]’8ôi6ŠŸŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŻŸôŻ‹>4Ń<'ă kÄ6Ú>Žú‰ćŇ,á…ŮZóÖ5V ™0¨<1ŰĄëšNŹÖ킄_CŢżątĎůň´˙ż”béŸóĺi˙+Č'řŤăUđ§Ű‡€ö_AŞ=Ó4S˛, ˜.žq —ŠŕŠŤŁüIńNŁńBĐ[Üč7>ŸÂ0ë&Ţ&pď$x‹F$2eJ„l  f—ś—ó1ň.Ç´˙béŸóĺi˙(ţĹÓ?çĘÓţţWÍWß|YŤĘšĚŇZiöW> Ôuhlô˝E™”ŠYrËňʸ# ’xâş{?Wśţ#đţ’šužŁ§]ßXi7ŚCq<(ß4ŒĄl˝šČ<íĺüĚ~Ív=ťűL˙Ÿ+OűůGö.™˙>VŸ÷ňž~đ÷ĹŮÜęš$iڅđŐuť•šŐîÚ(Łľľ”… ‚K`ńŘžjŢšń÷R]&]WIđć“ ˝Ż‡mľ™âÔŻž9e3śŐŽç zž38ŁŰËů˜˝šě{ˇö.™˙>VŸ÷ňě]3ţ|­?ďĺ7Mš7zuľÓC ™ĄI xČc?ôÎ/űč֜óîţňmÄ?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ň›ý‹¤˙υ§ýő˙׍˙ŚqßF˘?őÎ/Κ•GöŸŢcĹi?†žń6w4V6°ępÈ.ˇmh™wđO—–9\É ‚ ë~' čzŸÉ(;űŠ+Ҏ•xŠOr#QÁ´ŽëB˙$dt˙šŠÎ?šýőY0čö?2ˇĘÝ˝6źđéş°ş>эƜ‚;~ËűUŒă(=—ę(úç÷CęĎůŠVžđ]ĄœŰx7Л„’9ĘXD<ēŐž^U°24˙řBüýښŸü">űtm%ĎŘbóǏ,†ŰWtŔÇJľE\_ĘWĚUÔ<á BŰě×ţđýÔh{Ÿ.[(Ů|ç9y0GŢnçŠď\˙Ä?…zî­›RžkkXmÖŘŰZĂlFŤ#DŇĆv‘¨ bşŞ)ťýĐúˇ™§˙lă˙ž¨˙śq˙ßU™E]ţč}[ĚÓ˙śq˙ßTŰ8˙ďŞĚ˘Ž˙t>­ći˙Ű8˙ďŞ?íœ÷ŐfQG׺Vó4˙íœ÷ŐöÎ?űęł(ŁëżÝŤyšöÎ?űęűgýőY”Qőßî‡ŐźÍ?űgýőGýłţúŹĘ(úď÷CęŢfŸýłţúŁţŮÇ˙}Ve}wűĄőo3OţŮÇ˙}Q˙lă˙žŤ2Š>ťýĐúˇ™§˙lă˙ž¨˙śq˙ßU™E]ţč}[ĚÓ˙śq˙ßTŰ8˙ďŞĚ˘Ž˙t>­ći˙Ű8˙ďŞ?íœ÷ŐfQG׺Vó4˙íœ÷ŐöÎ?űęł(ŁëżÝŤyšöÎ?űęűgýőY”Qőßî‡ŐźÍ?űgýőGýłţúŹĘ(úď÷CęŢfŸýłţúŁţŮÇ˙}Ve}wűĄőo3OţŮÇ˙}Q˙lă˙žŤ2Š>ťýĐúˇ™§˙lă˙ž¨˙śq˙ßU™E]ţč}[ĚÓ˙śq˙ßTŰ8˙ďŞĚ˘Ž˙t>­ći˙Ű8˙ďŞ?íœ÷ŐfQG׺Vó4˙íœ÷ŐöÎ?űęł(ŁëżÝŤyšöÎ?űęűgýőY”Qőßî‡ŐźÍ?űgýőGýłţúŹĘ(úď÷CęŢfŸýłţúŁţŮÇ˙}Ve}wűĄőo3OţŮÇ˙}Q˙lă˙žŤ2Š>ťýĐúˇ™§˙lă˙ž¨˙śq˙ßU™E]ţč}[ĚÓ˙śq˙ßTŰ8˙ďŞĚ˘Ž˙t>­ći˙Ű8˙ďŞ?íœ÷ŐfQG׺Vó4˙íœ÷ŐöÎ?űęł(ŁëżÝŤyšöÎ?űęűgýőY”Qőßî‡ŐźÍ?űgýőQ`r/űę¨ŃBÇwńŐźÎOâX˙‰ |¸ţď÷˝čŠ>&œxZăćQň÷âŠú<%okB3ľŽZ‘ĺ›GUΏcó+|­Đ{ÓiĐčö?2ˇĘÝ˝6ž_üyzřáD(ŞWŠłę[L˘HZ)Ła•b ‘ߏCÔ ĹMoŔ­b&Żá†ŐDŚą ˜ ţ`ęž^wnăŚ3XrŤj_3ž‡OEeéhš„֖íč2öž[}U”0ú*KŤ=ŇÖ[ŤŤ]> xPÉ,˛FŠˆ dłŔrI˘ŃďřÁ ˡő÷U$Ó´Š],,™eXB¤ę8ŹWđ&ľxöz6§á˝Jć0KĂi<2şÁ%T’(´{ţđBňíý}ÇIETţËÓ?či˙~Wü(ţËÓ?či˙~Wü(´{ţđGyvţžâÝSű/L˙ u§ýů_𬍠ˇÚ•ĽÚ$öö“‚'PUfí퀠ŕ`UFš”\“؇QŚ“[ĎXę^ żŐdŇloü=u¨ÄH’ŇĄy“r€äcéZßŮzgý­?ďĘ˙…MŁßđ˙‚UĺŰúű‹tUOě˝3ţÖŸ÷ĺě˝3ţÖŸ÷ĺ‹Gżá˙w—oëî-ŃU?˛ôĎúZߕ˙ ŚĂĂë­GŁ5­ ž’ÝŽR/łbVUfÎ1ŐÔc9ć‹Gżá˙W—oëî5čŽs[Ő| ĄÝĹg­j^Ó.f]ńĂw<0ťŽqŹA# Ž=+]4Ý-Ô:XY2°Č" Ę‹Gżá˙/.ß×Ü\˘ŞeéŸô´˙ż+ţeéŸô´˙ż+ţZ=˙ř#źť_qnŠçuźiúž™ Š%Ş]HcœDĄwŽäťňpzŒœUm[ÄtB];U×|)ay<Ë{›ťx¤L€FUˆ# ƒô"ŠÓI)_rFŰVŘęčŽIžđŽ­wöm-ôťç6Šv­oÉDÎ菎ÓóFマ*âÁ˘6¤úp°ˇűBBł0ű'Ëą™”|Űv“•Ěrž‡ ˆ˘ŃďřÁĺŰúűz+^žđo‡Öׯ4 %g$Doe†!Č]äg=jőĽŚ‰ykŐĽśqo*‡ŽXŁFGSЂ8"‹Gżá˙/.ß×ÜhŃU?˛ôĎúZߕ˙ ?˛ôĎúZߕ˙ -˙‡üŢ]żŻ¸ą4Š fI =˛O š=1ŢŤ˙hŰ˙Ď;żü—˙‰ŞóŮŮŰŢŘ=˝ŹądŒ)ǔüq\n‰â(ŽŻSNąđ˙Š5i­"´7Wvş”BÝZHĄ‘OĎxK "‚ŕĺţgóť´R%96w_Ú6˙óÎď˙%˙âhţѡ˙žwř /˙^{ŻxÇFĐŻ´ý:KÍ=/'ťš%űgŠäŽáˇdäs¸ď&YS–2ošBŇXřăÂZ.ŹišŒÓŮßÝÇo9›[}Ö#É2†›÷Œ3‹U1çs’N÷Ü{˝˜ýîç}ýŁo˙<î˙đ_ţ&íůçw˙€’˙ń5CFƒDÔl`żŇuIŻí<ŠŕŐeš7Úcx9 Ě+žšËç;ßw)‹´Xő!o&‘â¨lbՆ5)owۛ•’8ŐH &ăAš“sgýcî^çf÷sşţѡ˙žwř /˙Göżüóť˙ŔIřšÇ˛šđʚÉŃm|B“j–řßd5š$vyy<ÂßňÉs‘Î_9ósE焭őUŇ[đ.Ł Dżd“\s0$Ä22Kă›suóqîvaďw6ż´m˙çßţK˙ÄÔöóÇ:Œže*Ŕúy>˘°˘›ĂëiĄŚžŤŤ &Ö¤iđ˘2 ŒÉ¸ŒD¤äs—Î|ÇÝOÁĐŰßy’\*]gfŔťůŞŮ„|Ů/ cţÖ÷ę~fÉ&ăÉ7ľżĚ™JQiw:Ú+žąÔźŞÉ¤ŘßřzëQˆ‘%¤3Bó&:ĺČÇŇŽéhš„֖íč2öž[}U”0ú*-˙‡üŻ.ß×ÜjQXˇŇřbĘĎRť¸M8EĽĆŇßl‰] PžaÜŞ fÉc­\†ĂIšš; FGPĘ|…‘Ú‹Gżá˙/.ß×Ü^˘šÍoUđ6‡wžľŠxsLš™wÇ ÜđÂîšĆBąŒ‚8ô­tÓtˇPéadĘĂ ˆT‚?*-˙‡üźť_qrŠŠý—ŚĐ:ÓţüŻřQý—ŚĐ:ÓţüŻřQh÷ü?ŕŽňíý}Ĺş+tŽË]ÓałŠ;xî˘U‡Â‚3CüĎ­lQ8ňŮ÷e{ŽÁETQEQEQEQEQEQEQEQEr˙N<-qó(ů{qEN<-qó(ů{qE}^[ţëŸćyľ˙ˆÎޝÇćVů[ ÷ŚÓ 9Ńě~eo•şzm|ö7řňő;0˙‰R_ů ŰןßúuÁü,‡_:§ˆ&ŽűK@ńĄžÝŹœÜ“ć7I|Ý gî2=ëĐÚk”¸$îDdśŠ?úŠ+˝4KVxßĂWž×/tŠ5M{YhŕđĽ•áQ*ŤÎgŸ2¸VÎ!‡ 3t륊x;Ş]No^ŸO$š–Ÿâ ‹Řg)Z2qm+7>RdÜ: WťQJăąÎü9—E—ÂVoĄjŸÚVťi´ď´n]îĚF?ťž=p_<5Š_řsÁž!Ôľ;7´ŃĄžk[[I‰‘^2$”ČۆüŞŤ“ŒôŻ_˘‹â~ń5Ő׍´cĽ\ťAŞŘ]I5œţ ›P‘$UWA4nťm¤ ˘69a—!žÖźíkŔÂĎÄú­ţšwĂkśßČčˇ"Ńؤąś ˛d*Ł8;Aß\폅R-~fű[ŐľY­VEłŽí˘Űyœ1QjXŕm˖ gžNK…8řSŞkWÚî„÷ž!˛ţӒ)ťa6ż4÷,Ć&%~ÄŃ*ې/Ý meň z/†v˙jëۉ çóޏÜőŇU-?M‚Ęćęâ'‘šé÷¸b0IăsZÂiBIőˇćg878ľÓü(đFą‰Šh𞝥řłN ,0Ÿ[Ý5e’gF+‚T!܈ĸ<œŠ­đÇV×ďu]IuëÖ Nľ§\x‚iîO)Žßą4JśĹe ÷Hr2ů˝śŠĘć–k|Š’Š“ÁĄˇĹËa x†ó[ś˙„nVy'ż{˝Žn!ĎÎä•b0Jdăĺ\óęôQpąć^*ÓľWâÝ톓ŚŮŹţŽ;†ź°k QŽ%*‰őÜ=Ťâđř_JĂuőĺľÎ…á؍Ěţ!šÇÍ(ŽŞb†4au 1ĘĂ2Žőí”QpąăŢ#×D÷rĎâ?ß襟7owŁ-­ăŰ­ĹӉLĹUHH¤BGpÁű§5{­kCĄÇŹk‰§ŮKá{ŹîŻĄŚÁ{skq+Č­jűĐ)' óǰŤľ¤ćœ"—KţfpƒR“}Čó?i Ş|NցÔu;!…íÝ ŰŰś˙>ëkB ۃň“´çxŽkX׾íCEˇŸűjţÖ{Ď ř~v’Ţb›%žűlŽ p ƒÇ#ƒ‘Ĺ{•Í,yŒÖĎMÖu}/VńąĽŘŰč‹.Œ§UŸuÍĂ4ŢqË97¸ˆ›p†šŰOů7˙b‡ţŮ× ŃEÂǖéš>Ą¤čmăÍrůoĺ˛đťŰAm¤Y5źžQTĺšG/'îÔ)ů@äăšçôŻëą7‹-|9zˇŒž7ÖIoŽMŹ„¸ 딒T~ýŘ,2Śy÷*dče…ăk)-őyV+€–ц.‘ÎâA¸ółîÄŕäúĚ-,ÖŽ¤ ĽŰ=ĆĆ^?Z-Ň=›fÔ͸ݨNŮŰĺă9~Ő.s×/œůş›Ń]IKVq>đΡiâ­:úâËeź:śľq#ů¨qěĄlŸ˜vę;âŠhžÖäđςt=GĂŇĆ|=ŞÂ÷2M,Ѝš=ŽIÚ>+r8ŕ‘čqhö‘ěŰ6 vmĆíBvÎß/ËóţŠsžš|çĚ}ÄZ=¤{6ͨ›qťPłˇËĆrü˙Ş\çŽ_9ótÜŤ~ŇŽôťß5͸‚Ýiî­@e!ăh!°u~r{Ö„<jş–ĽŞkö—qýżs¨YĂ&Ą#ۀd-˘ţXnŕ•Ü<ěbŃí#Ůśm@ěۍڄ흾^3—çýRç=růϘűˆ´{Höm›P;6ăvĄ;go—Œĺů˙TšĎ\žsć>âŕyĹî‹ă}CĹ:EÍĺ­ď—câş"6˛K4ľĚŠŻÚĘ2î FI~ĹfjÖZ†˜şƒwĄ¤˙ ˛ŢEŞyń2Üşy˛ŞÉćŞ1V@ ó^ľiÍłjfÜnÔ'líňńœż?ę—9ë—Î|Çݙiŕ Zk_ŰvúJGŞn˝Éçžcć“vćȉ3’s—ÎwžçpąĂi> Öíľ§ęQx‚ćŐäŇ´ß°]]H˛ťÇ"đ‡v‘¢mË;XŸRI=I$ŐÂIFKşýQœ˘Ü˘ü˙Fy‡€5{=Zđ焼;â Ĺ:Oď Xŕś }ŚFą3 &tb¸$;‘—NEa6˝Ż7„ü76›­ë3K.‰ř–HäišŇȸ˙ILśVăfËŘ&5Ż}˘łšĽŐăĐ-Űâ€M^cyuĽIqašźĎö¨šš•ci”oÁĆ0Ĺuޡ¸ŃźsŚé‘깝ݵ˙‡žętťťy—ÎŽHT:$G‘+Šľx WĄQEÂǙxŤNÖ5_‹wśMţ›fłřb8îňÁށF¸”|Ş$@×pöŹˆsĂá}*? i×ז×:‡b6w3ř†k4˘şŠŠхԀĆ7+ |Ę;לQEÂǏx]ÝË?ˆüC˘†đݽތśˇnˇN%3U M"‘ĂîœÖ=I‡ąŽ&Ÿe/…ěfłşźńÚbÍtęŢs™7óäŒěsŽsľˇzďŠ<=&˝€ëúžm$M ÄM ŹČz‚^6e8ČĘ<őéZÖVĐYYÁgkĹokH˝T`ôÂÇ;Ś=ě‹á)5+‹{›ćł&ćh3ĺË!…w2d´œ‘ŔŕôŽ˘Ť\YĹ5íľŰ3‡śß°0w ՚ŠÉ5ş/Փ´äűżŃQY–QEQEQEQEQEQEQEQEr˙N<-qó(ů{qEN<-qó(ů{qE}^[ţëŸćyľ˙ˆÎޝÇćVů[ ÷ŚÓ 9Ńě~eo•şzm|ö7řňő;0˙‰SWľ¸˝ÓĽľľÔ޴ɟn­–6’<N¨éČĺOăyeźž'řăWťńžˇu&–5k[xĚV‘.!WXäÝ(áĆʰ+׍ž_éŤáÝwBÝý›[’îK–ŢťĐÜîß°íŔĆ㌃ďšćF§5qăJR˛×4Y-$_ ÍŞ[=śŚLłGęÎe“•.ě†8ŤšGŽ%ťńZřu,ôëq”¸žŐLw“ŤDŽd†óPnÁmŕĺ[Ž+_Yđ~™Ş—7Ţ.ý}ůnŁ÷3lÜÜŠůĆÁƒÓŻĄšđ\wöS^kš˝ÍÄW6ú{˜|”– 66á“‚3řĎlqF¨xöęęŰRđ’[\Í ĎŽ¤Sܨ‘>Ďpvś:Œ¨8˝6˝˘Zk2iĎvó/ö}ŘťˆFŔ-ăĂqÓ7LăšĂđ˙€l4kÍxő}Zć=Ýí´űyž!Qş…+„K`*ŕą'ާ'&€sŸ źgŤĂá?˙ÂG§°´Ő`ň!Ô¤ž3Ló$O&eBż(eČ`ěx M\đoĹ[kZUšEŚ,:ĘťX‹}Y..“lf@. <œ˘ąá›m8&´ü7đďKŃ?˛˘ŽŻ¨Yé ß`´ź–6Šddi>TVfÚîâB†;@­ řPh6Zţ˛úeŞí´Ůš‚ĆCybRp9ĆĽŚG‚źD4ςZw‰őť‹›Ąm¤ýŞćFc$˛íRO$äąĆ9=jÝ÷Š5í'B“Q×<7mo<ł[ŰŘZÚę^sÍ4ŇŐ˜Ńc!™rAqŒœœs§aá]&ŰÁ ŕůK˝,Y›'YŘ’"ĽH%@ç¨ĹRoGq˘\i:§ˆuÍR0´\I–ŃâpńźojK w>âvŒçœ€fj>żÓ4íeu ŐôŠl•ěíďźČŚKŠDqşJȧŽü†AĘzŐxĎÄśş>ŻkkŚŮXëzmޚmé–‚ću@C´9ÉĂĄ80$ŕVňřO’Ęţ+íOTżşÔ.-§šžă?ŮäY"@^GŢnç5c[đn™ŤMŤÍqqyš¤6ąČŃ:(Ű;IŚTáƒ6~lƒÇ\šŚOźs{á;Žu;?Fâ٧ž |@!‘ö“”ˇó[uŘ2qUüGăxôNëPłÓŽőř•iÓĹŰLi šťh”Č*Ž3’ÝĆă­-KŔP_˝Ôłř‹\ßië§ß̆Ý^ę%2݈°„yŽ3ÎźäŒÔˇžŃî‰.oĆŰ;+1ľÓîZĎçF~ďRÜ7¨čćR†§ăËí*Ó[MKA…5 )­ G ëInb¸rŤ+Jb ŠĽ\šŘv…Ď5ŃřGV“[Ń#Ô\émć1 úm˙Ű `;Ź›?MŁď†c›SÔľ;M[RÓŻu­ây­ŒDĆ!2Úsć0;Ž•7…”hœßƒźeŠjşV›cá˝ íÓŚ•íŰjZť/”˛—§›ĺ;K!ňÜňŞ0O5^ďźރâ?ŢśšÚŽŚ]Ú˝ĂI~PŰÄma.!k –r¤ 9ŕ’MnY|=ąÓ!˛]\Ö´Š­Źc°yíŢ{˜PąA ’6\ŠwĂ*Š5Sđn™¨Yx’Ň{‹Ŕž"Űö˛ŽšLB‘|™^>TœóŸĽgÇóxkÓjëfnĚrF› …wşŚ÷pŹUvćm§ŠäźCâm^ďJ𮥦‹ ćť×Ä>^—Ť™­ŽSě÷ 6ĹĘd#aĆŢ WyŹŮMbÖđjWšl…ƒ-ŧ—ć.a"˛} šÁÓź ŚYĽŠ7—÷jÍŤÉq+Fâá˘h‰p¨ ­ŃUz|ˆŸ/^Ţ;%Đ#>!“W“I_nýŔ‘!óÚO?ËϗĺałĺîÉmOa㗚K K#ě÷Ň믢ŢB.w­ź‹l÷Őś1J*c!OĎÎĹZ˝đ>›p÷3Ç{¨Ú^KŞjĹw ’Ú%a;7)RĽ‚ŽÇŰ _鍼Ghš†Śˇ‰¨OűK|f宊•2Ą”%6ěۡ€Ś?ˆŇí‚/ľ+šXma丑 ’v„ÂCaŘT“´ƒÓŠn“ŕ+ ;QŃn“WÖ&‡C.›i,ą˜`GŒÇł„ Ŕ)bF=rhżxŽ_ZŰΟŘJ˛łÚŽŽ,#ŕ bšŚă“\žĄă–š x§N‚ţk)ô-Jůôč$ÜÓű _hc´ho_˝Ç7‡â‹Jóč†ä_n”Č&0¤‚?/ íçdđ@ɇÂ~'ńDšżŠkÚ1ŽÇRź‚ eÔüĽ;†@ŽL "*żó1Ç#&ˇżáÓ?łžĂçŢyŰ?ŰŢťźď´}ŁoÝű›řÇ\wĎ5RëŔVÁ¨Ú_UKKŰѨ-ş˜J[\‰–o62c,O˜šÚ嗓ňŃ jaˆ6şĎ…uiĚP<únĽem)Ň56<ŮĄÚŃÜ"‚GφR Ź§ƒšżmăË÷¸óŚđüQiC^}܋íҙƐGĺăa} üŕŒž7áÓä‹U[˝WVź—Ušľ¸šši#ÝşÝ•Ł ¨ůŻBsV˙áÓ?łžĂçŢyŰ?ŰŢťźď´}ŁoÝű›řÇ\wĎ4h–źaŹÉĄh˙oű(b@…ľ-DYŔ€ç–“căŚ0ç5ĚZ|GmCĂúMţ—¤ŰŢÝ_ë/¤4Qę Đ$Оą‘fU!ăÄ`ä(8lă#ięTQ:„*BFĽ¸P2Ğ9''&ŠKHńöŁuwáŮ/|9ž—â’k;Ą˝ă‰`i”Ë–6ł(*ł““‘ƒ[ÁżlřŤ˙÷ü]}ĄűYÉżř—ţÝôŽő=7O† íŹ`†ÚÖÚ5Ž(bjFŠ0ŞŞŁ0éĹsΞ BUńU šW}ŢĆuęÎ2ŒiǙťţćçü,ˆŸô>řŤ˙÷ü]đ˛>"ĐűâŻüÜńuúâďčžŰýą?“žŇâę,ş/›äěĚkš†éĚTuÁéUíüm§]}Ş;KBâę FM9-ŃcÝ<Éć Ĺ ,R6•ś€qóŚď]ĺđNÜúúÁ8c6ŻÉ§ŻüäßٓĆŢ3Őţ8x{NŐź]ŻęRý§ĚˇşÔŚ–7Ĺ´Ź2ŹÄÔ űjźoƏíđłUľľĚŇëÖRĘѨ‘Ĺźm •ć˙8šöJóq4ý•N[Üô°ő}­5+X(˘ŠŔÜ(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šĺţ&œxZăćQň÷âŠ>&œxZăćQň÷âŠúźˇýÖ?Ěók˙T:=Ě­ňˇAďM§@sŁŘüĘß+tôÚůěońĺęva˙…Ë?k/ů7˙˙ŰŻţ•Ă^­ŽŠĘťpÜ6TŠňŸÚËţM˙Äżöë˙Ľp×ĹV~?ńݕ¤6v~6ń%˝´ŹPĂŠ:$hŁ ŞĄ°JTㆩJTą4ÔâíŁI­6ŃčaŠŁR¤Ł*rĺj˙‰ú1ŤhşnŤżíöŢvűIě›çeĚ3mó‚:ě^zŒpG5Oţ=GrŠg$osr×/4w2ŹË#3ą) mńŒÉ/ʄŢIÇÎŮüř˙…‘ńţ‡ßŕŢă˙‹ŁţGÄOú|U˙ƒ{ţ.˝W˜Sz¸žzËŞĽe3ěY[X|yřO¤^\m6˝1‰ËɑĎ>ŹĚqŰ>TěŘQîkĘţŽŠáOévšž…ŠéƒÄ6&;ű‹ś€ĽĆލ$ěëĺČççW˜|Ř8әž˙ ßáßý^˙ÁEż˙U/<đśÎţĆĆçÁK‹÷xí“űć2Ąv …RyÇJäü 6ŤkĽ|<ÔÓXŐoŻu¨&Žńo/¤–9żŃd•>FbŞCFŁr€HÎIÉŞť´ťńOÙßÄ:†ĄŽMö™5‹[‹ˇ—Čšű›Ő˘$‹rŹ]B(P@<š§`=ĂßôińéţĐ4Ýfhć–ÎK].8äځVBSĺâP:Œ†=yŽŽ¸/éąęß<'i5ŐíźFĂRg6—/¸ÍˇËć!Ł8?)ŒtČ#ř—JÖu8ĽŇŢÖâÁ­ďä1Kv ŕ6& 0™¸c‘‚I"AsÚęËŤ[( ÷—0ŰBS̕Â.ć`Ş2xÉbő$ ńjÚ÷ü&^ ś—^°Ńo ž!Ą}ˇÄYFcňŁ`Ëlą2]Č%@\{oöŃ\ü;š7:EĺœŇř&ÖĎkâŁe}5ýˇü$3n%ČŇ †óˌpçpÁÉÎM?ę6w:ÝáŐüAt~!Ôő-bîŢVńMĹŰĘ-BIÝ śĚłíEU •'ďc4žűréŸîçÖőŤšuř&ƒQ7ŒÎ%Sk$Ş@-„e1ŽpÝrI9˘ÁsÔĆŻŚ´7Ý-ÄňíĽˇT•fráOĚp;g$Uęń?‡—v đ–“ŹÜľßö´6şľˇöœ˛´,-Ž3 ĆÎ|ą•fʃŽ^ř{.ĄoeđăQ“ZŐď.5¸ĺPű]ô“$Łě˛J§cŞĘѨܠ3’rh°\őę+Çź%⛋›o‡:Rk2ÝëIńęśĎrÍ'¤™KŽrĚĂňH$tÍWřSŞkWÚî„÷ž!˛ţӒ)ťa6ż4÷,Ć&%~ÄŃ*ې/Ý meň  žÓYšťŚkŠq&—,óE†&•­¤Ž7`H>[˛…Ę=éú^Ą§x‡D[Ë ‰&˛şWE•7ÄÄTxeäPzń ‹ +ĂţˇÖľíSGđÝݕäÓܝbâkľ•Q™ˇć1°ĘÁ”3HÁŮ5Ďčú#„ÔîţÎĆÖ{°<ˇoÝ@Ęß(?t2ńÔç€kF cž牷G"†SŒd‘^Ż]jWžŇŽuY.%¸o xˆ$łŚŮ%„Ä28Ŕůš ŒxęjmkXş‚-hÉŻj6ž'ľkUđ֙ۢ]F`„ŽŘŰ8y ŞěÁś€~î3E‚çšQ^/ăýWÄś~3Ő´M;PԔXíńZl™żykB6´Î~ăL„ěéóŐNó\Ö§Óü=Şj:›[č:ŃżÔZk­n}2%ß*›HÄh͈ !2Ąˆ<ń‚X.{ĽSŃő;^Áo´éüűvy#ą—ćGda‚ᕇá^[o}rĐřVßĹž,hŇZ_;j6:Ź‘Es:L‚ÝĺDlÄB\˙‘•Ž+ŚřŰţiÎ&–mׇ̕vť˙ĽMó0ŔÁ=HŔ˘ÁsŹŃu;gIľŐtŮüű;¨Ä°É°Žĺ=?W+Áţ^[6—ŕK-ĕޣsĂŹŘŮ ÁiäJC˜łˆ6¸„#¨RŰşśs]OĂÍK[ŐźQoĄ_^^–đźśúœŒě>ŰpěRÝßűů ¤üŇĄę(h.z}äŸu߲ßßÚ[]Ocg¤ýŽŢgńÖ ěL›|˜cV2Ÿ2°Ç(;ՙ 爟E1ťŐőkh‡„-/V+émŃn$yó&‡#h<2 ĎR¨EŐŠ˝k!s şHÄ­q˝P’ë‚U€=2ĽxĹψ~Űgiyâďj:2ÍáK+Í-­oÔ\ŢHŽf*4€ˆąÜ0ßtćľ4ü,Ý'Pńeäúvłá­<Ź/¨Ën“^—͉cđYsç8ä’X.zn‹ŠŘë:MŽŤŚĎçŮÝF%†M…w)čpŔřŠš^-đŢÍCřquaŠj3IŞŰKĹź÷nÖî˘ÖIc ;ŤFŁr€H'$揅:Śľ}ŽčOyâ/í9"ëśkóOrĚbbWěM­ąIýŇĐF_ Ń`ší4WđRÚVř}Łę÷𖧍__ŮE$ňŢ^É6O$aYŠŻ\dNI<×oHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP/ń4ăÂ×2—¸÷Qń4ăÂ×2—¸÷WŐĺżî°ůţg›_řŒę 9Ńě~eo•şzm:ÇćVů[ ÷Ś×Ďc/Słü(…‡ńŕZxÄ7MoȇKšĂ:“˜‰ŽÖ‚Tăq\>ĽăOŮZx‚˙OľĐ˙ł|>lÇٞ)Dˇ+$Čč>#+ć1WρŒžkžŠEp3ř§[Ňîőí/]żŃ!şłľłşľźŽÎc.e–!D$/#†ˆľ†ňËŔŹű?ˆZĂi´om6ŤkŠŮiöÓI§ÜXĹ!şhŐŕ˜ůˆťddîÚ0Fx,=:ŠóWÇ^$ĐÄVz¤eý֞úlrYÚĚŤ+ÝČÉšâ #áH"’ǰ_Âú˙ŠľX5›OąA%ĺ˘Âöw—:eޛmsżvä1ĚĂ&ÒĽÜ9X.vôQE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Z[ŰÚZĹkiVöđ H˘‰˘( ŕ; –Š(˘Š(˘Š(˘Š(Ź h0hPÝíźťżş˝¸77wwE łIľPąU@ Š *€Š×˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€9‰§¸ů”|˝Ç¸˘‰§¸ů”|˝Ç¸˘žŻ-˙u‡Ďó<Ú˙ÄgUΏcó+|­Đ{ÓiĐčö?2ˇĘÝ˝6ž{üyz˜áD­ŞXÚęze֛}›kw Á<{ŠďGRŹ2# žG5›/…4 lő+9,3§ĺýą|çýîÄHםŮTQĆ:zć¸ÚËţM˙Äżöë˙Ľp×ČţđF“Źxv×Qš¸˝If߸FęaŮF2§°Ź#š7cď-_Âú­susddžę(!–EšDm°HňÄTŤŒŽěÁ— “ׁŒëßhŃhşĹśŸĽEw>§ąŽúúvűCǍ…Ľ%ÝHŔĂ @=…|i˙ ×B˙Ÿ˝Kţţ'˙Gü+] ţ~ő/űřŸüE>O1s\xCŔQۧˆÄ6v’ h’Z­ěׁRv3\L’Iš‰Ü@ۅîćş<'ŁCĽÝé¸Ôfˇź &űFŠs4„)ČGşe"žCřĄÚh´Ç…,ěäžHŢŢćRe`NMľŔě űfŚJĚĽ¨QE# (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€9‰§¸ů”|˝Ç¸˘‰§¸ů”|˝Ç¸˘žŻ-˙u‡Ďó<Ú˙ÄgUΏcó+|­Đ{ÓiĐčö?2ˇĘÝ˝6ž{üyz˜áDňĎÚËţM˙Äżöë˙Ľp×Í˙ ?äIÓ˙í§ţŒjúCö˛˙“ń/ýş˙é\5ç˙ąßĂÍÇž şţŘşÔ űĎ+ě˛"ç|“çvĺoî cëšUcJ›œśEľv?Ꮍá-ű_ţŸ ˙n}ŚĐĹkóÝż9ýÍÜ~ńrɡĺ&¸úúƒţçÁôńý˙‡˙Q˙ óŕżú řƒţ˙Ă˙ĆŤ‘fu'+˝GČϖž˙ÉÓxGţźŽ?ôEÍ}‹_'x{NƒHý´´&٤x,šţŢ6‚ĹR;ľÎ ŻŹk˛Nöh"QEIAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP/ń4ăÂ×2—¸÷Qń4ăÂ×2—¸÷WŐĺżî°ůţg›_řŒę 9Ńě~eo•şzm:ÇćVů[ ÷Ś×Ďc/Słü(žYűYÉżř—ţÝôŽđŮżö€Ň~xvëNšđőîŤ-ÖÍĆ9Ö%MŻ+ däIíŒwݞë'@ń‹Ż\ęVúMú]KŚ]5ĽâްňĽ^ŤČî222ÎAŽIF3ƒ„•Ń­ľšäđŰzý:—ţ§˙Gü6ޅ˙BĽ˙é˙ÄWşÖn§ŹÚéúž•ŚMÍ6Š,‘@ČU)Hwdä )č8ŽŠa˙“ńaŻs䏆.´ńÇíwŁř’ÎÖ{Hî䞐Ă)Ąxn_@ŢxéҞɢŠęvč X(˘ŤÍrŃßŰڋK‰dv3¨\[vŕ1Îr۸Ŕ?tçe ąE[TžľŇôË­Jú_&ŇŇžy6–ŘˆĽ˜ŕN<šłEeËŽŮ&ˇĽéAfyu;iŽ`‘Tl —ťvNA>jă\âŽMrŃßŰڋK‰dv3¨\[vŕ1Îr۸Ŕ?tçdĹQ@›áýf×[ˇšžÖ9‘mŻgłq(—†FˆÁ<§ńŘV•QYžÖmuŤ{Š­c™Úö{7€ x¤(Ä`ž SŽřě(JŠÍđŢłkŻi ŠŮÇ4p´łDPf96čHĆP㞘ŁĂÍŻˆ|=aŽYG4v×Đ,Ń,Ŕ Ă  ú@TQEQEVü%zD–ZőŤÍukŽÜ-˝œąÇ€KFň`Ř b6휑ĹnĐE˘x‚-_UÔlí4űŃ„Ín÷Żĺˆd•qšoŢHĎ$¨^   š+7ZÖmt›2˜ćvÔŻEœ&0W1ťĺ˛F#=2sŽ(đĆłkâŘëvQÍ˝ě+4k0ŸP üMiQEWźšky-•m..<ů„E˘ˆ†Ö;ß$axÇ9aÇ Š(˘€ +Zńž—ŠŰi­gyuuukss vꤸ€!dů˜|Íć(^ÝrEkDĹâG(ČYAÚÝWŘűШ˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šĺţ&œxZăćQň÷âŠ>&œxZăćQň÷âŠúźˇýÖ?Ěók˙T:=Ě­ňˇAďM§@sŁŘüĘß+tôÚůěońĺęva˙…'Ć:î•ámKPÓl'żž†Ý­´1—ie#¸ˇ“ŘdöŻ8ř} řŻÂ*ЖűEś[+˝7ű7P¸ąź’čÉp…ćK™G”›3N äfEg×hŽkšž=ŕo \čúWĂËŤ k QŕšRslË Vľ‘•g8ÎŃ*ǀÝcĽVđ^‰ˇˆ|$^Őmu{E¸ ˝’ĘDW¸6ŽŹňĘFًH[k‚ÍŔj˘‹…?řąnoď´ŤŘßŮ4Sť]Ýčłj‰ ƒË ‚ˆ*Ě ! ˜ęk—Ň4űˇŃ<'Ž4 OTÓ-´Ë˜'´“O–饝ß…ĺ„cűľ‘CŰIÉ<潢łuíĂ[Š8ݚůDd•6ˇóÚˇ#‰Ô‘ěN(¸Xń­ ÔŢ|>đß?†­îŹYľ'7†6­öwM˛3Lvš[aç-RÜé~$ťř} ÇwĽę’ßEá-jÖT{w2,Œ‘,Q°äî`¸’N8'­{N•agĽéśúvmľĽ´b8bŒaQG@*Í ma§Zx7ĐęśÚT–Z\^žmNHa!d–'‰”ČÜ—i—–;ÍĎŃřŢŐüKđĂXľM‘ćÔ4‰|›Kˆ×x‘˘%‡ 0lwவÓQEŔň{/ hÎąŕčĄđ›Ĺ˘ŰŘ_‹ťYô‡ś„NE°XÝ6Hb2bšۑƒ¨É˘č–śşĺľ´vżdňŰŰČÓŰÄא'>Zƒř‚ńšöš(¸Xŕ>BöŠŞÚĹ YéöQź^EÝś‰&•ö˛TîÝo'ĚpţťŽ•‘¨iâ×âżö–ŠÚ˝ŐÖŁœ×ş ŰěŁňŐH/˙ŐŹjw—É$°&˝ZŠ.<~ۍoöě:ÂëcĆĎ"Üů ç­Łßř8ȄÄĚÇ)ˇ˝CgŁÝ.šh?°u%ń‚x™î.ľshâ7°űCąiĆá+‹vCcĺf˝šŠ.<ŠHľ-˘Đ‹Ť˝ÚřÜßłĽŒ†l÷ćq/›ˇa]Ž2$ä íôB5ԛĹ>žżĐ§­8ś:|— .$şV‚f…T–S—kŕžŁp5ě´QpąĆüłš°řq§ÚÝŮ^YJ“]"ě2)š”ŽěňN9ďœóšó$Ö֞ ‹IđÖŠŁř‚Ő$ţÚźť°’h …I$`šÂUbz.Żs˘‹…řS jšî…6 łYk6ąH5v_\Ä÷Žb`Ţ}ëJŃN<Ě:°Ď `($ŤâMźţ*Ńn|A˘Ýk^ŽŇé%ś†Ĺď.™˘ň¤xQX°Ř%PŰHR{g5ßŃEÂǑřÂ×wסń.=Ő­­–Ş^ŘĚË o4FÚ)ł•,"ŔĂg”=×5Řü2ąš/CŚjv’ŞÇ5ݸˇşŒ˙¨ŹjUşŻ—°ĹqÚşş(¸Xń řVÂOř/B˙„RâÖ{=bŽGý•$ ![k…,ď°,¨I°,§püŘ2ë~Ő­´ť­2ĂKxź;gⷑěN›%Ě-f֊FŰtd2Â'rJ!ĆAŕ…+^ŐE wÂm=´ďÝƓHÖŇß<śĐ&m:;d*™Ž8ffuMÁ˜g,@\)đ­‚És/„‹i'ĹwRj–Öşi2\ÚlBLhťŚ…edm€0^×E K˘i:ŠC˘›]&ţ×I_˝ÎŸk%ťŁZY}–UË!‰ ĽČVhu çt Á YGâď júšÂ3o“z|ł5ĽĐ3yŤ…‚Sş$mź/Ţ5ď”QpąâŢ(đŸ‰5; ĂڌSÇâ-ÖÓÄ7ąÉÖy—s°ŕŮďŒTž°ńŁ…â=oGžˇŐ/hőě´QpąăŢđľÎĽ|<şÓôiŹ5F‚huIÍł,ZÖFUœă;DŤt Ž•ŕë/|;‡ţýCO×c+­\ÜZ<_hšŽšF\űˆu,8ČÜ{•aé~Ń4í\ęÖđ]IxŃ$šžžăÉV ˛Ć$v‚@Č@:ڋ…ŽS㛨ßÝ!ą°şşĂzÔ9†ŢI!÷˜ƒÔŕâšÝcÂłM¤xďUţÁš—X-$Ňfű34Ë$vPa ă!ƒŠŻ$ŽLW´ŃBacÄźiáýVóĆ^ }Ğâćx›DÔcđĺÎĄ-Źb(ŔňgŠ@śĺdH`2NI`p=ŽÖőgÔ.ěĹ˝Ômkł2É XäÜ3ň1áąĐăĄâ­QEŔ(˘ŠC (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€9‰§¸ů”|˝Ç¸˘‰§¸ů”|˝Ç¸˘žŻ-˙u‡Ďó<Ú˙ÄgUΏcó+|­Đ{ÓiĐčö?2ˇĘÝ˝6ž{üyz˜áD(˘Šĺ6 (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€9‰§¸ů”|˝Ç¸˘‰§¸ů”|˝Ç¸˘žŻ-˙u‡Ďó<Ú˙ÄgUΏcó+|­Đ{ÓiĐčö?2ˇĘÝ˝6ž{üyz˜áD(˘Šĺ6 (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€9‰§¸ů”|˝Ç¸˘‰§¸ů”|˝Ç¸˘žŻ-˙u‡Ďó<Ú˙ÄgUΏcó+|­Đ{ÓiĐčö?2ˇĘÝ˝6ž{üyz˜áD(˘Šĺ6 (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€9‰§¸ů”|˝Ç¸˘‰§¸ů”|˝Ç¸˘žŻ-˙u‡Ďó<Ú˙ÄgUΏcó+|­Đ{ÓiĐčö?2ˇĘÝ˝6ž{üyz˜áD(˘Šĺ6 (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€9‰§¸ů”|˝Ç¸˘‰§¸ů”|˝Ç¸˘žŻ-˙u‡Ďó<Ú˙ÄgUΏcó+|­Đ{ÓiĐčö?2ˇĘÝ˝6ž{üyz˜áD(˘Šĺ6 (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€9‰§¸ů”|˝Ç¸˘‰§¸ů”|˝Ç¸˘žŻ-˙u‡Ďó<Ú˙ÄgUΏcó+|­Đ{ÓiĐčö?2ˇĘÝ˝6ž{üyz˜áD(˘Šĺ6 (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€9‰§¸ů”|˝Ç¸˘‰§¸ů”|˝Ç¸˘žŻ-˙u‡Ďó<Ú˙ÄgUΏcó+|­Đ{ÓiĐčö?2ˇĘÝ˝6ž{üyz˜áD(˘Šĺ6 (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€9‰§¸ů”|˝Ç¸˘‰§¸ů”|˝Ç¸˘žŻ-˙u‡Ďó<Ú˙ÄgUΏcó+|­Đ{ÓiĐčö?2ˇĘÝ˝6ž{üyz˜áD(˘Šĺ6 (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€9‰§¸ů”|˝Ç¸˘‰§¸ů”|˝Ç¸˘žŻ-˙u‡Ďó<Ú˙ÄgUΏcó+|­Đ{ÓiĐčö?2ˇĘÝ˝6ž{üyz˜áD(˘Šĺ6 (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€9‰§¸ů”|˝Ç¸˘‰§¸ů”|˝Ç¸˘žŻ-˙u‡Ďó<Ú˙ÄgUΏcó+|­Đ{ÓiĐčö?2ˇĘÝ˝6ž{üyz˜áD(˘Šĺ6 (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€9‰§¸ů”|˝Ç¸˘‰§¸ů”|˝Ç¸˘žŻ-˙u‡Ďó<Ú˙ÄgUΏcó+|­Đ{ÓiĐčö?2ˇĘÝ˝6ž{üyz˜áD(˘Šĺ6 (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€9‰§¸ů”|˝Ç¸˘‰§¸ů”|˝Ç¸˘žŻ-˙u‡Ďó<Ú˙ÄgUΏcó+|­Đ{ÓiĐčö?2ˇĘÝ˝6ž{üyz˜áD(˘Šĺ6 (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€9‰§¸ů”|˝Ç¸˘‰§¸ů”|˝Ç¸˘žŻ-˙u‡Ďó<Ú˙ÄgUΏcó+|­Đ{ÓiĐčö?2ˇĘÝ˝6ž{üyz˜áD(˘Šĺ6 (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€9‰§¸ů”|˝Ç¸˘‰§¸ů”|˝Ç¸˘žŻ-˙u‡Ďó<Ú˙ÄgUΏcó+|­Đ{ÓiĐčö?2ˇĘÝ˝6ž{üyz˜áD(˘Šĺ6 (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€9‰§¸ů”|˝Ç¸˘‰§¸ů”|˝Ç¸˘žŻ-˙u‡Ďó<Ú˙ÄgUΏcó+|­Đ{ÓiĐčö?2ˇĘÝ˝6ž{üyz˜áD(˘Šĺ6 (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€9‰§¸ů”|˝Ç¸˘‰§¸ů”|˝Ç¸˘žŻ-˙u‡Ďó<Ú˙ÄgUΏcó+|­Đ{ÓiĐčö?2ˇĘÝ˝6ž{üyz˜áD(˘Šĺ6 (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€9‰§¸ů”|˝Ç¸˘‰§¸ů”|˝Ç¸˘žŻ-˙u‡Ďó<Ú˙ÄgUΏcó+|­Đ{ÓV\SÁŠä}A}AŸΏcó+|­Đ{Ók籿ǗŠŮ‡ţHžÇ§˙Ϥżř0ş˙ă´}O˙ŸIđau˙ÇjZ+šćś"űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb”ď Á)ŠcRŞú­Č#żC53í˙ž°ŕÚă˙WUiŻiđŠj÷‘ŮÚýšwlłI,€2Îěěx’O _‰^—B×5[yď$:%›Ţ^ŮËg-ľÚF¨Î“:Ł|Á[i G^ľł„Sąšrjç;ž’EŽ7‰Ýˆ ŤŞÜ’IčóŞËÚ騌ďk"Ş‚XFčR{]Ä÷q_čo&ÍĐÜ[ŘŕŤ/B:t5Ăř`™îź=疓{}ĝ̰;‚}pĘ꣑=ƒ™­Ężhđçüőƒ˙×üz´xsţzÁ˙ƒkţ=]ގăE×4}TÔŁśÔ5™=>V&f@ €Bő,FIr@Šbń-¤ž-šđĘÇ8ꎰŠů܁ĺ˜ä’DPsť16xĆçĐ´Żř`÷Ží˙ž°ŕÚă˙QöĎX?đmq˙ÇŤş‹Äś’xśçĂ+âňŢÂ+çr–c’I@9ÎěÄŮă#ŸMO´{Ńh˙_đÁďcöĎX?đmq˙ǨűG‡?çŹř6¸˙ăŐéßh÷Ş$×­ôęzíâK%śi-ÜËŮ#Bě8#ëEŁýĂźphđçüőƒ˙×üz´xsţzÁ˙ƒkţ=^•i~—6ÜĆ$¨ŽĄş€FyŠ>ŃďEŁýĂźyÚ<9˙=`˙ÁľÇ˙­ŞƒjŠUXśԒOԒkžűG˝yž™Ĺł¨űŠ<ČŁ˛¨‘€ĐÚŚqVş[˝™ƒń4ăÂ×2—¸÷Qń4ăÂ×2—¸÷WÓeżî°ůţg â3Ş€çGąů•žVč=é´řżäc‘şze|î3řňő;(!EW1°QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE‡ăk{ďěŸë–śęphW6÷—vp.ů6ł’1řŮU}Ł’ĆNçźmýĄă ßkÚF‹ŤĂe‚ő.3ua-ź÷÷ídD†EžYä¨É— žkťśÔn--`´k ‰žĎ B$ˆ W ĄAĂ0 ŕ \őԟŰ˙Đ*÷ţú‹˙‹­ĺŹ›_™”ZQIœßÂťKý6}JXÝMâ)-ԝ]˘cĹŻüłŠ3ŒCłĄ„óœž_qjŮđąÄž>ˆOţJÉVŽ­pŕŞé—@žwŒ(úÄăčĐŐkH¤ąŽĹĄ>sY.#`ňÚ3Žx8bGl€ Am˙­¤Żˇőąçž>ŃüsâßxŻTŇ´ @-#ˇąĐŽoďdľ–m¤[–ž8ü–Ż6ĹÎĺ !ŽjOś—ŽřÝať#ďsÝ˙lO˙@Ťßűę/ţ.í‰˙č{˙}E˙ĹŃgý4_Ň<Ťá>ƒŤŮëˇM&›â+[y—Vxbę'ž•Ą`ßhžiZćí‘X’ €,čÚfœŸ ľÝ5‚”´Ž˘ZËCřšqák™GËÜ{Š)~%˙Č­uňŠůSî(ŻŠËđąůţgâ3 Ńďm/ô 짡¸…˛KŃÔŕ†  äÖ§ŻŽ˙f݉*žźźđőýđź†ÎĹŸsϑ$Ją?2ěFA#œ´Ÿë­ţřŻ?ű;람­/ř&‘Žé.Fś=nŠň#â˝d˙Ëh˙ďGü%zĎü÷OűŕSţ×óţđGőĎEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEyü%zĎü÷OűŕQ˙ ^ł˙=ÓţřaKů˙ř!őßEy x§X=gOűŕSá'Ö?çşßě7ü˙‡üýsű§eńZćŢŰÂó™a‰ śd•Â*‚I$ŕ9'ľň×í-ăŻG{‡b¸HíolViä@DŹ Č9ŔBrÉäg‚Rxš`ŇĄ m×ńfŞ>wÔ˙Ůgwenhywfar-4.15.2beta/doc/dialog/images/qt4-5.jpg0000644000175000017500000007664312364015347016413 00000000000000˙Ř˙ŕJFIFQP˙ŰC  !"$"$˙ŰC˙Ŕن"˙Ä ˙Äľ}!1AQa"q2‘Ą#BąÁRŃđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚáâăäĺćçčéęńňóôőö÷řůú˙Ä ˙Äľw!1AQaq"2B‘ĄąÁ #3RđbrŃ $4á%ń&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚâăäĺćçčéęňóôőö÷řůú˙Ú ?ú/GŃíćľÎMĂĺg =MdxĎTđď†Ú)ôŃ{¨^1KKVÝ,Äu<Gv$]…˙ {s˛?šýď­|ßń›[Őt˙ŒşŹĐ¸ŒĂkíŒíŒ sˇęĺŤęrŒńřÇAJÉ_Ëc‚N1‚mŁ?ˆŚÓáűfłđýaą2Ig~ˇ2Ä=Z<.@ď´ąö5ŮéŢŐôË}KMŽÂęŇáĹ*JpĂúcČŻ–|IüZ‹0ô(¸ţUé?˛Ž§w=ż‰4ŮZÚŢé&ˆ@F6ĺƒĺőęçy \ş‚ŞçÖÚ7ú“ BNÉŃý‹Śϕ§ýüŁűL˙Ÿ+Oűů\'íŤęz'Ă;CIšk+ĽżąŒM ႽÔJĂčT~ľÎü1ń˙‹žĎĹמ*´‹Z‹Lń ޟ žMuÉ„ŞŽč”tsóőňnŹÓľßŢlĄ^ÇŽ˙béŸóĺi˙(ţĹÓ?çĘÓţţW€j:×âfĄho5$´“Ĺ:u­˝ąŸĘň#“OiYH9†JńĎ~+Ă?|s‹8dţËťÔŻź/¨j6Z—Úškˆ¤ľÉw mÉ\ěĘqœOˇ—v?fťLbéŸóĺi˙(ţĹÓ?çĘÓţţW‡Ü|\ń†™ĄxJĂű LÖľÝcImAĽś3Iˆˆ„.ŘÓ"V-ó`OqZúĹr×YĐëĂi&Ľodó]Ţ ĺË;aĄ-‘/1# ćŸś—ó1{5ŘőŸě]3ţ|­?ďĺŘşgüůZßĘó_>%ń‡ˆn|Y‰çŃŽ#ÓľëË(DDąyr@1÷YžcŢ˝C?ôÎ/űčŐ*“j÷bqŠčCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙ž>y÷x­Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙+Ÿńö‰Ľ_ĹĽÚčÉŠę“&ôľˇ¸7ť„_Ż'°5Ógţ™Ĺ˙}đ{Ý_Rľń—ˆćI<šŢýă-Œˆv íˇÏĆÔĂSRMę{Ü?“Ă4Ä:nÚ+úž…sŹ[éaeń„#ą˛$şˇşűJEîŕŔ{€kŤIŃ&śY⾲’)rÓô–KÉîÖ]ŁšP¤œţę+Ň|)áŰ? x^ Ě,‹łI+ŸšY–sîMtTVxuOđDߍÄăÚu§{1ńpb+!˛1óˇń{QVž9ôťqš~÷Ls÷Eő”ęsSŒťŁĆjÍŁŐ4s×ćVůOAďVjśŽsŁÚüĘß)č=ęÍ|Î'řŇő;(˙ Ug˝E‘Ńmuś1BĐŘM*înT Až ň+BÍWíĂţúÇţ ŽřŠ>Ü?čŹŕŞç˙ˆ  TU_ˇúëř*š˙â(űp˙ ~ą˙‚ŤŸţ"€-QU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐWíĂţúÇţ ŽřŠô{‚˝žĄlěŘÍň;WrÍ€Nђpxâ€-QU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐWíĂţúÇţ ŽřŠ>Ü?čŹŕŞç˙ˆ  TU_ˇúëř*š˙â(űp˙ ~ą˙‚ŤŸţ"€-QU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐWíĂţúÇţ ŽřŠAd%žĄ#)Úč–3ĆpBer# dЎEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐWíĂţúÇţ ŽřŠ>Ü?čŹŕŞç˙ˆ  TU_ˇúëř*š˙â(űp˙ ~ą˙‚ŤŸţ"€-QU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐPßĸ2Űę)!wĎa4H 8ł $€9ä;Ňý¸Đ?X˙ÁUĎ˙@¨ŞżnôÖ?đUs˙ÄQöá˙@ýc˙W?üEZ˘Şý¸Đ?X˙ÁUĎ˙Gۇýőü\˙ńjŠŤöá˙@ýc˙W?üEnôÖ?đUs˙ÄPŞ*ŻŰ‡ýőü\˙ń}¸Đ?X˙ÁUĎ˙@¨ŞżnôÖ?đUs˙ÄQöá˙@ýc˙W?üEZ˘Şý¸Đ?X˙ÁUĎ˙QÜęk -!Óľv#…_ě鐝Ae ’pH䊽Erđ‘xŸţ„ö˙Ŕ™?řÍđ‘xŸţ„ö˙Ŕ™?řÍiě¤G´‰ÖQ\Ÿü$^'˙Ą=żđ&Oţ3Gü$^'˙Ą=żđ&Oţ3G˛{HeÉ˙ÂEâúŰ˙d˙ă4ÂEâúŰ˙d˙ă4{)´‰ÖQ\Ÿü$^'˙Ą=żđ&Oţ3Gü$^'˙Ą=żđ&Oţ3G˛{HeÉ˙ÂEâúŰ˙d˙ă4ÂEâúŰ˙d˙ă4{)´‰ÖQXZ>˝uq+[jZ-í•ÖÝńÇ 2ÜoNo• ČÇ+‚r@Óűp˙ ~ą˙‚ŤŸţ"łi§fZwWEŞ*ŻŰ‡ýőü\˙ń}¸Đ?X˙ÁUĎ˙@¨ŞżnôÖ?đUs˙ÄQöá˙@ýc˙W?üEZ˘Şý¸Đ?X˙ÁUĎ˙Gۇýőü\˙ńjŠŤöá˙@ýc˙W?üEnôÖ?đUs˙ÄPŞ*ŻŰ‡ýőü\˙ń}¸Đ?X˙ÁUĎ˙@¨ŚĂ$sD’Äë$n+)Č`z})ÔQEQEä_ú]¸Üż{Ś9ű˘Š>9ôťqš~÷Ls÷EőT?ƒDpKâgŞhç:=ŻĚ­ňžƒŢŹŐmçGľů•žSĐ{՚ůĚOńĽęuŃţ ĚśaŸbŞbˇ8š‰I­:Â2mś˛˙—oý•Ą_Ĺ~ ‹ĂÚ+jrŮÝ^ţţ xíívy’I4É (ŢĘŁć‘y,Şś~)výćą§Â=Aq<ŠŞ^ŰŹÂ8źŹĘ'‘ @Hw9u(BĺHpF_č2ă^đÂé–É+—Ô´ůdň§0şĹä2HĘŕŠR‚¤7sŠĺüqŕŰĆ´žľĐ"żźŽ ëVJo5I.\ÜÜ Qaî$fź–î`“‚yzŢ5đ”6oy7Št8í’ŕŰ4ͨDfmŘo^ECk㯠\xĘo EŤŮZ;hn´Ç™D‚F ‹ťs2¤{Řc…tn\׏´›ř”\čf§ö> ś“J–ŐÝ'Čc¸ýŰFv.ˆmš_ [kşoŠíîoô”d˝Đ,,îg˛hÖŢŇ{srÎťƒl&e ą[§8ĐMâ_śŤXiVÚŤŹŢ^ŰĎrąŘ˜dp´JěĆicfL“×ҙoăĎ ś‘gŠ^ëVZTwŽńÇŁ:[Éć#”’2ŽGĚŽĽHäV'Šô]WVńž‹cŤjMľŽ›} ×vg/žIm FDČă "sš#8<îżáÍsLşNđ펣&›%‰ŠK›Cb×ÎňĘň}ŠîщŒ™7~íIÜňqČéúˇˆt]!­×UÖ4űtŰ-ĹÍĘE桢î#qäp*+ßxvĆĘÎö÷ÄUľ­đSi<ב¤w€ ĆÄáň#ę+Ęě­uo izUĆąĄĂŞĘţľÓŽá–ňű,+˙‰ŒŞ“qýÚđr+7IđçˆÞÔ­Fľ$á 6km;ědl¨KďˆWcě üƒ!¸Ŕ˝‰˛2 P×e͌ő÷m˙ŁŇł|-lÚ_†4­1Ěť­,Ą€ů˛‰(~gń6­á?i‘WNł¸6§ŮęzŠ]ÜŤE/™021™BČŞˆÚ@âF)řg[˝ŃźA4ÖÚ뎭`ŢNł5ˆűRŰMć4[m"ŤŻîË1$‚/ ĎO‡Ĺ>›E“[‡^ŇäŇŁ$=ę]Ć`\ČŃĎ˝xŁĂŃéPj˛kÚZi÷ˆ.šî1 ¤+1ÚůÁÂŁžE'ąŽ/\‹UŐl4ÍV/ Io.ŸŹ-ěş\łÁćݢŔń%\Ç˝KŤ(/˙,—‘ĐgŘřsRşÔ´ÝF÷EŽÚ Ź‘fÎŰIżˇ–MĂĺ’YŹŮÉȊC06óÔdţńΙ޴–úś‘ąýŁmŠÜ*ĚńÁw4(Â2ʼn)$Ž3’08ćńv‡agök\Đôő2Ü*łę)°ŹSylw6ߙI@ëüŰrp âcđÍě~kdÓ"]Aź_ý¨Řd bţ×óźÝŮëönŮݏ—âájŢ*Ňľ COO*ÍüC ‘Ć×ZŒrŔF 9hƒž: ƒ‚q@ΛĆ^6Óôv†ÂĎTҤÖP°ˇ{'S0Š{¸avňĂá$$™Á9V‡ŠüL4ӕt­CUšÔnţÉmmdbÎ"’RI–DPD˙ĹéĹyŽŠĄëß.……ćŇľ-jóĂ?١ˇVc՚â{ťo$ÉcšpŤ)ËH‹ŹpÄńŒ€ K?č ĽOŞÝÇ  kŁis­4p43VŘNℕe`Uˆ!´őčz~—Ť­iśš|Ű|ťŠî‘"}Ă+‡'#§<םxƒĂÚΏ-”ž:ŽĄ$ŇÜMŠjý‰ľ'•Ö%R­r˘%ŒŹaX*Ž< fřwK×ü;ŚřbűRŇPšą›VěEŐ°˜}˘ä˨IŽ"DQBěÂČŘQ‚´ę—>(đőś5{{K‡M2…Ü—qŹ;Ă+źš ŹĎPGjѡź†ćŢ;‹yٚT$i—÷†LśI\žĽ§Ë'•9…Ö(ď!’FWJˆÄ!¸ăœVwˆź:öZ~’ú5ľţޚvŹş„śwšœ—\)ăÂIs!ÁRë"Š`ť“ą9 goiŽé7vÖw6šĽÄÎRŇHŽ–Ⴓ vٜ đŹ{Ž˙Äzž’˝ţľŚÚ,3yî‘IĺůťO ĺüř<íůşs^m“ŻŰů!‹Aq*xšM_ű;ˆDŠ Ř˝Š‹źÂÎe#~2Ě7f’ÇD×5?ĹŞęÚľ…ź_ý¨`–xĽ1ŔşGŮăíb7 ‚Œ yunę_|=uáż]x[XŇľKĂö1Ä.c•'ňíÖQ"ˆßsEşEBÜ|Á—śk­Ň|G˘jóÜA¤ë:vĄ5Ťm¸ŽÚé%hŁ$ŠŕőŻ<ń—Ž\iŸô{}"yżˇígšÂäMŠGm>a ĂŤ—Œœ•ŮŽŹĐ6’Öţ>Ńľ(ĄÓítkË9=Ş´ś męF#—ôČČÝwƍŚë×Eˇ†ľ˝^K[(ŻndąĺbŽG•W‰%GfĚ2pŠÝsŠšŸ>‘ekşÁ­Á¸t–íXÉşíŚ ěűç’Gü1ⳌëžđƗy%Œpi‰`l#‚@–čŠ.u3&Ő)Œ*§Ě¤=XńO‡t{•śŐőý+NăiV+ŤČâbŠ fˆ;@' ÁŠoüE˘Řj6Úmţą§Zß]œ[[Mr‰,ÜăäRrÜúWŽü_Kťâ ĄĂŞ&ˇf˛Ărn!_łŁŹ)Ł0|ů‘łÇą[.äprjߍü'Ż^ř‹Ä&#ŽÜŘk˘ :]>4ˆ$J›dkˆÚTĂ)pŃÁbB† ĎćÓ|Í×6CţŸ­żôrU/;ޝo&ëűŸů~ˇ˙ŃÉ@.ęĺüUâ-rÇÄş^ hşvŁu}guxď}Š=˘F=ş C)bMŔě1´ó]ęäźYŕÝ3Äţ1Ńľ-sJŇu]2ĂO˝­ŻíÖ|M4–ŹŽŞĘW…†@OnÎN>7ńĹ场vŽÚĺíÖ˛,oŸDŇ'ž’Ănž.ž$c ŹÎXĄ ĺ ĆçäĚNÁo~(C¨xëÄ1ßéĂÄśW/w§ÍýŸűUm¤ ͆-še\´Eśœ0rËÁ76>&‚öČiÖÚuż‰S†Ţ ŽŮto°,jĄv‚$…˜ž×Ű@˝ĐeXś_EŹZ\ —/,GUҤ‰ĺáW(¸f zě¤3Žđߊ4›¤Ó&¸2ÚĂsi5´ąîŠ1ĘŞŰN88dŤü;‘wcŮUjĎˆ-ˇŠnŹősD´ŇN—a{cw-Ú ¸k‰.Úĺśşí†2ťźNNF8‹ř‡Eđýޛ徿söÍ3PKß9VY…ľĚ25Żď_€˘6ňÉ;~c¸†Ë?Y§éyă­K_Ôtš ˘ -äFÝ<ĐśÖaŔ’,ŕ•=‰Ĺu^"×mt? ę:ýВ[M>Î[ÉD 3˛F…Îܐ q’˝eéž4‚kůl5'QđíĚv­vRh6<(ĘŽâHĽt–L‚ŔĂŽk˜}YŮđřYí‹kMáOěó•rn>ÉĺěߝżŒçóŠOxWR‹LźÔmu;ďk‚(áśmM-HŠ/>9$"Ç^gîՔ¸?:&Nwzg‰4=OM—SÓu­6öĆŢmÍ˝ŇIm9u$ NM3KńG‡ľ[yŽ4˝{Kž†ÄłImw‹Ŕ3$”~O+zň(ôĎoâËÝRÓ Ě:\ń.ą=’˝ÇŮn%–h¤ű2ˆĐ2Lśîe°0­ź˛Ô|]Źřî =)´KŠětpbi i%hgžFY ů‘dÚ¸măk!aƒŠöm]ŇuťCyŁj–:•°b†kK…•7Łr’3íW|Úóż†únŁgŠjúڧş“ŢĽźdę’X—o/Ěä-˘„8˜– €gľó˝čsĂ':[[ťŸý%iÖW…Nt|úÜÜ˙č÷­Z(˘Š(˘Šň/ŽGý.Ün_˝ÓýŃEú]¸Üż{Ś9ű˘ŠúŞÁ‡˘8%ń3Ő4s×ćVůOAďVjśŽsŁÚüĘß)č=ęÍ|ć'řŇő:č˙ `çßÝYYN%ÓŁVłˇÚ­4™Ú"P ÄxÉ8ç­ęŠŚ˙ČM˙Ż oý•Ąý¨ĎΙ˙e˙ăTcęóóŚßŮřŐlQ@˙Řú‡üüéŸ÷ö_ţ5Gö>Ą˙?:gýý—˙Vŏý¨ĎΙ˙e˙ăTcęóóŚßŮřŐlQ@Ćąŕë}aa]^ĎĂşŠÂűâHňˆŰűËşƒî*řŃďŔŔšÓ?ďěżüjś(  ě}Cţ~tĎűű/˙¨nô Bâ%íšbâD|ů’ŸşáąţŤÚˇ¨  ě}Cţ~tĎűű/˙ŁűP˙Ÿ3ţţË˙ĆŤbŠÇţÇÔ?ççL˙ż˛˙ńŞ?ąőůůÓ?ďěżüjś(  ě}Cţ~tĎűű/˙ŁűP˙Ÿ3ţţË˙ĆŤbŠÇţÇÔ?ççL˙ż˛˙ńŞ?ąőůůÓ?ďěżüjś(  ě}Cţ~tĎűű/˙ŁűP˙Ÿ3ţţË˙ĆŤbŠć-<oiŞ\j–ś~‚ţäb{¨‘ÖYGűN!Ëtîj˙ö>Ą˙?:gýý—˙VĹ ÇţÇÔ?ççL˙ż˛˙ńŞ…4 Aoešűf™űČŃ6ů’ń´ąĎúŻöżJޢ˙Řú‡üüéŸ÷ö_ţ5Gö>Ą˙?:gýý—˙Vŏý¨ĎΙ˙e˙ăTcęóóŚßŮřŐlQ@˙Řú‡üüéŸ÷ö_ţ5Gö>Ą˙?:gýý—˙Vŏý¨ĎΙ˙e˙ăUSWđškfËVƒ@Ô-I aş*:­ŽŽŠb[č7VđGźšD0ĆĄ4yUUG"Ŕ˙ě}Cţ~tĎűű/˙­Š(ƒ{ j6SŰ}łL_66MŢd§ĎúŞ›űP˙Ÿ3ţţË˙ĆŤbŠÇţÇÔ?ççL˙ż˛˙ńŞ?ąőůůÓ?ďěżüjś(  ě}Cţ~tĎűű/˙ŁűP˙Ÿ3ţţË˙ĆŤbŠÇţÇÔ?ççL˙ż˛˙ńŞ?ąőůůÓ?ďěżüjś(  ě}Cţ~tĎűű/˙ŁűP˙Ÿ3ţţË˙ĆŤbŠć/źo¨[jÖ~şźľ9ˇ¸™ä„ç?#rż…_ţÇÔ?ççL˙ż˛˙ńŞŘ˘€1˙ąőůůÓ?ďěżüjŸmĽŢĂyk<“Ř2CqŹ#’BÄ+ŤăšŤE š2h˘M4Q@M4Q@M4Q@M4Q@ZŽ™uyŞŰÝA-Ş,PIyÎĂ%™ĆŐoîšgö>Ą˙?:gýý—˙Vŏý¨ĎΙ˙e˙ăTcęóóŚßŮřŐlQ@˙Řú‡üüéŸ÷ö_ţ5Gö>Ą˙?:gýý—˙Vŏý¨ĎΙ˙e˙ăTcęóóŚßŮřŐlQ@˛čw’ÄńK6•$nĽYZIH`z‚<ŽETŃü#hm4{oéÖĺ‹ůVŞń&ăÔíX@Ď˝t´P?ö>Ą˙?:gýý—˙Qý¨ĎΙ˙e˙ăUąEPŇlő>Č[ҥĒ>ď´Ěż}Ůą$ôݏ­ÄËűşWţÍ˙ĆjZ(/ř™wJ˙ŔšżřÍG%ŐÜv°ÜEdVâChnАŒÜ†xůqÖŹŐCţB:Wý|ˇţ‰’€4¨˘Šň/ŽGý.Ün_˝ÓýŃEú]¸Üż{Ś9ű˘ŠúŞÁ‡˘8%ń3Ő4s×ćVůOAďVjśŽsŁÚüĘß)č=ęÍ|ć'řŇő:č˙ TÓäŚ˙ׅˇţ‰JˇU4ßůéżőám˙˘R°4'˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(Ş:‡ü„tŻúůoý%^Ş:‡ü„tŻúůoý%iQEä_ú]¸Üż{Ś9ű˘Š>9ôťqš~÷Ls÷EőT?ƒDpKâgŞhç:=ŻĚ­ňžƒŢŹŐmçGľů•žSĐ{՚ůĚOńĽęuŃţ ŠŚ˙ČM˙Ż oý•nŞiżňÓëÂŰ˙DĽ`hOEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPTuůé_őňßú&J˝Tuůé_őňßú&JҢŠ(Čž9ôťqš~÷Ls÷E|r?évărýî˜çîŠ+ę¨ˆŕ—ÄĎTŃÎt{_™[ĺ=˝YŞÚ9Ώkó+|§ ÷Ť5ó˜ŸăKÔëŁü4SM˙>›˙^ßú%*ÝTÓäŚ˙ׅˇţ‰JŔОŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¨ęňŇżëĺżôL•z¨ęňŇżëĺżôL”ĽEP‘|r?évărýî˜çîŠ(řäŇíĆĺűÝ1ĎÝWŐPţ =Á/‰žŠŁœčöż2ˇĘzzłU´s×ćVůOAďVkç1?ƗŠ×Gřh*Ś›˙ }7ţź-żôJUşŠŚ˙ČM˙Ż oý•Ą=Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@QÔ?ä#Ľ×Ëč™*őQÔ?ä#Ľ×Ëč™(JŠ( "řäŇíĆĺűÝ1ĎÝQńČ˙ĽŰË÷şcŸş(ŻŞĄüz#‚_=SG9Ńí~eo”ôőfŤhç:=ŻĚ­ňžƒŢŹ×Îb/SŽđĐUM7ţ@úoýx[蔫uSM˙>›˙^ßú%+Bz(˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ ٍČGJ˙Ż–˙Ń2U꣨ČGJ˙Ż–˙Ń2P•Q@EńČ˙ĽŰË÷şcŸş(Łă‘˙Kˇ—ďtÇ?tQ_UCř0ôGž&zŚŽsŁÚüĘß)č=ęÍVŃÎt{_™[ĺ=˝YݜÄ˙^§]á Şšoüôßúđś˙Ń)Vꦛ˙ }7ţź-żôJV†/Š|e˘xfxâŐĆŹžg–Kmîć"Ň?–‰ćE(v|(RwËÇĚ2x{Ĺ0kzýć›kgw Vú}ľâËuo-ź­çKsS ¨Ž˜6Ůýŕă&‰vˇ7~´ŠŇŢ[‰[Ňe+!QˇwlĘŞĚO` < ÇŐ<¤xâŽłsâ =BČhZ|6Ďs hźĎ>ôžÜüžb†Œä|Ęcšw),y$ÖU#GYÉ]ŽI`Pwev‚růםŔM^)§čÚžŁáKŻ[k‘ËqŕĎĽÔ‹dňĚóÇ5ÓÍFpd#růą˜Ť‘Œ°Ďkđv-ü7w Ń Ň [çâ :]>;ˆö'ďVÖBZ Ë´ő*[řŠĐxSYţÝŇć˝ű7Ůü­BöĎfýŮű=Ô°nÎŢňˇcśq“Œ’ëYňÎŰ^ˇšŁÍ2@ ě"Ř=¸óa‰Ĺ%ř Ŕť€žÖMÖłäxĂNđ˙١}ˇOťźó÷ăg‘%şmێw}Ł9ČĆ·S˛˜6Ęv…Řß2÷Ăř…¤ÉqŽxœÍáíNűÄ7^Oü"şŒ6’H–x…q2śűg;î+šX}î”ěuRÇR˛žşżľľ›Ě—O¸×K´.Cr…Éü’Ćr2>lu*ńƒaž˛řĽŽ6-Ćş˛´ÚǐÍ0’=.ŰË{n3ťÍRšNI]§8Ŕ˝aŁXi$ř‘=—ƒŮľŤď6îĘk{ˇűd-gl%źEYîBT8mÄž?Š˜™{,YÍď^–/h1߅đޜî!- ź’âú[’™ăĚ 92‡ÜçŘiž)šđ´˛ÝiúłŢMá Ľň˛Ő)ňy‰Â㊚„?ľľ[řŁAšëNśÓ5’–÷ń™Räźľ6ÍœŠqŔVĎ1“Őr=N]JĘ-bŰH’l^ÜŰËs [OÍMČŮĆ ь“ťŒŕâÝxžá› /řV˙Zđ¤ˇŮK­iö“ɤ˝ËÚăT´ňHFhŃbY HpŞŹNŕ'?Z´ŐßÇą_Ůxc캄^&€<ńř~î[Ś´7jŻ)ÔL‚?)˘f& ŹNÜ(]ĘîV’É4LňZËlÂG@’•$…bĄţRFÜá†@9jňÂjţ%Ň"ń‡ŢëO†OJńÝŰ iuhžęĂkMÎĄ˛†q‘Ű|.ł¸Óź#ýŸqöëmŠjŰE2°+lˇłˆÝÎĎ(G´ô+ˇP#¨˘źŔ֚ş|AđÍô>ţÉyn'Xx~îcCk1 q},…n˙xąüáH-ƒ¸dŘřŕŘt áfĄc KcŤ4QC­Ě eŸË:lěÉpHÎŃ2Ä~‚¨Çž´ňȡ‘Ŕ-ehŢ7vœ؄'v[q#‘˛AÚ Őć_´ÍKPűŘ4űť˝Ţ×íWȅŸ3Iö?.1÷Űkm^§iÇCKwđçĂ ńI‚ @Ú<ÚMëja-osp’Úˆŕ–Y6źäÉ?1ţ€L˘źGVÓnŕ𶏤ŢxkíVjZź(×ú-ÖŤ´)zâŐ~É)`ŃŮ+pŞź?&‹§]7…ź)˙ ˇ‡5-GF´—U†ăOţʖo-ţÔE›ľ¨29aWUĺÂďC¸đÔíÔWĎVZMőç€ü6ĐiŮđýžŠŽ}ŞĘ˙F›VŘí/eśŠUy ¨”nůđXôŸéégáŸ[jśšžŁso¨\5”ćĘKqg˜îś4‘´ŒŃÄ!c ‡f9xň”Óź7¤čóčzt“éVČöťťŰ#31E$’FI&łőKô˸ŠŰZĂg<ídéĂş›@_•p@''Ÿ\Ď jút=„RjvźvŁ+ÝFŹŹ#PAär(ń§c|śZßZ\H—{ĘĂ:š ĺH2B“ĆHˆ  ÔQE1Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@QÔ?ä#Ľ×Ëč™*őQÔ?ä#Ľ×Ëč™(JŠ( "řäŇíĆĺűÝ1ĎÝQńČ˙ĽŰË÷şcŸş(ŻŞĄüz#‚_=SG9Ńí~eo”ôőfŤhç:=ŻĚ­ňžƒŢŹ×Îb/SŽđĐUM7ţ@úoýx[蔫uSM˙>›˙^ßú%+Bz(˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ Î×ô[ rÉm5są$#[ÝKo"6ĘÉ+Ž ‘Z4PMMąŇ4Ë}3MśKkKt IŃGăÉ=É<“ÉŤtQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@QÔ?ä#Ľ×Ëč™*őQÔ?ä#Ľ×Ëč™(JŠ( "řäŇíĆĺűÝ1ĎÝQńČ˙ĽŰË÷şcŸş(ŻŞĄüz#‚_=SG9Ńí~eo”ôőfŤhç:=ŻĚ­ňžƒŢŹ×Îb/SŽđĐUM7ţ@úoýx[蔫uSM˙>›˙^ßú%+Bżˆ5;@Ň'ŐľkƒogÝî#g9f  *‚ĚK’HĹO§^Zę:}śĄe2ĎksÍ ŤŃр*Ă؂ r>°×őďčş^-˝•žžßڗWś\[É*Eľdqźœ?ĘcŒ‘ó ä đś¤ďáďx‡N:žŸĽx•çÁe$V’YËaxč¸,űQ%o$ĄfňÁÎđ Ů+'BÖ´őMzËěŢWöF –{÷îówZÁ>ě`m˙_ˇýÜçœ6Ô<)ŐíSíŇřnŢi.­ňc̉lˇ=ĹOTxÎŕ˝AĐ׌řƒĂ–6Ö˙ ąđ›ŚˇŤXÝÍesm¤6nĄ“OZ4S Íp˛1‹vćb[iÉ5ą­řB]]š/iŁLžűÂú¤osG˝VśŻ+ô2üóĚwż“ƒLNŞ‘jVRë:DsföÚŢ+™˘Ú~Xĺi6Î0ra`źă#>]đkF¸°ń3ÜGą‹ű5˘ťˇ‡Ă:bI6řĘź˛M<‚y@ éť!˜—?(;ąčşEŻÇK˝jçĂh×wÚM˘ŮjiĽ™6OťnPˆ˜ÄĐŽY—p Ł8ýTÖu+-G˝Őő)ź‹+y.neÚ[dhĽ™° “€ Ŕ׉ü=đţŠeŻiňř‚Ýż´ ŽäkŚ ܍ߍC a5ăLŃÜĄ}ŹĄ˜ *@]_ž Ôź#â;Ä=ŢŠîƒxžľ~ŃýšŰ]ن^?×˙ŞŰ)'6ČÝ ťVOŒőŸřG|­xƒěßjţĚÓçźň7ěó|¨ŮöîÁĆvă88ĎCIŕőѓÖ‹ iGIÓF˙&ĚéÍcĺ|íť÷,ŞS-¸ýќädŸľĐ.­|'ă='JđíĺËMá[řěşÖwÓ\ÂC+VöGÉ"HÁÁRůčč +Ě5ďK˘ëwxLţ̞űÂÚ¤Oq•I/C[ W•ú~yˆf;ˆßÉÁŹ <=ŁŁřŠÇÁ>Ô´[kżŢŮ]ÁuföŸjž‘TA‘ lŠ<ŕҌƒ˝~cŘÖ[c†ţŘ8Šń—EŠöŚĽáM_ZŐď,JřvâŇÂ[*/˛Ş˜ŇDDDÂVe%KŤ€gî4W5ń:ÖţóÁWśú|7š’žvŰ,Öë2ăC‘ó4BEňMr:Ɲ˘Ká==tO j0xf=ieŐt´ŇĽ…Ž ňemJ‡d˜Y'ÍąÎÖÎKÔęĽöĽecuaku7—.Ąpm­Wi>d‚)%+8ů"äŕ|¸ę@>Mgá„ŐDł“Ăבxaź_5ÍĽ…ĹłĆ-ě˙ł'_ž2Š&¸ß„`$U#ćĹVÖźŁÚjˆş‡ƒď‡tŸ3Ájş;]¤Vsi ʅQ‰ˆÝ°$"s“„łÁ,’Kpk,+ÜŠ ŞŰא2JüÁNTńŒ5y6łá™5KĽŁÜ\é’řÝnĽ yOđř{†3(’~RŮSœâ™ý•7†ő_:ËCżM EńÚ`ś˛łyV˛čţ[4 %\Nůü \˘źO^´×uÍ3ÄWÖzMőśŸsâŘnnmďô™Ś7VKŚŰǸۍĺO5”‚¤‚•Ňü8¸O ř]–č\É ţśiÖ°čŇiË”FĽbˇšFt‰H–VÉBŤ€2Őxż[ťŃÓMˇÓ´řoő R÷ěv°Ír`‹pŠI˜ť„r $.xRIŔď[ľÄ|LđΛâ-{Á_Ú^´ŐííőyžŃö‹5"…Źnłťp !‘aëÁapľÉ˙dÉ˙ FáÔ˙á/˙„›íŰd“ĘţÎűNíżiĆĎ/ěżşňˇg;{Đoáďkk–šgöw“öíŢyűśý‚ö;^›Fwů›úü¸Ç͜×Y^9âmÓ 2ÎňŇýŹ<`–“źl‹óę‘=ą,Fđ7Šî ‘3P[řrŰQMBřgRĐm†„˙hKť)-DښK–ŹCćş4rn”dËóŔŐEx˙‡íźYŤx—L}gOÔSLÖŻ‡ˆ$Žâ2>Áä‡X­ŸűĹ“í<îI˝+?áf­ŮxťG›USą›űbh|5q ^ÁóŻžvŠtó6şíRrA=k]Öł5MËěŢoöž ö{÷íňśÚĎ>ě`î˙Qˇ}ěçŒëYň{ŤęSyV6ň\ÜË´śČŃK3aA'€ Ş—Zϑă ;Ă˙fÝöÝ>îóĎߍžD–éˇn9ÝöŒç#:ńăú§…ěuř’Ăž żÓěgđÜV—şsÁö­GäkR@<ŮŹ„Ě3Ë!ÜHę…ü1Żř—Âk„–? ŰčúŽŰ)ô—ľ‚)ZâĎ $Šb%`Źż6Ňă8ÍzuáşÖ­čV“ŘoĐ´ýKY†[;Ý}Q1xëdĆÖ9Ý*BˇĚd;y 5čÜęš=ؤWœřcáΕ…>ůž’+šRľňau•ăţΙÚ;ŁÔĆ'HWcü …\sŠ{măşŢ.‘ŁkÚ=Ÿ…Äş"xš?˛Ű>=Ő­˝ŤXBĎ"ÚBA¸‹Ď2/–ż(v''ş™Š˙Â%=ŽŤ ŢMáŰo &Ó­ôi­’m<Ů!]›4Žb.Ć }×F gşQ^—5ç‡ĘČ֓-ŔŸ#y<ß3‘ňmÎqŠŤđďğđ’ŢxŚxŽž{+=amlĂŔbhYZťŁ+*°"W—!†A$t ýOÂ:×öŚŁŹéŇéďxˇŚMâ+Ýű8]júŻŰ’;wH“ěÖđ…%•I`a<ăžpËđ™řsűmtśÍö‡¸6Ë'Řćű9˜ B}žVü‚6îÎAĎ ÷ź)eŹ *ăQ•n äV!–Îf„ÜČĘŠšÇż,š]Ů$ŕG­řĆ:Ÿˆ’ć}B íâ×­őžMrőGŮŁťI„cP ¨ťC’ŰŠ‚B“šrüH÷ÖZ忁Źďt;Ą/‹-ľQšOíß%乇f݉—>vüm]˜ÝHJ˙„ĎßŰk¤}śo´=ÁśY>Ç7ŮĚŔběňˇäˇvrĆxŞrxďĂö wúŁÜÜÝ\_Gmž™pď'ŮŽ R˘ĆŮš2UI{ ęđ9]oŔž1ÔüD—3ęOo˝o¨¤ňk—Ş>ÍÚL űeEÚ–ÜTËżáoj:_ˆěu+™­+íÝÁ‹§j1ÜŌ¨čˆCz1nĐW˘j–֗ŠŚ\-Ťŕ˜äŽpH ‚A óXşĎŒm4żi>šÇP’MJÎk…¸‚ĘyR2’ĂŠ)PšĹœ°í]Ř)¨ź5ŚëÚYé‘Ăi-´úžŠ{}8bDpMq<Ń"‚Aó –,đTwRlkÚ^Žţ5Đľý2;ă´śšąťŠâv‰„SÉlćD*š—ě˙píwŢÄđ_Ä 6äÍŚëŒÍ¨˙nęćĆA ”˝š8!3*yAüľŒ-š¸ęO:Ďă]ĘÎ)/uť–{ËČ!K2âIěó´r)šňČŇci?0Ŕ`*‡ü"ü!ßŘţu§Ú?á'ţ×Ýšśy?Űm۝šßĺ|¸Ć7qœsYš—őƒ˘C˝Ž—u{§Ş]G7öĽÍŒ°%Ő䓡IĄRÜ+.řČÚÄpš ÎůőM=4S­=ÜI§-ˇÚšáŽEˇvňOAˇšăźWăí=|'&ݤ_]Z ]OLK§ťÓ偖ŢkŘcvŮ2UŁ2Ŕř9ŇÇŚ^ż‚WFÔŽ-ľKćÓE­Ě×1f+™<˝ŹÎ€ýÖ9%AčHŽ/NđG‰˛ŽŹŽg´śśmKJşś°ţÔ¸žŽľźIŚe–d7˘#j•üĀŽĎĆŢşÓľń%´:h xˇ–“[Ia•&9Q_ ƒ´ótĽąń§‡/,dźŽöhŇ+¸,ĺŽâÎhfŽYäHâV‰Đ:†iWç8ÖO‹<¨ęúơmui şłŇ…Ÿ˜ąqew=ČóęŘźkÁ'¸ŕf•˙„źMŹEŹęˇď¤YëRiimŇMn‚ĆäÜĆBˆÄťłB|ŤŒg°6SYŢ9ńö›e$V•ŠJş™×4ëeł‘Ą>eä 4>iC˙)Ÿ*p<‘Rçž.Ö5KUŐ˙ą-$ş“B0Áks,˘4ąż{™C;Fť‹+ü§h烀7ę>ńiQ˘Ů6†Ú(ń,ZŮššiÎϡ­Ü‘ya ä6𯿐•,żĺ )lˇČ#.ńżŒm<+ Ű]ŘęKŤ^IoşŇĘ{ƒH$”śŘŁrĔQłƒ‚Ě2#lgÂ!¨˙ÂýçZ}Łţí}ۛg“ýąöݹ۝ţWˌcwÇ5Šă/Wž“BÔ4HěfźŇ5#x źĄŽekiŕ+˝Qʐ'ÜÓ÷qß4 ÄľřŚéž)ńV™â FdKV­ĘŘČńŰ@öVŽ ˛F…cS$’ŇÜgýgĆ^ŃőQŚjďŔe)m,‘Ŕá ˛*”ˆ1韎k\đ†Ł}á߈ÚtSZ,Ţ'ó~ÄĚÍś=ÚtĂĚ;r>x˜ńťĺ őŕcxÇáÍöŠâ-nîÝ#˝˛×v¨§×ő $„ˆRs˛u*ŠpŰ$#é>,ř†o řD]ÚÉw ĹÍýĽŠMmb÷Oštœ"Łr˜ŽŕAmŤ‚X)pńˇ†ôÁe§_ę÷Ň\›x “ÜŘJŹž`äŹJ–îçř\GÉĆŃŇŻřŰHšÖôk{;G‰$TÓîɔ6Ay î8’ą°ädÍs*đˆďĽńF›ŚÉĽdř§oŰg¸’E¸´ĚŰÉĺ B˛f8ÔŽY6ą'š`/ü$zĎü'ٟl˙D˙„żű7Ëň“ţ=˙°žŐł8ĎúďŸ9Ďlí✥řá9eşŽ=NCöhf˜żŘćʐçÍ0šMłmÁȌąŞđˆę_đ˜˙lůöŸg˙„Ÿű_nößä˙cý‹n6ă™Î3źç?-Qđσ|Al|5¤ęͤ6á…u´– §˝g’ݨČćńHş÷Äş­ÝĚúŒB;;Hď'Ř ˛Ă&ŕľA'qFIÇ“'Žü?`GŞ=ÍÍŐĹôvŃŮé—ň}šŕĹ*,h™Ł%T‘÷°Î /ŃžëoĽËsŞÚM*^G˘rçÎÓíĚFÖ1‘˃m`xýôř'#=/…ź!¨é~#ąÔŽf´x­˙ˇwf-ţ¨Çs2Ł˘! čĸs@kxjĂUňĎo¨3-˘ŰZM<ҕÎŕ"D2epw|ż.9Ĺhxo\ŇźGŁÇŤčˇbîĆW’4”#(fŽFř` Œ3ßןjşuç‚!ÓźE6Ľ Ă-śĄŹ!ŰŰÚ´7÷rš˜FŢ\Š#Œr¤YAäżđQ.×áÝ´×ʂkŤëṳ̋lˆé5äŇŁ*ˇ!Y]XΠexňŇ/é:NJľČ‡ĂúEíéű†Yo F$fO”Ź’ U6ą'k ˝|7w§ę7Ë%´:j†ź–łZÉ ‘•&9U_ ƒ´ă Ž3\v•đëZľŃtŰ)ntć{]/Ă6r‘Ę—ÓoyČů:2° ęz…ÖǍ|wâ+˙Č/#ˇ‹PÓôČ­Ůe‘fłş¸¸ůŠeRdŒnF ÷ą‚ /‡9ôťqš~÷Ls÷EőT?ƒDpKâgŞhç:=ŻĚ­ňžƒŢŹŐmçGľů•žSĐ{՚ůĚOńĽęuŃţ ŠŚ˙ČM˙Ż oý•nŞiżňÓëÂŰ˙DĽ`hOEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPTuůé_őňßú&J˝Tuůé_őňßú&JҢŠ(Čž9ôťqš~÷Ls÷E|r?évărýî˜çîŠ+ę¨ˆŕ—ÄĎTŃÎt{_™[ĺ=˝YŞÚ9Ώkó+|§ ÷Ť5ó˜ŸăKÔëŁü4SM˙>›˙^ßú%*ÝTÓäŚ˙ׅˇţ‰JŔОŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¨ęňŇżëĺżôL•z¨ęňŇżëĺżôL”ĽEP‘|r?évărýî˜çîŠ(řäŇíĆĺűÝ1ĎÝWŐPţ =Á/‰žŠŁœčöż2ˇĘzzłU´s×ćVůOAďVkç1?ƗŠ×Gřh*Ś›˙ }7ţź-żôJUşĘˇžţÚÖŢŐ´›‰ ź1Áž)c*á(aš8#ŒăžľĄŁEQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝EQűeďýoďä?ü]l˝˙ -ďýü‡˙‹  ÔUś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş˝Tuůé_őňßú&J>Ů{˙@[ßűů˙LQwyhďc-ŹvîŇ3JčKŒ ¤˙{98éß<jŃEä_ú]¸Üż{Ś9ű˘Š>9ôťqš~÷Ls÷EőT?ƒDpKâgŞhç:=ŻĚ­ňžƒŢŹŐmçGľů•žSĐ{՚ůĚOńĽęuŃţ ĎψçÓB˙Á”˙üZV†~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj’Řë>rýŽßIHyÜ`˝–Gq…hÚŇŽQ@Q@EńČ˙ĽŰË÷şcŸş(Łă‘˙Kˇ—ďtÇ?tQ_UCř0ôGž&zŚŽsŁÚüĘß)č=ęÍVŃÎt{_™[ĺ=˝YݜÄ˙^§]á ˘Š+@˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘ŠĄâGxü;ŠI2:ÚJU”ŕ‚ŕƒ@Ëâ)^)u­=$F*Ę× #¨<Óá%đďý4ßü OńŽĘ2F°AE`""( Ş8Đ wžŢ´Ĺ˙ÂKáßúiżřŸăGü$ž˙ ć›˙)ţ5ÚyíëGžŢ´Ĺ˙ÂKáßúiżřŸăGü$ž˙ ć›˙)ţ5˝˙ g‡ˇżá˙„‡IţŘĆ~ÁöČţŃÓ?ęóť§=*M#_ˇŐ5 fĘÝ&Y4‹Őł¸. ío ஠ČŰ:prŒ`wţ_˙ĐsM˙Ŕ”˙?á%đďý4ßü OńŽÓĎoZ<öő /ţ_˙ĐsM˙Ŕ”˙žĂXŇoć0Yjvw2…ÜR)•Ž=p už{z֍_v•nÄ élQťŽfU8=˛ŹĂčHď@Ď4PBóĎ"EjYÝ΁ԓYżđ’řwţƒšoţ§řŐˀ­ŹhČę ăŹ2 X%eăٕHô ŐżŠęśz]„Ú†§{megďšââUŽ8×ՙˆ{šĺ?á%đďý4ßü OńŁţ_˙ĐsM˙Ŕ”˙ßÔ|IgeuĄŔKĎýˇvmm$‡k&áo5Ćâs÷J@Ř#<•ěIŐőű}/PŃŹŽf“W˝k;r€ŽśóNKdŒ °8ă'%xĆHçá%đďý4ßü OńŁţ_˙ĐsM˙Ŕ”˙í<öőŁĎoZâ˙á%đďý4ßü OńŁţ_˙ĐsM˙Ŕ”˙í<öőŹßköúîŸ-í˘L‘Ĺ{ufÂPßoq$x'‚Ń1đF@<wţ_˙ĐsM˙Ŕ”˙?á%đďý4ßü OńŽÓĎoZ<öő bÂţËP‰Ľąť‚ę5mŹŃHéĹX¨ľĆϋl˜ ŘNâŰ$[sëÍMÇÔÔ´QEä_ú]¸Üż{Ś9ű˘Š>9ôťqš~÷Ls÷EőT?ƒDpKâgŞhç:=ŻĚ­ňžƒŢŹŐmçGľů•žSĐ{՚ůĚOńĽęuŃţ (˘°4 (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ ÎńGü‹Z§ýyÍ˙ ŃŞ$G“Ăş”qŤ;ľ¤ĄUFI%ŇČ˙źoŠŚďŞ_m†_ŢÂë$oó#ŠČ`z{Š>Ň´w}ę—ÚV´­xŻöŽƒ˙ cţ­ĐÂ}äěűßôßí|çí{~öß;÷žwÝŰÎqW$żžśřŠâxľKë/ÂRxŠ>îÎVÚďű7Oňâž@CE qĘýćÂąPpţ˝ö•Łí+@ËťčßTžŇ´}Ľhw}cř˝łĽB?éú×˙GĽ[űJÖW‰çY,­˘ťß[m^çŤ}“ôĐ—'ΊéîOý&ššżŠRęşÖ˝˘řSDÓôýDĹ"ęú˝íă[ÂĐÄăÉFuŠC–›k´‚ pq]˘ë٤Ěä*%ŰncŔ •WŸve܁޾>Ň´ đNđiš?„ź)âűćЏ‡üUöyfąż“Řɧ^ľšYöŁ„|–“G•!ůqš›ZÔě&Ó<=%1áxÓm˙?ßb°ä—cK˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘˘űMˇüüE˙}Š>Óm˙?ßbŽIv ˘Z*/´ŰĎÄ_÷ŘŁí6ßóńýö(ä—`ş%˘Ą7vŁ­Ě?÷ŘŁívŸóőýü{9vdyGÇ3ţ•l7'ß<ţȢ˛?h/č:mÄ3jZ¤6ÖË(ŒL"yAvL…ůŽp­ůQ_IKN•8BRł˛8Ý9Iś‘ŕ_˛ßŠ5őŐ/ü<59żł-tůn €€|š Ń)*ŘÜž\íËŒ’kÝ[Հ˙ůż:(ŹrŮ7GWÔ+¤§ Ó­ęÇţ_ç˙žŠ?śľ_ů˙Ÿţú˘ŠôLʃűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČ?śľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ( ,ƒűkU˙Ÿů˙ďŞ?śľ_ů˙Ÿţú˘ŠČCŹj‡ţ_§˙ž¨ţ×ÔĎú|ö¨˘†4‘ňoĹíwVÖŁnmłŇ[˙Ůgwenhywfar-4.15.2beta/doc/dialog/images/fox16-2.jpg0000644000175000017500000006605512364015347016637 00000000000000˙Ř˙ŕJFIFQP˙ŰC  !"$"$˙ŰC˙Ŕüˆ"˙Ä ˙Äľ}!1AQa"q2‘Ą#BąÁRŃđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚáâăäĺćçčéęńňóôőö÷řůú˙Ä ˙Äľw!1AQaq"2B‘ĄąÁ #3RđbrŃ $4á%ń&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚâăäĺćçčéęňóôőö÷řůú˙Ú ?ő€˙ź9ŕ_ŮŻŘ,ŚÖ¤ˇ˙Mż˝ćv dQ! ŢVĺWaA ą$ú/ö&Ÿ˙>vż÷đŇh_ňˇ;#űŸŢúՒ}#‹ţúŻNNP“Œ]’8ôi6ŠŸŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŻŸôŻ‹>4Ń<'ă kÄ6Ú>Žú‰ćŇ,á…ŮZóÖ5V ™0¨<1ŰĄëšNŹÖ킄_CŢżątĎůň´˙ż”béŸóĺi˙+Č'řŤăUđ§Ű‡€ö_AŞ=Ó4S˛, ˜.žq —ŠŕŠŤŁüIńNŁńBĐ[Üč7>ŸÂ0ë&Ţ&pď$x‹F$2eJ„l  f—ś—ó1ň.Ç´˙béŸóĺi˙(ţĹÓ?çĘÓţţWÍWß|YŤĘšĚŇZiöW> Ôuhlô˝E™”ŠYrËňʸ# ’xâş{?Wśţ#đţ’šužŁ§]ßXi7ŚCq<(ß4ŒĄl˝šČ<íĺüĚ~Ív=ťűL˙Ÿ+OűůGö.™˙>VŸ÷ňž~đ÷ĹŮÜęš$iڅđŐuť•šŐîÚ(Łľľ”… ‚K`ńŘžjŢšń÷R]&]WIđć“ ˝Ż‡mľ™âÔŻž9e3śŐŽç zž38ŁŰËů˜˝šě{ˇö.™˙>VŸ÷ňě]3ţ|­?ďĺ7Mš7zuľÓC ™ĄI xČc?ôÎ/űč֜óîţňmÄ?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ň›ý‹¤˙υ§ýő˙׍˙ŚqßF˘?őÎ/Κ•GöŸŢcĹi?†žń6w4V6°ępÈ.ˇmh™wđO—–9\É ‚ ë~' čzŸÉ(;űŠ+Ҏ•xŠOr#QÁ´ŽëB˙$dt˙šŠÎ?šýőY0čö?2ˇĘÝ˝6źđéş°ş>эƜ‚;~ËűUŒă(=—ę(úç÷CęĎůŠVžđ]ĄœŰx7Л„’9ĘXD<ēŐž^U°24˙řBüýښŸü">űtm%ĎŘbóǏ,†ŰWtŔÇJľE\_ĘWĚUÔ<á BŰě×ţđýÔh{Ÿ.[(Ů|ç9y0GŢnçŠď\˙Ä?…zî­›RžkkXmÖŘŰZĂlFŤ#DŇĆv‘¨ bşŞ)ťýĐúˇ™§˙lă˙ž¨˙śq˙ßU™E]ţč}[ĚÓ˙śq˙ßTŰ8˙ďŞĚ˘Ž˙t>­ći˙Ű8˙ďŞ?íœ÷ŐfQG׺Vó4˙íœ÷ŐöÎ?űęł(ŁëżÝŤyšöÎ?űęűgýőY”Qőßî‡ŐźÍ?űgýőGýłţúŹĘ(úď÷CęŢfŸýłţúŁţŮÇ˙}Ve}wűĄőo3OţŮÇ˙}Q˙lă˙žŤ2Š>ťýĐúˇ™§˙lă˙ž¨˙śq˙ßU™E]ţč}[ĚÓ˙śq˙ßTŰ8˙ďŞĚ˘Ž˙t>­ći˙Ű8˙ďŞ?íœ÷ŐfQG׺Vó4˙íœ÷ŐöÎ?űęł(ŁëżÝŤyšöÎ?űęűgýőY”Qőßî‡ŐźÍ?űgýőGýłţúŹĘ(úď÷CęŢfŸýłţúŁţŮÇ˙}Ve}wűĄőo3OţŮÇ˙}Q˙lă˙žŤ2Š>ťýĐúˇ™§˙lă˙ž¨˙śq˙ßU™E]ţč}[ĚÓ˙śq˙ßTŰ8˙ďŞĚ˘Ž˙t>­ći˙Ű8˙ďŞ?íœ÷ŐfQG׺Vó4˙íœ÷ŐöÎ?űęł(ŁëżÝŤyšöÎ?űęűgýőY”Qőßî‡ŐźÍ?űgýőGýłţúŹĘ(úď÷CęŢfŸýłţúŁţŮÇ˙}Ve}wűĄőo3OţŮÇ˙}Q˙lă˙žŤ2Š>ťýĐúˇ™§˙lă˙ž¨˙śq˙ßU™E]ţč}[ĚÓ˙śq˙ßTŰ8˙ďŞĚ˘Ž˙t>­ći˙Ű8˙ďŞ?íœ÷ŐfQG׺Vó4˙íœ÷ŐöÎ?űęł(ŁëżÝŤyšöÎ?űęűgýőY”Qőßî‡ŐźÍ?űgýőQ`r/űę¨ŃBÇwńŐźÎOâX˙‰ |¸ţď÷˝čŠ>&œxZăćQň÷âŠú<%okB3ľŽZ‘ĺ›GUΏcó+|­Đ{ÓiĐčö?2ˇĘÝ˝6ž_üyzřáD(ŞWŠłę[L˘HZ)Ła•b ‘ߏCÔ ĹMoŔ­b&Żá†ŐDŚą ˜ ţ`ęž^wnăŚ3XrŤj_3ž‡OEeéhš„֖íč2öž[}U”0ú*KŤ=ŇÖ[ŤŤ]> xPÉ,˛FŠˆ dłŔrI˘ŃďřÁ ˡő÷U$Ó´Š],,™eXB¤ę8ŹWđ&ľxöz6§á˝Jć0KĂi<2şÁ%T’(´{ţđBňíý}ÇIETţËÓ?či˙~Wü(ţËÓ?či˙~Wü(´{ţđGyvţžâÝVšö¤1Ÿ9Ů~÷— ¸Ĩ8=ńî)żŮzgý­?ďĘ˙…rÚč[Üß5ȡŽV֒2É,Ÿl…bDE‘weŮW”eĂa™ŠťQŽK”ŻcŠţѡ˙žwř /˙Göżüóť˙ŔIřšÂĐ䎚ŇkGLń„–aż´ő"AUwnIÝHJîÜ{žÖ>éôŠź1{ŚSM×Ĺ兾7ÝE­I,K°FNçóŕD™Éç/Ÿőš{˜ýîćˇöżüóť˙ŔIřš?´m˙çßţK˙ÄÖŚŁŕçŃŰYˇńD閬Š%ŕ×]ŕF_+ßĚ+ŸÝŚA<î|çĚ}ҭυ­ôť]Př…E„ĽE˝ÓëRĽ*đćL?dňr™Îů7çf÷scűFßţyÝ˙ŕ$żüMÚ6˙óÎď˙%˙âk.|+Ššßü$)ý•Ü^žˇ#Aň˜Ŕ̆M§˜”žI|çĚ}ŐźwŚkăQ’ÉîÚßNž°Ěš´Ó%ÂŹVň,™Ý‚cœüä“ć>ăÜěĂŢît?Ú6˙óÎď˙%˙âhţѡ˙žwř /˙\,.ŃcԅźšGŠĄą‹V@ÔĽ˝ßnnVHăU \4˜gćL͟őť˘˛šđʚÉŃm|B“j–řßd5š$vyy<ÂßňÉs‘Î_9ós÷;0÷ť›Ú6˙óÎď˙%˙âhţѡ˙žwř /˙X˘óÂVúŞé-âH—Q…˘_˛IŽ9˜b ™%ŒqŽGÍšşůşHŚđÄzÚhi݃ŞĆŞÂÉľŠ|(Œ‚c2n#)9ĺóŸ1÷/sł{šťoc*a00ŞO8éUőëďř}amzó@ŇVrDFöX`Œ…ŢFq‘Ó֋Gżá˙/.ß×ÜoŃY֖š%ĺŹwV–ÚuĹźŞ9bOBŕŠ›ű/L˙ u§ýů_đ˘ŃďřÁ ˡő÷誟Ůzgý­?ďĘ˙…dx¨&“c֛6łyÁKÇ‚TŤpxäp?!U jrQOVLę8EÉŁ˘˘°5ű˙x}!_čz`œ‘ęĹ”Œg !#=O<ŐÍ: RąŠűN‡Lź´™wE< ’G"úŤúTÚ=˙ř%^]żŻ¸Ó˘ŞeéŸô´˙ż+ţeéŸô´˙ż+ţZ=˙ř#źť_qnŠÂ’犛0]:XľI„RC ȓ9Fp(#QŽzq׼ieéŸô´˙ż+ţZ=˙ř"źť_qnŠćŕŐü q­>‰§ášuDsY$đ´ęĂŞ˜ÁÜî1[?Ůzgý­?ďĘ˙…Ăţ^]żŻ¸ˇETţËÓ?či˙~Wü(ţËÓ?či˙~Wü(´{ţđGyvţžâÝÎÚbOŢiNˆlcŒH–űFŔŘNޜ“Ž™çŻ5k~}kű5 6Ş%0ýˆ\ŔgóTňóťw1šŠÓPľß™¨ĺ{#§˘šIľďĂö?68Sí–ít…´Ů— ő–_“÷(;´›G˝iHޏS˛ÓZŢËíWŃI5˛ pD‰Íě y‰Ôóž3ÍMŁßđ˙‚UĺŰúűš*§ö^™˙@ëOűňżáXÚ6ŻŕMjńěômOĂz•Ě`—†Ňxeu‚JŠ$Qh÷ü?ŕ…ĺŰúűŽ’ŠŠý—ŚĐ:ÓţüŻřQý—ŚĐ:ÓţüŻřQh÷ü?ŕŽňíý}Ĺş*§ö^™˙@ëOűňżáY/oľ+K´Iíí&+N ŞÍŰŰAŔŔލ5(š'ąŁM&ˇ:*+žąÔźŞÉ¤ŘßřzëQˆ‘%¤3Bó&:ĺČÇŇŽéhš„֖íč2öž[}U”0ú*m˙‡üŻ.ß×ÜjQXˇŇřbĘĎRť¸M8EĽĆŇßl‰] PžaÜŞ fÉc­\†ĂIšš; FGPĘ|…‘Ú‹Gżá˙/.ß×Ü^˘šÍoUđ6‡wžľŠxsLš™wÇ ÜđÂîšĆBąŒ‚8ô­tÓtˇPéadĘĂ ˆT‚?*-˙‡üźť_qrŠŠý—ŚĐ:ÓţüŻřQý—ŚĐ:ÓţüŻřQh÷ü?ŕŽňíý}Ĺş+tŽË]ÓałŠ;xî˘U‡Â‚3CüĎ­lQ8ňŮ÷e{ŽÁETQEQEQEQEQEQEQEQEr˙N<-qó(ů{qEN<-qó(ů{qE}^[ţëŸćyľ˙ˆÎޝÇćVů[ ÷ŚÓ 9Ńě~eo•şzm|ö7řňő;0˙‰R_ů ŰןßúuÁü,‡_:§ˆ&ŽűK@ńĄžÝŹœÜ“ć7I|Ý gî2=ëĐÚk”¸$îDdśŠ?úŠ+˝4KVxßĂWž×/tŠ5M{YhŕđĽ•áQ*ŤÎgŸ2¸VÎ!‡ 3t륊x;Ş]No^ŸO$š–Ÿâ ‹Řg)Z2qm+7>RdÜ: WťQJăąÎü9—E—ÂVoĄjŸÚVťi´ď´n]îĚF?ťž=p_<5Š_řsÁž!Ôľ;7´ŃĄžk[[I‰‘^2$”ČۆüŞŤ“ŒôŻ_˘‹â~ń5Ő׍´cĽ\ťAŞŘ]I5œţ ›P‘$UWA4nťm¤ ˘69a—!žÖźíkŔÂĎÄú­ţšwĂkśßČčˇ"Ńؤąś ˛d*Ł8;Aß\폅R-~fű[ŐľY­VEłŽí˘Űyœ1QjXŕm˖ gžNK…8řSŞkWÚî„÷ž!˛ţӒ)ťa6ż4÷,Ć&%~ÄŃ*ې/Ý meň vž$‚;Ë_°MŁ r)’đžç¤f`.˘ů€yw.r Sƒž2pýĽPMF g’pé,ŽžUĈ¤4ÂA¤űŞ9ËјMY˙]ÉkUýv<˛ëÁţ+Ôô-rĘŇßVÓ4ˇšÂ{ 3SÔŁťœź3y“€ěÓ"#¨@¨Ěëšy*ŐDŽuKIÖoMŽśú…Í֝<śşÔÖ*ˇŠk7˜cŨŘ7.Wsç8@pzDZ=¤{6ͨ›qťPłˇËĆrü˙Ş\çŽ_9óqiÍłjfÜnÔ'líňńœż?ę—9ë—Î|ÇÜŽUŽOÄPkZÇöš„ď"m#V72éWŰy×(mäŒH…dhˇ#H †q÷OCŠËąđžą3é÷—:B[¤ž0mjK&–6ű?fxÁlĽĚ\„-†ňpMzZ=¤{6ͨ›qťPłˇËĆrü˙Ş\çŽ_9óqiÍłjfÜnÔ'líňńœż?ę—9ë—Î|ÇÜŽ8)ü3­ŰëRjˤ›Ë{_ÉŞGd’Ćx^ČCć&ć efl1^„őĆw~iZ†›ˆĽÔ4‘Ľhks^Á˜Ž|ˇŽ ě$%[#=sÔ`ž‚-Ň=›fÔ͸ݨNŮŰĺă9~Ő.s×/œů¸‹G´fŮľłn7jśvůxÎ_ŸőKœőËç>cî.áÚŽĽŠjšýĽăÜoÜępɨHöŕ E(„?–¸%wϲot_ę)Ň.o-o|ť˝Ńľ’YĽŽdUxđ>ĐÎQ—pb2KđF+ŃâŃí#Ůśm@ěۍڄ흾^3—çýRç=růϘűˆ´{Höm›P;6ăvĄ;go—Œĺů˙TšĎ\žsć>âácÉuk-CL]AťĐŇG˙„Ůo"Ő<ř™nÝ<ŮU dóUŤ FůˆŔŤÚOƒ5ťm`iú”^ šľOž­ŐŹşxľbn ŞÎYEČ`§cœ€@m§š´đ?…­5Żíť}%#Ő7^‰dóß1óIťsdD™É9Ëç;ßvœZ=¤{6ͨ›qťPłˇËĆrü˙Ş\çŽ_9ós¸XČđ3ůžtžg›žÎ͡ů›÷fÎíňnĎŽ÷Ď÷›ŠĽŕľ_řXŢ<ŕqweŰţ#ŽJÓ~Áuu"Ęď‹FÚG ‰ˇ,ěIb}I$ő$“Z5udœŽť/ÉN-FĎťüĎř_oq¤i .-őMNAŤA%˝ÜÝťŔPZÉ*ˆˆTĆ ‘œ“šwĂWŐ5ŰÝ*KÝcWš0xRĘń ţљk“<˙<›X'`AAŔDzQYÜťá+ťKżü9üC¨jäßi“Xľ¸ťy|‹ŸąÉ˝Z"Hˇ*ĹÔ"…Áۚëţ!ĹŞÍń#Áąč×V6ˇFßQýĺĺŤOݰälWCŸřz \,yšciŕÝAđŒ—Ň3Č/.žŮ&ˇ.‹ldiCş†„1-şS˛.FŐlçOHń ş–‰ŕ‹k÷šf“uŚ\´÷‰zö~}âűŤĆúľńíŻ‹źOw٤2iO§ÜËgŐŮ2ů̊ŹLŽ Ăś/Ătl“^łEes[Vž&żŇďZoj/ŚÜ]ř>ŇT‚I +_)œÎą'yAh†n?/ Śx6ŻëšD:Śł­5şř;LşhĄÔ§„I;´ťĽc,Bŕäóß8őz(¸Xđ_ Ůi7>řĽYklMju(ăÔä’kIŇč4xg&pFiF˝3áŁÜFct—ÍÚp~áă#Ţť¨tŘ"ŐŚÔŐä3L›I@ă§ţŢŽÖľfĽkvFt ă{÷gÎÖúSř‡ĂÓŢÝÝëWšŒ˙š\ާris ޸ T‚ ę &şŤ+ [×ümŁëסVMÔLłZë3I!`-3žȘ8;U†1Ž„ƒëôVW4ąË|*ťťźđ=Ťß]Mw47VŢtÍšÝbš–$,{śÔ\žçšâ~xkRżđçƒ|CŠjvoiŁC<Ö6śś “"źdI)‘ˇ 1ůUW'é^żE 'ŕo]]xŰF:UË´­…Ô“YĎâ ľ EUtFëśÚ@r #c–ůrákÎÖź ,üOŞßë—qÜ6ťa=üŽ‹r-ŠK;`Ű&B  03ƒ´íőÎŘřU"×áÖoľ˝[UšŐd[8îÚ!ˇ™ĂĆĽŽÜšbyää¸Xó…:Śľ}ŽčOyâ/í9"ëśkóOrĚbbWěM­ąIýŇĐF_ עřgoöŽ˝¸ž8ëĎ]%RÓôŘ,ŽnŽ"yޟ{†#äž8÷5Ź&”$Ÿ[~fsƒs‹]?ČňĎjöz6ľáĎ xwÄ/ŠtŸŢ@ąÁlűLbfLčĹpHw"1.:œŠÂm{^o řnm7[Öf–]'ń,‘ČÓ5Ľ‘qţ’™l­Ć<Ě–*°Lk^űEesKŤÇ [ˇĹšźĆňëJ’â 5yŸíP5s*ĆŇ(0߃Œ`Šëź#oqŁxçMÓ#Ő5;ťk˙=Ôéwvó/¨t H"VSjđ8ŻB˘‹…2ńVŹjżďl4›ý6ÍgđÄqÜ5ĺƒ]q(ůTH€ŽáíXç‡ÂúT~ÓŻŻ-Žt/Älîgń Ö>iEuS1Ł ŠŒnVů”wŻl˘‹…ńş'ť–ř†˙E áť{˝moÝn.œJf*Ş@šE"";†Ý9Ź{ÝkX’=c\M>Ę_ ŘÍguyâ)´ĹšéŐźç2$oçČ1Řççkn8őßxzMz3×ő}:ÚHšˆ,šYőźlĘq‘”*yëŇľŹ­ ˛ł‚ÎÖ%ŠŢÖ(‘z*¨Ŕč;…ŽwL{ŮÂRjW÷7ÍfMĚĐg˖C îdČi9#Áé]EV¸łŠkŰkśgmż``î9Ť5S’j)t_Ť&iÉ÷˘ (˘ł,(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šĺţ&œxZăćQň÷âŠ>&œxZăćQň÷âŠúźˇýÖ?Ěók˙T:=Ě­ňˇAďM§@sŁŘüĘß+tôÚůěońĺęva˙…ǡ:o‚őÍFĘ_*ę×N¸šÚkŹlĘprć˙á2×h´ë Jâ-ßV¸žkﳍo.ĽˇĚLdŽƒ“’¸ě5Í: _EžŇnZD‚öÚKy2u*H$œCY֞ÓíŻ¤źŽkŁ$šT:Y ˏ*2ĺ[§Ţýădôŕq\ĆŚ$~7Ôľ=NŢĎÞŠýgĐíő•’ć˙ě˙$ĚácŔţ“#ˇ\‘›:Ž­uŚ’K'6ßŘÚÔR<˜fYŒŔFW)O''ďt㜈üsŠcK-WXÓ4ËO Úi0^ZĎ›(ŽIw#FÚc;Šü¤r+fçŔ:VČ"Óou-"(´ÄŇZ;) mS;‹ŁWsa”Ť|ǚ4 LŻ xŤÄş×­R Ńîü?cŠ4R^$f“s CóˇĘiePx$ăÖˇŚx"÷YĐőŠtÉě#2–ńIçrSć+`uč3ďWtďÚiˇúU柪jVͧéđéĚŞbeş‚,ěYwFNA,r…Ějxa<[ĄÉŁOŹjZmŹÜN,źÓ/÷I’7ŔĎ?.˝@ߢŞéVłYéń[\jZŒ¨k›•ŒI'$üÂ5UöáGJľHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP/ń4ăÂ×2—¸÷Qń4ăÂ×2—¸÷WŐĺżî°ůţg›_řŒę 9Ńě~eo•şzm:ÇćVů[ ÷Ś×Ďc/Słü(’ÚŰËu:Áo‘ł3žő{űV˙ŸOüˆżăG…˙ä;o˙˙ĐMw„bš4nÇýƒŤϧţD_ńŁűV˙ŸOüˆżă]Ĺ\ˆ\Ěá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚá˙°uoůô˙ȋţ4`ęßóé˙‘ük¸˘ŽDĚó›Ťymgh'M’.2223Ú˘­?Čvăţ˙ ŠĚŹŢĺ#—řšqák™GËÜ{Š(řšqák™GËÜ{Š+ę˛ß÷X|˙3ÎŻüFuPčö?2ˇĘÝ˝6Ώcó+|­Đ{Ók籿ǗŠŮ‡ţM? ˙Čvßţ˙ šî+‡đżü‡m˙ŕ_ú Žâ˛†ĹËp˘Š*É (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€8Čvăţ˙ ŠĚ­?Čvăţ˙ ŠĚŹć‹c—řšqák™GËÜ{Š(řšqák™GËÜ{Š+ę˛ß÷X|˙3ÎŻüFuPčö?2ˇĘÝ˝6Ώcó+|­Đ{Ók籿ǗŠŮ‡ţM? ˙Čvßţ˙ šî+‡đżü‡m˙ŕ_ú Žâ˛†ĹËp˘Š*É (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€8Čvăţ˙ ŠĚ­?Čvăţ˙ ŠĚŹć‹c—řšqák™GËÜ{Š(řšqák™GËÜ{Š+ę˛ß÷X|˙3ÎŻüFuPčö?2ˇĘÝ˝6Ώcó+|­Đ{Ók籿ǗŠŮ‡ţM? ˙Čvßţ˙ šî+‡đżü‡m˙ŕ_ú Žâ˛†ĹËp˘Š*É (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€8Čvăţ˙ ŠĚ­?Čvăţ˙ ŠĚŹć‹c—řšqák™GËÜ{Š(řšqák™GËÜ{Š+ę˛ß÷X|˙3ÎŻüFuPčö?2ˇĘÝ˝6Ώcó+|­Đ{Ók籿ǗŠŮ‡ţM? ˙Čvßţ˙ šî+‡đżü‡m˙ŕ_ú Žâ˛†ĹËp˘Š*É (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€8Čvăţ˙ ŠĚ­?Čvăţ˙ ŠĚŹć‹c—řšqák™GËÜ{Š(řšqák™GËÜ{Š+ę˛ß÷X|˙3ÎŻüFuPčö?2ˇĘÝ˝6Ώcó+|­Đ{Ók籿ǗŠŮ‡ţM? ˙Čvßţ˙ šî+‡đżü‡m˙ŕ_ú Žâ˛†ĹËp˘Š*É (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€8Čvăţ˙ ŠĚ­?Čvăţ˙ ŠĚŹć‹c—řšqák™GËÜ{Š(řšqák™GËÜ{Š+ę˛ß÷X|˙3ÎŻüFuPčö?2ˇĘÝ˝6Ώcó+|­Đ{Ók籿ǗŠŮ‡ţM? ˙Čvßţ˙ šî+‡đżü‡m˙ŕ_ú Žâ˛†ĹËp˘Š*É (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€8Čvăţ˙ ŠĚ­?Čvăţ˙ ŠĚŹć‹c—řšqák™GËÜ{Š(řšqák™GËÜ{Š+ę˛ß÷X|˙3ÎŻüFuPčö?2ˇĘÝ˝6Ώcó+|­Đ{Ók籿ǗŠŮ‡ţM? ˙Čvßţ˙ šî+‡đżü‡m˙ŕ_ú Žâ˛†ĹËp˘Š*É (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€8Čvăţ˙ ŠĚ­?Čvăţ˙ ŠĚŹć‹c—řšqák™GËÜ{Š(řšqák™GËÜ{Š+ę˛ß÷X|˙3ÎŻüFuPčö?2ˇĘÝ˝6Ώcó+|­Đ{Ók籿ǗŠŮ‡ţM? ˙Čvßţ˙ šî+‡đżü‡m˙ŕ_ú Žâ˛†ĹËp˘Š*É (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€8Čvăţ˙ ŠĚ­?Čvăţ˙ ŠĚŹć‹c—řšqák™GËÜ{Š(řšqák™GËÜ{Š+ę˛ß÷X|˙3ÎŻüFuPčö?2ˇĘÝ˝6Ώcó+|­Đ{Ók籿ǗŠŮ‡ţM? ˙Čvßţ˙ šî+‡đżü‡m˙ŕ_ú Žâ˛†ĹËp˘Š*É (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€8Čvăţ˙ ŠĚ­?Čvăţ˙ ŠĚŹć‹c—řšqák™GËÜ{Š(řšqák™GËÜ{Š+ę˛ß÷X|˙3ÎŻüFuPčö?2ˇĘÝ˝6Ώcó+|­Đ{Ók籿ǗŠŮ‡ţM? ˙Čvßţ˙ šî+‡đżü‡m˙ŕ_ú Žâ˛†ĹËp˘Š*É (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€8Čvăţ˙ ŠĚ­?Čvăţ˙ ŠĚŹć‹c—řšqák™GËÜ{Š(řšqák™GËÜ{Š+ę˛ß÷X|˙3ÎŻüFuPčö?2ˇĘÝ˝6Ώcó+|­Đ{Ók籿ǗŠŮ‡ţM? ˙Čvßţ˙ šî+‡đżü‡m˙ŕ_ú Žâ˛†ĹËp˘Š*É (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€8Čvăţ˙ ŠĚ­?Čvăţ˙ ŠĚŹć‹c—řšqák™GËÜ{Š(řšqák™GËÜ{Š+ę˛ß÷X|˙3ÎŻüFuPčö?2ˇĘÝ˝6Ώcó+|­Đ{Ók籿ǗŠŮ‡ţM? ˙Čvßţ˙ šî+‡đżü‡m˙ŕ_ú Žâ˛†ĹËp˘Š*É (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€8Čvăţ˙ ŠĚ­?Čvăţ˙ ŠĚŹć‹c—řšqák™GËÜ{Š(řšqák™GËÜ{Š+ę˛ß÷X|˙3ÎŻüFuPčö?2ˇĘÝ˝6Ώcó+|­Đ{Ók籿ǗŠŮ‡ţM? ˙Čvßţ˙ šî+‡đżü‡m˙ŕ_ú Žâ˛†ĹËp˘Š*É (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€8Čvăţ˙ ŠĚ­?Čvăţ˙ ŠĚŹć‹c—řšqák™GËÜ{Š(řšqák™GËÜ{Š+ę˛ß÷X|˙3ÎŻüFuPčö?2ˇĘÝ˝6Ώcó+|­Đ{Ók籿ǗŠŮ‡ţM? ˙Čvßţ˙ šî+‡đżü‡m˙ŕ_ú Žâ˛†ĹËp˘Š*É (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€8Čvăţ˙ ŠĚ­?Čvăţ˙ ŠĚŹć‹c—řšqák™GËÜ{Š(řšqák™GËÜ{Š+ę˛ß÷X|˙3ÎŻüFuPčö?2ˇĘÝ˝6Ώcó+|­Đ{Ók籿ǗŠŮ‡ţM? ˙Čvßţ˙ šî+‡đżü‡m˙ŕ_ú Žâ˛†ĹËp˘Š*É (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€8Čvăţ˙ ŠĚ­?Čvăţ˙ ŠĚŹć‹c—řšqák™GËÜ{Š(řšqák™GËÜ{Š+ę˛ß÷X|˙3ÎŻüFuPčö?2ˇĘÝ˝6Ώcó+|­Đ{Ók籿ǗŠŮ‡ţM? ˙Čvßţ˙ šî+‡đżü‡m˙ŕ_ú Žâ˛†ĹËp˘Š*É (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€8Čvăţ˙ ŠĚ­?Čvăţ˙ ŠĚŹć‹c—řšqák™GËÜ{Š(řšqák™GËÜ{Š+ę˛ß÷X|˙3ÎŻüFuPčö?2ˇĘÝ˝6Ώcó+|­Đ{Ók籿ǗŠŮ‡ţM? ˙Čvßţ˙ šî+Îě.¤˛ťK˜‚—Lŕ0ăGő­_řIď˙獷ýňßăXFI#FŽuôW!˙ =˙üńś˙ž[üh˙„ž˙ţxŰß-ţ5\č\ŹëčŽCţ{˙ůăm˙|ˇřŃ˙ =˙üńś˙ž[ühçAĘΊä?á'ż˙ž6ß÷ˍđ“ß˙ĎoűĺżĆŽtŹëčŽCţ{˙ůăm˙|ˇřŃ˙ =˙üńś˙ž[ühçAĘΊä?á'ż˙ž6ß÷ˍđ“ß˙ĎoűĺżĆŽtŹëčŽCţ{˙ůăm˙|ˇřŃ˙ =˙üńś˙ž[ühçAĘΊä?á'ż˙ž6ß÷ˍđ“ß˙ĎoűĺżĆŽtŹëčŽCţ{˙ůăm˙|ˇřŃ˙ =˙üńś˙ž[ühçAĘΊä?á'ż˙ž6ß÷ˍđ“ß˙ĎoűĺżĆŽtŹëčŽCţ{˙ůăm˙|ˇřŃ˙ =˙üńś˙ž[ühçAĘΊä?á'ż˙ž6ß÷ˍđ“ß˙ĎoűĺżĆŽtŹëčŽCţ{˙ůăm˙|ˇřŃ˙ =˙üńś˙ž[ühçAĘΊä?á'ż˙ž6ß÷ˍđ“ß˙ĎoűĺżĆŽtŹëčŽCţ{˙ůăm˙|ˇřŃ˙ =˙üńś˙ž[ühçAĘΊä?á'ż˙ž6ß÷ˍđ“ß˙ĎoűĺżĆŽtŹëčŽCţ{˙ůăm˙|ˇřŃ˙ =˙üńś˙ž[ühçAĘΊä?á'ż˙ž6ß÷ˍđ“ß˙ĎoűĺżĆŽtŹëčŽCţ{˙ůăm˙|ˇřŃ˙ =˙üńś˙ž[ühçAĘΊä?á'ż˙ž6ß÷ˍđ“ß˙ĎoűĺżĆŽtŹëčŽCţ{˙ůăm˙|ˇřŃ˙ =˙üńś˙ž[ühçAĘΊä?á'ż˙ž6ß÷ˍđ“ß˙ĎoűĺżĆŽtŹëčŽCţ{˙ůăm˙|ˇřŃ˙ =˙üńś˙ž[ühçAĘΊä?á'ż˙ž6ß÷ˍđ“ß˙ĎoűĺżĆŽtŹëčŽCţ{˙ůăm˙|ˇřŃ˙ =˙üńś˙ž[ühçAĘΊä?á'ż˙ž6ß÷ˍđ“ß˙ĎoűĺżĆŽtŹëčŽCţ{˙ůăm˙|ˇřŃ˙ =˙üńś˙ž[ühçAĘΊä?á'ż˙ž6ß÷ˍđ“ß˙ĎoűĺżĆŽtŹëčŽCţ{˙ůăm˙|ˇřŃ˙ =˙üńś˙ž[ühçAĘΊä?á'ż˙ž6ß÷ˍđ“ß˙ĎoűĺżĆŽtŹëčŽCţ{˙ůăm˙|ˇřŃ˙ =˙üńś˙ž[ühçAĘΊä?á'ż˙ž6ß÷ˍđ“ß˙ĎoűĺżĆŽtŹëčŽCţ{˙ůăm˙|ˇřŃ˙ =˙üńś˙ž[ühçAĘΊä?á'ż˙ž6ß÷ˍđ“ß˙ĎoűĺżĆŽtŹëčŽCţ{˙ůăm˙|ˇřŃ˙ =˙üńś˙ž[ühçAĘΊä?á'ż˙ž6ß÷ˍđ“ß˙ĎoűĺżĆŽtŹëčŽCţ{˙ůăm˙|ˇřŃ˙ =˙üńś˙ž[ühçAĘΊä?á'ż˙ž6ß÷ˍđ“ß˙ĎoűĺżĆŽtŹ­âůÜŔôY•=ýԗˇos(Ppţ•f÷)żÄӏ \|Ę>^ăÜQGÄӏ \|Ę>^ăÜQ_U–˙şĂçůžuâ3Ş€çGąů•žVč=é´čt{™[ĺnƒŢ›_=ţ<˝NĚ?đ˘QEr›Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ĎĹ]jűĂżuíwMd[Ë 7žëšw/8#¸­OřWżč¨hŸřJţKŹ˙‰š÷Š|­řsLkuźÔmŢ&žAj[ŒłvŠę}Y.ܰœăœcšÍ՟ĄÍe¤É,™şÔĺ†IL‘4dmX nČ;Žz`PkERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEËüM8đľÇĚŁĺî=Ĺ|M8đľÇĚŁĺî=ĹőyoűŹ>™ć×ţ#:¨t{™[ĺnƒŢ›N€çGąů•žVč=éľóŘßăËÔěĂ˙ !EW)°QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ\—Ć]FűHřYâ=SMš’ÖöÖÂI`™(ę2 tŸđڟţŠŸÄüą˙äZĽ‰ťh§ÝŮCĄéÖ֍wqrś2ÉurÁĽ›lŽ šÇ8v á|#ŤxÓÄzv›âH°­4@Gq Œ°J×f|s0}ĄĘŰ|˛2qť˝+ŰŃ^yáMö››]fËS–&ń ޗ˘!măapé G đw#$ŮÍk§Žô×ÔVÓľ?ě÷ż:jęžZ}”Üď1ůcçó?Ö ›śmÝĆę,:Ę+žŇ¨!mćĆHuHŔ2•ÜŽF3\f‘ńňűá4÷–óĎyŽŰxr[ëťčĄÉľœ@]ô]äŕ„U8,#%‚çŞQ\^›ńM[&}nÓRŇ<­-ľ15ěHŤsn|É#1ÜšF ˙0ůjޛă8îćş´“Ăú喣 ‘ž†Ćâ8„×PƒŒÇśBšÎVe ˛ä Ń`:š+žđŸŒ4ÜLş'Ú.mŕ†7–ë`X’GňNNď5F .>\€HPLeś÷Ď5ŘŃJác˙„+ţ%?`ţÓ˙™‡űo‘˙OhňąťţťńÇjÍÓ>Ůéž!7ÖąxvKC¨5řűV„’ŢĆí!„šŢ0´”,Łz \,rţđ捠ßIoe­[6‚÷SÝ )lIWia 7š ÉÇŹ #áyŃü'sáÝ/]ű=Ľţ•-Ž †ÓtrĚŃĹĘ.ńĺż?0ÉÎÍ^E ß'Őa’ßÄú÷ö”K¤M¤Ú}žÓěírěß#ížSĺGČ ŁĺćŽZxWÄţăXżń=ľĆ˛şkéöéž\vęĚŹŇ4fFó˛!?2ŻËŔ5ŘŃEÂÇ-ŕGዘôÝFâ]:éImî3#›Ž’OćÖA‚ËŒn†2AĽŞřSġ>:>$ˇń&’a…;KÝIţĆąno~rĺI 8Î{j(¸QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP/ń4ăÂ×2—¸÷Qń4ăÂ×2—¸÷WŐĺżî°ůţg›_řŒę 9Ńě~eo•şzm:ÇćVů[ ÷Ś×Ďc/Słü(ořůą˙Żű_ý•Ń|CńGü">žńŘţŰöO/÷o—ż|ŠŸ{ݞŤořůą˙Żű_ý•_ö‚7Âl׿ţ”GYÇŕ^żäSřŸőÜâżá¤Ďý ŸůS˙íTĂIŸú?ň§˙ÚŤçęě>%˙Â˙řA´?ăĐ}żíY˙YĆ3Ÿůi÷ˇmů>îŢôœ­$­¸ĂáżÚë>"Ó4řDüˇ]Ĺmć˙hîŮ˝Âîǔ3ŒçíŢm|=đäăâ†ĎýE­ôj×Ř~*ÖF…á}[[ň>ŃýŸe5דżo™ĺĄmť°qœc88Şz7źÚ<Úó řďXżń›˘kţąÓĽŐ4ˇÔěäąŐń|´1YCCCűĺÁĂ‚3ĹnŰřÓáv¨[ßI5žľK§ś•šáDFS… ¸ŠNôdÉw`ôߞœău˘ácŠóhók”˝ńށkâ츺›P ʖÖ3Ü$O¸%’4d‹9o+ÁĎJŠ/řVOa&¤ćěÜľ ˛Ę-ÚáA-Ÿo”d9@۸#\,vmpÚůό/ý;AüäŠm~!řNçVţ̇Q™§ű|šqse8„]!!Ą2”ňĂĺNśOÎFkëwŠďý;Aüä˘ţëÝ ˘Š+@˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(—řšqák™GËÜ{Š(řšqák™GËÜ{Š+ęňß÷X|˙3ÍŻüFuPčö?2ˇĘÝ˝6Ώcó+|­Đ{Ók籿ǗŠŮ‡ţFˇü|Ř˙×ýŻţJÎřöůřM­úá˙Łă­˙›ú˙ľ˙ŃéTž,iˇúďĂýOJŇŕűEÜţW—ő]ŰeF<ą =ë$ýŐę˙BžÓô˙3Ž˙†n˙ŠĎ˙)Ÿýśřfďúœ˙ň™˙ŰkŐá0š˙Ą;Ä÷ňË˙’(˙„Âçţ„ďßË/ţHŻÚă˙¤-Ĺő„żđkžÖ?á ţŃó|Agmĺ}ĘĆXśěďoîcď^ÉăK őŻkZ5ŤÄ—ú|öŃ4„„ $l ąœdó€kœřsŞř řv O ꖂÇ]śžž[Š­Bˆ“pll™‰?08Çc]g›^ŽU]4ęî+v<Űá׀5MÄúNŚ4 x^ŢĆÂKkČô)žFŐ‚i‡‘ ĽKCœž ™ü'ŕďi“ř"Ćńôoěż ˘Ĺq#Ov†Ý፶ÂĆ@a•ÜŔäŕńƒč^mmoĚ<ëNđ‹Ź|á­!!ĐĽšđśĄöLoĺTž‰"–#ć$˜[lšŔ Ž´xƒÁ^)żśńF‹lú*i>,¸K›é丐ÜXą†(ŚH”Gś`D@Ł3FTžAŔčžmm W‰|ŞjzWÄ[X.,VOěűw`#Űi?źÂœ|ČO¸#żÔxďGOx/Yđó:Ću )mŃĎüłvRřô8?…]óhóh¸XňOᇈő/ xrŇďRÓŞ5 ¤ńŞĎĺÜŰ\Ü­ĹĚqš$˜˘E Ú;`VŢťŕí}üK}â 1ôÉŚţßľŐmmî.%‘#ąű3ŁşĆĹY˜­ĐgăťóhóióŽ]đfłŞhmźÍ:Ż,FŘyŽÉ-¤Pí°oF €xÁŔ<‹â^‹wâo\čÖ2ÁÄłŰH­3€GŘăíMt°˜ślĚmŚMç*>îMz›G›EÂÇ<Ş ěâÇÍ˙„żűsvöŰä}żí~ďßŮĆ:gŒăšŰԎ|MvéÚý JÚók ěçÄWGţĄ˙ФŞOGýu%­Pú(˘ł,(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šĺţ&œxZăćQň÷âŠ>&œxZăćQň÷âŠúźˇýÖ?Ěók˙T:=Ě­ňˇAďM§@sŁŘüĘß+tôÚůěońĺęva˙…’Ł0Bąă‘%FĆpČÁ—#¸ČʏˇjŸóăi˙m˙ĆéôW:––hŃÇ[ĄŸnŐ?çĆÓ˙Ű˙ŃöíSţ|m?đ-żřÝ>Š9—oĎüÂĎżä3íÚ§üřÚŕ[ńş>ÝŞύ§ţˇ˙§ŃG2íů˙˜Y÷ü†}ťT˙ŸOü oţ7GŰľOůń´˙Ŕś˙ătú(ć]ż?ó >˙ĎˇjŸóăi˙m˙ĆčűvŠ˙>6ŸřßünŸEˡçţagßňöíSţ|m?đ-żřÝnŐ?çĆÓ˙Ű˙Ó裙vü˙Ě,űţC>ÝŞύ§ţˇ˙ŁíÚ§üřÚŕ[ńş}s.ߟů…ŸČgŰľOůń´˙Ŕś˙ăt}ťT˙ŸOü oţ7O˘ŽeŰó˙0łďů űvŠ˙>6ŸřßünˇjŸóăi˙m˙ĆéôQĚť~ć}˙!ŸnŐ?çĆÓ˙Ű˙ÓcY^âKšÂ,˛*ĄDmĘŞ¤‘É'ć<ŕvă&Z(ćÓD˝ŘQE%Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@żÄӏ \|Ę>^ăÜQGÄӏ \|Ę>^ăÜQ_W–˙şĂçůžmâ3Ş€çGąů•žVč=é„+Ž )ŕ€Ĺr> ‚> ƒO€çGąů•žVč=éľóŘßăËÔěĂ˙ $_cÓ˙çŇ_ü]ńÚ>ǧ˙Ϥżř0ş˙ăľ-Ís[}O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąŘô˙ůô—˙_üvąé˙óé/ţ .żříKE }O˙ŸIđau˙ÇhűŸ˙>’˙ŕÂë˙ŽÔ´QpąJwĐ`”Ĺ1Ž)U}Väߥš™öĎX?đmq˙ÇŤŞ´×´ řNÔľ{Čěí~Í ;śY¤–@gvv<I'P/ÄŻ ËĄkš­ź÷’Íď/l峖Úí#TgɝQž`­´#ŻZŮÂ)ŘÍ95sŽ_É"ÇÄîÄUŐnI$ôyŐeítÔFwľ‘UA,NŁtŠ?˝Žâ{¸Żô7“fčn-‹lpU—Ą:áü0L÷^óËI˝ƒžâNćXÁ>¸e őŃȞÁĚÖĺ_´xsţzÁ˙ƒkţ=GÚ<9˙=`˙ÁľÇ˙Ž×[ńށ˘ëš>‰ŞjQŰj̏Ÿ +3 †@!z–#$€9 Tąx–ŇOÜřecœ^[ŘE|î@ňĚrI"(9ݘ›Ľ‰ŹnŚń–ęNŽŃ1‚â×ţYĹĆ!ŮĐÂyÎ_/¸ľlřXâOD'˙%dŤGV¸pUtË OťĆ}Hbqôčjľ¤RXÇbП9Ź—0ymÇ<1#ś@Ž ‹ś˙֌RWŰúŘóĎhţ9ńo‰÷ÂV‚;s¤Íp`ş3NĆ"II”66yw úOöÄ˙ô ˝˙ž˘˙âčţ؟ţWż÷Ô_ü]MŸôŃw_Ň<t+XÓ$ř‘áM_ÄM‚lm&’+ o—íŤ$Ĺ×(ďšâ^6äË¸gwÁžÔî|KŚ]xżMşĽƒtŘEŐä^tI|’ÎYˇUĽC´î0ݑ÷šî˙ś'˙ Uďýő˙GöÄ˙ô ˝˙ž˘˙âčłţš ŻéUđŸAŐěő[Ś“Mń­źËŤH<1ußJаo´_4­ ŔóvČŹÉP@Htm3NO„ÚÔŕńĂř^îßTť—I”Íyraăí[6Ü“• ÍĆ01^™ýą?ýŻ憎řş?ś'˙ Uďýő˙EŸôĐ]Iž{ŤxWTŇ%źˇđ.—y¨ř.ę9.!S–ýZ I!ŕχ—ÇwROdiş‹áŻŇ{S?„ď-$Ňí<%wŚ‹›†OÝł´˛8žqó¨)¸śó–8ë?Ű˙Đ*÷ţú‹˙‹Łűbú^˙ßQńtY˙M×ô™ĎxKB‹Ăß´śŇt†°ą¸đԋ¨I%R[”–,ĘŘůĽÚŇňß1şâľtĎő˙×Ě˙ú5ęçöÄ˙ô ˝˙ž˘˙â꽜M %\‚Í#ČŘč 1bŽ3ŒńŸAJZGQ-eĄÎüM8đľÇĚŁĺî=Ĺż˙äVşůTü‡Š÷WÔĺŠřXü˙3‚żńĐh÷ś—úŒöSŰÜBČY%‚@čępCrëS×ÇłWď_^^xzţř^Cgb÷Q\OšçȒ%XŸ™Fö# ‘ŔÎÚOŠő€?ÖÇ˙|WŸýőżßFVż—üH×t—#[ˇEyń^˛ĺ´÷ŔŁţ˝gţ{§ýđ)˙aËů˙ř#úç÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź‹ţ˝gţ{§ýđ(˙„ŻY˙žé˙| ?°Ľü˙‡üúď÷O]˘ź…źSŹł§ýđ)żđ“ëóÝ?ďGöţĂţţšýÓ˛ř­somáyĚ°Ä…[2Já@Á$’p“ÚŠůkö–ń׈#˝‹Ăą\$vˇś+4ň "VäFŒŕ! šdň3‚A)<\°iP†śëř‡łU;ę˙Ůgwenhywfar-4.15.2beta/doc/dialog/images/qt4-4.jpg0000644000175000017500000010106012364015347016370 00000000000000˙Ř˙ŕJFIFQP˙ŰC  !"$"$˙ŰC˙Ŕن"˙Ä ˙Äľ}!1AQa"q2‘Ą#BąÁRŃđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚáâăäĺćçčéęńňóôőö÷řůú˙Ä ˙Äľw!1AQaq"2B‘ĄąÁ #3RđbrŃ $4á%ń&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚâăäĺćçčéęňóôőö÷řůú˙Ú ?ú/GŃíćľÎMĂĺg =MdxĎTđď†Ú)ôŃ{¨^1KKVÝ,Äu<Gv$]…˙ {s˛?šýď­|ßń›[Őt˙ŒşŹĐ¸ŒĂkíŒíŒ sˇęĺŤęrŒńřÇAJÉ_Ëc‚N1‚mŁ?ˆŚÓáűfłđýaą2Ig~ˇ2Ä=Z<.@ď´ąö5ŮéŢŐôË}KMŽÂęŇáĹ*JpĂúcČŻ–|IüZ‹0ô(¸ţUé?˛Ž§w=ż‰4ŮZÚŢé&ˆ@F6ĺƒĺőęçy \ş‚ŞçÖÚ7ú“ BNÉŃý‹Śϕ§ýüŁűL˙Ÿ+Oűů\'íŤęz'Ă;CIšk+ĽżąŒM ႽÔJĂčT~ľÎü1ń˙‹žĎĹמ*´‹Z‹Lń ޟ žMuÉ„ŞŽč”tsóőňnŹÓľßŢlĄ^ÇŽ˙béŸóĺi˙(ţĹÓ?çĘÓţţW€j:×âfĄho5$´“Ĺ:u­˝ąŸĘň#“OiYH9†JńĎ~+Ă?|s‹8dţËťÔŻź/¨j6Z—Úškˆ¤ľÉw mÉ\ěĘqœOˇ—v?fťLbéŸóĺi˙(ţĹÓ?çĘÓţţW‡Ü|\ń†™ĄxJĂű LÖľÝcImAĽś3Iˆˆ„.ŘÓ"V-ó`OqZúĹr×YĐëĂi&Ľodó]Ţ ĺË;aĄ-‘/1# ćŸś—ó1{5ŘőŸě]3ţ|­?ďĺŘşgüůZßĘó_>%ń‡ˆn|Y‰çŃŽ#ÓľëË(DDąyr@1÷YžcŢ˝C?ôÎ/űčŐ*“j÷bqŠčCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙ž>y÷x­Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙+Ÿńö‰Ľ_ĹĽÚčÉŠę“&ôľˇ¸7ť„_Ż'°5Ógţ™Ĺ˙}đ{Ý_Rľń—ˆćI<šŢýă-Œˆv íˇÏĆÔĂSRMę{Ü?“Ă4Ä:nÚ+úž…sŹ[éaeń„#ą˛$şˇşűJEîŕŔ{€kŤIŃ&śY⾲’)rÓô–KÉîÖ]ŁšP¤œţę+Ň|)áŰ? x^ Ě,‹łI+ŸšY–sîMtTVxuOđDߍÄăÚu§{1ńpb+!˛1óˇń{QVž9ôťqš~÷Ls÷Eő”ęsSŒťŁĆjÍŁŐ4s×ćVůOAďVjśŽsŁÚüĘß)č=ęÍ|Î'řŇő;(˙ Ug˝E‘Ńmuś1BĐŘM*înT Až ň+BÍWíĂţúÇţ ŽřŠ>Ü?čŹŕŞç˙ˆ  TU_ˇúëř*š˙â(űp˙ ~ą˙‚ŤŸţ"€-QU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐWíĂţúÇţ ŽřŠô{‚˝žĄlěŘÍň;WrÍ€Nђpxâ€-QU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐWíĂţúÇţ ŽřŠ>Ü?čŹŕŞç˙ˆ  TU_ˇúëř*š˙â(űp˙ ~ą˙‚ŤŸţ"€-QU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐWíĂţúÇţ ŽřŠAd%žĄ#)Úč–3ĆpBer# dЎEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐWíĂţúÇţ ŽřŠ>Ü?čŹŕŞç˙ˆ  TU_ˇúëř*š˙â(űp˙ ~ą˙‚ŤŸţ"€-QU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐWíĂţúÇţ ŽřŠÂşńšçą°đ´÷§˜Ś’WC"öm˘6Ŕ=G=ÎĆ.[ ÉGs§˘š?řHźO˙B{ŕLŸüfřHźO˙B{ŕLŸüfŻŮHŸiŹ˘š?řHźO˙B{ŕLŸüfřHźO˙B{ŕLŸüfe ö‘:Ę+“˙„‹Ä˙ô'ˇţÉ˙Ćh˙„‹Ä˙ô'ˇţÉ˙ĆhöRiŹ˘š?řHźO˙B{ŕLŸüfřHźO˙B{ŕLŸüfe ö‘:Ę+“˙„‹Ä˙ô'ˇţÉ˙Ćh˙„‹Ä˙ô'ˇţÉ˙ĆhöRiŹ˘š?řHźO˙B{ŕLŸüf­é~!ż’č[ęÚ Ý‹K‘…dŸĚ`2W0ŮŔ'€FÉe:rJějqnČčhŞżnôÖ?đUs˙ÄQöá˙@ýc˙W?üEAEŞ*ŻŰ‡ýőü\˙ń}¸Đ?X˙ÁUĎ˙@¨ŞżnôÖ?đUs˙ÄQöá˙@ýc˙W?üEZ˘Şý¸Đ?X˙ÁUĎ˙Gۇýőü\˙ńjŠŤöá˙@ýc˙W?üEnôÖ?đUs˙ÄPŞ* żˆ’‚ßP2Ž ‹ěy áślݡ‚7cg4żnôÖ?đUs˙ÄPŞ*ŻŰ‡ýőü\˙ń}¸Đ?X˙ÁUĎ˙@¨ŞżnôÖ?đUs˙ÄQöá˙@ýc˙W?üEZ˘Şý¸Đ?X˙ÁUĎ˙Gۇýőü\˙ńjŠŤöá˙@ýc˙W?üEnôÖ?đUs˙ÄPŞ*ŻŰ‡ýőü\˙ń}¸Đ?X˙ÁUĎ˙@¨ŚĂ$sD’Äë$n+)Č`z})ÔQEQEä_ú]¸Üż{Ś9ű˘Š>9ôťqš~÷Ls÷EőT?ƒDpKâgŞhç:=ŻĚ­ňžƒŢŹŐmçGľů•žSĐ{՚ůĚOńĽęuŃţ ĚśaŸbŞbˇ8š‰I­:Â2mś˛˙—oý•Ą_Ĺ~ ‹ĂÚ+jrŮÝ^ţţ xíívy’I4É (ŢĘŁć‘y,Şś~)výćą§Â=Aq<ŠŞ^ŰŹÂ8źŹĘ'‘ @Hw9u(BĺHpF_č2ă^đÂé–É+—Ô´ůdň§0şĹä2HĘŕŠR‚¤7sŠĺüqŕŰĆ´žľĐ"żźŽ ëVJo5I.\ÜÜ Qaî$fź–î`“‚yzŢ5đ”6oy7Št8í’ŕŰ4ͨDfmŘo^ECk㯠\xĘo EŤŮZ;hn´Ç™D‚F ‹ťs2¤{Řc…tn\׏´›ř”\čf§ö> ś“J–ŐÝ'Čc¸ýŰFv.ˆmš_ [kşoŠíîoô”d˝Đ,,îg˛hÖŢŇ{srÎťƒl&e ą[§8ĐMâ_śŤXiVÚŤŹŢ^ŰĎrąŘ˜dp´JěĆicfL“×ҙoăĎ ś‘gŠ^ëVZTwŽńÇŁ:[Éć#”’2ŽGĚŽĽHäV'Šô]WVńž‹cŤjMľŽ›} ×vg/žIm FDČă "sš#8<îżáÍsLşNđ펣&›%‰ŠK›Cb×ÎňĘň}ŠîщŒ™7~íIÜňqČéúˇˆt]!­×UÖ4űtŰ-ĹÍĘE桢î#qäp*+ßxvĆĘÎö÷ÄUľ­đSi<ב¤w€ ĆÄáň#ę+Ęě­uo izUĆąĄĂŞĘţľÓŽá–ňű,+˙‰ŒŞ“qýÚđr+7IđçˆÞÔ­Fľ$á 6km;ědl¨KďˆWcě üƒ!¸Ŕ˝‰˛2 P×e͌ő÷m˙ŁŇł|-lÚ_†4­1Ěť­,Ą€ů˛‰(~gń6­á?i‘WNł¸6§ŮęzŠ]ÜŤE/™021™BČŞˆÚ@âF)řg[˝ŃźA4ÖÚ뎭`ŢNł5ˆűRŰMć4[m"ŤŻîË1$‚/ ĎO‡Ĺ>›E“[‡^ŇäŇŁ$=ę]Ć`\ČŃĎ˝xŁĂŃéPj˛kÚZi÷ˆ.šî1 ¤+1ÚůÁÂŁžE'ąŽ/\‹UŐl4ÍV/ Io.ŸŹ-ěş\łÁćݢŔń%\Ç˝KŤ(/˙,—‘ĐgŘřsRşÔ´ÝF÷EŽÚ Ź‘fÎŰIżˇ–MĂĺ’YŹŮÉȊC06óÔdţńΙ޴–úś‘ąýŁmŠÜ*ĚńÁw4(Â2ʼn)$Ž3’08ćńv‡agök\Đôő2Ü*łę)°ŹSylw6ߙI@ëüŰrp âcđÍě~kdÓ"]Aź_ý¨Řd bţ×óźÝŮëönŮݏ—âájŢ*Ňľ COO*ÍüC ‘Ć×ZŒrŔF 9hƒž: ƒ‚q@ΛĆ^6Óôv†ÂĎTҤÖP°ˇ{'S0Š{¸avňĂá$$™Á9V‡ŠüL4ӕt­CUšÔnţÉmmdbÎ"’RI–DPD˙ĹéĹyŽŠĄëß.……ćŇľ-jóĂ?١ˇVc՚â{ťo$ÉcšpŤ)ËH‹ŹpÄńŒ€ K?č ĽOŞÝÇ  kŁis­4p43VŘNℕe`Uˆ!´őčz~—Ť­iśš|Ű|ťŠî‘"}Ă+‡'#§<םxƒĂÚΏ-”ž:ŽĄ$ŇÜMŠjý‰ľ'•Ö%R­r˘%ŒŹaX*Ž< fřwK×ü;ŚřbűRŇPšą›VěEŐ°˜}˘ä˨IŽ"DQBěÂČŘQ‚´ę—>(đőś5{{K‡M2…Ü—qŹ;Ă+źš ŹĎPGjѡź†ćŢ;‹yٚT"šŃô'Ô|go§éOöQi÷S_ůť°(ňÚBw ŠŔÎO Cń@˙„§Ă#Fh­&…ő î"ş]ŃK 7pÍ*‚rFŔ0IŕdÖvąŕË[?L˙„'IĐôŠ´˝SűJ+D€[[\Ha’ĺ)ÚLr>Ö Şđ@¤3wMń~¨C§Ëk~Xjenˆ˙hHä‘ăte ŠBC…éęF`Ö|sá!ĺKýAŇHľÓÖYÝ5¸šX•QIbb!†2 ;~÷˟ řR=uGm|x„ëohg‘m9˛6^H—aőD6˙/–Ď˃KŁřKčâľ­jM!f>)mfH­e‘•!ţÉ6J€˛ Î$Tŕü´łń=uüB}×VÓľi÷RZ\]iW)dłŽesçÂŞŽ\›,UCŕŤWaáďx_ż’ĂLťî/<$ÖsAćŜy‘™D‰’äČäsČŽcÄńí—ÄM&Űű/ě~)´™­Ž$š‘d†áěaľńˆČň˙uťxbFq°őŽ’óI¸—ÇšN˝ÂśśZ]휈IŢ^imĆĐ-ß<ŽŤ€yŔ{Ĺ#‡Ĺ—şá˝?S[ 6ŢţâKU­źé.R5şągc–u0÷4–Ÿ<%=ŽŸxחQĹ{ooqżěS(hz†eÖ<7ŞiˇfÖmtűĽk„“ĘŽMAmZRţUdŢńą8#kc“gáÍN×ŐÜEm+XĂⅽYešóŰ ě‚Ffbě|ߔîËźr9¨%Ń5{ż _řjëC‘‘|Oř’Iahní¤ŐţÔĺFňß,DîWUÉáwP3ŇtMG×-žçEŐŹ58ö4–— 2Ťz¤€}ŤžŐ~![iş†ŻÚľ&ŸŁL°ęœK[ŔL1ĚXŻ›ć•T• "2>”i–żu­P[ŹvWze„I"•ćŽK­ůœ…xy#‘€3ƒŒ#ŕë˝W]ńcjşžŤmŁęšŒoýŸŔ!ź„YŰFĹŰË2€Z7BĄ×!z`ä€wđ’č?ŰŘۚgöŽ3öľ'ŸŒg>^wtçĽ2çĹ>śŐ˛n5ý*G(>É%äk6]‚ ŘN@ă’@kĘuơzôQĽěvř’ ĺ[oěřěM¸ťWi9Srf1î/Ęä—Á`v´#Kť‰6‡ ĂIăk[äÔĹÄ'ýeňNfď7ÍX›f6ăË\îÇěGÄZ*ëcC:Ü5RťĹ‘šO<Ž3Ÿ/;ąŽsŠĐókĆ!𞽊$ŠäëˇOâít– tô´ĎóWyhţŐšWä* *œXó˝čO/üT6gţ'˙ĐáŤţmaÍ/üO-NĺÚoý *ťç{Đ~šâĹÓőoě›-TÖŻÖš– ňbfeVf–D_˜Ł€$ídŤü;‘wcŮUjĎˆ-ˇŠnŹősD´ŇN—a{cw-Ú ¸k‰.Úĺśşí†2ťźNNF8‹ř‡Eđýޛ徿söÍ3PKß9VY…ľĚ25Żď_€˘6ňÉ;~c¸†Ë?Y§éyă­K_Ôtš ˘ -äFÝ<ĐśÖaŔ’,ŕ•=‰Ĺu^"×mt? ę:ýВ[M>Î[ÉD 3˛F…Îܐ q’˝eéž4‚kůl5'QđíĚv­vRh6<(ĘŽâHĽt–L‚ŔĂŽk˜}YŮđřYí‹kMáOěó•rn>ÉĺěߝżŒçóŠOxWR‹LźÔmu;ďk‚(áśmM-HŠ/>9$"Ç^gîՔ¸?:&Nwzg‰4=OM—SÓu­6öĆŢmÍ˝ŇIm9u$ NM3KńG‡ľ[yŽ4˝{Kž†ÄłImw‹Ŕ3$”~O+zň(ôĎoâËÝRÓ Ě:\ń.ą=’˝ÇŮn%–h¤ű2ˆĐ2Lśîe°0­ź˛Ô|]Źřî =)´KŠětpbi i%hgžFY ů‘dÚ¸măk!aƒŠöm]ŇuťCyŁj–:•°b†kK…•7Łr’3íW|Úóż†únŁgŠjúڧş“ŢĽźdę’X—o/Ěä-˘„8˜– €gľó˝čsĂ':[[ťŸý%iÖW…Nt|úÜÜ˙č÷­Z(˘Š(˘Šň/ŽGý.Ün_˝ÓýŃEú]¸Üż{Ś9ű˘ŠúŞÁ‡˘8%ń3Ő4s×ćVůOAďVjśŽsŁÚüĘß)č=ęÍ|ć'řŇő:č˙ `çßÝYYN%ÓŁVłˇÚ­4™Ú"P ÄxÉ8ç­ęŠŚ˙ČM˙Ż oý•Ąý¨ĎΙ˙e˙ăTcęóóŚßŮřŐiMum„šâ˜Œ€îÇăQ˙hXĎőˇýý_ń  ?Řú‡üüéŸ÷ö_ţ5Gö>Ą˙?:gýý—˙Uďí ůţś˙żŤţ4hXĎőˇýý_ń  ?Řú‡üüéŸ÷ö_ţ5Gö>Ą˙?:gýý—˙Uďí ůţś˙żŤţ4hXĎőˇýý_ń  -cÁÖúÂÂş˝Ÿ‡u…÷Ä.‘ĺˇ÷—t'ÜUńŁßsŚßŮřŐ^ţа˙ŸëoűúżăGö…‡ü˙[ßŐ˙Łý¨ĎΙ˙e˙ăU ށ¨\DąýłL\HŸ2S÷\6?Ő{V§ö…‡ü˙[ßŐ˙?´,?çúŰţţŻřĐě}Cţ~tĎűű/˙ŁűP˙Ÿ3ţţË˙ĆŞ÷ö…‡ü˙[ßŐ˙?´,?çúŰţţŻřĐě}Cţ~tĎűű/˙ŁűP˙Ÿ3ţţË˙ĆŞ÷ö…‡ü˙[ßŐ˙?´,?çúŰţţŻřĐě}Cţ~tĎűű/˙ŁűP˙Ÿ3ţţË˙ĆŞ÷ö…‡ü˙[ßŐ˙?´,?çúŰţţŻřĐě}Cţ~tĎűű/˙ŁűP˙Ÿ3ţţË˙ĆŞ÷ö…‡ü˙[ßŐ˙?´,?çúŰţţŻřĐě}Cţ~tĎűű/˙ŁűP˙Ÿ3ţţË˙ĆŞ÷ö…‡ü˙[ßŐ˙?´,?çúŰţţŻřЧƒmí5KRÖĎð_܌Ou:Ë(˙iÄ9nÍ_ţÇÔ?ççL˙ż˛˙ńŞ˝ýĄa˙?Öß÷őƏí ůţś˙żŤţ4 Łý¨ĎΙ˙e˙ăU h‚ŢËsöÍ3÷‘˘mó%ăicŸő_í~•ŠýĄa˙?Öß÷őƏí ůţś˙żŤţ4Łý¨ĎΙ˙e˙ăTcęóóŚßŮřŐ^ţа˙ŸëoűúżăGö…‡ü˙[ßŐ˙Łý¨ĎΙ˙e˙ăTcęóóŚßŮřŐ^ţа˙ŸëoűúżăGö…‡ü˙[ßŐ˙Łý¨ĎΙ˙e˙ăTcęóóŚßŮřŐ^ţа˙ŸëoűúżăGö…‡ü˙[ßŐ˙Łý¨ĎΙ˙e˙ăUSWđškfËVƒ@Ô-I aş*:­­Ÿí ůţś˙żŤţ4hXĎőˇýý_ń fužƒuop[ɤC j#G•UTp,OţÇÔ?ççL˙ż˛˙ńŞ˝ýĄa˙?Öß÷őƏí ůţś˙żŤţ4Łý¨ĎΙ˙e˙ăUŤlŚ+;XN7CoMŽ„Ş*œ{dTÚóým˙Wühţа˙Ÿëoűúżă@˛hÉŞżÚóým˙Wühţа˙Ÿëoűúżă@˛hÉŞżÚóým˙Wühţа˙Ÿëoűúżă@˛hÉŞżÚóým˙Wühţа˙Ÿëoűúżă@˛hÉŞżÚóým˙Wühţа˙Ÿëoűúżă@˛hÉŞżÚóým˙Wühţа˙Ÿëoűúżă@˛k7\Óî/ĺ˛6ň@† ™ŘĚĚ 2˙ “ßŇŹhXĎőˇýý_ńŁűBĂţ­żďę˙QţÇÔ?ççL˙ż˛˙ńŞ?ąőůůÓ?ďěżüjŻhXĎőˇýý_ńŁűBĂţ­żďę˙QţÇÔ?ççL˙ż˛˙ńŞ?ąőůůÓ?ďěżüjŻhXĎőˇýý_ńŁűBĂţ­żďę˙QţÇÔ?ççL˙ż˛˙ńŞ?ąőůůÓ?ďěżüjŻhXĎőˇýý_ńŁűBĂţ­żďę˙QţÇÔ?ççL˙ż˛˙ńŞ Ţ ˇmeuŚłđéÔŐ6-áGóÂăßäîĆ;fˇ´,?çúŰţţŻřŃýĄa˙?Öß÷őƁ”ąőůůÓ?ďěżüjě}Cţ~tĎűű/˙ŤßÚóým˙Wühţа˙Ÿëoűúżă@ŒˇĐ5˝ŠçíšgîătŰćKÎâ§?ężŮýjoě}Cţ~tĎűű/˙ŤßÚóým˙Wühţа˙Ÿëoűúżă@ąőůůÓ?ďěżüjě}Cţ~tĎűű/˙ŤßÚóým˙Wühţа˙Ÿëoűúżă@ąőůůÓ?ďěżüjě}Cţ~tĎűű/˙ŤßÚóým˙Wühţа˙Ÿëoűúżă@ąőůůÓ?ďěżüjě}Cţ~tĎűű/˙ŤßÚóým˙Wühţа˙Ÿëoűúżă@ňčw’ÄńK6•$nĽYZIH`z‚<ŽETŃü#hm4{oéÖĺ‹ůVŞń&ăÔíX@Ď˝m˙hXĎőˇýý_ńŁűBĂţ­żďę˙QţÇÔ?ççL˙ż˛˙ńŞ?ąőůůÓ?ďěżüjŻhXĎőˇýý_ńŁűBĂţ­żďę˙E¤Ůę:}śĽK‰$}ßi™~űłcIéť…Z˙‰—÷tŻü ›˙ŒÔ_Úóým˙Wühţа˙Ÿëoűúżă@˙ÄËűşWţÍ˙Ćj9.Žŕťľ†â+"ˇĂCpěT„fä4kÇˎľ,3C:†T•AÁ(ŔŒţWP˙Ž•˙_-˙˘d  *(˘€<‹ă‘˙Kˇ—ďtÇ?tQGÇ#ţ—n7/ŢéŽ~č˘žŞ‡đačŽ |LőMçGľů•žSĐ{՚­Łœčöż2ˇĘzzł_9‰ţ4˝Nş?ĂAU4ßůéżőám˙˘R­ŐM7ţ@úoýx[蔬 ƒţBł˙×˙ô'Ť˜‚ŠŰ˙ČVăţ¸G˙Ą=\ ĐQč(˘€ AF ˘Š0=‚Š(Ŕô`z ( ĐQč(˘€ AF ˘Š0=‚Š(Ŕô`z ( ĐQč(˘€ AF ˘Š0=‚Š(Ŕô`z ( ĐQč(˘€ AF ˘Š0=‚Š(Ŕô`z ( ĐQč(˘€ AF ˘Š0=‚Š(Ŕô`z ( ĐQč(˘€ AF ˘Š0=‚Š(Ŕô`z ( ĐQč(˘€ AF ˘Š0=‚Š(Ŕô`z ( ĐQč(˘€ AF ˘Š0=‚Š(Ŕô`z ( ĐQč(˘€ AF ˘ŠGŇíľYľ9Żžé…˝ĘŰĹWRBŞžTnOîŮI$Čz“ŔÇ9ôíćÚGÓŽ'pH|čuIäňäF(㙠îWVpT‚8"łîî4ŤÄžťń]LJn/.€6wĹuxhŮՂ“†]ŘČäŠ8ż„žđ7Âá{†üwŠ]ŘŢ|ŇY_ęň@$j…JžŇAÁČ;Wgmᛉ.ôńu6 “,R>L1“üę}CţB:Wý|ˇţ‰’Šř7ţ@p×(?ôDusP˙Ž•˙_-˙˘dŚ#JŠ( "řäŇíĆĺűÝ1ĎÝQńČ˙ĽŰË÷şcŸş(ŻŞĄüz#‚_=SG9Ńí~eo”ôőfŤhç:=ŻĚ­ňžƒŢŹ×Îb/SŽđĐUM7ţ@úoýx[蔫uSM˙>›˙^ßú%+A-˙ä+q˙\#˙ОŽU;ů Ü×˙ô'Ť”QEiřgJÓ.t…šăNłšVžmĎ$ Ěză’E!™”UďiÚ}˘ŘIiaknćëihĄU$yRq=…q.˝Őfńá'P:[ßÁsw=ęĒIP”ŹaÁMěÓ§,­Ćp@SEyˇ!×ô{ŻŞÝÉâkáâI>ĚnźŤVem2ôbFá~f,¨8 HćmSâbhÚÔúćŸaŚę–úÂčď ú˘Ľ˜ […cr踏Ę`Ů)œüĄIĆ@=Šóíâ\ZƁƓcc¨ę’ęçGŠ =Mf´’ŕCç–[•^c‚ĺśn+ˇIă¸Ţ¤î;vĺłň°„ąÜÜé LÖ7RÂTËlĘć+Č]JąSČܸ8^ÔÄY˘šŸ†7šď…]őMBmFćßTÔlÍĚÉ<‰ôđĄaŞgdkœ(Ď\WM@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@xUŠkř˜‡ţŕŤ7wŠ;f}Ő_ uÖżě ?ôš šóŠ cÁżňƒţšA˙˘#Ťš‡ü„tŻúůoý%Sđoü€ŕ˙ŽPčˆęćĄ˙!+ţž[˙DÉ@TQEyÇ#ţ—n7/ŢéŽ~袏ŽGý.Ün_˝ÓýŃE}UŕĂŃř™ęš9Ώkó+|§ ÷Ť5[G9Ńí~eo”ôőfžsüizt†‚ŞiżňÓëÂŰ˙DĽ[Şšoüôßúđś˙Ń)X o˙![úáţ„őrŠŰ˙ČVăţ¸G˙Ą=\ ŹizĽîŸgöTąˇ™VI9š*Hgfé°ăŻ­W˘ÉuMBďR6É-œ$3y…–ŕš?#.1°{׾ax›ĂÖÚൔÝŢi÷śn^ÖöÍŐf„°ĂšYYHꏏĆ@#bŠç­ź+ž—5öłŤjw:n ú„sÝI瑭äˇÚB"¨@’ą Šż0×1ßř3Mť}Fqwou{Š&¨—0ȢK[„ˇŽÜ4YR1ĺǂ0;ÜKE1ÍǃăşŃٞ˝×őťŤČnĹě›Ëš‚`ťC XÄJ6–]ť6Íri—žŇu%´ÝÍţŽÖÖW6eî¤]҉ĺ†V”UÚęĐ!B›Bö u4Pwđő'Ô?´WĹŢ'‚ńôشˉâž×Fň¸ß˜ˆŢLÍóŽ``‚X›:Ÿ4éţÍý—Šęş‘`šiţ͕ÍľL쉼Ä|mËa—k ͆ćşĘ(•¸đ‡."1M­vQYY.ü}‚(ö•ňFܨ۲[(źáT†Ki›Kk5Ô.c˜ŔbŠą™UśăĚŠMŮç•+ŸáÇfŠçźávđľ­Ő¨ń­ŤCqq%Č[ĺˇT’Ë$˛˛˜bŒüď# phâş( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ř[Žľ˙a˙¤ĐTםMCánş×ý„ţ“AS^u4Ěx7ţ@p×(?ôDusP˙Ž•˙_-˙˘dŞ~ ˙őĘý\Ô?ä#Ľ×Ëč™(JŠ( "řäŇíĆĺűÝ1ĎÝQńČ˙ĽŰË÷şcŸş(ŻŞĄüz#‚_=SG9Ńí~eo”ôőfŤhç:=ŻĚ­ňžƒŢŹ×Îb/SŽđĐUM7ţ@úoýx[蔫uSM˙>›˙^ßú%+A-˙ä+q˙\#˙ОŽU;ů Ü×˙ô'Ť”Ti)ŠŢňU Wtv˛2ä¸<ƒRV˙„äŸőŢýô†s†]Ž‹$Q;TËm"pN2Ŕ€ţU%lxÇýNŸ˙_űJJóÁc¨xĂĂ:6˝ąô+¸î̐L؆ćí|Ż&'7 ä€ŕŕPYŠYXÝXZÝMĺͨ\kUÚO™ ŠIJä ’)Nˎ¤nźÇŚ&›eyŕí#Á×Ú (9˛DuľěťÂác9Db˜ÂíŔ,ŠÉÍ-kĹ*Ň4Űí/ouK¸ĺďZ V7{gž"V6†ď˜ Só.w¸ž#ןCö-Ţ!Dž­ušqOćK6ýęţrś"‹Ë]ÁvˇďĚ(ę4W’j~?ńľŽ‡uŔ?ˇ4‹[Ëß6"WĂćMŠg“或l+wFÇ;ô?ĂŁ ÜGâk¤}.8UŽć¸FŽŞA˕Ú0HäÉÁĹ1WđťFŠĘmWVÓt hş‡’,tĽ‹Ę>ëƒâ&“rü˜lh[ Xހ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ánş×ý„ţ“AS^u5…şë_öúMMyÔĐ1ŕßůÁ˙\ ˙ŃŐÍCţB:Wý|ˇţ‰’Šř7ţ@p×(?ôDusP˙Ž•˙_-˙˘d  *(˘€<‹ă‘˙Kˇ—ďtÇ?tQGÇ#ţ—n7/ŢéŽ~č˘žŞ‡đačŽ |LőMçGľů•žSĐ{՚­Łœčöż2ˇĘzzł_9‰ţ4˝Nş?ĂAU4ßůéżőám˙˘R­ŐM7ţ@úoýx[蔬 ˇ˙­Çýp˙BzšTí˙ä+q˙\#˙ОŽPE´—Öą­ľ+ˆ˘ÜĚ$dĚXňPž¤ŃE$ďyrŃŤůçXŸzŤ$`nÚW?*ƒŃWŐtí?Uą’ÇT°ľż´“ýd0Ź‘żŐXj͝§č:mkk§čÚuœr™­b‚Ő`rŹ……bŽË‘ÎŽ„Ô—:F•uo{osŚYO űźŽH–Ⴊ #v˘.NxU…]˘€2áđ燡ĐßB‡AŇăŇ\Ö)iˇlœœĆÓĎľOeŁé6)l–Z]˛ÚBööÂuA NT˛&ʤ˘Şú ťEa\x3Á÷ \xSB•mŐú|L#T,Č+ŔRî@ 7ŠŤšÖĄk~Gö֋Śęfmđ}ŽŐ&ň›Őw´đ9ŁEWű Žë–űžë°Éň—3ť@~>o—Ž{qPę6¨hÇEżŇŹ.ô¨†Î{tx ŠFÂ6ŕ qéW¨  ŸxcĂ^3Ÿx{IŃţѡÎű ”py›sˇvŔ3ŒœgŚO­kQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE?ÂÝuŻűý&‚Śźęj uÖżě ?ôš šóŠ cÁżňƒţšA˙˘#Ťš‡ü„tŻúůoý%Sđoü€ŕ˙ŽPčˆęćĄ˙!+ţž[˙DÉ@TQEyÇ#ţ—n7/ŢéŽ~袏ŽGý.Ün_˝ÓýŃE}UŕĂŃř™ęš9Ώkó+|§ ÷Ť5[G9Ńí~eo”ôőfžsüizt†‚ŞiżňÓëÂŰ˙DĽ[Şšoüôßúđś˙Ń)X o˙![úáţ„őrŠŰ˙ČVăţ¸G˙Ą=\ ¤°˛Ôď­ţŃo Ÿ”]Ń|ˆ ňą^@CéëQÖ˙„äŸőŢýô†a^Úę&w¨I¤ňÁŠfbÖn…÷OzËńťĽh‘Üę—&%–A(‘<˛Ěäľ#@]ۜ('žŐŐxÇýNŸ˙_űJJ󏋍?Ĺş‰ŽŸyaeowks¤ 4°™Œ%f¨,ŕy,„(-űޘÍX_é÷7iŃO:jšŁéŇyńIm%ł­¤×hä@ůÄ@m!xp{`ôőçž-‚×Ç2řDKĄj’iqřÚć;Ű ÝÓîđďËvDůÂî'Ă<׈ü3ŞÚhşŢ˘iŸfĐm|Użb:l—6ď`l!gXí‘ă2Ĺö—,QWl ŃY7Zϑă ;ĂßfÝöÝ>î÷ĎߍžD–ɡn9ÝöŒç#:ńĺś%Ě^ˇŠćĘ÷Qđúř‹íšmž…=ŠýˆŰ‘ĺĹfîň˜…ÁI ż8 ˇ›Ĺş§}wá–đF•¨éš\NŚłZ^ÎGŽŹ˜Ű#°ÍłČ¨ĺÚBŠg%™kŹůţ0Ô|=ömżbÓí/|ýůßçÉr›v㍿gÎrsż Ç:Őâś•áY<[-Ő÷ĂÝnëF ŘÁŚC‰1ó,÷„ǰ/‡8ٜîÁkšž‘"˙eÂĂđö§â]žľˇ‡ěśr^yZ’ďűK|€ůr>aŰ)ŔćÁžÇU5NÇGÓeÔuü›hq˝ö–9$(TI$$’Ż&Ôô_ÉgŚ‹xoţŃmŁÚ'ŠĚrlm]ÂŚř b9”(“2) vyÔ罜Ó<>—śú}ŰÚĹ{-­­ÍXÎ,ůAÉP7`9ôťqš~÷Ls÷EőT?ƒDpKâgŞhç:=ŻĚ­ňžƒŢŹŐmçGľů•žSĐ{՚ůĚOńĽęuŃţ ŠŚ˙ČM˙Ż oý•nŞiżňÓëÂŰ˙DĽ`h%żü…n?ë„úŐʧo˙![úáţ„őr€ ˇ˘čăP°RꑳK*íŒG´‘”c(O@;ŐJżáýbĆËL×-p’ŹÓʌ0db9 AŕŠC Ö´Ďě߲IőÔÂYüśYDxǖíü*UĚř§^šÓ.ě4˝/Mž­¨y?“Ç_2I$ÚĹTAÂą%ÔcŠOˆ5K=@YEjgvKíşŢD|ˇË(HŽGĹzFŤ>ŻŚxƒA{3ŠińĎ‘x̑\A7–] ¨b‡tQ0m­÷HÇ9ž%ńną˘ \köąčÉsŽ=äV˛Ő¸‹ě72 ŒˆÄ‡2¤`ŠÄŽ0Açr?xiô5ą"ÚGqöWG´™gäb/ Ż›ćŒ&ÝÄqŠŠ6“âMZ÷Ăz†ą‘m.—ŹI{,łÉ*ˆM•Ä ĄŮ{ď˜•Aˇ=Ç8ž'đĄŞÉŤÝEuÍ'ˆ˘ÖlŁŽú{]ęş|VË$Œ˛Swđä• ›ţ? ˙Â>uĂ~âĚOöbŚÚQ?œy^Fß7ĚĎđmÝíYw>0ľ(Ńî¤-t ´MNň鎢0mx'ł@Ďć(t+ćĘ œry–Ö,´{kŤ(4ű}f×[ţ×X'Őnąś+-ĚŕČO–Ç  U>S‚Kü]ŕm_ĹúžŞęˇş]ĽŮOł3MWO=ʐŽ MŹ p\’ …8*WřĽYxÚöBúő4Š4+űH†—;:ošíf•Őcó6ÇKáWŽ™9čőďxoCű?Űő?h€Ü§Ů­ĽšÄ#•źĽm‘ň>vÂű×;q¤|AĹ> łśđłO˘Zé÷0Íw0Xڊ[—2!ɉÇČv–än] ą„‘&–lŻ–Ţ8ä—{ÉŰĂqŒ6ŒRuĘs´‚2k¨ŽOŔŐ<;ŞxšëRńްşŽĄĚ p°‡U[Xb,Â(ŁɌŒ ŽÔŒđĹÉë(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(ţë­Ř@é45çSPř[Žľ˙a˙¤ĐTםMs ˙őĘý\Ô?ä#Ľ×Ëč™*Ÿƒäýrƒ˙DGW5ůé_őňßú&JҢŠ(Čž9ôťqš~÷Ls÷E|r?évărýî˜çîŠ+ę¨ˆŕ—ÄĎTŃÎt{_™[ĺ=˝YŞÚ9Ώkó+|§ ÷Ť5ó˜ŸăKÔëŁü4SM˙>›˙^ßú%*ÝTÓäŚ˙ׅˇţ‰JŔĐKů Ü×˙ô'Ť•NßţBˇőÂ?ý ęĺQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE?ÂÝuŻűý&‚Śźęj uÖżě ?ôš šóŠ cÁżňƒţšA˙˘#Ťš‡ü„tŻúůoý%Sđoü€ŕ˙ŽPčˆęćĄ˙!+ţž[˙DÉ@TQEyÇ#ţ—n7/ŢéŽ~袏ŽGý.Ün_˝ÓýŃE}UŕĂŃř™ęš9Ώkó+|§ ÷Ť5[G9Ńí~eo”ôőfžsüizt†‚ŞiżňÓëÂŰ˙DĽ[Şšoüôßúđś˙Ń)X o˙![úáţ„őrŠŰ˙ČVăţ¸G˙Ą=\ ´ü3Ľi—:BÍq§YÍ+O6ç’f?˝qÉ"ł*ƗŞ^éöeKy•d‘ƒ›’¤†vn›:úŇ7‰´í>Ńl$´°ľˇsu´´PŞ’<Š8ȸ^ęłxGđƓ¨-ďŕšťžőbI$Ž( JV0ŕŚöiӖ Vă8#ŽŐ5 ˝HŰ$śp@Íć[‚äüŒ¸ĆÁýď^Յâo[k‚ÖSwy§ŢŮš{[Ű7UšĂ ĺee#Ş˛°8€;Ɛëú=ׂUnäń5đń$Ÿf7^UŤ2ś™z1#Fpż3T$s6Šń14m ę}sO°ÓuK}atw†}QRĚNĐ-Âąšt\Gĺ0l”Î~P¤ă=ˇ…bWŇćžÖumNçMÔPŽ{Š#Üň5ź–űHDUV!QWćúć;˙iˇo¨Î.ďíîŻu$ŐćIkp–ńۆ‹*F<¸đC{ƒÁŔĂŃţ%ĹŹhÜi66:ŽŠ.Žtx łÔÖkI.>yešUć1.[fႻsĹQńW‰ßCńď„ďőÝ5ĄÔŽtmVÖ >ŇQ;Op×:xHărÁwe‚ŕdśÜu7ŽëFŽĘ÷_ÖîŻ!ť°jo,Bć ‚í c(ÚYvěÚC6AÉŚ^řIԖĐkw7úť[Y\ٗş‘wJ'–ZBQWkŤ@… m Řp0ćŤâŰo‰Ú´ś~łź˝ é’ÝÁýŤą!+qű´(ůŽrq•UůNXq™ď%Wä}Ň7—&íQˇ–뿇Š>Ąý˘ž.ń<ŚĹŚ\Ođ¸‚7•ĆüÄFňfopĂÄŮÔü §Oöoě˝OUĐ<‹ÓOöl¨žmŞgdMć#ăn[ ťXnl74 Ľuń'OˇƒKœé×RGŻZCq ů3_´Š§ÉKˆľƒ5ŽőąxEĎí#pEźŻ7ip8ŕ†ăŔ¸ˆĹ4´qŮEedťńöŁÚWČ erŁnÉl˘ó…P7/ôçťŃŽžu;ř$؃퐺¤á”ƒż…Ű’G#nӒ1ƒŠa|;ÔĽ¸ŽűKÔ/Óî^ő ľcwś{â%`S`ˆnů‚?2á‡{‰â={Ä?bÝâáxZ×[—DţdłoŢŻç+b(źľÜk~đ|ÂťKx>á K hR­ş˘BO‰„j…™ĺx ]ČĄfő5sZĐ4-oČţÚŃtÝOěÍžľÚ¤ŢSzŽŕvž"žkŠř˙ÄVÖ:ÔkţÜŇ-o/|؉_™6)žLš"Y°ŹAÝě SŤř­&§iđŢé4ëĆűS˝ĽłÝK'•ˆ¤¸Š9¤g@6~휖P6ňF1]GŘlw\ˇŘí÷]€.O”š˜Úńó|źsۊrÚZ­ˆąЋA” ,&1ˇoM¸ă1Láeœ/ˆű6ßąiö—ž~üďóäšMťqĆßłç99ßĐcj(˘Şk…ž•§KuܐōËki-̧$ˆâVväó€p2OšˇEbxgĹZ?ˆŽ/m´Ó¨,ö^_Ú"źÓ.lÝ7‚W‰ŁBrôĎę+n€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€9Ĺ˙ž­˙_K˙˘"Šę˙ž­˙_K˙˘"Šé€ß˙ČúĺţˆŽŽjňŇżëĺżôL•OÁżňƒţšA˙˘#Ťš‡ü„tŻúůoý% 4¨˘Šň/ŽGý.Ün_˝ÓýŃEú]¸Üż{Ś9ű˘ŠúŞÁ‡˘8%ń3Ő4s×ćVůOAďVjśŽsŁÚüĘß)č=ęÍ|ć'řŇő:č˙ TÓäŚ˙ׅˇţ‰JˇU4ßůéżőám˙˘R°4ßţBˇőÂ?ý ęĺSˇ˙­Çýp˙Bzš@ořGţ@I˙]ç˙ŃĎX]ělË˝ť3’b“ůRĐxÇýNŸ˙_űJJ󏋍?Ĺş‰ŽŸyaeowks¤ 4°™Œ%f¨,ŕy,„(-űޘÍu1YÚE ’+XÇFXŔ"Ś <ńlž9—Â"] T“KÄ×1ŢŘÉ膟w‡xŘX˲'Îq8 †ćźGáVÓEÖô}Lű6ƒk⨼űÓdšˇ{a :Çl–/´šbˆŘʸĂ`ŠöŠ(Ĺě4K˜źo͕îŁáőńÚ/4Ű} {űˇ#ˊÍÝĺ1 ‚’=~pn37‹t=NúďĂ-ŕ+QÓ4¸4Mf´˝œ]Y1śGa›g‘QĘ´…RÎJ{ń [JđŹž-–ęűáîˇuŁ?…ě`Ó!‹D˜‹y–{ÂcŘ÷SČCœlÎw ŕľÍ_H‘˛żáař{Sń.Ď ÚŰĂö[9/<­IwýĽž@|š0í”ŕ óţÇEÓŻ,ô&žŐcňőmVfżżSɎG,YôŽ0‘]™ď]PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP8żňŐżëéôDU=@żňŐżëéôDU=0ŕßůÁ˙\ ˙ŃŐÍCţB:Wý|ˇţ‰’Šř7ţ@p×(?ôDusP˙Ž•˙_-˙˘d¤•Q@EńČ˙ĽŰË÷şcŸş(Łă‘˙Kˇ—ďtÇ?tQ_UCř0ôGž&zŚŽsŁÚüĘß)č=ęÍVŃÎt{_™[ĺ=˝YݜÄ˙^§]á Şšoüôßúđś˙Ń)Vꦛ˙ }7ţź-żôJV‚[˙ČVăţ¸G˙Ą=\Şv˙ň¸˙Ž˙čOW(˘Šˇ˘čăP°RꑳK*íŒG´‘”c(O@;ŇRŠą­iŸŮżd’;멄łůl˛ˆń-ŰřTŞ+™ńN˝sŚ]Řiz^š5=[Pó&5Ž0žd’IľŠ¨.ƒ…bK¨ÇR7¨Ž Äž-Ö4Cው~Ö=.uÇłźŠÖCzˇ}†ćD‘ćTŒX•Ć<îGăo >ƒ&ś/ä[Hî>Ęčö“,â|ŒEäó|Ñ„Ű¸‚1@ކŠç˙á3đßü#ç\7î,Ä˙f*mĽůŮǕämó|Ě˙ÝŢ՗să QâŕjB×@›DÔď.šę#ׂ{4 ţb‡Bžl ŠÇ'‘0ÚQ^x˙ôŤ/^è_^Ś•&…ciŇçgMó]ŹŇşŹ~b&ŘáÉ|*ńÓ'=˝ăO čgű~ çí”ű5´ˇ8„c2ˇ”­˛>GÎŘ_ztVDž&Đb[ś—Tˇlí’îfrBˆXedRxt8#räd׊Ĺ~!CđʚęÚKr3 Ĺ Ÿ$––D7—ťP\,>P #ŒSˇEs~ńţŠŤjš6ŻĽ[XjrA,Ÿd˝űT’ďۇ(„0ňŰ*T`<†ŇPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP '@‹SťÖ.ŸQżś+ząěƒĘÚqo ĎΌsĎŻj}LJ „˙Č[Xořż˙ŚŚ“ x“Bń?†źGmi{c{tŤíń˜!ÚÐA „Ť ɐA^8Ÿ„?|đ’ÓQ¸Ó'kŰ말ˊ^ó#ś š!`*€ąŢĂqŔ ¨†tŢ ˙őĘý\Ô?ä#Ľ×Ëč™*§ƒŐ“E‰YJ°ŠA ůŐ˝CţB:Wý|ˇţ‰’˜*(˘€<‹ă‘˙Kˇ—ďtÇ?tQGÇ#ţ—n7/ŢéŽ~č˘žŞ‡đačŽ |LőMçGľů•žSĐ{՚­Łœčöż2ˇĘzzł_9‰ţ4˝Nş?ĂAU4ßůéżőám˙˘R­ÖUź÷öÖśö­¤ÜHmᎠńKWĄC ĚČÁgőŹ 2Ű3\Łššd vÁ’:ƒęi>Ď?ýnż(˙řš‹í—żô˝˙ż˙ńt}˛÷ţ€ˇż÷ňţ.€%ű<˙ôşüŁ˙âjHEě1ůpę×Ń $íR€dœŸáő$Őoś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřşą2^LMŞŢČî]űČĘúůŐgÓUď#ź{™ć(Ţ(ć1D]ʖPŰ2(„ŽűWĐRý˛÷ţ€ˇż÷ňţ.ś^˙Đ÷ţţC˙ĹĐ\iŠq-źˇM%´žl ńDĆ'ÚÉšIO”ív\ŽpÄt&˘ţĂ´űAšů|óqöŁ'ŮáÝçy~W™™ßĺü›şíă§7Ű/č {˙!˙âčűeďýoďä?ü]Bt;CqöƒˇÎűGڟϳÝÎňüż3;3żËů7uŰÇN)š—‡ôýN{yő(㽚ۘ$¸ś†F‹ćVůK!+ó";˘žÂŹý˛÷ţ€ˇż÷ňţ.ś^˙Đ÷ţţC˙ĹвăűdˇžsýŚX–&ň˘ŢńŠb¨[fJ‚î@č7SQZhvv{~ÉśßmşZ*ŢÄ)‘pŸqw6 ÉÇZŸí—żô˝˙ż˙ńt}˛÷ţ€ˇż÷ňţ.€(Ëá}"UąYmm¤]=U,ƒYŔE˛ŠR˘?Ýü€B1Œm_AWŻ4Ő˝´šÎňćK›iÇ,2ŤŠF ˛”Áv4}˛÷ţ€ˇż÷ňţ.ś^˙Đ÷ţţC˙ĹĐ=ĂZ_‡íĎAˇƒJśw246V@…ˆąT@3€9ö­łĎ˙AŻĘ?ţ&˘űeďýoďä?ü]l˝˙ -ďýü‡˙‹  ~Ď?ýnż(˙řš>Ď?ýnż(˙řš‹í—żô˝˙ż˙ńt}˛÷ţ€ˇż÷ňţ.€%ű<˙ôşüŁ˙âhű<˙ôşüŁ˙âj/ś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş—ěó˙ĐFëň˙‰Łěó˙ĐFëň˙‰¨žŮ{˙@[ßűů˙GŰ/č {˙!˙âč_łĎ˙AŻĘ?ţ&łĎ˙AŻĘ?ţ&˘űeďýoďä?ü]l˝˙ -ďýü‡˙‹  ~Ď?ýnż(˙řš>Ď?ýnż(˙řš‹í—żô˝˙ż˙ńt}˛÷ţ€ˇż÷ňţ.€%ű<˙ôşüŁ˙âhű<˙ôşüŁ˙âj/ś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş—ěó˙ĐFëň˙‰Łěó˙ĐFëň˙‰¨žŮ{˙@[ßűů˙GŰ/č {˙!˙âč_łĎ˙AŻĘ?ţ&łĎ˙AŻĘ?ţ&˘űeďýoďä?ü]l˝˙ -ďýü‡˙‹  ~Ď?ýnż(˙řš>Ď?ýnż(˙řš‹í—żô˝˙ż˙ńt}˛÷ţ€ˇż÷ňţ.€%ű<˙ôşüŁ˙âhű<˙ôşüŁ˙âj/ś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş—ěó˙ĐFëň˙‰Łěó˙ĐFëň˙‰¨žŮ{˙@[ßűů˙GŰ/č {˙!˙âč_łĎ˙AŻĘ?ţ&łĎ˙AŻĘ?ţ&˘űeďýoďä?ü]l˝˙ -ďýü‡˙‹  ~Ď?ýnż(˙řš>Ď?ýnż(˙řš‹í—żô˝˙ż˙ńt}˛÷ţ€ˇż÷ňţ.€%ű<˙ôşüŁ˙âhű<˙ôşüŁ˙âj/ś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş—ěó˙ĐFëň˙‰Łěó˙ĐFëň˙‰¨žŮ{˙@[ßűů˙GŰ/č {˙!˙âč_łĎ˙AŻĘ?ţ&łĎ˙AŻĘ?ţ&˘űeďýoďä?ü]l˝˙ -ďýü‡˙‹  ~Ď?ýnż(˙řš>Ď?ýnż(˙řš‹í—żô˝˙ż˙ńt}˛÷ţ€ˇż÷ňţ.€%ű<˙ôşüŁ˙âhű<˙ôşüŁ˙âj/ś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş—ěó˙ĐFëň˙‰Łěó˙ĐFëň˙‰¨žŮ{˙@[ßűů˙GŰ/č {˙!˙âč_łĎ˙AŻĘ?ţ&łĎ˙AŻĘ?ţ&˘űeďýoďä?ü]l˝˙ -ďýü‡˙‹  ~Ď?ýnż(˙řš>Ď?ýnż(˙řš‹í—żô˝˙ż˙ńt}˛÷ţ€ˇż÷ňţ.€%ű<˙ôşüŁ˙âhű<˙ôşüŁ˙âj/ś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş—ěó˙ĐFëň˙‰Łěó˙ĐFëň˙‰¨žŮ{˙@[ßűů˙GŰ/č {˙!˙âč_łĎ˙AŻĘ?ţ&łĎ˙AŻĘ?ţ&˘űeďýoďä?ü]l˝˙ -ďýü‡˙‹  ~Ď?ýnż(˙řš>Ď?ýnż(˙řš‹í—żô˝˙ż˙ńt}˛÷ţ€ˇż÷ňţ.€%ű<˙ôşüŁ˙âhű<˙ôşüŁ˙âj/ś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřş—ěó˙ĐFëň˙‰Łěó˙ĐFëň˙‰¨žŮ{˙@[ßűů˙GŰ/č {˙!˙âč;ÍŢő•Żí,Ł f‚ {e*đ㘌`X‚- ű÷VţŮ{˙@[ßűů˙GŰ/č {˙!˙âčĹ´O˜LŻ+HűٟÎěčWÔ?ä#Ľ×Ëč™(űeďýoďä?ü]1EÝĺýŁ˝ŒśąŰťHÍ+Ą,J2€“ýěäă§|đŤEP‘|r?évărýî˜çîŠ(řäŇíĆĺűÝ1ĎÝWŐPţ =Á/‰žŠŁœčöż2ˇĘzzłU´s×ćVůOAďVkç1?ƗŠ×Gřh+?>!˙ŸM ˙S˙ň5hQXůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘ŞKcŹůËöť}%!çq‚öYqĆ Py˙hJšEQEyÇ#ţ—n7/ŢéŽ~袏ŽGý.Ün_˝ÓýŃE}UŕĂŃř™ęš9Ώkó+|§ ÷Ť5[G9Ńí~eo”ôőfžsüizt†‚Š(Ź Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š*‡‰ăđîĽ$lČëi)VS‚C‚ G/ˆtĽxĽÖ´ô‘Ť+\( Ž óM˙„—ĂżôÓđ%?Ćť(ĘAÁiQ€ˆˆ *¨ŕ@)Ţ{zĐ˙ /‡č9Ś˙ŕJđ’řwţƒšoţ§ř×i硭{zĐ˙ /‡č9Ś˙ŕJđ’řwţƒšoţ§řÖ÷ü%žţŢ˙„ţ'űcűŰ#űGL˙ŤÎîœôŠ4~ßTÔ5›+t™dŇ/VÎŕ¸3ľź3‚¸'#lč9ÁČn1‚@9ßřI|;˙AÍ7˙Süh˙„—ĂżôÓđ%?ĆťO=˝hóŰր8żřI|;˙AÍ7˙Süj{ cIż˜ÁeŠŮÜĘqHŚV8őŔ5ÖůíëX~5}ÚUť7ĽýąFTŕöĘłĄ#˝C<ŃA Ď<‰QŠgw8 RMf˙ÂKáßúiżřŸăW.śąŁ#¨d7ŒJ°Č%`•—fU#Ѐ{Vţ§ŞŮévjíľ•œ žk‹‰V8ă_Vf îh”˙„—ĂżôÓđ%?ƏřI|;˙AÍ7˙SükQń%•Ö‡/?öÝŮľ´’Ź›…ź×‰ĎÝ)`ŒňWą$?W×íô˝CF˛¸IšM^őŹíĘBşŰÍ9-’06Ŕ㌜•㠝˙„—ĂżôÓđ%?ƏřI|;˙AÍ7˙Sük´óŰ֏=˝h‹˙„—ĂżôÓđ%?ƏřI|;˙AÍ7˙Sük´óŰÖł|9ŻŰëş|ˇś‰2Gí՛ @}˝Ä9ŕž DÄwÁđ9ßřI|;˙AÍ7˙Süh˙„—ĂżôÓđ%?ĆťO=˝hóŰր9‹ ű-B&–Ćî ¨ŐśłE `§b˘×>-˛`/a8r?‹l‘mĎŽ76=7SRĐEP‘|r?évărýî˜çîŠ(řäŇíĆĺűÝ1ĎÝWŐPţ =Á/‰žŠŁœčöż2ˇĘzzłU´s×ćVůOAďVkç1?ƗŠ×Gřh(˘ŠŔĐ(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š+;Ĺň-jŸőç7ţ€kF¨x‘OęQĆŹî֒…U$”8PK#ţńžŚ›žŠ}ś{ Ź‘żĚާ!čAî(űJĐÝôoŞ_iZ>Ň´âżÚ:ü)řBˇA˙ ÷“łěÓľóŸľíűŰ|ďŢůßwo9Ĺ\’ţúŰ⧉âŐ/Žtż Iâ(<űť9Z7kżěÝ?ˊy -Ç+÷› ĹAĂú÷ÚV´­.ďŁ}RűJŃö• EÝőâöΕ˙§ë_ý•oí+Y^'d˛śˆrď}mľ{œJŹqô OĐ@\œk:)˙§š?ôšjćţ)KŞëZö‹áMOÓő‹Ťęv÷ˇo C%Ö)ZmŽŇÁĹt:‹ŹZŽ“3¨—mšn‚U^}ٔrzÔűJĐ3Â5;ÁŚhţđ§‹ď›B>ńWŮĺšĆţLGc&zÖĺgڎ!ňZL!T‡ĺĆjmkS°›Lđô—ž&ÔDžŕńđiÚÇŰdó^Ďű.ăqűNw˜Ä­4~ně„ÝĆę÷´­iZVČ­..ľˆô.Çĺܞ¸ń”Öś7đꉯ,WK¸•“ĎÎůĎY>I!†Č YŸľOi~.ŐtŘuËm)ŹbśĂŠxŚňŮĽQ ˙gXeű{|Ĺ`ěÎvă Hf÷´­iZ`p3ęV ńNţ×Ğ%ÔtŰČŻ-S@°ŠúH#ť˘Œł”íŸ2™‘÷ŘŞÉ÷ŤžŇlfŇü8|SgŹë1ŢOl ň _"m}íäŒŔ–r˛;n*X1Č +×ţŇ´}ĽhĹb×Nď,¨Ž RĘ@Á=gí+GÚV€3őcŸŘ׍ÇţŒ†ŹÖ}Ô˘oZíçËą›~?‡t‘mĎŚvś=p}+BQ@EńČ˙ĽŰË÷şcŸş(Łă‘˙Kˇ—ďtÇ?tQ_UCř0ôGž&zŚŽsŁÚüĘß)č=ęÍVŇ3ýk–SňžƒęÍ|ć'řŇő:é|(˘ŠŔĐ(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š¤Ú>ŽîÎú>šěĖf´Œ’ORIŇbčżôŇ˙đ?ţ&ŻQ@ąt_úéř˙Gö.‹˙@]/˙ă˙âjőGűE˙ .—˙€q˙ń4bčżôŇ˙đ?ţ&ŻQ@ąt_úéř˙Gö.‹˙@]/˙ă˙âjőGűE˙ .—˙€q˙ń5-ś§ZËćÚéÖVňcáˇD8ôČŹŃ@ š(扢š4’7dqĂЃT˙ąt_úéř˙W¨  ?Řş/ýtżü˙‰ŁűE˙ .—˙€q˙ń5zŠŁý‹˘˙ĐK˙Ŕ8˙řš?ąt_úéř˙W¨  ?Řş/ýtżü˙‰ŁűE˙ .—˙€q˙ń5zŠŁý‹˘˙ĐK˙Ŕ8˙řš?ąt_úéř˙W¨ m---’ŇÖŢŮXäŹ1*}pMEQEä_ú]¸Üż{Ś9ű˘Š>9œ]Ű|ĘóÔ˛(ŻŞĂŻÜĂŃř™ęšCnŃí~e?)č=ęÍax7_ŇľXÝŮ_C,²Âä/ĘŰX2<ŒÖÇÚmżçâ/űěWĎba/k-ŞR\ˆ–Š‹í6ßóńýö(űMˇüüE˙}ŠĂ’].‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š„Ýڎˇ0˙ßbľÚĎÔ÷đQěĺŘ9‘ĺĎúU°ÜŸ|đGű"ŠČý źO éˇÍŠjŰ[,˘10‰ĺŮ2äV9¡ĺE}%,M:Tá JÎČătĺ&ÚG~Ë~(××TżđđÔćţĚľÓ庂ňä3D¤Ťcpfůsˇ,N2IŻtmoVţ?ćü袹ËdÝ_PŽ’žƒNˇŤůŸţú¤ţÚŐçţűęŠ+Ń2˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( !ąŞů~ŸţúŁű_S<éđÚ˘ŠŇGÉżľÝ[XńΊmŠ^źđé÷×öąƂVŔ'Ç$ŕdđ(˘ŠřúšśĎIl˙Ůgwenhywfar-4.15.2beta/doc/dialog/images/cocoa-3.png0000644000175000017500000012027112364015347016754 00000000000000‰PNG  IHDRĐ0Ż\ xiCCPICC ProfilexՖgTɆŤ{r"Ě C†!g$ 9Ar•a† ă0dDEdqLˆˆ`X0(¸*Aրˆb`0ÇdPŽ‹(ˇŹçÜť˙îŸ[çtŐÓo}őuuW矐;9A ,@*?CčáĚ ˆdâ€H"‡›.pň÷÷˙Ř>ސxňŽ‘8×?†ý÷ i^l:Č™ŽáĽsS>‹đ W Ě>…pv†aTÂt!˛A„+Ä?ĎőbŽ™çós1Á.HL?x2‡#Œ€ôљYÜx$ia>/‘Ůa{n‡‡°xŠkÄ\…°nĚyâ`'f1'‡żČóD욘.HáäÎÝü/ťÔ”Lä{Í5*ғů)ËĹgCGŽ1ÇŐ{)sg6§ÇňC‚t~ĚrżŽş.° Ăůö^Đó\–/plşŰbž$Ž—řĚćň 3C8=+Čmó‚Ă˜뺨Ç%şłôÄ öⳒ×x/î\Ŕ\ŕ 8 d€X ̈ÍÉ@Ö—5‚\ab|BÓ ůăb ™l>×ؐifbj"žţżiâZ›ßě{Ć\ AŒ›k91Ř%#5ŕůˇ@ł.ňákڊАşiŰĘÍfÍçC‹ "Lň@h]`̀%°ŽŔ x? "Ŕ*ä '€T Ů lĹ ěťA58zpœmŕ<¸ ށ[ ÜO€Œ€×`|Óá Dƒä!UH 2€Ě dšA>P ECńʄňĄMP)TUCľPô+tş ݀ GĐ4˝ƒžÂ(˜ ÓaeX^ł`'؆WÂńpœÁŰŕ*¸>ˇÂ—á[đ=Xż†§PEB1Pj(# ĺ‚ňCE˘âPBÔzT ŞU‡jBu zPwP"Ôę ‹ŚĄ™h#´-Ú‚ć˘ÓĐëŃečjt=şݍžƒBO˘żc(%ŒĆĂƄcâ1٘bL%ć(Śss3‚ůˆĹbXŹÖM®Ŗa÷c›ąŘě0v ‡ĂÉă pv8?—+ĆíŝŔ] âFpŸń$ź*Ţ ďŽÄóń…řJüqüEü ~?M"hl~!—°p˜ĐA¸M!LĽ‰:D;b01‰¸‘XEl"^%>%ž'‘Hę$kR)‘T@Ş""]' ‘žŠd}˛ 9ŠœIŢF>Fî$?"ż§P(ÚGJ$%ƒ˛Ň@šByNů,A“0–`Kđ$6HÔH´J Jź‘$HjI:IŽ’Ě“Ź”<#y[rBŠ Ľ-ĺ"őZ/U#uNęÔ”4MÚTÚO:UşLú¸ô é1*ŽŞMuŁň¨EÔCÔ+ÔaŠŚAsĄqi›h‡iWi#t,]‡ÎŚ'ŃKé'é}ôIŞĚR™P™™™ 2"ŠĄÍ`3Rۧ÷_e•edceˇČ6ÉĘ~’S”s”‹•+‘k–ť'÷Už)ď&Ÿ,żSžMţ™ZA_!@![á€ÂU… Eş˘­"WąDń´âc%XI_)Pi­Ň!Ľ^Ľ)eeeň^ĺ+Ę* G•$• •‹*ăŞ4U{ŐDŐ ŐKŞŻ˜2L'f łŠŮ͜TSRóTËTŤUëS›V×QQ/ToVŚAÔ`iÄiThtiLjŞjújćk6j>Ö"hą´´öhőh}ŇÖŃÓŢŹÝŚ=Ś#§ĂÖÉÓiÔyŞKŃuĐMÓ­Ó˝Ť‡Őcé%ëí×ëׇő-ôôkôoŔ–‰ű  1†Ö†|Ă:ĂFd#'Ł,ŁFŁ!c†ąqĄq›ń›%šK"—ě\ҳ仉…IŠÉa“'ŚTS/ÓBÓÓwfúf\łłťćswó ćíćo—,]z`éC š…ŻĹf‹.‹o–V–BË&Ëq+MŤhŤ}VXt–?ŤŒuÝcíl˝ÁúźőK› ›Ó6ŮŮ&ۡ[Śł,vŮáeĂvęvťZ;‘=Ó>Úţ{‘ƒšÇĄÎᅣ†#Ďń¨ă¨“žS’Ó §7Î&ÎBççO.6.ë\:]QŽŽ%Ž}nTˇˇjˇçîęîńîî“k=:=1žŢž;=°•Ů\v{ŇËĘkWˇ7Ů;ČťÚű…žĐ§ĂöőňÝĺűtšÖrţň6?ŕÇöŰĺ÷Ě_Ç?Í˙ˇl€@MŔË@ÓŔüŔž ZĐę ăAƒƒˇ? Ń É é •  mýćV& _ž.üV„BDbD{$.24ňhäÔ ˇťWŒDYDGÝ_Šł2gĺU ŤRV]X-ššłúL4&:,úxô ǏSǙŠaÇ싙äşp÷p_óyźńXťŘňŘŃ8ť¸ň¸ąxťř]ńă  • ‰.‰Ő‰o“<“&}JöK>–<›–ŇœŠON=ǧň“ůÝkTÖ䏊˘4›´Ýi“BoáŃt(}ez{15˝™ş™?eeŮgŐd}ÎÍ>“#ĂĎéÍŐĎݒ;šçžwd-z-wmWžZţĆüĄuNëj×CëcÖwmĐŘP´a¤ŔŁ ~#qcňĆß M Ë ?l ŰÔQ¤\TP4ü“ÇOĹĹÂâ›m7üýsâĎ}[̡ěÝň˝„WrłÔ¤´˛tڌ[vsŤéÖŞ­łŰâśőmˇÜ~`vÇý;ëËĽËóʇwůîj­`V”T|Ř˝z÷ĘĽ•÷÷dîUůTľďŐÜťcďLuBő˝çšć}Jűśěű´Ÿˇđ€ăŚƒĘK~ý%ń—‡ľľ­uÚu•‡°‡˛˝<z¸çëHĂQ…ŁĽGżăŐÖw7X54W:ž˝nĚl?u˘˙¤ëÉö&ŁŚÚfFsé)p*óÔŤ_Ł˝Úűt×Ö™ŚłZg÷ľĐZJZĄÖÜÖÉś„6Q{DűŔ9Żs]ś-ż˙věźÚůš 2ś_$^,ş8{)ďŇT§ sârüĺáŽŐ]OŽ„_šŰĐÝwŐűęőkî׎ô8ő\şnwýü ›çn˛nśÝ˛źŐÚkŃŰňťĹď-}–}­ˇ­nˇ÷[÷w ,¸8č0xůŽëkwŮwoÝ[~oŕ~Čý‡˘ˆňŽ=JyôöqÖăé'O1OKžI=Ť|Žôźî˝?šE–˘ CŽC˝/‚^<ćżţ3ýϙ‘˘—”—•ŁŞŁ cfcçÇÝÇű_­x5ňZđzz˘ř_Ň˙Ú÷F÷ÍŮż˙ę Ÿy+|;űŽě˝üűc–~čšňŸzţ1őăô§’ĎňŸëż°žô| ű::=ƒ›ŠúŚ÷­ăť÷÷§łŠłłސ3çPHÇĹđî”Ä+ ž˜Ř9ď…ç" y˙ްŘÇĎyů˙äyż<o Ŕ‘NB đDĆdÔFFŞ#bKě`sóĹ QÄ-=ÎÜl ˛ą&Ÿggß+€ëŕ›pvvz˙ěěˇĂˆg@gÚźGű€Ľşš›YőĚöÍ-˙ąű7…čŞÍöě pHYs  šœ IDATxěœEý˙ç’Ké !´„ŢťÔRQQ: ˘`ág—˘ˆţEQŠ?Šô"ŘąŽ Ň  ˝÷äţó™ťď“š˝}ęÝsˇĎŢ{^ˇ7łÓç=łťŸÝ§ŠĽĽĹa @€ ĘôŠ,ą @€ @@3 @€ Pt°ˆ @€ 4c€ @U@@W‹¨€ @@@3 @€ Pć*â6\Ô&oŽŇT€ 䀀˙Trnż•ÜÔhmCçŕˆ˘ € @ "Đhb;łĄ*œ€ @ ČްΔ€î¤hfšF/<°h2 @ E ćeYÓ=. Ť͝ɝIŰP#“ĘB€ "Pł@öő­8mO‹éĐUˆćJDo%qzh Q, @€@ JÄr%q\OˆénĐ çR‚¸TXJ߸jă§ĺ @€@ő*ŔQśĽâ— Yt§î]p.&t‹ůGŹ+ɕäç‹€ @ :e…n[v•Ä+§˜Čş;„tÝtńœ&jÓüŹëŞ +×ňÆ @¨¤ŘMîÇ%WV4~˝EtÝt çb"8öÝq'ÄîJâÄńqC€ ÔF ¨°˛‹ăÄî(JęK…iqÓüB>őŇuĐUŠç4q›ôł}łc¸ć.Ś8ĺÂ-l@€ Úłmٕ ˇ0ł­É}ů'ý’ű–ś./vš€.!ž“6šŻ†Ć~ć6ť"ĎüÓâ)ʘżĽĂ† @čZĹmš)ż8,v[m“~ÉýŻŤg˘ťT@wB<Ç"×Üf RűɰbiĘů[86 @€@eREŤOZ‰2NąýŘ?vŤ†ĺöC+şRDw™€ŽP<'…nźonłŐŘJÜÉxÉý8…•2ŐÄ-•a€ @ o’BľTű⸹[iJíÇaiî4?ŤGа§ŤDt—č.ĎąxMs§ů †ů›mă°r~q8n@€ ęÄâŐR–ň‹ĂŇÜi~ĘWţĹÂ,\śLŻŐGžŢvjttZ@wR}ú8ŻőÜʕ+űĺ/ům/˘ň͚ŰÖ4Đ6ťlű 6?šc‘űs×, kZÂQdöY—1ń[‰ŰÄłĽ1mţkíšçžďökTvY˛dIȜ€ @ů"  R/ž]ßž}wŮ}÷Ýßă[÷´ßćűÍÄŻ´a,ýn“§œ[é Fšś–ľĐ5 čBŠk&€×ř´w™ –ŻĹ5ż¤mqäßřđáhć@€ oŇ#GŽÜߡň~3ÍhÖDŤ dóÓžâ™-˙dů™ą¸ś_“Ý:n\š[~ćŰ㟴Ő’W°Ąßä—jfw- .tŻžúŞ›7o^ˆŤ0cáźw'NtC‡uÍÍÍN ä_Ě$óœnöüî‘ţě&żýœ[śrą¸ýťĆmévÝ|7jŘX7`Ŕ€P×Rő,Vü!@€@ŁđşhC_wiAĚəçdÓ¤Đ$ěĚV¸šeËXxŇŤýWľ€ö‚ޏň\SşĹ‘ťĂü*ąűHt–2ŤV­ršĄž:uŞ“Đ•H3fŒrkń÷Z;mś—ÖŤ&ţ€ @ ݤM8—›6ą`6 šô3ĄŹps[úŠíŞt‰ŮgŤdŠ‚§’ÍÄłâ–Ћ-rłgĎV3ϚľŐ$ůŇĽKC]ä–đՒ…)Ž–t”šŮUžÝŖgŸŚ>AX‡x÷ˆá>ĎţÜŔƒB\-é(•çěy3ÜďżĹXg°[{Ň`7d­žnáŞénňʧý2Ž%nIÓ,7lÄ˙Őë!ŽÉw§âN\{3Ÿ˙úĽ˜@€ňHŔô Ú&w5"şIšÂYˇšYčŞtŠÚ´…ŠR2Agś: nóKłFĆ`™ÝWË)J™9s恏™b­oÖ ź–KŘLź–€Č-­82JłÖZkÍvÖŹYnÔ¨Q!ž‰â•+WšĽK–…4śŹdŕŔ…<•ŚTž=˙7ׯ_7iżźdČ羡›×ňş{iţrż„ĂŻnžĺhv̓FĄ˙Üě™NistŃz@€rJ@ŕĽ%v%žĺ–-Y‰˜V:ŕ1wáÜ\ý˙ÎhŤ”ŮVşöÍ/i+Ž…łČtSš%ËťĎZî gm–Nnů› –ČŐ,´…ŤBIŁ<5óżp˜ĚSË6”§â(ϙ3g–Ěsƒ)nƒ-Ćş1kk6źżë×Ü×őíłÚ­čăÓőmqƒ|űŻ>á˛lČJˇţMnĆĚ)%óL֛}@€ ҉& Ő$Ń&†“Í4qŹtÇlĹľpš“qäW•ŠX@{ŠÂJ 7ŰâÚžl‘;m‹ĹłÜ}K ݐ‘Ż–f—%hí몪UW"7ŢWaĽňU¸f—%źcQç)ˇ‰rĹ-—çŞKÜşëŽpĂ×ćú÷ó3Í}ű¸fż¤ŻŻˇútĺjmţˆ~0`…ˇŽsŻĎŸ_˛žj?€ 䐀Í@›pVmćŮ´Ľ5[âX‚Já&šŤĚ^ËUźŒŁbm5lł­âf'‚Ănš@V€Ľąp5XnŮą;ř•[Â!áŞÍ„ŽD´ÜąQ&v-~Š|MŒÇśŇi_Fâ[ů™mńJĺ9xŔ`7ČŻ—2p°ëďĹs?= O?ďV´¸eŤVşĽ~[áëÚżo?7ŕJ7Č éRy†Ęđ€ ä@Ź “"Za&ŚcÁl3Ś éŘ_qă´qXYw­:™ąU8iÇńf[ E~śťĺWö%B-Ą5-1+‹]UÂfĄ×ŇČ?Í(˝Ö9›0Öž‰r•ŁźLŘĘ­¸ WŢĹĚŘáë¸UËšÍýÝ_çAÍýüć_BěŰ?ôŢҕË\łß–öYáaŹtŤ–6šą#Ö)™gą˛đ‡ @ N č@ßϲM'Ć~Š °¤`VšX(Űž÷ŽÝT$ ˝hTa•˜8žÜńŚôń~šŰ„´A++ őe }ëY_ÁˆĹł čP¨Żž˝ř§¸JSJěęĹA}łY_ď0mśňSZä˛WiJĺšŢ¨Í݋3r~ń†Ńţ‹ ^HnäĹteéú4ůuÚmăb•˙áĹů3–şÍĆěX2ϐ€ @ L Şe&˜MKCĘ$mĘ­Ą­˙ă4ćŽĂŰšĽy˝ś+Ż"Ý.çŽ;ÉĘŰ~S~ćŰć/ŰÄsěîc3˝qfą[?˜˘_Ôgëú÷ďf˘Ľ÷MókfXyH+Ž„´>cg‚:ÎËÜ ×÷Ł%śMD[~Š#ˇňß „_TźRu8b7mÁ“nú”nÓ͇¸~}ü‹„~knŇ t‹wŻvýűř…ńcä­WgşAýš‰#ˇu˗đ3ćÖ/Ř€ ôŚ e› •Űf˘BšQaą-‹/ˇLÇo ­á-Z•1ťuŻý…Ĺ›BăýŘ’ź_V@kÖwȐ!AđjXżD h›Ö,ą„śÂőC)Ľn.”F/*žDšŇ(~,˘ľ/-Ą­¸ń§óÔؤYś¸Ĺm?á÷ßżq3‡úĽëpŤúřĺmOüşU+[ÜŒŠ Ýź™‹ÝNëžĎ-[źœč$Hö!@č ¤M0Çś°í›žšeL ˇîľţO j S‹_,ŽĹmg×" ŰeíXĹ#ŻŕLkœĹ5[ ddk“p—ş>N˜ő•€Ő˛ }‹YłŔš•Ö:g ^ [ ]‰aœŃěłf‹奸Úú<ňHWž2JoâYůHdkvťTžĘcŘ ąnëq‡¸—ŚţŮ-_źŇ~o˜2Ř×ɋńEK–úúĎwÓg/rیŸ[ŤiŹ›żb~É<‹Ő@€ ĐŕLJؚhӏƒČ-Ű4¤ěX›š ś¸>IçL­Ú*gĽÇűrŰ~l›żŮ`î¤mae×@K`kvYZK/.\–UÄbWBZk¤%rWĆfŚĂNâ_œ§Äąž­_‘[Ćf°ľlCîJó”ˆ6lŒŰkâ wŻż6ŋňyŇĎnĺŠţn­~›şwn´ł[8oQü*ŤT=ށ @9$PЂžmślCzQĆlĹą°Řż” VÚX\'÷•OYSV@{ńi•LË,ďËm›ŇZ˜ů™Jú•ý!e,ÁŤŸß^ślYŇúÖł}5CłÉň—xľuĎjRš™í8O-áHËS럫ÉSbXőĐěőúáőKCö(üüˇf¨%ţ§ż9#Ěx+Ž­łV1€ @ ˆ5Ą bĚf[ŮÇlĄ2˙¤;m_~ÁHűz‹l *Řet!fŤCIŤ|Ň?ޡ8•Řą .;˘Ů` QÓýÖ~ŮIż8m1wWç)A/q<}úô°<$.×f›­ŽśÇÁ @€zéAʲM—Ғ¢đRâWá2É8ĺŇľŚjű_­€n—¸ČNÜ0EąŠ&ÝńžĽ1ń\Ř7ŹČ•‹ovœ&Í//ćśtfÇńŇüâđ4ˇĽ‘˜.f,Nąpü!@€@Ž tЄž­&˘ŐěX_Úž‰b…ĹqnarwÚtĽ€NkˆůŶܕlÜmˇÝÖéF’ @€@CV,5óŹĆÄzŇ'żX<ÇÂŮÂ,nÍśÖx”LŹu QsÇś'#żx‹ďä.śŮo+ÜÜfoq‡÷Ç@€ ôŁG>Ę7őyżé%A=˛í¤[űÉMW›üÍmś÷*řË-łőŽ\ÁÝÔţWÎ@[Î&˘ľonłÍĎlóOÚ&śĺ @č]¤Ľe$‚“ZŃönzŃül_"8v+n—ŤX-™Y%ËĽľŠ+žš-mÚž…)~gę§ô@€ Ć#`ĐtalŤ5iűÖJ…•3–ž\źÔpŤ\j`ÂÓ*cv"8ěZX˛RśŰJďs§•ƒ @€@~ ӅążZď›Ű¨Äűr3fvąx˙jt!QŠŁXĹü- —m›ŐIś…[|l@€ üLjBӊj}9X,ź˜UD­bU%*Ů*dśEÓžů™ŰlĹIşcżŽŹŸňĹ@€ dŸ€M¤ĆRľNęFۏă™ŰZiűf›Ív=Ş*W4éśpó÷cw͍#! @€@Cˆľ`ěVcâ}šÍ$ÝńžĹéťVm2ťŇĘ(~ZóOł+͛x€ @ů Ś Í/ŮÂbţÉxńžŇȘݺWá˙zĆÎŞ‘Ö0󳊛­4É0Ë€ @ ˙Ň´ iĹ´01˙˜ŽĽ‰ý:í.9ř•b…•ŤX2Üöc;éÖžmĹĘĹ€ @ ŸLĆśZjűćŽmše§”)îĘiŕ’şTÉ)aqƒ,8YAŰ7[ńĚ-ŰśŘ_n  @€@ď"P‰FŒăÄtĚßübi~5Ű]) ËUÂbśâ›;٨ؿ\ž„C€ ä‹@šŒő˘…ŤŐć6ťî$ę) ­fǍ‘ŸmążÜćov2œ}@€ |0hv˛ľć/;iĚĎědx§÷ŤЕV$/šW\ai[7 @€@ď#ŚËéʘRЏľÄ i:óޏBą;ŽLěV‹gvžtÇń“aUď/_žÜýíos/źđ‚›?ž‡W Ö˜;wŽ1bÄ\]Fŕžű7pM}ü˝mK[–ÉĄŠ+˜*9´Ź^íöŰ÷ľ.ë'2ZC€óÁ]ĺ‚iW‘lŸ\Űó芽––ˇÖZkšÍ7ßÜí˝÷ŢŽ˙ţ]‘­ň¨TÚU˛šřńÄÜUŐť3şŞ‚ŠDŽmQ €…™ÍśÄóĎ~ö3ˇöÚkť}ěcnôčŃŽoßžň+ˆę$JŤ ţ­Ě<‡—_yŮmźńĆkDžŃ„U+‰NpxzňLˇÁ„qFť‹ź6mşŰfŁ1ŒŮNŒÍv]ĺĂů LĤŤJý_~™sl`ՅL•\ŰF`\%–cŁýŐ~rbÖŹYî/ů‹ťţúëÝńÇ_m5Vńć6;ŽRˇš+ĐŐT˛š¸qC•.™6šÇŻŘ}˙ý÷Ń|ä‘Gş>šŮ“ŃˆsˇéÄŕq˙V`m4›ŽŽ3­r#—{žăkŻń€U ţ­ˆ*ă Ž…řmŽVŤëű°]öu#Y˟óőH׍%˜v=S]łŕÚ9Žş érdFŇIşjĚŘ1Žr7Ý|ł“ć:蠃,Jglí'ýâđRîjŇ)nÜĚÔ|+ĐŠ‰ËxƕÝJ–Ü/“UíÁş3úĎţă>ń‰O„L´/f›Ëâ Qů—B`ĺęUnU˔`ź:A`ΒUnáŇVąŃř Áżp5ÄuŐ*Ńč ’v Ŕů ’N{Ŕ´ÓS3€k*–š=ăiš÷Ýgwíľ×ş8`̈́eÍšWœ0ž<*Qź/w|Ѝ8Órë) Uv܈d]V*<żŚ}]0ľ\cäȑáâi3Đęč’šrî݉ZVű;ůśŮč<‘0•śÄ§ťÚšxy‹[˛˘k÷•+W†“™˙ŽjËĘ+\ßćć†8–ÄľÇl˝úŽŤĆ€ňéŽóÁ”)SÜřńă݀:T_“#ښýx̃é.Ś•˛Záő~ýúU=łń˛ĆľŤ@őÔyÂΊ˛ľéÝ(]Kťúz“ÂĘtdą ŚÂ‹…ĽdWWwŸiŇłP͓áÉýęZçc/Y˛¤FŤŹ gëřÖb=ăśŇšÚżţőŻÝŒ3<ýVţňße—]ÜŚ›nęnšĺwŘᇅÁbń­ 8žůÉŽĆ˙駟v<úHH>dđ7qâDˇëŽť†şW“OľĺV?\ŹZJPŻř˙ÄÇÝđaĂÝĺ—_ŢÖ˘VŤ;™/]Ůâ–W1QúÇ_Ýî–,^ŘŽžń΁ď?ڝwňnÇÝöv'œőĽ8¨ŕ~đžßšŃăƝ͡޹ŕW‰ă[Œt—]÷+ˇËžűuˆţňóOťgžjà qëŹ?Ńm˝Cëîš<Äuu•cV瀙3fśŤÎŰlťMÝĆ`rŹ˝ď}ďs˙ó?˙ăžřĽ/†zÔkě'ËľFWâ_Ëů ŰM6ÝÄÝzË­îđĂ/ź¨üđ#ťOžţÉ Ž‡ęţüç?‡ęĹuťúęŤÝUW]ĺ{챊ε:Ç>účŁ!ŸÁƒť 'nčvŰuˇÂőAqţ!bŰżîđŻ…iąsěŇĽK;0­Ś şNš4)\“śÚrŤE*Ł… şŰď¸=Äë×Ü/ź´çž{:ő]5ĺ*ƒŽŽß•\UżŹ‡źďˇ÷˙ěížôĽöçřŽćç;¤ƒ âYmaڗöę‚ޤ´}ŮڒľąđuʇGW č´Ę'ý’űÖ.ó—mn ŤŮÖ]Đ Aƒ‚p6Á,ŰDtkĆÖëś×ş˙ď|Ç-^ź8=ŤŔ„ ‚řSŘ^{íĖ P‹cv1]Ä˙űß˙ş 6Ř źšš_"ó’K.q‡z¨{îšçÜż˙ýowÄG8]$ĚËż;üu wňĆokíŇępĚŃDŽ ;ě0÷Ě3ϸÇ<ĽH‹ß#ţžë5>Ôž4Óő\ć…ŢŠUíĎ ÚK;(ä˙ÜÓOşóć„ę>űďÇݜ™ÓÝď:¸˙<,ôŇ*˙Ô`šĎ7-Ÿ{ďšŐmšý.nŁ-vh×ěRĺZ>Ę×ęÇč?šޏČí}ŕĄnĘKĎš—žűˇŰďŕ#ÝżsMĄŒ8~ÁÓ;ęá/ŽŐŽŮKżsię9`ë­ˇŽË˜]°`Ó,ë6ŰlSČ_ă1lžłLwŒÁPPâ_Šrk9cŤ›k;ż6,Ôâ†ëok*żő­o…ýyóć8ÉCu3Nńą[ŞÎ•œcCamů›;śKĺÇ3w5ńkaZěťhá˘LKŐięÔŠaQ×(ąmu¸ŠÎzĄěŹ3Ďrď}ď{ݲeËÂMžęéŚE"ZŚ]ż+šve˝Şá‘ěŐĂí–kW(+ńĎƇô–ÜŇ\ö47ľÖ]]ně’cv2/ůˇ Ԕܗgš_ˆ\ËżŽĐľÔĄîi:Ó)豂uxšÂľŽç›ßüf‡hZW-Si>qš Řc=Â,ŠfłŠ™1cƸ˙řÇ!ř§?ýŠ;˙üóÝE]^ˆ,–ŚťüŐîjÚŽ7Ÿ˙đ‡?„›=‚5SM–Ś;재×ň6AjďľÚyĂę”ô?ńÜVQ!˙+/ů‚{ćɇÝgžńăB˙Č_iĽżVůű‚´|žpéuÁ_B8™Z|őů+ϕAÜéÜ´Ćľ/sřČ1îł^üuëŐîǝçNýüEÁż\ť,˙jëS,ž¸ZžĄBţK;ԒO%ĹiVöë_˙z¸ÁNĆŻW™ÉrjŮWÝjŠ_[•Ÿ<żţóŸ˙t§œrJĄŒ4NVžŮ•´Łˇœcľ„1É´ŸsÎ9'|eé / ьŠls—JoqÎ;ď<ˇăŽ;şˇß~ŰmľŐVî _Â*•śŢa•śÁę‘ĹkW˛ŹŽ˛}ěWOwPŹşžhR­Í–ćę Śí“ůnŞ:SŸ˛“€Ö#ŽRŰ*ŽMql0ČűϜ9Óí´ÓNá›ŇňŸŐś˙§?ýÉ˝űÝďvúڇü|đA÷| Ě4ëäńć›o˙řYe}ROůHPÇůŤ<ŒćŻOĆi ÚK/˝žcýÉO~ŇížŰna9‰.,zdfő|sÚ4wĚ1Ǹ 7Ü0Ěđę$¸ďžű†2ç­ˇŢrůČGB˝$ŕďżďžLŹ\ŏ7ó_!ž>L[.wšżÖ%Šçďď˝75ţۉ:ÝçëdůLŸ>ÝŠ˝[lą…[wÝuC›ŹÜ‡z(źŹ°Ţzë–?žâŠŔIő°~zŘ_|ŐŢI“&šO<1đłzţőÂ͌XŠ?ć̙ŢŇśüăśY}b?˧+ă/ńku—ŽXí×AŻv‹ý×8űőKVh[]Ö_XÂ5_úVa×ýč"÷‘ýˇtŸţđţî_OԘŐ[űiń˙™{Wřą§öi,č8Őą­ąke~âăw×\sM!Ż“O>Ůýč‡?tgúÓáXÔwę˙÷˙7ŸJŤ‹¤ŇÚyčâ‹/v[űóȁţŚţá‡.äcůwĺLkoŠüŤ=XťŇŘÚůTßěW<˝Ů/ŁÉqš×ŸC’œT73eô€}ü‹LbĽóAąśŘ9ÖÂ7I9Çî–rŽU|}ŽK“ vŢ8őÔSĂD‹ÂT—Rç3+ĎlĹOc[-ÓRçŘ$Šł< IDATÓ3Ď<Ó}܏Gݚ1~םŢĺžzę)÷íoŰýőŻu7Ţxc୛ŐUfŚ_ĘQě\ˇÁfWűkŽüľ.vÔ¨QaEżĂPęúu_ś–żęŚĺ :çéŸĘŠľą4[q-žůɖ_WrU~ĹúZmüÁ~ĐŽnŸůĚgÂSdŐĽT;tnĐů䒶c^7švĚë;O(ôFœŚbœŠůÇ<Šú{ľ>,ŕíĺ˖ťŢ" {Ő ´„j5‹Úu‚ćĹč?ţńpňĐ ĐŔ”XŐ ][űu> ÚöuR×÷vŰmü/¸ŕ÷ţ÷ż?|ƒú7ŢßETüţčGaYˆ.ˆŠ+aŹ-6Ú×ň÷ĺüĐ_hǍD ÖIřž{=űďżżÓIîC Y|â„•_ýęWa‰ˆfŽ_yŋŸNF"rýő×wšŐšűîťÝůŸ˙ź“řŻĆ(/ËŻ’t:yžqĆî,/ţö÷ż‡  ü̜¨ÓçŁ:é *Żżţş/}¤ýŐW_ eë†Dë$uńŇ[ż<ňˆÓ ŞżÁčCúPĄŸN=í4wÖYg9]4>üáť_üâNËH´Žď(ďÓžN't’{ňÉ'ƒ[ËtŞi›ľĄŤě×f-s}-w-~Bˇ)ÜŢűYŸy“ý/á?s‘Äl‹ű×Ôĺíâ/\śÚýćökÝÖ˙ó~wĚWnvůŮ%î˙ŽřŽűđׇjż:ĺu×4l}÷ďi­ĺžúÚëýÉíuÄ'ÝI—Ýë^˜Űß=yçuîOˇ\ăŽ8÷Gnƒ­wsţöşöĺ™+]“O'×sÚ|2ő"ú?>lÉâîç×\\ŰÍşiđKĆŻĽ˝Őđ×řˆPá2˙t˜šrĐŘ;,eěéĺ6=tŽĐšB3eŚźöšŰÄĎÄY4ŚuÜiüęX• Đ8ŐąţóŸ˙<œ/Wu¸îşëÂń}ý 7¸K/˝Ô]vŮeAŒ—Š~ˇW{>PŊąľóŠŞýjŤÎmýčG[ý`C’“Ę×9Sçk m‹Ĺ˙Ë_ţrč'[6ąsŹĘPY—WxŽUš 8͟W>őŠOšgŸ}6¸%@­oKĎâ:”rWË´Ô96ÉT7gšěšÄ‹eąÔySˆ4QىÝĚéć೟ýlXrĄq,s†?‡ŚK“íĐľVfŠ_žĄ˛oöŸ6Óͤ–=ŠQąë—Ř]„­xč¸Ó •ŽÝŔœ}öŮî*żŹQvĽŚ+šŞĚb}­›˝ď˙űáFEKFgϞínşéŚpƒ§ëqŠvčÜ Aűä1ŸÖ?bŸ'nčóDđ^łŹZľ˛×čÜĎ@ëŃ‘Ý ŠƒmŤô`Ó §–phťňĘ+K&ÓI[w}ş2šĐLŞÖ+I°ÚŻóŘ/ř >źär p$ˇÝv[7yňäpÁÔĹX/źčŕS9z4'QŻ™ĹS5+­W=˘üŕ?ÂôOë+˙îŹDˇf˘őxM3=*ŤŢF˘XKQtbĐ7"ížRu˛0͖¨Îb¸Ůf›…ŞJdčĤ“§˜*ĎýöŰĎéä›/~ń‹—Ö­ę"ńŻý+ëćAëňtWÍj”ZRçYOˇ~…p•—żŤ˝˘\ŐśľşËűű!L2žä÷ÄíörŸvąłÁVn“w茞đT!…ë•P+Wű[îyˆŰëČOť‘6q-}úşGwƒŰx§ýܤ÷s}űvťöÉŔ_EŚŐSţ fżíŽţěűÜĹGoćfN{Ĺóż7„´ińkio5ů„_wlĹSŐ˙´s@ĽcŻ\A|pm´QŰzÓúą' E3 ßřĆ7Â/}I¨ŮśđFľÓŘ&ۢc[b#.:ă¤0˝'˘™c˝?"!÷üóĎ'ł,ě×rŽŐ2Ű%Bu.ŢyçŰ7윕ĽslĄÁmŽącdžĺx_ýęWĂx҄Ě!Cc]7Ĺ;ţâIąsi[ś,ĺšýöۇë§nfŢůÎw–ź~•cŤpŐ]B_}÷Žwź#Ěäv(¸‹=jšvéĺ_=ŐD•̝wŢévß}÷pŁ\I;ŠóĽú§Xš.ĆŃ!;éŞđ¸Qś?iěH{ĺÝäzZ¨YluÖŚ‹“×ţĎ˙ó&ě—čeÍTęŔÍb[žśŻ—_Ě­řú’ƒîŕu×­Y&š5°,ŽĽó6ˇęĽ ¨f´lAXK§Ç$š…ŇŹłDô‹/žDśÂ5Ť*Ł“–ŏmÝáËhmľůë “~ź69D*ńOi-}‰h‚$tk6řŘc ëňJŐIˆd$n“ĺiV_˘ŘnLOíÖěI\?}5ĹŇ*ŽŘj˙5?#¨ôşšQ˜…›_wۃú÷qűˇÖIŁTB4iŠů77ű1ŢǟŔŹi“Ňöń~ko°iÁ`ŰŹč Oů+źšďšrľ?bě:…řĘcî[SÜNű¨Ÿüű7÷u–öÍôS~C†š˙ź1n=7zݍ ýPŹţőôWVÇJě´s@šą§1$Ă´ąĽ_Gë$wÚř“`°x6!`ű•´ĄŢqT—Zę“ĆÖň‰óL˛SX’“ö5 +Ń'cÂ/Î'ć řľœc%Ü4iŸwâú•:ŸőÔ96ŠÎĂůZV¤'xffâöČĎŇ;—Z:ł•^F@šż–ŠëW%lő´@OzÍčümő3żRvąńP*ÂŞ˝vé&N3ȡß~{К…—Wů#ĺÚQę˜OöŐ˝T‹ÓY;ˆĺśL‚ŰwuĐSžĎű´MRę%íĽ >ăňjÚ_esÖJÍüJ`ꀕŃŔľ§};ȓníËXÜä7í`•­°ä~kjÝqÇaFؖMœŕ—WX~ĘßܖĆlĺŠŮwůŮŚ¤‘řŐÝŹÖPéć@BÔňŇc# ^Í*k)‚Œɨ,{ŤZ' }ýşčZ•WKz]എKÂ]ŸœŇ́LZ´\CF3ě;ěĐţ şaŃM„XŠ>2jˇ.RĹúEńŹß4“ýűß˙žCtŚmĄü7Đ ŇÁúŽÉĹtkKú7÷őcʡqpŸ>Šďő°“ 5˙^hËoĘńů‡pďgĺ&ăŤĐńˇp fžŢš‡<|z@ô“€nÍGŢVn?Ÿß€AƒÝö{źÍżuÇ˙Ż˘]!M'ă‹kąă­P§„Cc!m<”{q9rë¤/GŘŘS1ńX´b.Śqúd<íËÄq,}OŮiŒĘŐEiŇ҉LĚJűqÜ4Nň‹ăŸd>ĘKFţľœcu3Ż'VžňŇťz˘¨2łxŽŐRA™˜…ŽO<ńD¸ĆüČ/+<đŔ ŸÇ8ŽÜÉôÉ8!BŰ?c/ŠIŘ”ş~•cŤ'šĘۖ8ĹůVęŽÇHĽi,^5×.ĽŃľů¸ăŽ KuüK„ŤţĺڑdŤ}㚠WXŇ/™FqşÂÄZůiß˙ÉÜZJ" ˘cK,Ďşő¨PŰsh4€ô$=ž×ŔÓI ŢlŔÉOîä&$I?ŰO†%÷O‹ţuáԝžÖ“i`É_ƒKâVŸôąü’śň“Iúk_3ëZ/Š|´nWË6ôb†Â4hő˜L{ő˜HBUł jżÂ'MšÖëĺ͢ÉOŸę[´hQjY Oۊ1K‹+?͒ëq­f”ľŻYbŐIwĚĽę¤0Íŕk ¨>ĺ§´Z?ڃVhŐnLeô¨VKf4Ťeőżše›‘[Ëm´ŚN7#zÔŤ‚űýň™8MěVü¸ßôrŞŃéSMOáša°ýjmÍęßĎ ě×/؃xˇß—_9˙ć0ĆýKÄWIКżf}+ ů‡p/°-˙d|ůoż×Áî™ďuł^Ţ-_8ÇÝůÝÖu‡aZĺ%ęŮŹ1§2ţÖŽŻ>ă–Ě}ťĐŽ%sŢv3&?Sˆß앟ţĚ?]_˙rJh{‘|ŠĺßÁßs­ś/Š…rcOOtŢŃ ˘n`ľĚȎ7Ťƒň–ą}ٓüx×Ň*=I2˙ÖXíă%ÓY\Ů6&e›żĆ¤ĆŽíË­Ż2Ř~gíjĎ*ŻT’aÉýŽŕ*ŕ˙Ľľ˝Ô9ö]~RCçL=EÓÚu˝?Ą§YY>Ç&yk|靭%ÖˇłőĄžţb,Ä79>’}PŠ_˛<ËWvgŘęSŽZďŤzËV~šľŽó/çŽvŹÖzíR=ôýv=Ń{6z˙FßE–šv¤ąůëŸ8ŽĘ‰÷ťęÚ%~É­ŻżvÄ\ĽM¤˝ŹĄ"9ü—k­GxşˆÉVGĆŽ“]ŠMqmđĹń,…ÉmaÉ}ů뢚ĺ–[†GXZ‹|üńLJřzä¤Jß4ŐŰ▇lËßʡ0óמfąuÔ Ş>šŽ;\=&’T¸ÖľéŁÖKŔŸ~úéín"~ň“Ÿ„}=ZӏłhÓ6nOZšć';Ž×-ÇâIäën|óÍ7ëŔŽżţú°ŒDZi´ž\}×IߊV˜ęŤ“fHÔf|t3˘Żr(Lëň4ËĄ ›ž;ŞˇŸ­Ü¸_ä§q MůŞl]ü´Z&5Ł5ÔžÖŽ{îš',ĹąüuáїVd[|-ŐQ˛‹űĘ1Űťö~w`Ľč´zjĆ[eŤ˙M—œážü˝…v=ů—ťÜűőčmí]:†űÎişĽ f¤ć_=Ÿ~U÷‰—d_é¸Ö˜MŽ=%őŻ–hj_ëődHëňRœŘmů+ŽĆš­e”OéäkOŚu—“˛-LcŇÎňÓř´—­>×ňŠÖßŇ+]%i‹ąU>Ö>Ë'f ?ÍlܔFqdŹiůÄaińŽüőⲝcľŽW/néŤI ­ÉžőÖ[_˝Śe :Żi‰‚ĺ_ę|Śü­]ßʍý“îxßŇÉĎü˝cŠl‰g}MCçL=f×$‹ŢŃ=ĺ­kŠ—Ţ‘ŃLľü,˝ŐŐúĎębţVŸd|ó/uý2śbŻŻ€$Ůjv_ţú!3-żSýt=ˆ9Ťů[=’őľđ¤9ŽĽúZy}ôŃaŹh YĺڏwĽIŽŐ´ţ‰Ó¨ÉţéĘk—ľĂX&˖€6íNN˙5%§ăăvz(­g$“ŢćŰr'7ŮľÉßÜą­ŁPűfk ‰öeËĎ6óßŇ “5żâ#Tctç¨Y˝m­ßx­”5Íějň­&ŽÖ9ÉÄ/YzÝAk“8ŹĹč)a.#§ĄtŇč“8šÓÉ?6złZ3)öŇcVέ‚‘HŻĆHôj­ľŹbkKŐIIŐ>=*Ć°f|őrIź.1ŽSĘmł÷i}T*]˝ÂŽ}l™ŰpýľĂAdŤâ˛tpő¤˙œošaŁĆ.Ş=]Ÿ˜ÜĹę3ĺőˇÝ'véřĐÉôŐě—{[ďŐţ"—Žg 2]ˆÁÔr>čŠv՛S%çX=}Ň͸žţ!a›Rçł8^šťŚ•œcÓĘ*ć'\§_,nľţeŤ™l-a´ľŐ•–_/Žľöu­íP{ëŮ?•đ4ýhś&ě´Š^Ň[ŇšœŞŐř%3'ű´ĎúMß¨Ô QZk›öÍ_śüc[îxÓeÓöĺNŰźwáň.łžmÁV@ŇH¨ćŢhy‚ŒîšěÎĚ]o­;ębFżśZMźś(ÁšÖ…E_ďxŔçřˇżým˜1Qűc#!šŁqx)ˇŽd~Ľâ+Lń7Ůd“’ŃJŐÉnŇ2°u‡iaĺütă‘%3Ä ŽĄkŢçi­ša)äé˙ĄCüáô@šĄé(W\űú5â]mJ˝ZÇV|č.žřb'Alţăƍ n-ë8ďźóÜß˙ţ÷Rb鏳ΠîX@_qĹnɒ%îÜsĎ aÇ{ŹÓĹbˇÝvsŸţô§ÝöŰoď~ůË_†Y—Ď}îsnȐ!ĄĚŃŁGťn¸!,ůŮĎ~—/_î~ń‹_¸˝÷Ţ;\`tWסoß0Ă)Á׳­9š˛ŹĽo´œĆę}ş{â‰'ÂI=فZÂ1pŕŔ‚¸0`@xÁPé‹mqGkŤÍmv2žöűőëW(+Ncq-­ěźk[ŁôDŒÄóžűî‹Čë ĚhťíXƉţëچ&$¨1€˛NÝÖCš–Ů}÷݃pţÉO~⎟ňJ'Ź^}íBa‡vXxÜ([łŒZ ­7Ǖ^/‰\š5“ňĘ+ݎf­ő%­[NĆł}Ů2JoyÄn…Ĺůk_&§Ő7_˙MŁô–m¨ŻN?ýô|u­É<F;VôdÎDż–łé3 Ö†ĚĂŚ‚€@Ż&€€në~‰[3×_}řŒ^hŮ|óÍÝŤţóu˛ď¸ăwôŃG‡Ď.éłdZçüž÷˝ĎmˇÝv!Š \ĺĽG÷z$Š7Ę:č đi;‰]…Ĺńä'cĺk_áڏÝ!’˙gy̞=;, °Żƒ<ôĐCN/Žżţú57śąQƒĄo´†}ʔ)nă7} Otií:ő&ĐhNJ^ŹÖť ƒ ď”čĺí¸ őćEţ€j%Ф€bĆ 9[fË/šI j“żšc[*UűfKŔk_śül3˙-g͚uľ÷ŻÉč;Îú”JNČz|˜4z đ­ˇŢrm´QŽq¸ÄłNúZÎQ̈­^:thą(ř—!đŘcĽ.ĽĄoʀ#¸×hÔcEçX+×Yg^×g4F@ç}淜ѓűiÓŚUˇX^ţIž^ˆxÖoŤýśŇoúްmÚ7ŮňmšăMb×öĺNŰźwá'ó‚8öçŚ`+ i˜n#’öŘPŸ ӖfƎ›ćÝÁŻXúń(J€ž)І´#ЈNJ^œĆ@h4čśÓËz˜l o˛Ů/Ô*{8V˛×'ÔČ't[żÚZä|vscˇŠžiěţŁöÝG€cĽűXS Đť  Űú˙čÝ#!Ă­§o2Ü9T-S8V2ŐTČ1t[çîłĎ>9îfš@€:O@/bZż€@€ @ Bú„€ @¨şBPDƒ @€€äZ@—řţuˇöţŠ+şľźzśrĺJˇzľžAž/“‡žQäĽů]ůjM^ĆX^ڑŻŃEkňH +Ź^lsýášRŹßŇĽKĂĎb§ĽŇOw—űĹŹßüć7!ÎN;íäf̘áƍçžyćˇŐV[ĽeYÖď…^p÷ßżŰb‹-Ü;ßůΒńý/7ş;ďźÓý÷ż˙ ??~đÁťI“&•LSIŕčô˘ĺWżúŐJ˘WG?Gţ׿ţŐ˝ýöŰîÔSO­(MÖúښ6č&äüŁť÷Ţ{Ă/dîśŰnnß}÷­¨ÝĽ"uĹ‹ó_śl™{ä‘GÜßţö7ˇ|ůrwÔQGš­ˇŢ:Ž‚ťpŹt줎>Vć͛ç~ţ󟻧Ÿ~ڍ9Ň˝ë]ďrťďž{‡_ŽíX| ľj°F!“k]k'h†âŸ˙ügťäO=ő”{â‰'Üă?^V@ßxăNâHşłć裏âűľ×^s^xaI=sćLˇá†:Ľ‘Řţĺ/éôËd§œrJgŤŃ.˝î*uÁ˜8q˘[k­ľÚ…UşsűíˇťOúÓnȐ!nÝu×­X@gŠoŞmĂa‡ćÔG¤˙ţ÷ż~ľ+t’ů‚ ÜäɓÝvŰm— Şh_‚ŕŇK/uúЇÂSÝ8}ăßp§Ÿ~zE鉔 +ĺűĄłÇʔ)SÜď~÷;ˇß~ű…‰€C9Ä]qĹîŘc-_81 †&€€Né>‰ÂŸţô§…9sć¸mˇÝÖ}ôŁ­HßrË-…´u\wÝunĐ AÍ^sÍ5Ą~˙÷˙Š=ďźó:[|jzÍPJœé&C7 ľ˜C=4´Ż}íkî/ůKĹYdŠoŞiĂK/˝.´oźńFٰŠa‰xĎ=÷¸/}éKN7]ľ݀Ĺ`Ŕ€î‡?ü!ş˜=˜†cĽ<üÎ+:ęFڌŽ7ÜpCťăǰ!|ČőčŽęŞO}ęSá‘Üĺ—_^ČRKvŘa7bħY=4óą},ۏmÍŢj&yƒ 6pkŻ˝śűĘWžwpKGž*Ő:P>Ąm IDATŠĚ‹}@ ŰĐeúGł ˇŢzŤÓŹŽÄ˛ĚÔŠSÖk=𫯾–Iüä'?)äôúëŻÁQđˆW_}ľťţú냀ѺćýčGîů矏bÔî”Űx㍃°×cÄXđHäj-őżřE÷™Ď|&,ďĐr‚o~ó›Ą@ĹŐúj­Ńý׿ţÖéj-wššíśŰ‚÷•W^éţţ÷ż‡ö׳]iu_#őÍzë­ç>˙ůĎť“N:É}âŸč0>4fžóďŹ>P_č†fŐŞUĄůýúős§vZčCť/|á nɒ%ĐčIÉ\nÎÔ7]tQˆóá8ˆg×łÎ:+,Ÿé8ĹC7Qę[ĽĎűzś”ćçƋcĽ~ÇĘţóŸ0rŔ¸˝÷Ţ۝ţůš74(N]œM˜ĹÓşĎ3Î8Ăéähćg?űY(š}ŐLß^{í„§…—˛%:ő˘‰^ΒŃ#Ŕ?üἒTŚŮE˝řĽň´žř˝ď}ŻÓK…ą‘`—ř׺VľÍfDľYłÎšýԌăöŰo^$‹Óš[ĺČ襙ącÇw=Ű Hü÷FęU_Oîžűîps˘§˙řÇ?ÚľJK„4-üío;ô^ć“ŮyçÝťßýn§™lŸ… †EŰeŕw´ć}ذa቉úFn=‘řӟţž”čćO3dzÉô­ˇŢJ&oˇŻ5´Çw\XëŽ5јĆ$ŔąRßceѢEáXՄ„Ţ•éŞ ‘ĆmÔ˝‡@sďijő-Ő  DČ%—\Ň.ąÖ–ęíë“O>šŕŻÂJŒ^:ы+šľ0Łĺ]eTÍdyä‘aÓ „wÝuW!{­g5ŁŻ‚hMŽ.°úRˆf6ď¸ăްF÷ŮgŸu;E-kם]É 4bߨ řŔÂě˛„Š–ÂLŸ>Ý :44/îÝĨO}ôQˇÇ{„'ŸűÜç¸Ń˛2ń†ŕQäŸúFF˘Ü–gčKZ—­Ś4#ńŹ%Ş›ž˜ôíŰ7-~ @€cĽžÇŠŽ%m2ůČGÜ 'œ^8o€ĄA!N@@§U=JđÁĂK|q4­_– ĐËoýű÷ƒĘşő• }CĹëi4ËxöŮg;˝¤WĚčÓzÜjßýîwĂË/úş†^>Ňěu9 ¸îj—ęÔč}Ł™{-ą3-łxĎ{ŢÓľfł$Žő…ÝiZkÜ5ăe˘ťCÂ6¸o4^etƒtĐAľĹ(mi9–lči âš4Ť,‡rŹÔ˙X‰ű_Çé?řA§Iç@ żX‘ҷ/żü˛;÷Üsݙgžé6Űlł0ŰŹgmZ“Şő zéN3Ó˛e4‹[‰ŃŒ°žŇĄĽ9úq ĽŽ0Z bľćY/:&ż=mëší{ŃzPIő—ĐŇ-ĐěäÜšsSŤĽ™Ňő×_ßé%3ől—•!ťQűF3ú<đ@áOţüç?‡ĺ_f´¤CĚ5ĆôEÍB›ŕŐr -ŇŇ=%)Ö?›l˛‰›6mZřŹ–âi]ź^˝ř⋝ÍFK„ëIHšŃwÄľÎ]kśőňĄĘ.ˇÜ#-üz–ÇJýƒv Đ׉ôGĎ=;ö)ÝABY3ËßűŢ÷‹ƒzyĐ6ÍęŠo,_{íľa-´f%P*1šúJ‚Öł*=BW9ŌŽNÚyT:šőCiF˘G‚Yřőă)Ćzü 9 —ťě˛ËB°^PÓšh}łÖOëe7] nşéŚ8ypkfRâJ/$Úˇ†Ťm×Í7ßÚ"Q§Y~ľKu(g˛Ô7Ő´A/pjV_˘X˘Y/ŠďFmTh˛nLô(XýŁ~Qęi€ŒžÖ˘§ úr‹žEŽY.=*֚ć¤Ń’•%Ám/4éŰäú˘‹Ä´śěř(ÎCŒusˇçž{†ĺ<ú*‹śxV;Ž;›8VęŹčݝťôÄO×˝tÖ.›#ƒZA]A ŠÔEŃ ĽŚśBŇlů%7 rmň7wlk!ĽöÍÖí˖Ÿm濼Ÿ)­y­Ă‹/ž~ń­’GĐ&LđĹWo43'‘Ł—đŞ1šeÔ,ĄĘ­¤~•ć­/3höX")ţ^ü \mš}´ăźĎüľŒ@‚ÚÖÍĆńäVYš}‘(4SŻvYţŐŘYë=mĐœ <¸Ăˇ őC ząSBYO$X×~­­ońŐň ˇÖ§Ĺ˜¨˙7ţܞ^>ÔÍĄ„8F€cĽöcEǔ^ÔՍŻ^ÚĹ@ ď¤]ĘÓú$k­Ćk‹“}ÚgýśÚo+ýŚĎRŮŚ}ó—-˙ؖ;ŢôVۗ;móŢÁż`űkmŃďˇJ¨b:A ŘKX岔hÖ2ˆŽ6ÍúŠC)#A‹Ş8މgů3&ęŕVYąHW„zľŤCáxd­ot#˘™ßRF˘šŘÍ\ĚZń´v˝”Ië? ęrë§KĺIX> pŹt<×UzŹ(ž=‰Ëçč U€@t•úi†üË_ţrav9‡Mlč&éĽ=Í`a Ň8VJó!ččîáÜăĽhŮ@Š/rôx{yôă*@ <Ž•ňŒˆԟşńç=Wڔ@€˜Ŕ]głÖ_ݧř0€ @€@…Đ‚" @€D ׺Ä×Gč}@€ :ȝ˾€N~GˇNc¤lś}s@Ymđ_N˝ÉCߨSňŇŽÜ °5(/c,/íČŃТ)9% V/źźD˜Bśs“{ĎNé‹ä˙ńěB7kž×]ÜěšĹgĽ{~ę27bH_÷ťŻlꎽô÷ęôĺĹĽ„ôëŰäśÚ` ŰaŇ`×ěÝů÷|7ůíŇy ÜÇ˝kŰanŇÚýݔËÝCĎ-roÎY‘’{u^?8y}÷Ä+KÜO˙8łş„%bÔÇí°Ń`7jhłťçáôŸ O&ĎJߨ^ŽëúfĂąýÝ#/,rž´Č­Ňgڋ]¸ßąéˇÇćC܌ů+Ý3Ż-uOžŇúSđE’Täݙ1–V@-ă.-üz–ÇJGţ]}Ź ŘÇíťÍZnăńÜü%ŤÜă/-vOżśÄ˙ĐQDzńňE sŁ]ß!ŤŰl0¨Ývřî#ÝŽ\ǍVţžă=; ÂŞł5ŰwŰĄîě÷ŻíEY‹ëăg|چîđÝGÍvřŕžî_ÜÄmíE÷Œy+ÝŢ[ uťnVÝ/$Í<  ĆŕľŸýˇ[ËÝüٍܙďçÚ1ýf%QdŘÍJßH ˙čÔ Ü&ë pSg-w§žgŹÓMF)sÉń빓ăޚťŇßŕ pGîYź/KĺS.Lý˘ţŠŐT;îj-‡tő%ŔąRžog•ń#úš=ü„Éë3—ű§@Mîť'ŹçŘ~­ňhxĺŐ`Ă7ąú,^śÚ]xç[…„ků™Ň?3ÉÝűÄź0Ť\(âřňÍĺć˛HŇvŢú×÷ǧü–ŻlqGí5ŇÝýĎôŮÚCwîëˇÔ}ëŽÖşßřŔěBÚŽthfK{Řř ”ž{ĎۅŘ;Lä>óľÝ:#űšżşÄ}ăö7ÝÜE­K;ž|ô:^X.qw>˜.t×č0“ÜĎ ŃťšëŽ)˛,"ůpţâUn¸_RĚH`kYÁ„QýÜ´Ůí—mč&ŕš3&ş‹ďzË}|˙ŃnëőşgßXęžéëýśŸЯɝëŰł•Ÿy×c·ý’„K|\ĺ™46Óú­ŽÂ?üÝWÂ҅JŰĽüŇňM–SÉ~Oőę÷ĎüĹŤý~‹g§CŞă2›ežŁÖďąĹP÷ëGçuhšĆŒúC}wĐĂÜ"wůݧ;ÝhČčŠÂqűŽv[Ź7ĐIýüĄ9Šăkł ܇ŒszqŰç6rzaЎęÓó?8Ţí´ń`7{áJ÷ťßvOźœž|$n—Ę.7î“}+íű¨+Ž•ö9şp|>ňbúq•ŒË> ĐŘjßŘ편öZjpŕkšoyĄšpië׹~Ç÷N\?ßĂ/z9,ąˆ—VŹ=˘Ů Ýô{“ě6½×ĎP|ę'ŻšOúíČ=Gş üÚrFłž‡î:ÂýáÉůEŁţîńy~9Á wĂŮÝ÷hż<@UÎéuˇüuśűÜuoQő‰ýDŽüô~ŕS“ťłŽzÍwŮdˇťŸ-ÝӋ˝4sÁM­3.ا^1%ˆçZە–Ľ~YéŐ÷H˙d@kÍ˙3%ýâŠ%57Ü7Ű}ńČń7n§ĆĚG÷ĺofV¸łŽ~Ý=ĺ×Fé¨uÂŇĹ[éďÍôäáCß~%ŒťÓçř1‘4šťöO3ƒHVß\ńť!Ę×><ÁÍó7`ݎ˙}Ž;çĐqɤŠű•ŒťÔ„xfŠÇJýŽ-—ŇŇ,M,ükňwă}ł2Ő÷T¨t ŽŁ×ęë>çgíîxpŽAl0Ň †šĹÓKzŁ˝˜Ö ôŽţĺ°JĚa^@?ć_6kn?/˝šÔíV&­ÖŰ~ĺ˜uÜ[^ iV˛˜™żdu´z!ďœC×v—¸žÓK…ąšôîˇÜ?Ÿ_ä_^[âg1ç†e _ş˘Ĺýöńůž]Ť‚ĐziÚ˛đcœÖܚ‘”ŃK36ë^Kť,żZěŹôęţnż†űĐw wg^őzşĹÚó“{g¸óݟęoN†şΙčśŰpPť¨÷ú›Ł[˙6ÇI˙đˇÓĂӆ­ü“-ÍŃSÍÜkühíćDżŽ:i´´Dł×šEVßhśZłÚŸ>ˇĐŢžŽh ö¨ĄĹŸf(ßJÇ]˛ěg‹ÇJ}•ý›ÂąŞ§<›ú'@•Lˆdk„P@ éÓ¤ľä”Ă4šœë…ňżiĹł&Ž÷Ë6† ěë_*o^nŐŞŽK ‘CK>†č%/˙ň™™ľ"×üeKÄ\ôąuݒe-îëˇMuţ}’Fꇾžńë‹/:n]÷…#Öq_řŮÔBšxéÄ䷗šqţ%]`çxáŹY”wůw}Adâ¸îůi•ŻoŽś]… ŐčČBߨęZwţąýFťÓýӄ䲙´ŚiIĆS“_ń7DÜ˙;e}÷ŢŻ˝č–,oíÔ¸o´$D7i[Ž?ČżŐżÔi̝yČŘđr }UĽŇĎ *­ĚGýŐmë3ôĽ€őĆô÷e,IŤfŐă.5<3A€cĽňOpÖrŹčk:Údžzě:îKZÇ}ü˙˝öůä—şHßjFUŸ;ĺGSœÖŻĆF3ÁŤ˝’=ăĘ×JÎ8ĆiĚ-ńŁŮD­EŽÄHh9_ü×nVV<Çůéĺž[ýŁz˝¤WĚhrĽţĎ~ç¨đňËGüň ÍZ^ćß&/gbWmťĘĺ]*<+}łßśkš“ƈ‰ÚRőś°ţIÁwü“€{üSśŸ8ŘýÓĎ,'Ö0ëó~Zú!Ł›Ąçüéc.ěúőę÷}kód’vűńëˇý˜“šć3\Ľë3kwí*ÁNŕXŠ˙ąwň}~âââă‡;˝s˘ăä—@űçűůmgU-[×?ň>ëýăÜ˙˜ă^óŸ'ҡ>móK‰Ýžšďöď^ęŇËw2šĹ­ÄüÂ/ŻĐgŰś÷/!ĘH„Ž,ňb š>‰tƒ_S§Çƒzä^ęąűŽ›.<>ÔĚőŽžŒäˇ§÷Ú˛u]sř^´ŸmţÓżćaŽĽ(ZťlĹj§eëîďÖňłěiF3ĽŠťŮ„ÖĺŠSMťŇňŹÔ/+}#~z)ď׏Π̬o´f8ÍčĺÎ7fvž‹˙ňˆn^4žĚl7qęǚƘfśçů%úş‡Ě(?žŚĚXćżîüS‚ÖĎţ­ĺ㦙7|žúÜâČś%Sý Ľz™P3ĺăýZk‰đbŸ!ŹvÜĽŐżž'ŔąR˙cEÇŤ]ôýt}C,ˆçž˙Ôő&Ŕ t á7ěy|ʟ•Ő›OţdJX?üškßp_Ďgűfoŕ—K|ݿȧozĎö?ÄŁőă_żmZťe+üÉ5glƞĆĹ7M O”‡~Ŕć,˙Íěă?§8ßÝ˙ŸáQńÉ?œâV$–iÉǃţtn÷_á¸Űˇ+~;Ă}ő–iáĽÄ;?żqxŮq°ß_ňu}Ężô”4ՎťdzöłA€cĽţNJžR~íŘ îżÜMËŘ´ěMÇČ?ŚRżUîśM§ĽŮňKnšÓ&sÇśŚ4ľośźöeËĎ6óßrÖŹYW{˙šĚ‹/žč&L˜ŕúöUśĽÍß/ţu‹R)5ó¨%z ŻŁYFÍÎôżHWn]s5ůęË ZŰŞYČxé‰f°íľVWłö`œżâ™ż–Hč%?kfńUÖ˙Ö뚩Wť,˙jěŹőŽŚ ţ"ťÔĎň'ÍňG§ŽůĽGÉśŠw´Řši=š˜ÓöéÄd\íŤ˙–řťxmő ß_zz˘e;Ž•ÚSFő7Śş` ww]ţÇĎV­ZĺŚM›ć6ÝtӚqŒ=údŸřYżéŔŇzF]¸lÓžů˖lËoiś/wÚ潃Áöš¨¸cZ˜:aôՊZŒDóôśő­ľ¤/–F˘Y_q(e$¨–ëťh)ĆÄł‚ôŮłRFeĹ"]qëŐŽRő(–ľžŃa¨ĺĺŒnŞŇL’u)ńŹôiý'ń˝dyé~M+ż|ŕXéxLTzŹ(^šsnžG­ƒ@ď$€€î%ýŽ™H-ˆr/izC4SŸŹćEĆh•„@pŹÔ*YBU@@ˇ!ű͗KŐ j˛MpřſʑŃ*S-@€2B`éüöďVe¤ZÝ^ tňQCľl@€ PŒŔ´Ú^+–]Ăúë>  @€ P!\ č/OVˆ‡h€ @Őȝ˾€^óžjťř€ @ľČťËľ€ŽľÓI@€ bĐĹČŕ@€ č(xA€ @ t12řC€ @ …: ^€ @(F]Œ ţ€ @H!€€N‚ @€Š@@#ƒ? @€R  S ŕ@€ bĐĹČŕ@€ č(xA€ @ t12řC€ @ …: ^€ @(F]Œ ţ€ @H!€€N‚ @€Šh.ĐŰüg/lémMŚ˝€ @5Čő tK ˘¸†1A@€ Đ)y×`šĐMMMę|C€ TO ď,׺úî& @€J@@—ćC( @€Ú@@ˇĂÁ @€J@@—ćC( @€Ú@@ˇĂÁ @€J@@—ćC( @€Ú@@ˇĂÁ @€J@@—ćC( @€Ú@@ˇĂÁ @€J@@—ćC( @€Ú@@ˇĂÁ @€J@@—ćC( @€Ú@@ˇĂÁ @€J@@—ćC( @€Ú@@ˇĂÁ @€J@@—ćC( @€Úhnˇ—ł–––Š[4jhSĹq‰@€z#ió+ku5ʞł+×3ĐMMˆâl 7j@€@o w –kÝ(m„ @č^čîĺMi€ @ NÝŕHő!@€ş—ş{yS @€@ƒ@@7xR}@€ î%€€î^ޔ@€ ĐŕРށT€ @ {  ť—7ĽA€ 48tƒw Շ @č^čîĺMi€ @ NÝŕHő!@€ş—ş{yS @€@ƒ@@7xR}@€ î%€€î^ޔ@€ ĐŕРށT€ @ {  ť—7ĽA€ 48\ 薖–ďŞ@€@Ţ5XsăuIĺ5njjŞ8ň셈íŠa€ ” P+‘Mfƒr=YęT € @ a  śë¨8 @€@O@@÷uʄ @hXč†í:*@€ ĐĐ=A2!@€–şaťŽŠC€ ôtOP§L@€ †%€€nŘŽŁâ€ @=AÝÔ)€ @ a  śë¨8 @€@O@@÷uʄ @hXč†í:*@€ ĐĐ=A2!@€–şaťŽŠC€ ôtOP§L@€ †%€€nŘŽŁâ€ @=A ׺ĽĽĽ'˜R& @čŐňŽÁr- ›ššzőŕĽń€ @ 'ä]ƒ5÷Ô,–9j(b;‹ýB @ȁiółS—žŹIŽg {,eC€ ä“:ŸýJŤ @€ęD]'°d @€ Oč|ö+­‚ @¨tŔ’- @€@>  óŮŻ´ € @ NĐuKś€ @ů$€€ÎgżŇ*@€ :@@× ,ŮB€ ä“:ŸýJŤ @€ęD]'°d @€ Oč|ö+­‚ @¨tŔ’- @€@>  óŮŻ´ € @ NĐuKś€ @ů$kÝŇҒĎ^ŁU€ @ ĂňŽÁr- ›šš2<´¨ @Č'źk°\ č|IZ@€ Гš{˛đ,•={!Ë=˛ÔÔ€ d•3ĐYíę@€ IčLv •‚ @Č*tV{†zA€ d’:“ÝBĽ @€˛JŐžĄ^€ @™$€€ÎdˇP)@€ Ź@@gľg¨ @€@&  3Ů-T € @ ŤĐYíę@€ IčLv •‚ @Č*tV{†zA€ d’:“ÝBĽ @€˛JŐžĄ^€ @™$€€ÎdˇP)@€ ŹČľ€niiÉ*wę@€rK ď,×şŠŠ)ˇ“†A€ ŹČťËľ€Îę ˘^€ @Kݸ}GÍ!@€z€@s”™É"G ešG&;†JA€ ÓćgŚ*=Zf {?…C€ 4tŁőő… @čQčĹOဠ@FÝh=F}!@€z”şGńS8 @€@Ł@@7ZQ_@€ %€€îQü@€ ĐhЍÖcÔ€ @ G  {?…C]˙˜´ IDAT€ 4tŁőő… @čQčĹOဠ@FÝh=F}!@€z”şGńS8 @€@ŁČľ€niii´ţ ž€ @ á ä]ƒĺZ@7555ü¤€ @ Ńä]ƒĺZ@7Ú`Łž€ @Ů'€€Î~QC@€  @@g¨3¨  @€@ö 4gżŠÝSĂŮ yá°{HS  @hlĚ@7v˙Q{@€ n&€€îfŕ@€ ĐŘЍÝÔ€ @ ›  ť8ĹA€ 46tc÷ľ‡ @čfčnNq€ @MÝŘýGí!@€ş™ş›S @€@c@@7v˙Q{@€ n&€€îfŕ@€ ĐŘЍÝÔ€ @ ›  ť8ĹA€ 46\ 薖–Ćîj@€@Ţ5XŽtSSS9Ş @€›@Ţ5XŽtc=j@€ Eč,ö u‚ @Č,tfť†ŠA€ d‘:‹˝B @€2K 9ł5ë抍Ę ‡ÝŒœâ @h0Óć7X…ëT]f ë–l!@€ňIĎ~ĽU€ @u"€€ŽX˛… @Č't>ű•VA€ ԉşN`É€ @ ŸĐůěWZ@€ P'č:%[@€ |@@çł_i @€@  ë–l!@€ňIĎ~ĽU€ @u"€€ŽX˛… @Č'\ 薖–|ö­‚ @&w –kÝÔԔáĄEŐ @€@> ä]ƒĺZ@çsHŇ*@€ ž$€€îIú” @€ ĐpĐ ×eT€ @ '  {’>eC€ 4tĂu† @čIÍ=Yx–Ęž˝OŢeŠ?¨  @Č*f łÚ3Ô € @ “Йě*@€ UčŹö ő‚ @Č$t&ť…JA€ d•:Ť=C˝ @€2IÉnĄR€ @Y%€€ÎjĎP/@€ L@@g˛[¨ @€@V  łÚ3Ô € @ “Йě*@€ UšĐ--üeC€ 4tĂu† @čI螤OŮ€ @ GÝp]F…!@€z’ş'éS6 @€@Ă@@7\—Qa@€ ž$Đܓ…gŠěiÓŚeŠ:Ô€ @ Ł˜ÎhÇP-@€ l@@gł_¨ @€@F  3Ú1T € @ ›ĐŮěj@€ QčŒv Ղ @Č&t6ű…ZA€ d”ş‹:ćŠ+Žp/źđBŐšŐšŽš‚ŚOŸî.źđÂj’€ @ t ˜wźăîž{îI )îuë­ˇşÉ“'P$¤X: ŢO~ň“…TĎ>űŹ[wÝuÝŁ>ZđűęWżęŽźňJ§°‰'ü“ŽYłfšŤŽş*é]×ýÇ<ÔwőęŐu-‡Ě!@€@wČľ€niiénž]VŢ{ěá|đÁB~&œ{챂ßý÷ßďöŮgˇŮf›9 V3‡~¸ťűîťm€ t+FÖ`•€Ęľ€njjŞ„AĹq$X=öXˇíśŰşcŽ9ŚĂ’yóćšăŽ;Îmšĺ–î”SNq‹- y/_žÜ}á _pŰlłŰwß˙ßޙĆJZUkxw7ÝĚ4ÍDeAE(ÁQ…D¸—ÁA~0 q01Q`4QAf!&Ę ŕ€¨(Ęe”FčFp@Á0MÓĂýŢ]ýVŻłűŤ:UuŞÎTĎNžłöZ{íéŠóăíÝťžs@ş˙ţűGS§ŕĎ>űlZ°`AΕ€>蠃šBůŸ˙ügŇ|;ě°CzüńÇӇ?üáœwÁ¤{ď˝7wŢyiżýöKK–,iÎőŔ¤C=4íłĎ>éĆolĆcĺß˙ţw:ĺ”SŇŢ{ďĹůľ×^Űlžřâ‹Óů矟.šä’¤ő‰Áß˙ţ÷f{ťŠňŽ=öŘ´ÓN;Ľˇźĺ-éŇK/Í鯽öZs÷ÝwOo}ë[ӹ瞛^}őŐÜśpáÂźçNÖÝnnÚ @_ýÖ`ăťúŃg›Özôíw—ąćškŚÓO?=_ŁŘ`ƒ ҕW^9b€o~ó›é裏Î×*îťďžć)đu×]—žxâ‰ôŤ_ý*ˇKäŽVÖYg,Ô} }Ď=÷¤ăŽ;Ž) ożýö,5Žúc=–‡<餓ҶŰn›N;í´týő×§ŐVküľv éĎ}îsé3ŸůL^׿üĺ–K8äCŇ­ˇŢšÎ8ăŒó$čřĂ&ííűß˙~ZştişúęŤ[Žă]ă8ţřăÓK/˝”פľżűÝďÎÍßřĆ7’ţa˘ńŽ¸âŠ¤öŻ}íkšMűŇ˝ňN×íů°€ @`Đ]Đ}űŰߞŢöśˇĽ5ÖX#Űň$Yâú=ďyOÚ˙ýÓűŢ÷žtÇwäŃošĺ–|ňüüóϧ=÷Ü3ýţ÷żĎâs´ŠuăÎ;ďL˙ú׿’ľN…uBŹÓ\‰qÍSĺI4ݎŢziă7ŃüőŻ=Ÿ>K ?účŁI§żeQ­}Ýu×ÍýÉ'ŸLşCí˛ŐV[Ľ /ź0Ÿ$ďťďžéÁtSKŤœ‡z( r˜Ď›7/mžůć9_üˆ#ŽČ˙XĐÉýQG•Žšćšcu˛îp @€Ŕ 4Ž'8ÁtZ§Ąşž QŠgîÜš#śˇúęŤ7ýíśŰ.ÝvŰmŮ˙őŻż`č/&ę„XW0śŘb‹f~]EZ§ŔwÝuWÚc=ŇÚkŻŢôŚ7ĺp hĚvZ$ŞˇÜr˜>gΜlëî'éúÄE]”tmÂ;ćiŒ™3˙îň8Ł­AŹô_9ÚCYÔŚŤ-.;ďźsŇ[C¸‹ŃI… @ăK݂ˇž„'ŃçG˘őä“ONýčGóŕô&˝÷YĹEÂYŻ•ÓÝ`Ýń}׻ޕ›N=őÔ|ÇWń<0ß-–ď¤č:Ľőő h•vZ_dÔňtťŰrĚ1Ç$ÝŮ֛2t˙ZoňĐ[9ĆRt C_°ÔűŞuŞžŰnťĺőiĚłÎ:+ßŮÖýn=şşqÎ9çŒe:úB€ ˜ŃîżúŤSHżŽÎ*V>äzw=ÚY+âśşƒ­vYĹü8žcőśoWńžŠž('!;k–†íOŃIŠŢĆ!Q¨“YÝÖó /ä;Ę:ŠÖëëôEš˛čäůĺ—_Nn¸aŮÔw_BTkŐő‘n‹ö uę\uíłźďÝí˜Îח ëŽhˆŸ~Ý4'€ ŠK@ÚAßqÚ~űí{ŢDĽ•NŹ:ĎŻýE6˝“wixä;.ŤśhUţ0ˆ}Őëž*œăM[idĺŐžDX‹Ľu0 <˝ńÂEo˝P‘Xoőĺ: o=ăQt‡¸ńě=xŸÚOżÄłĆ.ß bćg @€&+ţR @€   ;E @€DÍď @€ş €€îŠ€ @@@ó;@€ .  ť€E* @€Đü@€ @  č.`‘ @€ 4ż€ @č‚Ŕ´ĐúÓĐmţ c˜H… @脀´—4Řt.ÓZ@Ż˝öÚéľ×^›ÎŸ{ƒ @“Š€´—4Řt.ŤMçÍ͛7/˝řâ‹ińâĹiöěٜFOç›˝A€ 0Ątę,ńźdɒ$ 6Ë´Đk­ľVš9sfZ´hQ~¸Î1•Ů @I@zÖŹYiîÜši5ÖH˖-›Čĺ tîi- őÁ͙3'?ĽČŕ€ @MÓY@@÷ $Ă@€  ôp|Îě€ @ OĐ}É0€ @ĂA=Ÿ3ť„ @čtŸ@2  @€Ŕp@@ÇçĚ.!@€úDÝ' @€ 0ĐĂń9łK@€ >@@÷ $Ă@€  ôp|Îě€ @ OĐ}É0€ @ĂA=Ÿ3ť„ @čtŸ@2  @€ŔpXmŞoóňË/Ÿę[`ý€ @`¨}ôŃSzżS^@Oő`J˙ö°x@€ 0„¸Â1„:[† @蝺wvô„ @Bč!üĐŮ2 @€@ďĐ˝łŁ' @€Ŕ@@á‡Î–!@€z'€€î=!@€†z?tś @€ Đ;tďěč @€ 0„ĐCřĄłe@€ Ţ  {gGO@€ !$€€Â-C€ ôNÝ;;zB€  !ô~čl€ @ wčŢŮŃ€ @`  ‡đCgË€ @˝@@÷Ύž€ @CH`ľ!Ü3[† @`‚,Y˛$ýéOJ÷ßZ¸pazńĹÓ˛eËňă%-_žř`úя~”Ö^{ítŔ¤ÝvŰ-×ç̙3Н˝öÚk饗^Ęó˙ň—żLĎ?˙|:üđĂł˜^)uúť„‰Üo?v2Ěâş7ÜpĂ+~ő,Ťž%Őł4<ň—U[´ŞÇG˙"łŻzÝS…sźiŤĎ°ń/9EŠ‚€.€ŕB€ Đ_K—.M7ŢxcşűîťÓi§–śŮf›ć‰ggj=šľNť˙ú×żŚ .¸ íľ×^éĐCMłféüŽe2졝Ofĺz'ť€Ÿ˙ż(ŠŕC€ 0$XoşéŚôĐCĽO~ň“iŁ6J˜ú?îÖç{}FS#._q¸(Q¸Ůf›ĽłÎ:+]tŃEić̙é˝ď}ośý˜uRěˇGfýXîxĄë@€ ĐwŤşëŹçř@Zguň]g č%K–f!­zťçŮgŸMóçĎO‹-Z%ď+_ůJž–Q×_Bś_ś´9ŻbZ׺뮗Ž:ę¨,ěľ>ŸśŽB?öŰ\sÁE˙šâŠ+VîŠhoŐŻ›řD0 ď‰ě‹€žHúĚ @˜Ć^~ůĺtŰmˇĽ}÷Ý7Ÿm>űěłłö‰ąlůhlă9Ü.éŠÓh}IN_ Üb‹-Ruß6ŸrŤ˝×˘ž˝î×ëÓiű-ˇÜ’éθăśZ›ëcľ|pşęŞŤšăiýăÍŹW֓Ąz2| Ź€ 0ÍźúęŤéĎţsĎkŹąFޝb˙ýďSŇŐëěV=E]R/I—\rI~ÍÜÉ'Ÿœ$t—TĆ8÷Üs“NŸx≗ˆTžÚ%8ő…Ŕ^xĄŤiZüęâüę<­E_\}őŐÓë_˙ú|’­XŻe,űŐőHĐtĐAéˆ#ŽH—]vYŽšMWĎů矟ż„Š/@ţáhćčí&{ěąG>˝>´úLJػďűß˙ţtÍ5×äťŢÇ{l:ďźóŇ˙řÇôéO:íşëŽů´;sgf˝˛ž ýřádřX @`šĐ˝ăYMď\–X•”¨“XÓé3ŇĚümB˝ýÖ_ôŤîM?p~Wó˘W)Řx9neśăöJËíëĎ[?ŸžJ¸>đ§Ó)§œ’.˝ěŇüeA‰tuĘsĚĐ uőłęDZcĺ“ŰjjӚ´ś7Ţ8 h­yÍ5×Ěstűc,űŐU´ţłĎ:;io‡ż˙đôÄ_ŸČkS›¸ýüç?Ďb˙˛\–.źđÂôŮĎ~6]uőUé‘GI'œpBúęWżšŻ˝|ők_MGudúĹ/~‘÷řř㏧ĎţóéÜϞ›öÚsŻ´ćZk&ę˙Ď˙ţOՋ_[œ˙Q3ŢĚ´ŻŠZ8žŞŸë† LbśúŇŕÜšsłˆÓŰ.$Xe›Ď ɐJűÚžÄň ǟÎ9眴ۮťĺ¸ć™5kf5–2BZýăW˘=ˇ7Ö"­ťĐz7őXO {ÝŻÖöđü‡ÓÓO=<đŔ´ç{ŚmśŮ&]Ýőy?^ű;ŢńŽüö]߲k:ý´ÓÓ]wݕOÔŻűáuiÇwLúЇň]ó3Ď83-\°0ýßÝ˙×ä¤`včaiÓM7MëU_ œ={všťŢÜ´é&›N3}:Sľp=U?9Ö @˜¤|ľBýOBÍ'Đβ­–Ż+7ß|ó*Ż–“XÖőÔŽąT.žřâü†˝ĺĂ1ŤyF–Ći´Ö§Ópˇkż:W›ă#űśöĆş_ŹëâőĹ/~1O¤++şv!።5麉÷řĆ7ž1 ţżýíoéÉ'ŸLo~ó››m›l˛IƊ;_Żîs=¸bĚş˜Űv0ĚFÎ1őÖ@˜f$Äô…>‰9 5‰2 3YJۡhł˙Á~0 Cýľ@ľë4U§łĚ믿~îŤ6ëôöˇżýmŇ{Ą=†účńÖ@˜F$âć̙“Żԝ@Ť]OŤ"Q'xâ‰'ćÓf‰˝ ¤}ěcůŻJčš(WďMžöÚkÓ!‡’śŰnťtä‘Gş9[ÍĺÓeŸ{ :ýŐ ´D´ÖÜn]# ŽúŒeż—_~y:účŁWđůČGҧ>őŠôĽ/}) ]‰bL˙ç?˙Éo0šúęŤs˝+űŸřDŇ!֕ ‰?Ý5–ř•źX)1ÚoJ'ŽO=őTÚvŰmóikűěŃ[- uZBóšçžË'ťzłN|uš—ŇŻýśš[_Eo }°,úÇJĽ›ňŸ*/Űę|ĺkÝúlř„uűˇIDATڕA1k7gľŚŤöůŐŁ—s/ŠžĽá‘️ڢU=>ş›c_őş§ çxÓVűny§‡ha˘@€ ĐWk­ľV˝7ÜpCśŹ>'ČŇ­´ĘFm”ß,ŃŻĹi­ĹE爛óÎ;óëÜ´ć^KżöŰj~˝)ÄĺuŻ{Ť#ŹŽ^č*H§EůźśoPĚ:]çdĚC@OĆO…5A€Ś8‰d˝ůá oxCşéŚ›ňľ ˝YBqßąˆ-J<űŃŠîO~ň“üĘ8­5 űn×6Y÷Űí>ęňÍKśŸĚęćš*1]Ÿ @€ žĐɲNMő×ńtĎX_l[´hQžşĄ“č‰*š[Ţů|ĺ•W淄hZŤOĂ{YŰdÝo/{)ű ŠY9ĎTň'î7x*Qb­€ tM@§˛şŤ{ŔdĄŞ?C}ď˝÷ćşN3[]Űčz˘:ř‚Äü}÷ݗžđ…/dAŻľőôŮÓOŚýzMcąăÁl,ë›Čž|‰p"é37 @`šÓ=c˝†îwżű]zŕňŮ}÷ݓţ˛ŢV[m•ýAbĐiłŢ+­WÝÝ}÷Ýůôy—]vI{ď˝w~ƒ‡ţ@IżĘdŘo?ö2žĚęÖ;ŮżDˆ€ŽűԈA€ ĐWză…ި!!;ţüü‡?ô ˝ B˘sE×+ôýᑭˇŢ:˙Ůk˝Oď“Ö}ěA”‰Üo?ö3Ěâş'ť€ĚoM$@€ Ą' ĄŞ×ĽéŽąDŹţŔŠ^ĄŚ?Ď­kƒŃ‚şZĄż`¨WÔémzz}çs§äDíˇÓőľË›(fíÖ4ŮÚГía=€ iJ@ÂL×%ôčôW÷Ł)žŃ‚PBZőń*ľß~ěo˘˜őcíă1z<(3 @#H é”vPW(FL6 œaŰď$@>Đ%đށâep@€ éF=Ý>Qö@€ 0Pčâep@€ éF=Ý>Qö@€ 0Pčâep@€ éF=Ý>Qö@€ 0Pčâep@€ éF=Ý>Qö@€ 0Pčâep@€ N üĺ/é4uBó&Ł€^^ŃC @Ď7ÝtSšŰIŠ űý§źë„o+}ƒŞÔ*×}°€ @SœŔc=–nžůćtÜqÇy'ĽŹÓ‰írÝf[ŽçxOvźO ăâ Âś§ Đ € @`ęˆây­ľÖm#֍śÎ—?neĐڛąőĆJßq, @€ŔX°`AóäY⹇;ĐĽŚ´o;’ƒĐ^°m§ W~ěSúŽC @€Ŕ$'đČ#¤Ÿţô§ůچĹs¸]ęŔŇďdw֕śôé(§ßw ;š4$yCśjR=ú!* @€ŔT' ń|ë­ˇŚă?>IŽŐYAÔ8jS‰9jS‘@v\1ůî§žą.ßOUmŠlŐ)€ @ŁˆşLŮÖaíŹôXl—_ĆâXe[ěŤz,ą-ĆUw[“ßV@WW?–÷ =™ca+[Wź`ˇËwq›­âŽ×Yľ ¤Ĺ˛ęž_ůňUÜî1”ŁXŤ˘<Żąáń€ @ ë'ˇ[wEkŹÇs<Ćb=ć;m]ťb*ĘsqűĽuŽíˆviŕÂi+ ‹Ü^]o ^ĺ…•ín`÷QÝâŘuYľE_q‹bĹU÷ۜcŤ6  @€@kQĂ)+úÖuŃJ‹ůQÜuYűÎw,ĆŤ´UćhS߁–~ h/TBTu ŇXqŠť(OÇ˛/ë˘ţ*1ֈđ€ @ Ž€ő“ŰŹÇl—&łŻş}ŰŘŚşâ*Žť]ą˛ó˘U=őwq=Žéśžlż´'×Â,FËz\´ę*Ž•V |ŞŹńÔcnŤÂšxÎWĚ}]vE×ýcŒ: @€ŔŞŹăÜRę¸Ňˇ–mU×Xnłî‹śSžJ´Îi´Źl‹yn“íE@kq˘íJĚ)ëňUdËşce\@5§lɕ›K\ë˛z”ŻńěŰVĄfQŒ@€ 0:ë4gFýćśVbŘqY?ęăOăťmť¸ŰdUÔo´ŇIΈ1şĐ< MOcźUžăŃŞ.`Cőř(nąŹvűĘQq_՝§ş×#ëq]meŽ|  @€@{Q‹)3úŞ—O)Žĺ;s+mĚQÝíŞŤ´˛Ö•íöÝÇý/}ÇWąÝčU:ˇ hQźÚWŐý”žăăţŠÉĹ‚Ů‚X9ŠŠ8ćşâŽÉúqť,€ @ ;Ň_*ÖoѡČUťë˛ąî~ŽŰ:.ëüS]%Ć‘FĚmŃş˝/śZ‹—(őf,V÷B˝IůŽť}AňXeÝăŘZ0+ςZmî/[ÖSžŠ|ۆÇO@€ V˘~sŽľ\;k1lŤ\ŐËÇc”yގł^Źň\ÜG~Œť˝+Ű]7ĄfńŞöčGąăŞë,÷U]% äF¤ńSyjÓ_ą‘UYĹ=OéÇ6çTé@€ .HwŠXĂĹş5œŰ,†žę~”ëö=ŽŹŠmĂ[鏖çü1Ů~ h-ÖbÔu[-Л‰uÇZYÁ‹EB¸ŒiNőw[ôŐ×kr]~S€ @ ;Ň`.QĎ)&Íćvם}Őý¨Ýu[÷éĆVĂä˘>*śe=7öňŁZ‹Š˘´\‡ŰmŐŽşR˙ŇZWMÍâ˜úŞDA캏çŠő2ß~´ŞS @€Z°łUŚęö]oeĽůÜŚ[Ž[4Ű*^ÖsY×m/íhíeţ*~ˇZJ”şÔůn“uť*+Â+śŤŸrTœ×đ?sžúۗ•c•ŰŒy.[ˇEŤ:€ @ 5ë0[eş.ëÇ#H×9ćz´Ę“ĺŰwßŇĆ1b›Ć‹žëŠť(KéÇśUęŁ hý-đU)zj’+}§{11WmΡ‹e bĹTW=ާvŤ˜űČw˝ŞŽ"žcLu—r}Žc!@€F°sT~ŒŮwLÖbˇŹ;×'ŃΓu=öQLE1ۆ×řé1cĚő2żô“´Ż“[ŮQtŤŽ5qMÖJˆz!Ú´ފbz‹žÇ1$‹hÇe“ŐŁže˝ ĺ˜çłď<ů@€ ą°†“u‘†ł/k?ćĆxlW˝ôcżŘćxŒy ĽUn_J/Z“GŃZˇrĘw‰ý'ŤŤX,[řƸÚĺ{ţ(˘-Œ=žçtžú:ÇmŠQ @€z' íĺGŁÔŐ‹V-úŞ+㮗q÷ŤŇ›B]uˇŮ6˘ŤţTťŠmĂëŕg/şV“JĆÉíŰĆ6őˇ_gHEmČÔň5^͎9^5çvYĹTdëęšqšÇu@€ U XżĹĹ/ëĘłžł vŽm—ď˜­s;ąšSy*1ß~nčőG?´E¨*?Ú¸F°0ŽÖíę§ąüxL iľ{Œ8§âŠüXěŰĆ6ę€ @Ť°^łuFôUˇ/kŹ\ŐUbÜůśÎˇm/ە§RÚFteÜ~Oś#Ý⋄ująQŒzńέkÓĆ-€•§ű˛ţ#)ŠÇÇs)ćzUmS\Ec¨ŘőËIü€ @舀už­:š.}§Rç+Öîq_‹ăVÖcç‰jĆt\śĚmÍz'_ TrGş9ęƊQ'\cĚ9î%_,h—u\Ö˘ÖcYL+O1ů˛1Ďžl9ołjnö+ëň)€ @ćr)ëužbńQ_űŇkî#kż]Ý}cŽĆtQ\Ľ´­b9š“˝ čvc{‘łÎľŕuťăśeqmŃ+_'Đęëśč{-ë§ŞŽ¨Ű—-‹ű—q|@€ ‘ZišWÝžëŃ׈ň-”ë|ˇšé;îq=†ăŃW˝oĽc]sC‹“đ´Ő˘b]ž‹â”(œÝÇâVm*Ňj‹íÍśĘSqßVś‘ľ2Ď>€ @ ž€5˜[íˇ˛ĘS[ů8.ks“ńŃęŻ,ęăâşmŽwz}CÉ hĎŘÂjŠJń‚s›cj­”úÚŞîÇ'Đö5–ÇvLVĽ´čƟn_Ą@€ Đ ëŻ2×ńhUˇŻ|űśu1ˇuc=Ž­úĆRúą­ăzWşćşn"-LÂÔ tÝśŽcęăŤGýâŁ\űíęjS‰šösÊ6׹€ @°ÖS˛}ˇ;&ŰŽîö˜ăÓčŘVÖ=měŻXËŇÍéłéJ@×ĚŞ…I ŞÔŐ˝pĺ¸ÝąÜ)üp{> @V­´œy¨=ć¸mťzŮ&ߏćp=ZÇmŐćúŠjíšÜ֕Q)îŽ:(yFUB§XĎÍ5mĘq^´ŽŰş]N][ť˜ÚTšm5—űŠ]Ľôё?;ÉŮ€  '‹ßvť/sěŰŞo]Ýą:[Ć<†ăöeUZō˝|0÷ěĎčCŐ-Üâ´ŹŤCŮ7ęÝŻ´jw,ÖË1<‡Ç+}÷u;€ @ ;Ľţ*}cuuÇlcÇlÝVúŠŤÄx#Ňǟc:Ö::¸Ę‘ÓŠ5[Ė6ćş-Ćb˝U{ĚQÝ%ć;†… @č:áZƢﺭVRWo‹me˙:żçŤLe_"Ô¸ÚHŹ­ü¸açǘĆjUœ§~ąŽ|ůOžŠsŢȟeîČV<@€ h§Šœcs[Օ۪-ƝcąîvY—˛Ýń1Ů1Ÿ@{ö1žD7‡Š*Ľ˜íÖ×Xe?Z[ĚŁ@€ ЁvBľŽ­Œuâw’W[ćůäكęÚă{ᴝřĘQ~ŮÇc–Öůeź•ď5´j'@€ Đ?Ľö*}ÍTsźlëÖďßNVŒÔˇhŻŹĹI´š-ˆZ+s˘ëíƈmus”íř€ @ý%PŠÜrôVí1ëę?š_—“çíőuušs͏AŸ@Ç)˝é(„+}÷QÜ}+sÝ/ć¸/€ @`âtŞĎb^Ź{ĺu1ľ•ńŇw˙ŘžŸ@{•mN˘•bńëôV1ˇ×ĺˇjk—ë>X@€ ń#P Üҏ+éś­e~żOž˝Č hM0ŠˆÎ)^Ha;Áä´›Ł˜€ @ OZŠÚbüNňZ崊ç)%ž5ř@´u ¤óZœ_c;ËîÚmžűa!@€úK ­Đ­™Ş]~ťś<Ô …ł×:.ş9YĽ¤]Ĺv’×IÎ(ÓĐ @€ 0FÄŐÚ:ÉéŰ+ę:a1ŽÚ ęđDÚé˛cËcé×@€ @ 3‰ŢCuŐwęrH|@€ )L`˘s‰nŇ črňŐuTˆA€ éG`˛‰ĺ:ÂSB@×-ź.†ĐŽŁB € L<Š Œ;Ľ4­t§›&€ @˝˜ŮkGúA€ @`  ‡ńSgĎ€ @=@@÷ŒŽŽ€ @ĂH=ŒŸ:{† @虺gtt„ @FčaüÔŮ3 @€@Ďţ`yë&›ÂIENDŽB`‚gwenhywfar-4.15.2beta/doc/dialog/images/cocoa-2.png0000644000175000017500000011750512364015347016761 00000000000000‰PNG  IHDRĐ0Ż\ xiCCPICC ProfilexՖgTɆŤ{r"Ě C†!g$ 9Ar•a† ă0dDEdqLˆˆ`X0(¸*Aրˆb`0ÇdPŽ‹(ˇŹçÜť˙îŸ[çtŐÓo}őuuW矐;9A ,@*?CčáĚ ˆdâ€H"‡›.pň÷÷˙Ř>ސxňŽ‘8×?†ý÷ i^l:Č™ŽáĽsS>‹đ W Ě>…pv†aTÂt!˛A„+Ä?ĎőbŽ™çós1Á.HL?x2‡#Œ€ôљYÜx$ia>/‘Ůa{n‡‡°xŠkÄ\…°nĚyâ`'f1'‡żČóD욘.HáäÎÝü/ťÔ”Lä{Í5*ғů)ËĹgCGŽ1ÇŐ{)sg6§ÇňC‚t~ĚrżŽş.° Ăůö^Đó\–/plşŰbž$Ž—řĚćň 3C8=+Čmó‚Ă˜뺨Ç%şłôÄ öⳒ×x/î\Ŕ\ŕ 8 d€X ̈ÍÉ@Ö—5‚\ab|BÓ ůăb ™l>×ؐifbj"žţżiâZ›ßě{Ć\ AŒ›k91Ř%#5ŕůˇ@ł.ňákڊАşiŰĘÍfÍçC‹ "Lň@h]`̀%°ŽŔ x? "Ŕ*ä '€T Ů lĹ ěťA58zpœmŕ<¸ ށ[ ÜO€Œ€×`|Óá Dƒä!UH 2€Ě dšA>P ECńʄňĄMP)TUCľPô+tş ݀ GĐ4˝ƒžÂ(˜ ÓaeX^ł`'؆WÂńpœÁŰŕ*¸>ˇÂ—á[đ=Xż†§PEB1Pj(# ĺ‚ňCE˘âPBÔzT ŞU‡jBu zPwP"Ôę ‹ŚĄ™h#´-Ú‚ć˘ÓĐëŃečjt=şݍžƒBO˘żc(%ŒĆĂƄcâ1٘bL%ć(Śss3‚ůˆĹbXŹÖM®Ŗa÷c›ąŘě0v ‡ĂÉă pv8?—+ĆíŝŔ] âFpŸń$ź*Ţ ďŽÄóń…řJüqüEü ~?M"hl~!—°p˜ĐA¸M!LĽ‰:D;b01‰¸‘XEl"^%>%ž'‘Hę$kR)‘T@Ş""]' ‘žŠd}˛ 9ŠœIŢF>Fî$?"ż§P(ÚGJ$%ƒ˛Ň@šByNů,A“0–`Kđ$6HÔH´J Jź‘$HjI:IŽ’Ě“Ź”<#y[rBŠ Ľ-ĺ"őZ/U#uNęÔ”4MÚTÚO:UşLú¸ô é1*ŽŞMuŁň¨EÔCÔ+ÔaŠŚAsĄqi›h‡iWi#t,]‡ÎŚ'ŃKé'é}ôIŞĚR™P™™™ 2"ŠĄÍ`3Rۧ÷_e•edceˇČ6ÉĘ~’S”s”‹•+‘k–ť'÷Už)ď&Ÿ,żSžMţ™ZA_!@![á€ÂU… Eş˘­"WąDń´âc%XI_)Pi­Ň!Ľ^Ľ)eeeň^ĺ+Ę* G•$• •‹*ăŞ4U{ŐDŐ ŐKŞŻ˜2L'f łŠŮ͜TSRóTËTŤUëS›V×QQ/ToVŚAÔ`iÄiThtiLjŞjújćk6j>Ö"hą´´öhőh}ŇÖŃÓŢŹÝŚ=Ś#§ĂÖÉÓiÔyŞKŃuĐMÓ­Ó˝Ť‡Őcé%ëí×ëׇő-ôôkôoŔ–‰ű  1†Ö†|Ă:ĂFd#'Ł,ŁFŁ!c†ąqĄq›ń›%šK"—ě\ҳ仉…IŠÉa“'ŚTS/ÓBÓÓwfúf\łłťćswó ćíćo—,]z`éC š…ŻĹf‹.‹o–V–BË&Ëq+MŤhŤ}VXt–?ŤŒuÝcíl˝ÁúźőK› ›Ó6ŮŮ&ۡ[Śł,vŮáeĂvęvťZ;‘=Ó>Úţ{‘ƒšÇĄÎᅣ†#Ďń¨ă¨“žS’Ó §7Î&ÎBççO.6.ë\:]QŽŽ%Ž}nTˇˇjˇçîęîńîî“k=:=1žŢž;=°•Ů\v{ŇËĘkWˇ7Ů;ČťÚű…žĐ§ĂöőňÝĺűtšÖrţň6?ŕÇöŰĺ÷Ě_Ç?Í˙ˇl€@MŔË@ÓŔüŔž ZĐę ăAƒƒˇ? Ń É é •  mýćV& _ž.üV„BDbD{$.24ňhäÔ ˇťWŒDYDGÝ_Šł2gĺU ŤRV]X-ššłúL4&:,úxô ǏSǙŠaÇ싙äşp÷p_óyźńXťŘňŘŃ8ť¸ň¸ąxťř]ńă  • ‰.‰Ő‰o“<“&}JöK>–<›–ŇœŠON=ǧň“ůÝkTÖ䏊˘4›´Ýi“BoáŃt(}ez{15˝™ş™?eeŮgŐd}ÎÍ>“#ĂĎéÍŐĎݒ;šçžwd-z-wmWžZţĆüĄuNëj×CëcÖwmĐŘP´a¤ŔŁ ~#qcňĆß M Ë ?l ŰÔQ¤\TP4ü“ÇOĹĹÂâ›m7üýsâĎ}[̡ěÝň˝„WrłÔ¤´˛tڌ[vsŤéÖŞ­łŰâśőmˇÜ~`vÇý;ëËĽËóʇwůîj­`V”T|Ř˝z÷ĘĽ•÷÷dîUůTľďŐÜťcďLuBő˝çšć}Jűśěű´Ÿˇđ€ăŚƒĘK~ý%ń—‡ľľ­uÚu•‡°‡˛˝<z¸çëHĂQ…ŁĽGżăŐÖw7X54W:ž˝nĚl?u˘˙¤ëÉö&ŁŚÚfFsé)p*óÔŤ_Ł˝Úűt×Ö™ŚłZg÷ľĐZJZĄÖÜÖÉś„6Q{DűŔ9Żs]ś-ż˙věźÚůš 2ś_$^,ş8{)ďŇT§ sârüĺáŽŐ]OŽ„_šŰĐÝwŐűęőkî׎ô8ő\şnwýü ›çn˛nśÝ˛źŐÚkŃŰňťĹď-}–}­ˇ­nˇ÷[÷w ,¸8č0xůŽëkwŮwoÝ[~oŕ~Čý‡˘ˆňŽ=JyôöqÖăé'O1OKžI=Ť|Žôźî˝?šE–˘ CŽC˝/‚^<ćżţ3ýϙ‘˘—”—•ŁŞŁ cfcçÇÝÇű_­x5ňZđzz˘ř_Ň˙Ú÷F÷ÍŮż˙ę Ÿy+|;űŽě˝üűc–~čšňŸzţ1őăô§’ĎňŸëż°žô| ű::=ƒ›ŠúŚ÷­ăť÷÷§łŠłłސ3çPHÇĹđî”Ä+ ž˜Ř9ď…ç" y˙ްŘÇĎyů˙äyż<o Ŕ‘NB đDĆdÔFFŞ#bKě`sóĹ QÄ-=ÎÜl ˛ą&Ÿggß+€ëŕ›pvvz˙ěěˇĂˆg@gÚźGű€Ľşš›YőĚöÍ-˙ąű7…čŞÍöě pHYs  šœ IDATxě€dEšśżŮ ›ť ,ËÂ.9-9#ˆ€ ˝Hň'_$ ˘"ÁЏ¨(WQ˛ˆ€( \‘ Ir” Kfs`óîĚüőÖĚל=ŰÝÓ§§gvŚű)8[éŤ:UO՜~OuÓu­­­†ƒ @€J#Ч43Ź @€ @@3 @€ :,L!@€ €€f@€ @ tX˜B€ @Í€ @€@ l{i]p˝ŽŃ4€ TđŞäŞ}Wr]o뢸 ţ˘č @HčmbťÇ h„rbV„ @5H § ë% ;)šŮŽQƒXt€ ^E ěm=IL/wQ4wF$wŚlݚ™4€ ,'e äĐޒË.o1˝\tŃ\Šč-Ĺf9Í!N @€ ‡@)bš[bş[t‰Âš˜ .–—gl,Ť}ž:Hƒ @ČN $œ¨ś˜}ąźXEw énĐ%çBBˇPz‚uÉ"š”ş’ő† @ČF CĄŰ^])v…l ĽÇŞťCHwš€î@<çľůŇ|č˛äłőúđ!@€şŽ@ZěŚăÉ3gÍ+hßŐ"şËt…„s!œLO†“ƒ —b“´' @€ P‚Â6Q]Ň&N˜ä}¨0Ÿmž´XOW é.ĐĹs>q›Nó¸űI¸.–'›Žň˝|@€ ňłíŐË÷<÷˝é¸ŇÓi鸗풇 +. ‹ˆç´€MÇŐŃdš‡ÝρHŮyz>;ĺJ÷rř€ @•%PHĐćK/––ĚK†˝ľé´t<ÚUz%ş˘şâ9)r=ěž*Oç*ÓQşçăC€ ”F Żh EKIOŰŠ'ӓaľ°ŁxěE%EtĹt‰â9-t“qťŻÎ–NŰĽăÉ:”WĚeą-Vy€ @ Ú¤…jąţ%m“a•)Oćĺ çKóvˋ6•ŃĐĎIńš/œ/M0<Ý}‡˜Ěë(-™O€ @ ¤xő’ĹҒyůÂůŇTŻŇ ĺyž|š¤][ŠƒËEĘ tZ@wR @€@6iAšŽŤ6OsßĎŕńŽüdN—I×évžžó;+˘;%  ˆç´8MĆÓát\SZÖô<啗Ź/iëáŽňÝ€ Ô:Ž…8¤óϗŚňÉô¤]Öô|u)Í]˛ž˜ÖÝŕľv‘ŸŚé°Ç‹ůĘk ÇŔp j/'˛˝ŹŇä<î~Ą´hœ°÷8> @€@i–ĽĄ˜§šŻš<ěž×ޏJ[ŽyᘎĹá🤎 ÉŃ)ĎÓ–S<_8fVňŸ˛W KX}öNŠ˝.ć'ó<ÜĘ?˙üó7˙Ô§>ľÇĘ+Żź[SSÓ8Uˆƒ @¨ .|sňäÉ÷÷ˇsĎ=÷ŠĐŤiᐠ–s!/ěiůüdZ:ŹxŮűĄ+) ]ôŞ=…Â}”ŮîÜF~:ěńa\pÁvűîťďס\źxąľ´´xy|@€ * ЧO Zϖ,YňřmˇÝöĂ ˘ݚŮŢ5Đžşěqe{šÂI‘˜L/.[@—ľ…ŁŔęł.çⷔ°‹g/ăŰÓożýö{„=*[Ο??VÎ?€ @ŐE@ ¤A<[}}ý–ŰnťígBďžÇěp¸ř•6L äyJOÚtVšœ“Ś-g/tY:w֏.€?NY:ä‚XŠnëiißm”Ţ4tčĐÝ´ňŒƒ @¨nŇÇß5ôňgápÍčÖBŤ dOS\vî+=mŁ4wnëń˛üJčdçň…•ćéIßÓÓž:"@Jďî V‡Ňň:ĺů]˜9slâĉ6kÖŹhŤźpcaA„۸qălĐ AÖĐĐ`úš@é…\şÎ7ß|ÓfϞ–ůŰJ¨ě!Clüřń™ęԝUŘăcÓgOąG_šŰޜô’-\2O_XßƜƊëŰÖëîj+ e}űöm-ÖÎBí'€ ôVA­Ú.-č‚9˝ňœîšš„űĘ÷°|9ĎO‡cfÖ2 č č +ϏĎî6ň“aYxZ)~‰ÎbŽššŮ´BýŢ{ŽDňȑ#mŔ€Q˜Î›7Ď$ʟxâ‰(xnj÷؄Ż Vëužűîťš:W1ÂôďZ_gócsíńǏuŽşęŞÖŠ6jĘ3o|Ä{ă>ŰkłĂl“5śłţá|Ú„ƒ @ľB ýy7_LUˇ]HCĚŽ=“iËJŰŃîBť ]2#ł€Nao ’=œô“aˇQZG‡CëÓQeóşE‹ŮűďżôŠ+Žh~ 6, č™3gڔ)S,<ŮmTÉ*ŤŹWxóVUç|ë]iĽ•bŁViŞS Ÿ9s–MuN uęÜZŃ=ztŃ:ľňüôkŰ_żĘV3ČVż˛mťÎîśýş{ŘüEsížnł'‡Ügź3Őn{ô*k ÷Z›Żłƒöj&é€ @ Z H şpîhÚ$łkĐtš eĺ{Ř˗ěgĐEVŸ˝‘ĹN,›RϲíP@ϝ;׌OŸŹVžľjŤEň Äś(,áŤ-ʓ­śt[ŮUÝĹ^gŸş>QXDŽ𰥥ΌžÖŻ_˙hŤ-Ĺęœ>kŠÝůÄďmŘčśŇř6pp˝ÍižloN{>lă˜oóëŚŮa}Ă[ŻZ]Nَ[iP˙ŘbLɃ @ŐHŔő úŚp]Œ‡¤Ü2ÂY7Ë*t&]Ź5íyj”\ԙmÁ\ŘÓňů#ç°ÜŻ×vŠbnÌQ kĽXű›ľŻížŻ- K@ËFNe\°ÚiÓŚŮ +Źí]/YŇl ć/Œe|[Iż~ýruŞLą:ů_ÖŘToă7 ŰKöľ ˝mVë;öÚěEa GŘÝ0Í k°†ţâĐiúTS™˝G\°d@€ *% ŻŕĽ%v%ž–/YŠ˜V9ŮĘyxáܖýßÎho”ű~vĹ=-íËĆó ů于Ł-ËťĎÚî g^NaĽť –ČŐ*´çŤAi§:ľňœ|ŕ0]§śm¨N٨ΊS§­sĘüˇlľőFŮȕ´Ţd őVß§Ĺ÷ ĺę[­hcSóř —…—ŘŘőęlĘÔˇŠÖ™n7q@€ P%¤]@ŤK.˘] §ťéâXĺÜĆ}ŮzžÂiĽer% č u˛bÎóÝw[Ë9…óIńŹp}1Ą+ ÍŇ겭ż]CMőćJä&Ů*ŻX˝Ę×겄wR”'ëTŘEšl;Şłšď|3f˜ <ĚĂJs}k[AęCť5ŚKZt„w †ŁoßĹśâłwfĎ.ÚNő@€ސ€Ż@ťpV}ĺŮľĽw[âX‚Jů.š3 ć ĺJŢĆQ˛€öśűŢp÷SŮ1šO +ĂËxž:ʰüd8Śu´…CÂU‡ ]‰h…“Nu¸ŘuűbőşOú*§¸œÄˇęsßíŠŐ9 ďëöKě7Ŕš‚xn +Đ}ű4†°† Ő6/ąáXÚÚTßhłű-ąţAHŤ36† @€@őHj´ˆVž‹é¤`v™¤‘ŇÉtŮ&Ë&ó: —+ Ó{ƒÓ~ŇNy~$Ą(ÍăɰŇ:|ˆP[($d]DKĚJ@'ĹŽáŤĐ˛ő2JĎçT^űœ]+î˘\çQ].l–­ňUw!7jčhk^8×ú54YßĐćţ á!Ö7ĹŃ[°dĄ5„cAŸĹĆk^Pgن.ZgĄs‘@€z9¨C\<Ëw˜L“]R€ĽłĘ$…˛ÇCrůŽ$DŁNVŠKÚ)œĎv!íĐ:Đzł†Ţőʎ`$Ĺł čxŇĐ|đOś*SLěęÁA˝łYoďpížęSYäňeŤ2Ĺę\u…uíŐŠ[ŘźDtx#HŇú1ݤ*­O]اÝ>/šĂ/Ξ˛ŔÖšYŃ:cAţ @ŐGŔľ zć‚ŮĹą4¤\ÚwĄÜ–Űöo˛Œ‡“ůK…ĽyƒśëĐŽ$˝TÍËFҍ÷xŇRižžô=]ž‹çd¸Żô&+K†őƒ)úĺA˝śŽŠŠ)ŽDKďťć×ʰꐖ„´^cç‚:Y—‡•Ż÷GKlťˆöúdٰęߏ>ú(ţş ěŠľuܰěýž˛Éo}dkŻ;Đű„ ĂŃP§čÖnąŚ>áGaÂůpâTëßÔßĆ Ÿ`‹ćó3ć>.ř€ Ô ׅň]Đ*ě+Ń!Í¨ź¤ŻtˇWX.™Ÿ´oË-ăßr´!ç~[lé•—<”›Œ'ĂI@JOĆ;ĐZő8p`źZÖ/&´Ż k•XB[ůúĄ”b7*Łe/QŽ2˛OŠhĹ%°%´e›|už:›v çľÚ&Ťěm˙™ňW›:(lĺŰךű„ííß:„#´ć%­6ĺ˝96kę<Ű|Ě>śpŢ"V Ó ‰C€ P ¤]0'} `ťž…ĺ\ ˇĹÚţM jĎSˇ/dăśKůĺčĽ*HDźá‰¤Ě×9ˇu_ ääëPz şÁ&ŽúJŔj[†ŢĹŹU`­JkŸłŻ„­„ŽÄ°ěä´úŹäBNuČVB[ݧSéŞSNĺ]<Ť‰l­nŤSu é?Ę6\qo{í˝ťmŃź%áő{Clŕ€ĐŚ ĆçÎ_Ú?Ű&OŸk­ź ŽełĎ.ZgĄö“@€z9ׄś.Úôă Ëw )?)‚==Ÿ vŰP¤sŽ\íół'ă {<é{şűŕá´ďyŔÖ겴ś^̙3'nŤHŠ] i푖ȕ­œŻLÇHęŸdÇzo´~|Ea9_ÁÖś …K­S"~Ȑ‘śĂ¸cěľIOŘ;ożDů,ég[˛¸É7Žm;­ą…Í™57 ~ŤX;•ƒ @UH §Cß|ۆô˘œű˛ńźdz1A­˛IqŽŤž]‡:ˆOodžĘŇyɸÂ~¨ŹçyšűI@é´HEKđęçˇ.\…´ŢőěoÍĐj˛Ň%^}ßłşÔŃĘv˛NmáČW§ö?gŠSbXíĐęőŘĄÂ֐ír?˙­j‰˙ÉL‰+޲ő}Öę#€ ԁ¤&tAě‚Ů}ˇ‘ď6î •§§ĂůâJ‹NÚ7čŔ¤ČöŹœßĄ€ÎYśԐ´óƧӓqˇ)ĹO ęW “'Ńj°„¨œë~ďżütZ˛lĄpĽë” —8ž÷°SIĆ.ä<ĎýBvšô,:W(O Đ Ľ{ž/ßo“|Ďw{|@€ ę' ˜Ö„ŽŐűŽ4bĄüB陈zĂ2*`ě rßÍ÷4ť/›t8™VÉöŠ^ @€@Ď'ŕ ŠI ŠV§uŁÇ“vö^zÜ}O/ŰďJŞF&š{ž§'ăÉpŮŁ  @€@Ż$Ô‚ɰ:“Œ+ě.NĆÝŚ"~šÚä~Š‘}ž2žžĎ/ľně @€ރ@>MčiéJOŰ%ă*#ç~[ŹÄťú5vތ|ó4o¸ű*“Îózđ!@€ŞŸ@>-čZ1_žˆxz’Ž—IŚu:\t:ő#*…NÖQĂŇůOúé°â~:/é€ @ŐIŔu`ŇWO=î᤯°œlŠšŽň­# \T@;sžźd‡<;Ý@ť/;Ë÷#™Ž0€ @ ś”˘“6I:žîiIéieű•Đ5Â;âžě=œîT2˝Łzɇ @¨.ů´`R/zžzía÷ťœDW hď„űÉÎ(͏dşÂžî~:Ÿ8 @€@upč~şˇž.?í<Íýt~§ăYtŠ IŰĽăɆ+/ߑ´! @€ P{ňiĎte’R1Űrěb™Îź…#Ů d8٘dX6nç~2?NÚ§ó2Ç-Zd˙ú׿ě•W^ąŮłgksxć:(đ1{î]Íęú„űŻÖö´4NŇŰŔ”ÁĄľľĹ>ľóŰĂ&T3gδaÆU¤.*Yšl—ćQ‰L+AqŮ:ŕş,“ÎŚ´śśÚŕÁƒmÝu׾wÜњšš:[Ľ—/UşÉbŸütö°Ÿˇ$ż3ş¤t`”ě´›:Ďóô˛}‰çkŻ˝ÖVZi%;âˆ#lĈV__żL}9QFé-!˝Yŕđü›SmľUV\†! 'đöű“mŁ5F~|sâU2ŰH”Éáő×_ˇ5×\ŽeňËÝ,ç™ŻżۈĽ‚l™Żí­‚LU#\;ÇUb9éoiiąiÓŚŮ?˙ůOťúęŤíČ#ě í3A§÷°űÉ&u[¸TĽ‘Yl“UštŮtZ5•ÓHÖî+ŇŠÉmeHz°vSç6ŰđE-mxâżhdš„Ş ŇŰ •ÎAlseÚCmó°3ZĂEžżcŹü<‚mŰĚŹ$[˜VžŠţţáÚ9Žú„×G˝;I'骑ŁFÚç?˙yűÝőכ4×îťďî&ńuş¤S<–Ě/ÎRNśÉnć­ˇTˇp‰ÉĆ&Ă*–ŽwPUůŮş3zîšçě裏Ž•(.W›;ÄMů'ó›m΂6Ą—ĘXŇŰŔeĺ śÍÍ.˘óŔ'Š,KZ×öż˙˛* PA°-ˆŚě ˜–ŽhA¸œ93š"­đΟü¤]y啶Űnť}ź`™šÖĚ’ŇC…“q…“Ù+/T +´Î™ěDş Ę+–Ÿś/+.!˘íǏ˘ÄW 5Đš-eŐ\ۅć-jľů‹ťdN.W°.\ómń鮆‰mň˘T‰ó.Y˛$^Ě|ţW˘NŐąxńbkhhčK­-•çZ)ŽĹę骹+vÎŹyÝĹö­ˇŢ˛•W^ŮúöíťLľ8˘Cóą\w1-••ţÖK5ďąv=kĽ@-Żë„VÉץçL4OôYZéϛ<Ź\G#Ę/”—§şlIÝ}ĽÉ'˜€ZžÎOÇłő.Xϟ??WFƒŤ Ź gřśÓĆígŤküĺ/ą)SŚúmü•žĺ–[ÚÚkŻmż˙ýďí€Ď'‹Űű‰’öž&?KúóĎ?o>öh,>pŔ@7nœm˝őÖąíYęÉzŢRí,iľEIőţřƒwŰżďżËFŽ8Ú6Řt+Űl›b{Ę?ß:íh4x¨}ő‚Ÿ/ˇ&‰mKx°Ôyuă7ڜšs Ú|ĐÁŚíKŸřÄ'ěœsÎÉ;˙öˇżŮJ+Żd›nşiÁzňľG7ڎÝv›}ęSŸĘńňůůÂó/Řc=Ó `Ť[=Îá>uKżüÇíóկ•J+WľK׀ŠSŚćúŚ€ŽMبbíę¨űěłOťłĎ9;śŁ#{olwqU{*Év­ľ×˛~ƒ}öłŸÍ=ôůďG˙m'xRǃ ˛ťďž;v3ŮÇË/żÜ~ýë_Űă?žwŽŤ@Ň^×ŘôüÜfëmrŸiűxÂö’őtUz9Lu˝çŸ÷Ř]wÝeŁGŽsuǝv´ ,Ă4Kô98~üřř™´Áú$ťźSϘ3gŽÝxӍ1ÚŘĐŸ?Ú~űíMc—埪 Ňö•äŞöő”żÇ˝÷ŮŰvüĎńŻvšŤ4ż0 ˸(ž•Ńž§¸´Wn¸ŇĐăňu¤[ăůË´ą+*- ó5>–Ž{ż<]ž‡=Żl_wAýű÷xĚň]DˇUěŁîąśř~ô#›7o^źyVYe•xaRŢ;ě`C‡ #˜ĂĽëń˛îKýç?˙ąŐV[->šęéÉztźč˘‹lżýöł—^zɞ}öYűŻ˙ú/Ӈ„ť¤˝§ÉďŽô…Aä-n^şßŠĺ8O˙Ć ŮŹÓlçĎ|ÖŢxůyűĎsOÚF[î˜lz ť}:Ł;ŇĂ"eŻK÷­;Λä&śq•¤ÄyőôÓOی3".‰‡É“'Ű^{í•á˙~űǕÍ{}x¸KÎÝJn˛ń&ŮçOŞ^Żż”9ěśň“íéŠtő= WľáÇ?úqŢkŔ†nŘ%íý裏LŤŹm´QŽ~[<49ƒëjNĺÔ_Iś~~}2dHěó5W_÷T~ď{ߋńYłfĺ89çThŽÇ‚í˙¨Yćg9L’çóp–zĘazČÁ‡Ä‡š8ŕ{á…ě‰'žˆ7_sçĚ]†ią6˝÷Ţ{qQŸQrbŰ×ÇÄ5¤-ŃłÚmBT”úĽSăuhá…ńŚFßęéŚE"Z. ‹JÚW’k%ە…Gz|Ԏ4ŽS)ăíŰ˙ÉrŢdšdŘç‡ô–ÂŇ\ţmnŇŽá¤.L~\&ŤTúǓ°°ŔNÚ$ËgWZ@gn@wčׯ_L˙JA_+ř€wt~íăšŕ‚ –1ÓžjšRëIV Ő€íśŰ.Ž˘H´r#GŽ´Ë.ť,f˙öˇżľŻýëvá…Ć" •éŽôEáĂ\ڟ˝téě<ŇéďN|Í˝˙ďvý˝ŻŘˆQ+‡fśý ¸OŰާ;ŇĽS–´‹ogwœWc'bëç+e<Ď?˙üœŮŮgŸm˙ţ÷żíŇK/ÍĽ%…ę˝âŠ+˘YĄüdé°Ę*דćpąvŚű”Œçťęo˛\9a­x÷ťß7Řéň]uÎôyʉW’­ÎŸžž>ňČ#vüńÇçćY>NÎÇýRúѓćgş˝Y™ęí˙űßるśš¸S=úŚ(ÍÔóóů_ţň—ăkž˙ýďÇlgZj›Üţk_űšmśŮf6iŇ$Ű`ƒ ěüc|VžsvWZŠ}đöăę6Ýí§Ç'y~gŸLëĘpTŁaŽĹ“v_šŤÜŇ߼Vi5˜z•´žâ*v4‡|˛ŃDÔ¤P8™>uęTŰ|óÍă;Ľ•>­=ţüĂöŘcřušŇzč!Ű˙ýăJł.|đAŹg˙°Ş,§WęŠ ędý:ŸOFO×롴íľ×^‹ďą>餓lŰmś‰ŰIôÁ˘ŻĚźź˙žrČ!śúęŤÇŐ]wŢyç\ż>üđCűžŰ%ď=÷,ĂÄĎŤ:“‡§Ďűt,n ű [l^xÇź°Ÿcţb-yÓ[ę›"Ďďš3Żý‡“&Ű7O9Ě>ťÍŞvô^›ŮŁޛŤçĂÉSí˘oœ`‡ěźśíżŐh;ńs;äÎűÔăŘЇîʍąŁ÷ÜÔnşú—6waslϔiScÚ3O>jßüŇaö_ŰŻnœyŒÍœýQŽ=|żˇ˙śöšmÇÚwN?Üf͚ĹsŠý*ÔßΤ‹­e’˝§i Ľűęƒçűxů\ţÁ~?Č>n  BŰíŽ;î¸xłćöŠK„ŸvÚiqžĚ˜>ݖ„ů§8˝ëS+°—\rIŰßHžż+ŐăsŘĎásřő0‡=Í}?ŻÇÝŻdúb]BťtxýîJśíס•/űG~8>(łęŞŤĆżă_ţň—‘‘ňôwŞżm}ŕöGu”ýć7żÉ[ŒŸŢÎXďŠ?ďźóLŸ*ŤI•MŽÝ†á:˘ąÓMRş=YúU¨żĺŚW’­_OőÎ~őQOöKÄhśĽ9ŠÝ>÷ő€O†™Äę2IČKŢÇôü\+Ď5v›<×XŐĽ×uiD×X]ÇżřĹ/ƅĺŠţIŠkě=áëçMśĹ핗NĎĘT{ż5Wî |ŇuĽ™~éK_˛ŁÂ|Ôߴέă]vŮĹômÖGĺő IDATřCť˙ţűíşëŽ‹źuł˘ú䦆­úě?~ź{ěąńł(_|őą%\TżöĹŽ°Â QÜëwŠ}~ÝS€­3RŰ´Dw†oeĹ:Ý_Ůş}2Oi•äŞú ľúřłŸýlŠśqĆń[dľŠX?tmĐőä˘p˝Ö<ÖMź˙ÍżN¨ŒôF˛L1…8JOňT8ÖĆšEiŃÂEV+şŚV %Tłlj×öý F|đÁxńФĐĔXŐ]_ˇÎ ű|>jë˘Ž;î7Ţ8ڟ{îšśďžűĆwPżűîťń˝ˆ˛żôżˆ_—KĚČVÂXGŇ)Ž?ˆX8Ä̊+Ž/\Ú[$áű•Ż|%ög×]w{5÷Ţ{ďXĹŃǡ¨Ü~űíq‹ˆVŽßxăX— tá;vŹiUçOú“}ýŹłLâ?‹{{ÚBŤďżČZÊi]ű"ňęâ7(áßeŇGÚNf—~ű{đlcżm†ŽČŮ_yöŃ6|ĽŐěô+Ÿ´gîšŮ.ýţ×ě”_ŢëšęGڌßś˝Oţ‰­šéN6ýƒ‰öĚű‹ěŁ)Ř%Çíg;|î$űÜŮ×ŮÄţm×ýĎŠ6uQŰüӇڜYóíýˇ_ˇ‹ž~œ}ňĐ3lóϞaWŸóyťń–[m“?gsfLą‹O:Đ>yČvÄţÇŰťŻ|óŮŤLW:ý-éČâÄí˝<×Ý ö芏ž8ôŃGMŽz¸í ƒŠýŐ5B× })÷ÖŰoŰZa%Îűžf,ApꊧFNˇÜrKź^Č69vWˇÝʼnąËŇŸŽ˛­$[żžjΨ˙ęŤćí˙ű˙/˛Ő6¤9éüšoş^KhëZ,ţßüć7ă8ůśd˙Óóóç%^cu-Pœp vňÉ'ۋ/žĂ >śÇ¤Žąg•qÍĘTő”SNąSĂ ŮżÂ5V ”&—fŞ›3-ö\IJXjîjېnruC ›9Ýœyć™q˅ćąÜ)AxË^ü°Ăł[o˝Ő´]$íôY+ˇ lßĐšŻŻ6Óͤś=ŠQĄĎ/ą=¸[ńĐߝn¨t-Ń Ě駟nżŰĺ—ę*ÉUç,4ÖşŮÓ"ƒnT´etzX„řÝď~_ńŚĎăbýĐľA7‚š÷éżů|㓾Nř5ž;ŻQŔÍŇÜź¤ftŐŻ@ëŤ#żŇűQęŰĂa•I[8tüęWż*ZL,ÝőIčĘiE@+ÚŻ$ÁężÎ㿆6tčТŰ1tÁу4&L°7ß|3Š}ë,ýńé<újN˘^+r˛S›ľ*­U}EůšĎ}.ćéíŻ| \\%şľŇĽŻ×´ŇŁseqúÂć [‚Rnn?Ú…Ów9ę<;äźkěŐ'ţiż8eç x eűؔ޲7žžßÖÚęÓ6sʇśĘ:[Řäˇ_ś™Ó'ŰÔ÷ŰňśŢ÷żm­-wˇş†~6bľőâyŸúçMń´ăĄgZÓ lm÷´ľśŘŐý땱MjÜnÇ|Ë6Ţő[qü[yÍ öŢ+ĎÄó>uĎĂŻ)ÖŰöžfő}Úę>ac7Ř&ŢdéWVŮÇ_xĚ2%ÚęGŰ=´‚ŹűgžyŚhÉ=÷Ü3 „5ÖX#ިé⯕˝vÚ)ŠBÍąĽŸ%XśşBsxY˞›’ď Ťžëƒ[Ďz犤ÔW—dŹëƒ„žęՏ=I(şË:v^ާűůŘŚŰ,žZřq)ĆIyzND+Çz~DBîĺ—_NW™‹šŸĹŽąÚ† kťD¨ěśŘb‹(˝ŇJ]c˝ž,ž„şnr%ž4'ý!ÉtŁFŠß8Iŕ}űŰߎ×-řČ 802ÖçŚx'ßx˘-búěŃ7PÜ]CTç&›l??u3ŁkGg؊˝Ú.ĄŻąÓźVrťÚâZlŹő𯞭ÖB•ÜÍ7ßlŰnťm\9/Ľ…ţ拍OĄ2]ÍGş*ˆŤś#\ż4w¤˝ŞÝUő ´PŤşđęŹ#~ŕkľ0ü'בĐÝľţđ“ÎWą˝NëáËţç?˙yźƒ×]ˇVŞt7݉ĺ6^>Yˇ‡Ő.}€je@+ƒ.b”ŻŻI´‚¨ŻÖ$˘_}őŐ(˛UŸž––ÓE+yĽ)Ž;|9í­ö|}čBÜ7ŠüÓżŠőkj›>"Šőִ˗žé'÷łu7ßÉţđƒăíšsţËÎűăk6F[›žĺŇ0m÷tŤ­ż•͝ňvčkŰĘü:›ďhýú.=]?šúŽ^s#8ŕăýVŤ­ˇ™˝ůô}ŃvI{űVżnlŤÚÓÔÔ×ęBŰC]M~ŰVQůţa{I{ăëëëÂkŰú–Żý2ëętąőąioVɞĎç|ĺőĄăé~SéńŘŻ0ç’qýrg2Ž9˘şdZžrŢŘbsŘmşÓWťÓm/ĺüůŽúFI"ÂoŠUţć´r§s$ÇÁĎŠ4W™4c/›´‘]Gc'›ĺéÔŢt›KiO>ś^O˛Î4;ĺĽY*ŽW‰>9~Éz’m’}9×X 7-Z$Ç>ŮžJ]c ľ;ه|aݔIHi•řĐC{ŸU—\˛NŮh!Eۊô-Š„™ťdźœ|˝ĘëR˙eçq/+_érş^HäjţzýĹ>żJaŤo&ôMŻ;ÝĚäkƒç§ý$ƒt^ąx>ŽĹĆZ7qZAÖ[’¤´ /!ŽóŤ\Gý(ö7Ÿową2nÓY?ŠĺöJb8 uÔSš 틔ú|‘öŇŸŽqŐę–V$UÖK­üJ`ú~,M\ŸxęŞ˙‘§ĂŽÁmÓďö?VůĘKÇ˝źžťéŚ›âŠ°o›8&lŻđúTż‡˝ŒűŞSwęZ)L;‰_ÝÍęÎ[7şHz]úÚH“WŤĘzcˆœž:’ÓšüŠj]€vŢyç˜^Î?ýęm@ßú‹şmťnMĐw„rfXůř|ŘţŇŁśňŘ5ŁýŢǞcëoľk[ŮözŚź÷FŒOzőI[{ĂÍŰÔk{í#VZŞť˙VëßĆľO[iďźlĂFśMőÖ„¨\żďm­váP|ĚëًßaýՏööýl áˇ÷ôöű­ö3/CcĄ öb[h^|܀ü!ÍŸ I Ľů|Uşâr~ž|ůI{ŮŽłÎ:ńŰ/Ł4]@ÓvJ—SzĄ9ÜfŃ˝˙ćăŇQ T&_9Ý,ëV}Tžœţćt*>IF ë¤7G$YŠ\2Ž:Ódů´Ÿ/iٞËÓŠMYŰŁ2ůʉ\šMŇ6'Ľ%mź=ézœ“Ň ÍĎb×XíżŐ7~>Ő§ˇŕčEłR×Řd_źÍĽúş‰Đ^Y-ŽčÍ<Ú*(—dĄĎ'Ÿ|2~Ćü"l+üô§?{í˜Î´U8]>m Ú˙qö‘şąLşÎ°Ő7šŞŰˇ8%ë-5\IŽZؒ+ôyŞĎćĂ?^_ÚW}rétĹľ˛Žý’ŞçЧžŠŰ6ô`†ň4iő5™žŞ××DşˆjuAýWţřńămÇwŒ7hMizUßÜšsóžKůů­ŕöoj â´1úýű†pˆ+-_úĚ÷^ˇˇŸŘÂu@ůŸ +uĄMŤ­šž­Vˆ×ŰňSöĎë˙ÇćM?ÖÓ§y‘Ő-^`cÇ­kënńI{đÖßؤ7ž‹eg}8њBŮm?ýy[0w–=śbôkl°éďžj/=zˇm˝űAAˇľM ŐFogŸ žľÂŹ6lžÓ^aËČűöĚÝ7Y}kxGőߎł—ű§5„ůŕöé~͟1ÉŚźůB[ýĄŽkąw^xÄęĂąďἓCţüĆxĄzŠĽ‹m>ćĽ¤Šżri۶ԥӓvéüt\ői{’žňמO}5ŠoT’u”rԍćżö4zšÂÉż =řŤŻ?ő,ˇéŒ_čďźX…ú§íú›Óšœś hť–VTUŸž5ŇuGâE7°Úęáo~žX0üăqůúűÔÖ*}“äéůě”ćůißšÉ÷ź|ŹőVĎďŹ_IśjKşéx%8œ„ňő˝Ř5v—°¨ĄkŚVxő|Ŕ˙÷ŰŰa{ĽŻąY™ę›Hm‰Ńs꓾ Q›´*™fŞůĽýŇÚKŹwgë!B˝ýĹYˆoz~¤Ç żôůź^ůaŤWšjżŻÚ-_őiŐ:YGáJr§bŸ§z÷žžŃĂŘÚ3Ž÷"Ť}ő#Ű$˙B㓴Ńy’ńRŽŻşNhuźCńKúLMr•6‘öň6ĆTá?U- őž>Ääk “ƒŽ KąCś>ů’v^‡ňöźt\éúĐ\ýőăWXڋ|ä‘GF{}ĺ¤?(˝ÓT{J˝ů^żŸßó<]q­bë¨Aý0†îpő5‘>̕Ż}múŠQ{á$ŕO<ńÄĽn"ţ÷˙7Ćő՚~œE‡ţp’ýÉw^O“…ĽDt8´•Ł8ô BUń<éÓ?xÝ~öĺýíŒÝGŰšŸßČî˙Óoě„ ŽśąkŹíOžđZë×€}ăsëŰšn`g˙Ă7ƒ`uüýkmȰ‘ö˝ŁśˇÓ?=Úţç”=ƒ€nľńënd'}ďZťáâ3ěkűŽaçžľmůŠýlß#ψíQĺú†Őhog}łĆĐ~ľQçţôÁ'Ůoż}ŒśŰJööKO؄í?ÖĺěÓýzęŸ7Űu’ëڏNř´-œ35ÇáúžbOŢ}s^…ř$ÓŐngwO“_(Ý/XI[…ý‚čé*Ÿü›đ°ç§í•Ž}ĺ˝óÎ;ÇŻ$őőŻ—Ë׼ÉÉ÷zÝWšřŸ˙üç\žHňce'‘ގŘČĎWżl˛¤'ŰQj9琜×ßľž‰ĐžP­°ITéÝŰz¨Lí'=…ݏö=ę›!íu^˛I†˝~Ůj%Đ÷2*=iç}.Ć5ÉMö:ÄÚŻŠ‹ťłÖ9ÜÎ}oÇÝ/–^ŠMň\…ŘŞďŸŰ'(M+›IN*#9oGžz’yů앯ú>účÜ5Vűxőŕ–ŽąZ”Đžěn¸!ÎK= m zŽ@[ź~Í }ö$Żąz/ł×ďýrű|éI…“q/—L×ó/ZńT[4Žžúę¸UOZör˛—“xÖŰ44oő5ťY´_ߪČVŸ)\zFF+ŐÉň Ť?ĹýHśGçQÜí=\ěóËŮęóMoIłŐęžŇőŢzmĄRű$F“çőś¤ĎëéގBůéôޏkŐuđÁÇš˘9ämč¨ÉůŽ2鹚o|’eÔÇôřčo^×ďżnšt}•ďüŇ×dO÷v§}Ż+}n h×^šŐęęŇËńɎ(mW¤p“ŢžžôNúëÔĄt'}ý+îžś(._i~xúúap?ţĺ`ĹéŽ\+˛zÚZ+žÉ˝RŢ5÷łÔ›ĹVűœäôšvşƒÖáOJ§ó;ŠëƒRÂ\NşjB§^‰ŁU0]ü“NOVk%ĹzLćužňń…śúؕâ@űî„dM€tşVŕ§źűŚ5ő`ĂĂ/&Űϟ;ÇΟkĂFśí›ňtŮ~4szěßŔ!Ö:ŻćđôIďِVŒűÓçUŮd=ŠťSúÜ9aő>ü×ĐÇcTĚ>kýYí'ž3ɎŢrٟ*ö6/o_+Hšwş˜ö&§/ҍe%ćžVlô`SrOʟCŤÔú Éú‹\ú{– ÓQop]Áś”~w5§RŽąú†D"Uo˙°IşÎ\cËaŞkŹžUМËňLK˛ÍɰDtzŸ~2ż3áβŐuH[}ouŠmé*ŽĺŽušýPťr|JáéúŃ}-ŘéPť¤ˇ¤/´ož\ś"ĘžŽ–pč]Šúýc?÷tůJOú '}{\á|GHÎI—řŃú}e¤]UďöÎj{‚œ>đ%0“˘9vűJúşŁ.äôÇŻŁ\—Ü[”ÁZÖ‹ŢŢqß}÷ŮwÜWL҂G{öt”ㆠô Ÿ9iŤBÓLĘ3íré}lČúk~œ›K˙8iĐŔŔŁ5yę4 ź’)OşŢu7xÍU?ŽÄCyęYŠô‡´•HĽ{5ńĎ)ďyƒE¤‹­VÁ{Şó˝ő=ľ}…ÚĽ zúo m–tß󚯌njËqÉżçrĘww™ŽbŰQ?şšSĄkŹVľżX×÷?üáqńB+éůՙkl9LuţľÖZŤ#l%çkŤ`WšÎ˛-÷:ÔU\ËërűĄqéĘń)eܓÚŇĂĐŇ\ĺj‹RÎŰSlŞ^@kGJč+×äŽ g÷{ʀT˘úzSﮖxÖ*ÄÝwßm›nşi%ŞÎŐ1t蒰Ç)D“:OÔém$Ęŕ0thŘfötă*K@˙YW‚+ۂ꭭–Řj•Wƒ˝ôŇKń HŸůĚgâś:˙ŮńJr-1ufÝÁśš:ßJú.˜“ž(5†ú ymiÓ t5ťŞ˙”Ö‹QDhCżŘ<ßv‡jl=켣+ݰáKÂś”Ž$Ču(ÝĂIżž=Ýý†ö¸|Ľůáéë‡7S|üޡ`Ĺé cÌ1=ȡ<œîž{îi'N´™3gZ˙ţýăŞrş-ÚşQčAÁYłfĹ2.şÓe‰C€ žD@o${ď˝÷luÖ)ťY#FŒ8.~1-áXŽćÄĄ¸§ËW^ŇW8yhżŹÇÎw„䘞óƒFţxŸ­RNBľjÝÇúůwqذaQH<ŤŔĐĄC –#€ ôD=Iƒu­㺈ŔŞŤŽjżúŐŻş¨vŞ… @XĐ]H}đŕÁśÇ{tᨀ @ ť  ť›8çƒ @čŐŞzt%FfqsŤ- [Ó?ZĐýĹK´@€އ@cCk ď\ÜŻÍoŹ÷÷GTO+ŮtšĎsśÚ´šÍ6u^[x1úš1˛ @čű´ŘŔžu6r@‹XÂfˆčÂ#‰€.Ě&Ž8K8ż>­Ĺ&Ínśš‹ žÍ¤H-dA€ žO``SÍRo­u}ŹąĄ.čžßćĺŐBtňÚśĄŐg‰çˇŢz+|ľŃj -ó‹” € ô>KúôˇŠÍaŰĆęŤŰ°ţu6¨Él ötŕň@@çĹҖ¨˝ĎÚÂĄ•çáCؚ+śU†°'¨2˛ @č…ޟžq˙đٍy¤}¤p…   ł1=0č{žWÔh›Źš˘MX6)‚Œ,@€z!çޚe3ć,°YaˇŞ´OŰKX.4”čBdRéú9đĆĆĆź?ŝ2% @€ziiřŁŮ˝Şĺ˧ąźzůp珀 @˝”ş—͆ @X>С;g… @čĽĐ˝tŕh6 @€Ŕň!€€^>Ü9+ @€@/%€€îĽGł!@€–ŞĐ­­üôöň™Vœ€ Z&P폪t]żXËźô€ ĺC Ú5XU čĺ3e8+ @€@5@@WóčŇ7@€ Š@@W)B€ T3t5.}ƒ @¨8tőR! @€@5@@WóčŇ7@€ Š@@W)B€ T3t†Ń­ö—‚g@) @UD“m0ĐxUűKÁ3 Ŕ€ *"€ĆÉ6˜člź°† @¨qčŸt€ @ t6^XC€ Ô8tOş@€ :/Ź!@€jœşĆ'݇ @ČFÖ€ @5N Ş4/ŻńŮM÷!@X.Ş]ƒUľ€ćĽŕËĺo†“B€ PăŞ]ƒUľ€ŽńšK÷!@€ş€ş  R% @€@ő@@WďŘŇ3@€ . €€î¨T @€ P˝ĐŐ;śô € @    ť*UB€ T/t†ą­öwf@) @UD“m0ĐxUű; 3 Ŕ€ *"€ĆÉ6˜člź°† @¨qčŸt€ @ t6^XC€ Ô8tOş@€ :/Ź!@€jœşĆ'݇ @ČFÖ€ @5N]ă€îC€ d#PŐš_ŐÉ6°† @• P폪4żŞS‰?ę€ @ŮTťŤjm¨ą† @€@ÇĐ3€ @9ďKľ IDATč € @č˜şcFX@€ @ GCA€ @@@wĚ(gQíŻdÉu” @5E“m¸ĐxUű+Y2 Ŕ€ *"€ĆÉ6˜člź°† @¨qčŸt€ @ t6^XC€ Ô8tOş@€ :/Ź!@€jœşĆ'݇ @ČFÖ€ @5N]ă€îC€ d#€€ÎĆ k@€ 'PŐšŸĽŹńŮM÷!@X.Ş]ƒUľ€ćg)—Ëß '… @ Ć TťŤj]ăs—îC€ tt@ĽJ@€ ę%€€ŽŢąĽg€ @]@ÝPŠ€ @ z  3Œmľ?QšŚ€ T4NśÁD@gŕUíO”f@) @UD“m0ĐŮxa @€ PăĐ5>č> @€@6člź°† @¨qčŸt€ @ t6^XC€ Ô8tOş@€ :/Ź!@€jœşĆ'݇ @ČFÖ€ @5N]ă€îC€ d#PŐšßuĎ6°† @• P폪4żë^‰?ę€ @ŮTťŤjm¨ą† @€@ÇĐ3€ @9č € @č˜şcF9‹jߟë(@€jŠ'Űp# 3đŞö ńP` @€@@ădLt6^XC€ Ô8tOş@€ :/Ź!@€jœşĆ'݇ @ČFÖ€ @5N]ă€îC€ d#€€ÎĆ k@€ '€€Žń @÷!@€˛@@gă…5 @€@@@×ř ű€ @Ů  łń€ @ Ć Tľ€nmm­ńáĽű€ @ ű TťŤj]WW×ý3†3B€ 'P폪tĎ]ş@€ ĐĐ]•*!@€Ş—:ĂŘVű~ž (0… @ Š q˛ &:ŻjßϓŚ€ T4NśÁD@gă…5 @€@@@×ř ű€ @Ů  łń€ @ Ć  k|Đ}@€ lĐŮxa @€ PăĐ5>č> @€@6člź°† @¨qčŸt€ @ t6^XC€ Ô8tOş@€ :/Ź!@€jœşĆ'݇ @ČF Ştkkk6XC€ tš@ľk°ŞĐuuužT@€ @ľk°ŞĐنk@€ tLÝ1ٜEľ‘ë(@€jŠ'Űp# 3đŞöŻ#2 Ŕ€ *"€ĆÉ6˜člź°† @¨qčŸt€ @ t6^XC€ Ô8tOş@€ :/Ź!@€jœşĆ'݇ @ČFÖ€ @5N]ă€îC€ d#€€ÎĆ k@€ '€€Žń @÷!@€˛@@gă…5 @€@@@×ř ű€ @Ů  łń€ @ Ć Tľ€nmm­ńáĽű€ @ ű TťŤj]WW×ý3†3B€ 'P폪tĽçnľßMUšőA€ Đ; q˛:Żjż›Ę€S@€ވ'Ű`" łń€ @ Ć  k|Đ}@€ lĐŮxa @€ PăĐ5>č> @€@6člź°† @¨qčŸt€ @ t6^XC€ Ô8tOş@€ :/Ź!@€jœşĆ'݇ @ČFÖ€ @5N]ă€îC€ d#€€ÎĆ k@€ '€€Žń @÷!@€˛¨jÝÚښÖ€ @&P폪t]]]§'@˛‚jŸ Éž† @ vTZăTZƒő´‘¨j]iŘŐ>*͋ú @čĐ8ŮĆ Ö€ @5N]ă€îC€ d#€€ÎĆ k@€ '€€Žń @÷!@€˛@@gă…5 @€@@@×ř ű€ @Ů  łń€ @ Ć  k|Đ}@€ lĐŮxa @€ PăĐ5>č> @€@6člź°† @¨qčŸt€ @ t6^XC€ Ô8tOş@€ :/Ź!@€jœ@U čÖÖ֊oĽëŤh㨠€ ”I Ň§Ňő•Ů­.+VŐşŽŽŽ˘ŕ*]_EGe€ @ L•Ö8•ŽŻĚnuYąŞĐ]FŠ!@€j–şf‡žŽC€ ”C]5Ę@€ Ô,tÍ=‡ @(‡şj” @¨Yčšz:@€ Pt9Ô(@€ PłĐ5;ôt€ @ čr¨Q€ @ f  kvčé8 @€@9ĐĺPŁ  @€@Í@@×ěĐÓq@€ r  ËĄF@€ š%€€ŽŮĄ§ă€ @ĺ@@—C2€ @5Kač[[[3Xc @€z4NśqŞj]éÉPWW—.Ö€ @ ¨´ĆŠ´ëiŤZ@Wz2ô´ÁŁ=€ @ '¨v VŐş'N(Ú@€ Đť  {÷řŃz@€ n&€€îfŕœ€ @ w@@÷îńŁő€ @ÝLÝÍŔ9 @€@ď&€€îÝăGë!@€ş™ş›s:@€ ŢMݻǏÖC€ t3t7çt€ @˝›şw­‡ @čfčnÎé @€z7tď?Z@€ ĐÍĐÝ œÓA€ ônčŢ=~´€ @ › 4tóůzŐéúXcŸ–Ř湋űŘ[ÓYCĂG˝Ş4€ tD@GZÇę,hŸp „+L]˜5՛ ě[g›ęlΜV{őýY6e捍 łŤ‹]kkk<ç*4 Ëgç%ač$Ę÷aX>;/ C'QžĂňŮyÉjg8s^ł-XÜjƒÝ´4Ž0ŞĐ>Ů wżxÎŕ~}lÄ@ł•†H̲™ ZĂŃś"]ź$š€ @ 7¨ âyPĐ<őAűԛ4Pg\g5XgÎÝeŤZ@wvőVw_#ÔY݈>6ŹÍ]Řj‹ŃĎÝ1/9 @ÝH@Ű6´ň,Ý3"]îŹëĆŽ—uŞŞĐeIjŹ××ÚÔü[Ôlśx :ˆ  @U@@{ž%šľň,_W˜ş0›˜Ł Ô&ŇŔÜ­Xˆŕ @€j–@ç6¸Ô,śŇ:ţűß˙ŢöŘcŰwß}í˝÷Ţ+­V€ @=š+ЇçƒćŘţŰ^u†5hĂPˇdń\{éĹßZßž‹ěôӏł1cư$€ @ 7@@g­ ň¸mţŠľě[?ŢĐô­ˇ†>uÖ'zo˘Ĺ7ĎľZsŘ&}ŮĎ~bMýGŰâÖaöěËŤ=Kssł˝óÎ;áÓ śĘ*Ť„úڄů/ůKŰmˇÝluÖ)ZžÔĚ{ď˝×fΜipŔ2EŠĺ-c\Ą„E‹Ů… mđŕÁŞ‘j @€@×(ź„ÚőçîugĐ}ä噶öćkŘ¤Ů‹í˝™‹ěýY‹íý™‹íĂp|Âď˙_˙~Úîşëďś(éCNýŞ=őú\SŮ´›7ož}űŰßśÍ7ßÜžúŐŻÚi§ĂßýîwŁé 7Ü`ožůfşXŮńG}Ôţńä-_,/oN$Ţu×]vŕچnhwŢyg'j˘( @č~Ź@g`.ÜÚŻżM›×b­ő­Ör}đľřŹ×ľÔ…%čŋ›íÚ+.łŕŮ6ťíoőĂÇY]˙WŁ€ŽŻ_úÄóÎ;Ď^{í5ťçž{l…Vˆ-iiiąŠS§fhUď3]o˝őě׿ţľ}á _č}§Ĺ€ Ô<V 3L 薦F{/Ź4żđÜóvţ—°ďžz¸=ňŕżlÖü›9żŐîťű˙ěíˇ&ÚŔá+ڄ˙ËŚĎośćžËŹ@ëĄB­0Ÿ{îš9ńŹŚhűÊ+ޘkŐüůóí¤“N˛7ŢŘžůÍoćŇřóŸ˙lŰmˇm˛É&Qzćâŋí /´­śÚĘÖ]w];ꨣ<+çOŸ>Ýöß{úé§si üä'?‰őí˛Ë.öěłĎćňŢ}÷];ě°ĂlýőסvÚÉnťíś˜§ĽŸx≱œßxăvöŮg{těŘąKőy @€@&€€Î88MšÂrsë?z]7a;›={–ýő÷ż˛ÉÓfŘäŠÓíďş.ěnľí8Ţćś4ZŸ`Ű40”Iš×_=ŚHüsßűŢ÷˘HžćškěÚkŻľW^y%šĎ˜1ĂÎ9çűíok7Ýt“]rÉ%áçĆçÄźK/˝Ô~÷ťßEÁýĚ3ĎD‘ž<‡n$z%„7ÝtÓ\Öý÷ßĂ×]w7Ξ˙ýďǸDň1Ç÷g?đŔqťÉ—żüe{îšçâʻ—]v™=ňČ#6eĘűÁ~`Ç|Ž^€ @ š°…#ăh6 čk“ć,ą!KĚÖÚé0{ůš'múŒÉvŰ ż ŤÇ öŃÜšśÖfŸ˛žc&،°*=;üôwӀ~˜eÚ´i6`ŔkjZV\'=öX;üđĂcҚkŽiĎ?˙||¨PŰ>&L˜`ýúľŐ˝Ćk˜ö1kĺX+ŔűěłO|}ž ŽľÖZÉ*íüóϏç>ăŒ3–JßvŰmí+_ůJL;ýôÓăÆ ,°W_}Ő^xá…(ÖGŒë˝ęŞŤâyÔ=ä(1ꊧĆ}ÍG}tŕKUN€ T V 3dß°šÜö2÷kj°!CŰn‡žfúąžˇž}ŔŢ|ú^8h¨í°ßQᗠŹoxŤFc}ëDwÚémzˆpöěŮ鏼âăǏĎĹsa­żôŇKvĘ)§ÄC{§'Mšóß˙}Űzë­sśÉ€ö\_~ůĺq[Húg6“b^˘[oČxűíˇă;ŹőŚ m˝p§“ďś>ňČ#mɒ%öä“OÚ 'œŕfř€ @ ę  3ißţ}ĂĎ\ÖŰЍáh˛u'lnŰíńykBYÇîŸ`ŁW^1äőľĄmHż†°…cY˝öÚk‡wD÷ľżüĺ/[Đfއľę|ÇwäŽC=4fŽ´ŇJqĽ:_ĹĆÚrĄ}Փ'OÎgÓ´ĹdřđáqőzäȑöŃG™VÍÝ˝ńĆ6jÔ(Ú•W^iűÚîáűŁs™ @€@@@gĚƒűٰ ˆ‡ `Ç´CŮ>‡oŁÇŽaëoş­í°ëŢśÂŕ6lp>¨°m˛AC–ÝÂ!ʇű´_řąÇËľBŤČڞёÓ€*wß}÷ES W‰\9˝çůöŰoĎ=˜\)Vţ™gžW¨u~=¤čNűŤőpĄVło˝őVűÄ'>jÔ6 ­˜ß|óÍQ kűńǡÝwß=Uüżř…iďőĹ_ ÔĘ5€ T#ö@gՕGôˇAZĄżőş8ěć°ú>ýíŘŻ~Ý b#Fև7nX8ęmÁÂŚ×ÇÌęŸ÷,guV(_otiŐX[(ú÷ďŸŰóœˇP{˘Dí~ô#űâżWŠőŁ$zôG~ůđô¸őbŻ˝öŠoôĐJqú}Ëş|°}éK_Š[:T­VœľŠ­m%zĐđꍯŽgÓJš~ÔEŤÖW\qE|͞śiěşëŽqۆö>ë•|ŁGŽ‡ŢńŹ­%úӟb˙ڛœó~ţóŸÇz$ÖUNJţýď_jE;gL€ ô0uZš,äÂٰť7ş|žŇ҇V´u(ÝĂI?Č͘îžźňĺ+ÍO_?l¸<¤—ĺôđ›VNÓď_.Ť˛PHÔýâÖl“Oî’k˛žáůżľX˝Ćv_Á°Ř-°°Ox‘=s˙]vü>ëçř ŮK9íž8q˘iŤÄ°aÖĘë(˘ńÓV ‰d˙C/ă+ŇĽüҟŻDKŔëMÉí^Ÿ|KŤçúŐD @HĐ"œžÇŇvŐr]xiÁqĄě‹á?KgAUYXžĚŠ{ş|ĺ%}…“‡¤™ÇÎw„äśß”v?h,Ůĺu¨ źXň'J4śźsŻMzyť]řď€/ ÍáőpđĂv萹Ä>|ńa[ôÖ=ApNČ_iHU˝é7e4NečGŤ×ů\)ÂŮËI8ť+$ž•Ÿ|GľŰăC€ Z"PպȍCYcŹ•ěýöÝ'î~ţoW•TÇ AƒâĎVWjꤓb@€–#Jk°ĺŘ•ź§Žjýń”ź}Ϝ¨úôÎcíůŐ6=lWĚiK…Vs%˘+ݖbç%€ ,OŐŽ{ŞZ@wĹÄфĐֈ,Ű#ş˘Ô @€ °|h§.€ @(‘şDP˜A€ @@ĐĚ@€ d €€Î S@€ đaĆ90sćLť÷Ţ{-üŔK‡oÖĐ+\‹ŔmçwÎü)›…9 @€@7@@g}˙ý÷ŰÖ[oc›ožŮ2żü—ŽJŻš{ňÉ'ížűîłý÷ß?‹ë{Ţyçřƒ*úĺD˙EAý|önťí_—3îD@Â_7pŔ2ľË[Ƹ ú•Dýú!?ĚR˜T@€@ˇ@@gŔ-ĄŤ•ç 7Ü ÷č|ď9ô—‡Ë~ƒ 6°;ďźÓN˙˜Ęźyóě‡?üĄýéOŠ"Y‚űő×_ˇĎ}îsöÍo~Ón¸á[sÍ5+& }ôQ{űíˇó čbyuh*~‡vXüYsőWżÂř“ŸüÄÖXcËb@€zt†Q8p`Ď űŠHDëpáŹßö֏§+ßËäĐçwž˝öÚkvĎ=÷Ř +Ź[˘2S§NÍĐŞŢeŞ•šţúëăÖľüßř†ýěg?łK.š¤wu„ÖB€ Płxˆ0ĂĐťh^źhą-Y˛Äšu´4G‘ăATËf‰Ž§cńâĹ9!<Ő{ď˝W˜Ď=÷ܜxVžśo$ˇ5h›ĂI'doźq\•NÖńç?˙ŮśŰn;Űd“Mě׿ţu.Kçźđ mŤ­ś˛u×]׎:ę¨\žŚOŸˇ•<ýôӞ}­Ťž]vŮŞ}öŮ\ŢťďžWŽ×_}Űi§ěśŰn‹yşi8ńÄă*˛ßxăvöŮg{t)żoßž9ńŹŒŃŁG›Xŕ @€@o!€€Î8R€-­-m:ʎ4ˇ­2K8űá+ĎĐrýúő[ć,ÚŞ!'ąZĚ}ď{ߋ"ůškŽąkŻ˝Ö^yĺ•h>cĆ ;çœs졿ý­ÝtÓMqwΜ91ďŇK/ľßýîwQp?óĚ3&‘žtj§DŻ„đŚ›nšËŇţnšëŽťÎƍgß˙ţ÷c\"ů˜cŽ1íĎ~ŕěŤ_ýŞ}ůË_śçž{.Žź+|Ůe—Ů#<âü?řüńąlątspË-ˇŘ^{íǓ<@€ ĐŁ°…#ăpôďßß´wYű™ľZœo´Ş”čÔę´v>­˝Ŕ °ŚŚŚ˘-8öŘcíđÏ6ÚýüóĎÇ=ŃÚö1a„\ÝÚCŹ}ĚZ9Ö đ>űěcűîťo,ˇÖZk-uŽóĎ??žűŒ3ÎX*}ŰmˇľŻ|ĺ+1íôÓO{Ľ,X`ŻžúŞ˝đ QŹë­"Ş÷ŞŤŽŠçQÖYg(ćO=őÔ°?|C;ú裣_ŞňTD7_űÚ×lłÍ6‹öŠl˘€ @ Ç@@g­@K4K@űŢ礈ö}Đ­-atXߗŻ2i§Ő\ ńŮłgې!CŇŮšřřńăsáĆĆĆ\X+Á/˝ô’rĘ)š´I“&ĹđűďżŢ˛u.=Оk=´¨íÉvË&)ć%ş.\:Ô‹ÁƒŰŘącsUI(k[‡ť#<Ň~ţóŸÇˇŽ$ˇ“x~Ú׉s˝i@€zśpd-­&K<ëíœ:$lýČśÚŇd›ozíľ×ŽÂú/ůKĆ´™ëĄC­:ßqÇšăĐC™+­´R\ŠÎWą„ąś\h_őäɓó™Ä4m1>|¸É~äȑŚ×ÎiŐÜÝoźaŁFň¨]yĺ•&ąŻßËL´ÝăĹ_4m5IŢ¤ĚˆB€ IqX$†“bYŤËJóCq?Ü.Ÿ€–>*<ܧý=öXŽZEÖöŒŽœŢ+­rzÇ´œ„ŤDޜŢó|űíˇçL?¤wć™gĆj_űÝiľ.ÔöŠ[o˝Ő>ń‰OÄm*ÚŚĄó›ož9žGŤŘ?ţ¸ížűâżřĹ/˘ žřâ‹ă„z]^>§śüčG?˛“O>9Žpk~îÜšůLIƒ @=’[82‹ö@k•Y˘XŤĐém^D¨çkŻs>wÖYgĹŐěƒ:Č´jŹzUżďyÎWĆÓ$j%DżřĹ/ƕâE‹Ůi§fGq„i˙˛ŹÎÓ=´RŹwQ'„îÁl_úҗěňË/YZqÖ*śD­4źúęŤcşn´ŐBŤÖW\qE|ÍŢ 'œ`ťîşk|˜R{ŸőJ>˝QCǁˇ–hŤˆVŕ“î‰'žˆÂYű¤ÝéM!˙üç?=Š@€z4:ßł›Ż•AÖľ§çó•–>´˘­CéNúRSŠť/ݏ|Ľůáéë‡mmę.dfuZQ3fĚ2".k=nŻ=ť=ôíšçžńŐsăq‹Ľ}ąŐŠî˙ýß˙ŮöŰoŸw+‡Jčm'NŒ[%† śt%ÄtmŐHö_0ô"ž"­ýË9_‰–€Ÿ2eĘRŰ3’eu.­žëć@€Ň´§oœő’r]xiÁqĄě‹áh ‡^k֜8÷tůĘKú 'řóíi ç;BrLĎůAcÉ.ŻŤjԑŔÍK¤H˘DŁVPőc*[ląE‡"RÂXöú9:jÉu IDATo˝2ސS˝é7e˛M§ŤZ˝ÎçJÎ^NÂŮ]roł§šŸ|Gľ§áC€ $Jk°dÝ=!\պҀľażýö‹{ő‹Rœ~yO[Ň[J)‹  @€@Ď#€€Î0&ş›Ň×ÚóŤmÚç\ĚiK…Vs%˘ŤýNŹň @€@5@@gM amČ˛="ă)0‡ @čÁô€ @(‘şDP˜A€ @@ĐĚ@€ d €€Î S@€   ™€ @Č@Ś€ @@@3 @€ ďÎŤTSý„÷‹/žhĎ?˙źMœ8Ńć̙t%ůĂ+ţóęÉXń´äyČŻËáč ||<ä×Ő×Yc}c|'řŘącmĂ 7´ő×_żĂŸxĎuˆ @˝’ş‚Ă&÷Ÿ˙üÇţú׿Ć_ÜyçíČ#´ZSSSĎDU=…Ŕâŋ㠒n–î˝÷^ťăŽ;lď˝÷ŽbÚĹvOi+í€ @ 2ЕáhÍÍÍvçwÚłĎ>k§Ÿ~ş?žŸďŽ۞\M}}˝őíŰ×>ůÉOڎ;îhożýśýřÇ?śˇŢzË>ó™Ď˜ňq€ TtĆS[3ţţ÷żŰŤŻžjgu–92 ęđ-ż…EiÓ*ĺc=­ń(tĘ>}úŘꍯncÌ)dBzO#Ć7Œjl•Ćwĺ•WśŻ~őŤv饗šĆs=öˆ~Ok6í @ |čňŮŒMúú^{ž<đŔ¸uC‚Zéî>úč#ťě˛ËŹąąqŠtĎwżĄĄÁöŰoż(Â< ßěâ‹/ś=÷Ü3î/î <´5#9žj“â~ <Ä>ř`űă˙o†&L˜Ŕˇ=aŕh @ Bx G'AΟ??î}Ýa‡âʳijmé𰄕žć×Å~̟żĐtxÜ}‰3•-vŹľÖZQ˜iľSűmľu¤˜ýňČ[o˝őě–[nÉľëŰßţś7.W›ÖXc¸ŐAóśŰn[*/Ůć+Żź2Žî'Ó …ľú{ĐAŹŤPšRÓ5ŚK–|<ś^Néç6ż%>X¸ýöŰۃ>Ćy~'gĹ!@čIŞZ@KĐtĽ“XŇĘłślŹśÚjńT‹-ŠâMyÉ#َć新˘:! 'ŻbóeŻUŮ×_Ý$>O>ůäxÎbe”§m‡zhnĽTűt‡njsGełćk?đý÷ߟŤ÷ᇜ?ü0 fŐĽ‡- oîžűnŰmˇÝ˘mž6ŠżĽž_śrĽÚgľsěcëĺoniÖÚ˛ŁĄUW]ŐFe/˝ôRœ m-ă_@€@őĐçc5ťŞĐ]ý„… ÚkŻ˝Ĺsż~ýâ´]f•UVąÍ6ŰĚnşńĆ\]?űŮĎ"Ýph%]Ťüo{•óo |ĺ9é/Z¸Č´]GsŔ.ÔëíŢx㍘–k†j%ĐŐlysct'F@ÂPbyĽ•VŠďţ•hr,ĄĽÉS×§.ČyqEÔOĽô˙řo1šž`‹/˛yÁ~)§›¸_‡l-­-öü ĎŰožaˇßvť}ç;ßąšĄĚĚY3ŁXóňłfϊBQ˘x­uÖśĂ?ܞyćťä§—Ä-ýđ"ŰkĎ˝ě†n°AƒĹó^rÉ%öüĂŽşę*khl°3ž|†]pÁöłżaŞOŤŠ_˙ú×cüŠ'Ÿ˛óĎ??ŠödűÔv‰r­2żűîťöÎ;ďŘşëŻgŁWm=üíš×žQ@qäńœzWö´éÓb8׌?„6…őEú›ßú–zÚŠvĚąÇŘgřŹ|ČÁśÎ:ë´aJđw‰Z•{ůĺ—í _ř‚xâ‰vÓÍ7ٌ3bżçΛk‡v˜mźÉĆöŔƒŘC>d'ž|’bzÂĆlҤI‘‰ţ•W]ißúćˇěŞkŽŽ7mĎ †qŐŘÖißłĹńPz\7@Ęű˙í{ŒdUšöWĎŔƒĚ…áâá€ET 1$Ŕ÷˘hÄs¸(őQ”ˆ2~Ţ"‰—Ď˜čŢđxřPĂ ‰âŕ#^‚"(ŕŒ"1˘ĂE‡a.ß~VÍSóöę]ŐŐŐťşŤŤ~+ŮýŽ÷]ďZ{­ßnÂÓkVíŇď‚δkúÎ;ďĚDěśŰn­ůň€ M`¤w ýd´SşÇ{¤ĺ˗gÁ¤a 'Ůö5!ÄúЙvu6şuVöá‡˙•tIt9žuëś*s"-ŞúLş4^ˆ)çĆޘţó‹˙™ß1˝ľ+ŤvĹUœŰöŤţťî˛k¤:‹˝ď>űŚĽť-MŤö\•óőŔŠĺ+rżŤŽź*RťÔ‡<çôš×ź&}ľÚő˜ę Úc_tlţ`ŸŢ<"Áęv[íźęƒvĹľc}ôóŽNGydúĹÍżHoz<Ç4†ňUÜŻ=§jŽž“Úßđ†7¤łţăŹtäż™wĆď¸ýŽvŸĚz;Ÿ–°m1źćżŻÉGTŢóž÷¤•+VŚVyŠďwܑŢvÁŰŇŢ{íN=őÔôoGTťĐW_ÇÔzĘ'?ůÉtč!‡Śc=6ů~zž‹WŹ3ęŠpUŃÜŰ÷Íí­ß hý~čýŽP @ ě@÷ů%|ľŰšlٲüv ‰Ľ(ž-¨ZĂOT"ÜŠÚŠ~BĚőˇœ¨D֖Ü$A8]‘ ”đÓ1۸íśŰÚŻKsŮ,đśç9š]žŠ|Çîťďž|ŽÚţsŸűÜt˙ý÷g‘Ź|­s˙J°ŤHŒŤÄ{äŔöú`ĽÎ>˙őŻMŻýëónŹŽ„Üxăůbçâ1ęć¤'ńœôĽ4ÎwŰŘ˙Ďţs>r˘ç‹Ö(a+‘ě˘ă(Ú-×=4†Ö¨ľŞhĺý|÷ŻöŸóIú˝ĐżB¸]o^‘€ÖďŠÚßя @ zOĚbIgc%źtIŹEąeÁ´ß~ŤŇš5˙ŤşŰÔóĐ­)ě\ Ëuéž{ść1Ś›–ďuîšçŚK/˝4żíA˘Ps˛`Ôy\űš‹.űŃşŽDţž:Ra_çwWŹX‘tĆŰą:ëXœˇvn%đőUćŸţô§“Ž0,]ş4ď`üńíńĚKcxœXíżôă=ŐŚKýŸô¤'ĽkŻ˝ś=ŚóôöąŃ‘­WEëԎšúĹ1ÔVúŠŠDAŹş/ĺKDëI8;7Wř@€Ŕ‚'0ýVç‚_âŕ ôđĂçŢI4ɡ°•ŐŚý^gÇńxĂžĆüž…›ÎŻ^˝:ýíoËgx%/žřâ|[÷׎ŤÎăúú`vWu CÂQy'tRZťvm˝žúžżQOí*žGôÝ?śéM:‡,‘*qŻă¸éŚ›Ň 'œĐ'Žçäąb{ź§Űe}łQěôÓOOúӟҗžô% ‘EłÎŹqÄůí:˛Ą|}T_tŁwMŤŸb*?ŽŠűřňóőýw?Y“—PW@€Ŕhŕ˙ę}>G‰*‰O ¤r: )Ő%žZšL¸;_‹Ş*×ýŁqMůüóĎĎ_¸˘o@üČG>’w[%_őŞWĽŁŽ:*Ÿ]ÖŰ*T< aíŤ]Ç(t„ÂGA>üáçź5kÖdáŻ7SčŇÚô!BÝ_—Çó˜öăüó™źĆăŽ;.ó”€öXĎžćŕşÚ|ID+^wi.ځ–h÷1ź~@€ °  L蟝;•J´śâŞĹޞ­ęĺeu¨¸ëŃJ ɡŐů˛Šůrüŕ 6|ފ÷U´łŞ×”IÜ ˘č€ž(CG9䐴jŐŞ|Z÷łÓ}xŕÁę(åՎđŠ•×éÇNŐ.čÝŐyăeé´Óţ÷ŹŚűĐCĺ9uDgšľ+,¨˘|ŃđŤřÓÎşÖĎ)+>WĽnNýŢ["V;ó:şQ˝›Z,|ŢšlŸ‰ď#:žĄ{jçYŻţo×.<€ 0ęôr}ŢčŔě{Š•Ś:ŻęźŽş$œtRó%ßqYĹŁU=^ťöUŻťŞpë][śŐ˙×;ŠdÎ@ WŸEťšú6˝ëŻż>é˝É>÷ęÝHťçž+ŤŁgTôs¤Ţî˛ËAŐű“Ÿ6k1çs˝őwIůŠŘV—Ż?ćłÔÍŠßůHk'źŽtŠ×ĺNÓgúpћ7ô։'ž˜wţÇB€ °°  gńü$”ufWG'Žťîş|lÂśóůX ݎFč‹G(ŁM@âٗŽöčëÉő •úÔż‚Œ6QV@N­ĂΚ ýŹtÄA˙,Żłľ:+Ź/$ٸqc>úŕăCż&ŘŸ‹Ö7^qĹůŰőťĄß‘§ĄťA€ 0OĐłď]hí0K<ë[ošĺ–,¨ľŮĺřĚ,ďL÷a!ŕŁ:óuë­ˇŚ˙S}k˘>8¨ß }I ťĎĂň¤˜ @ áh€ŁŽhč‡ÎşęmŸýěgóňôjšcŽ9&ˇé- ”Ń# Ýf}UšÎ:ëUxú#J_Ęňüç??żEż@€F‹şçŠž—@ÖŇôĎőĎ~öłÓúőëónä 7ܐwŁŮ‰nôĄgŻoԛXôm‰tPţ=Đם7ńf!\2S‚ Œ=tƒżL{îšgţęf}xěŃGÍ_Ţ!ŤŢGD7{†’xÖń ˝WZ8ÉęňWÁ™ @ €€nŞwŁľ#­]I gÄsЇh8‹h iŐ)€ Œ>ôŸą•vĽů§üBfh@€ 0ÇFú-™˜ăß&n@€*ŁŽÁFZ@óOęü7 @€ćžŔ¨k°‘Đs˙ëÂ!@€Fzԟ0ëƒ @h”şQœ @€ 0ęĐŁţ„Y @€@ŁЍâd0@€ Q'€€ő'Ěú @€%€€n'ƒA€ Œ:ô¨?aÖ@€ Đ(tŁ8 € @`Ô  Gý ł>@€ F  ĹÉ`€ @ŁN=ęO˜őA€ 4JÝ(Nƒ @učQÂŹ€ @ QčFq2 @€Ŕ¨@@úf}€ @@@7Š“Á @€FŔH 艉‰´mŰśQ†Ź€  i/i°Q.#- wß}÷ôř㏏ňócm€ @`¨H{IƒrŮi”ˇrĺĘôČ#¤M›6ĽwޙÝčQ~ŘŹ € y% ]g‰ç͛7'i°Q.#- —.]š-Z”6nܘ/ŽsŒňŻ2kƒ @`> H@/^ź8-_ž<íşëŽiëÖ­ó9Ţ{¤´ܒ%Kň5PŠ @€ Đ&0ĘâY‹é3Đí§H€ @ @@7’a @€ƃz<ž3Ť„ @hˆş! @€ 0ĐăńœY% @€@CĐ d@€ ń €€çĚ*!@€"€€n$Ă@€ Œôxt– @€ Đ?t˙ěč @€ 0†ĐcřĐY2 @€@˙ĐýłŁ' @€Ŕ@@áCgÉ€ @ý@@÷ώž€ @cH=†%C€ ôOÝ?;zB€ Œ!ô>t– @€ Đ?t˙ěč @€ 0†vĂ5łd@€ć‰Ŕć͛Ówܑ~őŤ_Ľťďž;=ňČ#iëÖ­ůň”śmۖŤ%ÇځŞŇŠÝqىĹiçĹ;§e˖Ľý÷ß?vŘaéCI;í47h.Ök&^ˇü™đRžű3ÍgŘËD`Oş‚čßÜ:ŤXyiG[—âŽGťx{ÜVż˝j—U̗ăoذásUœ@€Ŕ& ˝qűíˇ§kŻ˝6ížűîé¸ăŽKGqDŽ/Y˛d +{üńÇÓ?ţń|˙n¸!=ôĐCé´ÓNËbz‡Ôiv óšŢ&V2ĚâźW­Zu^ĺŻŤŽ­Őľšşś„Kžă˛j‹Vőxé/2űŞ×]U8ÇŰśz†­żä) ş‚ @€@łślْžńo¤›ož9]pÁiőęŐíĎfďÔy4k!ív˙áHűŘÇŇŃGN>ůä´xąöďš+ðŢ&V3—ĚĘůť€ž›ż(ŠŕC€ 0$X׎]›~ýë_§w˝ë]iŻ˝öJ˜ú7îÎű{ ŁŠöˇmß\”(|⟘ŢůÎwŚO}ęSiѢE餓NĘś‰ťĹz›XČ2kbşs=†ŽOP @€@ă$VuÖY×Ë_ţňô„'Ÿ“~ÉK^’ŢúÖˇŚ<0˝ýíoĎg™- żřĹ/ŚßţöˇSDĽĆ”@÷ŘΗ/‘۲[+˝G:ć˜cŇ~đƒ¤šÎśĚf˝žăë^÷şôä'?9ýë_˙š´ŽýčGůŒóšśóĹlśĚçŤ?zžČs_@€Ŕ Óą=÷Ü3íˇß~yĽ›6mʢPmuלm¸[łHÖąŠSN9%Ÿ›ţÚמ–nšĺ–źŰ|ŃEeěcŮňŇŘÇ÷pťü-ŰwŁő!9}€đŠO}jŞÎŰć]nľ÷[Ôˇßőz~Úm˙Öˇž•é̸㶚›ëłľ/{ŮËҕW^ŮOóŸkfý˛†~čax Ě€ 0b{ěąô›ßü&‹ç]wÝ5ŻNąţóŸ) éęuvSwQ7W;ǛÓe—]–_3÷Ś7˝)IčnŽ.ąf͚¤]ç{ď˝7Ç%"•Żv N} đď˙{+V;ţ–´éąMůŐyš‹><¸Ë.ť¤§=íiy'[ą~ËlÖŤ5꒠=á„Ň駟ž.żüňs›ŽŽ~đƒůC˜úäĎ~öłvŽŢnrÔQGĺÝ듫?>ÄŢ}O=őÔôŐŻ~5Ÿő>돳Ň>đôóŸ˙<˝űÝďN‡~xŢíÎç˜YżŹ‡Ą"†§Ŕ @#F@GôŽg 4˝sYbUP˘NbMťż‹&ҢüiB˝ýÖôŤÎMßöŤüŽćmT°őrÜĘřŹ•–ŰWŹ\‘wO%\oťăöô–ˇź%ý×ĺ˙•?,(‘ŽNůÚĄŽŢaVíHkŹźs[ÍCmš“ćś÷Ţ{g­9ďśŰnů3ý1›őj‰*š˙Eďź(im§zZş÷÷暊MÜž÷˝ďeąů˙ť<}âŸHď}ď{ӕW]™îźóÎtîšçŚüăůŘËÇ˙ďÇÓŻ>#}˙űßĎküýďŸŢ÷ž÷Ľ5ď]“Ž~ŢŃiˇĽť%íę˙űü{՛ߔ˙¨™kfZ×B-ě@/Ô'Çź!@CL@ÂV\ž|yqzۅŤlűš ŠÄłôłŒDu{đł]TŐsŽluí˛d—čÁ‡˛ŻĺK,Ÿ{Κé’K.IG~DŽë>‹/ŞĆRFKHŤküJ´çöÖ\$ uZ咽ítżëŐÜÖŻ[Ÿî˙ËýéřăOĎ;ęyiőęŐéŽůŸźĎý…/|a~{ČáĎ=<˝í‚ˇĽ›nş)ď¨_óßפƒ>8˝ň•ŻĚgÍ/|ű…éîťîNż¸ůmNú㔓OIűîťoZV}€rçwN˗-Oűîłďź1ÓÓY¨…č…úä˜7 @`H řh…žýOBÍ;ĐβŚŻ#×_ý”WËI,ëƒzj×X*Ÿ˙üçó:ô–Ç<Žî3š´vŁ5?톻]s”řŐθÚŸÜˇł7Űőjd߯}čCůF:˛˘cž*š“Ž›xĎzÖł˛ŕ˙ă˙˜îťďžt衇śŰöŮgŸ,”wž^Ýçzpű˜u1ˇˇě`˜MžÇÂó؁^xόC€†ž€DĽ.=HÓĺčh[ťĹÚ1Ţqé|Ż…aŒëmÚ)~Îsž“ó%*ßüć7ç*^xᅓĆp?ßWţ˘E;vŔ[~k^>R˘ůö[fł^żćškňŮg}¨Q—ÎAëł^ą§šj­şź.ËXšre:蠃’ł|ˇéŒűďż?‹h÷‹ăšŻlĚ$ł~YC?ô0<ć@1bú@ŸÄœ„šD™…™ŹvĽí[´ŮĹ+^‘…Ąž-PEíÚMŐîŹóŠ+r_ľiçXťˇ?ţń“Ţ í1ÔG—ďSĆĺűŇůe}˝ˇňű-ęŰďzőć ‰f˝aDëÓŽł^Ý÷âż8ŻMóC˝ÚOóT]|éK_š×§Oę-%: ­6í\ëÍ"úCD}UźVYÍUťřĘw\1_sĹŹ_ÖĂЏ#Ăđ˜ @`„HÄ-Y˛$1¨ŰVťŽNE˘NńźóÎËťÍ{wÝuWzăߘżÍPBĎEšzoňŐW_N<ńÄôĚg>3qĆnÎV÷ňî˛wŠ=íţjZ"Zsî6ŻIƒG}fłŢ+ޏ"yć™Sük_űÚtńŧK/˝4 ]‰bíL?üđĂů &W]uUîŁweżăďHzƒ‡vŁľ˝ÉDçĎ],œíŸ}öŮéüóĎĎ4ÔÎ~YÍŹźßBó'ü U7ń žťëŹbĺĽ?st)îz´ú—o+/_V1_ŽźaÆĎUq  @ ˆ€vcřĂćbšřÓYc‰_ɋŁű˘´ăú—żü%=ăĎČť­Ýł§oľ€Öh Í|0ďěęĚÚńŐ9ä~JSëíto |˝%D<ôaŔ˛č•J7ĺŻ*/Űę|ĺkŢz6ÝĘ ˜uťg5§óŞöuŐĽ—soŽŽ-á’️ڢU=^:›c_őşŤ çxŰVëîxڇha˘@€ Đ(ĽK—fŃ{Ýu×e+Áę]иƒl!ÝIŤěľ×^ůÍMMN÷Ń\\ôNęŸüä'ůunšsżĽŠővşżŢâň”§<ĹŐIVG/t¤×˘ü^^Ű7(f˝ÎsóĐĂřT˜ @`H֛8ŕ€´víÚ|ŹBo–PÜglçc‰Ďž´ŤűőŻ=ż2NsÂ~ŚsÖőÎtuůć%Ű$łş{-”˜ŽOP @€@Ł´łŹ]S};žÎëƒm7nĚG7´=_E÷ÖĽw>ĺ+_Éo Ń5Wď†÷3ˇa]o?k)ű ŠYyŸ…äĎßođB˘Ä\!@˜1íĘęŹîqÇ—…Şž†úÖ[oÍuífv:ś1ăőĐÁÇ$ćůË_Ś÷ż˙ýYĐknłÝ}öť´§pCIDATí‡i˝žÓlě\0›Íüćł/"œOúÜ€ 0â$ÂtÎXŻĄűéOšnťíśü… GydŇ7ë=ýéOĎţ 1hˇYď•ÖŤînžůćźű|Řa‡Ľźŕů ú‚’ŚĘ0ʎ‰ľĚ%łşůű‡ĐuO @Đ/ôF ŮuëÖĺ/ţĐ0ô&‰ÎAŻĐ@ôĹ#űďżţÚk˝Oď“ÖyěA”ů\oë™fqŢĂ. ó[ P‡ @`ě H¨ęui:k,Ť/XŃ+ÔôőÜ:V1(-!¨ŁúC˝˘NoËĐŐď;Ÿ{}óľŢ^ç×-ož˜u›Ó°ľ! ‡í‰0@€Ŕˆ0Óq ]ÚýŐůčAŠgc´ ”V}ŽĘ|­ˇ‰őÍł&ć>c  ç‚2÷€ @` 4íŇꍛ 3nëäoá(^‡ @5čQ{˘Ź€ @` ĐĹËŕ€ @ŁF=jO”ő@€  ”z x€ @`Ô  G퉲@€ @@/ƒC€ Œô¨=QÖ@€ 0Pčâep@€ ^ ÜsĎ=˝ŚÎkŢ0 čm]@€ 1! ńźvíÚrľCŠ ›ţ*ď:á[ĆJß ęuĘu, @€Ŕ'đťßý.]ýőéěłĎöJJ X§ťĺşÍśĎńžě\ď@ÇÉ„m_   @€ŔÂ%ĹóŇĽK§[ˆuŁ­óĺĎY´€öbl˝°Ňw @€ 0&îşëŽöÎłÄsg KMißv $! =aŰ^'Žüاô{‡<@€ !'pçwŚo~ó›ů؆Ĺs8]ęŔŇďeu֕ś˝ôé)§é3Đ=Ý4$yAśjR=ú!* @€ŔB' ńüío;sÎ9Iâůîťďn‹ébmĽ.´F´-ŇçĆíuşŠIzŰnŤTN/yÝĆ  € @`ˆԉg€0œîUZ+ÚÎvĽ=ÓŤ€Ž›LźAŹwĘ픣xÝU71@€ J`ýúőSvž%žăNtą´:8Ś,†˜äĆžą>)i:g6şŰŘqBąű(^×ć¸měC€ @`Đ1ď~÷ť“Är)žĺo/ցśŽŰvŠŤ]m.ąîŘŹíLôL&Qćڗu-"ĆěGŤ:€ @`xŽËqçŮíۗWjE…Ł^Œíąé8cę3ÉMŰśuΟ¨J¸‹ë˛ŽK€ť.+ß1ů‹ˇˇ;.ë˜>Ŕh_1Ő“UěŮ6lřRe)€ @cB`ŐŞUgUKýMumŠŽÍŐľ5XĹt9&1k_1]ŽÉęŠńĘmÇ\WŽë­J‘Üô[8|óÖZ“sÝV9×Ε-ëŽmŤžSľKL[d[ŒÇ˜ĆsÜV1]ĘSąoëX´ŞS @€:ˆşMYmÝś˝Ž˜­ăŻśŠŤ…°ŰsßhŤ.í1]Vu÷iy­ŸŠ5VšКDiˇR7érq1Çmż­ľ śľśŐ˝Ý&+_mž“cňăUšíâÜv€  @€@-¨Ů”`Ý­ąŠbÓɲŠËŞ-Ú2Gy.e=úu9Ž•śŽ_™ÓŐoB@—7đ¤JQ޸ŻŘÇą:+ˆGm*1Gm*Ȏ+&ßýÔ7ÖĺűŞŞm‘­:€ @`zQ—)Ű:Ź›•‹íňËXŤl‹}U%śĹ¸ęn+ăłňť čęčÇśâ´oŚÉXŘĘÖOŘíň]ÜfŤ¸ëuVíiąŹşďŻ|ů*n÷ĘQŹSQžŠçŘňř @€ Љ€ő“Ű­ť˘ľVŽăŠ9cąóśŽ]1嚸ýŇ:×vRť4đ¤@átĐEnżŽŻĆňÄĘvˇ °ű¨nq캏‹Ú˘Ż¸EąâŞűŠmÎąU€ @ 3¨á”}ëşhĽĹ|)}ç;ăUڔ{t‹Šď@KSÚ•U݂4ÖăBVu]gąlßăŠMu۲â.ĘÓĺąěËş¨żJŒľ"ü„ @¨#`ýä6ë1[ĹĽÉěŤnß6śŠŽ¸ŠënWŹěăźhUEý]\cş­/۔€öÍ51‹Ń˛'­şŠcĽ(ď*k<ľÇ˜ŰŞp.žgŒ+枎Gť˝ë¤ţ1F€ @`*ë8ˇ”:Žô-€e;Ő5–ŰŹű˘-ǔŻ­sZ-;ÚbžŰfeűКœ„hˇsĘş|ٲîXPÝS6ŠäĘÍ%ÎÇuY]Ę×xömŤPť(F @˜ž€uš3Ł~s['1츏/ő‰q§ń]ś[Üm˛*ę7]é%gŇ3Đ< Mß,Ć4x§<ÇŁU]Ŕ4†ęńRÜbYíö•ŁâžŞ;OuĎGÖăşŰĘ\ů@€ î˘SfôU/ŻRËw,ć:VÚ˜ŁşŰUWéd[­;Úíťű9^úŽOą3ĐS:w hQźÚWŐ}•žăăţŠÉĹ‚Ů‚X9ŠŠ8ćşâŽÉúrť,€ @`f¤żTŹß˘o‘Ťv×ecÝýˇu\Öů1ŚşJŒľ"­˜Ű˘u{#ś ­ÉK”z1ŤŽ{˘^¤|×ÝÇž yʞîql-˜•gA­6÷—-ëŽ)OEžŠmËă' @€@'Qż9ÇZŽ›ľśUŽęĺĺ1Ę<ÇťYĎGVy.î#?ĆÝ>#ۄ€ŽťĄ&fńŞöčGąăŞë,÷U]% äV¤őSyjÓˇŘČŞżŹâžOéÇ6çTé@€ îRą†‹uk8ˇY ;}Ő})?Öí{YۖˇĂŸ.Ďůł˛M hMÖbÔu[MЋ‰uÇ:YÁ‹EB¸ŒéžęďśčŤŻçäşü2Ś6  @€ŔĚHƒšD=§˜4›Ű]wNôU÷Ľv×mÝg&ś&őQą-ëšąŸMhM*ŠŇrnˇUťęžHýKkQ\5ľ‹cꍹ벞WŹ—ůöŁU@€ Й€u˜­2Uˇďz'+Íç6"pݢŮVń˛î˜űČş¸nëxi§k/ó§ř3ĐşĄDŠKď6Yˇ{˘˛a!ěąbťú)GĹy-ŻőS1獿}Yů1Vší˜ďeëśhU§@€ t&`fŤL×e}yé:Ç\VyňăĽ|űî[Ú8FlÓxŃw]qĹb)ýŘ6Ľ>­€ÖwOTĽčŠ›ÄXé;ݓ‰šjsž­X,[+Śâ¸ęq<ľk\ĹÜGžëUuŠxŽ1Ő]Ęů9Ž… @˜LŔzĚQů1fß1Y‹Ý˛î\ďD;OÖőŘG1ĹTl[^ë§ÇŒ1×ËüŇOŇžNîd§Н:ÖÄułNBÔѢ%pUÓĺXô=Ž!YD;.Ť˜Ź.ő-ëU(Ç|?űΓO @˜k8Yi8ű˛öcnŒÇvŐK?ö‹mŽÇ˜çPZĺ6RúĐşy­u)'¨|—Řßy˛Z¸ŠĹ˛…oŒŤ]žďE´…ąÇ÷=ŻžÎq›b@€ ţ H{ůŇ(uuǢ•F‹žęŠĹ¸ëeÜýŞôśPW]Ĺmś­čԟjWąmy=üěG@—Ăꌤńćömc›úŰŻł¤˘6 d jů/ŠfÇݚsťŹb*˛uőܸý‡ŰcŒ: @€ŔTÖoąE1ÇËşňŹď,ˆc[Ćĺ;fëÜ^ŹîŠ<•˜o?7ôűŁ í‰DŞ‰Ę6ÎQ ,ŒŁőBcťúi,_ÓBZí#ŢSq÷Q]E~,ömcu@€ ŠŹ×l}ŐíËZ+Wu•wž­óm;ĹËv婔śÝˇß—íI@wř aÝ 5Ů(F=yçÖľiáŔĘSŽ}YIŠâńň˝s˝Şś)Ž˘1TěÇzŒĺ$~@€ ôDŔ:ĎV\—žSŠóëvšŻĹq'ëąójĆt\śĚmíz/ TrOş=ꎊ&Q'\cĚ9î%_,h—u\Ö˘ÖcYL+O1ů˛1Ďžlyß8fŐÜîWÖĺS @€z# ÍĺRÖë|Ĺ⼞öĽ×ÜGÖ~ˇşűƍ颸Ji;Ĺrr/?úĐÝĆö$-fkÁëvÇmĘâÚ˘Wžv Ő×mŃ÷=<śŹŻŞ:Šn_ś,î_Ćń!@€&č¤ĺb\uűŽG_#ʡPŽóÝćţĽď¸ÇőŽG_őĆJĎşć‡&'áiŤIĹş|Ĺ{)Q8ťĹ­ÚT$¤ŐŰ-šm•§âžl+kGž}, @€@=k0ˇÚďd•§śňr\Ö:/ć8&ăÓŐ5^YÔÇĹuŰďőř†’{ĐžcŤ X¤*ĹRĚmŽŠ}ş"PękŤş/ď@Ű×XŰ1Y•Ňś˘;~ş}G„ @€@/ŹżĘ\ÇŁUÝžňíŰÖĹÜ6ëqlŐ7–ҏm=×g$ kvĄën¤‰I˜z‚ŽŰÖőqL}|TĂă¨_ź”kż[]m*1×~nŘŢć:€ @ wÖzęQÖŁďvÇdťŐÝsźŰĘşďcű+ÖąĚd÷YƒĚH@×ÜU“@UŠŤ{âĘqťcšSřáö¸ëŹfÇŁîVWĎÉőč+V–éÚË||@€ 0Ž:i9óP{Ěq=Únő˛Mž/ÝĂőhˇU›ëŰŤľsrیěDĽ¸gÔAÉU b=7×´)ÇyŃ:nëţu9umÝbjSńX-oŞ_—ă\, @€ŔduⱌEßőhc]ŁËą:?ćš=ö‰íŽËŞ8ŻĺŚťĎ`ś;ĐĂ*…ŞÚ\”ăv×ÝO9Ž9ÇýęÚÜOšşÜ×}ˇ/Ǎő˜C€ @ ?ÖgęëöcĚuY×cžcŃ:ˇŒšŸŹŠŰ[ŢԟӵOíQiB@—ĂjbŠÓŐ˝ĺť^ŽgßcylĹÝÇ1cß}ec,Öcu@€ ™°SŻX÷(Ž•6捭l~ŮŰĘűÄqËşsgeű:ÂĄ;Ç8<‰(LëęŽőb•ăź|Ëí7qŹ“-çâ<ÇăX1F€ @`ć,fcOÇlÝf:Ť|ĺř˛?sËşüÔĎń őë[@çΓĎB+¤kˇz]›bŽOg;ÝËýÔŽRú­č䟽äLî@€Ɠ€ĹoˇŐ—9ömŐˇŽîX-cĂqű˛*â­Ć~>˜{6szűPľFˇ8-ëęPśĹ…z@÷+­Ú‹őr ßĂ㕾űş @€ 03Ľţ*}cuuÇlcÇlÝVúŠŤÄx+ŇŕĎYí@k=ĺČiŜ-bKsÝcąŢŠ=ć¨îóĂB€ 4G N¸–ąčťnŤ™ÔŐťĹb[ŮżÎďűč†Sć5Žk'?.Řů1Śą:çŠ_Ź+_žÇ“Żâœ–7ůg™;š€ @Ŕşi*çŘĆÜNuĺvj‹qçĹXŹť]ÖĽlw|VvÖ;Đžű,w˘ŰĂT•RĚÎÔ×Xe?][ĚŁ@€ ЁnBľŽ­Œőâ÷’g[ćĎzçكjÚă{â´˝řĘQ~ŮÇc–Öůeź“ď9tj'@€ ЁR{•žîTsźl›ŠßÜJśÔŘ´gÖa'ZÍÄN­‹•9яőncÄśş{”íř€ @Í(En9z§öuőŸÎŻËÉ÷í÷uušs͏Aď@Ç[zŃQ+Vúű(Vćş_Ěq_, @€ŔüčUŸĹźX÷Ěëbj+ăĽďţąď@{–]v˘•bńëôN1ˇ×ĺwjë–ë>X@€ š#P Üҏ3™i[ÇüŚwž=Ɂ hÝ`S<‘Âö"‚{Éévâ–¸€ @ č(j‹ń{Éë”Ó)žo1(ńŹÁ*  ¨!çâüŰŤXvי杀 @ Y]…nÍ­şĺwkËC R8{Žs" Ű7Ť”´ëÓŘ^ňzəć64C€ Ě#iq5ˇ^r{E]/,ćT@{B=îH;]v6by6}ă¨C€ ôF 'ŃŰa¨ő‹çržó" ă$úÓąťęä’> @n3ÉĺRćC4Ç9Ěť€Ž“Q˝A]‰@€ °€ ̡`.Ń €.'(Q]G… @=Ă&–ë/]7ńşBťŽ 1@€ 0˙‚0î•ŇH č^M @€ú%°¨ßŽôƒ @€Ŕ8@@ăSgÍ€ @}@@÷ŽŽ€ @ăH=ŽO5C€ ôMÝ7::B€ Œ#ô8>uÖ @€ Đ7˙."ŤŃö[IENDŽB`‚gwenhywfar-4.15.2beta/doc/dialog/images/Makefile.am0000644000175000017500000000061312364015347017053 00000000000000 EXTRA_DIST=\ fox16-1.jpg \ fox16-2.jpg \ fox16-3.jpg \ fox16-4.jpg \ fox16-5.jpg \ fox16-6.jpg \ gtk2-1.jpg \ gtk2-2.jpg \ gtk2-3.jpg \ gtk2-4.jpg \ gtk2-5.jpg \ gtk2-6.jpg \ qt4-1.jpg \ qt4-2.jpg \ qt4-3.jpg \ qt4-4.jpg \ qt4-5.jpg \ qt4-6.jpg \ cocoa-1.png \ cocoa-2.png \ cocoa-3.png \ cocoa-4.png \ cocoa-5.png \ cocoa-6.png \ cocoa-7.png gwenhywfar-4.15.2beta/doc/dialog/images/qt4-1.jpg0000644000175000017500000012117212364015347016373 00000000000000˙Ř˙ŕJFIFQP˙ŰC  !"$"$˙ŰC˙Ŕن"˙Ä ˙Äľ}!1AQa"q2‘Ą#BąÁRŃđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚáâăäĺćçčéęńňóôőö÷řůú˙Ä ˙Äľw!1AQaq"2B‘ĄąÁ #3RđbrŃ $4á%ń&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚâăäĺćçčéęňóôőö÷řůú˙Ú ?ú/GŃíćľÎMĂĺg =MdxĎTđď†Ú)ôŃ{¨^1KKVÝ,Äu<Gv$]…˙ {s˛?šýď­|ßń›[Őt˙ŒşŹĐ¸ŒĂkíŒíŒ sˇęĺŤęrŒńřÇAJÉ_Ëc‚N1‚mŁ?ˆŚÓáűfłđýaą2Ig~ˇ2Ä=Z<.@ď´ąö5ŮéŢŐôË}KMŽÂęŇáĹ*JpĂúcČŻ–|IüZ‹0ô(¸ţUé?˛Ž§w=ż‰4ŮZÚŢé&ˆ@F6ĺƒĺőęçy \ş‚ŞçÖÚ7ú“ BNÉŃý‹Śϕ§ýüŁűL˙Ÿ+Oűů\'íŤęz'Ă;CIšk+ĽżąŒM ႽÔJĂčT~ľÎü1ń˙‹žĎĹמ*´‹Z‹Lń ޟ žMuÉ„ŞŽč”tsóőňnŹÓľßŢlĄ^ÇŽ˙béŸóĺi˙(ţĹÓ?çĘÓţţW€j:×âfĄho5$´“Ĺ:u­˝ąŸĘň#“OiYH9†JńĎ~+Ă?|s‹8dţËťÔŻź/¨j6Z—Úškˆ¤ľÉw mÉ\ěĘqœOˇ—v?fťLbéŸóĺi˙(ţĹÓ?çĘÓţţW‡Ü|\ń†™ĄxJĂű LÖľÝcImAĽś3Iˆˆ„.ŘÓ"V-ó`OqZúĹr×YĐëĂi&Ľodó]Ţ ĺË;aĄ-‘/1# ćŸś—ó1{5ŘőŸě]3ţ|­?ďĺŘşgüůZßĘó_>%ń‡ˆn|Y‰çŃŽ#ÓľëË(DDąyr@1÷YžcŢ˝C?ôÎ/űčŐ*“j÷bqŠčCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙ž>y÷x­Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙+Ÿńö‰Ľ_ĹĽÚčÉŠę“&ôľˇ¸7ť„_Ż'°5Ógţ™Ĺ˙}đ{Ý_Rľń—ˆćI<šŢýă-Œˆv íˇÏĆÔĂSRMę{Ü?“Ă4Ä:nÚ+úž…sŹ[éaeń„#ą˛$şˇşűJEîŕŔ{€kŤIŃ&śY⾲’)rÓô–KÉîÖ]ŁšP¤œţę+Ň|)áŰ? x^ Ě,‹łI+ŸšY–sîMtTVxuOđDߍÄăÚu§{1ńpb+!˛1óˇń{QVž9ôťqš~÷Ls÷Eő”ęsSŒťŁĆjÍŁŐ4s×ćVůOAďVjśŽsŁÚüĘß)č=ęÍ|Î'řŇő;(˙ W1uâ-sĎcaáiî-O1M$ކEěŰDm€zŽzœ1‹–Ĺš(îtôW'˙ ‰˙čOoü “˙ŒŃ˙ ‰˙čOoü “˙ŒŐű)í"u”W'˙ ‰˙čOoü “˙ŒŃ˙ ‰˙čOoü “˙ŒŃě¤Ň'YErđ‘xŸţ„ö˙Ŕ™?řÍđ‘xŸţ„ö˙Ŕ™?řÍĘAí"u”W'˙ ‰˙čOoü “˙ŒŃ˙ ‰˙čOoü “˙ŒŃě¤Ň'YErđ‘xŸţ„ö˙Ŕ™?řÍMeâ=P]Fšˇ‡n, ‘‚,ą´“äáWo–¤äđ1“’8ĆHNœ’¸*‘gMEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â* -QU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐWíĂţúÇţ ŽřŠ>Ü?čŹŕŞç˙ˆ  TU_ˇúëř*š˙â(űp˙ ~ą˙‚ŤŸţ"€-QU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľEUűp˙ ~ą˙‚ŤŸţ"_ÄŮ o¨HĘvş%„Ěńœ‡P™\‚Č"€-ŃU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐWíĂţúÇţ ŽřŠ>Ü?čŹŕŞç˙ˆ  TU_ˇúëř*š˙â(űp˙ ~ą˙‚ŤŸţ"€-QU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľET7ń. śú„ H]óŘMN,ČÉ y$ôżnôÖ?đUs˙ÄPŞ*ŻŰ‡ýőü\˙ń}¸Đ?X˙ÁUĎ˙@¨ŞżnôÖ?đUs˙ÄQöá˙@ýc˙W?üEZ˘Şý¸Đ?X˙ÁUĎ˙Gۇýőü\˙ńjŠŤöá˙@ýc˙W?üEnôÖ?đUs˙ÄPŞ*ŻŰ‡ýőü\˙ń}¸Đ?X˙ÁUĎ˙@¨ŞżnôÖ?đUs˙ÄR}ž-ŰßPI,ą˝„Ë#Œ•R™ldgă#8  tU_ˇúëř*š˙â(űp˙ ~ą˙‚ŤŸţ"€-QU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐWíĂţúÇţ ŽřŠ>Ü?čŹŕŞç˙ˆ  TU_ˇúëř*š˙â(űp˙ ~ą˙‚ŤŸţ"€-QUüD”ú•pL_`›Íç łfíźťČ#9Ľűp˙ ~ą˙‚ŤŸţ"€-QU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐWíĂţúÇţ ŽřŠ>Ü?čŹŕŞç˙ˆ  TU_ˇúëř*š˙â(űp˙ ~ą˙‚ŤŸţ"€-QU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľE6#š$–'Y#pYNCЃéN Š( Š( "řäŇíĆĺűÝ1ĎÝQńČ˙ĽŰË÷şcŸş(ŻŞĄüz#‚_=SG9Ńí~eo”ôőfŤhç:=ŻĚ­ňžƒŢŹ×Îb/SŽđĐQĽś4}8ӍżţŠZ*=9ą¤éĂţœm˙ôR×9ĄăzçĂŢţвą†ţéď-,á‚kƒ3Ü\Ç–pŽT(' ztŹćńUޑž_6‘Ły:}îĄ%˝œłßnśˇň7Ě%1Gˇg˜AËbېŠůXTß4řJ|24fŠŇh_Pąžâ+ĽÝ°Ăw ŇĄ!ˇ$l#Ms.řkk5ő—„tÝDľšđŢąŚ`€[ĄšźĄ$+c[Í×îŕŔΕţ!ř]m`¸óő'[—tˇHô‹ˇ’pKIkgˆOި)󚙼xűMÔźw?…­­uۧÚŢÁzś7 DÂfÁ“ËňŃBĤ9|33 ů‘…Vř‘áëým,$Ňěl&¸ľ*K&§q§Íýż4s@ąňüČF ČÇ-đţ‰âM+ĹvڍÍ͎Š·e§jwRJŃMç[†óR0…\HÓň &Üdné@*ńšcâ]/AĐ4]?Qšžłşźv˝Ô^Ń#HÝa”łp;6žj•—Ä˝čđŢjI{gt|áui¤×jbšHd.aF ™€;`¤ö8w‹|"ž#ń†ŠÝÜÝEca§ŢŰşŮęWs4“IjÉóBĘY1 ™ą’źŁÄţ ÖM՝Ÿ†¤Š !ošëwšwŮĽŢěÓmó\ šWuĺIÎXšëuŻřkGű/Ű5oľAö˜Íľ´ˇAÇď˜Ä­˛>GÎŘ_z‚ďâ…-tÍ7Q}Fi-ő+5žś0YO3›fPÂgDBŃŚeœ(ń^{u˙Ă=C–ăWđÚ]7†-4[Ą¨\K-°đ313?îˆFp`áşOĂÝlřsÂwđĆí{…Ź4ŤŰ'ׯtŻ-ĄBwoľÎň Ž şö#œ€{E˝Ä76ńÜ[ʒĂ*ŽDlŤ)ÔY>0oř–ŰŸKëoýľ'†lFđ晤GQĽœVʑ(Ą( \–#Ž7}I5WĆ-˙¨OĽĺš˙ČŤLE6˛üIâ}ÚŢImîŽçťœ[ÚÚÚ ig”Ť>ŐÜB•‰b yŠ|ďzŔńÝş_čŃÄúëŠ“Ź†Ž„G€q$NJáÁŔűÉÁ<ö Ú/ˆšú§żŃő- Ú¨yF ą…Úrw #wŒ´ç ‘Ćq‘V4Ďhšž›&ĽŚë:uíŒ[„—6÷)$I´e˛ĘHyâźžçĂŢ&Őź'â 21ŞéÖwŃôű=OQKť•hĽó&F3(YQťHÜHÁĹ2 ëwş7ˆ&šŰX’öőŹÉÖfąj[iźĆ‹m˘UuýŮf$@ äéđř§ĂÓh˛kpëÚ\šTd‡˝K¸Ě ƒƒ™Ú9÷˘Oxz=* VM{KM>ŕ‘Ó]Ć!”…f;_88TsÁč¤ö5Ĺë‘jş­†™ŞĹáI-ĺÓő…˝—K–x<Ű´X ÄŤ˜÷Šue˙ĺ’ň: űjWZ–›¨ŢčąŰA'ŠäŐäąy#ąĹýŸ,*͂Tš›k…°Ňg'ĐŁ'‰´ĐÎşšć˜ÚJŒ›áv†Ü ă>fvőă­PđoŠÄ7~ 6÷W66Š[YĎjűÖXÚŇŢmŁ!Žéœd``ů'‹Ô´ZKQÔ­´•ź‚ĹŤCb˛ĆŚîěřĄbťˆPÂbňĺrŃç# ÖżĂK=BĘoŢj(ц§­Č-źŘÜě6ÖčYź˛@bńš#=sÉ$őŻÄ+iŻË kVş{jriqęrŹÝçIÚßIZE *•HéšŢ°ń.ƒ¨jsévć™wmŸ>Ö ¤ybÁÁ܀ĺyă‘\'…üwľä×u}TŔšížl ž–h)˜ÝRM­!Ă@ƆtořR}JĆöŢŰK¸›íqŻö|v0ŁZ̀[,+ç÷”vPVˇńO‡n5VŇ`×ôŠuÄ։yL+1R€îÝľXă“ŘÔś~"ŃouK*ĎXÓŽu a›‹XŽQ拜|ČWńăş]Ůkż4 ćŃď.˘“RKˆd;,î#’DĹŔg*_x\9QÉć­ü>𞽤ęú žŞuŮÓE3báĺÓÖÎBń:_.1rۋ*äsÉf*2ěţmP‚_ř¨oý:A˙ĄÍGďTĄ—ţ'—G?ňíţ…-7<Úä5^Ůř‰t%đ/‰nneŽy­Ú)lO/<ŠZä3,x žnœtw˝`_Z]ËńGՒ,ŮŰi7öňɸ|˛K5›"ă99HrŢzŒ€?Â9Ó5V’Â˙VŇ Ö?´oí˘ą[…Yž8.ć…FXą%#‘ĆrFüŢ.Đě,ţŃ­kšžŚ[…V}E6Šo-ŽćŰó)(ŰnNéZá$ňŁ“P[V”„•Y7źlNÚŘĆEdŮřsSľńd7[JÖ0řĄoVYn|Ç6ĂCű ‘™˜ť7ĺ;˛ÇďŽj tM^ďÂWţşĐäd_Ç~$’XZťi5ľ9QźˇË;•Őrx]Ô ô_ŃőËgšŃuk N}%ĽÂLŞŢ„Š jçľ_ˆVÚnĄŤĹ6­I§čÓ,:†§ŔÖđ s+ćůĽU%BHŒĎĽe…ĹŻÄkTë•Ţ™aHĽFůŁ’ë~@ç!^Hä` ŕăř:ďU×|XÚŽŻŞŰhúŚŁ˙gŔđo!vŃąvňĚ Đ¨uČ^˜9 ßü$şößööć™ýŤŒý‡íIçăϗÝ9éLšńO‡mľ_웍J‡QʲIy͗`¨6ťćfP8äZňgFń­Ţ˝ic{¤>$‚ůVŰű>;n.ŐÚNTܙŒ{‹ňš%đX­ˆŇîŔâMĄĂpŇxÚÖů51q ˙Y|“…ŮťÍóV&ٍ¸ň×;ąĹ{ńŠşŘĐÎą§ TŽńdnSĎ+ŒçËÎěcœâ´<Úńˆ|'ŻEâ‰"š:íœř‡ű]%‚]=-óüŐŢZ?ľnUů ‚C€Ę§Ö<ďzË˙ ™˙§I˙ô8j˙›XsK˙ËSŸův›˙BŠŽůŢôŸŽxątý[ű&ËEŐ5Ťőne‚ÄD<˜™™U™Ľ‘ć(ŕI;O,&ˇqg-וŚE<Čńj.Q’HăŔŒŒ2ĺđ\6hń¸8#–ń݈şŐ ş˙„OVÔ¤X<´žŇ5Ułšć$Ł,D§B>f䟔w̃KńJ˙dÝęšjë3Á˘j–sC=Äd1žćÔÁ Źp÷QîcIƒ;xŰĂŢľ†}wTľ´óŽ!KˆŃϙ*ÇżĂä]ŘöUcÚłßâ‹m⛫=G\Ń-4“ĽŘ^ŘÝËvˆ.âK všmŽťaŒŽßď“‘Ž"ßÂ>!Ń|?wŚůoŻÜýłLÔ÷ÎU–ams kű×ŕ(ź˛Nߘî!˛ĎÖiúcŢxëR×ő Ećƒch‚ăËy„ˇO4-ľ˜p$‹8%Obq@WˆľŰ]ĂzŽżt$–ÓOł–ňQ 쑡sˇ$HdďYzg šţ[ cIÔ|;sŤ]…Ôš  2Ť¸’)]0Ľ“ °#păšćEÖ_ö|>{bÚÓxSű<Ŕe\›˛y{7çoßă9Ç|â“Ä^Ô˘Ó/5]NűĚŕŠ8m›SKR"‹ĎŽIHąÇ™űľe.Ή“@ޙâMSÓeÔôÝkM˝ą‡w›sot’D›FN]I““LŇüQáíVŢk/^Ň1,Ň[]Ç"Ƅ° ĹIe“ÇĘކźŠ=Ĺ3Űř˛÷T†ôĂs—̢4 S-ť†l +o,ľk>;‚ĎJmę{šhIZ瑖BždA™6ŽxÚČX`â€=›E×tnĐŢhÚĽŽĽlĄšŇáeMèܤŒűUß6źďᾛ¨ŮęZžŠŠÇޤ÷Šo:¤–%ŰËó9 hĄć%ˆ`í|ďz\đÉΖÇÖîç˙GÉZu•áS>ˇ7?ú=ëV€ (˘€ (˘€<‹ă‘˙Kˇ—ďtÇ?tQGÇ#ţ—n7/ŢéŽ~č˘žŞ‡đačŽ |LőMçGľů•žSĐ{՚­Łœčöż2ˇĘzzł_9‰ţ4˝Nş?ĂAUŹ:VœGCco˙˘’ŹŐM7ţ@úoýx[蔬 ňhɢŠ2hɢŠ2hɢŠ2hɢŠ2j†˝e6ĄbśđĄ˙?:gýý—˙Vŏý¨ĎΙ˙e˙ăTcęóóŚßŮřŐlQ@˙Řú‡üüéŸ÷ö_ţ5Gö>Ą˙?:gýý—˙Vŏý¨ĎΙ˙e˙ăTcęóóŚßŮřŐlQ@˙Řú‡üüéŸ÷ö_ţ5Gö>Ą˙?:gýý—˙VĹĚZx6ŢÓT¸Ő-lü;ýČÄ÷Q#ʞöœC–éÜŐ˙ě}Cţ~tĎűű/˙­Š(ý¨ĎΙ˙e˙ăU h‚ŢËsöÍ3÷‘˘mó%ăicŸő_í~•˝E1˙ąőůůÓ?ďěżüjě}Cţ~tĎűű/˙­Š(űP˙Ÿ3ţţË˙ƨţÇÔ?ççL˙ż˛˙ńŞŘ˘€1˙ąőůůÓ?ďěżüjě}Cţ~tĎűű/˙­Š(űP˙Ÿ3ţţË˙ĆŞŚŻá4Ö,͖­¨Z’ĂtT$t;Z"3] ġĐn­ŕŽ y4ˆaB$hňŞŞŽE€)˙Řú‡üüéŸ÷ö_ţ5[P#÷@Ô.l§śűf˜žll›źÉN21ŸőU7ö>Ą˙?:gýý—˙Vŏý¨ĎΙ˙e˙ăTcęóóŚßŮřŐlQ@˙Řú‡üüéŸ÷ö_ţ5Gö>Ą˙?:gýý—˙Vŏý¨ĎΙ˙e˙ăTcęóóŚßŮřŐlQ@˙Řú‡üüéŸ÷ö_ţ5Gö>Ą˙?:gýý—˙VĹĚ_x6Ţ˙PśÔ/Źü;uyjsoq2;É Î~F0ĺ żý¨ĎΙ˙e˙ăUąEc˙cęóóŚßŮřŐCq jËo'Ű4ÁäČ_dźüŒ¸˙Uţ×é[ÔP?ö>Ą˙?:gýý—˙Qý¨ĎΙ˙e˙ăUąEc˙cęóóŚßŮřŐŘú‡üüéŸ÷ö_ţ5[P?ö>Ą˙?:gýý—˙Qý¨ĎΙ˙e˙ăUąEc˙cęóóŚßŮřŐPoŰś˛şÓYřtęj›đŁůáqŒoňwcł]= ÇţÇÔ?ççL˙ż˛˙ńŞ?ąőůůÓ?ďěżüjś( F čƒ^ĹsöÍ3÷qşmó%çqSŸő_ěţľ7ö>Ą˙?:gýý—˙Vŏý¨ĎΙ˙e˙ăTcęóóŚßŮřŐlQ@˙Řú‡üüéŸ÷ö_ţ5Gö>Ą˙?:gýý—˙Vŏý¨ĎΙ˙e˙ăTcęóóŚßŮřŐlQ@˛čw’ÄńK6•$nĽYZIH`z‚<ŽETŃü#hm4{oéÖĺ‹ůVŞń&ăÔíX@Ď˝t´P?ö>Ą˙?:gýý—˙Qý¨ĎΙ˙e˙ăUąEPŇlő>Č[ҥĒ>ď´Ěż}Ůą$ôݏ­ÄËűşWţÍ˙ĆjZ(/ř™wJ˙ŔšżřÍG%ŐÜv°ÜEdVâChnАŒÜ†xůqÖŹŐCţB:Wý|ˇţ‰’€4¨˘Šň/ŽGý.Ün_˝ÓýŃEú]¸Üż{Ś9ű˘ŠúŞÁ‡˘8%ń3Ő4s×ćVůOAďVjśŽsŁÚüĘß)č=ęÍ|ć'řŇő:č˙ TÓäŚ˙ׅˇţ‰JˇU4ßůéżőám˙˘R°4'ŽsĹZĆŠ­ŚčV‡SÔ#šq5Řf†Ţ|°îUH.wK…~ń9祅S˸slŔÄĄ™™œg§AÓŇš˙č7ĽŐާŚjGLŐŹ<ÁopaFÉ ]ńșíCĂ)Ę)ÔŸ‡Ç#HÓľ‰őkCńšeÝľ¤Ńřy?Ň"–iü°4ŽP‡#řňp˙.Wý÷Ž>Čbź+âoţĚnîlaKy&´ƒ{*É!l;ś1UFf — Z_jWóÝßëZý˝ĆŁs>”Ěöşy‚ŽĆđÝ*i]˛ĹÝK8Č qƒ{Ä~ŐîľŮuŻř‚-"ęęÉ,nĚÖ?i3´lƒzl‘L˛`ĂćĺN) ŃŃ|IŚk“Ůiď$ÁtëMI'yrCrÓƜç?¸brzóŽr/‰śKftßx‹R7:-ŽśE´“ ľĆýťˇJ>q圢î'řw`âTđ=ö•qhţ×ÓJŠ-"ŰH•.,žŇÍš“Ęd;Ô$ƒÍ“’NFWŠçô?xŁIńŇ´O {é:S^ÍĽ™cşhžíYyŠE[œ(ܧ Ч顜ş–m¨ŘĚłÚÝB“A"ôt`X}A°< Šëwˇ!Óőéôű›'T[EžĘŐíŇDkKyÁ(ňHAr>÷8 ŮĐ4ť]BÓô[ÂÖÂÖ;X‘¨UÉőŔƒŕżř“GÖő›ý_^Ňuľkw,VşL–Ě“a„Íq'ɲ•#;˜Ŕq@ޞŠr¸v÷xćFi|Ĺ˙Ÿ{Oü˙‰Ś(§ů‹˙>öŸř ˙G˜żóďi˙€Ń˙ń4Ę)ţb˙Ď˝§ţG˙ÄŃć/üűÚŕ4üM2Š˜żóďi˙€Ń˙ń4y‹˙>öŸř ˙@ ˘Ÿć/üűÚŕ4üMb˙Ď˝§ţG˙ÄĐ(§ů‹˙>öŸř ˙G˜żóďi˙€Ń˙ń4Ę)ţb˙Ď˝§ţG˙ÄŃć/üűÚŕ4üM2Š˜żóďi˙€Ń˙ń4y‹˙>öŸř ˙@ ˘Ÿć/üűÚŕ4üMb˙Ď˝§ţG˙ÄĐ(§ů‹˙>öŸř ˙G˜żóďi˙€Ń˙ń4Ę)ţb˙Ď˝§ţG˙ÄŃć/üűÚŕ4üM2Š˜żóďi˙€Ń˙ń4y‹˙>öŸř ˙@ ˘Ÿć/üűÚŕ4üMb˙Ď˝§ţG˙ÄĐ(§ů‹˙>öŸř ˙G˜żóďi˙€Ń˙ń4Ę)ţb˙Ď˝§ţG˙ÄŃć/üűÚŕ4üM2Š˜żóďi˙€Ń˙ń4y‹˙>öŸř ˙@ ˘Ÿć/üűÚŕ4üMb˙Ď˝§ţG˙ÄĐ(§ů‹˙>öŸř ˙G˜żóďi˙€Ń˙ń4Ę)ţb˙Ď˝§ţG˙ÄŃć/üűÚŕ4üM2Š˜żóďi˙€Ń˙ń4y‹˙>öŸř ˙@ ˘Ÿć/üűÚŕ4üMb˙Ď˝§ţG˙ÄĐ(§ů‹˙>öŸř ˙G˜żóďi˙€Ń˙ń4Ę)ţb˙Ď˝§ţG˙ÄŃć/üűÚŕ4üM2Š˜żóďi˙€Ń˙ń4y‹˙>öŸř ˙@ ˘Ÿć/üűÚŕ4üMb˙Ď˝§ţG˙ÄĐ(§ů‹˙>öŸř ˙G˜żóďi˙€Ń˙ń4Ę)ţb˙Ď˝§ţG˙ÄŃć/üűÚŕ4üM2Š˜żóďi˙€Ń˙ń4y‹˙>öŸř ˙@ ˘Ÿć/üűÚŕ4üMb˙Ď˝§ţG˙ÄĐ(§ů‹˙>öŸř ˙G˜żóďi˙€Ń˙ń4Ę)ţb˙Ď˝§ţG˙ÄŃć/üűÚŕ4üM2Š˜żóďi˙€Ń˙ń4y‹˙>öŸř ˙@ Ş:‡ü„tŻúůoý%hż6Öç|ŻŔ÷ŻŘtŹíCţB:Wý|ˇţ‰’€4¨˘Šň/ŽGý.Ün_˝ÓýŃEú]¸Üż{Ś9ű˘ŠúŞÁ‡˘8%ń3Ő4s×ćVůOAďVjśŽsŁÚüĘß)č=ęÍ|ć'řŇő:č˙ TÓäŚ˙ׅˇţ‰JˇU4ßůéżőám˙˘R°4-Eţ˘çý返”Ę|_ę.ދůIL Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ˇüzŰş˙ú5ë;P˙Ž•˙_-˙˘d­˙[o÷_˙F˝gjňŇżëĺżôL”ĽEP‘|r?évărýî˜çîŠ(řäŇíĆĺűÝ1ĎÝWŐPţ =Á/‰žŠŁœčöż2ˇĘzzłU´s×ćVůOAďVkç1?ƗŠ×Gřh*Ś›˙ }7ţź-żôJUşŠŚ˙ČM˙Ż oý•Ąj/ő?ďEü¤ŚSâ˙Qsţô_ĘJeQU4mJËXŃěľ}6o>ĘúŢ;›iv•ߨel0dp@4nŠ( ŠŠĽe.ąs¤G6om­âšš-§ĺŽV‘clă&ČŰÎ23SĹ~"Ňü/ŁÉŤë-w”Y2Ëoe5ϔĄKq1TI,@QÜň(ZłoľÍ>Îĺ­¤7RȘŢ-í%˜!#8bŠ@8 ŕó‚qZU‰iŞ_č˙ÚďNŸČšO[ZłlVĚSëĂ*á4r:ç¨ÎFšľŽÁö˙ &›˙›˙^ßú%*ÝTÓäŚ˙ׅˇţ‰JŔĐľú‹Ÿ÷˘ţRS)ń¨š˙z/ĺ%2€ ńŸ‡~ąŐ“KOxi§ŽßŔÚ˘%őłŽuű_š 0Ŕ•2™ţ$Ü:nç٨ Ÿl-tëRĂţ ëZÝřđŒŽ‹§Ëq,7EŽ÷P ŠbŔâFŰ´†Ë.yěô+gÂÚÜ~#Ó5JňóÂÚ]¤“XŮÉt$˝ˇk“2ť !2gRĘŠçž+Ń"Ól˘Ö.uxáĹíÍźVÓK¸üŃÄŇ4kŒŕ`Í!Č;šÎ-Ňă?ü9c¤x‡Ăˇşˇ„Ţ RiAzúC‚ęnád”'î_Ë0ĄŢT° œŕ í>5ÎÉđŻÄ–qYę—:†—uek •Œ×.ňɁX•Š‚xÜŘQ‘’2+˛˘€*i„ŽýŹwqĹ.v­Ő¤śŇŒc•UבĆ@ČÁkűţIz˙Ř÷§˙éúŢşzĂą¸đÂxzoř§XM*hőĺŐQ?•zˇPXČĆ5ˇ †•Óą-ٞŤEs?đ°<˙CF—˙Ĺđ°<˙CF—˙Ĺ.Iv4{5Ě˙ÂŔđOý _ý˙ÂŔđOý _ý˙rK°sGšÓQ\Ďü,˙ĐŃĽ˙ßńGü,˙ĐŃĽ˙ßńG$ť4{5Ě˙ÂŔđOý _ý˙ÂŔđOý _ý˙rK°sGšÓQ\Ďü,˙ĐŃĽ˙ßńGü,˙ĐŃĽ˙ßńG$ť4{5Ě˙ÂŔđOý _ý˙ÂŔđOý _ý˙rK°sGšÓQ\Ďü,˙ĐŃĽ˙ßńGü,˙ĐŃĽ˙ßńG$ť4{5Ě˙ÂŔđOý _ý˙ÂŔđOý _ý˙rK°sGšÓQ\Ďü,˙ĐŃĽ˙ßńGü,˙ĐŃĽ˙ßńG$ť4{5Ě˙ÂŔđOý _ý˙ÂŔđOý _ý˙rK°sGšÓQ\Ďü,˙ĐŃĽ˙ßńGü,˙ĐŃĽ˙ßńG$ť4{5Ě˙ÂŔđOý _ý˙ÂŔđOý _ý˙rK°sGšÓQ\Ďü,˙ĐŃĽ˙ßńGü,˙ĐŃĽ˙ßńG$ť4{5Ě˙ÂŔđOý _ý˙ÂŔđOý _ý˙rK°sGšÓQ\Ďü,˙ĐŃĽ˙ßńGü,˙ĐŃĽ˙ßńG$ť4{5Ě˙ÂŔđOý _ý˙ÂŔđOý _ý˙rK°sGšÓQ\Ďü,˙ĐŃĽ˙ßńGü,˙ĐŃĽ˙ßńG$ť4{5Ě˙ÂŔđOý _ý˙ÂŔđOý _ý˙rK°sGšÓQ\Ďü,˙ĐŃĽ˙ßńGü,˙ĐŃĽ˙ßńG$ť4{5Ě˙ÂŔđOý _ý˙ÂŔđOý _ý˙rK°sGšÓQ\Ďü,˙ĐŃĽ˙ßńGü,˙ĐŃĽ˙ßńG$ť4{5Ě˙ÂŔđOý _ý˙ÂŔđOý _ý˙rK°sGšÓQ\Ďü,˙ĐŃĽ˙ßńGü,˙ĐŃĽ˙ßńG$ť4{5Ě˙ÂŔđOý _ý˙ÂŔđOý _ý˙rK°sGšÓQ\Ďü,˙ĐŃĽ˙ßńGü,˙ĐŃĽ˙ßńG$ť4{5Ě˙ÂŔđOý _ý˙ÂŔđOý _ý˙rK°sGšÓQ\Ďü,˙ĐŃĽ˙ßńGü,˙ĐŃĽ˙ßńG$ť4{5Ě˙ÂŔđOý _ý˙ÂŔđOý _ý˙rK°sGšÓQ\Ďü,˙ĐŃĽ˙ßńGü,˙ĐŃĽ˙ßńG$ť4{5r_żä]ł˙°ľ—ţJŸţ‚čhŇ˙ďřŹ?řBńŸg§hZ­ŽŁt5iÚ;wÜV8ĺWv8č“ߊ¸Ĺ§Ş¤š,ŃE†=żăÖŰý×˙ŃŻYڇü„tŻúůoý%hˇüzŰş˙ú5ë;P˙Ž•˙_-˙˘d  *(˘€<‹ă‘˙Kˇ—ďtÇ?tQGÇ#ţ—n7/ŢéŽ~č˘žŞ‡đačŽ |LőMçGľů•žSĐ{՚­Łœčöż2ˇĘzzł_9‰ţ4˝Nş?ĂAU4ßůéżőám˙˘R­ŐM7ţ@úoýx[蔬 Q¨š˙z/ĺ%2Ÿú‹Ÿ÷˘ţRS(˘Š(˘Š(˘Š( ’;⊛º.•ŹXÜ]ę–1]Î.ćŒ<ƒ$"ą ŁĐ?™ęM!î˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kőŁwű_­n˙Â!áŸúÚßÂ!áŸúÚß\,an˙kő {ćˇáđĎým?ďŠÎń…¤iZY˝Ól"ľ¸Yá@ńä­*+ę'Żąę 袊bßńëmţë˙č׏íCţB:Wý|ˇţ‰’´[ţ=mżÝýő¨ČGJ˙Ż–˙Ń2P•Q@EńČ˙ĽŰË÷şcŸş(Łă‘˙Kˇ—ďtÇ?tQ_UCř0ôGž&zŚŽsŁÚüĘß)č=ęÍVŃÎt{_™[ĺ=˝YݜÄ˙^§]á Şšoüôßúđś˙Ń)Vꦛ˙ }7ţź-żôJV…¨żÔ\˙˝ň’™O‹ýEĎűŃ))”WŒü1%ŐôMEÓ|Us˘ŘŮřCşEˇ´‚Fiĺ[…$™Qž\Bš^ź ç>ÍU,4Í7OŰö >ŇÓmźvŤäBЈcÝĺĆ0>âîmŤĐn8ęiĺ:G‰üCâkŤY[ĆQřn'đ^›Ž4QŰ@ŔÍ1¸2š2Ť(@Ŕ~îyĎIŕżÝę:ŁM­ĎŸo'…t˝XŰÉľJ×_h;8"'ŚNt_Ŕ>ŸÄRjWşF“whş}••ŒÚ|m ś{†V9 ‘8P99ăkWĐ4b{iőmMÔ&ľmÖň]Z¤­ őBŔ•<” ó?„MŤë>/śńŁâ=BIď<Ą^\Ű­–ŢEźÜ"Ţ|Č6°ů¤ ’ťU{‰QxQílωtxľÉŮÚ-?MhÄÍs+pą1ÚH ě0ƒ$•5ˇ‡´î´ű¸ô=1.4Č|‹ VŃÚǡnȎ2‹´‘…ŔÇĎřgĂ~"ň?á đţ“ŤýŸw‘öë8çňˇcvÝŕă;W8ëé@ü¤Ţh~˛Ó/ä<^cYÖyÖfĺ–5a'’tŽÓáďünëţă˙Fçt}3MŃ´č´í#O´ÓŹ˘Ď—ok Ĺd’pŞ$ŸŠ5Ń|=˙-ĎýÜčĂCttQE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@bxßţE×˙Ż›oýmÖ'˙ä]úůś˙ŃńЀÁ˘Š*‰ßńëmţë˙č׏íCţB:Wý|ˇţ‰’´[ţ=mżÝýő¨ČGJ˙Ż–˙Ń2P•Q@EńČ˙ĽŰË÷şcŸş(Łă‘˙Kˇ—ďtÇ?tQ_UCř0ôGž&zŚŽsŁÚüĘß)č=ęÍVŃÎt{_™[ĺ=˝YݜÄ˙^§]á Şšoüôßúđś˙Ń)Vꦛ˙ }7ţź-żôJV…¨żÔ\˙˝ň’™O‹ýEĎűŃ))”QEQEQESv.âĘgˆˇ-äÝKcŒd„` Ŕ8ϝE7i˙ŸC˙7?ür§ţ~5üÜ˙ńĘuݧţ~5üÜ˙ńĘ6ŸůřÔ?đcs˙Ç)ÔPvŸůřÔ?đcs˙Ç(ÚçăP˙ÁĎ˙§Q@ ÚçăP˙ÁĎ˙Łi˙ŸC˙7?ürE7i˙ŸC˙7?ür§ţ~5üÜ˙ńĘuݧţ~5üÜ˙ńĘ6ŸůřÔ?đcs˙Ç)ÔPvŸůřÔ?đcs˙Ç(ÚçăP˙ÁĎ˙§Q@ ÚçăP˙ÁĎ˙Łi˙ŸC˙7?ürE7i˙ŸC˙7?ür§ţ~5üÜ˙ńĘuݧţ~5üÜ˙ńĘ6ŸůřÔ?đcs˙Ç)ÔPvŸůřÔ?đcs˙Ç(ÚçăP˙ÁĎ˙§Q@ ÚçăP˙ÁĎ˙Łi˙ŸC˙7?ürE7i˙ŸC˙7?ür§ţ~5üÜ˙ńĘuݧţ~5üÜ˙ńĘ6ŸůřÔ?đcs˙Ç)ÔPvŸůřÔ?đcs˙Ç(ÚçăP˙ÁĎ˙§Q@ ÚçăP˙ÁĎ˙Łi˙ŸC˙7?ürE7i˙ŸC˙7?ür§ţ~5üÜ˙ńĘuݧţ~5üÜ˙ńĘ6ŸůřÔ?đcs˙Ç)ÔPvŸůřÔ?đcs˙Ç(ÚçăP˙ÁĎ˙§Q@ ÚçăP˙ÁĎ˙Łi˙ŸC˙7?ürE7i˙ŸC˙7?ür§ţ~5üÜ˙ńĘuݧţ~5üÜ˙ńĘ6ŸůřÔ?đcs˙Ç)ÔPvŸůřÔ?đcs˙Ç(ÚçăP˙ÁĎ˙§Q@ ÚçăP˙ÁĎ˙Łi˙ŸC˙7?ürE7i˙ŸC˙7?ür§ţ~5üÜ˙ńĘuݧţ~5üÜ˙ńĘ6ŸůřÔ?đcs˙Ç)ÔPvŸůřÔ?đcs˙Ç(ÚçăP˙ÁĎ˙§Q@ ÚçăP˙ÁĎ˙Łi˙ŸC˙7?ürE7i˙ŸC˙7?ür§ţ~5üÜ˙ńĘuݧţ~5üÜ˙ńĘ6&ŕĚg”Ż+ç]K(SŒdbÁ#8Ď&EQE=żăÖŰý×˙ŃŻYڇü„tŻúůoý%hˇüzŰş˙ú5ë;P˙Ž•˙_-˙˘d  *(˘€<‹ă‘˙Kˇ—ďtÇ?tQGÇ#ţ—n7/ŢéŽ~č˘žŞ‡đačŽ |LőMçGľů•žSĐ{՚­Łœčöż2ˇĘzzł_9‰ţ4˝Nş?ĂAU4ßůéżőám˙˘R­ŐM7ţ@úoýx[蔬 q$†)‚"śöL*/ÝߟźŔ˙¤ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š‘q˙<Ó˙"˙â¨ň.?çšŕD_üU2Š’U)źlWrŁn ᱙ŽA#Ą›¨ČGJ˙Ż–˙Ń2U꣨ČGJ˙Ż–˙Ń2P•Q@EńČ˙ĽŰË÷şcŸş(Łă‘˙Kˇ—ďtÇ?tQ_UCř0ôGž&zŚŽsŁÚüĘß)č=ęÍVŃÎt{_™[ĺ=˝YݜÄ˙^§]á Şšoüôßúđś˙Ń)Vꦛ˙ }7ţź-żôJV„ꋎGÚb¨HQĎ$Ž r>2{›˙č^…ŢŸc}ÝÍ̖˛˜Ľ˜Âa Č>dϚÎJŘ‹‚ką‹ýEĎűŃ)++Ä:•ŻÚ%ŽŤkç¤R bu‘Ł’'€ččC#`‘• ŕ‘Ţ€<öë\ťđÂkşf…gŽ JÚďJŽźCöťy#ťž6Ë,R ¤”Ű!ÐFÔ;:ƒłyŞřÜęňx~ÂďĂ­¨XiŠys=”É ţlł,QF‚bcŔ…ˇ9gę^p6lüáËX%‰m.'i§śžYŽŻ§¸™ŢŢQ,–Gg!n N9<`œÉâ_č#ž9ő[IžT‰ĄßÜśěń1ɍĚlťĐŸŕlŻľ!™Ţ ńtž$ÔřˇŽŢĘ_išź*ŮóޚçrąÎÇ’ŮÎF9żxĂÇ>%]?ű+ţťV“šnˇ9şˇ™ƒĎsçî‰q(ڟşc¸Żpůă˛Ö|á˝Zâ îě$W‚ÜZ¨śş–ÝZr"u‰”Içä`W“Ç&°áXhRř‰ĺžŐ—HƒBąŇ,`‚ţâ)8ŕźnQxĘÉĂ3n(w >…¨/‰üaŞŔ× ŤiŃÜ!B<Řą†$šwwČé\ρ˘Ć jš˝÷‡ŕśx.ĺžż–î9ŻD‹%Ľf#b‰í!2ĘĘś;;˝6ĘëG›H’–RŰľłE ˜ą]ĽTĄxŕ ŽŘŹ x3CđšAŁZ8ŁƒČŽ ő‹ť˜cN0)ed\`@ Á4Ň,S°Ü–×§Ł$,Ŕţ Rů?óçw˙€ďţĘ)ˆ‘s˙>wř˙áG‘s˙>wř˙áL˘€ä\˙ϝßţżřQä\˙ϝßţżřS( ů?óçw˙€ďţy?óçw˙€ďţĘ(ţEĎüůÝ˙ŕ;˙…EĎüůÝ˙ŕ;˙…2Š‘s˙>wř˙áG‘s˙>wř˙áL˘€ä\˙ϝßţżřQä\˙ϝßţżřS( ů?óçw˙€ďţy?óçw˙€ďţĘ(ţEĎüůÝ˙ŕ;˙…EĎüůÝ˙ŕ;˙…2Š‘s˙>wř˙áG‘s˙>wř˙áL˘€ä\˙ϝßţżřQä\˙ϝßţżřS( ů?óçw˙€ďţy?óçw˙€ďţĘ(ţEĎüůÝ˙ŕ;˙…EĎüůÝ˙ŕ;˙…2Š‘s˙>wř˙áG‘s˙>wř˙áL˘€ä\˙ϝßţżřQä\˙ϝßţżřS( ů?óçw˙€ďţy?óçw˙€ďţĘ(ţEĎüůÝ˙ŕ;˙…EĎüůÝ˙ŕ;˙…2Š‘s˙>wř˙áG‘s˙>wř˙áL˘€ä\˙ϝßţżřQä\˙ϝßţżřS( ů?óçw˙€ďţy?óçw˙€ďţĘ(ţEĎüůÝ˙ŕ;˙…EĎüůÝ˙ŕ;˙…2Š‘s˙>wř˙áG‘s˙>wř˙áL˘€ä\˙ϝßţżřQä\˙ϝßţżřS( ů?óçw˙€ďţy?óçw˙€ďţĘ(ţEĎüůÝ˙ŕ;˙…EĎüůÝ˙ŕ;˙…2Š‘s˙>wř˙áG‘s˙>wř˙áL˘€ä\˙ϝßţżřQä\˙ϝßţżřS( ů?óçw˙€ďţy?óçw˙€ďţĘ(ţEĎüůÝ˙ŕ;˙…EĎüůÝ˙ŕ;˙…2Š‘s˙>wř˙áG‘s˙>wř˙áL˘€ä\˙ϝßţżřQä\˙ϝßţżřS( ů?óçw˙€ďţy?óçw˙€ďţĘ(J˛Ş–Rťł€FƒÇnAއü„tŻúůoý%hˇüzŰş˙ú5ë;P˙Ž•˙_-˙˘d  *(˘€<‹ă‘˙Kˇ—ďtÇ?tQGÇ#ţ—n7/ŢéŽ~č˘žŞ‡đačŽ |LőMçGľů•žSĐ{՚­Łœčöż2ˇĘzzł_9‰ţ4˝Nş?ĂAU4ßůéżőám˙˘R­ŐM7ţ@úoýx[蔬 Q¨š˙z/ĺ%2Ÿú‹Ÿ÷˘ţRS(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(í˙śßîżţzÎÔ?ä#Ľ×Ëč™+EżăÖŰý×˙ŃŻYڇü„tŻúůoý%iQEä_ú]¸Üż{Ś9ű˘Š>9ôťqš~÷Ls÷EőT?ƒDpKâgŞhç:=ŻĚ­ňžƒŢŹŐmçGľů•žSĐ{՚ůĚOńĽęuŃţ ŠŚ˙ČM˙Ż oý•nŞiżňÓëÂŰ˙DĽ`hZ‹ýEĎűŃ))”řżÔ\˙˝ň’™@W ŚüOđÜş&“y¨ľŐ­íţkŤ˝•˝œ÷m3Š!‰Š3•\Ŕœddš˘š]Wâ„tۤś¸Ôä’G˛Pfłžŕ}–BÁf-0ü–'Œă#;–zž›y¨Ë§ÚÝ$×ZĂvÁ+äĚd¸oşC¤čOÝç¨Čę+đ÷Ä=]ńwöo¨K ş]žŁk|,.D3%ÂĘă,c ِĚĂs3 ů‘…mřŠó^ľű:h:%ޤňn2˝Ő˙Ůbˆ c$$ŒIÉŔ ŽHă őVÖŻŐŚŇí,ŮdhĂÜÝ4lěŹUˆU¸ 䃐xĆ ĽŕýqaóP2ĎöŠżçĎD˙Á„żüfě˙Ϟ‰˙ƒ řÍSŇ~ 隗§đĽľŚ˘űtëKč/VĆŕÁ(œLŘ2y~Z(X”‡/†fd20Ťş?Ž|5Ťk'H°Ô[’d3ZʐÎc8qŹ˘9J÷Ř͎ôOě˙Ϟ‰˙ƒ řÍŮţ*˙Ÿ=˙˙ńš—Áž2Đ|aboź=suwgĺÇ"\=ŒđĹ"¸$lyUČÁ ’§†ÁŽ`řďŖ^!żÓőßxcNłŇěíoő Áâ9¤ŰĎ$Č )ł]î>Î˙!*PÉŔEýŸâŻůóŃ?đa/˙Łű?Ĺ_óç˘ŕÂ_ţ3Iaăż ŢZ=Ę_ĎEs´Ëwg5łĂ$Ÿęüĕ‘[ `’<Öo‹>&hşšŚi_gÔuşÔĆĺŹtű›‘lËm$řýĚNţDX;‚š~ˆÔ§ýŸâŻůóŃ?đa/˙Łű?Ĺ_óç˘ŕÂ_ţ3Z>#Ő#ŇôřŽe˝†Í^öÖÜI,0c-ÄqÚ¤\¸@ݰbk_‰šŐ˙˛áÔ§iţÝ&œd6şI6„ĚSËšH [-ÁdÇöŠżçĎD˙Á„żüfě˙Ϟ‰˙ƒ řÍYńˆ°lmš)5 ë땴ą´Gf™ƒ6 BŁťpŞp Ŕ5­z'ţ %˙ă5ü,_Ž…y­OŠËkgc<6÷j˛ž `y]R0ń: 1uĂĆs€MU?< Čou!qÝ5ŠŃŻ>Ńc>cCĺy‹ý4+ˇŢš?Ůţ*˙Ÿ=˙˙ńš?łüU˙>z'ţ %˙ă5Ď^|IŇ´żßÚę:ʞhď iúˆľ˛’ä$ˇ‚YËDŒD{R łƒŽ™9čźA㯠č_gţĐÔ\ý˘rŸeś–ç ffň•śGČůŰ ď@ ýŸâŻůóŃ?đa/˙Łű?Ĺ_óç˘ŕÂ_ţ3QřÇĹÚ-Ž‘Šiş}†§ĽŢ_ZZÜN×íơ7Á‘(‰ÖQ™wY8^ Ď>úsŸŮţ*˙Ÿ=˙˙ńš?łüU˙>z'ţ %˙ă5ŃďŁ}sŸŮţ*˙Ÿ=˙˙ńš?łüU˙>z'ţ %˙ă5ŃďŁ}sŸŮţ*˙Ÿ=˙˙ńš?łüU˙>z'ţ %˙ă5ŃďŁ}sŸŮţ*˙Ÿ=˙˙ńš?łüU˙>z'ţ %˙ă5ŃďŁ}sŸŮţ*˙Ÿ=˙˙ńš?łüU˙>z'ţ %˙ă5ŃďŁ}sŸŮţ*˙Ÿ=˙˙ńš?łüU˙>z'ţ %˙ă5ŃďŁ}sŸŮţ*˙Ÿ=˙˙ńš?łüU˙>z'ţ %˙ă5ŃďŁ}sŸŮţ*˙Ÿ=˙˙ńš?łüU˙>z'ţ %˙ă5ŃďŁ}sŸŮţ*˙Ÿ=˙˙ńš?łüU˙>z'ţ %˙ă5ŃďŁ}sŸŮţ*˙Ÿ=˙˙ńš?łüU˙>z'ţ %˙ă5ŃďŁ}sŸŮţ*˙Ÿ=˙˙ńš?łüU˙>z'ţ %˙ă5ŃďŁ}sŸŮţ*˙Ÿ=˙˙ńš?łüU˙>z'ţ %˙ă5ŃďŁ}sŸŮţ*˙Ÿ=˙˙ńš?łüU˙>z'ţ %˙ă5ŃďŁ}sŸŮţ*˙Ÿ=˙˙ńš?łüU˙>z'ţ %˙ă5ŃďŁ}sŸŮţ*˙Ÿ=˙˙ńš?łüU˙>z'ţ %˙ă5ŃďŁ}sŸŮţ*˙Ÿ=˙˙ńš?łüU˙>z'ţ %˙ă5ŃďŁ}sŸŮţ*˙Ÿ=˙˙ńš?łüU˙>z'ţ %˙ă5ŃďŁ}sŸŮţ*˙Ÿ=˙˙ńš?łüU˙>z'ţ %˙ă5ŃďŁ}sŸŮţ*˙Ÿ=˙˙ńš?łüU˙>z'ţ %˙ă5ŃďŁ}sŸŮţ*˙Ÿ=˙˙ńšAcâ–zŒB^ÇţXú×Iž™nŘśO÷¤˙я@˙öŠżçĎD˙Á„żüf˘¸Ξ#›U´°Kg‘bßmtŇ2ł!Ł^ drGÉG†ţ0ëú§Ĺ‹\ü2ń}…ĺۆľ6r›ŚĺĺRŸť…ň“ĘíËŕ9ň˝Ćm!˙OÖżú=(”QE=żăÖŰý×˙ŃŻYڇü„tŻúůoý%hˇüzŰş˙ú5ë;P˙Ž•˙_-˙˘d  *(˘€<‹ă‘˙Kˇ—ďtÇ?tQGÇ#ţ—n7/ŢéŽ~č˘žŞ‡đačŽ |LőMçGľů•žSĐ{՚­Łœčöż2ˇĘzzł_9‰ţ4˝Nş?ĂAU4ßůéżőám˙˘R­ŐM7ţ@úoýx[蔬 Q¨š˙z/ĺ%2Ÿú‹Ÿ÷˘ţRS(Žᧄ5 }“űBk9|Ÿ é:Cy,͙­~Ńć0ʏůÉ´ő89Œ÷Př[Fń†â$Đ´ˆôŤ˝?Á.Ÿv×sʑ‰ďPIXÉu[ä!w9\WG§řSĞşł>“J˝‰t -VÔf’&ěŚ]“(Do3>se NƒćŻA˘Îá˙…ťi-˝…ŒúäPXÝÍ.š{ŤČ-WÍŢC]ŒnÄŹ6…‹1~¤ƒÁ:öƒ§čö>:]忇ő—Ô4Řďn¤…ĺŠ[{ˆ¤Ži7;•ŽY„˜bŕÜĺ[çkŸóíŚŕlŸüf;\˙Ÿm3˙d˙ă4 wŽtŤwEˇ˛´’’-WNź&V lˇ˝†wÉX˜Ů#$Fü"—ü!Řž}ŸÚá*ţŮß˝śy?Ű?n۝šßĺ|¸Ć7qœ|ŐšçkŸóíŚŕlŸüf;\˙Ÿm3˙d˙ă49Ł–EČä0rľ3ĹŢ%đÍ햭…Ś]ŹöˇV mq-Ô~mźë8ó]ٌ•fxš9ŐóľĎůöÓ?đ6Oţ3GŽĎś™˙˛ńšĺîü%âMfmCUŐΏi¨^^č¤ZŰ\I,1ŰŘ^‹–̍–‘ƒJČÜękОŇ.!řŤř…Ţm{ĽXŮF Ÿ0<Ýť’1¤\&9= `e<ísţ}´Ďü “˙ŒŃçkŸóíŚŕlŸüfœ7‡<ăĎ .žtŸřFnÚ?éšŔşš™Okçî•HˆďOß )Ú[šLsĽoáxgě?đ‰Ë¤_ěđőڇ7ö¤˛E°[yž\Ëą~|×Ýۜ/Ě+§óľĎůöÓ?đ6Oţ3GŽĎś™˙˛ńšsž#đLj­žřkÂ^ƒJżI}4Ëq¨ßÉlH˛žŢT$2î/äI#nAůşWye-ËŮ@÷ąC ÓFŚhá”Čˆřů•\Ş–äUIŕtŹo;\˙Ÿm3˙d˙ă4yÚçüűiŸř'˙  ýôoŹ;\˙Ÿm3˙d˙ă4yÚçüűiŸř'˙  ýôoŹ;\˙Ÿm3˙d˙ă4yÚçüűiŸř'˙  ýôoŹ;\˙Ÿm3˙d˙ă4yÚçüűiŸř'˙  ýôoŹ;\˙Ÿm3˙d˙ă4yÚçüűiŸř'˙  ýôoŹ;\˙Ÿm3˙d˙ă4yÚçüűiŸř'˙  ýôoŹ;\˙Ÿm3˙d˙ă4yÚçüűiŸř'˙  ýôoŹ;\˙Ÿm3˙d˙ă4yÚçüűiŸř'˙  ýôoŹ;\˙Ÿm3˙d˙ă4yÚçüűiŸř'˙  ýôoŹ;\˙Ÿm3˙d˙ă4yÚçüűiŸř'˙  ýôoŹ;\˙Ÿm3˙d˙ă4yÚçüűiŸř'˙  ýôoŹ;\˙Ÿm3˙d˙ă4yÚçüűiŸř'˙  ýôoŹ;\˙Ÿm3˙d˙ă4yÚçüűiŸř'˙  ýôoŹ;\˙Ÿm3˙d˙ă4yÚçüűiŸř'˙  ýôoŹ;\˙Ÿm3˙d˙ă4yÚçüűiŸř'˙  ýôoŹ;\˙Ÿm3˙d˙ă4yÚçüűiŸř'˙  ýôoŹ;\˙Ÿm3˙d˙ă4yÚçüűiŸř'˙  ýôoŹ;\˙Ÿm3˙d˙ă4yÚçüűiŸř'˙  ýôoŹ;\˙Ÿm3˙d˙ă4yÚçüűiŸř'˙  ýôoŹ;\˙Ÿm3˙d˙ă4yÚçüűiŸř'˙  ýô‘ś-˘˙śŸú1ëÎ×?çŰL˙ŔŮ?řÍ~šľWěÚ^8˙M“š'ţxú“@ÎÞř×Ĺi˙ś~$ýŻŔöŰn-ń§Y­ŐćIĹź›a6ăç‘q¸Ů´ły^‹âćΕ˙§Ű_ý•ŽĎś™˙˛ńš†ęNřĂ ÚYĂL“1†w‘‰F  (Ď<1Î@#FŠ( ˇüzŰş˙ú5ë;P˙Ž•˙_-˙˘d­˙[o÷_˙F˝gjňŇżëĺżôL”ĽEP‘|r?évărýî˜çîŠ(řäŇíĆĺűÝ1ĎÝWŐPţ =Á/‰žŠŁœčöż2ˇĘzzłU´s×ćVůOAďVkç1?ƗŠ×Gřh*Ś›˙ }7ţź-żôJUşŠŚ˙ČM˙Ż oý•Ąj/ő?ďEü¤ŚSâ˙Qsţô_ĘJeQ\şź%.…Ľę÷şî¤ÇŠY[ŢĂĄwŹsŠh÷)n§ 8$­‚ph§˘˛5_řkI¸K}WÄ:E„Ň*2Gs{lÁË 1†(ŕzí8čkE.­žňK4¸…Žb%’ŕş#–Ĺz€J8žÖô45Ěiž=đ–Łâć𽞻§Í¨ýŽ ¸U.âap’ŹŽ˘0s‘bCÂId†­oëş‘.Ľv’ȨU@2M#°T f!FH<9  Ź’j7ŰMŃ/oáF(fŠH‘7†Ěu'‚@#9Č WđÎŻmâ éšőšKśĽgÜ+(Ő$@ę@8#8'ë[fˇkᯆŻˆďŁšKM)u+ŮŇ Œ‘M3°PH°§ g¸¤2—âú5ü ľ˙ă´y~!˙ĄSQ˙Ŕ›_ţ;[ZWŠŽćű\Úď„uŻ ŘZ[=Ě×úľŐ‡ŮŃS˛ašŽ-–@S’8Iüwŕˆ,ţxv+HÎúœ+Î&"Ű޸#Š.0|ż˙ĐŠ¨˙ŕMŻ˙ŁËńý šţÚ˙ńÚ׳řáŻOŕxuË­ĹiŇAö¸ˇN%°H×vćuHźĆxI#nCqŤaâ?jÍ֋aŽéwzĽ˜Í͔7qźđsÜźúŠ.9?/Ä?ô*j?řk˙ÇhňüC˙BŚŁ˙6żüvş˝Äžń̚żĽjÍG$ÂĘň9Ěk &6m„ŕ0Š=@8Ž^Ëâ5ÔŢ"›Dşř}â>[X ş˝žęăMÚ[Ěň˘Ěěˇg* ’3‡ŽFK…†y~!˙ĄSQ˙Ŕ›_ţ;G—âú5ü ľ˙ăľÔé>'đÖ­eî•â"ţÖiţÍÖױʏ63ĺ†RA| íÖWŒž#ř/Âś™Śx‡Ä:e…ĆĄpĐ(žöź€!’_2]î Çň݃óÉţ,Ńpą—ĺř‡ţ…MG˙mří_ˆčTÔđ&×˙Ž×gŹŢ˙gŮÇ>ű$Ýsťšň÷“$x ´ĺÎě"cçrŤ•Ý‘FřN}i4H|Q˘KŞ;ȋd—ńŮŁfW0ۉVFR1ÁRCEÂÇ5ĺř‡ţ…MG˙mří_ˆčTÔđ&×˙Ž×Wâ~ÇÚ`ž˝[‰L’¤ööńů“\Jç /v<ú$€ ´/ľýľěÚŽƒŤxpY ’_í_$.ÂďE$‘6œŮ^2E ď—âú5ü ľ˙ă´y~!˙ĄSQ˙Ŕ›_ţ;]=Ÿ‹<-{˘nĎÄş5Ζ˛Ź&ö+čž#2˘§˜nâĚŞrKŢŠÂÂđöxÔá8đĎؚo \jÁĺ™zěÝť˝şŃpą‹ĺř‡ţ…MG˙mří_ˆčTÔđ&×˙ŽŐËßé:WÄCA׾K°KÓťşXZyŽ&źF@]€a‹xČgćnšč5ďř{@ű7öé_j}–˙mťŽ9żş›ČÜyZ.9?/Ä?ô*j?řk˙ÇhňüC˙BŚŁ˙6żüvˇźOâyô[Ľ‚Űž!ÖŔ‡Ď–M:ŠD™#“$‰˝žSň&ćéÇ#:ú&ĽeŹčÖZƛ8žĆúŢ;›i@ ĆC„KÚ~Ńńóœ÷[ŒƒJ˘€<;Ă6ޏŹAŚ\ř3űwPƒŔ6ŸyÚ` 7]Ť#ł¸ 2Ĺ •pq uP1đŁLŐ´O†^ŃőÁę6Z]˝źéŕFR0Ą8f¨K† °ŢłĽßëŸüW˘ip}˘˙P°Ö-mbŢŤćK#\*.X€2Ä ’­\Šź?ŤËŁŘ˝ƒé7wag–T– ! Ë$&‘Ô‚ ĆGçœĆj>żÔźă=#KđgÄ >˙QđÝőŠ×üRˇÖóK$ER5Fżœ#–#U@aœ‡âw‡n˙âGwáWű^—ö֒čłŮĆöŠ Œl1]ţéâo-s™v  äă˘˙„Šżč_ŐďíŻ˙ŁţŚ˙ĄU˙żśżüz•†sţÓ|K¤xÚÖďSБăÔ<1ŚX]ÜéĎ ZŮ\ڛˇ‘v3ŤůlnSbś1ÎŃÍrŸ źâm]đÍŚˇ˙ -ĘxxÎVîIôľ°”ź2F]<¨…Ű—.Ź„|Řfg*7z_ü%M˙BţŤ˙mřőđ•7ý úŻýýľ˙ăÔX ˙4ü1đŁÂš݌v7ś:EŹ7!RŕDžnJ’ŹwîÉ‚yÉŽcâg‚ľ˙ę^/:x0G¨hÚ,6˛‰"t–ˇ×sÍ\ É".]™Č`W_˙ SĐżŞ˙ßŰ_ţ=Gü%M˙BţŤ˙mřőÎě|#âKÍĹăJ×ćÔ5ôł˛ë÷hű?–d˙I `¨—šJĆFeŒ~ě.á=Ż…üSáťm SFťńÚ‰eÔŚź†ćşŐâšĘę5źé ÎŠÁ™TŞ ˜Eďá*oúő_űűk˙Ǩ˙„Šżč_ŐďíŻ˙˘Ŕ3â^—ŹxrŇÓNƒĎš=oIşeŢŤˆ Ôm敲Ä–8ÝąÔă$\Œ^ Ô˘đ+ZGŁÂšŤřďűeś´aĚŰžœ[8ĎŮ9Ćwmů1Ÿ–ťřJ›ţ…ýWţţÚ˙ńę?á*oúő_űűk˙Ǩ°|CŇľ;ŘôMWFˇŽîűCÔĆĄ¤’ĹʘfĐ1á[dî˞7*‚@9Ţ-Äž4đF§d޸ҤŽ{;ˆ,ő+Ëvká ÂM,-䟈ˆë—’Ç>aČs˝˙ SĐżŞ˙ßŰ_ţ=Gü%M˙BţŤ˙mřőÖ<'Žřœëş•Ď„˙ł Őu+iWS[ťËž ˛ÜĎ/–í16ÝĄ˜•„ d…ŽşËŠţ!×ît{Ce} éö1ÎȄČé-áűŘŘöůČÁG;N4?á*oúő_űűk˙Ǩ˙„Šżč_ŐďíŻ˙˘Ŕyg†<5âď6[đťü?Ň4+ôŰ\ĹuÚ<řœÉ ĚGĚMěťł…ÚœlGářgěü2ÍÖŔ(ÄGËfLŻO•ˆă‚G5‘˙ SĐżŞ˙ßŰ_ţ=Gü%M˙BţŤ˙mřőŁ˘šĎřJ›ţ…ýWţţÚ˙ńę?á*oúő_űűk˙Ǩ°ÎÂTßô/ęż÷ö×˙Q˙ SĐżŞ˙ßŰ_ţ=E€ččŽsţŚ˙ĄU˙żśżüzřJ›ţ…ýWţţÚ˙ńę,GEsŸđ•7ý úŻýýľ˙ăÔÂTßô/ęż÷ö×˙Q`::+œ˙„Šżč_ŐďíŻ˙ŁţŚ˙ĄU˙żśżüz‹ŃŃ\çü%M˙BţŤ˙mřőđ•7ý úŻýýľ˙ăÔXŽŠç?á*oúő_űűk˙Ǩ˙„Šżč_ŐďíŻ˙˘ŔttW9˙ SĐżŞ˙ßŰ_ţ=Gü%M˙BţŤ˙mřőŁ˘šĎřJ›ţ…ýWţţÚ˙ńę?á*oúő_űűk˙Ǩ°ÎÂTßô/ęż÷ö×˙Q˙ SĐżŞ˙ßŰ_ţ=E€ččŽsţŚ˙ĄU˙żśżüzřJ›ţ…ýWţţÚ˙ńę,GEsŸđ•7ý úŻýýľ˙ăÔÂTßô/ęż÷ö×˙Q`::+œ˙„Šżč_ŐďíŻ˙ŁţŚ˙ĄU˙żśżüz‹ŃŃ\çü%M˙BţŤ˙mřőđ•7ý úŻýýľ˙ăÔXŽŠç?á*oúő_űűk˙Ǩ˙„Šżč_ŐďíŻ˙˘ŔttW9˙ SĐżŞ˙ßŰ_ţ=Gü%M˙BţŤ˙mřőŁ˘šĎřJ›ţ…ýWţţÚ˙ńę?á*oúő_űűk˙Ǩ°ÎÂTßô/ęż÷ö×˙Q˙ SĐżŞ˙ßŰ_ţ=E€ččŽsţŚ˙ĄU˙żśżüzřJ›ţ…ýWţţÚ˙ńę,G\žŠwmŤÚJÓ,sÎŃťC3Äŕ5ź •t!óĂ)AĽ˙„Šżč_ŐďíŻ˙Źk˝ZňK›™#ĐďŔ–0fknž\k˙=}Pţ”ЏĐ~|EO[xGZřƒŠ\|/Ń$‚óL†)„Wł”rŃ[<¨E0śě`Eĺ„#÷>ÝâöΕ˙§Ű_ý•ö–Ł˙@Kßű˙m˙ÇjľűßęK łéÓÚ ž9žIe‰†Ăŕv$’ç’sĆ JŠ( CŰţ=mżÝýő¨ČGJ˙Ż–˙Ń2V‹Ç­ˇűŻ˙Ł^łľůé_őňßú&JҢŠ(Čž9ôťqš~÷Ls÷E|r?évărýî˜çîŠ+ę¨ˆŕ—ÄĎTŃÎt{_™[ĺ=˝YŞÚ9Ώkó+|§ ÷Ť5ó˜ŸăKÔëŁü4SM˙>›˙^ßú%*ÝTÓäŚ˙ׅˇţ‰JŔĐľú‹Ÿ÷˘ţRS)ń¨š˙z/ĺ%2€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ßńëmţë˙č׏íCţB:Wý|ˇţ‰’´[ţ=mżÝýő¨ČGJ˙Ż–˙Ń2P•Q@EńČ˙ĽŰË÷şcŸş(Łă‘˙Kˇ—ďtÇ?tQ_UCř0ôGž&zŚŽsŁÚüĘß)č=ęÍVŃÎt{_™[ĺ=˝YݜÄ˙^§]á Şšoüôßúđś˙Ń)Vë*Ţ{űk[{VŇn$6đÇřĽŒŤ„PĄ†ćd ŕŽ3ŽzÖ†šđŤäŒ“#ŻNŸu€î:\Ű˙ϢßŮřşÎűeďýoďä?ü]l˝˙ -ďýü‡˙‹  Ű˙ϢßŮřş3o˙>‰˙e˙âë;헿ô˝˙ż˙ńt}˛÷ţ€ˇż÷ňţ.€4so˙>‰˙e˙âčÍżüú'ýý—˙‹Źďś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřşŃÍżüú'ýý—˙‹Ł6˙óčŸ÷ö_ţ.łžŮ{˙@[ßűů˙GŰ/č {˙!˙âčG6˙óčŸ÷ö_ţ.ŒŰ˙ϢßŮřşÎűeďýoďä?ü]l˝˙ -ďýü‡˙‹  Ű˙ϢßŮřş3o˙>‰˙e˙âë;헿ô˝˙ż˙ńt}˛÷ţ€ˇż÷ňţ.€4so˙>‰˙e˙âčÍżüú'ýý—˙‹Źďś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřşŃÍżüú'ýý—˙‹Ł6˙óčŸ÷ö_ţ.łžŮ{˙@[ßűů˙GŰ/č {˙!˙âčG6˙óčŸ÷ö_ţ.ŒŰ˙ϢßŮřşÎűeďýoďä?ü]l˝˙ -ďýü‡˙‹  Ű˙ϢßŮřş3o˙>‰˙e˙âë;헿ô˝˙ż˙ńt}˛÷ţ€ˇż÷ňţ.€4so˙>‰˙e˙âčÍżüú'ýý—˙‹Źďś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřşŃÍżüú'ýý—˙‹Ł6˙óčŸ÷ö_ţ.łžŮ{˙@[ßűů˙GŰ/č {˙!˙âčG6˙óčŸ÷ö_ţ.ŒŰ˙ϢßŮřşÎűeďýoďä?ü]l˝˙ -ďýü‡˙‹  Ű˙ϢßŮřş3o˙>‰˙e˙âë;헿ô˝˙ż˙ńt}˛÷ţ€ˇż÷ňţ.€4so˙>‰˙e˙âčÍżüú'ýý—˙‹Źďś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřşŃÍżüú'ýý—˙‹Ł6˙óčŸ÷ö_ţ.łžŮ{˙@[ßűů˙GŰ/č {˙!˙âčG6˙óčŸ÷ö_ţ.ŒŰ˙ϢßŮřşÎűeďýoďä?ü]l˝˙ -ďýü‡˙‹  Ű˙ϢßŮřş3o˙>‰˙e˙âë;헿ô˝˙ż˙ńt}˛÷ţ€ˇż÷ňţ.€4so˙>‰˙e˙âčÍżüú'ýý—˙‹Źďś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřşŃÍżüú'ýý—˙‹Ł6˙óčŸ÷ö_ţ.łžŮ{˙@[ßűů˙GŰ/č {˙!˙âčG6˙óčŸ÷ö_ţ.ŒŰ˙ϢßŮřşÎűeďýoďä?ü]l˝˙ -ďýü‡˙‹  Ű˙ϢßŮřş3o˙>‰˙e˙âë;헿ô˝˙ż˙ńt}˛÷ţ€ˇż÷ňţ.€4so˙>‰˙e˙âčÍżüú'ýý—˙‹Źďś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřşŃÍżüú'ýý—˙‹Ł6˙óčŸ÷ö_ţ.łžŮ{˙@[ßűů˙GŰ/č {˙!˙âčG6˙óčŸ÷ö_ţ.ŒŰ˙ϢßŮřşÎűeďýoďä?ü]l˝˙ -ďýü‡˙‹  Ű˙ϢßŮřş3o˙>‰˙e˙âë;헿ô˝˙ż˙ńt}˛÷ţ€ˇż÷ňţ.€4so˙>‰˙e˙âčÍżüú'ýý—˙‹Źďś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřşŃÍżüú'ýý—˙‹Ł6˙óčŸ÷ö_ţ.łžŮ{˙@[ßűů˙GŰ/č {˙!˙âčG6˙óčŸ÷ö_ţ.ŒŰ˙ϢßŮřşÎűeďýoďä?ü]l˝˙ -ďýü‡˙‹  Ű˙ϢßŮřş3o˙>‰˙e˙âë;헿ô˝˙ż˙ńt}˛÷ţ€ˇż÷ňţ.€4so˙>‰˙e˙âčÍżüú'ýý—˙‹Źďś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřşŃÍżüú'ýý—˙‹Ł6˙óčŸ÷ö_ţ.łžŮ{˙@[ßűů˙GŰ/č {˙!˙âčG6˙óčŸ÷ö_ţ.ŒŰ˙ϢßŮřşÎűeďýoďä?ü]l˝˙ -ďýü‡˙‹  Ű˙ϢßŮřş3o˙>‰˙e˙âë;헿ô˝˙ż˙ńt}˛÷ţ€ˇż÷ňţ.€4so˙>‰˙e˙âčÍżüú'ýý—˙‹Źďś^˙Đ÷ţţC˙ĹŃöËßúŢ˙ßČřşŃÍżüú'ýý—˙‹Ł6˙óčŸ÷ö_ţ.łžŮ{˙@[ßűů˙GŰ/č {˙!˙âčFG ¨Ťƨ¤*Š'Š$ňI=IŹíCţB:Wý|ˇţ‰’ś^˙Đ÷ţţC˙ĹÓ]Ţ_Ú;ŘËkť´ŒŇşÄŁ()?ŢÎN:wĎ´QEyÇ#ţ—n7/ŢéŽ~袏ŽGý.Ün_˝ÓýŃE}UŕĂŃř™ęš9Ώkó+|§ ÷Ť5[G9Ńí~eo”ôőfžsüizt†‚łóâůôĐżđe?˙#V…ĄŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ůŒř‡ţ}4/üO˙ČŐĄEgçÄ?óéĄŕĘţFŁ>!˙ŸM ˙S˙ň5hQ@ůńüúh_ř2Ÿ˙‘¨ĎˆçÓB˙Á”˙üZP~|C˙>šţ §˙äj3âůôĐżđe?˙#V…ŸŸ˙ĎŚ…˙ƒ)˙ů¤ś:ϜżkˇŇRw/e‘ÇaZŸö‡ôŤ”PEP‘|r?évărýî˜çîŠ(řäŇíĆĺűÝ1ĎÝWŐPţ =Á/‰žŠŁœčöż2ˇĘzzłU´s×ćVůOAďVkç1?ƗŠ×Gřh(˘ŠŔĐ(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘¨x‘Ţ?ęRF̎ś’•e8 „8 Đrř‡AŠWŠ]kOIОľÂ‚ę4ßřI|;˙AÍ7˙Sük˛Œ¤ŹF‘EˆŠގtçˇ­qđ’řwţƒšoţ§řŃ˙ /‡č9Ś˙ŕJvž{zŃ硭qđ’řwţƒšoţ§řŃ˙ /‡č9Ś˙ŕJoÂYáßíďřG˙á!Ňś1Ÿ°}˛?´tĎúźîéĎJ“H×íőMCY˛ˇI–M"őlî €;[Ă8+‚r6΃œ†ă$˙„—ĂżôÓđ%?ƏřI|;˙AÍ7˙Sük´óŰ֏=˝h‹˙„—ĂżôÓđ%?Ƨ°Ö4›ůŒZĚĄwŠec\]ožŢľ‡ăWÝĽ[ąz_Űn뙕NlŤ0ú;Đ3ÍźóȑE–ws€ u$Öoü$ž˙ ć›˙)ţ5rŕ+k2:†CxÄŤ ‚V YxöeR=ľoęz­ž—a6ĄŠŢŰYYŔťć¸¸•cŽ5őfbć€9OřI|;˙AÍ7˙Süh˙„—ĂżôÓđ%?ơőYŮ]hpó˙mݛ[I!Úɸ[Íq¸œýҐ6Ď%{Cő}~ßKÔ4k+„™¤ŐďZÎÜ +­źÓ’Ů#l8ÉÉ^1’9ßřI|;˙AÍ7˙Süh˙„—ĂżôÓđ%?ĆťO=˝hóŰր8żřI|;˙AÍ7˙Süh˙„—ĂżôÓđ%?ĆťO=˝k7Úýžť§Ë{h“$q^ÝY°”wŰÜIž ŕ´LG|˙„—ĂżôÓđ%?ƏřI|;˙AÍ7˙Sük´óŰ֏=˝h˜°ż˛Ô"ilnຍ[k4RúqV*-qłâŰ&ö‡#řśÉÜúăscÓqő5-QEyÇ#ţ—n7/ŢéŽ~袏ŽGý.Ün_˝ÓýŃE}UŕĂŃř™ęš9Ώkó+|§ ÷Ť5[G9Ńí~eo”ôőfžsüizt†‚Š(Ź Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( łźQ˙"ÖŠ˙^sč´j‡‰äđîĽjÎíi(UQ’IC€t˛?ďęiťę—Űa—÷°şÉüČęr„⏴­]ßFúĽö•Łí+@+ýŁ ˙˜˙„+tđŸy;>Áˇý7ű_9ű^ß˝ˇÎýď÷vóœUÉ/ď­ž*xž-RúçKđ”ž"ƒĎťł•ŁvťţÍÓü¸§ŃBÜrży°ŹT?Ż}ĽhűJĐ2îú7Ő/´­iZ]ßXţ/léPú~ľ˙ŃéVţŇľ•âyÖK+h‡.÷ÖŰWšÄŞÇ@¤ý4%ÉĆł˘Ÿú{“˙IŚŽoâ”şŽľŻhžŃ4ý?Q1Hşž§o{xÖđ´18ňQbĺŚÚŕm ˆWC¨şĹ¨é39 ‰vۘđč%Uçݙ@÷ w­O´­<#Sźfá/ xžů´#á˙}žYŹoäÄv2i×­nV}¨á%¤ÂĺH~\fŚÖľ; ´ĎI{âmLx^IŹ}śO5ě˙˛î7´çyŒJÓGćîČAÜnŻqűJŃö•Ľ`<ŠŇâëXAŇě|K­ÉáűMkcĄ(šňĹtť‰Y<üď‘<ő‘Cä’Hl€Ő™ń Tń—âíWM‡\śŇšĆ+hü8ú—Šo-šUĄ/öu†_ˇą—ĚVĚçn0¤†opűJŃö•Ś>Ľ`ßďí|Iâ]GMźŠňŐ4 ݤ‚;¸(Ë0‰NŮó)™pmŠ üŸzší&Ćm/ÇĹ6zÎłáńäö ľň&×ŢŢHĚůg+#śâĽƒ‚˝í+GÚV€9ôťqš~÷Ls÷EőT?ƒDpKâgŞhç:=ŻĚ­ňžƒŢŹŐm#?Řöše?)č1ŢŹ×Îb/SŽ—Ŕ‚Š(Ź Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  MŁčîěďŁéŽĚIfkHÉ$ő$‘Í'ö.‹˙@]/˙ă˙âjőGűE˙ .—˙€q˙ń4bčżôŇ˙đ?ţ&ŻQ@ąt_úéř˙Gö.‹˙@]/˙ă˙âjőGűE˙ .—˙€q˙ń4bčżôŇ˙đ?ţ&ŻQ@ąt_úéř˙RŰiÚuŹžmŽeo&1žtCL€*Í٢Žhš)ŁI#q†G =5OűE˙ .—˙€q˙ń5zŠŁý‹˘˙ĐK˙Ŕ8˙řš?ąt_úéř˙W¨  ?Řş/ýtżü˙‰ŁűE˙ .—˙€q˙ń5zŠŁý‹˘˙ĐK˙Ŕ8˙řš?ąt_úéř˙W¨  ?Řş/ýtżü˙‰ŁűE˙ .—˙€q˙ń5zІŇŇŇŃ--m핎JĂ '×TÔQ@Q@EńČ˙ĽŰË÷şcŸş(Łă™Ĺݡ̠o=Gű"ŠúŹ:ýĚ=Á/‰žŠ¤6í×ćSňžƒŢŹÖƒuý+WđĺÝ•ô2Á,+,.ABń¸Ü­ľ€# ƒČÍl}ŚŰţ~"˙žĹ|ö&ö˛ĐęĽ%ȉh¨žÓm˙?ßb´ŰĎÄ_÷ŘŹ9%ŘŇ薊‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨žÓm˙?ßb´ŰĎÄ_÷ŘŁ’]‚č–Š‹í6ßóńýö(űMˇüüE˙}Š9%Ř.‰h¨Mݨësýö(ű]§üýA˙Î]ƒ™QńĚ˙Ľ[ É÷ϲ(ŹÚ Äú›q Ú–Š ľ˛Ę#žP]“!~Ecœ+~TWŇRÄÓĽN”ŹěŽ7NRm¤xěˇâ}uK˙ NoěË]>[¨ .C4JJś7†o—;rÄă$š÷FÖő`?ăţoΊ+śMŃŐő é)č4ëzą˙—ů˙ďŞOí­Wţç˙ž¨˘˝+ ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛í­Wţç˙ž¨ţÚŐçţűęŠ( ţÚŐçţűęí­Wţç˙ž¨˘€˛ëĄ˙—é˙ďŞ?ľő3ÁžŸýŞ(Ą$|›ń{]Őľę–Ú•ëĎŸ}qok,h%aŒ2p,rNOŠ(Ż¨Ű›lô–Ç˙Ůgwenhywfar-4.15.2beta/doc/dialog/images/qt4-3.jpg0000644000175000017500000011343312364015347016376 00000000000000˙Ř˙ŕJFIFQP˙ŰC  !"$"$˙ŰC˙Ŕن"˙Ä ˙Äľ}!1AQa"q2‘Ą#BąÁRŃđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚáâăäĺćçčéęńňóôőö÷řůú˙Ä ˙Äľw!1AQaq"2B‘ĄąÁ #3RđbrŃ $4á%ń&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚâăäĺćçčéęňóôőö÷řůú˙Ú ?ú/GŃíćľÎMĂĺg =MdxĎTđď†Ú)ôŃ{¨^1KKVÝ,Äu<Gv$]…˙ {s˛?šýď­|ßń›[Őt˙ŒşŹĐ¸ŒĂkíŒíŒ sˇęĺŤęrŒńřÇAJÉ_Ëc‚N1‚mŁ?ˆŚÓáűfłđýaą2Ig~ˇ2Ä=Z<.@ď´ąö5ŮéŢŐôË}KMŽÂęŇáĹ*JpĂúcČŻ–|IüZ‹0ô(¸ţUé?˛Ž§w=ż‰4ŮZÚŢé&ˆ@F6ĺƒĺőęçy \ş‚ŞçÖÚ7ú“ BNÉŃý‹Śϕ§ýüŁűL˙Ÿ+Oűů\'íŤęz'Ă;CIšk+ĽżąŒM ႽÔJĂčT~ľÎü1ń˙‹žĎĹמ*´‹Z‹Lń ޟ žMuÉ„ŞŽč”tsóőňnŹÓľßŢlĄ^ÇŽ˙béŸóĺi˙(ţĹÓ?çĘÓţţW€j:×âfĄho5$´“Ĺ:u­˝ąŸĘň#“OiYH9†JńĎ~+Ă?|s‹8dţËťÔŻź/¨j6Z—Úškˆ¤ľÉw mÉ\ěĘqœOˇ—v?fťLbéŸóĺi˙(ţĹÓ?çĘÓţţW‡Ü|\ń†™ĄxJĂű LÖľÝcImAĽś3Iˆˆ„.ŘÓ"V-ó`OqZúĹr×YĐëĂi&Ľodó]Ţ ĺË;aĄ-‘/1# ćŸś—ó1{5ŘőŸě]3ţ|­?ďĺŘşgüůZßĘó_>%ń‡ˆn|Y‰çŃŽ#ÓľëË(DDąyr@1÷YžcŢ˝C?ôÎ/űčŐ*“j÷bqŠčCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙ž>y÷x­Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙+Ÿńö‰Ľ_ĹĽÚčÉŠę“&ôľˇ¸7ť„_Ż'°5Ógţ™Ĺ˙}đ{Ý_Rľń—ˆćI<šŢýă-Œˆv íˇÏĆÔĂSRMę{Ü?“Ă4Ä:nÚ+úž…sŹ[éaeń„#ą˛$şˇşűJEîŕŔ{€kŤIŃ&śY⾲’)rÓô–KÉîÖ]ŁšP¤œţę+Ň|)áŰ? x^ Ě,‹łI+ŸšY–sîMtTVxuOđDߍÄăÚu§{1ńpb+!˛1óˇń{QVž9ôťqš~÷Ls÷Eő”ęsSŒťŁĆjÍŁŐ4s×ćVůOAďVjśŽsŁÚüĘß)č=ęÍ|Î'řŇő;(˙ Ug˝E‘Ńmuś1BĐŘM*înT Až ň+BÍWíĂţúÇţ ŽřŠ>Ü?čŹŕŞç˙ˆ  TU_ˇúëř*š˙â(űp˙ ~ą˙‚ŤŸţ"€-QU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐWíĂţúÇţ ŽřŠô{‚˝žĄlěŘÍň;WrÍ€Nђpxâ€-QU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐWíĂţúÇţ ŽřŠ>Ü?čŹŕŞç˙ˆ  TU_ˇúëř*š˙â(űp˙ ~ą˙‚ŤŸţ"€-QU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐWíĂţúÇţ ŽřЧŤkĐcŁj7wMĘĂ%ʰ Ł˜ł'A8–^€ä ]ŮvÔÖ˘š?řHźO˙B{ŕLŸüfřHźO˙B{ŕLŸüf´öR#ÚDë(ŽOţ/˙Оßř'˙Łţ/˙Оßř'˙ŁŮH=¤N˛Šä˙á"ń?ý í˙2ńš?á"ń?ý í˙2ńš=”ƒÚDë(ŽOţ/˙Оßř'˙Łţ/˙Оßř'˙ŁŮH=¤N˛Šä˙á"ń?ý í˙2ńš?á"ń?ý í˙2ńš=”ƒÚDë(ŽV/k1H$Ôü1-Ľšó4é+š˝ƒäüçŔ'ƒĐ}¸Đ?X˙ÁUĎ˙Q(¸îTdĽąjŠŤöá˙@ýc˙W?üEnôÖ?đUs˙ÄRjŠŤöá˙@ýc˙W?üEnôÖ?đUs˙ÄPŞ*ŻŰ‡ýőü\˙ń}¸Đ?X˙ÁUĎ˙@¨ŞżnôÖ?đUs˙ÄQöá˙@ýc˙W?üEZ˘Şý¸Đ?X˙ÁUĎ˙Gۇýőü\˙ńjŠŤöá˙@ýc˙W?üE'ŰâÝą­ő‚ËŘL˛8ÉU)–ĆFp23ЎEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐWíĂţúÇţ ŽřŠ>Ü?čŹŕŞç˙ˆ  TU_ˇúëř*š˙â(űp˙ ~ą˙‚ŤŸţ"€-QU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐP_ÄIAo¨WĹö źĐpŰ6nŰÁąŒ‚3š_ˇúëř*š˙â(ŐWíĂţúÇţ ŽřŠ>Ü?čŹŕŞç˙ˆ  TU_ˇúëř*š˙â(űp˙ ~ą˙‚ŤŸţ"€-QU~Ü?čŹŕŞç˙ˆŁíĂţúÇţ ŽřŠľEUűp˙ ~ą˙‚ŤŸţ"ˇúëř*š˙â(ŐWíĂţúÇţ ŽřŠ>Ü?čŹŕŞç˙ˆ  TSa’9˘Ibu’7•”ä0=>”ę(˘Š(˘Šň/ŽGý.Ün_˝ÓýŃEú]¸Üż{Ś9ű˘ŠúŞÁ‡˘8%ń3Ő4s×ćVůOAďVjśŽsŁÚüĘß)č=ęÍ|ć'řŇő:č˙ f[0OąUą[œÜĤ֝a6ŰY ˙ˍˇţ‰JŔĐŻâżEáíľ9lvöť<É$šd…oeQóHź– Ő[?ť~óXӿበ¸žTŐ/mÖa^Ve Ȇ $;œş”!r¤8#/âF™qŻxatËd•ËęZ|˛yS˜]bŽň$epTŠŒARŽ9Ĺrţ8đmăZ_Zč_ŢG?…őŤ%7š¤—.nn¨Š0÷3ŢKw 0IÁ<ƒ=ořJ7ź›Ĺ:vÉpmšfÔ"ł ŒśěƒˇŻ"Ąľń׆ŽÔ÷hÄĆL›żv¤îy8ä ôý[Ä:.ÖëŞë}şm–âćĺ"ó[Ńw¸ň8;ceg{{â *ÚÖř)´žkČŇ;€ŔcbpůŒőĺvVşˇ†´˝*ăXĐáŐeZé×pËyý–HŒĺ̎DĆUɸţíx9›¤řsÄ áĎ jVŁZ’đ…Ž›5śö26T%÷‹Ä+ąƒ€v~AÜ`ŢÄ٨k˛ćĆ?úűś˙ŃéYžśm/ĂV˜ć]֖PŔ|ŮD”@ż3€9 őŔéRëRćÎ>ĺćß˙G%7<ÚËń'ˆmô;ky%ˇşťžîqokkjĽžRŹűWq >Tv%ˆ)ćĽó˝ëÇvéŁGčŽ*N˛"şMđ9+‡ď'ó؀khž"kčnž˙GÔ´3jĄĺ‚ĆiÉÜ$Ţ2Ӝ6GĆEXÓŃźj¸Ő[Iƒ_ŇĽÔRCZ%äm0pŹĹJťvŐcŒg OcRŮř‹E˝Ő.4Ť=cNšÔ-†n-bšGš.qó 9_ÄWŽčIweŽü8Đ.t8c›GźşŠMI.!\쳸ŽI#œŠ}ápĺG'šˇđűÂzö“Ťč6úŠ×gM͋‡—O[9 ÄčY|¸ĹËn,Ť‘Ď%˜¨Čłůľ&˜űľ‚},e˙ѰÖgďV´7ÝŤHsŇĆOý 7wW ŞřŸĆöŢ1ƒĂÖžđě˙kˇşťľžOMč`’%ÔYś×?hŒí‡ óp3ŮîŹ;Ý*ćoé:úIśłŇďŹäBNňóËhč@Ć0ťç‘Őx<ŕÁ?4˓6™ŹęSśĽý˝¨éčćĆA”˝ž8!3*yAüľŒ-š¸<“Δž?đý‚ŰĹŞ=ŐŐÝĹüvŃŮiw2<Ÿe¸1J‹+ł4dŞą6Ôŕg˙Â#¨˙ÂýçYýŁţíŰ›g“ýąöݹ۝ţWˌcwÇÍIáoę:_‰,5;™ŹŢ+oíâÁ‹§j1ÜŌ¨čˆÁšáˆpćĂÇ´Ű ŇtJUŐšŚŘ;-œ ó/ YĄóJźĎ)ß*p<‘ťăojz3čśş>—i¨ßjځ˛‰.ŻZÚ$Ĺźó–gX¤= ˝Xr+Ô|#âŇŁE˛} ´Qâhułs4ҋŸo[š!ňÂČmá_ *•,:_řdř˘ăè÷Ck§jyr`˝šÖbŸd¸ˆ䄇|ɟ™rĄ†OB‡Ä+ງ_łžĂUłź{9ěl˘—PfeŽ)KĆ!{Dzx‰bƒŔ Ňťńż†­´‹ TßÉ=ž˘H´[[YŽ&˜€Kb(Ѥůpw|ż.9Ĺs>&đMüşuŸ„ ŠÂ9'–úŃőËť).ĺ“fٞę ó3.Ö1ůˇ Ÿ”V :F§đóĂúŻŤhóO¸Ő-ĺ:–Ą+ń^Ń[S–Îę÷÷đ[ÇokłĚ’IŚHQFöU4‹É`Í2ĎÄh4iő]v A˙ڗęŕ|墕Đ)'°9Ž™Äř‘Ś\kŢ]2Ů%rú–Ÿ,žTćXŁź†I\*B#T†ăŽqYŢ"đëŮiúKčÖ×úşiÚ˛ęŮŢjr\Ip<§ %̇KʊĽ‚îNÄ恝˝Śť¤ÝŰYÜÚj–7_9KI"¸V[† ĚDd1ڎp3Âąěj;˙čzzJ÷ú֛h°ÍäHgşD '—ćě9<7—óŕóˇćéÍy´zNżoäx†-ÄŠâi5ěxî!¤/bö¤,"ó 9”řË0ݚK\ÔüGŤŤhÖńöĄ‚Yâ”ÇégŽCľˆÜ& 02Aäd ÔťŠ|Uđő׆üauámcJÔu/Ř\\ÇšŽTŸËˇYDŠ#}Íé qó^ŮŽˇIń‰ŤĎq“Źéڄ֭śâ;k¤•˘>Œ’§ƒÖźóÄZ^šqŚ|KŃíô‰ćţßľžk ‘4")´řm„$Ž^2rWf:°4đźżŮŤ˙ —ş¤1Ďc ˇIˇŕ(ŒCƒé\ś­áÍWSńöŠ¨ŚšŤhú|úE•ŽëˇáŇ[śuc$në´J˜+łďžIqţ?đNJΛŽřĂ]ä:t–1ÁŚ%°Ž [˘(¸yÔĚd ›TŚ0ŞŸ2HőýcĹ>ŃîVŰW×ô­:wĽXŽŻ#‰Š(%˜ 힃Ľżń‹a¨ŰiˇúƝk}vqmm5Ę$łs‘IËsé^;ń}.ět?ˆP6‡¨šÝšË ɸ…~Íţް¤nŒÁóćFĎĹlť‘ÁÉŤ~7đž˝{â/˜Žťsaވp4étřŇ ‘*m‘Ž#iS ĽĂD[‰ d€{?›T5Is}Ľ{]ˇţˆ–;ŢŠj2ćóMçĽËč™(šćÖ‰|VúFŻa¤Úč:Žł{{÷ ‹[ŽČáh•ŮŒŇĆ:̀IëéZw˝r>+đéןo˘^\A4űM6ú)&łÔf´u–Im )h]Xä8ĺ~QžvĐšl÷:.­aŠŔą¤´¸I•[Е$í\öŤń ŰMÔ5xŚĐ5Š4ýe‡PÔâXŢaŽbĹ|ß4ޤ¨I9ôŁL°¸ľřƒ­j‚Ýc˛ťÓ,"I¨ß4r]oČä+ĂÉŒœa]ęşď‹UŐő[mTÔcěř ä"ÎÚ6.ŢY”Ńşš Ó$ť˙„—AţŰţĂţÜÓ?ľqŸ°ýŠ<üc9ňóť§=)—>)đ휍ý“qŻéPę9AöI/#Y˛ěÂw|ĚĘ’ë^SŹčŢ5ť×˘,oc´‡Ä_*ŰgÇbmĹÚťIʛ“1q~W$ž ľ ń]ŘtI´8nOZß&Ś.!?ë/’pť7yžjÄŰ1ˇZçv8 b>"ŃW[Ö4᪕Ţ,Ęyĺqœůy݌sœV‡›^1„őčźQ$W']¸˛˙k¤°K§Ľ šťËGö­Ęż!PH`0Tŕzǝď@‚y⥳?ôé?ţ‡ _ókiâyjs˙.ÓčQUß;ހ3őĎ.ŸŤdŮhşŚľ~°-̰Xˆ‡“3*ł4˛"üĹ 'i⼃ÄÖî,ĺşň´Č§‚Y-BaĘ2Ix‘†\ž †Ŕ-7rŢ;ąZ´_đ‰ęڔ‹–—ÚFŞśw1üĔbeˆ”čGĚܓňŽůi~)_웽SM]fx4MRÎhg¸Œ†3Üژ!•Ž~ę2Ŕ ěcÉ goă/x{Â6°ĎŽę–śžuÄ0"Iq9ó%X÷áŘ|‹¸łĘŹ{V{ü@ŃmźSug¨ëš%Ś’tť ŰšnŃĂ\It×-ľ×l1•Űýârr1Ä[řGÄ:/‡îôß-őűŸśiš‚^ůʲĚ-Ža‘­züˇ–IŰóÄ6YúÍ?L{ĎjZţ٤ źĐlm\yo"0–é慶ł‘gŠěN(ŞńťkĄřoQ×ÚiörŢJ!’4.vä€IŒ=ë/Lń¤_ËaŹi:‡ncľk°ş“AąáFUwE+ڞdns\ĂčşËţχÂĎl[Zo g˜ Ť“qöO/füíűüg8ďœRx‹Âş”ZećŁkŠßx“\G łjijDQyńÉ ‰8âó?vŹĽÁůŃ2p(ťÓËq,łE'ٔF*eˇpĂ-…m喣âígÇpYéM˘]OcكMI+C<ň2ČẄ3&ŐĂoY Płhşî“­ÚÍTąÔ­ƒ3Z\,Џu”‘Ÿjťćםü7Óu=KWŐ58őԞő-ă'T’Äťy~g!m áŔÜÄą Ł=Żď@‹ž9ŇŘúÝÜ˙čů+N˛ź*sŁçÖćç˙G˝jĐEPEP‘|r?évărýî˜çîŠ(řäŇíĆĺűÝ1ĎÝWŐPţ =Á/‰žŠŁœčöż2ˇĘzzłU´s×ćVůOAďVkç1?ƗŠ×Gřh+>ţęĘĘq.ľžŐi¤ÎŃ€N#ĆHÁÇ8ÍoUM7ţ@úoýx[蔬 ďě}Cţ~tĎűű/˙ŁűP˙Ÿ3ţţË˙ĆŤJkŤh$×ÄÄdp?űBĂţ­żďę˙QţÇÔ?ççL˙ż˛˙ńŞ?ąőůůÓ?ďěżüjŻhXĎőˇýý_ńŁűBĂţ­żďę˙QţÇÔ?ççL˙ż˛˙ńŞ?ąőůůÓ?ďěżüjŻhXĎőˇýý_ńŁűBĂţ­żďę˙akˇÖŐěü;¨Ź/ž!t(żźťĄ8>⯍ü 3ţţË˙ĆŞ÷ö…‡ü˙[ßŐ˙?´,?çúŰţţŻřĐě}Cţ~tĎűű/˙¨nô Bâ%íšbâD|ů’ŸşáąţŤÚľ?´,?çúŰţţŻřŃýĄa˙?Öß÷őƀ(˙cęóóŚßŮřŐŘú‡üüéŸ÷ö_ţ5Wż´,?çúŰţţŻřŃýĄa˙?Öß÷őƀ(˙cęóóŚßŮřŐŘú‡üüéŸ÷ö_ţ5Wż´,?çúŰţţŻřŃýĄa˙?Öß÷őƀ(˙cęóóŚßŮřŐŘú‡üüéŸ÷ö_ţ5Wż´,?çúŰţţŻřŃýĄa˙?Öß÷őƀ(˙cęóóŚßŮřŐŘú‡üüéŸ÷ö_ţ5Wż´,?çúŰţţŻřŃýĄa˙?Öß÷őƀ(˙cęóóŚßŮřŐŘú‡üüéŸ÷ö_ţ5Wż´,?çúŰţţŻřŃýĄa˙?Öß÷őƀ0­<oiŞ\j–ś~‚ţäb{¨‘ÖYGűN!Ëtîj˙ö>Ą˙?:gýý—˙Uďí ůţś˙żŤţ4hXĎőˇýý_ń eě}Cţ~tĎűű/˙Ť:UÍä“O-ʊöíů.ěA/sšWŒ!隗űBĂţ­żďę˙Úóým˙Wühk&ŒšŤýĄa˙?Öß÷őƏí ůţś˙żŤţ4k&ŒšŤýĄa˙?Öß÷őƏí ůţś˙żŤţ4k&ŒšŤýĄa˙?Öß÷őƏí ůţś˙żŤţ4k&ŒšŤýĄa˙?Öß÷őƏí ůţś˙żŤţ4k&ŒšŤýĄa˙?Öß÷őƏí ůţś˙żŤţ4ÝrÚ[íňÎ&U’xYą8ŽőOűP˙Ÿ3ţţË˙ĆŞ÷ö…‡ü˙[ßŐ˙?´,?çúŰţţŻřĐě}Cţ~tĎűű/˙ŁűP˙Ÿ3ţţË˙ĆŞ÷ö…‡ü˙[ßŐ˙?´,?çúŰţţŻřĐě}Cţ~tĎűű/˙ŁűP˙Ÿ3ţţË˙ĆŞ÷ö…‡ü˙[ßŐ˙?´,?çúŰţţŻřĐě}Cţ~tĎűű/˙ŁűP˙Ÿ3ţţË˙ĆŞ÷ö…‡ü˙[ßŐ˙?´,?çúŰţţŻřĐě}Cţ~tĎűű/˙ŁűP˙Ÿ3ţţË˙ĆŞ÷ö…‡ü˙[ßŐ˙?´,?çúŰţţŻřĐ÷ƒmďő mBúĎáW–§6÷#ꐜçäcWđŤ˙Řú‡üüéŸ÷ö_ţ5Wż´,?çúŰţţŻřŃýĄa˙?Öß÷őƀ(˙cęóóŚßŮřŐCq jËo'Ű4ÁäČ_dźüŒ¸˙Uţ×éZŸÚóým˙Wühţа˙Ÿëoűúżă@ąőůůÓ?ďěżüjě}Cţ~tĎűű/˙ŤßÚóým˙Wühţа˙Ÿëoűúżă@ąőůůÓ?ďěżüjě}Cţ~tĎűű/˙ŤßÚóým˙Wühţа˙Ÿëoűúżă@ąőůůÓ?ďěżüjě}Cţ~tĎűű/˙ŤßÚóým˙Wühţа˙Ÿëoűúżă@ąőůůÓ?ďěżüj¨7ƒmŰY]iŹü:u5M‹xQüđ¸Ć7ů;ąŽŮ­ßí ůţś˙żŤţ4hXĎőˇýý_ń eě}Cţ~tĎűű/˙ŁűP˙Ÿ3ţţË˙ĆŞ÷ö…‡ü˙[ßŐ˙?´,?çúŰţţŻřĐ#-ô AŻbšűf™ű¸Ý6ů’ó¸ŠĎúŻöZ›űP˙Ÿ3ţţË˙ĆŞ÷ö…‡ü˙[ßŐ˙?´,?çúŰţţŻřĐě}Cţ~tĎűű/˙ŁűP˙Ÿ3ţţË˙ĆŞ÷ö…‡ü˙[ßŐ˙?´,?çúŰţţŻřĐě}Cţ~tĎűű/˙ŁűP˙Ÿ3ţţË˙ĆŞ÷ö…‡ü˙[ßŐ˙?´,?çúŰţţŻřĐě}Cţ~tĎűű/˙ŁűP˙Ÿ3ţţË˙ĆŞ÷ö…‡ü˙[ßŐ˙?´,?çúŰţţŻřĐ|ş䱛˙^ßú%+Aö6ąpţ_÷ž´ü¸˙¸ż•féßň¸˙Żx˙ô'Ž]lŞ2ń%ž§ŤkśÚ=Äś–śŒś`†ˇŠc;™YÉiJĨňşdšîź¸˙¸ż•B“Y=ěśI-ť]EK$!tG,ŠőŠ8Ą*ŘčkŐő?ÇŽˇ†<5sŚyş^‘íÍÖŻĘ×FF–4Aĺ˛'ČrŇrĺÂć-źa4ž ›Ĺ–ŃÇý­˘řKO–ňăźÔnŁqÁ2¤ÍƒÓ dĹ=sˏű‹ůQĺÇýĹüŤń׌ľÝ'VŐôÝŰM–kXô/ł}¤>KíB[Y•=˘•Ŕŕ’NáĹE§ń*oę~ŽóÂi°˛ˇż§O¸ *ÎÓ"EäůůRÝó&óÁ_“­z—÷ňŁËű‹ůWšhž.ńŸ‹n­áo7†4Íl›űyg2ěÜ~ëä‘ÜB>nŁž?+üIŠ|;đo ›QÓŽŽo4KˆâśÔ&‰]ŢZ #‘‚L ;/έ€N1“HHňăţâţTyq˙q*uÄ7ˏű‹ůQĺÇýĹüŤ+Ćzľî…áMOXÓt;ÍvňÎÝĽ‡O´ KpŔ}ŐĎćp `ŞÍ…>Gđćăă߇ükm7tű=GńEĆéaÓ&ź='–vBJÁeČfwÄČgśÜypŰÉ/”­ą cp*y Ž9^=ŞvąŰ×_Q˙}ÇýroäkâĆĽ{ĽřfúăO¸ű-ġ–ö‚çh?gYîc…ŚÁă(˛3ó‘ňóĹ7ź¸˙¸ż•C{5•”÷ˇ˛ŰŰZŰĆŇÍ4Ě#Eff<$“ŔË]éö~Đ5ŸĹâ A,4ŮîgśźŐ&şYŒićd Klo”“jüǃĆ9ˆÚωáđ/‹tśq%˙‚őMBŢ]6)#ůQ*Iďwßţ˝ ¸Űœ7Ę)Œőď.?î/ĺG—÷ňŽ^ńŽĽaᯉZ”Pٙź-ç}…][l›4č.‡™ódţňV)_”ד•âřÖÄxďVӗ@ţÉ𔛼‰íćiď,`ş‘w‰Ćß˝`kŔ*0Kzo—÷ňŁËű‹ůWšxŁĹŢ2𭎰uuĐnŽĂގb-­ĺE†KAb—t„Ę¤ÎŸ2ůdínEkŘę+˙„Ą^xŹë˝>ĎŔzłâxŻüA¨%†›=Ěöך¤×K1<́)mň‘ňm_˜đxÂÔŢÍece=íěśöÖśń´łM3HŃFY™ $đMĺÇýĹüŤČ~#k>'‡Ŕž-Đt Á¤#Ńü¸˙¸ż•\Ü_ʝE0ĺÇýĹü¨ňăţâţTę(ž\Ü_ʏ.?î/ĺN˘€ĺÇýĹü¨ňăţâţTę(ž\Ü_ʏ.?î/ĺN˘€ĺÇýĹü¨ňăţâţTę(ž\Ü_ʏ.?î/ĺN˘€ĺÇýĹü¨ňăţâţTę(ž\Ü_ʏ.?î/ĺN˘€ĺÇýĹü¨ňăţâţTę(ž\Ü_ʏ.?î/ĺN˘€ĺÇýĹü¨ňăţâţTę(ž\Ü_ĘŁ¸ň᷒_)[bĆ:ŕTŐŁ˙ űúäßČĐO+RÔŁ;.śôôDŞÚ‡ü„tŻúůoý%\—ţCŻý~ýjžĄ˙!+ţž[˙DÉH *(˘˜EńČ˙ĽŰË÷şcŸş(Łă‘˙Kˇ—ďtÇ?tQ_UCř0ôGž&zŚŽsŁÚüĘß)č=ęÍVŃÎt{_™[ĺ=˝YݜÄ˙^§]á Şšoüôßúđś˙Ń)Vꦛ˙ }7ţź-żôJVƒě]bŕŸů÷˙Bz§ŻřOĂÚĺúę°]Gx#4öwóÚI$`’ÚRę 8VČ>ڧˇ´žű^°\Él]bß*&â Ú@ČírN˛Ž5ĎŮ_Kań“ÐÝŰKäÜŔ÷śqÉŠ@čTśUYF ˛ç;ŕekÁ>ŐⴊóO‘VŇŰě‘}šîkr`ă÷.bu/älŻľYżđ݆ŻăźŽëL‰’öÎŢĘdVd_&‘áU @B+Ë‚ đ1§Śřv{ë[ëO›ËKˆă–9íŕ‰Ł™Fw# ‚Ź<ÂČç]§~fżlú #_řƒT—:}łů:b-ws˛mvČXfEd$<Ă@)iţđ•“\É…Ä’ÝIg-Ä×÷Ë+ÚLfˇ,ň;1(ç<žFĺ@ť†ŸłsŹG/Ž­áśš]ÇćŽ&‘Ł\gi@ÉÝÎp1f? j#g™âiŰwm´ŒgîgqœIŽ¸Ü˝vôőm!4=<ę:ďŽ!ÓŹ˘Űç\]GšŸ™ř\âLgŚĺë´ď.€Żá˙hZ—ý“göo+OśÓS÷Žřśśó<”ů‰űžkóÔîäœ gj~𞣠é:đę1işDqGeŽ­ulE°ÄXĹ"—(cBŹĺŠ‘A$Öދ˘˙kéöúŽ›ăTÔŹĽ­Ĺ¤PÉ€l U—#´ž¸Ü˝vůגhzvľ‡Š|OŇ­ľW(>Ĺ,śŃÎůŮ÷ccťœIŽßNťNó@6,˘†ÎĘ HžfŽÖ43LŇš 0 ;’Ěx嘒O$“Sy‹ëLÂZˆŮćxšvĆÝŰm#ű™Ç\gcŽ7/]§y„ľłĚń4퍻śÚF3÷3ޏÎ$Ç\n^ťNňč,?Ě_Z<ĹőŹ MŸTÔu‹źE|%ŃŻŁ˛ť-gŹŽmíŽ NO˲b9ä8!2úqřKQ<ĎNŘŰťm¤c?s8ëŒâLuĆĺë´ď.‚ÄzƒŠ°¸˙–MüKŽ[Yß­í…ýźW6łďŠhePÉ"œ‚¤"’? j#g™âiŰwm´ŒgîgqœIŽ¸Ü˝vůşý—†ŹĄžń7Ä="ŐĺXD÷żgśä!IEg8ÜBL@ä஻ă@ąOFđ‡‡4™&’ÚŢęc4 nÂöţ{ľX›ŁQ3°D8UŔ8•ZĎŔ´Óu->=6i-ő+&ÓîD÷ÓĚßf`TŒîZ4Ă• Ű Ť^Ÿ@ń ďŘ´/Š:Nłt‘ dƒOšÖi6fÚĽˆ\–ä"uÚwëÝřröĆĆ[ËŻßIź^lŤo§ $`Ą DVfcś\*†9d1SźĐwÄŢđ‰.ogÖ4éć7ńŻ#ŽúxbšPťA’8ÝQŘX``Œ j^x{Bť°×ln,÷Űëűż´ÓÍqçî-ېršŠ4_—3ԓKĄiłęšŽącˆŻ„ş5ôvWeŹâU‘Í˝ľÁ)ÉůvLG<‚G&_N? j#g™âiŰwm´ŒgîgqœIŽ¸Ü˝vć€eřƒĂÚżć˙kYý§ÍÓît×ýëŚmŽ|ż9>R>÷”œőx#'/Öt=WœĎźża¸Óäď'1™Ta‚LQüĂćx#'0Á”ţ ˙…‘§ÉʍM=ßí8 ~ď%‡NÇ—ŽÓžöŁĄś“`چąăE˛ł„)žâxĄ†5&Ifás‰1ž›ÓŽÓźş#Â^đ˙…J ľx⎳ÇoqŹŢ\Áq€ąK+"ă d ŽĚ_ZĘđݕ—ˆmć‡ńÓYśFU’m<[̙ů7 ĘXq&:ărőÚwéGá-Dlóâßąh_tfé"ÉŸ5ŹŇl0ÍľKš,3ČDë´ď4­Ÿ€<iŚęZ|zlŇ[ęVM§Ü‰ď§™žĚŔŠ…Ü´i†?*ˇAIâox?ė7łëtóř„W‘Ç}<1\¨] Én¨ěˆ,00F:+ż^ŘŘËyuâ;é"ˇ‹Í•môá$Œ!`ˆŠĚĚv˅PÇ,€*wŇĐ´ŮőMGXą‹ÄWÂ]ú;+˛Öq*ČćŢÚŕ”äüť&#žA#‚.´/<=Ą]Řkś7{íőýßÚić¸ó÷@–íČ9\Ĺ/ˎ™ęIŁÄĐľ˙7űZĎí>nŸsŚżď]3msĺůÉň‘÷ź¤ç¨ŰÁ9ԏÂZˆŮćxšvĆÝŰm#ű™Ç\gcŽ7/]§~DéOâáßřY|šĘ€dÓŃ­ţӀˇîňXp$ěqšzí;ÝĐu-HÔŻVňúŐg™lçą™ąäNc2Ąŕî1GÉx#'4ü=ámB˝–ú¡ť’?(Ü^_Ow"ǜěV™ŘŞäľH8­GCm&Áľ cƋegS=ÄńC j>L’ÍÂçc=7§]§}o ŮYx†Đ^hm5›deY&Óżɟ“pÜĽ€'cŽ7/]§ytݘž´y‹ëLÂZˆŮćxšvĆÝŰm#ű™Ç\gcŽ7/]§~gˆ´Ůü?§[ßj"ž–)/ŹŹˆ‚Î-Ĺî. ˇSÉáwČÄő 0áŠĺĐXÖó֏1}jśŸáŮď![xźÝĒ´2<DËž7T•23†“)•$ĘÓGá-Dl󆛼_ lÝąçfvüł çccŽ3”ëÇ;[Ÿń?ďk^$žđŽĄăżhúN›1ˇŐ…Ö­ ÝĘżzŮUœ2Ć:HßĹ÷ń‘ĐhĐĎ'‰Z[hĄ–KxО¸Q˛¨çcË‘ƒ‚y#*Ýl’jƒ—gfŘݡuÓ ýüg÷gÄyëÍ×hޘŃâ˙uë‘âm9-5­2Ă“čqO¤Ţ͢ŰMpÎů1Í2,űcˆRŻ“ľşŢŁ­]´0k:Úć~š˜D]`72kR Ľ)]媍aT0öŠ$Ő˙.ÎÍąťnëŚűřĎîÎ3ˆó×›ŽŃžBţęĆ5ĘiDeXcyďŒjÎîÉd§Ţw0¨œČ@ÉQ˝ đřľßżĹ7‚ó\Ó´ýU|MäGgsâkĽ–]7íSL[s‡ƒ %ŢpÇs:€TzŻĹOx[Á~‡^ńOŮLqݤv 7– Ý2°@! ˇÎJ…]Đ3] ’jƒ—gfŘݡuÓ ýüg÷gÄyëÍ×hŢI&¨7ůvvmŰw]0ĎßĆvqœGž¸ÜÝvŕ—Á‡ŇŽ´-SWÓuÍ VŸTÔŢň˙űí'´śŁ|”d<•DŒą8,şvâ-kIđ¤ž"Óôxc\…ÍÍDŽľM8Jňi%f’(˜8g Ą- Ž Ű@5í’IŞ ţ]›cvÝ×L3÷ńŸÝœgçŽ77]Ły$š ßĺŮŮś7mÝtĂ?ýŮĆqzăsuÚ7€xG5č`ńoÄu_ëvţ)°Ô-×ÂúDz”Šҝ>ŃÖ$ˇdÁĺbH`ĄˇaK0|{ńŹú&łâ‰´ýNkM[Eś[‹8îźS=‘r°,šˇ°ŠK¸łí)űŢb–EPWÚô­&ëIÔuŰë;xd—Xžł oĐën–ę|ŞRŢs¸‚ňrB¨m9$Ő˙.ÎÍąťnëŚűřĎîÎ3ˆó×›ŽŃź‹đŽŠaŁřâŢŁ?‘ ž.˛ľVŘ͙gÓ´Čb\('ć’D\ôÉŔ×Oq❠ßíŢuöß°jVÚ]ĎîœůwWG“ßiƒćQż’0؞+űŤ‰ŽáłM2â[IL3"ßŃ>ÂęŽŒQ l@”ž@]óI&¨7ůvvmŰw]0ĎßĆvqœGž¸ÜÝvŕ+›řă=Ŕž:ΡwoI2Ű[,Ó¤+4˝ČUčIf < ؒMPoňěěŰśîşaŸżŒţěă8=qšşíÉ$Ő˙.ÎÍąťnëŚűřĎîÎ3ˆó×›ŽŃźÍtŸéWŢń6ŁáOxoĹHžâ8´ŰřŽ|śD>T1FŹH…dd#ćfËrŘ}câ m|㋭;Ĺv˛, Ô.&[_Ýę—p^¤`Ç1ómâűŒÉ˜Á^víA°šú.I5AżËłłlnŰşé†~ţ3űłŒâ<őĆćë´o$“Tüť;6Ć흎˜gďă?ť8Î#Ď\nnťFđńĆĄ­iŇxÚM*U‚ŇOZÇŞÎڄ–+ Żö-‘%ŽbŽG…L‚%.ŤňŁ,;wˇ×žż{^ĂUľMJE°–ĎV›SDƒËŒě7rÇNC™>l6 X•5ÖĹuq5Ü6iŚ\Ki)†d[âZ'Ř]QŔCąŠ4 ƒČ“Č ži$Ő˙.ÎÍąťnëŚűřĎîÎ3ˆó×›ŽŃźÉuřĞ?ƒÁVZ߆4¸ôz+‹Ö–înŽućśöńœË2L|ŮhĆâĚS°řĂ’Ú&—}Şëđč'OÔŇęŇöćŘOmÂ9yępž^×~Y“ °† śşŠ$Ő˙.ÎÍąťnëŚűřĎîÎ3ˆó×›ŽŃź’MPoňěěŰśîşaŸżŒţěă8=qšşíŔ<3Äž0š÷Á>%ź‡YÓ\[ęZrxŻÂ°ź"ę)5ŇH”ƅ˛ȤN9eŤëâ;;xÖăĂŢ!ÖľĎ Z&Ÿökčľw’ćIY.c[É<ĆŞy î ĂČTŠQQńN“uŻéÉcso Ĺ őľěf;ÂŹĎmp."1)xa ßř9P[NI5AżËłłlnŰşé†~ţ3űłŒâ<őĆćë´oůßCń Ƨš¤G¨[Ţévz߄ޭZßÄ7ÔAćÖdŮul´cqf)ëRIŞ ţ]›cvÝ×L3÷ńŸÝœgçŽ77]Ły$š ßĺŮŮś7mÝtĂ?ýŮĆqzăsuÚ7€rż`Ň[DŇďľ]~éúš]Z^ÜŰ íŁ˜G"=NËÚďË2aśÁś×›x—Ć^ř'ġë:k‹}KBŽOřV„]E&ĄIŇxĐś@y‰ŔÇ,ľîrIŞ ţ]›cvÝ×L3÷ńŸÝœgçŽ77]Ł~gŠt›­NK›xV(o­Żc1Ţf{kq9ˆáKĂnřwÁʂŔ\ž#ł°đ÷n<=âk\đĽ˘i˙fž‹WyŮ.d•’ć5ź“Ěa §Îౌ<…J•ćô?ÜjpkšDz…˝î—g­řJęŐ­üCq­DmaVM—SƎĂ÷ ňę§v$Şý$š ßĺŮŮś7mÝtĂ?ýŮĆqzăsuÚ7è_ÝXÂfšM2ŒŤ o=ńYÝŮ"L”űÎć“™*7€x–‚ářKă{oꗳřŽĎ^ťKűiőŤ›‰Ź­›VŸís+@ZٞO1c,řŢDŒ+Źř ¨]ß\ëʚ早é(-šÖ;?Ük~D§Ě†şš$<…Œůyb§q;C(ŻG’MPoňěěŰśîşaŸżŒţěă8=qšşíÉ$Ő˙.ÎÍąťnëŚűřĎîÎ3ˆó×›ŽŃźÉ~?ęşGö>łáý7WđőžŤyÝGG’̝OW"Z¸`D›œ˔)ŰĘl5ěŐNI5AżËłłlnŰşé†~ţ3űłŒâ<őĆćë´o$“Tüť;6Ć흎˜gďă?ť8Î#Ď\nnťFđ ”U9$Ő˙.ÎÍąťnëŚűřĎîÎ3ˆó×›ŽŃź’MPoňěěŰśîşaŸżŒţěă8=qšşíŔ.QTä“Tüť;6Ć흎˜gďă?ť8Î#Ď\nnťFňI5AżËłłlnŰşé†~ţ3űłŒâ<őĆćë´ošES’MPoňěěŰśîşaŸżŒţěă8=qšşíÉ$Ő˙.ÎÍąťnëŚűřĎîÎ3ˆó×›ŽŃźĺNI5AżËłłlnŰşé†~ţ3űłŒâ<őĆćë´o$“Tüť;6Ć흎˜gďă?ť8Î#Ď\nnťFđ ”U9$Ő˙.ÎÍąťnëŚűřĎîÎ3ˆó×›ŽŃź’MPoňěěŰśîşaŸżŒţěă8=qšşíŔ.QTä“Tüť;6Ć흎˜gďă?ť8Î#Ď\nnťFňI5AżËłłlnŰşé†~ţ3űłŒâ<őĆćë´ošES’MPoňěěŰśîşaŸżŒţěă8=qšşíÉ$Ő˙.ÎÍąťnëŚűřĎîÎ3ˆó×›ŽŃźĺNI5AżËłłlnŰşé†~ţ3űłŒâ<őĆćë´o$“Tüť;6Ć흎˜gďă?ť8Î#Ď\nnťFđ ”U9$Ő˙.ÎÍąťnëŚűřĎîÎ3ˆó×›ŽŃź’MPoňěěŰśîşaŸżŒţěă8=qšşíŔ.QTä“Tüť;6Ć흎˜gďă?ť8Î#Ď\nnťFňI5AżËłłlnŰşé†~ţ3űłŒâ<őĆćë´oŕôwóy7ů›íűˇf$ç;ß?]ÍţńęWP˙Ž•˙_-˙˘dŠ­a{{ťč$“ÍxçĎó|ÄF€Ÿ™™ż2OŠ=jCţB:Wý|ˇţ‰’¨“JŠ( "řäŇíĆĺűÝ1ĎÝQńČ˙ĽŰË÷şcŸş(ŻŞĄüz#‚_=SG9Ńí~eo”ôőfŤhç:=ŻĚ­ňžƒŢŹ×Îb/SŽđĐUM7ţ@úoýx[蔫uSM˙>›˙^ßú%+COÂň2]˙לúW;â˙ iú—ˆgŃtKĹ ­]q{qŠ5%ƒL‰É;üľœ cȎ ă8¤WEá?ů.˙ëÎ?ý Ş>řUľűřĺń-Źú…ËÝ]}“Ĺ•şI+um‘Ü*ŽRƎsĆţ3Őü-ŽÚř3ĂÂćWÓôhn¤ťťŃ5eî4‘G5°,Œ|‡-,„“BąÝŒĎř‚mmÜčQisĘž Ô$Y )yO­6mćcƒˆĚ|)k<ŸŢăŃuřwUŠĹo"Ô|Űqm Ô:­Ô7&.>I'I’ƒ€NölžNI&¤“Áž‘ƒ6–Łiń˛ş€–3´ö Ř$foöł†Č⁜ ŻÄ˙^řÍ폴‹‹.=y´wśĂšƒÉľ'6ďuöŕżf ŽĘc„S— ňרëześąĽÍ§]É{3mÜÖwłZĘ0Á†Ůaeuä á†FAČ$VDžđ̞ :ᲚKś¸[—Hď§Ky&\•íŐÄNŕ¨;™ ČČÝńţĆHôÓ§WgX×ĐŽ>ÝçXîű~ĽmŞ\ţőǙuoäy2pxŰöh>Q…;9-’ăÂÚÇŰźëßoÔ­ľKŸŢ¸ó.­ü&N~ÍĘ0§g 岳X~8´Ńnt &ńĄa§ŮŸ´I=ŚŠqbˀG/Łó—$Ž ˇ+ĆŃźY§Aa­Çxđ[ÜĽÔ_eżžŃÖTÎĆß ŁpN@Î2ęN‹hţĐźCńđř•lítŠçśŃŻľŤťśFŚRň,ň8Yß`ŕ}Áňő-X_|Kqŕßśł ŰęVöţžÔÔÜř_QąłY#›IžÖ¸W Ő îT|ŞđkÓ4?čš<óËo>ťv' –-K^˝ż…‘ˆČňî&tĎÎ3‚FpH5-žř> ;QӅ…äśš…ŒştđĎŠÜ̋m ĂĂy’„Ä{zA@N­âŰŻ jŢ5{ v–óTń­ľ„ö ďD$č–r´† pe“ |ŤŽHÉ$w źCŤxDź›Y°žÚâŇőí–wŇîtőź@ˆë2Ar<Ä_Ÿi°Ü‚G5{Qđ‡u58ŽôíăSźKëŚYäG7 q$¨ęÁŁ`ĆBżw=I&߆ô7ĂÖ/gŚ%ŔI%2Ę÷rÜË#ç’Vgc…Q’OÔĚÜŰľ—Ç])ŕžÔü­OĂú”×VŇjÉl^´äŇslIQTěNI5w⍗ˆo´;Hü?öš/Qő k;ŃissmąÁŽ)Ž66ógrĺU†ĺÎjk˙ř~űĹđx˛áľŻík|ž=rö8‘s(!YD[Ĺd۵ʂÁiř“@ŇüEb–z´Ir‰˘hŽ$‚Xœ$‘˛ş6†Tƒ‚Gzňöń%dž<5ŹŻ‡­őű}ví&¤řśýîÖť˝[u•fČJ8i9¸/ş0CnKăčŃx—Mń߇ŽŁ¤AeuüvóĂjń]I$J !¤Ę­ €ŠÇĚ&0 îâo|0ŃŻ<#sĄivĄžßŠéˇ:„ş…ě÷ÜĂoy Ώ4Œň7îŃŐA8ż‡$ÖÍżĂ˙ ĂĄę9Ó§žŰQ‘%ť{›é縕ЩŒîć\ĄU*C|¤ ¸ 4žńŚŁâ=*űDŐvÍqŚkţšK•Ń/4Ą,sęń(gşËäç ĘŔŒ`‚˙ řŤĹŢřOâëú§ˆ'‹_˝˛ąŽ :á]$:źÖŁv%™äŒ3&ČŃC"(Aźŕ×oŚü8đ}ƒÝIs,גŮMs5ÎŁsq,Ďg1žŮšI$f%$9äň0§*Ťř+ĂqAŹŰ $ľÖ¤io­fş–Hٙ™’&b‘gfcR͂r@ áoŠuÍ~çV˛Ölç"ČBđj@˝Ň˘¸oĚbżŸräŤ0!ÓĄČŹŻŠÖD_íŃ|AâăDě[;mJDˇś*¤H Só;JŹNíŞrČľÚřcĂG‡>ĐtÄ˝i.v‰eźÔ'ť•‚çjď™Ý‚Í…'Žk#UřmámKġž#”kśÚĽňF—3Xř†ţĚHąŽÔa™T3ŔI=I$°˘ŔĹQEQEQEQEQE‡ă‹Mç@’ojö}™űD“Új—,¸rđ:11ůrA8ŕ+‹Ńmˆ~"Ţ­Ž•<öÚ5öľwvÂÔĘ^EžG ;ě¸>^ĽŤśń‡…ôoiĐXkqŢ<÷)uŮoç´u•3ąˇÂčܐ3Œ€z€EmÁz&<ňŰϮ݉ŕh%‹Rׯoádb2<ť‰3Ć3Œŕ‘œ™Ý|Eń-ǃ|^Ú΃oŠ[ŰřRűSSsá}FĆÍdŽ>m&űXá\7T+šQňŤÁŤzˇ‹nź%ŤxŐě-Ú[ÍSĆśÖ?Ř'˝“˘YĘŇ-Á–L$MňŽ9#$ ‘Ű[|7đ|v٧ Ém5 téáŸSš™ÚA‡† ň%ˆöô‚´5řwPƒSŠďNŢ5;ÄžşežDsp‘GJŽŹ6 `+÷sԒ@(ü.ń­â=ňmfÂ{k‹KלYßKšÓÖń#ŹÉČó~}¤Ăr6 Ő+›v˛řëĽ<ڟ•ŠřRšęÚMBy-‹Ă6œ‘ş@Îc‚É Ę*“˝‰É&şo č:o‡Ź^ĎLK€’Je•î.幖G Ď$ŹÎÇ Ł$žŤ2˙Ŕžžń|,¸mkűZß'\˝Ž$\ĆJVQĆ1FY6ír °c@üQ˛ń ö‡i‡ţ×"Ľę>Ąmgz-.nmś81Ĺ1ĆĆŢclî\ްܚÍq âK xkY_[ëöúě7ÚLIńműÝŹ wzśë*Ě%”pŇr%p _t`†őh_ˆŹRĎV‚I#ŽQ4MĐK€@d’6WFĂ0ʐpHď\Š>hמšĐ´ťPßoÔô۝B]Bö{‰naˇź†gGšFy÷h栜ßÒh|aâ/éž ťđńÔtˆ,Ž˘żŽŢxm^+Š$‰A„4’UĄpXů„Ć]ÜrwŢ4Ô|GĽ_hšŽŮŽ4ÍĂ)rş%ć”%Ž}^%ě÷Y|ƒüá™XŒ@ôť‡ţ‡CÔ4s§O=śŁ"Kv÷7ÓĎq+ĄSÝĚšBŞT†ůHqQiż<`÷RC§\Ë5äśS\Ís¨ÜÜK3ŮĚgśf’I‰Iy<Œ)ʀ(ˆđߊź]Ꮔţ ń.ż¨Úx‚xľűŰ+ŕÓŽŇCŤÍj7bYžHĂ2l2"„Î u |SŽk÷:ľ–łg9BƒP:î•Ŕ“~cÝüű§%YElC௠Ĺłl,$’×Z‘ĽžľšęY gfffH™ŠDY™ŒaK6 ɋđƑáĎ´1/ZK˘Yo5 îĺ`šÚťćw`ŁsaAŔÉăšŕ~9Á˘éˇŢ'Ó§ńs]ˆZHď-u_/Nт*6{a"ůŃýçaĺLÄ+”mŻWŽg[đ†5­RMGSłşĺdiŕ…Â[\)–Ý\E!T|ęxvޚ€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€8Iä1Ş˙×á˙ĐŠęňŇżëĺżôL•r_ů jżőřôŞz‡ü„tŻúůoý%2M*(˘˜EńČ˙ĽŰË÷şcŸş(Łă‘˙Kˇ—ďtÇ?tQ_UCř0ôGž&zŚŽsŁÚüĘß)č=ęÍVŃÎt{_™[ĺ=˝YݜÄ˙^§]á Şšoüôßúđś˙Ń)Vꦛ˙ }7ţź-żôJV†Ÿ„˙ädť˙Ż8˙ô6Žśš/ ˙ČÉw˙^q˙čm]mK (˘…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@$żňŐëđ˙č Tőůé_őňßú&Jš/ü†5_úü?úŐ=CţB:Wý|ˇţ‰’™&•QL"řäŇíĆĺűÝ1ĎÝQńČ˙ĽŰË÷şcŸş(ŻŞĄüz#‚_=SG9Ńí~eo”ôőfŤhç:=ŻĚ­ňžƒŢŹ×Îb/SŽđĐUM7ţ@úoýx[蔫uSM˙>›˙^ßú%+COÂň2]˙לúW[\—„˙ädť˙Ż8˙ô6ŽśĽQ@Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( _ů jżőřôŞz‡ü„tŻúůoý%\—ţCŻý~ýjžĄ˙!+ţž[˙DÉL“JŠ(Ś‘|r?évărýî˜çîŠ(řäŇíĆĺűÝ1ĎÝWŐPţ =Á/‰žŠŁœčöż2ˇĘzzłU´s×ćVůOAďVkç1?ƗŠ×Gřh*Ś›˙ }7ţź-żôJUşŠŚ˙ČM˙Ż oý•Ą§á?ů.˙ëÎ?ý Ť­ŽKÂň2]˙לúW[RƂŠ( aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP /ü†5_úü?úŐ=CţB:Wý|ˇţ‰’ŽK˙!Wţżţ€ľOP˙Ž•˙_-˙˘dŚIĽESČž9ôťqš~÷Ls÷E|r?évărýî˜çîŠ+ę¨ˆŕ—ÄĎTŃÎt{_™[ĺ=˝YŞÚ9Ώkó+|§ ÷Ť5ó˜ŸăKÔëŁü4SM˙>›˙^ßú%*ÝTÓäŚ˙ׅˇţ‰JŔĐÓđŸüŒ—őçţ†ŐÖ×%á?ů.˙ëÎ?ý Ť­ŠcAEP0˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(„—ţCŻý~ýjžĄ˙!+ţž[˙DÉW%˙ĆŤ˙_‡˙@Z§¨ČGJ˙Ż–˙Ń2S$ҢŠ)ä_ú]¸Üż{Ś9ű˘Š>9ôťqš~÷Ls÷EőT?ƒDpKâgŞhç:=ŻĚ­ňžƒŢŹŐmçGľů•žSĐ{՚ůĚOńĽęuŃţ ŠŚ˙ČM˙Ż oý•nŞiżňÓëÂŰ˙DĽ`hiřOţFKżúó˙Cjëk’đŸüŒ—őçţ†ŐÖÔą ˘Š(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÂK˙!Wţżţ€ľOP˙Ž•˙_-˙˘dŤ’˙ČcU˙ŻĂ˙ -SÔ?ä#Ľ×Ëč™)’iQEŔň/ŽGý.Ün_˝ÓýŃEú]¸Üż{Ś9ű˘ŠúŞÁ‡˘8%ń3Ő4s×ćVůOAďVjśŽsŁÚüĘß)č=ęÍ|ć'řŇő:č˙ TÓäŚ˙ׅˇţ‰JˇU4ßůéżőám˙˘R°44ü'˙#%ßýyÇ˙ĄľuľÉxOţFKżúó˙CjëjXĐQE (˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šá%˙ĆŤ˙_‡˙@Z§¨ČGJ˙Ż–˙Ń2UÉä1Ş˙×á˙ĐŠęňŇżëĺżôL”É4¨˘Š`yÇ#ţ—n7/ŢéŽ~袏ŽGý.Ün_˝ÓýŃE}UŕĂŃř™ęš9Ώkó+|§ ÷Ť5[G9Ńí~eo”ôőfžsüizt†‚ŞiżňÓëÂŰ˙DĽ[Şšoüôßúđś˙Ń)X~˙‘’ďţźă˙ĐÚşÚäź'˙#%ßýyÇ˙Ąľuľ,h(˘ŠQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEp’˙ČcU˙ŻĂ˙ -SÔ?ä#Ľ×Ëč™*äżňŐëđ˙č Tőůé_őňßú&JdšTQE0<‹ă‘˙Kˇ—ďtÇ?tQGÇ#ţ—n7/ŢéŽ~č˘žŞ‡đačŽ |LőMçGľů•žSĐ{՚­Łœčöż2ˇĘzzł_9‰ţ4˝Nş?ĂAU4ßůéżőám˙˘R­ŐM7ţ@úoýx[蔬 ? ˙ČÉw˙^q˙čm]mr^˙‘’ďţźă˙Đںږ4QE (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€8Iä1Ş˙×á˙ĐŠęňŇżëĺżôL•r_ů jżőřôŞz‡ü„tŻúůoý%2M*(˘˜EńČ˙ĽŰË÷şcŸş(Łă‘˙Kˇ—ďtÇ?tQ_UCř0ôGž&zŚŽsŁÚüĘß)č=ęÍVŃÎt{_™[ĺ=˝YݜÄ˙^§]á Şšoüôßúđś˙Ń)Vꦛ˙ }7ţź-żôJV†Ÿ„˙ädť˙Ż8˙ô6Žśš/ ˙ČÉw˙^q˙čm]mK (˘…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@$żňŐëđ˙č Tőůé_őňßú&Jš/ü†5_úü?úŐ=CţB:Wý|ˇţ‰’™&•QL"řäŇíĆĺűÝ1ĎÝQńČ˙ĽŰË÷şcŸş(ŻŞĄüz#‚_=SG9Ńí~eo”ôőfŤhç:=ŻĚ­ňžƒŢŹ×Îb/SŽđĐUM7ţ@úoýx[蔫uSM˙>›˙^ßú%+COÂň2]˙לúW[\•2ܾŽíĹ´ŒĘ*2$uÔԛő/ú ę÷Ňń4Ź3ť˘¸Mú—ýőűé?řš7ę_ôÔ?ď¤˙âh°\îčŽ~Ľ˙A˝CţúOţ&ú—ýőűé?řš,;ş+„ߊĐoP˙ž“˙‰Ł~Ľ˙A˝CţúOţ&‹ÎîŠá7ę_ôÔ?ď¤˙âhߊĐoP˙ž“˙‰˘Ásť˘¸Mú—ýőűé?řš7ę_ôÔ?ď¤˙âh°\îčŽ~Ľ˙A˝CţúOţ&ú—ýőűé?řš,;ş+„ߊĐoP˙ž“˙‰Ł~Ľ˙A˝CţúOţ&‹ÎîŠá7ę_ôÔ?ď¤˙âhߊĐoP˙ž“˙‰˘Ásť˘¸Mú—ýőűé?řš7ę_ôÔ?ď¤˙âh°\îčŽ~Ľ˙A˝CţúOţ&ú—ýőűé?řš,;ş+„ߊĐoP˙ž“˙‰Ł~Ľ˙A˝CţúOţ&‹ÎîŠá7ę_ôÔ?ď¤˙âhߊĐoP˙ž“˙‰˘Ásť˘¸Mú—ýőűé?řš7ę_ôÔ?ď¤˙âh°\îčŽ~Ľ˙A˝CţúOţ&ú—ýőűé?řš,;ş+„ߊĐoP˙ž“˙‰Ł~Ľ˙A˝CţúOţ&‹ÎîŠá7ę_ôÔ?ď¤˙âhߊĐoP˙ž“˙‰˘Ásť˘¸Mú—ýőűé?řš7ę_ôÔ?ď¤˙âh°\îčŽ~Ľ˙A˝CţúOţ&ú—ýőűé?řš,;ş+„ߊĐoP˙ž“˙‰Ł~Ľ˙A˝CţúOţ&‹ÎîŠá7ę_ôÔ?ď¤˙âhߊĐoP˙ž“˙‰˘Ásť˘¸Mú—ýőűé?řš7ę_ôÔ?ď¤˙âh°\îčŽ~Ľ˙A˝CţúOţ&ú—ýőűé?řš,;ş+„ߊĐoP˙ž“˙‰Ł~Ľ˙A˝CţúOţ&‹ÎîŠá7ę_ôÔ?ď¤˙âhߊĐoP˙ž“˙‰˘Ásť˘¸Mú—ýőűé?řš7ę_ôÔ?ď¤˙âh°\îčŽ~Ľ˙A˝CţúOţ&ú—ýőűé?řš,;ş+„ߊĐoP˙ž“˙‰Ł~Ľ˙A˝CţúOţ&‹ÎîŠá7ę_ôÔ?ď¤˙âhߊĐoP˙ž“˙‰˘Ásť˘¸Mú—ýőűé?řš7ę_ôÔ?ď¤˙âh°\îčŽ~Ľ˙A˝CţúOţ&ú—ýőűé?řš,;ş+„ߊĐoP˙ž“˙‰Ł~Ľ˙A˝CţúOţ&‹ÎîŠá7ę_ôÔ?ď¤˙âhߊĐoP˙ž“˙‰˘Ásť˘¸Mú—ýőűé?řš7ę_ôÔ?ď¤˙âh°\îčŽ~Ľ˙A˝CţúOţ&ú—ýőűé?řš,;ş+„ߊĐoP˙ž“˙‰Ł~Ľ˙A˝CţúOţ&‹Â_ů jżőřôŞz‡ü„tŻúůoý%Y‚Jď4“I+ďw“'vĐUmCţB:Wý|ˇţ‰’˜*(˘€<‹ă‘˙Kˇ—ďtÇ?tQGÇ#ţ—n7/ŢéŽ~č˘žŞ‡đačŽ |LőMçGľů•žSĐ{՚­Łœčöż2ˇĘzzł_9‰ţ4˝Nş?ĂAU4ßůéżőám˙˘R­ŐM7ţ@úoýx[蔬 ˇ˝´>$˛ĐY%77–wq°`H^`Ns’gLqŮšeşçˆt Ŕ5˝sLŇÍÁŰźťH|Ă蝈Éçľ`x¸k^<Đőí?چˇm—i:ŮMlË-›Ą"yc ÇsX/ƒĆZĆŚ—–>Ö4ŰkÍ8[ÉŮFčH$”šyźŐňv˛˛ˆˇ‘˝ň3Ĺ!-ç4Ý3Çú&ˇŞé:mœzuĹŹ—W M,ňÝ#(,Ŕ7&äőČĆŢľŻhz"ŔÚÖł§iŤpű!7wI‘˝q>Âźł@Đ|S˘˝Œ÷Ţ:ě’x'LŃç&îŰ1ÜÇ癣}î3ޛ™wg €ÜáúŻ‚ą­˘ĘŹ-ü˨U3ŸŸ`x"ůsšé“Uü7áÍb_ ü7Ňu_Éxbö(ďEİ::ĂŚĎ ÜGľŰ*exö‚ƒÉPhŃ4OMŐě#żŇu MBÎLěžÖe–6ÁÁĂ) ŐořHź?ýťýƒýťĽ˙kă?`ű\hĆ3Ÿ/;şsҨx?JşÓ5ŸK5˛ÁmŹ­ŐŚÖ\:+TfŔ\gŠęűE‚ĐÜŔ~×<ŞžZĄG*#M„)r§÷§…恞—¤kúąqso¤kZnĄ5Ťm¸ŽÖé%hOŁ…$Šŕő­*ĺßB{ˆZ&Ľaauމ{e+Eľ3MhЌޤmŽl``sÓ#=E1Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@QÔ?ä#Ľ×Ëč™*őQÔ?ä#Ľ×Ëč™(JŠ( "řäŇíĆĺűÝ1ĎÝQńČ˙ĽŰË÷şcŸş(ŻŞĄüz#‚_=SG9Ńí~eo”ôőfŤhç:=ŻĚ­ňžƒŢŹ×Îb/SŽđĐUM7ţ@úoýx[蔫u•o=ýľ­˝Ťi7xcƒ|RĆUÂ(PĂs2pGÇ=kCFŠŁöËßúŢ˙ßČřş>Ů{˙@[ßűů˙@¨Ş?l˝˙ -ďýü‡˙‹Łí—żô˝˙ż˙ńtzŠŁöËßúŢ˙ßČřş>Ů{˙@[ßűů˙@¨Ş?l˝˙ -ďýü‡˙‹Łí—żô˝˙ż˙ńtzŠŁöËßúŢ˙ßČřş>Ů{˙@[ßűů˙@¨Ş?l˝˙ -ďýü‡˙‹Łí—żô˝˙ż˙ńtzŠŁöËßúŢ˙ßČřş>Ů{˙@[ßűů˙@¨Ş?l˝˙ -ďýü‡˙‹Łí—żô˝˙ż˙ńtzŠŁöËßúŢ˙ßČřş>Ů{˙@[ßűů˙@¨Ş?l˝˙ -ďýü‡˙‹Łí—żô˝˙ż˙ńtzŠŁöËßúŢ˙ßČřş>Ů{˙@[ßűů˙@¨Ş?l˝˙ -ďýü‡˙‹Łí—żô˝˙ż˙ńtzŠŁöËßúŢ˙ßČřş>Ů{˙@[ßűů˙@¨Ş?l˝˙ -ďýü‡˙‹Łí—żô˝˙ż˙ńtzŠŁöËßúŢ˙ßČřş>Ů{˙@[ßűů˙@¨Ş?l˝˙ -ďýü‡˙‹Łí—żô˝˙ż˙ńtzŠŁöËßúŢ˙ßČřş>Ů{˙@[ßűů˙@¨Ş?l˝˙ -ďýü‡˙‹Łí—żô˝˙ż˙ńtzŠŁöËßúŢ˙ßČřş>Ů{˙@[ßűů˙@¨Ş?l˝˙ -ďýü‡˙‹Łí—żô˝˙ż˙ńtzŠŁöËßúŢ˙ßČřş>Ů{˙@[ßűů˙@¨Ş?l˝˙ -ďýü‡˙‹Łí—żô˝˙ż˙ńtzŠŁöËßúŢ˙ßČřş>Ů{˙@[ßűů˙@¨Ş?l˝˙ -ďýü‡˙‹Łí—żô˝˙ż˙ńtzŠŁöËßúŢ˙ßČřş>Ů{˙@[ßűů˙@¨Ş?l˝˙ -ďýü‡˙‹Łí—żô˝˙ż˙ńtzŠŁöËßúŢ˙ßČřş>Ů{˙@[ßűů˙@¨Ş?l˝˙ -ďýü‡˙‹Łí—żô˝˙ż˙ńtzŠŁöËßúŢ˙ßČřş>Ů{˙@[ßűů˙@¨Ş?l˝˙ -ďýü‡˙‹Łí—żô˝˙ż˙ńtzŠŁöËßúŢ˙ßČřş>Ů{˙@[ßűů˙@¨Ş?l˝˙ -ďýü‡˙‹Łí—żô˝˙ż˙ńtzŠŁöËßúŢ˙ßČřş>Ů{˙@[ßűů˙@¨Ş?l˝˙ -ďýü‡˙‹Łí—żô˝˙ż˙ńtzŠŁöËßúŢ˙ßČřş>Ů{˙@[ßűů˙@¨Ş?l˝˙ -ďýü‡˙‹Łí—żô˝˙ż˙ńtz¨ęňŇżëĺżôL”}˛÷ţ€ˇż÷ňţ.˜˘îňţŃŢĆ[Xíݤf•Đ–%@IţörqÓžxŐ˘Š(Čž9ôťqš~÷Ls÷E|r?évărýî˜çîŠ+ę¨ˆŕ—ÄĎTŃÎt{_™[ĺ=˝YŞÚ9Ώkó+|§ ÷Ť5ó˜ŸăKÔëŁü4ŸŸ˙ĎŚ…˙ƒ)˙ů´(Ź üř‡ţ}4/üO˙ČÔgÄ?óéĄŕĘţF­ (?>!˙ŸM ˙S˙ň5ńüúh_ř2Ÿ˙‘ŤBŠĎψçÓB˙Á”˙üF|C˙>šţ §˙äjТ€3óâůôĐżđe?˙#QŸ˙ĎŚ…˙ƒ)˙ů´(  üř‡ţ}4/üO˙ČÔgÄ?óéĄŕĘţF­ (?>!˙ŸM ˙S˙ň5ńüúh_ř2Ÿ˙‘ŤBŠĎψçÓB˙Á”˙üF|C˙>šţ §˙äjТ€3óâůôĐżđe?˙#QŸ˙ĎŚ…˙ƒ)˙ů´(  üř‡ţ}4/üO˙ČÔgÄ?óéĄŕĘţF­ (?>!˙ŸM ˙S˙ň5ńüúh_ř2Ÿ˙‘ŤBŠĎψçÓB˙Á”˙üF|C˙>šţ §˙äjТ€3óâůôĐżđe?˙#QŸ˙ĎŚ…˙ƒ)˙ů´(  üř‡ţ}4/üO˙ČÔgÄ?óéĄŕĘţF­ (?>!˙ŸM ˙S˙ň5ńüúh_ř2Ÿ˙‘ŤBŠĎψçÓB˙Á”˙üF|C˙>šţ §˙äjТ€3óâůôĐżđe?˙#QŸ˙ĎŚ…˙ƒ)˙ů´(  üř‡ţ}4/üO˙ČÔgÄ?óéĄŕĘţF­ (?>!˙ŸM ˙S˙ň5ńüúh_ř2Ÿ˙‘ŤBŠĎψçÓB˙Á”˙üF|C˙>šţ §˙äjТ€3óâůôĐżđe?˙#QŸ˙ĎŚ…˙ƒ)˙ů´(  üř‡ţ}4/üO˙ČÔgÄ?óéĄŕĘţF­ (?>!˙ŸM ˙S˙ň5ńüúh_ř2Ÿ˙‘ŤBŠĎψçÓB˙Á”˙üF|C˙>šţ §˙äjТ€3óâůôĐżđe?˙#QŸ˙ĎŚ…˙ƒ)˙ů´(  üř‡ţ}4/üO˙ČÔgÄ?óéĄŕĘţF­ (?>!˙ŸM ˙S˙ň5ńüúh_ř2Ÿ˙‘ŤBŠĎψçÓB˙Á”˙üF|C˙>šţ §˙äjТ€3óâůôĐżđe?˙#QŸ˙ĎŚ…˙ƒ)˙ů´(  üř‡ţ}4/üO˙ČÔgÄ?óéĄŕĘţF­ (?>!˙ŸM ˙S˙ň5ńüúh_ř2Ÿ˙‘ŤBŠĎψçÓB˙Á”˙üF|C˙>šţ §˙äjТ€3óâůôĐżđe?˙#QŸ˙ĎŚ…˙ƒ)˙ů´(  üř‡ţ}4/üO˙ČÔgÄ?óéĄŕĘţF­ (?>!˙ŸM ˙S˙ň5ńüúh_ř2Ÿ˙‘ŤBŠĎψçÓB˙Á”˙üF|C˙>šţ §˙äjТ€3óâůôĐżđe?˙#QŸ˙ĎŚ…˙ƒ)˙ů´(  üř‡ţ}4/üO˙ČŐ%ąÖ|ĺű]ž’ó¸Á{,Ž8ă Đ(<˙´?Ľ\˘€ (˘€<‹ă‘˙Kˇ—ďtÇ?tQGÇ#ţ—n7/ŢéŽ~č˘žŞ‡đačŽ |LőMçGľů•žSĐ{՚­Łœčöż2ˇĘzzł_9‰ţ4˝Nş?ĂAEVEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPECĎńřwR’6du´”Ť)Á!Á€#—Ä: RźRëZzHŒU•ŽGPyŚ˙ÂKáßúiżřŸă]”e `‚4Š(ŔDDPTp ď=˝h‹˙„—ĂżôÓđ%?ƏřI|;˙AÍ7˙Sük´óŰ֏=˝h‹˙„—ĂżôÓđ%?ƏřI|;˙AÍ7˙Sük{ţĎ˙oÂ?˙ “ýąŒýƒí‘ýŁŚŐçwNzTšFżoŞj͕şL˛iŤgp\ÚŢÁ\‘śtŕä7Á ďü$ž˙ ć›˙)ţ4ÂKáßúiżřŸă]§žŢ´yíë@_ü$ž˙ ć›˙)ţ5=†ą¤ßĚ`˛Ôěîe ¸¤S+zŕë|öőŹ?ží*݈ŇţŘŁw\ĚŞp{eY‡Đ‘Ţ€!žh …çžDŠ(ÔłťœŠ&łá%đďý4ßü OńŤ—[XёÔ2Ć%Xd°JËÇł*‘č@=ŤSŐlôť ľ NöÚĘÎß5ĹÄŤqŻŤ3÷4ĘÂKáßúiżřŸăGü$ž˙ ć›˙)ţ5ż¨ř’ÎĘëC€—ŸűněÚÚIÖMÂŢkÄç°Fy+ؒŤëöú^ĄŁY\$Í&ŻzÖvĺ!]m朖É`qĆNJńŒÎ˙ÂKáßúiżřŸăGü$ž˙ ć›˙)ţ5ÚyíëGžŢ´Ĺ˙ÂKáßúiżřŸăGü$ž˙ ć›˙)ţ5ÚyíëYž×íőÝ>[ŰD™#Šöę̈́ žŢâHđO˘b;ŕŒ€xďü$ž˙ ć›˙)ţ4ÂKáßúiżřŸă]§žŢ´yíë@Ņý–ĄKcwÔjŰY˘0ӊąQkŸŮ0°œ9ĹśHśç×››ŠŠh˘Š(Čž9ôťqš~÷Ls÷E|r?évărýî˜çîŠ+ę¨ˆŕ—ÄĎTŃÎt{_™[ĺ=˝YŞÚ9Ώkó+|§ ÷Ť5ó˜ŸăKÔëŁü4QE`hQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEâůľOúó›˙@5ŁTěĘš˝j}ĽháŕÓ4 xSĹ÷ÍĄřŤěňÍc&#ą“N˝krłíGů-&*Cňă56ľŠŘMŚxzKßjcÂđxâH´ící˛yŻgý—q¸ý§;ĚbVš?7vB îău{ÚV´­+äV—ZÄz—câ]nOÜxĘk[řu Dז+ĽÜJÉçç|‰çʊ$ŠCdŹĎˆZ§ˆ4żjşl:嶔Ö1[GáÇÔźSylҨ… łŹ2ý˝Œžb°vg;q…$3{‡ÚV´­08ő+ř§kâOę:mäW–Š XE}$ÝŔŃFY„JvϙLČűƒlUäűŐĎi63i~>)łÖu˜ď'ś ůŻ‘6žöňF`Ë9Yˇ,äë˙iZ>Ň´âąkž$‰ ŢľaaŠŻˆü˜í.ęQ7Š­vóĺŘͿúHśçÓ;[¸>•Ą@‚Š( "řäŇíĆĺűÝ1ĎÝQńČ˙ĽŰË÷şcŸş(ŻŞĄüz#‚_=SG9Ńí~eo”ôőfŤiţÇľË)ůOAŽőfžsüiztžQE`hQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQERmGwg}MvbK3ZFI'Š$Ži?ąt_úéř˙W¨  ?Řş/ýtżü˙‰ŁűE˙ .—˙€q˙ń5zŠŁý‹˘˙ĐK˙Ŕ8˙řš?ąt_úéř˙W¨  ?Řş/ýtżü˙‰ŁűE˙ .—˙€q˙ń5zŠŁý‹˘˙ĐK˙Ŕ8˙řš–ŰNÓ­eómtë+y1đۢzdVh ÍsDŃMIŒ28ČačAŞŘş/ýtżü˙‰ŤÔPě]ţ€ş_ţÇ˙ÄŃý‹˘˙ĐK˙Ŕ8˙řš˝EQţĹŃč Ľ˙ŕüMŘş/ýtżü˙‰ŤÔPě]ţ€ş_ţÇ˙ÄŃý‹˘˙ĐK˙Ŕ8˙řš˝EQţĹŃč Ľ˙ŕüMŘş/ýtżü˙‰ŤÔP6–––ˆÉikolŹrV•>¸Ś˘Š(˘Šň/ŽGý.Ün_˝ÓýŃEÎ.ížeyę?ŮWŐa×îačŽ |LőM!ˇhöż2Ÿ”ôőf°źŻéZż‡,n쯥– aYar ĆĺmŹFkcí6ßóńýö+çą0—ľ–‡U).DKEEö›oůř‹ţű}ŚŰţ~"˙žĹaÉ.ƗD´T_iś˙ŸˆżďąGÚmżçâ/űěQÉ.ÁtKEEö›oůř‹ţű}ŚŰţ~"˙žĹ’ěD´T_iś˙ŸˆżďąGÚmżçâ/űěQÉ.ÁtKEEö›oůř‹ţű}ŚŰţ~"˙žĹ’ěD´T_iś˙ŸˆżďąGÚmżçâ/űěQÉ.ÁtKEEö›oůř‹ţű}ŚŰţ~"˙žĹ’ěD´T_iś˙ŸˆżďąGÚmżçâ/űěQÉ.ÁtKEEö›oůř‹ţű}ŚŰţ~"˙žĹ’ěD´T_iś˙ŸˆżďąGÚmżçâ/űěQÉ.ÁtKEEö›oůř‹ţű}ŚŰţ~"˙žĹ’ěD´T_iś˙ŸˆżďąGÚmżçâ/űěQÉ.ÁtKEEö›oůř‹ţű}ŚŰţ~"˙žĹ’ěD´T_iś˙ŸˆżďąGÚmżçâ/űěQÉ.ÁtKEEö›oůř‹ţű}ŚŰţ~"˙žĹ’ěD´T_iś˙ŸˆżďąGÚmżçâ/űěQÉ.ÁtKEEö›oůř‹ţű}ŚŰţ~"˙žĹ’ěD´T_iś˙ŸˆżďąGÚmżçâ/űěQÉ.ÁtKEEö›oůř‹ţű}ŚŰţ~"˙žĹ’ěD´T_iś˙ŸˆżďąGÚmżçâ/űěQÉ.ÁtKEEö›oůř‹ţű}ŚŰţ~"˙žĹ’ěD´T_iś˙ŸˆżďąGÚmżçâ/űěQÉ.ÁtKEEö›oůř‹ţű}ŚŰţ~"˙žĹ’ěD´T_iś˙ŸˆżďąGÚmżçâ/űěQÉ.ÁtKEEö›oůř‹ţű}ŚŰţ~"˙žĹ’ěD´T_iś˙ŸˆżďąGÚmżçâ/űěQÉ.ÁtKEEö›oůř‹ţű}ŚŰţ~"˙žĹ’ěD´T_iś˙ŸˆżďąGÚmżçâ/űěQÉ.ÁtKEEö›oůř‹ţű}ŚŰţ~"˙žĹ’ěD´T_iś˙ŸˆżďąGÚmżçâ/űěQÉ.ÁtKEEö›oůř‹ţű}ŚŰţ~"˙žĹ’ěD´T_iś˙ŸˆżďąGÚmżçâ/űěQÉ.ÁtKEEö›oůř‹ţű}ŚŰţ~"˙žĹ’ěD´T_iś˙ŸˆżďąGÚmżçâ/űěQÉ.ÁtKEEö›oůř‹ţű}ŚŰţ~"˙žĹ’ěD´T_iś˙ŸˆżďąGÚmżçâ/űěQÉ.ÁtKEEö›oůř‹ţű}ŚŰţ~"˙žĹ’ěD´T_iś˙ŸˆżďąGÚmżçâ/űěQÉ.ÁtKEBníG[˜ďąGÚí?çęűř(örěČňŽgý*ŘnOžx#ý‘Ed~Đ^'ĐtۈfÔľHm­–Q˜Dň‚ě™ ň+á[ň˘ž’–&*p„Ľgdqşr“m#ŔżeżkëŞ_řxjsfZéňÝAůr˘RUą¸ 3|šŰ–'$׺6ˇŤ˙ó~tQXĺ˛nŽŻ¨WIOA§[ՏüżĎ˙}Rmjżó˙?ýőEč™YöÖŤ˙?ó˙ßTmjżó˙?ýőEmjżó˙?ýőGöÖŤ˙?ó˙ßTQ@YöÖŤ˙?ó˙ßTmjżó˙?ýőEmjżó˙?ýőGöÖŤ˙?ó˙ßTQ@YöÖŤ˙?ó˙ßTmjżó˙?ýőEmjżó˙?ýőGöÖŤ˙?ó˙ßTQ@YöÖŤ˙?ó˙ßTmjżó˙?ýőEmjżó˙?ýőGöÖŤ˙?ó˙ßTQ@YöÖŤ˙?ó˙ßTmjżó˙?ýőEmjżó˙?ýőGöÖŤ˙?ó˙ßTQ@YöÖŤ˙?ó˙ßTmjżó˙?ýőEmjżó˙?ýőGöÖŤ˙?ó˙ßTQ@YöÖŤ˙?ó˙ßTmjżó˙?ýőEmjżó˙?ýőGöÖŤ˙?ó˙ßTQ@YöÖŤ˙?ó˙ßTmjżó˙?ýőEmjżó˙?ýőGöÖŤ˙?ó˙ßTQ@YöÖŤ˙?ó˙ßTmjżó˙?ýőEmjżó˙?ýőGöÖŤ˙?ó˙ßTQ@YöÖŤ˙?ó˙ßTmjżó˙?ýőEmjżó˙?ýőGöÖŤ˙?ó˙ßTQ@YöÖŤ˙?ó˙ßTmjżó˙?ýőEmjżó˙?ýőGöÖŤ˙?ó˙ßTQ@YöÖŤ˙?ó˙ßTmjżó˙?ýőEmjżó˙?ýőGöÖŤ˙?ó˙ßTQ@YöÖŤ˙?ó˙ßTmjżó˙?ýőEmjżó˙?ýőGöÖŤ˙?ó˙ßTQ@YöÖŤ˙?ó˙ßTmjżó˙?ýőEmjżó˙?ýőGöÖŤ˙?ó˙ßTQ@YöÖŤ˙?ó˙ßTmjżó˙?ýőEmjżó˙?ýőGöÖŤ˙?ó˙ßTQ@YöÖŤ˙?ó˙ßTmjżó˙?ýőEmjżó˙?ýőGöÖŤ˙?ó˙ßTQ@YöÖŤ˙?ó˙ßTmjżó˙?ýőEmjżó˙?ýőGöÖŤ˙?ó˙ßTQ@YöÖŤ˙?ó˙ßTmjżó˙?ýőEmjżó˙?ýőGöÖŤ˙?ó˙ßTQ@YöÖŤ˙?ó˙ßTmjżó˙?ýőE‡XŐüżO˙}QýŻŠž ôř?íQE i#äߋÚî­ŹxçTśÔŻ^xtűë‹{XČcA+ `“€c’p2xQE|}FÜŰg¤ś?˙Ůgwenhywfar-4.15.2beta/doc/dialog/images/cocoa-5.png0000644000175000017500000010567112364015347016765 00000000000000‰PNG  IHDRĐ0Ż\ xiCCPICC ProfilexՖgTɆŤ{r"Ě C†!g$ 9Ar•a† ă0dDEdqLˆˆ`X0(¸*Aրˆb`0ÇdPŽ‹(ˇŹçÜť˙îŸ[çtŐÓo}őuuW矐;9A ,@*?CčáĚ ˆdâ€H"‡›.pň÷÷˙Ř>ސxňŽ‘8×?†ý÷ i^l:Č™ŽáĽsS>‹đ W Ě>…pv†aTÂt!˛A„+Ä?ĎőbŽ™çós1Á.HL?x2‡#Œ€ôљYÜx$ia>/‘Ůa{n‡‡°xŠkÄ\…°nĚyâ`'f1'‡żČóD욘.HáäÎÝü/ťÔ”Lä{Í5*ғů)ËĹgCGŽ1ÇŐ{)sg6§ÇňC‚t~ĚrżŽş.° Ăůö^Đó\–/plşŰbž$Ž—řĚćň 3C8=+Čmó‚Ă˜뺨Ç%şłôÄ öⳒ×x/î\Ŕ\ŕ 8 d€X ̈ÍÉ@Ö—5‚\ab|BÓ ůăb ™l>×ؐifbj"žţżiâZ›ßě{Ć\ AŒ›k91Ř%#5ŕůˇ@ł.ňákڊАşiŰĘÍfÍçC‹ "Lň@h]`̀%°ŽŔ x? "Ŕ*ä '€T Ů lĹ ěťA58zpœmŕ<¸ ށ[ ÜO€Œ€×`|Óá Dƒä!UH 2€Ě dšA>P ECńʄňĄMP)TUCľPô+tş ݀ GĐ4˝ƒžÂ(˜ ÓaeX^ł`'؆WÂńpœÁŰŕ*¸>ˇÂ—á[đ=Xż†§PEB1Pj(# ĺ‚ňCE˘âPBÔzT ŞU‡jBu zPwP"Ôę ‹ŚĄ™h#´-Ú‚ć˘ÓĐëŃečjt=şݍžƒBO˘żc(%ŒĆĂƄcâ1٘bL%ć(Śss3‚ůˆĹbXŹÖM®Ŗa÷c›ąŘě0v ‡ĂÉă pv8?—+ĆíŝŔ] âFpŸń$ź*Ţ ďŽÄóń…řJüqüEü ~?M"hl~!—°p˜ĐA¸M!LĽ‰:D;b01‰¸‘XEl"^%>%ž'‘Hę$kR)‘T@Ş""]' ‘žŠd}˛ 9ŠœIŢF>Fî$?"ż§P(ÚGJ$%ƒ˛Ň@šByNů,A“0–`Kđ$6HÔH´J Jź‘$HjI:IŽ’Ě“Ź”<#y[rBŠ Ľ-ĺ"őZ/U#uNęÔ”4MÚTÚO:UşLú¸ô é1*ŽŞMuŁň¨EÔCÔ+ÔaŠŚAsĄqi›h‡iWi#t,]‡ÎŚ'ŃKé'é}ôIŞĚR™P™™™ 2"ŠĄÍ`3Rۧ÷_e•edceˇČ6ÉĘ~’S”s”‹•+‘k–ť'÷Už)ď&Ÿ,żSžMţ™ZA_!@![á€ÂU… Eş˘­"WąDń´âc%XI_)Pi­Ň!Ľ^Ľ)eeeň^ĺ+Ę* G•$• •‹*ăŞ4U{ŐDŐ ŐKŞŻ˜2L'f łŠŮ͜TSRóTËTŤUëS›V×QQ/ToVŚAÔ`iÄiThtiLjŞjújćk6j>Ö"hą´´öhőh}ŇÖŃÓŢŹÝŚ=Ś#§ĂÖÉÓiÔyŞKŃuĐMÓ­Ó˝Ť‡Őcé%ëí×ëׇő-ôôkôoŔ–‰ű  1†Ö†|Ă:ĂFd#'Ł,ŁFŁ!c†ąqĄq›ń›%šK"—ě\ҳ仉…IŠÉa“'ŚTS/ÓBÓÓwfúf\łłťćswó ćíćo—,]z`éC š…ŻĹf‹.‹o–V–BË&Ëq+MŤhŤ}VXt–?ŤŒuÝcíl˝ÁúźőK› ›Ó6ŮŮ&ۡ[Śł,vŮáeĂvęvťZ;‘=Ó>Úţ{‘ƒšÇĄÎᅣ†#Ďń¨ă¨“žS’Ó §7Î&ÎBççO.6.ë\:]QŽŽ%Ž}nTˇˇjˇçîęîńîî“k=:=1žŢž;=°•Ů\v{ŇËĘkWˇ7Ů;ČťÚű…žĐ§ĂöőňÝĺűtšÖrţň6?ŕÇöŰĺ÷Ě_Ç?Í˙ˇl€@MŔË@ÓŔüŔž ZĐę ăAƒƒˇ? Ń É é •  mýćV& _ž.üV„BDbD{$.24ňhäÔ ˇťWŒDYDGÝ_Šł2gĺU ŤRV]X-ššłúL4&:,úxô ǏSǙŠaÇ싙äşp÷p_óyźńXťŘňŘŃ8ť¸ň¸ąxťř]ńă  • ‰.‰Ő‰o“<“&}JöK>–<›–ŇœŠON=ǧň“ůÝkTÖ䏊˘4›´Ýi“BoáŃt(}ez{15˝™ş™?eeŮgŐd}ÎÍ>“#ĂĎéÍŐĎݒ;šçžwd-z-wmWžZţĆüĄuNëj×CëcÖwmĐŘP´a¤ŔŁ ~#qcňĆß M Ë ?l ŰÔQ¤\TP4ü“ÇOĹĹÂâ›m7üýsâĎ}[̡ěÝň˝„WrłÔ¤´˛tڌ[vsŤéÖŞ­łŰâśőmˇÜ~`vÇý;ëËĽËóʇwůîj­`V”T|Ř˝z÷ĘĽ•÷÷dîUůTľďŐÜťcďLuBő˝çšć}Jűśěű´Ÿˇđ€ăŚƒĘK~ý%ń—‡ľľ­uÚu•‡°‡˛˝<z¸çëHĂQ…ŁĽGżăŐÖw7X54W:ž˝nĚl?u˘˙¤ëÉö&ŁŚÚfFsé)p*óÔŤ_Ł˝Úűt×Ö™ŚłZg÷ľĐZJZĄÖÜÖÉś„6Q{DűŔ9Żs]ś-ż˙věźÚůš 2ś_$^,ş8{)ďŇT§ sârüĺáŽŐ]OŽ„_šŰĐÝwŐűęőkî׎ô8ő\şnwýü ›çn˛nśÝ˛źŐÚkŃŰňťĹď-}–}­ˇ­nˇ÷[÷w ,¸8č0xůŽëkwŮwoÝ[~oŕ~Čý‡˘ˆňŽ=JyôöqÖăé'O1OKžI=Ť|Žôźî˝?šE–˘ CŽC˝/‚^<ćżţ3ýϙ‘˘—”—•ŁŞŁ cfcçÇÝÇű_­x5ňZđzz˘ř_Ň˙Ú÷F÷ÍŮż˙ę Ÿy+|;űŽě˝üűc–~čšňŸzţ1őăô§’ĎňŸëż°žô| ű::=ƒ›ŠúŚ÷­ăť÷÷§łŠłłސ3çPHÇĹđî”Ä+ ž˜Ř9ď…ç" y˙ްŘÇĎyů˙äyż<o Ŕ‘NB đDĆdÔFFŞ#bKě`sóĹ QÄ-=ÎÜl ˛ą&Ÿggß+€ëŕ›pvvz˙ěěˇĂˆg@gÚźGű€Ľşš›YőĚöÍ-˙ąű7…čŞÍöě pHYs  šœ IDATxěÝ€$Eů÷ńš˝Ű˝œŕŽ#s‡ä ( dA@P‚$AEPDˆüQxA3‚E@ Š ˆŠ$EI"Qâ¸;ŽËq÷öí_í>Cm_OOžéů6ĚuwuuuŐ§{zžŠŠ™Íőöö:&@@(M Ł´läB@@ @s € € P†tXdE@@€šk@@2 ËŔ"+ € €Đ\ € €”!0´Œź-—5M-Wi*Œ €d@ úŠäĚţVrŽŐÚFPœgM@@V ś›6€&PŽ*@@6hÖŔşŠč*ƒf†k´á‹&#€ €@K T<ŹŁ™‚éA Ë šŤ ’ŤŮˇĽŽL*‹ € ’@ĹrTߒ÷ě`zPč2‚ćR‚ŢRň Ň5Äa@@J –KÉă#˜nh]bŕœ§mK87ŽÜüIe† € Pž@IpPlZţ´mžˆFŇ  Kœ ş…Ň뒃äRĘ Ëe@@ <˘nqĽä+”§Pş/ştÝč"ÁsRP›”f§Žœmiy­<ć € €őˆťńőđČĺn+˜żŢAtÝč΅‚ŕ0=\OB¸\Jž0?Ë € €•  lƒâÂ<ár%ńK…Iy“Ň|9ő ¤ë@—<'ˇń4[ˇyˆkËi۔§Řv+‡9 € €@eƒŮţâŇśŰ6›[ âëJ§Ĺ×mßş|ɰćtJđ`ăëjh˜fË6ĎCÄňYzR>m+”nű1G@¨­@Ą€6)=--Ü.[măińuŸŻÖ=Ń5  ŤžĂ זmn@iëńm…ö)–nۙ#€ €”&´Fť–’ĎSh=L—UĂbëžľ ˘k@—<ÇÝpݖmŽĆ–˛Ď_ËĐś´Šœźiĺ° @Ț@iëᜤĺ¤4ŤGÚ6Ÿ§VAtMčĎa𚴜”& Kˇš!†ŰŠĽ…ŰYF@(O ^mĎ´´p[ŇrRšĘUzĄmś]sMažž%FS~ĽÂ…Şč*ƒg˝aŕ›´li…ćÖôřvK×ÜśYZ|Ýҙ#€ €”'Hăë*ÍŇlnG°őbó° [Žď/ÓňYz~^m]U] xާáz|9žŽ†)­Üô{‡÷ž÷˝'wvvnť|ůrˇbŠ۟9 € €@:::\ëšîîî{o¸á†oFAôÝQłćô7Íhë]śumś4-‡Ab˜^hšâş˘!zŸUqMü–˛lÁłícśĽŮqÇ÷ŽĆ¨lťxńb_8˙ € €dK@¤Qđě† ˛íöŰo˙î¨uGyŃÂ_ņa€­úmJó[Ö~ůI1m%cĄ+  óG}cÁŕ7R.Y@ŹTËkińšĺQz׸qăöTĎ3 € €@śHO˜0a¨•ߏ3ZŁŐŃj˛Ľi]ůlŽôxĽŮdym˝˘y-č°qIËJłôpnéńš" ĽwDď ֋JKœ´ÍŢľ,X°Ŕ=÷ÜsnîÜš>ŻśEo,\„ť)SŚ¸ŃŁGťĄC‡:}L ôBSźĚgŸ}Ö͛77ęćďŰCűŽ;ÖM:ľŹ2őÎ*ăăfϛéîůß_ÝłŻ>î–v/ŇÇnXçHˇţj›şˇmź‡[eě$7lŘ0_×´zŞ?é € €@Ť DqŃzQÝ ZŔďyŽ7Mš;›kť-kŽÉśÇ—ýĆr˙);€ŽşÂ‘çGˇ<š‡ËĘaiĽĚ;tŚM===N=Ô/˝ô’S Ť yâĉnäȑ>0]´h‘S`}ß}÷ů€w­ľÖňcl˘ kežřâ‹ů2WYuU7rĈ¨ö9ˇŘ—šĐÝ{~̾×^ťh™ŞŁ†Ąü登ݸҍ;ĘMZs’[uÂ׳˘Ç˝öú+îŃWţéţýĚnŸˇáśZ7":žĆ1!€ €í"Đ˙}7ëLUł-N#f‹=Ă´‚ű*ś‚v ´ ć 7”@‡;GËVA%Űr8—-ŇŠ= ­ŁQű&N˖-sÓ§O÷ôjŤ­ćě1~üx@ϙ3Ç͜9ÓEßěôyTȚkŽé{x ŒUćË/żě˝|„ĎŤ!ieΞ;Óýéž_šńkŒt“§ŽtŁĆ q zf¸g_{8ĆąŘ-νćƎýęő(—‹N§ňN™źQTţ:iŚlC@˛(`ń ÚŚĺr‚č4…r+ΊqËé….+€NŤM˙6UJ“3űó˖–4Œ&òů §H›^ýu Ť§Xă›ŐŻáÖŻ! ZV­<š´Ď˜1c űÚkŻšUVYĹ硠¸ťťÇ-YźÔďcĂJ†ž/Sű¤•yďs]CÜÔ-˘á%نš(övs{_pOÍ[ áˆĆF}͍?Ô 1ŢúĎžĺ´Ďž+XO6 € €ĐGđŠě*xÖ˛ćŠ#K ŚľŸňj˛ĺ•çžÍĺ˙[Mm•˛š]ë–Ÿ+m/4ĐšbC8,+ŘUđŹáęqÖĂöÓ˛Ň- VŤ^hŰŽ Ĺ'•Šžçđ ‡ń25lCe*Ęœ5kVj™3Osën2ÉMœŹŢđ.×9tˆŇąÂ-ďˆöŇëFDuěęëÂeé¨nˇÎ&97sÖ´Ô2ăőf@Ȉ€âD  Ő$ ˘-Ž7ӂcígylŽźś]Ëń”WŰŇĘŐvő.+đƒň°L-[PŽźĹĘěśŘ­ľÖx7nĚX×Őő4épCŁĄ C˘zëœvŻĐ#ú Äč1lŘrˇÚZν0o^j=Ő~&@@ ƒÖmłšh=Ď[Zł+ Ňv šË˜ŁXŽäa%ĐVĂţšUÜćąÍ~5)@ÖŰÇśŤÁZÖ<\öiņp(pŐĂ]ŃZ'•aÁŽĺO+ׂńpŽý´ŽIÁˇĘłšĺK+s䰑nD4^zÔđ‘Ž+ žť˘čaŃ˛NAŻ[ÚÓí–DĺQ]ť†tşyÝ݈(N+ÓW†@@ě „1a<ˆÖ6 ŚĂ€ŮbĚP# ¤Ătĺ ÷ ˇ]Ž4€ŽlŽĎĂ|ÚfEiś.+­č—5„BŹŃ f@‡ÁŽ*a˝ĐĘkű(=iŇţçląÖ-(×qT–śZV^mWمŚIăÖp=KşáCťÜ°¨Î#†vFčKˆCşüŮ[Ň˝Ô K:–GÝŽgIÎMżFj™…ŽE: € Đâ>ŒÚ`Áłć'†iĘ`ń€Yű„˛­GɕO%ĐQШƒ•2…ů´>´¸ž´l´Ą  őËú­gý F<[íUßžř§źÚ'-ŘŐő›Íúő ˘mŽň´Żäš+ŻöI+síU6vOÎşŰEƒ7˘ :úE(9tDLwŠHב‹Ći÷_=Ń^œ7s‰Űhâ[RËô;ň € =‹Ő2 ˜-8V Š)>ˇ@šokßżá>śn°Ź˜7ŠíŠć+)€PňĘ+ńĘŰz˜Si–Î-]s žĂĺëé —őSô—őłu]]]ž'ZńžĹüęV €•G´~ĆÎę°,[Övý~´‚m ˘­<ĺѲʓďüůóý_Tž´şNż…›>˙7cÚ|ˇáĆŁ\gGôEÂč14§čŢhy…ëęˆţ(LtźňÜ,7˘k„›2aKˇl1ĆÜÎ s@h‹ 5ˇ€VËÖ-ŌÚΕnůľŹ)ÜćďŰZÁż•ĐŞ„&›÷­ üWۇś†ëár¤ôp˝h­^ßQŁFů€W˝ŔúK„am˝Âę%V ­íúC)io.´ž¨ü Ęľň‡A´Ö`+ĐVŢđ§óÔŘř´tQŻŰjÍ}ÝŁ3˙ŕfŽ†rŹ3ĚőtDĂ?ú?uˆţĄëéîu3_ZŕćÎZäŢşÖ~né˘eô@Ç!YG@vPŤšĐ¤2”Wś~žNe(HW™š´żĎ*GAśzˇÓĘTcGLr›ŻśŻ{꼿şe‹şŁŸßëFŒęă /‰ę?Ď͘˝Đmąú~nLn’›ˇ|^j™…ęO: € Đâ*°ľ MD˚[ Šy[zR@lyŁ]Ş›*  ­rvôp]ËśÎ-Ýć°ĺřÜś­[˝Ë  5ôbÁ‚~XEě*ÖišĘŤÉzŚýJ쟰LÇúÝhýń-k˛l ŰĐrŠe*ˆ;v˘ŰiĘ1îŠWďs/­’I…š…ëZś‡öľm–fó(žVôЍ`źúóŰK—.ő´~ëŮ~5C˝ÉJWđjăžŐ¤b=Űa™‘TŚĆ?—SŚ‚aŐC˝×ëŒŰ2˛CţĎŤ‡ZÁ˙Œ—gúoĺľqÖj# € ĐFaLhąĚ6ˇ<š[›‹ĘŇăËIëJó“bß( ƒl۔Ÿ  ó9űT‘řd•§‡ë–§”yP큢Ţ`˘š,îˇökO ÷-´\ë2Đ+8ž1c†×z›­Žśća@hŃ(knqZ,)mO ~ľ]S<ç×-VćR&ËoópŸ¤´p{ĄeŰĎćaž¤´p{ҲíŁ`şĐdy m'@ȰŔJ1aÔV ˘Őě0ž´u Šľ-ĚŤíśMËUOľ  “biá\ËĽ<<ÜŐW_]u#)@@ Ľ+Śő<Ť1a˛çńe­Ç pőPş-ۡ`[éL € €í% Pń &ÁńXŃÖľÝâEKłuÁá˛ňÖd˛ŠUR˜U˛ŘžVqĺłeŰ7iÝś)5őÓţL € €­'`1 Ĺ…á\­IZˇVj[ąÉö/–/qťU.qc,Ń*cóŘfżjŰ╲őpŽÂőBËIÇ! @@ ť…âÂ0]­×mŮTÂu-šl›Í ĺ˧—@çwJX(tŔBéV„m×ÜV'ÍmťĺgŽ € }ŀń˜ĐbEľžXŒXh{Ąô˛D­beíT łUČć–Më–fË6Wžřr˜VËúŠ\&@@ć°ŽÔ0†T­ăqŁ­‡ůlŮZië6ˇôŠçő PUɰ˘ńeŰnéáz¸\qăŘ@@ %ÂX0\VcÂu-Ű_×-OMć•ĐV!›—ZĺOÚÇғ楖M>@@l$ń–oaĄôxžp]űh˛yßZ‰˙ÖűgěŹI ł4Ť¸ÍľO|›•Ă@@ űIą ĹŠIŰ$b顎íŚU˝œÚű#*…VŹbńíśÎăËZˇGĄă’Ž € M‹ĂšZjëśÎľŹIyŇŚbŰ]ą85€N;rÂś°Aś9^A[ˇšňٲćöӵ̄ € Đ^ĽÄˆažPÇŇ--Œ1-­ây-čb•°†Ř\ům9ި0˝XšlG@Ȗ@R,Ƌś]­śe›×]˘ž´5Âćac”f0]˖nóřvÖ@@˛-`q Íă­ľtÍ㓥Ů<ž˝ęőrčR+Ď_+ŽmI0Ë € €í'#‹+CĽ´ź•äóűTó+a…Âĺ°2á˛ňX>›‡ŰăËaţřś˛×—-[ćţöˇżš˙ýďnŢźy^věđ†Ŕœ9sÜřńăßH`ŠfŘ֌r@A¸ŕ¨éĘmˇŻërQLoąńŰ+é}0e8ôŽXávßíůšž' sŽű@íŻ‚ŢŢ^7f̡ńĆť]vŮĹuuuŐę ĽĆvÇ)'řl´ĺ˛ę]M]ց dmY ŔśYzĹsϗ_~š›˘â2Íçí_ę›Őţž3 ř:ÜӚŠ|îv6*ťŽôŒÖSŰ&…NŠŤ&Nšč9äwŕW:Ĺ\ďzם,K5s.œ´O ˇ§-—łŸň†ÍL,ˇÔ:qç"‰aeĂeí_/RTĺ›őÎčż˙ýŻ;účŁ}!Z×ä{›‹ňřŹü“ Đ˝˘Çőô[&l&Š lŤŔKŮל*7˝ž¸Ç-XŇđ…ˇŐđFOzrŠ2íéą şĘÄîyîyŠš,„=ŇZŢíďp—\r‰ŰsĎ=ß谬ɑR o5ĘŽk9|ÚĽTÎĆzĐŞG؈x˝´-m{<Eëşi¸Ć„ üÍČz u˘óC6**š˝wę]Ńu@×ĺšTX{ÁJâÓ¨ŠŐĂśťťŰßĚěúŻU[–/_î†ÚĎĽz¸ÖĘ1­œzť´c–ťmѲ^ˇxyýďÓ_œőt­îş† [ЊęŃC×c&™6Ó=VĎőÎÎΖ§mŐű@1řÁşOŘ5Şšún”Ž˝–Öúő&ÁŔâČB7m/´-Ą¸ň’}§I ˜ @5oŻ—׺(÷âŋóűčäękłřžĂFĆýGËő/üţ÷żw3gΌôűü•žíśŰş 7ÜĐýęWżrx€żX,ż(Ěoiš—“ţđĂť{ţ}ß}ÔČQnʔ)îmo{›Ż{9ĺ”{ÜRóűŤŢČŇĐ|MÓۨ'řmˇŢćţň—ż¸5ÖXĂ[î˛ë.~ĎrĘŃőĘ˙‘Ł?âƍç~đƒôˇ¨oÖHórmŻšćˇ`ႂ&‡z˜ÓđĽwŢŮ}ĺ+_Iźožůf7yőÉnë­ˇ.XN’šŢ˜ŢpĂ n÷ÝwĎ{™Ő#?âţýďűô‘#GşőŚŹçŻáŽ\˙0Şţ=,RůĘRŤôr]U/Ýf͜Ő_Óž™î[lšEÍęUŹ}űíˇŸ?w§~ĺT_bů­˛rU}–t÷şeev–ţí–ßť×_›aŐőóÍśÚέ3uC÷§ëŻtťżç 7flß•yŕwî—?u† u#Gv]së€ý´ň›_^ě~{ŏÝĺźoĽmI O?ń°{äÁž{ěˆŁÜëLq›oÝwMĘßč4™Ž¨Ń=vɒ%îŞ_]ĺ<đŔü—żËš>ô:8uęT˙š´ŮŚ›  H*gÁ‚îškŻńů:‡vúďí¸ăŽnôčщ÷eL*§é•ÜZáľkßýöuťěź‹żÇ{řţj흨•&ęÖ]w]˙ÍŐ¤ü 2żńo¸÷˝ď}îńÇw=ô{˙űßď~úӟZöčʉ_;}›‘Ž›'_F?ěp˙Eƒ8Ŕ=ňČ#îžűîój݈:çႅ•Ž‘ęúPű’Ś•ň÷gŞezšś>ř {ýő×}Mî˝÷^7cĆ ˇĎ>ű䍿˙űö÷mЎ+ŹłŢ*0ÜęÍ[•. x•r ç+-„őŠGzšŽŞĂů睟xŘ|óÍëRßůóçťiÓŚš-śŘ"_žÎ›DŸúhŞˇS%ĺ/‚˝ĺ=ďGZKş‘[úe~Ó-Y˛ŘmúćmúŰĺÜŞ“×v&­é.ťč<ˇĺśť¸áŁĆEíuîĆk/uoŰuowü—ÎńyçΝ禿ôœŰ`ă-ýşţYá\ČG÷÷|ę v\KšűŽ[ÜežëvŮë}nÚSť§( Úv§žwąĎĎoű5*]ŚľşÇ.\°ĐŮkÖŘąc­)ýíT‹N/˝ô’ďAÔk”&]} ‘s ÷F}Ąě3ŸţŒż-]şÔ鞤OőÔ1¤ ZS%יß1öOšĺTrhś×Žřůń$Ń)ŠßăCŞr ĺË´eť>oiY1—}škyŞœ‡qaŇÓ[Ĺ+=ź˜ăëIy”VńTëşâŠÔsÇáÇű“i)čc;áŎŤqůg?ű™űҗžäÎ=÷\˙…ČxŢFŻŤÝĺ´]ż€đç?˙ŮżX}őŐóŐ-§ŒüN XĚz•k{ÖYgĺEN=őT÷ŻýË]pÁů´pĄPť~ţóŸűl…ś‡eėÓęŰL×pZ=ăm דî•8…eZV÷מö5˙;ž§^nj§’őeQpŻÚž‹mĄłŐ9)]ŻtŰîź§űř˙_´Ô÷šhů/˙Ë#žÝýďc˙{˙?ÝűŽř¸ëîqç_~ď.ůޙî—}ÜçSů=ş'Ek=Ń>VNŇqľƒŇp›0Ń}ᜟřüżżúbwŃš'ťăN97JŸäË-ĽŸ1V˙´ă–š_Śvüž}Ň˙MťÇꓢr^ł>÷šĎů_Y:眾7,VÍm9­6–çä“OvoyË[ÜŤŻžę6Űl3wÝu×ů_ÂJۡŢŰJmƒŐ#ÍŐň4z??áńÍ>LŤç˛XŁëÂż1éŸ+ćj‡iŕgŠmąNŚ~ĘN´>ŠI{ôDŰőP]ˆş(´ŚĎš5Ë˝ő­oőż)­ô×ú×ošĺˇ÷Ţ{űË•ţüĂíż˙ţž§Y7—_~ٗłÔŤŹI?ЧrP‡ĺëxv1Zş~2NcОzę)˙;֟üä'ÝöoťNňńÜé#3ŤçËÓ§ťĂ?Ü­ˇŢzž‡W7ÁÝvŰ-ߎW^yĹy䑾^ęuźýśŰV2ąăŞĚđaéËĺmÓ#Ünuˆ§k\˘<˙ HĘ˙jŹNˇEu˛ňŐŁŞön˛É&n­ľÖňm˛ňďžűn˙e…ľ×^Ű[^tá…ŢIǰóôŻţÓˇwęÔŠîŁý¨÷łzŢyÇţ͌Źt>ԓŤoi[ůa]­>aš•SËüĺچuĐuŁÉęhuśkůë_˙ş!Ű+zcxOh[žc=ÖżYłüZWţŮĎ~Ö_'ŻĎžíşŁëOoŕô[ŸęýîwżŰ÷Ix^Šť†ív ?]Öfs;Ž­Űź–镸ĘM׃ŐÇćŞ×?c×ޅѵ'#mÓóTĎm]ťÚGiVX4 IDATGä#îâ‹/Η%ăFĆ'öëwęO?ýt§ç§öՋ¤ö ĎÝćŃ}DçNo’Ź.VžŽŚ52}q4^wÉňŃ8čnQôk‹˘ń‹—빢`şbaÄńüł˘Ţˏźgk÷ôSOúrNýÄűÝKӞr—_pŽO˙űmr?9˙+îľ™Ż¸ŁŁ|ßýęçüq–ů!˝îžÜî>yČŽîČ=6u×^záJĺ[=ŐSŢ|='ŻłĄ?Ď>óŒ{}î|÷ÍS?áŽ}ßŰÜaťžÉűĽcݜů‹ňíú×]ˇš°˝;hűuÝWOü°ßţłď•oď+ŻÎpg|ęwŕŰ×vGďówĎ]ˇt°úÄdj簔óšvľ×(ý•őéOÚ}$şízUń;ßůN§OłžůÍoş;ďźÓýň—żôץŢÔiMł˘ĄzíHş—†×Ÿő>ވî J׸ŘUVYĹw čď0¤˝~Ýýš:˜ěž|ÜqÇůN,+_uÓpÝóŽ>•ŐkG)>ĘŁ2Ę˝¤šŞźBŻ]jă÷ż˙ýu;餓ü§ČŞKZ;toĐýäŃýZĎy˝‰ˇç|Ąóc÷ íŁx#ÜGő4żĐŞ’ôp3Őů^Ąˆć˖.sí@ˇU´Őrľ+˜ŁwÝu—żyč˘Đ…Š`UďJőqë˘hœĎüţu˝řé÷›ßüfŸ~Úi§š÷ž÷˝ţ7¨_|ńE˙ťˆĘÁč{žĚ(Żc=ÂIëzBřňŁă(˜YmľŐüKc‹ř~ţóŸ÷íŮc=üXÍ}÷Ý×qô1Çř!*7ŢxŁ"˘žëg˘•ĽIAä:ëŹăţ–żýíoݗN9Ĺ)ř/gRYV^)űéćůŠO}Ę}& ţö÷żű@Ai6ŤÓ)Aô */źđ‚“—~¤ýšçžóÇ֍éÓ Vßú˝çž{œnPú‚ŃĄ‡š?OÇ}âî3ŸůŒŃ8âˆ#Üď~÷;§a$×wH”OAâÇ>ö1÷Ŕře Ó)§mֆZÍËľ ŤšŽŰpěżś+íżř…Ó5rŮe—šóĎ?ß}ëŰßöśËWoNŹÝZ×5![]GŃÇŻ—Dű듐ď}ď{nťíśó׾ö]˝™ŠOév k›ž+v O‰ŢČ$ĺ×>őœ*q•ŰK ÷]{$\{ĂúŻ=ľW÷Ý+ôqŚŚiĎ?ď6ˆzâŹíqcşNĺô›ßüĆß/”7uᝉžV >2ľkĽ”óvľ×(]—*SoÎÔŮó(XÖ5§űچ éMŽ:ôfNěžđ?äB׹ŚOEwŇ˝4^?˝ÖjZ ßĐąŻŒ~ÚLo&5ěQÇ/ôúĽ×ŰâΟOD÷ěN8Á=öŘc~YÁ˝žżzŢé§ŇôQ}â‰'şŸDĂ5/u*÷>ćŞczíқ`u2荊†ŒÎŽ:!ޏâ ˙oz=Nk‡î ú)8ÝŻăĎů¤óżOŘ=ž‘÷ ŔG1KOOwŰЙďÖGGönH'ŘĽ>ŮÔĂŠ!züřÇ?NÝM´Ţő)ĐŐ¤wŽęIŐx%Źö×yě/ř7.u8†n8 ˇÜrK÷ěłĎú`G/ĆúB–ž|:Ž>šSPŻžMʧ:ŤWzj¨č#ôƒ:ČoÓ?_ů÷(€UĐ­ž.}źŚ^ ŤŢ“‚b`ş1č7"í fiu˛mş ŠÎ2ÜhŁ|UdčƤ›§LUŚžĚŚ›G8iXƒźÔkމ˙üç?~łŢđ?./­NęQŐ¤ŕ6~<őę+(ś7&ʧvŤ÷$ʟ~5ĹöU^Ůjýů¨GPűë†m“śŮvKkô<Ź{šÇVÝ5Y{Ăýő˘céöŚŇ֕/ŢnýĺÎpťŽ˝Ą ӒöłcŞźB×°ĺiä\őŽ×˝”ă'ÝŠ]{áy°c*­˜ąňĆó¨ŽĹÎ])í¨gž]Q0ŰŐ÷<Ň˝ŒŽ4ĹÓŐέßyˆŰ︳äďîě+gx×7|X™QWOçĐh=:†ĘéěâlťÖm5nUˇĘÄžńËCs#}†EyĂ|>1ú§shTçQcÝ^GâĆŻśś[u­žç‡Ę×=ö–ËÎuÝq˝ťęęnF„ŻłáÖžœEs^ukDő¨}ă<•Ȑ\ôˆĘ‹ęťřőž{ěÝżš Şc_Őş›nçÎ|ŢMZ}-_˙R|dj׎չ”yŇ=ÖĘŃܖuVŕ§aEúO™MńkŐö)t/ľýlŽý5é~Ą Wׯ•ŸöúĽ XBá==Ź‹^+ԋŽOzmŇýŰęgiióĐ -_|[’kÚk×ŰŁ!–ęAÖŻ$)P/źqż”v¤=çC“°žiű„ůŞYöÁr~9:Ő>žŠÎyG'Ľ^_{ЃOŻ#YŢˆ2ŘBőü*ŔÔV“.\ťđ´nOňř˛Ö5YŢřoۓUsm‹Ż÷ííüG`×^{­ďśaÇDĂ+Ź<•oËśÍUŚŢŤ§0>)řŐťY˝ó֛˘V–>6ŇĹŤ^e EФŽ4éXö­j݀vŰm7Ÿ^É?vźJöU݆Ćq)pסłőć@SR4\C“zŘőká¤7,z!+ŐG“Ú­7…΋ňŮySOöŸţô§•ÎA5m ëWér5Ç7‹řuś[őŇş&˗´Ýœ|Ćčyé9eű(]7Đx>ËŻôB×°ĺiäźW퓴_ąk/4ҲîAsçÎ`7—…ĚdîϧuMaŸ0ˆ˙ ‚בÆźQ‹űŞš˜ŢёsQŕ9Bűů{˘ŔQÓ°Îčú‰‚hMjs×Đ\ţ]QđŤáá1;ŁíQ>żOtÜĺšž}‡EĺY9>ző%öĐÆt[í°gt€ţÄţŮ-W|ß=đ—ŤÜ—/żÇ 9Ć]ô…ƒ˘7Ú}eoňÖ]܃ˇ^ëŕÚšX2oś=fźŻĎękŻçKŮ÷Ł_q›nˇG_‰ąňĂö8rŕ ÓJĎqüŤĄ‚šÂçŞ^?îż˙~˙óĂhXá^{í•˙Ůąř5§ýâűÇóř ý˙X˝DŞS#œŇ^żÔQ˘Owt<łŐ÷Rôi­ĘÔ'ššŰ§°ÜR—UŽŐŻÔ},_Ü5íľKűčľůCú2¨çż‚đRÚˇ5 Ťw|ťŽO‹ďŁ<ľ˜ÂZĺi=ú_K~YC΃čޯ׋,Đ}Ď ľ=ƒ“. ýd>ž×…§'eř° ΞŹZ" ×ĂĺřśřşňjĐż^8őN_ăÉta)]—‚[ý¤OXf¸Źň4…iśŹžu—T9ˇŤaúb†śë˘ŐGěú¨^)PUď‚ÚŻíS§Nőăˆőĺő˘)M?ŐˇpáÂÄci{ŇŁYR^ĽŠ—\…ŤGYëę%VôŽ9­NÚŚwᅪŸňÓž?Ś'­~âOíÖÍTÓO<á‡Ě¨ÇĐęĄt[ÖÜ&-k¸ĆÔé͈Ć쩇ŕöhx‰ŚpŸpYůĂóŚ/§ę#:ýT“ĺÓvő0ŘzšórmĂň}ĺ꟔Ž4Ű7ž=žŽ|ňŇ/Šh\˘>šÔ'*šŹŒř<Ќ0œäiiĽŘZŢJ數j_ąkOŸ鞣7ˆzŤaFö|łş'ůLŽw ­Ň'Iiů ŐKűŘ5Šš•‘d­_e°íŐÎŐó:˘ŤÓ ďěôóâĺh]i…ŇěîÉ>O,żÚçËęO× •ďî/튚šł^vËçĎΗŻíę𠏫r†E=”Iőéěż'†ů­ţ‹ćĚpŤŽýĚčč1î•'tŻEĂ;–/šďËŮzçwťe‹ş_ű ÷đ7¸K˙ďĂnö+ĎűŕSmYwęĆn“mwwˇ^ůˇhöt_ŸŽžč\,_R–LË9/i÷X•ŁÉĘÓőĽď¤h,ńO~ň˙ó˘úőŰŽë0~}„ű[yń4Űßś‡ëśœöúĽ#˝éJ}÷BßMŃ'…öúĽŸrŐx_Ő[s•Š^k+ť”yš÷4W9é{9…^OőŰűC­ďŮčű7ú]dŐąX;äŞ)lO¸^čü„y´o¸^Ęýľ”×.ůĹúô%tUl˘ŘËęŕ+’Á2@kě–^Ä4׉ Oşži嵋/Ěgeh›–m[|]ézŃÜtÓMýGX‹|ÔQGůüúČIO¨˙÷˙ţŸSjehnĺŰńm›Ľk]˝ŘşŞGPCďpő1‘Im׸6} ŚńĆ ŕ?ţřo"~ôŁůu}´Ś?΢‡ž8a{’Žkiš‡yĂşĹóX>ůz7Žńˇv饗úa$  ľĆ—ë\…uŇoEk›ęŤ›zHÔfÝ|ôfDżĘĄm—§^Ý|őűÇúöł7ÍZǰ|6ˇúŘşÍ ĽűUAtôĐ0‹Ńcäđ(ˆÖztő@Ő0ŠXţaŃş& ˝°rd ŮĘßb›ÝV;ďăN;tKwýE§ůtÄž:8nꜰ>CŁý¨ŘÄzžë°ăÝü×g¸÷\Ý]ý/¸Ýú˜ťűŚ_şűošĆ ţÂ7şsfşÜř ˇăťskżi37* ś­üÎ˝Ü 1Ň}ů MÝioćNćŻ<űß|ý­]–ßÚŚË´˜{x>ŠÝceĄüš<ë×4tĎÔÇěędŃwGô‰žŽŠ×\úŽŒzŞ•ŚIűkYs=ŹŽ–nyâů-=íőKßešęŞŤüë›~DC@ôšĄá*_Ÿ *]ż[ŻáwŞŸ^Tś•_¨>–ć+eżbŽiŻ]:ća‡ćďaúňŸŐĄX;âĎy­k˛ý“ÎO¸ÚĽu=lŸZžvY™f?śh‹˝|Ĺ3úO.Ţś3Bé;kŃĄţôpŽĺřCĎN=”nËá\ĎB­Ű\wJ­kŽ4{XúŚQ`ňĆ_‰2”3靣zdőkęń ÇJYÓl^NšĺäŐx-MzAOz­‡‚ĂJ&˝P*0פN7B]ĐńI?‰Ł^0őH‡“žY­wűöĽÇp[ąeý!éĺL z5ŽVOŹBă­ÓꤏňÔ>}œNş†ŐăŤ/—„cçÂŐ0}ô¨ž„‡¨iů}_HTůŁěXQůg¨Űx롚ŃџżőˇW¸1ăWqď9ô7Źď óŐ=*şż÷F dŞ/'–3•r-§< Ź×TčőK=ľú~Œ^;Żžújß1¤^ÜřëMĽ÷ĄJîĽ¸Ś˝vĽVÚ•YĎó“VgŰƖśŹZ1WĽą…•Ý óĚĐęÁŃGóúČ5|âXŕlóV8YĽÖQ_ÜĐoW+xVOŻţâaü xĽ–U(Ÿ,ËíU+Té°čQŤ5\k%šr9ăĆuGcŁô0ŢS kS†ŇWDęp×}Ţăž{â1÷Ę󏚝Łĺý:֍DĎ5hď¸qŃ=6ó/Ńv…řšzzőEťÇÜoćÝď~ˇ˛˙óăv*s…ű@™`˛[ŔÎŐAŠsxß}÷ůá”ęÎň”ůg§ž,:‰úB„ôëŰ ×r'}ŮKzN*QÉp‰zÖ)+ec[Ÿ3‰k}\Uęř ÝŃ0ľú•ß\%w¸tÝŤ4>ú`Źďąú^J='îľÓU,eń”JŐ˛ž8­˜KąW̡֧P˝čËNú’„~ĹAżË8eʔś8šőźxŐłŸŐ7 őt+ĽllKQ*?Žĺ›•źGÔŰÜ=đŠ–ź+ DŚÜc ŘT‘Ě}  źťę׾ô“łřĂü§úëÁń!7vméäLĐz7¤!c¤/ čgqΎţ˘`ü]SKŸA* I+2Ů*•5ĹYzč÷ńk)ćj‡8+Ó´oÖťxýó'>ń ˙›‘sćĚńăt˛vÓ@@ ‘ŠąôĽO}ůYC7{é˄ƒ5˛.Ëoó×^{Íýä'?ąŐ†ĎŻşę*÷ěłĎ&÷ż˙ýŻťńơ vâc=ćŚL™2¨Őřć7żé>őŠO j <îó—żüĹýô§?uůČGÜć›ožŇnÍܖ•*›’v=ös-ĽÚUmúÚמć>úя(CĎÝľÖZË-^ź¸č}óđy;î¸eheŻ˝örŰnťm>}ťíśŤy'Ežp@ a•Ä` Ť\ 4´edވß˙ţ÷ůöěšçžîCú;ꨣňi ŇŚßýîwnÔ¨QiYŘ6ˆ/žř˘Űe—]|xgggjM6Úh#wß}÷ĽćŠ÷FĎ===ő>LEĺÇ}î¸ăˇăŽ;ş­ˇŢ:ąź°-圇ÄÂ2–ŘęĹî›  GŒá;.\˜żG>ńÄţÍőřńă3vFid] Ó=Đő}şďľQoÜŰŢö6ßSců ÍgΜéN8áˇýöŰťwźăîÚkŻ])롞ő-ˇŐV[šwžóîĄ‡ĘoîšçÜŕ6Ůd÷ą}Ě酪ŘtôŃGťżýío>ے%KÜîťďžďA_ąb…ďYZ´h‘oăGá6ÝtS§^ön¸!_ôˇżým÷Ýď~7żţŁýȝ{îšůőpAóéK_ň=űďyĎ{Üă?n^iY˝šz#łÁx“iÓŚů<2/TŸ‹/žŘuÖY.éŠmٲeŢî+_ůŠ/KCc>đ¸-ˇÜҟOn"ĎC9$_§´ró™úŇÎă‘Géţüç?ťO~ň“îÍo~ł;ăŒ3âťçׯźňĘśÚWŸpčüęÓ ÍŃą;ě0÷–ˇźĹýěg?ËďŤó˛÷Ţ{ű€ö _ř‚ ?Nťîşëü'+ş†ż˙ýďű7óçĎ÷űĘçË_ţ˛/ˇÝvpĺ Bs mRďŹŢ źúęŤaVżś%é<„;”z]ŚŐUVşNe#kMŞs)ϑBׄŐqîÜšţÍľž˙řÇ >×J=^’GÚ5nő°yąç Ž}˛ŚküüŁíćĎŮ;ěŕď'őţ”jÍ5×tS§Nu7ß|sţřşßőŽwĺ×Y@ZE€ş‚3Ľ€ó?˙ůťôŇK}ďŕŐW_/ĺ…^Čż˜ţâżpŤŻžş@Žšć×ŐՕϗś  GăI'äâ=ŢwŢy§ßő—żüĽ^Žm>őÔS‚ŇťďžŰ)čýĂţvżMÁŢzë­~ůŸ˙ü§ď Rđ I˝ŻŞłzŽŽ9ć§Ŕż˙ýďî‹_ü˘űÜç>çôŽŚYłfů‡_‰ţŃÇŘ ę’&˝!xđÁý ˇ>îˇ`5)Żz§t\˝QP]œ­śÚj>LŤĎěٳݯýëÄsdž:g ä5Š}jĆcݞĘ*îWżú•OWpöĚ3Ďřeý“Vn>S°Pč<ęQđŽŔĺ˛Ë.s—_~yA3 Fľď™gžé<đ@§€ţ‡?üĄ“vüńÇ;}Ě~ţůç;˝IѤ`EAŃ_˙úW´Ü˙ý>]e* >ĺ”SœŽ'˝QR;5פ FoT´MA¨ĘLšB}RŁ7_Ş—ĆAOš4iĽ]Âś$‡p‡RŽË‘#GŚÖUVz#§OžúŐŻúâK}Žş&ŹŽ]t‘ˇůń쯳ßţöˇśiŔźÔăĹ=ôf'íph%í9¨çŠ>Óó\çT´Ś×_Ý_‡zÓĽçĽŢ/X°ŔoKúG˝žö(w¨šĘÔ9ű‰Ú¨{Ô>űě“t8Ň@Ś €ŽŕôhlôwžóˇŮf›švÚÉ=üđÉĽtttřŔO/äK;dȐÄ|a˘÷˝ď}n̘1ž'O˝Ř HmRĎôç?˙yߓ¤/kЎ[=ÇzáS¨Ţ?˝0nłÍ6>śý ͕_AąŚŰnťÍ÷Şýă˙đë âŐ;¤ö=ňČ#ýŹ[uŐUÝ{ßű^ߍŠ7ĺNzWĽĺľ×^ۡľP ‚őŃŽzCǍç ؔRŸBçh„ ţpr;vŹ_V@ĄO†îçaŻ~źn…ʍç+vŐ㨠SĂŢôŚ7ź†âĺjýӟţ´Űwß}}ź‚H­Ť§Xo4ć͛çôE6MrV}uÎÔSjoxPk]Ű婞üpRď¸Ę›3gŽ›úŻýŤč0 [’ŸęŁśëÚO›’ÎC˜ż”ëRů‹ŐU=Ď ĐT§rž#ĹŽ ˝áz÷ťßí?ŃóŐ>Ĺ ŰPÎńâĽ\ăáąŇ–5Qśžç:ŽŢ$jŇó]=Ň:oC‡u믿~ţÓł¤ňt=čM˜=4žÜI÷ÝôfJוŽ}†o”ŤH~TVY IDAThĆ@WpÖ]wÝ|€ÖŤŹĄĎ?˙ź‘ýĚg>ă@/TiÓŇĽKÝ\ŕƒëI ?z§ Tůu őuwwűžE+_A{ąIcVŐ Ź ]cXŐĽŔX/¸  ŐËůä“Oú€~uÖɧa):fš“^Äă[Ą2ôćA_.Šᥗ^*ZŸRϑŽ­ök¸‡Ž§‡‚őBSŠĺ;ęśŠŘXlËgsÄ6)PľőxĐŞá ú¸^ŸF(Řąž>.I_ňł2uŽôĽOë)TóňË/ű7<–§ŢóRŽKŐĄX]ő‰…MzłYęs¤Ř51lŘ0+ÖżLúbq9ÇËÖżPĘ5ß§Đş†úœ~úé~‹†ěh¸‡}š¤!Tá—TĂO;â婜óÎ;/ŸŹ7dápŒü†”]K;ÓM7ůOć4œ† hEôhŽ[ÔDuV/˛~ňJă9őqŹzýÔs˜6Šg[C0ô1¸Ć¤Ś:O?ý´ďQR ­ IÁA )uRŐ ŞáZVOzßDëËkzÁSśę˘ ۂ5}䯏Ům ƒ|ő‚š&NœčƒÔBŰĂtľ#kmŰTFąúXŢRć:7ę ţú׿î44ŚĐÇńĽ”eyĘ9śO-ç nô …z›ŹkŹžMşŚB×řůRĽ†=čşŹŠ”ëRu+§ŽĘ[ęs¤œkBĎCŚńМăĹ÷­äO{ę—Q4|BÁ˛ž !(ŞŸzuŻiä¤^h˝Q×đ˙űż˙sú‚! Đj音śZkšŹžęőÓ8Q˝¸ę…J˝’ĹŚW^yĹmźńĆž×ŐĆ"‡ăŐ3Ś?5^UăwŢygߎŢ!CcbőłRšôE§R&}\Ž^o Ф޿üŕţçĽ´ŽyŐcĽ!z‘~ꊧܽ÷ޛ˙ňzeŐV'z1VžB“ŽĽŕMAůŁ>ę4NźĐ´˙ţűű`[c„ĚŤ=˛(VŸBĺ)]‰zĺ¨IĺjȃŢܨ|ľ+ôö™*ř§ŘyʠȞvQ›Ô“žĆk8%W°b_*Őđ -úň Ţ,hœŽ&ëÁÖĐ˝‘P/¨&]OşŽk9ĹĎCRŮĹŽKíSN]K}Ž”rM¨_Ď=őɍžXŸJ=žö‹{”{§=uUOC_ČՐ/Mz~iؗęŻIíą/’ú„:ýŁ@^Ď3}şTÎ/éÓ}š hč:žőňźő­ou X4ŢV=/ĹŚ~đƒ~\§~A=Ń "4Ä&aÔ/FhěľQKÖ¤Ą!ú˜ž¨c*°?šľý“ć:†z!÷ŘcżYekÝžŻ€S=éÎĄ1ŘúrœĆđZ~ľK›~ýC_,RonĄIŰ4$DżĄq¤?Zh’žvć™gúüŞ—†ŤOĄň”Ž1şę]Ő/3č‹[—Ž/ŕŠ= .¸čjo5SąóXM٥쫀NCn䬞h#ýR†zŚŐ#-W ŃŃb /Ň¤ą°štMÉAŢúb ŽWí3ÔŕŸřyH*˛ŘuŠ}ĘŠkŠĎ‘RŽ ¤ú•éÍĽ=Âv”z<í÷(÷O{ę ¸Ş§Ţ ëËłvžuŽ5$CżÍŹ/´* ­Ĺ§/ĄAҲŢčë=˙ Mşfőé—=ô†ECbt 3!€Í  ?ö‹W({šëOKš+-ţP@އŇm9œë[tZˇš†h]sĽŮĂŇ7† ü4JŻhR ŚˇRžźWŃJŘI˝=ËŹ¤KÔŚ!ÚGËęUo˘ő,ë‹_ú• ˇHšô⎊‡_É]wÝ5`“Ž7]‡Ľž§;—¸?%îśRśrëZĘs¤Đ5Ąë\=§:żęŐ7ߕ*$”ră.ÜżWcš¨ąˇżsQAáꍯîžřĹ/ş .¸Ŕutt¸}öŮÇĎkqÔŚho-Ň@łZTˇŃehř € PsŤëŹÇčFíÇ:+€îîîń´–ÓłgĎv=ö˜[˛dÉJůÎ;ďůä“}l=ÚÇ*[ĺŘ1lťÖ{ú{Łő%9}píľ×vŃx[ßË­í•NÚˇŇöZýÔŰţç?˙Ůi̸ĽŰ\ułĺjç{íľ—ťęŞŤňĺŠţ6ŤÔşö#€n†ł@@ȘŔŇĽKÝO<áƒçáÇűÖ)má…ÎŇŃĎ٭܋ÚőwťŸ˙üçţgćŽ?ţx§@ˇ;z¨ŒÓO?ÝŠ×yÚ´i>]A¤ňkťN}!pŢźy}i‰ĺ÷¸eK—ůŸÎS]ôĺÁaÆšuÖYÇ÷d+­ŇКöލz( }ç;ßéŢ˙ţ÷ťË/żÜ§Ů6¸zœuÖYţK˜úäż˙ýď|ýşÉ6Űlă{Ż÷Ţ|ČŢöÝ˙ýÝ5×\ăÇzuÔQîk_űšť÷Ţ{ÝŠ§žęśÚj+ßŰílVŠu3ěǗ›á,P@2& !úghúÍeŤ Ô)XSďoŽ#ç:üˇ őëˇöEżhÜôňżŐźdé%öý8n4ŰpŁ •Ío?aźď=UŕúßGv'œp‚ťěňËü—¤k'Œœz¨Łß0‹z¤U–﹍ęĄmŞ“ę6iŇ$@ŤÎ#FŒđÇ(÷ŸjÚŤ&jRýOţâÉNm;`˙Ü´ç§ůşi›Ün˝őVě_ţËËÝwžówĆg¸ŤŽžĘýď˙sÇsŒűÖˇžĺ‡˝|ëŰßr‡v¨ťíśŰ|Ÿ{î9wć™gşÓĎ8ÝmˇívnÄČN˝úúđ‡|P˝lů2˙ŚŚŃfjWŤNô@ˇę™ŁŢ €4ą€[}ipܸq>ˆÓŻ](`Ő<˙Č) ‰‚gĹϚ)¨ŽŇ^Ÿýşd;˘eŸWóč1Źk˜OŸóúżŽć+X>ćčcÜi§ćśŢjkŸŽă Ň•Ľ}´öď+? Úýöžş(€ÖXhý6uľ=ЕśWu{üąÇ݌Wg¸ÝwßÝmťÍśnęÔŠî7×ýơÇęžĂ;ř_ŮęÍ[šĎř9wĎ=÷řőë~}ŰtÓMÝÁěǚţ¤Ďť§ŸzÚÝßýy'˝ÁŘoßýÜäɓÝŘč ”nÜŘqnňj“ÍLg§U'z [őĚQo@šTŔ†VčŻ˙)Płh œ--T} Џůć›Wúi9Ëú˘žśŤ,M_|ą˙…ýʇĽYš:ÎŔŠŻ7ZőSo¸mWüŞg\Ű,}྅תmŻJÖđ y}öŮţ@˛˘a |5ŠNnbmÜhŁ|Ŕ˙ /¸éÓ§ť-śŘ"żmľŐVó˛Ň-ż~şĎ–}ýe&ĽŮöžy}ĚŁőÖčn˝sF@hz•zh聂4=Ź:œ÷őŤÇř‡Ć÷Z`Śë×2ÔSźŮf›ůü *?ůÉOú/*~ţóŸP†ígÇŐzGÇ=ŕ}ë}ő˛!%ŞoĽS5íŐXđ뮻Ώ}֗őĐ8hcÖO슎jŤÖ. ˘0a‚Űd“Mœf­Ű6˝É˜1c†˘mßĐÁŇÂňl_ÍĂźő4ŤÔşö#€n†ł@@Ș€1}ĄOÁœ5e˜iŽ^i[ˇ ÍÖ:č ęŻjŇvőŚŞwVóřńăýžÚŚžcőŢţă˙pú]h+Cűčalj§kÝżŹ?ď­ü•NÚˇŇöę—74ëFÔ>ő:ë§űvŮeß6ŐS†úi?ŐSËúŇŕ;Ţńß>}yRżR˘ąĐÚŚžký˛ˆŢˆh_MÖVÍUWőâ+żĽ+͍2ŤÔşöcG3œę€ €@†Äuuuů!I=ĐÚŽGĄIAÄc=Ö÷6+Ř{ꊧÜqÇç˙šĄ=›”Wż›|íľ×ş˝÷ŢŰm°ÁîĐCľÍ~ŽcYď˛ő[ÔűŤhŃŞsZ˝ŹhŸjÚ{ĹW¸#Ŕă_÷”MŽ_ůoNŽäńŤÍżřÄŘřÄąÉq‘˙÷ß~űíż†źC€$ ;D Oc?˙üóń q^šˆř˝ƿ‘Ď%ĆňMĺ‰ëŻżţzöÚkŻO[—ť÷WĐy:Bó÷ߟěć;˜óÄ7ď!3śşßš˝#đ3ň-!á‘_ě#˙YtÓř§Ę{m*N͟ÍŇ8łĽ=‡3ýçP˙n¸ňĺÜ˙Ž–+1ůŘÔŞ_Żź›CęŇcţÜ÷=űNO ƒÉ! H@ŔŚ?~<ŠŢ>úh´Ź<­OŇsZĺĹ_żYbŤĂeŸœ…‘ď¤ţâ‹/ĆŻs˙[ÝďÜţůŚĆK/˝„{ÁćŐ‹ź ˛v¤Í×öŠŮÚsŢĆ>ômüŠx& H@Ŕ'‘œo~xőŐWϞ>}:žV‘o–Hžwloâ#žšňT÷Ă?ż2.g­ÂţĐłÝÖű=ô>Śúáť%łŠ˝îJ.ŻO8$  H@ŔŚňd9OMó×ńňžq~ąíĎ?˙_Ýȓč›Ů;Wžóůý÷ßż%$gĚYy~ĚŮnëýs/}Ί˜ő}îR|s˙‚ď%Ď* H@ŔÁňT6ďęžů曣P͟ĄţúëŻG?O3ç^Ű8xŁx !bţ›ož9{÷ÝwGAŸł]őé3ŰߌűĺLWą×Áě*çťÉšţáMŇwo H@Ŕ='–÷Œó5t_~ůĺ١ß~;ţA×_ý,Yďĺ—_ăSbČÓć|ŻtžęžŸ>˙ío;{ă7ĆođČ(Ůj܆űÝâ^Ž“ŮÔyoű/* §~jć$  H@ؔ@žń"ߨ!űÝwߍř#߀‘o‚ˆč<ĺČëůüá‘W^yeüł×ůjź|ŸtŢÇ>ŸÉűÝâ~n‚Y=÷mЧůWS čK@€$đŕ D¨ćëŇňŽqDlţŔJžB-ž;ŻUœJDGćՊüĂ|E]ž-#׹ßůźöyS÷ťö|K}7ĹléLˇ­Ś€žm?Ď# H@¸§"ĚňşDŽ<ýÍűѧĎ`DFHÇżŽqS÷ťĹýÝł-Î~k( Żƒ˛{H@€$p@ZžŇžęŠ ›Ý‚ŕĄÝď-@~Ň#ř-'Ĺë␀$  H@÷€úžýD˝ H@€$ “P@ŸŻ‹K@€$  Ü7 čűöő~$  H@€NJ@}Rź.. H@€$pß( ďŰOÔű‘€$  H@8)ôIńş¸$  H@Ŕ}# €žo?QďG€$  Hŕ¤Đ'Ĺë␀$  H@k üňË/k[o´ď6 čż"š€$  H@„@ÄóÓ§OűÝŢJ]¸őŸňžž=×c@MšëeŽV€$  HŕŽřůçŸĎ>ţřăł'Ožp']NéÄĽ^jŘžůŁěu?Ž‡ö¨p’$  H@ŔÝ%PĹóăǏ÷ÝşKâk§ĐÜ –ë1y­$  H@Ŕ!đă?ž?yŽx>âčŽ)‰ą'!y ́ąkžţ:§Çk׹O€$  Hŕ–řá‡Î>ůä“ńľ ÄsyşëŔŻš;t%v͜U=[ż˝jÓŇÄ aSŠ_ăŇŽ+ H@€$p× D<úé§go˝őÖYÄóO?ýt.ŚŰ˝u]ˆFÄśöë ×>Ţꐏƒ]şËôŹé[ZÚ$  H@Ŕ-"0%žůÂňôZˆVÄ^őNW­łV@OŚnPýšŢšžä§ŽŠuĚI@€$  ÜQß˙ýĽ'ĎĎőItťľ)¸OSś%.„unő/4í Ž" —ÖŽŞ~“üT<śÎї€$  H@¸ƒňšĆgŸ}vA,wńœřŮ@bÉcçňЧÍ>š+ŰCô!‡č˝ÄąŐĎMÔqľń€$  H@w@Äó”XŽOžŠ?ť˝Ž“ŽząÖŤ_鐯š9˙ŢłGý5ß˙heüXüpüŘÄä˙ëł:ůXrůFâäⓋMîß~űíˇ˙ŹC€$  Hŕxá…ţc¸Ő˙Ž×?†ë˙ŠM.šˆYâär‘‹ÍUóCxžĂOţÎYÉ[ ›ďް;>6=×ôĆvŸÜ_Ŕˇ†zÄ4"1^sY<6š\éË Ć’Ť6žC€$  H`ž@Őmé:×mĎüä"hÉ#^ąÉÇŻB˜9ćV;L9_żÚřĚŮEťĎä6[č(˘tiLşß\íĄöżĂ˘b,B›˝ŠĹ&N3‘K\Ż!<ôž't$  H@€& T͖t[ľÄÉ!ŚÉąÉÇŚVmďIŁű5žę!×íԟ޳o! űŞ‹ŇäšęrS6łNjľ'ľŒdňÉ%f^ćV?1×ŕž‹ěř H@€$ ýŞ.K7:lÉFŐz➫kőZżŽZŤůřÔzţJń˘€^ýřŤ˝Íf9 Â6vjp`ę‰Ô°ÉăOŮÔąŸýӟ8ƒ:k¤'šš‘ž θ‹ü”€$  H@˜#€~˘ŽîŞœňÉ‘Żšę×~ňŐNՓËHƒ9ÄÝҋ˝PžhÁ˘€n˝Ç†Ü@źY‹ƒő:ľfN|Ä1~,#ľ'(N>>W­ŃƒMÍ! H@€$0O j¸tŐ]Wm´WňřąÄô“ŤůĄíŇKšĚ=éŘJ@sĐŃřŇę×!_mü\‡X&f˝ÔâcűœäéËĹZÄąŒĚϨš]ĆO H@€$ )č'jč1lňŃdÄń‰ąľ?ů |ęÉő9ôUżŽĚgŕ×5ŠeˇĐlžƒ!Fť_?ƒ\ˇĹS嬗zÍQŇă`ϚOŽšřŐ>›za~ÍéK@€$  \&€ŽŁŇu\Ŕąs~Ö˘†îŤśŻ™8ŁZzv•çľÚGíJöĂEˆ.ÚÓýÄąÝ'×óš=cŤHÂqÔóŕÇćJÖ#ĆŠó‘œC€$  H`?tUżQ›Ăäcš2§ćY/ëăWť”§›‘yűڞ k" łxšlVsY|Ž|ľń,kÄŻWňˆĺԉӓÁÜřôĹç<ąŹ‹_k˝7ąC€$  H`™@ŐbéŹqü~uqœ˜\í%×mí‰O=~ÜÝUŸ×‰™Ă<ň=&É" /M^HäUźgJ|Ž“ć'—¸3‚8=ÉeĂOž\,őX‡$  H@Ŕa˘ż2Đo5F䦎[}ć‘Ç’ĽżćâgÔÜ.łËQŤ–ú&v ĂG”r3ˆUň”›LŒĎâ@b­îłÁœ>uj̏í>šôe$ÎŔî"?%  H@€ćTýFZnÉ"†ąéß/Öč}ä—,ç‰Mƒ9‰kžúAv =ľa†xM˝ĆUŹÖ|ü\ĹÜřU ď2ťĎôĽ–żb›ůąÉłOkžĄÝ! H@€$pčŽ 4\őŃpÔĂäkŸ+ýŐ'fŘ ě.zďëŁ˙Jv+Ă"Fńą9 7S}rs6đęˆîšě™ůÔjœšœ ?qϥ搀$  H@8Œ@4Łęšä˘Ů¨ăÓSăř\Šăc™sˆ–Gćd`ť?ůŘB@çPU”ösPÇŚŸ+€2ż[DńP:ä27Ł büXöŞ~ď'Ž6žC€$  H`ž: ›ÎřÄřs6šZŢ"ŔG4c“ď>9ćÄ2đąäťÝWďý—âCt6Œ(eLĹÔbŠsĐ؀@łV­g^z2čŰEťĎäčĎ|âŘÄ57„ç9öÂRŤ6žC€$  H`ž: ›NüX.VˆŽ#‡_mú×+ýÄĚ휎QkYŻĆřÉ3’ŤŁÇľvÉß+ óˇŔ ŁÍĚ&5×cÚ9LíM~l –ÄÉe_×K=ë&ǜÄřƒ{I<×\|F?y­$  H@ŔEč1˛‰kŽ˜\,bˇűôň$šžXü:'šŒä2°ťh÷ɚ5‡ßű{|íKóœÝ+ ç&NäłŮœĺ šé܌är‘Ť1ë M>6šŘ\™Űý!5ć؏˜žÄ H@€$ Ť@ĂĹ2˘áˆc‰koÍ×zü×yľFžć8CˇéÝd# ły­SéL?ŁÎ§/67žXFřÖ|ę‰ŮżŠh„1ëł'ý™Kľä€$  H@LjöâĘ*S>šjŁŃj?ššÇďyć íçB=~5ě.{ů3ő ě.ZńyŒ€îËfÓŇş91śÖ2ŸxĘPFjČęÄY݊frä‡ňXM.#vĘ‹Ď>¨×œž$  H@ŔečˇZIŽ|÷ӇžCӃíůÄä°ôŽąŮ3}ľŸx,űą…€ć U„ć ‰Ť­g „qľÜh­g^ÖâbM„tęŹQ÷Lž9ń3×AŒ­5} H@€$ ËĐkX:jŸ8œŢř5O?–~ě\ž×ӗŃí.ű_őš“CL ×šŁ‡Y‰AK>–|,˘–ľÓéK.qlí#ŽíűÖ5‡ňůźî'vH@€$  Ź#ÍĹčţTœ\˝2—8z9ąÄK>skOÖd$ŸŃí\nl^óqŹ€^Z›C"féEđR' (Ä5˘7qž@g.ľłkÇr îŸ8ść÷źą$  H@ŔEsZŽćăă×8+&F(OĹԘßcňŹËäkłąZ@OźĆ‘ĂExbs¨ę'f$żfTáĚÄmjŇŠŐ:˘›ž ćÎŮ]×ó>b­$  H@Ŕ44Uâ9›žÔúE>W{ČĹÖü>?ëő‘9 |ě˜_űúFšW hvœą9"5-(9jäRß7*sąńšxMœľX›\lFˇťěóOęĎ3z€$  H@k żz/ůjă§Ÿ;•ŁvˆelćÖŃăZ[í$ 'žBOm”ƒE˜r@|ěÔr™ĂŤŹ“yőJ/ń’ŸZFí% ĎjřZ H@€$ őĐz™ŃýS'ťäSŻ=<ŽľîłśÎOnvňô9‹$ 'vÍÁ"P3Ś|žęäĆIĺƒz}ęœ2ů*„—üĚáLř5NŽ}őŢo, H@€*9-Ôk~ľK~Ż%ćĘřՒǦ†˙̝<ľƒěŁAq4!͏†Q&U,OÔŇC_ľäąĚŸę™Ş-ĺRË`­]t9žęĄW+ H@€$p‘Ŕ”xěšăW[ýŹž¸ćŚâÚG˝ÎŠuüŘ úvQ‰}úœŽú:kp .TSc¤‡:>óŇCŽćM՘—Ţ\ĚeyâŘşnőkž$  H@ŔqĐg™]}âšĂĹŻ}䪼ˇç˜›A}]ţÜWż7‘~üž1kąvňĚ!Ç:Ä̍­šę×} H@€$ Ă Ç2ŤúŹBŽŰڟZŻ×¸×k­ďS×í>˝W˛G˝Â‘Űk˘ Ó)ŸÜ›úĆ-ŸmBnÎöłĐGžŽUsú€$  H@‡@Ě֙ä°Ôˆ÷Ůô§‡‹ř[{ťŸřě˜×72ďh=Nžř.tRU°.ůSľäČďłs{1/őŒď˛?×ô\œa$ H@€&ÄďŇÝ÷blćNůäŚlĎąyâ،šüŽxĚ/Ž3ˇyúŮR“&Gœv?z­Ţ( 2ŻŰÔÉUżŻÁŹ×cćR×J@€$  F ëŻgľš›ňÉaërXj=N>Łćw™ ?Żô:çXń*ÇŘÖΌˆíśöRŤšęĎŐkO|Fí'§•€$  H@؎Ŕ”píšăcs’))Wk}ţT|ôŤY,ăżD˜us#U°ÎĹő†éŻšŹ57čËźę§?1ë%Πg]ü콍F€$  H@XŇTô`k޹ZÍÓWsŐ§ËčuňW˛W~ÍîW|}žĚŕt1{hœľúÖßWŤ}ú€$  H@ë, ŐŠZĎ­‰×ôÔÓöţ+?yfńS=f}Ž ]§'ý}kvKĎĎŜaŽn^€$  H`;]{ő8;MĺČ÷ÚĄńvwňlĽÍž@s˛™'Ń)#ˆiĘőžWiZ›ÚŁ×%  H@€ś%ĐEn_}Ž^óŐĎü}ńTϸďą_W7Nžř8őčş%7]…pr=fNňĚIŽ÷2Żö0W+ H@€$psÖęłÚW}N>•K­ç{Ěü“Ř͟@sʅ'ŃiAüŇ>—Ł>Ő?W[ęeŽV€$  HŕútŰăz’Ckłý[?yć'ĐŮ`ˆ[8HłkD𚞥=ږ†€$  H@˜ľmý5}s=sůq‹S‰ç,~R  Bz< ýv­XfęĄýĚÓJ@€$  lK`QčNlľÔżT—:ĽpćŹ×" Ď7”4ţťŚoMϞm,K@€$  Ü ˝‚x8ۚžÍž˘n ‹kĐhĺiÚcŻ"–Ż2ˇžA_€$  H`U˘wfЃć^Çç~ÎĐőGˆé:=žš1–€$  H@ˇ›ŔA"šßĘMˆćz†Đő0ń7Ô}Ic H@€$ ;LŕŚsGwët?`bEős€$  Hŕţ¸m4}łˇIDATbyŠđĐSŸĘ)´§¨˜“€$  H@7Oŕ.㵔^{ÓöI@€$  HŕX˙rěDçI@€$  Hŕ!P@?ğş÷, H@€$p4ôŃčœ( H@€$đ ( âOÝ{–€$  H@8š€úhtN”€$  H@xˆĐń§î=K@€$  Mŕ˙?Ťžˆž˙IENDŽB`‚gwenhywfar-4.15.2beta/doc/dialog/images/gtk2-2.jpg0000644000175000017500000003625112364015347016536 00000000000000˙Ř˙ŕJFIFQP˙ŰC  !"$"$˙ŰC˙Ŕë?"˙Ä ˙Äľ}!1AQa"q2‘Ą#BąÁRŃđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚáâăäĺćçčéęńňóôőö÷řůú˙Ä ˙Äľw!1AQaq"2B‘ĄąÁ #3RđbrŃ $4á%ń&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚâăäĺćçčéęňóôőö÷řůú˙Ú ?÷_x/LÓ4xžH –éăýäĄóźœnů°܎|’ž3Ő<;ᅶŠ}4^ęŒRŇĆŐˇK1O$Q݉WCĄČÜěî{ë_7üfÖő]?ă.Ť4.#0ÚÁťc;c(íúšjúźŤ<Çčó[w÷Up´# q˛HőüE6ŸŰ5Ÿ‡ë ˆ’K;őš–!ęŃár}ĽąŽĎHśđöŻŚ[ęZlvV—)RS†ĐűE|°śŃżÔŇ„’=ŁűL˙Ÿ+OűůGö.™˙>VŸ÷ň¸OÚWÔôO†w†“rÖWKcšĂ{¨•‡ĐŠ ýkřcă˙=Ÿ‹Ż|Uiľ™â˝>}šę=’#U]Ń(čçć=ëäÝY§kżźŮB6˝]ţĹÓ?çĘÓţţQý‹Śϕ§ýüŻÔ˜ţĹÓ?çĘÓţţQý‹Śϕ§ýüݏřšă 3Bđ•‡ö™­kşĆ’ÚƒKlf’9]ąŚDŹ[ćŔ žâľő‹:厳 5׆ Ň4MJŢÉćťźĘ#–vĂBZ%"6^.bGAÍ?m/ćbökąë?ŘşgüůZßĘ?ątĎůň´˙ż•ćż|KăÜř˛?ĎŁ\G§kזPˆ‰bňä&€cîł|Ç˝z†éœ_÷ŃŞU&ŐîÄăЇűL˙Ÿ+OűůGö.™˙>VŸ÷ňŚĎý3‹ţú4gţ™Ĺ˙}|óîţńZ=ˆątĎůň´˙ż”béŸóĺi˙*l˙Ó8żďŁFéœ_÷ŃŁž}ßޏbě]3ţ|­?ďĺŘşgüůZßʛ?ôÎ/űčџúgýôhçŸw÷…ŁŘ‡űL˙Ÿ+OűůGö.™˙>VŸ÷ňŚĎý3‹ţú4gţ™Ĺ˙}9çÝýáhö!ţĹÓ?çĘÓţţQý‹Śϕ§ýüŠł˙Lâ˙ž˙ŚqßFŽy÷xZ=ˆątĎůň´˙ż”béŸóĺi˙*l˙Ó8żďŁFéœ_÷ŃŁž}ßޏbě]3ţ|­?ďĺŘşgüůZßʛ?ôÎ/űčџúgýôhçŸw÷…ŁŘ‡űL˙Ÿ+OűůGö.™˙>VŸ÷ňŚĎý3‹ţú4gţ™Ĺ˙}9çÝýáhö!ţĹÓ?çĘÓţţQý‹Śϕ§ýüŠł˙Lâ˙ž˙ŚqßFŽy÷xZ=ˆątĎůň´˙ż•qŸöć°ÓôHďîP đ‘çŚć=°É­|˙Ó8żďŁYŢ•—CYAi¤g˜÷.IÎkĺx§ˆędÔŠ´ßźŢ˝­ë§SŻ †fîś*NśV˘kZv !ÚłůťâјcoԌ{֕ΙŁ[[Isqmc1Šwv—@ęjo˛Ühwq]ŃŽwjóÔnoži&` mŠi’KĹ’*gţřJóň.0ŠĄ^nďŮŤëůiĄ–gJ8:.ŞW˛gUo1żí:WƒÖkCĘKqsä™ŞŽ ÇŚqVô)t-Râk6Ó#łż€f[[†Úŕx`á—ÜŽ+ukđ ,űTQŠćźKŤ\ŰřŻĂ—čC]č­ĎmńČáXu$ÔeÜ_W‰…&Űćvűű[őšň<úëß.îŰ#˝ń=΁ ­źRi‰w{tĹm­-Žé%#ŠęQ݉VUƧ%„?jŐ| ąŮ™ÖđO$cÔŚ@ﴓőŽ/Ç:•őŻĹ RT`ź0Ŕqą” q˙-T˙á%ÖyÝxX ¨ŻœU§UÁ7ĄűVYÁĐĹa!YŮó+őëÚß­ĎeŇěü=ŠéđęX\ZÎťŁ‘ éôę+Ë>-řNŠĺ5+6ň6>Öğ)$†äp1Ücƒ‚ŔÍđPžKŻi…TÚÁqń‚p¤ß¸o”TßĆt)>Hů¸^‡ë_M•Ő–"*roT~}ĺtcRŚ˘M&Ő˙ާ§č_ň€ěîŸâ÷5ĹüOđ;xŽhľ]3ěQęG嚥š9ŘřäI!‡LžšăŞś¸ű7†mŽBC3í`@î=ˆ9ůGëU˙śßţ|m?ň'˙\Ż<.!ʞ3HRç„]ú'ük,ĆÖĂŔšF);Měˇë,iţŇŽIý+Ö~x2řx؉îöâC5ĺÉă͐úŔtŻýś˙óăi˙‘?řŞ?śßţ|m?ň'˙U‹Îńť{W{y•ő{lËzž§ę–†ĎSÓlom‹+˜n#!e!”ílŒ‚„ ‚ÇCŃl5;˝NÇDŇíoď9şš†Ig˙}ŔË~$ÔŰo˙>6Ÿů˙ŠŁűm˙çĆÓ˙"ńUÇőżî‡°ó ź9áůŻZú_hň]<ërÓľ˛ ŞťBŘÎनn tŞúWƒź%¤Ë4ş_„ô žłĘÖÖQĆd‹ű‡h_n•ĄâmsV˛×SIŇcŠ{‰Łş™}CěčŠĐ3œź‘)*…UKsą$Š}SĆÍňm,_ü˝ú´ŤťnĚâŒíˇĎ\y’cw–žiőľüĄěs>ăŔž ¸ŇĄŇgđg‡$Óŕ‘¤†ÔŘEĺFí÷™Wn=ČëRKŕĎK¨Yę2řK@{ËHí'6Q—Sî*eBö§jš>Šăćů6–/ţ^ýZUݏ7fq ĆvŰçŽ<É1ťË_4ŸTń€ó|›KĆ˙/~­*îǛł8„ă;mó×d˜Ý寚}i({Ü[E°Ôîő;Kľżźćęć%Ÿý÷-ř“ZöÎ?űęł§Ő<`<ß&ŇĹńżËߍJťąćěÎ!8ÎŰ|őǙ&7ykćň~/ń>ľ˙ /ŐŚž(g×oážŮ¤˜$é­ÚĄ`ƌAÚŻŒÎ —\Ÿ[ňŤůďýłţúŁţŮÇ˙}V_öŰ˙ύ§ţD˙â¨ţŰůń´˙ȟüU\ňŤůšŸöÎ?űęűgýőYŰo˙>6Ÿů˙ŠŁűm˙çĆÓ˙"ńT}sČ>ŻćjŰ8˙ďŞ?íœ÷Őe˙mżüřÚäOţ*°<ă[ĎxsűNëM°ŽC}{Tó0+ŠbOăäíEÉîsÓĽ\ňŤůŸýłţúŁţŮÇ˙}V_öŰ˙ύ§ţD˙â¨ţŰůń´˙ȟüU\ňŤůšŸöÎ?űęűgýőYŰo˙>6Ÿů˙ŠŁűm˙çĆÓ˙"ńT}sČ>ŻćjŰ8˙ďŞ?íœ÷Őqž$ń­ćâ? iiś=Vúh'fó2¨–łJ6üýw"óéŸ\˙íˇ˙ŸOü‰˙ĹQőĎ úż™Š˙lă˙ž¨˙śq˙ßU—ýś˙óăi˙‘?řŞ?śßţ|m?ň'˙G×<ƒęţf§ýłţúŁţŮÇ˙}V_öŰ˙ύ§ţD˙â¨ţŰůń´˙ȟüU\ňŤůšŸöÎ?űęűgýő\g€|kyâiÝiśČoŻ` žfEu,Iü|¨š=Îzt­˙íˇ˙ŸOü‰˙ĹQőĎ úż™Š˙lă˙žŤć=cIşšďFˇ‚ň ‰ylÚ@¤9ęPž9ęA57öŰ˙ύ§ţD˙â¨ţŰůń´˙ȟüUqcéańô˝•x]S„ŠťĹœŢ˝/ŽźUŇâŇâđő”œOs,ČĹRr~¸^•ŃGáÝ6/ ÇáŘ­Ő,â…bó.ލŸďdg>´ďíˇ˙ŸOü‰˙ĹV&ľâëťox[F†ÂÉcŐ廬y>rʑÚÍ(ۖĆKFźœńŸ\Œ°L.›§Fž?Ŕ+BUž6gŢAâ˝,yÖşŕ^â…ˆ‘Űrł~œT~đ–ˇ}âhcú÷$o“Ľi/ţ^ýJEݏ7fqĆvŰçŽ<É1ťË_7ń.ƒŞÂEŕ”ľÓ%˜CŻęwSHƒŹi,lŽĺ#@š2.IÜŘ-#eŘ#Ɨšś•Ž>Ży6Ľ˙ôÖӦˆwŢŢcʎ2ęAOşI.y9—ž9Ö.´=jţ=dÓâ´ż1Í’7… Ţ´„m%ŠťĘœ›’=űÁV×ú„zď…#šźnÉĺÓ÷HťNWć+ž#Đô¤oŮľŐÍÓxFžéY.$:p-*°Ă;~`G={Đ{âwK—ÄRĚ-ďb‡ZƒNą‰bmŃůą[‘ťo,˜ÇÉcŒ€F:_^j:ƅ?ö•´ÚeÉy!ŠP‘ŃeEpJäpŔŕƒÔruîź ÔˇS\řZ9¤ťAËɧ†ic äŻĚĐS đ’ÁĽž•†źť ś[DážöW9äţ]ęouŽiú¤ˇ^eŇĄş‘%–(Ú%a™Ŕśâ$w=1•đů59>ŢǢĎ“^jŤk$˜Ú˛덤ä×ÔĄé^‡¤xTéÍmĽxuŹaf.ŃŰ٘ԹęH“Ŕ暯†>Շ€[MÖ<9z[ýGÍśť˛lxţ—_úAqPřŇóVŇľÇŐď&Ôżá‚rÚtŃnűŰĚyQĆ]H)÷I …Ď'gĆ>×§ń§‚. Ń5)aśÔn^yŐŮbSe:‚Ä (,Ŕd÷ w­›ď[_ęę7žŽćň=ť'—OÝ"í9_˜Žx<CҁžuyăbëCÖŻăŃćM>+Kóщ#xZ áKHFŇXĄűźŠŔůš"ĺďŠuÝ._K0ˇ˝Šj :Ć%‰ˇGćĹnFíź°cc%Ž2îŔömustŢ…§şVK‰œ JŹ0ÁŽß˜ÁĎ^ő%׃Ąş–ękŸ G4—h#šy4đÍ2 a\•ů€Ŕŕú ç ťńłŕPEoý—­Ž ´‘Ő‘L›HŠPŁ%N8 őęWŔ——.5=/P7&ţÂáVc-ŇÜ.5eŘጅA=ˆ5ŇCá‡K}* l°0’Ůlq†űŮ\`çžzÓ´Ÿ 6‘jmtŻľŒ‹˜íěĚjXőbäńցyđů59>ŢǢĎ“^jŤk$˜Ú˛덤ä×ÔĄéU˘ńuî•:h)gŤśł-ʤ‘ę%n„*byĄƒ— 圐FœƒÓü1đśŹ<ÚnąáËвßę>mľÝ“aă{ŮŘeXrŹŹĎ{ÖĘxNM=ôôđuşÚ<‚W„iĂc8Fßź~´ ŕľřŠ@MźJż˙‰8–ŒČ‰çŢK ¨R2sÁÁŠeâÍfçĹéŃiuĽ­ęŘÜȑIŢZłKťî…‡Ęy+ógľvÁ°7ł>ŒŰIB𝺏FÔ^ ]Féî%[W)›…Ž0 ł(÷ w úŠŸěWŸóé?ýű4}Šóţ}'˙żfČ(ŠţĹy˙>“˙ßłGŘŻ?çŇűöh 󿍇ţ%1Ę>eŕŽzšôżą^Ϥ˙÷ěט|iž°’Ů'…Śľ™"¸ˆ^'*+Şvş6fĄée_ď&aˆřIŇN|/Ě­óŻAţý%.’sáxžeoz÷é+›üyzއđĐQEĚlQEQEQEQEQEQE‘ă]aü=ŕÝo_ޏ}7OžńbfÚ$1ĆĎ´žŮĆ3ZőŸâ]"Ű_đć§Ą^<ąŰj6’ÚLŃRD(ĹI‚q~”—'Œôˆőét†Šř<7‚ĘKłŸ!gh–UMţĽXtă$‚Fjé_´ B9•5 tžKylÍĹąO´G<‹:űnu8#p8ÁŢşđĽ„Ň]Ëç\‡šÔăŐć\ ’$‰T|żsŽG\“ĎjçŇÚŢhÚ",ÚŽOÝ~ěnH“™¨ď–ĘxŇŢoŰřvÓMꏗ>mʀ'†H‘¨ýč%‡N89âޡ­j:w‹4-5l­dÓőId§3°™$Xe—„ۍ¸ˆ îĎÍӎji> śÓu;}NkV{ČĽš’Yd0Ÿ´ Ú7‘yx ş$#`R9âŽx‹ĂGXÖ´­OűwTąm2S40Ű,6rŽ„ˇ™1ĘHËÁ¸ÁćÔQE!…Q@Q@Q@Q@Q@Q@Q@x&ť#źţ;/ 'ţ>nN•¨€ďuŕZŃýďĺńUt#ŸřňľŻK*˙xů3 GŔ}ŕŐItťDG"—xű˛uŽ›ěVóéýűÍř$çNłů•žqĐł%uuŽ+řŇőᢹY˙Ϥ÷ěQö+?ůôƒţýŠžŠŔЃěVóéýű}ŠĎţ} ˙żb§˘€ űŸüúA˙~Ĺbł˙ŸH?ďŘŠč >Ĺg˙>ßąGŘŹ˙çŇűö*z(ąY˙Ϥ÷ěQö+?ůôƒţýŠžŠƒěVóéýű}ŠĎţ} ˙żb§˘€ űŸüúA˙~Ĺbł˙ŸH?ďŘŠč >Ĺg˙>ßąGŘŹ˙çŇűö*z(ąY˙Ϥ÷ěQö+?ůôƒţýŠžŠƒěVóéýű}ŠĎţ} ˙żb§˘€ űŸüúA˙~Ĺbł˙ŸH?ďŘŠč >Ĺg˙>ßąGŘŹ˙çŇűö*z(ąY˙Ϥ÷ěQö+?ůôƒţýŠžŠƒěVóéýű}ŠĎţ} ˙żb§˘€ űŸüúA˙~Ĺbł˙ŸH?ďŘŠč >Ĺg˙>ßąGŘŹ˙çŇűö*z(ąY˙Ϥ÷ěQö+?ůôƒţýŠžŠƒěVóéýű}ŠĎţ} ˙żb§˘€ űŸüúA˙~Ĺ|ŤâŠŞ|CE(Ş<^Ŕ.:ąÚ×Ö5ňŠĎüMž" Ę?â°nçţ=-Ťż,˙x^ŒÇđBř$çNłů•žqĐł%uuĘx$çNłů•žqĐł%uuϊţ4˝GGřh(˘ŠŔÔ(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š+ä˙Ÿř›|D”Ĺ`ÜĎüz[WÖňŠĎüMž" Ę?â°nçţ=-ŤĐË?ŢŁ1Ä|Đž 9ÓŹţeoœtěÉ]]pú,Žž…ă— pS‚8z“íˇŸó÷?ýü5ˋv­/R¨˙ ĽĹýśóţ~ç˙ż†śŢĎÜ˙÷đ×?1­ŽŇŠâţŰy˙?s˙ßĂGŰo?çîűřhć ĽĹýśóţ~ç˙ż†śŢĎÜ˙÷đŃĚ;J+‹űmçüýĎ˙ mź˙Ÿš˙ďᣘ,v”WöŰĎůűŸţţ>Űy˙?s˙ßĂG0Xí(Ž/íˇŸó÷?ýü4}śóţ~ç˙ż†Ž`ąÚQ\_Űo?çîűřhűmçüýĎ˙ Ác´˘¸żśŢĎÜ˙÷đŃöŰĎůűŸţţ9‚ÇiEqmź˙Ÿš˙ďáŁíˇŸó÷?ýü4sŽŇŠâţŰy˙?s˙ßĂGŰo?çîűřhć ĽĹýśóţ~ç˙ż†śŢĎÜ˙÷đŃĚ;J+‹űmçüýĎ˙ mź˙Ÿš˙ďᣘ,v”WöŰĎůűŸţţ>Űy˙?s˙ßĂG0Xí(Ž/íˇŸó÷?ýü4}śóţ~ç˙ż†Ž`ąÚQ\_Űo?çîűřhűmçüýĎ˙ Ác´˘¸żśŢĎÜ˙÷đŃöŰĎůűŸţţ9‚ÇiEqmź˙Ÿš˙ďáŁíˇŸó÷?ýü4sŽŇŠâţŰy˙?s˙ßĂGŰo?çîűřhć Ľ|Ÿâł˙oˆƒrřŹ‚9˙Kj÷ĎśŢĎÜ˙÷đ×Ϛă3OăÖgŠňwrIűŻ5čenř“0Ä/p÷Ý$çÂń|Ęß:ôď×5đcá—Ăk˙ƒŢ žžř{á+ŤťŸŘM<óhÖď$ŽÖčYيe˜’I'’MtşIυâů•žuč?ߎ_Ŕš§Ä řAđĎü"~ťţČÓmě~Ń˙ -ÂyžTJ›öý„íÎÜă'ękŸ˙/R¨˙!­xOžřżáżřF|5˘čŸiĐ5o´gXĹoćí¸ÓśîŘŁv763Ó'֏jZźŢ-˛đ֑u–Ę[닩`ó[j:"˘.@É.Icœ>l‰Xřˇ\ńޙŻkÚ>‰Ľ[iÚeí˘­–­-ăĘ÷Ú¸$=źA@çšÎáĹ]×|?ŚkR[Íz— qmťČ¸śš’ŢXĂcr‡•śœ.W88 ć{šŁ–˝ńfˇĄřŽţËRľMNĘĆÂÂk››uXfi§œ#3áíĎ[œ Kń_Ißy!°¸{HVŕĹ$.Ż$ m*ÉĆÍ䄜âÚN+¨˙„WB6÷0=¤˛­Őź6Ó´ˇ2ťÉL쀳1bCHçvrsÉ5đn€ö#orÖˇŤ(žŃŻf6ÇÍ$ɈwlRI'€0I#šC1üWă ď&uŹŮ.Ÿć¨Ö“A‚áĽÚVTŕašUEě=ńÍC¨řÓVŇźCŞ íŰM°ŇŹŻŽÂL›­’\,‡?ňЁœ0­‚IôGÂz$–pZ^Aq¨EŻ* űšnyxš&ČÇ*QŘm9“ŒóUn< áŠîy­nÝÖŢgݨ\4Pł4i(/‰gcóç9 äq@­|r÷S(ˇĐn^ľş:kůč Ű[’H?pś BN6ÓĹkř'Äś~-Ń˙ś´Čfl’ľšQ´ÎŤĂ0^Şn^y;IčA5ρź4ešse9)24l›Ëfm҈×~#Ţzě<úšÖŇt;I7?ŮśŤjˇ2ů˛G!7í •\í\…ÚO'’MdxQŐďd×­5››[™ôÝPÚ¤śöćd6đĘ>RĚF ¤u=tľáď é: Ýí֚/ġŇyˇ&ăQ¸¸ř ťťpŞ21Ŕ ­š@QEQEQEQEQEQEQEQEQEQEQEQEQEŕZŃýďĺńUt#ŸřňľŻ}Ż֏ď|x7(˙ŠŤĄ˙Ǖ­zYWűÇɘb>ß´“Ÿ Ĺó+|ëĐżIK¤œř^/™[ç^ƒýúćž |2řmđ{Áw×ß|%uwsáű §žmÝä•ÚÝ ;1LłI$ňIŽ|Z˝yzŽđŃŇQ\Ćľá? ř_â˙†˙áđ֋˘}§@ŐžŃýcż›śăNŰťbŘÜŘĎLŸZ;ÍQ­&‚)ĂJ ´­ŠŔĂ4Ş‹Ř{㚇QńŚ­Ľx‡TÚ3ś›aĽY_]„™7Z $¸YĺĄ58a[’,}Eq–ž9{Š”[č7/ ÚÝ5üôí­É ¤¸[Ą'›iâľ|â[_荬é1Hš|ŽÉi<ˏ‹7‡"F”1*š ôü)vY˙Ďy˙ďČ˙⫟í^^ŁĄü4rĚ|[ŽxďL׾íDŇ­´í2öŃVËV–ńĺ{‰m\Ţ   sÜçpâŽëžÓ5Š-ć˝K„¸śÝä\[\Éo,aąšCĆĘŰN+œ Žnlł˙žó˙ߑ˙ĹQ˛Ďţ{Ď˙~G˙\Ƨ;˙Ž„mî`{Ie[Ťxm§inew’8™ŮfbƑÎěäç’j!ŕÝ-ěFŢĺ­oVQ=Ł^ĚmšI“îؤ’O`’F 5Óěł˙žó˙ߑ˙ĹQ˛Ďţ{Ď˙~G˙@ÎpřOD’Î KČ.5 •ĺAw-Ď/DŔ™ĺJ; §#’qžj­Ç|5=ÂO5­ŰşŰĂlűľ ‚&Šf%ń ě~|ç$Ž+­Ůg˙=ç˙ż#˙ŠŁeŸü÷Ÿţüţ*€9Cŕo n\ŮNEĘLŰ&ňăY›t˘5߈÷žťĎ>ŚľtÍMÓé4űQj—Ry’¤Lʛś…ʨ8N}ÜdóԓZŰ,˙çź˙÷äńTlł˙žó˙ߑ˙ĹP#đ§…t Ű}›F[č Űľb›Q¸¸E'ĺY]‚’I$ŒŢśę}–óŢűň?řŞ6Y˙Ďy˙ďČ˙⨠*}–óŢűň?řŞ6Y˙Ďy˙ďČ˙⊠‚ŠŸeŸü÷Ÿţüţ*–óŢűň?řŞ‚ŠŸeŸü÷Ÿţüţ*–óŢűň?řŞ‚ŠŸeŸü÷Ÿţüţ*–óŢűň?řŞ‚ŠŸeŸü÷Ÿţüţ*–óŢűň?řŞ‚ŠŸeŸü÷Ÿţüţ*–óŢűň?řŞ‚ŠŸeŸü÷Ÿţüţ*–óŢűň?řŞ‚ŠŸeŸü÷Ÿţüţ*–óŢűň?řŞ‚ŠŸeŸü÷Ÿţüţ*–óŢűň?řŞ‚ŠŸeŸü÷Ÿţüţ*–óŢűň?řŞ‚ŠŸeŸü÷Ÿţüţ*–óŢűň?řŞ‚ŠŸeŸü÷Ÿţüţ*–óŢűň?řŞ‚ŠŸeŸü÷Ÿţüţ*–óŢűň?řŞ‚ź Z?˝ńŕÜŁţ*Ž„s˙VľôܖÖł\É5ÉH‘‚Ŕš ńó×Í:6ľ˙ …|Eâ!mľ5¸/|‚ŰĚ~nfűw`gąœ ă ŻK*˙xů3 GŔ}9ᣟ'Ě­ňˇA˙LĺŞŐgĂG>O™[ĺnƒţ™ËUŤŸüizއđĐQEĘlQEQEQEQEäš÷Ćě˝r˙L˙„oÎű̐yŸnŰżcÎ<łŒăŚkÖëäŸČóŻ˙ŘNç˙FľTUÄĎN˙…í˙RˇţT?ű]đ˝żęV˙ʇ˙kŽÂ˙đ€ Ż˙o˙hÂGÇög•>\cĺűŮßżřqłćÍqô˘Ô›VŘ­źŽ˙ÂMá{=oěżdűN˙Ýy›öívO˝Ÿťžëj¸ż‚ňK´űo˙Łä¨ź'ń'LÖícşş˛›L‚])ue–Y˘‘šŰ÷ö1(Ăpá€Ď8ÎsEsúçŒ4MW˛ŇŽŚ•înî~ĎśŒžSyO(/Ž@*‡ĎQŰ$A§xóך[ęćkx–ň[ “@áä–7‘E—Ď–íňä… `€†tôVž3đ´wĐrĐ˝ÔPÍÖÜ­ŹV'Ü8 ̐ ă˝'‰$Ó­t =nűm•ĺÍĽź2@A ö™ă…č €Ÿ`{ŇÇâ}äžUÔáŰ`˛=Ô§"(„gfB6|§†ŕőĹ 6(Ž|řÓĂÍn›V‰QŽ>ĚŞQĆm†O/ËĆíĹŕ1’0GQ[u팣aý…Äwˇ‰"–3•u# ŠąEPEPEPEPEP-{ţ@w˙őí'ţ‚kćO†‡ţ-5ŔÜŁý.ǂ9˙U•}7ŻČ˙ţ˝¤˙ĐM|ÉđĐ˙ĹŚ¸”ĽŘđG?ň ˛ŻK*˙xů3 GŔ}cᣟ'Ě­ňˇA˙LĺŞŐgĂG>O™[ĺnƒţ™ËUŤŸüizއđĐQEĘlQEQEQEQEă:ÂOřOuokđgy:őݡ•ö?78`Űł˝żŒcľ{5s.őO ŰÝřgTťÚĺÍôÚËlTÄűBç|ĘAůIĆ;ŠĂ*ޝén ×Ôä˙᛿ęs˙Ęg˙mŁţťţ§?üŚöÚőOřLî?čNńýüł˙äŠ?á3¸˙Ą;Ä÷ňĎ˙’+Îö¸˙é"í‡ř#˙$ťH˙ś˙ú>JĂŃ>Ke dÜkV!SĂ–Wٚ@ËO™_ÍuňÁt ďýî:Ÿ…šUţ‰ŕ=7LÔŕű=Ü>o™őlfWaʒ:ŢşzöY™Ă/ƒ5ˇÖ—^¸ńƒjk}ÚěÓX@ŰKnSg¸ĺe-ÜЎ)ńř3Uľ{yŹuË5–ÇRť˝˛ó´öuUšiZHäQż_•—f6Œƒ“]ľÁŮ|:K]˙O]XąźÓímCn8hfšV|nčÍ1Â˙:šÖńˇ„Óġş×ۚѴË՞@"ßöˆA ОF2FIçîăńÓQ@ÎMřz–VúœÚÍ!˝×mőHŘŰăȆ„™-€ÝČ\ăúqÍÍ3Á÷6—ś&Ť śÚ~ąwŠŰĆś…_ý!nwFĎźƒƒrH`Ł…Ć9Č먠[ţřŁě|=ýĄ˙š…ľďäýď&ń.vmÝĆvmÎxÎpzUDđe÷ü#:Ÿ…ĺÖ-Γpłý”­™´’ł—*áI#Fጞší(¤cŕŰĂâ;jšľź÷ńߋŠ˝™Š&Uľ–ÝQAv ţő˜ą'=05ťá]'űBˇŇţŃö$šó6mÎçfé“Óv:ö­J(˘Š(˘Š(˘Š(˘Š(˘Š(–˝˙ ;˙úö“˙A5ó'ĂC˙šŕnQţ—cÁ˙Č*Ęž›×żä˙^Ňč&ždřhâÓ\ Ę?Ňěx#ŸůYWĽ•ź|™†#ŕ>†ń7ü?ŕ/Ă}ŹŢڛ‰ƒ-Ľ—Úŕ‚[“†VŮç:.z–9ŕä€|Ăţ;B˙ ţWôĎţHŻeą[™4ŰÔF#}ě`26r0Üź}ěœúqSů?ô‹˙Ç˙W63řňő*‡đâxŸü4v…˙@/üŻéŸü‘Gü4v…˙@/üŻéŸü‘^Ůä\˙ĐR/üţ=G‘s˙AHżđ\řősž'˙ ĄĐ ˙+úg˙$Q˙ ĄĐ ˙+úg˙$Wśy?ô‹˙Ç˙Qä\˙ĐR/üţ=@'˙ ĄĐ ˙+úg˙$Q˙ ĄĐ ˙+úg˙$Wśy?ô‹˙Ç˙Qä\˙ĐR/üţ=@'˙ ĄĐ ˙+úg˙$Q˙ ĄĐ ˙+úg˙$Wśy?ô‹˙Ç˙Qä\˙ĐR/üţ=@'˙ ĄĐ ˙+úg˙$Q˙ ĄĐ ˙+úg˙$Wśy?ô‹˙Ç˙Qä\˙ĐR/üţ=@'˙ ĄĐ ˙+úg˙$Q˙ ĄĐ ˙+úg˙$Wśy?ô‹˙Ç˙Qä\˙ĐR/üţ=@'˙ ĄĐ ˙+úg˙$Q˙ ĄĐ ˙+úg˙$Wśy?ô‹˙Ç˙Qä\˙ĐR/üţ=@'˙ ĄĐ ˙+úg˙$Q˙ ĄĐ ˙+úg˙$Wśy?ô‹˙Ç˙Qä\˙ĐR/üţ=@'˙ ĄĐ ˙+úg˙$Q˙ ĄĐ ˙+úg˙$Wśy?ô‹˙Ç˙Qä\˙ĐR/üţ=@'˙ ĄĐ ˙+úg˙$Q˙ ĄĐ ˙+úg˙$Wśy?ô‹˙Ç˙Qä\˙ĐR/üţ=@'˙ ĄĐ ˙+úg˙$Q˙ ĄĐ ˙+úg˙$Wśy?ô‹˙Ç˙Qä\˙ĐR/üţ=@'˙ ĄĐ ˙+úg˙$Q˙ ĄĐ ˙+úg˙$Wśy?ô‹˙Ç˙Qä\˙ĐR/üţ=@'˙ ĄĐ ˙+úg˙$Q˙ ĄĐ ˙+úg˙$Wśy?ô‹˙Ç˙Qä\˙ĐR/üţ=@'˙ ĄĐ ˙+úg˙$Q˙ ĄĐ ˙+úg˙$Wśy?ô‹˙Ç˙Qä\˙ĐR/üţ=@'˙ ĄĐ ˙+úg˙$Q˙ ĄĐ ˙+úg˙$Wśy?ô‹˙Ç˙Qä\˙ĐR/üţ=@'˙ ĄĐ ˙+úg˙$Q˙ ĄĐ ˙+úg˙$Wśy?ô‹˙Ç˙Qä\˙ĐR/üţ=@'˙ ĄĐ ˙+úg˙$Q˙ ĄĐ ˙+úg˙$Wśy?ô‹˙Ç˙Qä\˙ĐR/üţ=@'˙ ĄĐ ˙+úg˙$Q˙ ĄĐ ˙+úg˙$Wśy?ô‹˙Ç˙Qä\˙ĐR/üţ=@űChWV7ßŘť<čš=ßŰÚaĆF3´WđŐŁ˙…U}w6ły:¤.ĐʲŚôÓlŃŔu%NHŕžE}Gä\˙ĐR/üţ=\ĆŔE|ő‘ňťŘĹł'stl cšç5ée_ď&aˆřűMĎö=ŚYOĘz wŠŞ5ˇhöŸ2Ÿ”ôő5sb˙/R¨˙ Q\ĆĄEPEPEPEPEPEPEPEPEPEPEPEPŰťŤ˜äDŽâdQx äň ˘şŘh&upbƒ>k‹Ÿ–c‹‡ł’ŕ¤YŢ Ę_!†áoă<îŠkâ/řDźAĽiśŢ$–ęăűívrŮIäyO%Ă[˜rĄYٚ=ťI,óĐ`čśŢĎÜ˙÷đŃöŰĎůűŸţţň[aâGÄ6ś7ţ(_I¨ –ââ!Ÿd¸iTł eĚ˙6 ĚŞGgEyń ţ'Gq¨&Šw ŰY>I„´BÁ@+‡;ó†çŃ&Ľł.ÇkŠüNŃntë›hô–E-á›ÜAţîĽđw‰ŹüđsÁö:žŸ­Ézt›(ŢÚËI¸š’&ŽÝC‰h|˛  ‚Np8_í­Wţç˙ž¨ţÚŐçţűęěh3ŹËąŢ˙ÂŐĐ˙čăOü&ořÝđľt?úřÓ˙ ›ßţ7\öÖŤ˙?ó˙ßTmjżó˙?ýőGö4?™‡ÖĽŘďájčôń§ţ7żünřZşý|i˙„Íď˙Ž űkU˙Ÿů˙ďŞ?śľ_ů˙ŸţúŁűĚĂëRěwżđľt?úřÓ˙ ›ßţ7H~+hCރă1˙rÍç˙ŽűkU˙Ÿů˙ďŞCŹę‡­ü˙÷ŐŘĐţfY—c˝˙…­ ˙Đ ĆřLŢńşóý/í&žń=žŸeyęž kťT˝´’ÚFlíÁb˛*2Œ3Е8§˙ljŸóý?ýő^ŤđîĘŐ45!űeʡ›1$łaôEJË׾‹ťz"Ł7[Ýg˙Ůgwenhywfar-4.15.2beta/doc/dialog/images/fox16-3.jpg0000644000175000017500000007365212364015347016641 00000000000000˙Ř˙ŕJFIFQP˙ŰC  !"$"$˙ŰC˙Ŕüˆ"˙Ä ˙Äľ}!1AQa"q2‘Ą#BąÁRŃđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚáâăäĺćçčéęńňóôőö÷řůú˙Ä ˙Äľw!1AQaq"2B‘ĄąÁ #3RđbrŃ $4á%ń&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚâăäĺćçčéęňóôőö÷řůú˙Ú ?ő€˙ź9ŕ_ŮŻŘ,ŚÖ¤ˇ˙Mż˝ćv dQ! ŢVĺWaA ą$ú/ö&Ÿ˙>vż÷đŇh_ňˇ;#űŸŢúՒ}#‹ţúŻNNP“Œ]’8ôi6ŠŸŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŻŸôŻ‹>4Ń<'ă kÄ6Ú>Žú‰ćŇ,á…ŮZóÖ5V ™0¨<1ŰĄëšNŹÖ킄_CŢżątĎůň´˙ż”béŸóĺi˙+Č'řŤăUđ§Ű‡€ö_AŞ=Ó4S˛, ˜.žq —ŠŕŠŤŁüIńNŁńBĐ[Üč7>ŸÂ0ë&Ţ&pď$x‹F$2eJ„l  f—ś—ó1ň.Ç´˙béŸóĺi˙(ţĹÓ?çĘÓţţWÍWß|YŤĘšĚŇZiöW> Ôuhlô˝E™”ŠYrËňʸ# ’xâş{?Wśţ#đţ’šužŁ§]ßXi7ŚCq<(ß4ŒĄl˝šČ<íĺüĚ~Ív=ťűL˙Ÿ+OűůGö.™˙>VŸ÷ňž~đ÷ĹŮÜęš$iڅđŐuť•šŐîÚ(Łľľ”… ‚K`ńŘžjŢšń÷R]&]WIđć“ ˝Ż‡mľ™âÔŻž9e3śŐŽç zž38ŁŰËů˜˝šě{ˇö.™˙>VŸ÷ňě]3ţ|­?ďĺ7Mš7zuľÓC ™ĄI xČc?ôÎ/űč֜óîţňmÄ?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ň›ý‹¤˙υ§ýő˙׍˙ŚqßF˘?őÎ/Κ•GöŸŢcĹi?†žń6w4V6°ępÈ.ˇmh™wđO—–9\É ‚ ë~' čzŸÉ(;űŠ+Ҏ•xŠOr#QÁ´ŽëB˙$dt˙šŠÎ?šýőY0čö?2ˇĘÝ˝6źđéş°ş>эƜ‚;~ËűUŒă(=—ę(úç÷CęĎůŠVžđ]ĄœŰx7Л„’9ĘXD<ēŐž^U°24˙řBüýښŸü">űtm%ĎŘbóǏ,†ŰWtŔÇJľE\_ĘWĚUÔ<á BŰě×ţđýÔh{Ÿ.[(Ů|ç9y0GŢnçŠď\˙Ä?…zî­›RžkkXmÖŘŰZĂlFŤ#DŇĆv‘¨ bşŞ)ťýĐúˇ™§˙lă˙ž¨˙śq˙ßU™E]ţč}[ĚÓ˙śq˙ßTŰ8˙ďŞĚ˘Ž˙t>­ći˙Ű8˙ďŞ?íœ÷ŐfQG׺Vó4˙íœ÷ŐöÎ?űęł(ŁëżÝŤyšöÎ?űęűgýőY”Qőßî‡ŐźÍ?űgýőGýłţúŹĘ(úď÷CęŢfŸýłţúŁţŮÇ˙}Ve}wűĄőo3OţŮÇ˙}Q˙lă˙žŤ2Š>ťýĐúˇ™§˙lă˙ž¨˙śq˙ßU™E]ţč}[ĚÓ˙śq˙ßTŰ8˙ďŞĚ˘Ž˙t>­ći˙Ű8˙ďŞ?íœ÷ŐfQG׺Vó4˙íœ÷ŐöÎ?űęł(ŁëżÝŤyšöÎ?űęűgýőY”Qőßî‡ŐźÍ?űgýőGýłţúŹĘ(úď÷CęŢfŸýłţúŁţŮÇ˙}Ve}wűĄőo3OţŮÇ˙}Q˙lă˙žŤ2Š>ťýĐúˇ™§˙lă˙ž¨˙śq˙ßU™E]ţč}[ĚÓ˙śq˙ßTŰ8˙ďŞĚ˘Ž˙t>­ći˙Ű8˙ďŞ?íœ÷ŐfQG׺Vó4˙íœ÷ŐöÎ?űęł(ŁëżÝŤyšöÎ?űęűgýőY”Qőßî‡ŐźÍ?űgýőGýłţúŹĘ(úď÷CęŢfŸýłţúŁţŮÇ˙}Ve}wűĄőo3OţŮÇ˙}Q˙lă˙žŤ2Š>ťýĐúˇ™§˙lă˙ž¨˙śq˙ßU™E]ţč}[ĚÓ˙śq˙ßTŰ8˙ďŞĚ˘Ž˙t>­ći˙Ű8˙ďŞ?íœ÷ŐfQG׺Vó4˙íœ÷ŐöÎ?űęł(ŁëżÝŤyšöÎ?űęűgýőY”Qőßî‡ŐźÍ?űgýőQ`r/űę¨ŃBÇwńŐźÎOâX˙‰ |¸ţď÷˝čŠ>&œxZăćQň÷âŠú<%okB3ľŽZ‘ĺ›GUΏcó+|­Đ{ÓiĐčö?2ˇĘÝ˝6ž_üyzřáD(ŞWŠłę[L˘HZ)Ła•b ‘ߏCÔ ĹMoŔ­b&Żá†ŐDŚą ˜ ţ`ęž^wnăŚ3XrŤj_3ž‡OEeéhš„֖íč2öž[}U”0ú*KŤ=ŇÖ[ŤŤ]> xPÉ,˛FŠˆ dłŔrI˘ŃďřÁ ˡő÷U$Ó´Š],,™eXB¤ę8ŹWđ&ľxöz6§á˝Jć0KĂi<2şÁ%T’(´{ţđBňíý}ÇIETţËÓ?či˙~Wü(ţËÓ?či˙~Wü(´{ţđGyvţžâÝSű/L˙ u§ýů_𬍠ˇÚ•ĽÚ$öö“‚'PUfí퀠ŕ`UFš”\“؇QŚ“[ĎXę^ żŐdŇloü=u¨ÄH’ŇĄy“r€äcéZßŮzgý­?ďĘ˙…MŁßđ˙‚UĺŰúű‹tUOě˝3ţÖŸ÷ĺě˝3ţÖŸ÷ĺ‹Gżá˙w—oëî-ŃU?˛ôĎúZߕ˙ ŚĂĂë­GŁ5­ ž’ÝŽR/łbVUfÎ1ŐÔc9ć‹Gżá˙W—oëî5čŽs[Ő| ĄÝĹg­j^Ó.f]ńĂw<0ťŽqŹA# Ž=+]4Ý-Ô:XY2°Č" Ę‹Gżá˙/.ß×Ü\˘ŞeéŸô´˙ż+ţeéŸô´˙ż+ţZ=˙ř#źť_q=ÄńŔä'“€K1>€OsÇĄ¨?´m˙çßţK˙ÄÖOˆaśąľź–Ţ8m1ĽÝ3•Ăţ W—oëî4誟Ůzgý­?ďĘ˙…Ůzgý­?ďĘ˙…Ăţď.ß×Ü[˘°¤šđŞEŚĚN–-Ra”Â˛$ÎQœĘĆÔcžœuéZ_Ůzgý­?ďĘ˙…ĂţŻ.ß×Ü[˘š¸5\kO˘AŠřn]QĆÖI<-:°ęŚ0w;ŒVĎö^™˙@ëOűňżáEŁßđ˙‚—oëî-ŃU?˛ôĎúZߕ˙ ?˛ôĎúZߕ˙ -˙‡üŢ]żŻ¸ˇEsś˜“Ä÷šS˘ă%žŃ°6ˇ§$ăŚyëÍDšß€ZţÄM_Ă Ş‰L?b0üÁŐ<źîÝÇLfŞtÔ-wćDj9^ČéčŽRm{ÁpýÍŽűeť]!m6Aĺ½e—äýĘí&ŃďZR7‡#Ôě´Öˇ˛űUôRMl‚Ü"Gł{bu<çŒóSh÷ü?ŕ•yvţžăfŠŠý—ŚĐ:ÓţüŻřV6ŤřZź{=SđŢĽs%ᴞ]@ŕ’ŞIZ=˙ř!yvţžă¤˘ŞeéŸô´˙ż+ţeéŸô´˙ż+ţZ=˙ř#źť_qnŠŠý—ŚĐ:ÓţüŻřVF…‹ŰíJŇí{{IŠÁ¨*€łvöŔĐp0*ŁMJ.IěC¨ÓI­ÎŠŠçŹu/ßę˛i67ţşÔb$Ii мɎš@r1ôŤşd&ŁaőĽ…ťA:Œ˝§–ÄUe >„ ›Gżá˙ŤËˇő÷”V-ôž˛łÔŽîNiq´ˇŰ"Wh'˜w*‚AنĆ2AëW!°Ňf…&ŽÂёÔ2Ÿ!FAäv˘ŃďřÁ ˡő÷¨Žs[Ő| ĄÝĹg­j^Ó.f]ńĂw<0ťŽqŹA# Ž=+]4Ý-Ô:XY2°Č" Ę‹Gżá˙/.ß×Ü\˘ŞeéŸô´˙ż+ţeéŸô´˙ż+ţZ=˙ř#źť_qnŠÇ#˛×tŘlâŽŢ;(•c@Ąđ ŒăĐ˙3ë[N<ś}Ĺ^ë°QE…Q@Q@Q@Q@Q@Q@Q@Q@żÄӏ \|Ę>^ăÜQGÄӏ \|Ę>^ăÜQ_W–˙şĂçůžmâ3Ş€çGąů•žVč=é´čt{™[ĺnƒŢ›_=ţ<˝NĚ?đ˘T—ţC6ßőď7ţ…p !×Ί⠣žŇƐ˙ţ|nďÓ…Ů÷˙óăs˙~›ü) ĺ>ˢËá+7ĐľOí+]€4żÚw‡Ú7.÷f#ÝĎ‚¸/„ÔŻü9ŕßęZ›ÚhĐĎ5­­ƒ$ÄČŻJdmĂ ~UUÉĆzW´gß˙ύĎýúođŁű>˙ţ|nďÓ…-@đŻxšęëĆÚ1ŇŽ] Ől.¤šÎM¨H’*Ť š7]śŇQ°ÇːĎë^vľŕagâ}V˙\ťŽáľŰ ďät[‘hěRX‰ŰŮ2Qœ xţĎż˙ŸŸűôßá\őo"×áÖoŻuýVkU‘l㻎1ˇ™ĂĆĽŽÜšbyäĺĺß uMjű]ОóÄ6_ÚrE!×l&×ćžĺ˜Äįؚ%[b’ű¤  ŒžAŻEđÎßí]{q!|ţqמşßěű˙ůńš˙żMţOOđíŕÍŐÄV—Ě×O˝ĂFpIăsZBiBK˝ż3)ÁšĹޟäx÷‚5ˆ4MK@đ§…őÝŚpIa†(­ÂŢ騐ť,“:1\ĄäF%ÁääUo†:śż{ŞčŇKŻX6°đJu­:ăÄOpňyLvý‰˘Uś+(_ş@ۑ—Č5îßŮ÷˙óăs˙~›ü(ţĎż˙ŸŸűôßáYšž) ęĺţę:†‘â-CQńřĐĽšóOšţI$‚ëh.>Ć[de_ĺPgÎy‚mbŹ|M˙wŠ5=[K‹ÂWW7Rj2\›kŐş+#bŻ˜L`ťíZ÷/ěű˙ůńš˙żMţ ”RŢÂÓYĆ÷1,˛BĎ—PńšGBGń+Ť)AR"€<‡Y›_Đ ÔŁŞŢŢ]x>ćůRćáîXÝÄŃ‘É ÇÍo‘@RBńRx!ô6řšl4ŢkvßđĘĎ$÷ďwľÍÄ9ůܒŹF L€ź|Ťž}ƒű>˙ţ|nďÓ…Ů÷˙óăs˙~›ü(Ę|U§kŻĹťŰ &˙MłYü1w y`×@Ł\J>U ë¸{VÄ9á𞕆4ëëËk Ăą;™üC5šQ]TĹ hÂę@c•†>eëÝłď˙çĆçţý7řQýŸ˙>7?÷éżÂ@ń_ë˘{šgńˆoôPޡťŃ–ÖńíÖâéÄŚbޤ ¤R!#¸`ýӚǽֵ‰!ĐăÖ5ÄÓěĽđ˝ŒÖwWž"›LYŽ[Îs"Fţ|ƒŽqÎvśăfńGƒľ=z3Ô|C§[ICq’FŤ2 —™N22…O=zV˝–qegŽ›qźŹQ"ÄŘUQ€Đ ăŢ{Ńá [JöŢ[ááů^ćę1ĆŇyq–tbŃRrAÝń/Q,ZUúüTšÖĚń/}U—zó*Ď#Ćs÷Xă×K{ĄßÝN7ŮŢ,Mo,/ĺ‰#œŻ*˂§ yĆ*)|/$›÷[ëC~ěíťš\nó3Œ7ë[é„Ć<´ŰOdJݞw„u8ôVDŇă[ĆńŻöą!ăÜ`űn˙79ëäöűŘăŠ|9áMZßĆşv§{§(ˇśž×'ś}ŚxÚĺ?NG ă5črř^I7îˇÖ†ýŮŰwr¸Ýćgn?Öś1Ó Œyi´—ÂňIżuž´7îÎŰť•Ćď38ĂqţľąŽ˜LcËM˛Qĺ˛řc^K}7FűKÚxˇű^MTĎG…ŽšS źĎ0#„ ŻE8'€zż‰žşń^śˇKƒžľĹÓŰÝy#‰c”WVV,żt短tňř^I7îˇÖ†ýŮŰwr¸Ýćgn?Öś1Ó Œyi´—ÂňIżuž´7îÎŰť•Ćď38ĂqţľąŽ˜LcËM vˇáëÝHł´đeĽŇÇ&¤n5)b–9ď˜4l ¨÷lU¤Ü#š'f@í\΍áŻéš^™ywĽÍ{%‡Š.ľ§Éql&žc•U×iHDŞŇoŰňŒ†ÁÎ őy|/$›÷[ëC~ěíťš\nó3Œ7ë[é„Ć<´ŰS\đŽše-ŽąŁ__ÚĚIx.$ă$ůœí-5ąŽ˜LcËM AĽčšžšc}ŞéVsZ›/Ü_˝•œśĆGf(h ŞěIĎËš[ ş+ ]3M˝š¸´Őážőî.eţŇÍ*ł˝˘žmŁňĐ7—˘@IŠšć?A´đU˝˛ąÓ5+;U Š ´óđ†ó2U€Qű×Ć1Œ&1ĺŚÔÔü5ĚS4V7Ÿj•|ą4ŢlŚ42ůŽq;A=†2DPşR’U"ßs:ąn .Çń=Z_‰ MęĆÚďČÔp÷–Í<{vÑľ]}÷V?őkâ Ű_xžďGH48dҟOš–Î;Ť˛eó™X™\‡l,_†čŮ&˝‹ű>˙ţ|nďÓ…Ů÷˙óăs˙~›ü+#CȗÄ×ú]ëMâÍEôۋżÚJI!Ekĺ3™Ö$ď(-ÇĺôĎĂuâsH‡TÖuڎ_i—M:”đ‰'v—tŹc`ň\ž{çÁýŸ˙>7?÷éżÂěű˙ůńš˙żMţŔůóÂöZMρ>éVZĹßŰZ‚J8ő9$šŇE´ş ɀœ…ÚGQ‚ŻLřh÷irŢ]ÝĂŚkR[Z˝Ôí4Ť†™–lĜcž+ˇţĎż˙ŸŸűôßáGö}˙üřÜ˙ߌ˙ Ř1á_ j^#şÔžŃŞYC¤XřĘćů`K7-,7ÔyĆMŞĽ€Î8ČĎ5N_Ę~ éłiˇS[´Ţ!“OťľŸ_šiš<ȇ}‰S)• ŒlëťîŮ÷˙óăs˙~›ü(ţĎż˙ŸŸűôßá@q­í šń>ŤŠĹÉmyŚ%üÓíecSvŹF!ó07–Ác¸Šv‘Ťk÷2 yŻXXkkŻźogu⠑ŢĚNTF–W–ÁĄÁY$’°ĺG§6ľŤCŤž­Źę–V—Ď,6CĘkXn"f†R0äĆáĆÖrČĘńÔgß˙ύĎýúođ RĂţGÍCţ˝ÇňŽšŻ…ëçTńŃßicH#Ô7Űľ“›’|Ćé/›´ ŕýĂĆG˝wݤ-–¸—ł,ń]j öhcmó\!r¨Ë6ș°3Âąč4˙łď˙çĆçţý7řV•fĽkvFT˘ă{÷gÍśúSř‡ĂÓŢÝÝëWšŒ˙š\ާris ޸ T‚ ę &şŤ+ [×ümŁëסVMÔLłZë3I!`-3žȘ8;U†1Ž„ƒíŮ÷˙óăs˙~›ü(ţĎż˙ŸŸűôßáYݚXă~]ÝŢxŐťš‹Ťo:fÜîą\Ë=Űj.OsÍq?<5Š_řsÁž!Ôľ;7´ŃĄžk[[I‰‘^2$”ČۆüŞŤ“ŒôŻhţĎż˙ŸŸűôßáGö}˙üřÜ˙ߌ˙ ZŒđŻxšęëĆÚ1ŇŽ] Ől.¤šÎM¨H’*Ť š7]śŇQ°ÇːĎë^vľŕagâ}V˙\ťŽáľŰ ďät[‘hěRX‰ŰŮ2Qœ xţĎż˙ŸŸűôßá\őo"×áÖoŻuýVkU‘l㻎1ˇ™ĂĆĽŽÜšbyäĺĺß uMjű]ОóÄ6_ÚrE!×l&×ćžĺ˜Äįؚ%[b’ű¤  ŒžAŻEđÎßí]{q!|ţqמşßěű˙ůńš˙żMţOOđíŕÍŐÄV—Ě×O˝ĂFpIăsZBiBK˝ż3)ÁšĹޟäy€5{=Zđ焼;â Ĺ:Oď Xŕś }ŚFą3 &tb¸$;‘—NEa6˝Ż7„ü76›­ë3K.‰ř–HäišŇȸ˙ILśVăfËŘ&5ŻĄżłď˙çĆçţý7řQýŸ˙>7?÷éżÂł5<W@ˇoŠ5yĺ֕%ńjó?Ú :jćU¤"PażŔ#×xFŢăFńΛŚGŞjwv×ţ{ŠŇîíć_:9!Pč‘DŹ ŚŐŕp1^—ýŸ˙>7?÷éżÂěű˙ůńš˙żMţj”řŤNÖ5_‹wśMţ›fłřb8îňÁށF¸”|Ş$@×pöŹˆsĂá}*? i×ז×:‡b6w3ř†k4˘şŠŠхԀĆ7+ |Ę;׺˙gß˙ύĎýúođŁű>˙ţ|nďÓ…âž#×D÷rĎâ?ß襟7owŁ-­ăŰ­ĹӉLĹUHH¤BGpÁű§5{­kCĄÇŹk‰§ŮKá{ŹîŻ7?÷éżÂ‹ZŠłýŸ˙>7?÷éżÂěű˙ůńš˙żMţX ÔUŸěű˙ůńš˙żMţgß˙ύĎýúođ˘ŔV˘Ź˙gß˙ύĎýúođŁű>˙ţ|nďÓ…ľgű>˙ţ|nďÓ…Ů÷˙óăs˙~›ü(°¨Ť?Ů÷˙óăs˙~›ü(ţĎż˙ŸŸűôßáE€­EGđ\+´G*¤Ż ”`Á]ŁĄÇFVVR:‚<Š’€9‰§¸ů”|˝Ç¸˘‰§¸ů”|˝Ç¸˘žŻ-˙u‡Ďó<Ú˙ÄgUΏcó+|­Đ{ÓiĐčö?2ˇĘÝ˝6ž{üyz˜áDłŚ˙ÇË˙× ô[W;âčş đ[j72ýŞŕ3Cmmk-Ě°Ž%g*22q‘]›˙/˙\%˙Ńm^wŠźţř›{â+Í3QžÓu*ŢŇ;‹+9.žÖHd™™8Ă>׊ČeqĹs~ŠŮjútz†Ÿ)–ŢBÁYŁd`T•`U€e ‚ ECyŹÚÚřƒNŃ$Žcq óDĘĹXśnÜsœŸ1q€z•ĂxŔŰkZ΃ŤëŢŐŻü3ö[´{tÉ'hîKĆ"–[e ÄYv’§nîB“Ç;{áżŢřCIÓdÓďZĺü9ŻZĆłeš6Ák Čĺí^OU>†‹Ďm˘źÄŻ}âŐ$°ĐľľAŕkű@gÓŚ„ľĂůx…C¨,üvÄŕâĺ—Ăí ź_kk?†Őô™ô Ţ$“ ×K"…ysĂNŸ Ů~IÍ žŠXÚߊ4MT°Ó5+Šašż•"ˇ m+Ť;śŐŐJŚO1ć^đ´úÜ6SxŻBšť™| aëf$]6ń†L2?Ú]ÝłÍď_ßEŕ/A¨éşýÖĽú]ĺč‡Iš¸xÄ{ ĆC6Ö9Sóx˘ÁsÖ(¨ífK›hŽ#Y%@ę$ŁpČʰO¨ ޤ¤0˘Š(Ž?ŕë¤ ´ů$uD[ÍU™˜ŕ5;ź’k°Ż2đö‘yŻţǚ&Ÿ(Šîţ=nŢ'{j€{N֚ŘOsŞŃźoá˝bú M:ňćVšĎŮćkŇ đ .fAœ~V< čë“Đ|Oöř-´Ťkşeń„ŁĽĆ™$pZ2ĄŔ2‘ĺş‚ł‘Ű‘Äü:Ň%ˇÖ|$lü?ŠéşĹĽźŤâŤË‹Gˆ]š„ƒşfnY§ÚęĘ[ ÝÎ(°\ő k6ž!đýގeŃŰŢÂłFł)ő‘ŸÄ֕x݃­ő?éVň_čzË5߃폢Ž daq—˘pŤű˛DɂűG^x§Ůx5uH"߇ç¸ű?,máYíŰÝ/ Ž&_—ů—wÍ žĎPß]Aee=íÓůp[ĆŇĘř'j¨É8žjń­KĂ–z 2iÚ-čźŐ< ¨ÇŤ:@í-Őç—mĺ Ž2ÓÓťć?0+¤Ó4¨ź'â‹{ý;CťŠÄxfi/ÖÎѝŽ.#xJ~ňr­.3ó6M g‡|UĄë÷WšmĚ˙jˇEymîm&ś”#d+ě•UŠ’ qÖśëĎž^wÄž#ŐlőkMbâŐaŽÖçIşśŠĘŮ\‘’XŐdłnr ç .O ĐŔ(˘ŠC (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€8˙ƒŽ‘ü.Óä‘Őo5Vfc€ÔîňIŤş7ü7Ź_Ai§^\Ę×9ű<Íc:A>cĺĚČ#“€OĘǁ\݇´‹ÍötźŃ4ůDWwńëvđą8ŰPźŘp~ľĐč>'ű|ÚUż‡ľÝ2řÂQŇăL’8-PŕHňÝA ŒŮČíČŚ$7ĹňS~˙×îŁ˙ŚťŞëŤĘź+kseuđŽŇţÖęÚţ)u˝K’Lsý›wç9$Ű¤ŢÁşŔŽ z­'° ˘Š) (˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šáţ˙É;‹ţšŸţœ.+¸Žŕoü“¸żě)Š˙éÂ⻊oq-Ž_âiDžŽ>e/qî(ŁâiDžŽ>e/qî(ŻŞËÝaóüĎ:żńŐ@sŁŘüĘß+tôÚt:=Ě­ňˇAďMŻžĆ˙^§fřQ-ĹíŹMŚéZĹߔ띴‘G$ŹĘW†•ŃÉ%‡ă'óŸÚčkř8Óů"ť ˙Čvßţ˙ šâŽąâŸ ŘK­iŢ ĐlěUR(lŽtŻnŽŽXá"ˆĽÜA™ÉPoŠ'1ŒSFŘâ˙´>$˙ŃÖ˙đqŚ˙ňEÚčkř8Óů"ťk_kš6‹ iŢ(ŃŰVńžĽm$óişj ůŒ ň…TO25%¤ů™ž\çĆż#“ÂĂWđÚO?‡ľŤËhšŇ"Š=˘(a6ü˛É™]Ł*NýŮŔŞäDó3 űCâOýío˙o˙$QýĄń'ţˆöˇ˙ƒ7˙’+Ż—â~›§ŰĘ×:ną}kĽĹöÖŠm _f°y#I™—Wl+Ťˇ–ľXŠíľ‘Šś™8ѤłŽüŻîíâ=X)Œg€Eˆ9™ă_Účkř8Óů"í‰?ôGľżüiżü‘^‹đ“ÄŸŠ<cŹë+fˇňËsßdŁˆ˜Ž$ˆVf#!ÁcÖšmkÇÚĚ_ő sžŽÚhbą‡[ś”ËŤź2ů࠙٠ä9G"fa˙h|I˙˘=­˙ŕăM˙äŠ?´>$˙ŃÖ˙đqŚ˙ňEvú×ÄÍ/JŐ$˙ŃÖ˙đqŚ˙ňEcř&×âW‡|'gŁ?Â}nâXg˝•ÜjşjŻďŻg@˙I=Uß#?DV7‹Fź4á6…ŹčÚKBL—ęvuŒO <[q×qb0čĺAvyGö‡ÄŸú#Úßţ4ßţHŁűCâOýío˙o˙$WAŕëéŕíOĹţ3“O¸Ńžę(tÓtš­Ž5vو^iOďdeŒŒŽŕ7ŻíŸCÔüűmwږ›u`—6˛Áo%Â%ÍÂ$l0ďF˙:– Hú2Š9s3ţĐř“˙D{[˙Áƛ˙Éh|I˙˘=­˙ŕăM˙äŠčü9ńć5ş°ť˛ÔźAŹÍŽjĐŮXéńB˛‹[[“ć.ŃĆŞŁ]ĚŮ%‡Ţ&ťŻ ëś>$Đmľ;Íóď]’ŚÉ#tr’FëٕՔU4r ćg‘h|I˙˘=­˙ŕăM˙äŠ?´>$˙ŃÖ˙đqŚ˙ňEw^ןM{ăřwÄm¤8ҒÎkg°‚HţYĤŤďvÜG–9zž*§ĹŸę^Ő4[(/t}Âý'{sWś’kKfËŮń€Ď˝ˆ.ę1u3°ř‹Ľř_Ärx{Q]NĆâě.Úhd°Č^G#ڝáç"frÚčkř8Óů"í‰?ôGľżüiżü‘^áEˆ9™á˙Účkř8Óů"í‰?ôGľżüiżü‘^áEˆ9™á˙Účkř8Óů"í‰?ôGľżüiżü‘^áEˆ9™á˙Účkř8Óů"í‰?ôGľżüiżü‘^áEˆ9™á˙Účkř8Óů"í‰?ôGľżüiżü‘^áEˆ9™á˙Účkř8Óů"í‰?ôGľżüiżü‘^áEˆ9™óż‚m~%xwÂvz3ü'Öî%†{Ů]ĆŤŚŞţúöyÔô“Ń%P}ň9ąýĄń'ţˆöˇ˙ƒ7˙’+ŐüZ5á§ ´-gFŇZd¸ŸS°{¨„`xIâێť‹€xď\ďÁÍsĹŢ#ŇŻľI¤ÍŚM8,öz|śouÎńÉ4¤+žSJ€Ä|Ŕ•ŮćZĽŻÄŤ˙xkY? ő¸˘Ń绖DޚÍ'›e< úHĆE'Ű'’;Účkř8Óů"˝ÂŠ9P]žýĄń'ţˆöˇ˙ƒ7˙’(ţĐř“˙D{[˙Áƛ˙ÉîQȃ™žýĄń'ţˆöˇ˙ƒ7˙’(ţĐř“˙D{[˙Áƛ˙ÉîQȃ™žýĄń'ţˆöˇ˙ƒ7˙’(ţĐř“˙D{[˙Áƛ˙ÉîQȃ™žýĄń'ţˆöˇ˙ƒ7˙’(ţĐř“˙D{[˙Áƛ˙ÉîQȃ™žýĄń'ţˆöˇ˙ƒ7˙’(ţĐř“˙D{[˙Áƛ˙ÉîQȃ™žýĄń'ţˆöˇ˙ƒ7˙’(ţĐř“˙D{[˙Áƛ˙ÉîQȃ™žýĄń'ţˆöˇ˙ƒ7˙’(ţĐř“˙D{[˙Áƛ˙ÉîQȃ™žýĄń'ţˆöˇ˙ƒ7˙’(ţĐř“˙D{[˙Áƛ˙ÉîQȃ™žýĄń'ţˆöˇ˙ƒ7˙’(ţĐř“˙D{[˙Áƛ˙ÉîQȃ™žýĄń'ţˆöˇ˙ƒ7˙’(ţĐř“˙D{[˙Áƛ˙ÉîQȃ™žýĄń'ţˆöˇ˙ƒ7˙’(ţĐř“˙D{[˙Áƛ˙ÉîQȃ™žýĄń'ţˆöˇ˙ƒ7˙’(ţĐř“˙D{[˙Áƛ˙ÉîQȃ™žýĄń'ţˆöˇ˙ƒ7˙’(ţĐř“˙D{[˙Áƛ˙ÉîQȃ™žýĄń'ţˆöˇ˙ƒ7˙’(ţĐř“˙D{[˙Áƛ˙ÉîQȃ™žýĄń'ţˆöˇ˙ƒ7˙’(ţĐř“˙D{[˙Áƛ˙ÉîQȃ™žýĄń'ţˆöˇ˙ƒ7˙’(ţĐř“˙D{[˙Áƛ˙ÉîQȃ™žýĄń'ţˆöˇ˙ƒ7˙’(ţĐř“˙D{[˙Áƛ˙ÉîQȃ™žđŻDÖ^ăÜQGÄӏ \|Ę>^ăÜQ_U–˙şĂçůžuâ3Ş€çGąů•žVč=é´čt{™[ĺnƒŢ›_=ţ<˝NĚ?đ˘iř_ţCś˙đ/ýÔ/đ_ŠľoŘřŁMńN:}ąŽĆĂQŃ$ťKy["IÔĽĚY‘”íÉjä nlĎáůŰ˙ŔżôZž$ńŽ‹áűďąęŢ ybBö^žźˆ)Ďü´‚LńÓ9ë(l\ˇ9Ď|6šńKhşŽľyáŤ˙i‘OIwáď´ióĹ+ŤcěĎ1eeňÓ %ÎwvmĄşŻÂŘďô;-6;ý7Mú6ŤŚÓô•‚ß7Á3"DŻ„ Tš%‹°<žÓÂ~ Ň|UáŰ?čWsŚŢĄ’ŢW‚HKŽHÎŮX ƒŒ‘ČŕŠ‡Ĺž"‡Ăz}ÎĄw§jvś7ÓÍnˆËŔĘĚöÚ:§$q›$௞ X>šw¨Ű/…nSPňžńuŸ G(t‰"& Šc ąŠÚÁŔl‘ÔŠôíV;ů4éăŇŽm­oJb Ž-ÚxŃ˝Yаö żZ’Ęá.ěຌ0IŁY7PČĎçUľíZĂCŇŚŐ5)$ŽÖĄĚpźŹK0UbIÍsż <-­ř;Ă­˘jşîŸŤĂŇKlöÚcÚ2%y\>é¤ ó?ۀ9ĎZĽńÁ~$ń†Ť Íâ­>ßÚ¤~Lö͢ůˇQĆTĚf¤ŕÍ'Ž‚ş? ř§CńL2čˇrJm%ňnažÚ[yŕ| ńJŞčH Œ¨ČVv„Î]ÎyăÖ¨ ?×~ÝŢk—ú杯Ci¨K­ŰjöŚ{4PźVŸe(ę$C"˛–9 „:㞎}?Äň[ߏ~#´Ši–˛şé™[fP<Ӵɗs€H۞­Š|kĄÝčSÉ=˝ÝžĽ˜Ľâ%fžKo´ŞĄ\ŕyyÉmŁ*GŚzJ§iĄ§}=ÎĄörůeˇűß ‡ËäďÜyč1Ӛćž,xKWńž…m¤iÚ팗l.V[čn´öşŠú%ä@áeˆ„-‚Ŕ7ĚÓÁ ö5•âoXxzÖ+BRT•ö(°Ňîoœg•‚7eu zĺľĎë~*đ•÷‡üe­čwŃźśóŘľ††ÖéČ$drĎ2̄ŞŸ(۸î❯ÂŕžÔt– éó^ÝYNÓh~["Úáf ëćšrv l.â@ęQŕßř{Ĺוž‰5űOŚH‘ŢĹwŚ\Ůź.ëšTŹńĄ$ŽŔ žŁ;­ăŘŮ”ąş˝`čžM˛ŠsšÂ–ůˆ\î<ô<3Őž YŢ]&˘.´{˝B+ýF寢­őЊňq3FЙîBŤśEu?{Œ1čŃŁđ˙‡mt˜âÓb%tű´ˇË1c˛$ Ë䓒I&—ĂőŸˆ-Ż.,Łž5´żš°L $4nF ůISŽřęjĐ ᏠxŤKř‡Ťřž˙Äú5厏Ç=œ:,şŹ"AŮMˀyó‡v8 [ž(ąńEŰŰż†őý;KŘŹłG}Ľľärç ,Ń2‘ƒüDň*Ÿ‡<á_jë¤éˇ÷l’žîŹ.-žŃâ2˘‰Tn([sĹ^-Đź3%¤:ľÍŔ¸˝.-­­,Śťžm€+(îBädă#=Ey¤őßx›Á†ľVI,­őť‹Fm0Ëiç\Í…$t…™Ę"ş‘°rpŮÔšřB’Yé1IŞéú›Ú=ô׹ë:Hźľť¸ť˜M$â1$WÜ’ÁUˆÁë^‘ŁjVšž™ŁbŇľźŔ”2Âń?‚ 8 § đ@5n€<žÇáź>Ń<=6¸ňŰéš&Ľ¤;Ľ˘ĆÓ%ćŔ\ŘBĄ:`ƒžŘĹ.ťđśď]‡DźÖu jZΏś‘I{áĎ>Ę[wňř{wœŸ0ԇYŤ `‘]Š<_ŁřoPˇ´Őšx’[ ÍA§X÷G6ލ)l|ŮĀ€ŞsƒíŰyُˇŽâݨČ# ó@~ѓĂţľŇ"M‹Čvéö+in˜ąŮ ’e$œ’I5Ęü8đ_‹|3Ź^_ë>+ŃuÇÔ%ioî‡,—Ë_4Ý:,iœ*đq‚I>ƒ\ż‡<á_jë¤éˇ÷l’žîŹ.-žŃâ2˘‰Tn([ÔQEQEQEQEQEQEÇ|Xđ–Żă= ŰHÓľŰM.Ř\ʎĐÝiíuôKȁÂË[€o˜ §‚AłaŚxĺt›Űk˙č&éÄbĘ{HÜůĂ#ÜÉćd` ŰÉůťiř›ÄľŠçP‡T•%}Š,4ť›çĺ`ŮGHŢŠx7ĆžńuĆĽo˘M~Óé’$wą]é—6o şîU+Żáż Ä4/QźÔoçąOkĽĎz– ƒşâXáFbŞ:(3mHí( Ő죝ř5áďÚxĎˇťľŸT“SŃo-Žu{…{§>rÂÓť˘ÉšQ ěw-eZřnĺ|â1˘[\5­ÖŁŁqÖź9Ż6Ł ÚŽÓřquÍzI­o<;qŤDf–đ5źÍiŁČŚ1.É0ęťł˜0öO„öé_tۋ۝ӗ˒ćĆ[YfW1ÇäČÍ"B¨Ą‰mŞ3ÍuTP’ř]˙„×â4:ţľŁř—I’Ć;‹}OźđýíşB2âyŢ!˜áT …S™˜ăg⽎“ý§¤j—/ă ?RśŠxíu?éňÝźHć2ńH‰ ŤB7ĆFS¨ďč4PĎw×7ş†ˇđâëâg‡ŻuVşçöQšW„Kn°M5¤a‰fO,˛*śÖ`p6üŻ“IÔä🇴}kÁśói˛MŞ\Z6Żáëa´č Îm-źL700Ăł‚=˝kÜ:ç[˛Ö§ˇßcĐŰK˝†Ä”Ą`ůiÔcŒdŐęůÎçĂ'×ţxWMŐ4-Bęů|ŽYKĺłf9Ů`[t“~vš( îbN܂qšłâ=ŢćĎÂ2é^[_ŰZÜĽţ›u໫˜Ňý„%’Á<ŠĺY@—k¨$ú†AŃ@ŻÂ{ ô݇şmĹíÝéˆKĺÉsc-Ź‚3+˜ăňdf‘!TPÄśŐć¸˙kżđšüF‡_Ö´é2XÇqo˘i÷ž˝ˇHQąć\O;Ä"ó °Şqó3zŐQEQEQEQEQEQEĹü_ń>Żáż Ä4/QźÔoçąOkĽĎz– ƒşâXáFbŞ:(3mH§đ˙Sđć…ŕۘ4M/ŗ bË-ăŢh7ÝßO3óbhĚĺ˛ĚW;F: ˘˝Чi¨%Χ}`-/bk?/tŇŔËť×?ťsĂăĄÇCĹ\˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘ŠáüQ˙!ۏřţ‚+2´üQ˙!ۏřţ‚+2°{š-Ž_âiDžŽ>e/qî(ŁâiDžŽ>e/qî(ŻŞËÝaóüĎ:żńŐ@sŁŘüĘß+tôÚt:=Ě­ňˇAďMŻžĆ˙^§fřQ4ü/˙!Űřţ‚k¸ŽÂ˙ňˇ˙č&ťŠĘ-Š(Ť$(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘ŠáüQ˙!ۏřţ‚+2´üQ˙!ۏřţ‚+2°{š-Ž_âiDžŽ>e/qî(ŁâiDžŽ>e/qî(ŻŞËÝaóüĎ:żńŐ@sŁŘüĘß+tôÚt:=Ě­ňˇAďMŻžĆ˙^§fřQ4ü/˙!Űřţ‚k¸ŽÂ˙ňˇ˙č&ťŠĘ-Š(Ť$(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘ŠáüQ˙!ۏřţ‚+2´üQ˙!ۏřţ‚+2°{š-Ž_âiDžŽ>e/qî(ŁâiDžŽ>e/qî(ŻŞËÝaóüĎ:żńŐ@sŁŘüĘß+tôÚt:=Ě­ňˇAďMŻžĆ˙^§fřQ4ü/˙!Űřţ‚k¸ŽÂ˙ňˇ˙č&ťŠĘ-Š(Ť$(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘ŠáüQ˙!ۏřţ‚+2´üQ˙!ۏřţ‚+2°{š-Ž_âiDžŽ>e/qî(ŁâiDžŽ>e/qî(ŻŞËÝaóüĎ:żńŐ@sŁŘüĘß+tôÚt:=Ě­ňˇAďMŻžĆ˙^§fřQ4ü/˙!Űřţ‚k¸ŽÂ˙ňˇ˙č&ťŠĘ-Š(Ť$(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘ŠáüQ˙!ۏřţ‚+2´üQ˙!ۏřţ‚+2°{š-Ž_âiDžŽ>e/qî(ŁâiDžŽ>e/qî(ŻŞËÝaóüĎ:żńŐ@sŁŘüĘß+tôÚt:=Ě­ňˇAďMŻžĆ˙^§fřQ4ü/˙!Űřţ‚k¸ŽÂ˙ňˇ˙č&ťŠĘ-Š(Ť$(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘ŠáüQ˙!ۏřţ‚+2´üQ˙!ۏřţ‚+2°{š-Ž_âiDžŽ>e/qî(ŁâiDžŽ>e/qî(ŻŞËÝaóüĎ:żńŐ@sŁŘüĘß+tôÚt:=Ě­ňˇAďMŻžĆ˙^§fřQ4ü/˙!Űřţ‚k¸ŽÂ˙ňˇ˙č&ťŠĘ-Š(Ť$(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘ŠáüQ˙!ۏřţ‚+2´üQ˙!ۏřţ‚+2°{š-Ž_âiDžŽ>e/qî(ŁâiDžŽ>e/qî(ŻŞËÝaóüĎ:żńŐ@sŁŘüĘß+tôÚt:=Ě­ňˇAďMŻžĆ˙^§fřQ4ü/˙!Űřţ‚k¸ŽÂ˙ňˇ˙č&ťŠĘ-Š(Ť$(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘ŠáüQ˙!ۏřţ‚+2´üQ˙!ۏřţ‚+2°{š-Ž_âiDžŽ>e/qî(ŁâiDžŽ>e/qî(ŻŞËÝaóüĎ:żńŐ@sŁŘüĘß+tôÚt:=Ě­ňˇAďMŻžĆ˙^§fřQ4ü/˙!Űřţ‚k¸ŽÂ˙ňˇ˙č&ťŠĘ-Š(Ť$(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘ŠáüQ˙!ۏřţ‚+2´üQ˙!ۏřţ‚+2°{š-Ž_âiDžŽ>e/qî(ŁâiDžŽ>e/qî(ŻŞËÝaóüĎ:żńŐ@sŁŘüĘß+tôÚt:=Ě­ňˇAďMŻžĆ˙^§fřQ4ü/˙!Űřţ‚k¸ŽÂ˙ňˇ˙č&ťŠĘ-Š(Ť$(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘ŠáüQ˙!ۏřţ‚+2´üQ˙!ۏřţ‚+2°{š-Ž_âiDžŽ>e/qî(ŁâiDžŽ>e/qî(ŻŞËÝaóüĎ:żńŐ@sŁŘüĘß+tôÚt:=Ě­ňˇAďMŻžĆ˙^§fřQ4ü/˙!Űřţ‚k¸ŽÂ˙ňˇ˙č&ťŠĘ-Š(Ť$(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘ŠáüQ˙!ۏřţ‚+2´üQ˙!ۏřţ‚+2°{š-Ž_âiDžŽ>e/qî(ŁâiDžŽ>e/qî(ŻŞËÝaóüĎ:żńŐ@sŁŘüĘß+tôÚt:=Ě­ňˇAďMŻžĆ˙^§fřQ4ü/˙!Űřţ‚k¸ŽÂ˙ňˇ˙č&ťŠĘ-Š(Ť$(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘ŠáüQ˙!ۏřţ‚+2´üQ˙!ۏřţ‚+2°{š-Ž_âiDžŽ>e/qî(ŁâiDžŽ>e/qî(ŻŞËÝaóüĎ:żńŐ@sŁŘüĘß+tôÚt:=Ě­ňˇAďMŻžĆ˙^§fřQ4ü/˙!Űřţ‚k¸ŽÂ˙ňˇ˙č&ťŠĘ-Š(Ť$(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘ŠáüQ˙!ۏřţ‚+2´üQ˙!ۏřţ‚+2°{š-Ž_âiDžŽ>e/qî(ŁâiDžŽ>e/qî(ŻŞËÝaóüĎ:żńŐ@sŁŘüĘß+tôÚt:=Ě­ňˇAďMŻžĆ˙^§fřQ4ü/˙!Űřţ‚k¸ŽÂ˙ňˇ˙č&ťŠĘ-Š(Ť$(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘ŠáüQ˙!ۏřţ‚+2´üQ˙!ۏřţ‚+2°{š-Ž_âiDžŽ>e/qî(ŁâiDžŽ>e/qî(ŻŞËÝaóüĎ:żńŐ@sŁŘüĘß+tôÚt:=Ě­ňˇAďMŻžĆ˙^§fřQ4ü/˙!Űřţ‚k¸ŽÂ˙ňˇ˙č&ťŠĘ-Š(Ť$(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘ŠáüQ˙!ۏřţ‚+2´üQ˙!ۏřţ‚+2°{š-Ž_âiDžŽ>e/qî(ŁâiDžŽ>e/qî(ŻŞËÝaóüĎ:żńŐ@sŁŘüĘß+tôÚt:=Ě­ňˇAďMŻžĆ˙^§fřQ4ü/˙!Űřţ‚k¸ŽÂ˙ňˇ˙č&ťŠĘ-Š(Ť$(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘ŠáüQ˙!ۏřţ‚+2´üQ˙!ۏřţ‚+2°{š-Ž_âiDžŽ>e/qî(ŁâiDžŽ>e/qî(ŻŞËÝaóüĎ:żńŐ@sŁŘüĘß+tôÚt:=Ě­ňˇAďMŻžĆ˙^§fřQ4ü/˙!Űřţ‚k¸ŽÂ˙ňˇ˙č&ťŠĘ-Š(Ť$(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘ŠáüQ˙!ۏřţ‚+2´üQ˙!ۏřţ‚+2°{š-Ž_âiDžŽ>e/qî(ŁâiDžŽ>e/qî(ŻŞËÝaóüĎ:żńŐ@sŁŘüĘß+tôÚt:=Ě­ňˇAďMŻžĆ˙^§fřQ4ü/˙!Űřţ‚k¸ŽÂ˙ňˇ˙č&ťŠĘ-Š(Ť$(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘ŠáüQ˙!ۏřţ‚+2´üQ˙!ۏřţ‚+2°{š-Ž_âiDžŽ>e/qî(ŁâiDžŽ>e/qî(ŻŞËÝaóüĎ:żńŐ@sŁŘüĘß+tôÚt:=Ě­ňˇAďMŻžĆ˙^§fřQ4ü/˙!Űřţ‚k¸ŽÂ˙ňˇ˙č&ťŠĘ-Š(Ť$(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘ŠáüQ˙!ۏřţ‚+2´üQ˙!ۏřţ‚+2°{š-Ž_âiDžŽ>e/qî(ŁâiDžŽ>e/qî(ŻŞËÝaóüĎ:żńŐ@sŁŘüĘß+tôÚt:=Ě­ňˇAďMŻžĆ˙^§fřQ’E ’'hÜte8#ńŠ˙´/˙çúçţţˇřŐjůżă?ü”­[ţŘ˙蔮xŤšˇcéŸí ˙ůţš˙ż­ţ4h_˙ĎőĎýýońŻ“ź5áx—íŸŘZUĹ˙Řáó§ň€ůW°çŤ(˃XôŇMŮ2n}“ýĄ˙?×?÷őżĆí ˙ůţš˙ż­ţ5ĺßłĎü‰wŸöýwkŞXqôA?úz[-ÓEą¸ˆąPŮĆ>ň‘ŒçŠ—tĘFˇö…˙ü˙\˙ßÖ˙?´/˙çúçţţˇřŐjÍÓ5›]CUŐ´Řc™fŇçŽˀ™âIA\FלsŸ­`m˙h_˙ĎőĎýýońŁűB˙ţŽďëVŹÝ3YľÔ5m[M†9–m.h᝜ŹĎČ6ŕ䍎:Î~´]ˇýĄ˙?×?÷őżĆí ˙ůţš˙ż­ţ5ËMă? CĽŮjręj–—Ú‡ömť´2 ×>cFc#nT†GÚI8ć­ś˝dÚĚşMŹwwvňĹÚĂÂDgGvl a?‡$n\ŒѨßÚ˙óýs˙[ühţĐż˙ŸëŸűúßă\Ďü%zD–ZőŤÍukŽÜ-˝œąÇ€KFň`Ř b6휑ĹnѨ´/˙çúçţţˇřŃýĄ˙?×?÷őżĆŤQJă,˙h_˙ĎőĎýýońŁűB˙ţŽďëdꚥ†˜öi}?”ס+kn63o•ƒ0^Ç Üœ*í;ą´/˙çúçţţˇřŃýĄ˙?×?÷őżĆŤQJă,˙h_˙ĎőĎýýońŁűB˙ţŽďëV˘‹gűB˙ţŽďëÚ˙óýs˙[üjľ\ ?Ú˙óýs˙[ühţĐż˙ŸëŸűúßăU¨˘ŕYţĐż˙ŸëŸűúßăGö…˙ü˙\˙ßÖ˙­EĎö…˙ü˙\˙ßÖ˙?´/˙çúçţţˇřŐj(¸´/˙çúçţţˇřŃýĄ˙?×?÷őżĆŤQEŔłýĄ˙?×?÷őżĆí ˙ůţš˙ż­ţ5ZŠ.Ÿí ˙ůţš˙ż­ţ4h_˙ĎőĎýýońŞÔQp,˙h_˙ĎőĎýýońŁűB˙ţŽďëV˘‹gűB˙ţŽďëÚ˙óýs˙[üjľ\ ?Ú˙óýs˙[ühţĐż˙ŸëŸűúßăU¨˘ŕYţĐż˙ŸëŸűúßăGö…˙ü˙\˙ßÖ˙­EĎö…˙ü˙\˙ßÖ˙?´/˙çúçţţˇřŐj(¸´/˙çúçţţˇřŃýĄ˙?×?÷őżĆŤQEŔłýĄ˙?×?÷őżĆí ˙ůţš˙ż­ţ5ZŠ.Ÿí ˙ůţš˙ż­ţ4h_˙ĎőĎýýońŞÔQp,˙h_˙ĎőĎýýońŁűB˙ţŽďëV˘‹gűB˙ţŽďëÚ˙óýs˙[üjľ\ ?Ú˙óýs˙[ühţĐż˙ŸëŸűúßăU¨˘ŕYţĐż˙ŸëŸűúßăGö…˙ü˙\˙ßÖ˙­EĎö…˙ü˙\˙ßÖ˙?´/˙çúçţţˇřŐj(¸´/˙çúçţţˇřŃýĄ˙?×?÷őżĆŤQEŔłýĄ˙?×?÷őżĆí ˙ůţš˙ż­ţ5ZŠ.Ÿí ˙ůţš˙ż­ţ4h_˙ĎőĎýýońŞÔQp,˙h_˙ĎőĎýýońŁűB˙ţŽďëV˘‹gűB˙ţŽďëÚ˙óýs˙[üjľ\ ?Ú˙óýs˙[ühţĐż˙ŸëŸűúßăU¨˘ŕYţĐż˙ŸëŸűúßăGö…˙ü˙\˙ßÖ˙­EŇÉ$˛%v‘ĎVc’mP/ń4ăÂ×2—¸÷Qń4ăÂ×2—¸÷WŐĺżî°ůţg›_řŒę 9Ńě~eo•şzm:ÇćVů[ ÷Ś×Ďc/Słü(…|ßńŸţJV­˙lôJWŇŸđ“ţJWżî˙˘^¸ŞÖö0sľíţf­_Cć xŁÄűgöŤqaöČ|™ü˘>eěyčĂ' 0Ă'dÖ=~€Q^z͒wPüŕ'™óżěó˙"]çý„_˙EÇV5­Et?‹’jwşvł-”Ú P$ÖZMÍÚů‚âF*L1ś<ă­lxţB>1˙ą˘űů­uéŠ_PGˆüCRŐu‹ÍWLđÁƒP‚ęĘM>äxzćKéâýËÎU`.­p•ůąKămgń™ź-Ť]kW­đíôV2:Çp-"Uxćl;dł’ …ĆNŇśŃNácÄ<]áíbďŚéՙ㻸–Ńő(|7s¨Kl‚(Ŕň&Š@śäJ$%X.s’XFđ•­Ô3ń•ÄöÓGĹőłA#Ą (Š*OPÇpEu4Qpąă7ţŐőOx›Ă†Ćć*5˝ÔôŰ̈ŐÜ1Şěn…’CtÇÓzúÓ´ 3VÖ´í_Ö4 Č.ľŸ5íőĹŤoˇˇ[Y­ĐJ¤|ŤľŻ?˝{%\,x‡†ü+a'ƒ|ĄÂ)qk=žą×#ţʒ­ľÂ–wŘT$€XS¸~lAřiŚ>Ž^ăÜQGÄӏ \|Ę>^ăÜQ_W–˙şĂçůžmâ3Ş€çGąů•žVč=é´čt{™[ĺnƒŢ›_=ţ<˝NĚ?đ˘–tŠÝęPžĄkuyłíZę3Áćě]Ť¸FŕŸSëZ”W+Wћ˙ŮI˙AOŕňó˙ŽŃý”Ÿôńţ/?říhQSÉŔQŃô›";ˆěc‘>Ó;\LŇLň´’671g$’p;Őę(Ş˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(—řšqák™GËÜ{Š(řšqák™GËÜ{Š+ęňß÷X|˙3ÍŻüFuPčö?2ˇĘÝ˝0…`UÁe<ŽGÔGÔiđčö?2ˇĘÝ˝6ž{üyz˜áD‹ězüúK˙ƒ Żţ;GŘô˙ůô—˙_üvĽ˘šŽkb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ."űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙Šh˘áb/ąé˙óé/ţ .żřícÓ˙çŇ_ü]ńږŠ.)Nú ˜Ś1Šꯪ܂;ô3S>ŃáĎůëţ Ž?řőuVšö‘áŸéږŻyŻŮĄgvË4’ČŔ,îÎǀ $đ*ř•á™t-sUˇžňC˘Y˝ĺ휶rŰ]¤jŒŕů3Ş7Ěś’$uë[8E;§&ŽsąËáů$XăxŘ€Şş­É$ž€:Ź˝ŽšˆÎö˛*¨%‰Ôn€u'÷ľÜOwţ†ňlÝ ĹąmŽʲô#§C\?† žëĂŢyi7°wÜIÜ˸'× Ąž 9Ř9šÜŤöĎX?đmq˙ǨűG‡?çŹř6¸˙ăŐÚë~1Đ4]sGŃ5MJ;mCY‘ăÓáebfd°Č/P2Äd$ –/ÚIâ۟ Źs‹Ë{ŻČYŽI$Eç;łgŒ`Ž} Gú˙†xá~ŃáĎůëţ Ž?řőhđçüőƒ˙×üzť¨źKi'‹n|2ąÎ/-ě"žw yf9$‘œîĚMž1‚9ôÔűG˝ő˙ ńć?hđçüőƒ˙×üz´xsţzÁ˙ƒkţ=^özĄâMzßAđî§ŽŢ$˛[i֒ÝĚą]’4.ÁA €q’>´Z?×ü0{ÇöĎX?đmq˙ǨűG‡?çŹř6¸˙ăŐéV—ési Ěa‚JŠę¨gš“íôZ?×ü0{ǘýŁĂŸóÖü\ńęĐ ¨6Ş•QŔ‹`}I$ýI&ťď´{כéœ[:ş“ĚŠ;*‰==ŞgkĄĹťŮ˜?N<-qó(ů{qEN<-qó(ů{qE}6[ţëŸćp×ţ#:¨t{™[ĺnƒŢ›O‹ţA<(ůĄ÷ŚWÎă?/S˛‡đâQEsQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@~6ˇžţÉđška>§…soywgď‘ăk9!ó‘ĽWÚ9 dŕ{ĆßÚ0˝ń&˝¤hşź6Px/QŇă7VŰĎq>ÖDHdQ! ĺžJŒ™pšćťťmFâŇÖ F°¸›ěđ¤"HŠpŞ3ČőĎQÍIýą?ýŻ憎řşŢZÉľů™EĽ™Íü+´żÓgÔ ń5ÔŢ"’ÝIŐÚ&0\Z˙Ë8Ł8Ä;:O9Ëĺ÷­Ÿ Iáăč„˙䬕hę× Ž™t ŕxÂŠ N>€ý V´ŠKěZç5’ŕ1ć-Ł8烆$vȑÔvßúъJű[yăíÇ>-ń'ŠőM+@´Ň;{ ćţöKYa–ÚEšiăÉ`ęól\îPÂŘć¤ń izďÓÄ^-đť§ŢřJĐGnt™Ž FiŘÄP))2†ŔrĎď.áŸIţ؟ţWż÷Ô_ü]Ű˙Đ*÷ţú‹˙‹Šłţš.ëúG“Ž‘ĺkdŸ<)Ťř‰ŁđM¤ŇEa-ňýľd˜şĺý÷÷=ßöÄ˙ô ˝˙ž˘˙âčţ؟ţWż÷Ô_ü]ÓAuý#Ęžč:˝žąĄËtŇiž"ľˇ™ui†.˘{éZ ö‹ć•Ą¸nŮ€9* ΍ŚiÉđ›]ÓSœ8 ÝŰę—ré2™Ż.L8}ŤfۂňrĄY¸ĆĆ+Ó?ś'˙ Uďýő˙GöÄ˙ô ˝˙ž˘˙âčłţš Żé3Ďuo ęšDˇ–ţÓĽŇď5ÝG%Ä*cߍB!i$<đňáŘîęI㌍7B‘|5âÓŁZOjgđĺ¤š]§„ŽôŃspÉűśv–GÎ>u7ŢrÇ˝gűbú^˙ßQńtlO˙@Ťßűę/ţ.‹?é şţ“9ď hQx{â–ÚNÖ7‘u "„ŞKr’Áĺ™[4ťZ^[ć#w\VŽ™ţ˘_úůŸ˙F˝\ţ؟ţWż÷Ô_ü]Wł‰Ą„ŤY¤yf,@őĆqž3č)KHę%Ź´9߉§¸ů”|˝Ç¸˘—â_üŠ×_*Ÿő>âŠúœą_ ŸćpWţ#: öŇ˙@ąžĘ{{ˆY $°HN`Ŕŕ‚Ajzřďöjř‘âŤëËĎ_ß Člě^ę+‰÷<ůDĄ ó(ŢÄd8Ŕ{Iń^°úŘ˙ďŠó˙łžˇűčĘ×ň˙‚iî’äkcÖčŻ">+ÖOüśţřÂWŹ˙Ďt˙ž?ě9?á˙\ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´W‘ÂWŹ˙Ďt˙žđ•ë?óÝ?ďGöżŸđ˙‚]ţéë´WˇŠuƒÖt˙ž7ţ}cţ{§ýđ(ţĂĎřÁ×?şv_Žmíź/1š–ŤfI\"¨$’N’{Q_-~ŇŢ:ńwąxv+„ŽÖöĹfžDJŔźˆŃƒœ!W žFpH%'‹– *ÖÝöjŁç}O˙Ůgwenhywfar-4.15.2beta/doc/dialog/images/cocoa-1.png0000644000175000017500000013115412364015347016754 00000000000000‰PNG  IHDRĐ0Ż\ xiCCPICC ProfilexՖgTɆŤ{r"Ě C†!g$ 9Ar•a† ă0dDEdqLˆˆ`X0(¸*Aրˆb`0ÇdPŽ‹(ˇŹçÜť˙îŸ[çtŐÓo}őuuW矐;9A ,@*?CčáĚ ˆdâ€H"‡›.pň÷÷˙Ř>ސxňŽ‘8×?†ý÷ i^l:Č™ŽáĽsS>‹đ W Ě>…pv†aTÂt!˛A„+Ä?ĎőbŽ™çós1Á.HL?x2‡#Œ€ôљYÜx$ia>/‘Ůa{n‡‡°xŠkÄ\…°nĚyâ`'f1'‡żČóD욘.HáäÎÝü/ťÔ”Lä{Í5*ғů)ËĹgCGŽ1ÇŐ{)sg6§ÇňC‚t~ĚrżŽş.° Ăůö^Đó\–/plşŰbž$Ž—řĚćň 3C8=+Čmó‚Ă˜뺨Ç%şłôÄ öⳒ×x/î\Ŕ\ŕ 8 d€X ̈ÍÉ@Ö—5‚\ab|BÓ ůăb ™l>×ؐifbj"žţżiâZ›ßě{Ć\ AŒ›k91Ř%#5ŕůˇ@ł.ňákڊАşiŰĘÍfÍçC‹ "Lň@h]`̀%°ŽŔ x? "Ŕ*ä '€T Ů lĹ ěťA58zpœmŕ<¸ ށ[ ÜO€Œ€×`|Óá Dƒä!UH 2€Ě dšA>P ECńʄňĄMP)TUCľPô+tş ݀ GĐ4˝ƒžÂ(˜ ÓaeX^ł`'؆WÂńpœÁŰŕ*¸>ˇÂ—á[đ=Xż†§PEB1Pj(# ĺ‚ňCE˘âPBÔzT ŞU‡jBu zPwP"Ôę ‹ŚĄ™h#´-Ú‚ć˘ÓĐëŃečjt=şݍžƒBO˘żc(%ŒĆĂƄcâ1٘bL%ć(Śss3‚ůˆĹbXŹÖM®Ŗa÷c›ąŘě0v ‡ĂÉă pv8?—+ĆíŝŔ] âFpŸń$ź*Ţ ďŽÄóń…řJüqüEü ~?M"hl~!—°p˜ĐA¸M!LĽ‰:D;b01‰¸‘XEl"^%>%ž'‘Hę$kR)‘T@Ş""]' ‘žŠd}˛ 9ŠœIŢF>Fî$?"ż§P(ÚGJ$%ƒ˛Ň@šByNů,A“0–`Kđ$6HÔH´J Jź‘$HjI:IŽ’Ě“Ź”<#y[rBŠ Ľ-ĺ"őZ/U#uNęÔ”4MÚTÚO:UşLú¸ô é1*ŽŞMuŁň¨EÔCÔ+ÔaŠŚAsĄqi›h‡iWi#t,]‡ÎŚ'ŃKé'é}ôIŞĚR™P™™™ 2"ŠĄÍ`3Rۧ÷_e•edceˇČ6ÉĘ~’S”s”‹•+‘k–ť'÷Už)ď&Ÿ,żSžMţ™ZA_!@![á€ÂU… Eş˘­"WąDń´âc%XI_)Pi­Ň!Ľ^Ľ)eeeň^ĺ+Ę* G•$• •‹*ăŞ4U{ŐDŐ ŐKŞŻ˜2L'f łŠŮ͜TSRóTËTŤUëS›V×QQ/ToVŚAÔ`iÄiThtiLjŞjújćk6j>Ö"hą´´öhőh}ŇÖŃÓŢŹÝŚ=Ś#§ĂÖÉÓiÔyŞKŃuĐMÓ­Ó˝Ť‡Őcé%ëí×ëׇő-ôôkôoŔ–‰ű  1†Ö†|Ă:ĂFd#'Ł,ŁFŁ!c†ąqĄq›ń›%šK"—ě\ҳ仉…IŠÉa“'ŚTS/ÓBÓÓwfúf\łłťćswó ćíćo—,]z`éC š…ŻĹf‹.‹o–V–BË&Ëq+MŤhŤ}VXt–?ŤŒuÝcíl˝ÁúźőK› ›Ó6ŮŮ&ۡ[Śł,vŮáeĂvęvťZ;‘=Ó>Úţ{‘ƒšÇĄÎᅣ†#Ďń¨ă¨“žS’Ó §7Î&ÎBççO.6.ë\:]QŽŽ%Ž}nTˇˇjˇçîęîńîî“k=:=1žŢž;=°•Ů\v{ŇËĘkWˇ7Ů;ČťÚű…žĐ§ĂöőňÝĺűtšÖrţň6?ŕÇöŰĺ÷Ě_Ç?Í˙ˇl€@MŔË@ÓŔüŔž ZĐę ăAƒƒˇ? Ń É é •  mýćV& _ž.üV„BDbD{$.24ňhäÔ ˇťWŒDYDGÝ_Šł2gĺU ŤRV]X-ššłúL4&:,úxô ǏSǙŠaÇ싙äşp÷p_óyźńXťŘňŘŃ8ť¸ň¸ąxťř]ńă  • ‰.‰Ő‰o“<“&}JöK>–<›–ŇœŠON=ǧň“ůÝkTÖ䏊˘4›´Ýi“BoáŃt(}ez{15˝™ş™?eeŮgŐd}ÎÍ>“#ĂĎéÍŐĎݒ;šçžwd-z-wmWžZţĆüĄuNëj×CëcÖwmĐŘP´a¤ŔŁ ~#qcňĆß M Ë ?l ŰÔQ¤\TP4ü“ÇOĹĹÂâ›m7üýsâĎ}[̡ěÝň˝„WrłÔ¤´˛tڌ[vsŤéÖŞ­łŰâśőmˇÜ~`vÇý;ëËĽËóʇwůîj­`V”T|Ř˝z÷ĘĽ•÷÷dîUůTľďŐÜťcďLuBő˝çšć}Jűśěű´Ÿˇđ€ăŚƒĘK~ý%ń—‡ľľ­uÚu•‡°‡˛˝<z¸çëHĂQ…ŁĽGżăŐÖw7X54W:ž˝nĚl?u˘˙¤ëÉö&ŁŚÚfFsé)p*óÔŤ_Ł˝Úűt×Ö™ŚłZg÷ľĐZJZĄÖÜÖÉś„6Q{DűŔ9Żs]ś-ż˙věźÚůš 2ś_$^,ş8{)ďŇT§ sârüĺáŽŐ]OŽ„_šŰĐÝwŐűęőkî׎ô8ő\şnwýü ›çn˛nśÝ˛źŐÚkŃŰňťĹď-}–}­ˇ­nˇ÷[÷w ,¸8č0xůŽëkwŮwoÝ[~oŕ~Čý‡˘ˆňŽ=JyôöqÖăé'O1OKžI=Ť|Žôźî˝?šE–˘ CŽC˝/‚^<ćżţ3ýϙ‘˘—”—•ŁŞŁ cfcçÇÝÇű_­x5ňZđzz˘ř_Ň˙Ú÷F÷ÍŮż˙ę Ÿy+|;űŽě˝üűc–~čšňŸzţ1őăô§’ĎňŸëż°žô| ű::=ƒ›ŠúŚ÷­ăť÷÷§łŠłłސ3çPHÇĹđî”Ä+ ž˜Ř9ď…ç" y˙ްŘÇĎyů˙äyż<o Ŕ‘NB đDĆdÔFFŞ#bKě`sóĹ QÄ-=ÎÜl ˛ą&Ÿggß+€ëŕ›pvvz˙ěěˇĂˆg@gÚźGű€Ľşš›YőĚöÍ-˙ąű7…čŞÍöě pHYs  šœ IDATxě €Ĺنż˝/ŘĺF. FÄ(*ńÄD…¨1^üjT˘bT4Œ1*Ţ&hLbÄűĆhˆńˆF‰ńÄ Ä+¨¨ ÷˝÷ő×[łßPŰ[3;3;łěΞ˝UőŐýtOĎŰŐŐ=őőőBG$@$@$@$@$Ěز1     P@ó8     8P@Ç‹YI€H€H€H€H€šÇ     ÄA€:XĚJ$@$@$@$@Đ<H€H€H€H€H ŮqämwY3Œkwf‡I€H€H€H ˜W%§íť’3ÚŰŘ(ŠÓŕĹ!   €C ˝‰í6+ )”ŁŠA   č€ÚްnSş…˘™Ë5:ŕ‹C&  hW^ÖіÄôvĐqŠć–ˆä–”mWG&;K$@$@$@ۉ@ÂŮô7ć˛Ű[Lo‡hŽEôƒg;Cl–H€H€H€HŔC ąKŮbşUtŒÂ9š Ž–ćŮ7o~_´‘    ÄO &ěT-´4[Ek éVĐ1çHB7’ÝałHŽĽ.ˇ^†I€H€H€H€â#ĐŹĐm¨.–|‘ňD˛ŰŞ[CH§\@7#ž}˘ÖgÓ]OZ´źZ}    ÔŠÝ`Üm9Ţ´ˆůS-˘S& “$œ#‰`×î†Ýŕ†cÉăćg˜H€H€H€H 1…­S›Ç ;YźúňúlśžT é”č8ĹłOÜmW߅ŤáhiČÓ\şÖCŸH€H€H€H 1ĹlCuŃŇ5M}íA0{ĐŒkٔ¤E˛k9ú$@$@$@$@É%IĐúěŃlnšÖŢmÁ¸Í—ě™č¤ čˆgWäjX}-L‹TŚ9ťŚÓ'   ˆ€W´š˘ąŘƒy"Ĺ]ťF›‹ŰQ$SD'M@Ç(žƒB׍kX} 6–p0_0îց´h.žźŃęa    ¤ P6>7ŻF™hq7ÍöŮ´ŃŇlžd‰č¤č$‰gWźúÂ>`¨]}…čŚ5gsÓ&   ˆ€+^ľd4››ć űl¨öHišÎͲŔh\8’` Ĺş…â˘×žž°Ú"ů:ô`şÚákšÚ‚qľÓ'   ˆ@Pă¨Mmęk oÎwëĐp°L°Nͧö°ßRÝ"A<ĹŠ†ƒq śxía žňHsësój¸štÍGŸH€H€H€::Ž‘8Ó÷ŮPŢľťůâľűę‚M[ŸľľDDgk­)ň]a k<š´ł™­SCŘxa‘­eaƒÓ¸ú‘l6ł“_ăôI€H€H€H€b#ĐD”šbjS5iX}­qÝ`Ť2[™Ůśš­Úlšćę:cśijGq_Ř&&óOÂ3Đ1Ě>ë Đ_ GóÝ4 皲]Ż˝öÚ=9äďď°ĂcssswB…t$@$@$@$@éA ˛˛rÉęŐŤ_5îĹ+Żźň}3Şufƒ †S!í ŤÍçťś`ń„×C'S@ŤčE"…3‘Řŕ4ü`Xă]Žťîşý~đƒü"''gTuuľÔŐŐiyú$@$@$@$@i@ 33SŒÖ“ššš÷ţţ÷żßlDô3Ź CS­łËG˛ÚvE˘kNX@'´„#Âě3:§â7–°Šg-Ł[í÷ß˙ď›5*ŁĘËËmĺüC$@$@$@$^0AjÄłdee=zôft˙3ŰfłŠř…6t˛‰Ú4ŘÝ<ͅQ.ě iY €ˇş- x›ĽqH1ʚWmA_óŔž[RR23Ďt$@$@$@$@éMBşk׎‡™QŢa6Ռ:hL´Ş@Vâȧ>ěÁ<°ŠÓźOČO†€vç ĂŚv×W{ĐÇ@öLsU0Đl°yŇôŞeëÖ­˛téRŮ´i“Í‹4sa!F„ËN;í$:u’ěělÁmŘ#š`K–,‘Í›7™iţP ”-..–AƒĹU'ŽŹĚYżyĚý|ś,Yő™T֔áöäĺĘŕ^ĂeŸ]“nĹ=%//Ďö5Z?#őŸv   hŻŒ.hú-¨‚98ó„úH×0|8M†mbźâĐFĐEVžŰZ×<đÝ0r¨-?˘3šŤ­­ĚP/_ž\ t!’{ôč!………V˜–•• „őźyóŹŕíׯŸ]ccnDŹVëüúëŻĂuvëŢ] Lď3¤ÜÖY*ď˝÷ž­ł˙ţÍ։>bʇ_̑ź˙˜t*.’ž}{J÷Ž;Im]­ŹŰ°R>YůŽźűĹkrÔwţOFŢO L{XDG$@$@$@…@Ăón:™ŠaŤŽ†ŔĚŞ=][IJМF´ŤĐŽ˜ĎMˆ[@ť…MX;ł†]ß kؚŰZfD”őşŞŞ*Yąb…Đ˝zőÝştébôƍe͚5bžě´yPIßž}í ŻˇBcDß|󍭷wď޶Ξ˝zęDÇ7nÜ$ŤMkLh3Ú}úô‰Z'fž?X4GžďéÖŻ“ě8h˝ó÷d˙]ž/ĺUĽňÚüżË‹_“ožZ+Ÿű€Ô›k­=wţ.ÖEę&í$@$@$@$Ž U877­ \ÁŹ4hSĄŒt ků˜ý¸t”Ůgíd´†‘'–MĹ3ň6+ KKKeýúőVŔbćłś˜$ݍ¨°}AÂK"†źXŇmfuBtCk™™VXŰ˜p—SgnžäçŘźXŇ­Îő›ÖČKó—.} Ľ÷ B)ęœ%[kW˒u˙3Ë8ĘĽŒ-Łé0Âđݰľ5ˇ„› ]ˆh„]‡:TějţhőŞw}”CâőŠŻů˘ŐY˜W(f˝tQ~Ąäńœkf ó2sLť ^*kk¤ÂlŐŚŻšY9˛9żF ŒŽV§í ˙   @úp5aPD#MĹ´+˜Ucş4\!íڑ×-ëŚ5NT@+Ö}7ŇtsĄŔŚq7 [łb „ŹŠhˆYhWě˘: źZvŸCyŹsVaŒ¸Šr´ƒşTŘ"ŒźHGݑ\ϒ>R[Y*ůŮš’gú\c6óbVŽÝ{5•’mśŠĚjŁFj+2¤g—>QëŒÔí$@$@$@$ĐÎ XhĆ âžęD׆|Ž f”q…˛Ć9q“€6˘ĹâÜ|ťĘťq_X…´BkV@ăÍx×3ނáŠgĐśQÓ}}đyQ&šŘуxg3ŢŢĄ"Z}ԇ˛*Čá#/ĘDŤłˇ]dáÚ9bomŢb„tavÓš¨R23Ě:í†ă˘Öüđâć5˛sďD­Óä   H?Ş12Ě*ŽĄ!Ⴞ ĺPjčŻ[FĂnzŁ04ŻŃvÍć‹I@7Şši$Řyť9aSťëŤžŠg7œŠ3˝nen?˜‚_ÄkërssíL4ôžj~Ě Ł`䁐ĆkěTPťuiéx4ÄśŠh­yF}ŕťeËűë‚Č­Ż;uŮMVly_V/Ű"Cw)’œLó ĄŮ˛30]oÂu’›i~Ć#+—Ž•‚ÜŮŠëŠ*çϘë~ĄO$@$@$Đa¨.„Ż‚a‰hF¤š>ěša87ÝÍJMŕo"€S?küiî†T7î†]@°ťńf4f}‹ŠŠŹŕĹ,0~‰ĐĐ:+ŒYbm¤ă‡R˘]\   D~ˆr”A~WD# ĄźîŤó0Ř Ť,Ť—‘}ÇÉ'kž—ľĚRŽyR›i–4Üu0?F(ľ5ő˛fůVŮ´śLöě7^*ËŞ8É8   @G =¨‚Ůő!€5Žz<†SŠ…ţľŚĄŒć”Gó6ňЍ*p"ÚqÇdƒžÁi^ő>6Řm8šĐ5yěŹ/,–eŕ]̘ĆŹ4Ö9CđBŘBčB #fŸ1ƒÉĄä…ĐĆëéPD:ę„CyϨ"łŰŃęDĹ=ĺŰ˝ĆÉ˘ĺłĽŞŹĆź~ŻXŠ MŸŒ/-Ż0ýß,Ť×—Ęn;Œ—Î=esőć¨uFę?í$@$@$@$ĐÎ ¨&„°UцAžjHřŽVťOk^S¤e.Q­ÓÖÝ8Âw}ľŤúšÖěhlĚ.C@céĹÖ­[í˛ WěBHc4D.ňÂéĚ´ţ¸uBă˝Ńřń„átË6ŽľNˆřââňݝ&ʢUóäŤ/—Qž úYjŞsĽsÎP9pđ^˛uSŠüh+Z?‘NG$@$@$@iH ŹÍŘtŮô"œúČŁiŽ=š FYW\㨧Y׏€6âS;éŤ,˜ćĆÖ e5Mm껀‚śfHCđâçˇ+++­Ćťžő­˜M†âU×=cHÍÍlťub ‡ŻNŹާNˆaôł×JF˜Ľ!ű…ţ3Ô˙ŤżYcgź‘W×YcŒt$@$@$@$Ё¸šPą fő5|ÍŁ>PŠ=öĹałÚ×č@WdkRŘoV@‡s†čHĐiçƒv7Žybń]AÝě ´Űfƒ!DáT÷ëřámnŮHád× Aqźzőjť<ÄmWg›ľŻwó0L$@$@$@€ô  eř*ŒŁiI`Az4ń‹t¸`žćʅJ5üW@7*!â Y´ŁÁ°×2*žĂqŔČ‹Óüęťe|67=RXËŠďćóŮÜt_XË@LGrš'R:í$@$@$@$ĆšhB3VŃśŤ/5Ž˘in^¤kÂ-vÉĐž¨ÍőŽełŕfΜŮâA˛    vEZ1ÚĚ3ăęIlŽxv…łŚiބ}ŹńˆZë@œ v} 6wsŻŽ´éo#]ĂęďbŢŹńc§#   č şwď~‚ęłá!Aܲwý`ńŕ‹ v ŤoLa;°ÊgĺÂáPRăżÉœÖšUD#ŽaőŐŚžÚƒžŠmŘéH€H€H€H€:h@čA8ˆŕ VÔ8ŇU/ŞMăÁny“â´c‰TŚlŽŹvů4Źe}qMCţ–ôĺéH€H€H€H€ÚŐ€Ş ]ŁńĹu”HkÎiůćňyÓľsŢĀQ;Ł~ ŮF5-Ř)ť> ¸ńHa_;´‘    ¤/HşĐľcôn\ĂJō#Éišú‘ň…íńčp!O Rƒ‘ěZ…ŚĂ×Mű_Ó5?}    ô' ԄŞ1úć4b¤ôHö¸ˆjÇâ*!łvH}͆¸Ú4Ź>ňĂŽ-™ýC˝t$@$@$@$@mŸ€N¤ş˝ęFťů4ŹŁÔ¸újOŘOĽ@E'ݎÚŽv7î† ’    ´KŽtĂŒGX]0ěĆ5ORüD´vHýX;ƒüž2j÷ůąÖÍ|$@$@$@$@éAŔ§ Őa${0ŸG8őCą˙Śú5vÚ ßŔÔŚWe‚iZ}    ô'ŕӂŞ}i ˘v—Ž–qm-GüˆJ¤ĆšëX0]㎠#Ž[¤vi'   HOŞ]#Ő¸†]a8ä‰ćšK—ć4pT­eOš; MvPăę#Ÿ†áëćÚŚ#   čXbшn—ŽÚŐćjLľ%ě'S@7× ˆúČŻáŕ \{ső2H€H€H€H ˝ř´ Ť5ŁÖ°ú)'‘J­ƒPß lşšv„ŐŽ~0q    ô& :PýŕhŐ?čÔŚ~0˝ĹńxtŹ ć Ćݎ#͡šy&   čx|ą9]éRŠ–7‘|śLKŢÂávČ ťqĂČŁůÔwӃa70-îxee<úř'2çíĺ˛vmšÔ××K]]h3Aëę%‚˝lHB{ŃíőőurČÁ_*úI$°qăFéŇĽKkdU @ŽŠ;Č6ůlÉ4ůLQ#š&Ÿ+ôTçΝe—]v‘1cĆHnnn˛‰UŞZ‹'żŤÜ4Wż[" ăj(BfwКEhšÚö!žĎ>˙Ÿ2|xO™rőáŇ{‡bÉÎÎÄ–’n%ى.N¸ÁPđËŤeˇÁ=B# zʔö„ř,^źX† "z=>œČ5„"AäÚp$%Č/Úń¸ř ł–nŮňxMÍńJŽ-ă ąěşĐddŹ[ˇNţőŻɃ>(§Ÿ~z*D´~şĐź†ŐwťÔjáXt<Œ'Ż;P” – ĆÝü1‡ďš˙#ŠĚϕS& yF8—ÖÔKfm˝ĐŘ֏ ĐęÇJ“4Úזֆh>L!ŁaI;œ„8Ô×Ő%T.ÄŢý›Xűn ĄpzÔCŽşg“ż?É6ůlÉ4ůLń˝DŽ-ăjÎŽĽ!233ĽGĎr 'ČŁ=&˙ţ÷żĺ{ßűž6ÔÍšń ÍMާň6žRđÔŤ€ömÖävÖ Ł`0Ţle‰f¨3b䅗˄ •ŠęzŠŽ­3;3Ďľ!ńlz˘sĎn§\r´‡čť6”×JmmƒˆNt簜—@Ma M—TäšTœ*#ŰF8’!Ó¤`lR š6AŇ"ƒ;#đÁ$÷ßżŒ;Ö ëU{aWž ”Gؕtą×ÚLÎT h4í"ؤEKćO(‘W^›%˝ű”H…™yÎÉ2rŮŹ}Ćň \9…:`â ŐŢq •U™+yď,sűf˘YYYŰm őćřL6ۚš{2ĂLA2]uuľY•m?OÉŹ7uĽ‚k*úŹ3Uű.ŘNKâ­Ĺvٲe˛Ă;H^^^“îb˛ŽÇtp­Ĺ4VVřŹçääĚ˝Íćkk\“j{'ôť >6<żƒă߼Éţžń°‚tĂI GKóTŸŠľĎ4>ŞĐó`z0ßčLîňňrYşąNĘjD*€Ž3;3ІwH@‡„´Żâ7^yN6Ź[Ý(iב{ˀAC弿=&‡yœt.NÍĂ^‹üOć0ל]PP$}ě$ßŢcŸ6#Tp1Rg$„Mי‘íŐ5ŐvÔ+/ż"}úô‘QŁFɁhrűóoű™gž)ĹĹĹrÇďďˆy\Ém_¤vž|ňIŮZş5bţ“NćîOcŻů}őŁp˛ěńrEżž{î9Yťfmxlŕ¸ÝmÄnIëWsă?~źÝwSŚNąýh.żvśľ¸˘?Édű­Ąß’'B~řÆŚýĎÜ˙Čy?=ϊăN:ÉěŮłí0Ý1Θ1Cîžűnyď˝÷źÇ8 ¸ů˙÷ż˙59>÷ÝgßFçX7żr ֓*{"L!˘^ý׍ňňË/‡Ďąc#M˜Ć3ś5kÖČ Aƒdîťse×áťşCnÄTśnÝ*OţĺIÍÉΑ޽{Ëţűď/Řwń´‹ ’?™\Ńżśňy7~œŒ9`Œ=ÇŁ_ę’ÍĎě&Ίg$4¤!필 ŽĆâ¸C>ś`o4˝![j˝d h_烜`\G¨vřÖ´„}\eäĺą—a—pŕ`ʂˆś3Đh&ňěóCźŮœxĘeřî{…ŰďŢťżtíŮWúÓ-2bÔÉ/* §!€˝éëźkÇÁľäóů˛CżRĐŠł7˙œ×^‘‡ţxƒŒ9ühYśč3YôŮGF°/żźĺo~ˇ~ˇCОăbWňpúuŰőŮO>édű ÁąÇ+óçϗyóćYa ĺb­'•ůí‰Ŕě;Ka÷ŚśśÍOu?q‚§ý>ř@6lŘ`;ń°zőj9ꨣÂ>ćčcěĚƆşŐšăxüńÇ­0šűȘ÷g¸ž@˝jǗřM7Ý$G}´|öŮgňŃGɏ~ô#Đń9ˇ?nz˛ěńrEn˝ĺV)++łl´O}űö•oűŰńsŠáxÚ˛e‹`–uˇÝv ×ď“čC˛x$łžd˛ĹĹő-ˇÜ"ßýîwíĹ,ĆüЃŮ5•ÓŚMCT6mÚć„8Ƣœ"ăȧůă9>“ÉJűŕúžúaé[şľ´ Smß×öňĺËí âŽ;îhłm( Î!Z|ˇ‰…Ž„vŞiܗg[îBÉĐ t!őE2słeíć2éTc„łŮf ´ů¸o[ÂѸ°Ăá”1ꀱröĽĄ“śÚą_~ů{ Tۇmvó'TP&7?r¨˝şŞBÎ:f´ÜţřŤ2ÜĚhŤÝÍmZŇľ‡ü|ڟm?Ÿ{âůă żIWÜ(Ĺ]şŰÝüný­a݊s™ž|ţç?˙i…nÁŞÓąkź­řŰł_h;žöŻ˝öÚ0ś)SŚČţóšóÎ;Ă67ŠŢűîťĎf‹”îÖ Gëo=äOú“-rď˝÷Ęĺ—_.7Üpƒtď:†ƒuĽ2­ŸŃÚĹZžëŽťŽQ–D85Ş B3Ţ×\s|ňÉ'Mr¤ŞÍ& %`H&[4˙ńÇŰ^č˜ßyç9çœsŸ 'ÍŤ~,ĂhKÇg°żń2vŽĹ˘ Ó`{nüâ‹/śoşţúë­Y™ĆÚ'Í˙‹_üBžóďČŞUŤd×]w•§Ÿ~Z~üăťMľz8Ö1hǢqŐ<­í÷Űž˛wmŠ ŰKŤ†I´ ”üüüT6Ůfęn|/ľÍt+šÉĚ˖•›jdsE­l4Űó\ŠYĂ[^e–vT×I963Ł ż˘!^fŇ bk̟ }őÚľrƑ#ĺ‹Ĺ mţ5ćjűŒ#ö9Żż"?;ĺp™rýżďΑË&-?ܡżüߥĂäsAý—MüŕľŸfëŮZ^ըݲŞZű°Ł9Ăöž†JYƒśtÉbٸyŤÜ2ĺ§rÖŃűȉc†Čőż8K6™íç7+Wʕç$Ǎ çˇżŰ ]͏8DřE]d÷Ɇőë-Wˆ_źë3°Ó§Oˇű´ÎĚ:h=ęŁ;ÓcöšÚđj>ŹŁ\źhQŘŚiÚŽĆŐOŚ=Žŕ†§öľ?ęŁ_?6{H[dƈcwPś3Ď8Cîšçžp]`üĂřg Œßxă ůŐŻ~%+Ígeń%‰˛îžűś!Řw¸HŇžhýhĂľľŚ=™l×5|n?˙üs;<Ůƒc\°Ü(Č c×co8Č<ČVö|ŕ‚źšl•١ŽOě;œ#pÎŮwß}ečĐĄVźcY‚ćĹëşÜóƤš˘T§ IDATI“ěE–2÷Ď´]­CýHöx™şçX­[ý Óɓ'ËćxÄw ÚnjńĄ‡*¸›uóÍ7Ë믿.<ňˆĺ‹ÔˇÖ,ĺđKƒcĐgIpn@ÖĹvëÖÍN (ŰŃśČűjśHC?Đ7,Á9˙xsG ŹuœęűăړÉíDÚ×8~î¸ăŽF}ťä’Kě¸ćƁsÎ'7™ó5Žc\Äëg>ŇţŃóĘŕbĹ-‡rUFđŁĺwó…óšý\‡‡ß_UYŐatǘ6z]U–,X]-ů9™f ´y튙ŚĹ‡ż sÇ6dV{ˆ™¨ś˘ň‹e+ä…˝míŮyůŇgСĽtSšŹXśX>YQ*kłŤd+â_.–?Ý4U;}ŠôűÖîňъ*šűĆŠ˛Ű˜cäGżš)V%KśäËWU2îç3äÓSGČQçÝ*}†Ž”OVămćś}Cť&"+6›ŃĚnŁžň˛-ň×{~/şö–ÍECĺßTHń}夯0cȔ;z <őˇçeˇĆŰ~Ţ{ůévßYż}Qr ;Ëłż˙š|múűĄŠ ăşʙҥ÷ŽňłűçÉGŻ>-żŸö ™üÇ×ŃŹuÇúpqűÓ` Űż\Wi×8ĄL,'Ď .¸@.4bá7ß´_€°Š›h„í€ŹŘ5k–\qĹňĘ+ŻŘä3̺䯞úJ ţđ’öĽK—J™Y_őÍ7ßŘu’řňÂSżsçΜ rÍF'žx˘ŕ _źçž{Ž\xᅂ/˙űż˙“gžyF°ŒëúN0ů Ď:ë,y˙ý÷mˇčQ˙örh;ŃöqBƒŔú3×ÁöŔȸqă䡇’[o˝Unűío­ C>đĹʼnś‹8řƒíłĎ>+™ćöëýŚßp|j8>q!˙óŸ˙Ü>uŘa‡ŮőđčÚ8ůä“íyĺüóϗO?ýԆ!@ußF;Ÿš}ˆŽ—i´sl).Ξ˙ýďËMF,ƒ%ΛX6„‹\Ěăb“ —^zŠ]răîsőKƒăŔšk¸ ł|m?f^m†‹I,ËŁhlOŠŔ<đšĂ>#¸€ůŮĎ~&w›%ađcuÉäŠ6#ík\ěa’*xiÁz3 ń裏ÚWź}ńĹQǁs.qź?óžý$Yš…’•×Yv;AŠşš§Ń;u—ŢFÔ˝ŕ}[ĎęKdéÇoËčž']ú ‘Â’^2âm{ךËä‹^7ý<\6ŽY%}vŮKÖ|š@6š‡%Ńnh솏ĂÁgĎHŕmĹ`81ŕ‘ú€Ö|žiD5ž¤0ű†[~˜} WÓpB:~áhçwśăČŔ‰ 'OĚp N<̆“‡ë°Ź']̚âKâĂ?´ÉęX—‡/AˆĚjŕĞŽ_8Xîd|Ů+‡Hă=ňČ#-›Áƒ[“?föđŕ'xá–:řGs؇xlĈ˛dÉ+ŘUPF+זŇp—K8°ýůĎś]‹őŘkn.cŰz`Š%.ŠęâÝwZŽ­ű>śÁ>㳍§ůÁ\˘qBÖŘcćkď!ä,XŹ2t|âĄWœ3pÁ‡ĺ¸hÂě,–!`ś"ůöÚkŻFç =gůÎgá†SˆtŽ 6׳gO{Ç ďꍯśç‚+ŻźŇf+**˛ŒqąŢîO"KƒőkuŽ9Ň~vp1ƒsGK؂=úĄ}‡ yĚH§ÚEâm_ăá_ÜĹP¸§žzJFmgÎcG¤Ď|´ýŠLŞů@<[Ńߜżpě@{ĽťKëhě@ĚBdĺu“\łî9ĎnYćä—!YF fءq˜]l5@c!€žČö8ô7éÚđq{Mn[^n–ä›pMN(ŢŁO?É7łÝęNţĺŸĺݎ](wœ5J8ţ9üŒ_JNnži;”'ĺü(‡úÍ!(9ٙćĹb9üô+¤KŻţŇŁßÓßĐőn‹˝ňĐ ňŃk“âî;Čęe ¤˙Î{ŘşŞś„Ţ0x×˝ÂuŁ.<)ŒžVl\fdÎ_ď4ă Őˇăđ˝Ľtí—ŇÓô?č´?A{A.fňCĺƒiŃâ řc6x„ v]ftŕ°VVëėNN˜Q…ƒ¸Ő4k0žţúk+ŠńĽŠ'k̞ ŻćÇ-X #/ö+â_šAˆj|ŞCšŚŤ­ľ}ˇďńśžĂéxÝňřŇQťŽQÓ8ňǍ'çÝtěˆa×ć+§m˘>ˆ@Ěnav[…¸Śˇś~űKpˇ_ţŽkîŘs÷ƒś [sŒ‘7˜í6ˇďÜžmp2Ů*/ˇÎ ;'äÁ,ŹŽŻWáçÖă˛AţHÇ'nEă. –/@D/\¸Đ^˘.7j÷źăö/ÚůĚ}ţĂí‹/ŠßžźŽÍwŽE]pn8CäcYîŕA˜ŠsÇŁĺŕG:—j9őQç ˆ\żZKŮâÎÖVŤĂů[ǧśhžË Zž`šk´}‹8Ě ă-I˜yÇ,<„8ÚGšćĆí3Ü?Ú×he4OK}+–*ąałŤĄ/̉K2€† ß/Đ^¸řÄ÷HşşmĘ! Gˆ'UqňËĚϐ#–ss˛¤ŔˆÖ,Î21^gšňCaěxota^–k6:t2Âr¤ŐşqS?Ž%¸ÂÉä۟•Eďż)÷ýę4éŐoG9đ¸s¤ÚHh8úB'ż5âQĐ9Y™’WP(#÷6[embŻĄŻ˝ű´ő›8U†ď{Řśş‚r‡kč(bţzěůŮ†Ł™˝MÄá ë¸ ’ńÖ+8œ>ř`Ö?XŽ‡ŮźbÍuxZ_p8!é 3×ř’Bßô¤ _űŠ|ÇLöK/˝NÓş‘GóŤ­5ý–´Ż,‚ýwǍą §ů|éĘÉf4Ŕ Ÿ)-;N–Á|švĚ6aśť-¸D¸˘ŒŻ\sǞËaˆź9ÂedFHSˇ|0âpnk؎|ŒšëĘřʁœË q7ŻlnĺŹuÁÁéřÄĹpƒź9k†š`ŔřsdÇAťČ°Q‡Čżű”­[aËdԘľŃŐ!.úě'řoŹfppť3Ę(ƒYbœ pĹľÁW´i<˜Œ#xáM*Xó‰[“X §u}_npOľĹÂVó&â'Â5Ňřš;ö0㎥*¸@ÄÚG,3Ňc[űîăƒĎ–1a}~´|‘ú…2zLÂ×:|ŹńVMoПLśčKp|Áx28ŮFĚßŘq÷kŇ!đl–á\ƒź‡š BœŸp Ďŕů ÜÍÂů éčžŐđĎ|mE˛ĹË4Ú9m¸ q|ᙏ%Ćťłń!Ţţ˘}Á‚LJ[^ë Ú´źŚťq ˇ„-^ƒ‰őžč7|ԉ;Zw,~2š6ˇŻńî}ÜÁs6xţďEF›‡ÝYć;—u¤ýăćAY7Ëů5–ď.đ nYfÂĎĺŠĎ ´—öÁv$ ˙¤ľ€Ć-<|‰ĺćńˆŮgˆćąl`HHçHa>DŹIƒ¨śöP>+  Ú!¸áě”1emÜ´ş4˙Cן+—Ń_Ś7\Jşő’ĂO8ÇŚ!ĎŃ/—YźJŽ9uT8AC]čK.–]˜ăßíě(ű˝“*[6Ź–‹ßAfţîR9ô¸łä‘yŻś Üţk~mWÇ;Řá C7ý@i\}ľă WăX‹u`>ř }Ęyąśű ˇűđcŘđŽhMĂI3$˜ĹÉWšĂ‡—ťîşK°.łřbĂűąŚYŰĹ~AXűŁ'$ÄŃ6žüˇ&1ƒ5ÔČŁůľ˙íołÂQířâ9ć˜cěňŔa‰|ZFín?4MëѸćŐ¸/]óřęÓ––Wߡ–‡Më×p¤ü°ă ˇź>ř`{KˇľœÖŁĺľ MGţ '<ÜŠm!D:ŘÂ÷ŐŻm MëUߗßÍçK÷է܂ůqěá˜ő{¨œđ>Ž-ďx ëď•ň¸a­yqœëZFŘÝ|ÚÇh\]nȏ ŹqĄŠqŸĘm¨]}íĆՏf%ŰV$ś¨Gǧů]°afÓĺ„2ȧýđŐăŚůň#őă• 2qžÁ:^<¸…[ńXťŠ5ŮO<ń„=.ń\–)༆% Z´óę×qi~m׾Ăn\ËÁŚvß9ł˝zŽUŚđ!žń6 œ3q›K8đěîčĄn̚BpáyĚTÌ徯ş˙´/j×ţóŤ}âĉaśřa'´ś8>•-Řă- Aś˜Ý‡ď­Çň;ôß.‡HýQťö#Ř_Mڛăm_ŁŽ“N:É+8†´ćĆáď(Üěd˙Ż.˜ĚÍ9\‘ă6Â9OWËQű ’ž] ͒‰lshžTLÍ1f˛P-ę#“ŽZĽ†ţ&b/ŰşĹĆڍÓz*͏´T•—IçŽ ďu6âiwóú5RÜ­§­vó†ľŇФ›=‘hýÚŢôKO‘-×ÉU÷źŘ¨ţňŇ­RY^*]{ônd×rÁz\űŇŻVÉ™ŁšţœŽćńů˝XG‹V¤ľ€xÚł;Xzt¸MŠ,n•şÇ0f|ńp‰ť.ŃÍ-Ź3K=mÁáŔXcŮVfđţ\œLۓK×ćŽ=[8ŢăýE.|šAá‹¨=¸T°eܩ愋ëph bç ×áîD*Ţţaăşhç37Ÿ/œÓXÎąžś"Ů ˘ƒĎBDĘŻ˝ĽlqÂň][kűŠâščžNto*÷O,R>xë_2wö3ň›űž1'šPW´?XJbJ:FôôSókýˆQ…Ť8סžő­¨% ŽƒY č™Ć]_׺śXĂřRlK'žś,NńšżöčRĹ5Úą—čąĺť€lËĚSĹśš1§š“ť~Óm ł‰x†3Ś3gδÂ3ÁĎm´óYscK„i,çŘćÚuÓąŒ%UŽĽl=ĽŠk˘ű:Ńq`ż¤r˙IJß]mŠah,żŒô=K˝í%OÚ hťgĂÍ{lGH‰Ń˛F÷™7\m6Ě#ŘQ4ˆĆđ,´Ť ‘ŚŽŘ÷łŻ|řöňżšŻHď~;ȟ_zCvů°ŔśĂiá¸JJ2ÍŹZÚ>şç[ŐÇ >ŢËVí`;mŒ\Sˇă:[Ěňâa0ü<=îrqÄ‚e Xó™Lב˜*ˇÖ`Űš*ßdú*˜]wg°ç͛g—Sb:]Ú+ |Xúç—IőJłĆwÄóŠŁĐŹsŚšűŹ3Ϙ ‹ç4ŘŰq`KĽëb&mY.‘Ę>ĽKÝŕJśÉߛäš|ŚZcGc‹g'Rí:Sĺ™jś•ŤňMŚńŹő"Œ§!œĄ˝ŇÝĽýqK ;á!‰ŮËߗQß'wČŮӖŮć˘#¸°ĽU˛|ˆîšmňrM>S­‘l•Dň|2MKˇ&rui$'ŒˇkᕳĎ?˙ź˝3ƒ‡pƒË™’ÓRŰŞ%­4ކđ$ÖááźrčŮ;ŽľWIîUSŰÚ%í§7śŸŽ˛§$@$@$@) … ďLJւć‚ĆJw•ÖZ_"‚ŮźĘšçžkßšqăFťN'ÇŤ$   C ÔâA[,݀öÂÄŞÁŇDZ hw§aGâÁ,\éՑ›Î0    @|T(Ť_éö›ťĂhÝEşƒŐW;}    ˆ…@ă7ÂÇR‚yH€H€H€H€H  €îŔ;ŸC'   ˆŸtüĚX‚H€H€H€H  €îŔ;ŸC'   ˆŸtüĚX‚H€H€H€H  €îŔ;ŸC'   ˆŸtüĚX‚H€H€H€H  €îŔ;ŸC'   ˆŸtüĚX‚H€H€H€H  €îŔ;ŸC'   ˆŸtüĚX‚H€H€H€H  €îŔ;ŸC'   ˆŸtüĚX‚H€H€H€H  €îŔ;ŸC'   ˆŸ@Z čúúúř‰$X˘˘˘Bžúę+)++K°†äĂŘ7oޜÜJY    Ä@ 55X ÝIz–ě¤×؆*ĚČČHyoÖŻ_/Ó§O—+VHßž}eéŇĽRSS#=öXĘŰö5ë­ˇĘgŸ}&tLš4ɗ6   HÖĐ`)ë| §ľ€Žaü-Î2mÚ40`€\}őՒ™šĐ‡¨Ţ^.''GÎ:ë,yĺ•W¤źź|{uƒí’   @ÚHë%ŠŢk˜ĺ?žŒ?>,žŃfˇnÝlÓ˖-“Ë.ťLfΜ)&LŞŞ*;S}ĹWșgžig‡ç͛góâVÇgœ˝~řĄ@œŤűéO*łgϖsÎ9G&Ož,sçÎŐ¤F>4fÂéH€H€H€H€RC€ş\ąćbyȐ!ŢZŞŤŤĺÓO?•źź}"ÖzňÉ'Ëu×]'Ď?˙ź} đěłĎ–ŹŹ,›K4.żür>ôĐCĺÝwßmT–@Źcéƅ^Ř(M#›6m’ŠS§Ú™qŹ‘ţřăĺŞŤŽ’^˝ziú$@$@$@$@- Ą°ůę0Q_¤ěóa n˜ŃĆť†]Jqő!ŕ‡›njnfdˇ­‡0âq .´o¤POŮxóâ•qk׎•ž={J~~~łĹ1ó\RRŇčí(„÷86)ÜqÇÉ]wÝ%ĹĹĹv=5ÖTӑ   @[#P[[k' ‡šp×Ě3dg›ÂxH oL¨1[­ł!ŽvřHs}„Ý żŹ§q„}›1[{Ř79â/ňQ…S–gŕ}ĐąşŽ]ťzłúÄł›1qîćg˜H€H€H€H š( #đÄkă°ć¸­üÉ駟nß9ë;" ‹f   h–&(˝{÷n6oGĚ@íŮëŤWŻ–E‹ٵȝ;wn˛ĚÂS$ĺŚvŘ!ĺm°   Ŕ3TxC´Vóň9ŞŚÇtS&vÝÖ2c2Öo[ îÉL    ¤,ýĹkwńb‚+VP@{ö-´ s—.]¤¨¨¨MĚ>{şH    ¤ŒfĄĄ‡ÚĘR֔ 4ÁŠ) =ŕđă&xX?‚ÂŮg šH€H€H€Қ4´űăoi=ŕ8‡WČŃŕçľńę;ŠçFI€H€H€:h h!h"şŚ( ›2Ą…H€H€H€H€"Hkĺýׁ0H€H€H€H eŇ]ƒĽľ€ćŒ–ü,M$@$@$@‰Hw –Ö:‘Ž2é~Ք(–#  čX¨‰üű›oáđpI÷ŤŚŕkĚŻĂWÖÔKi•H•ů5ůšÚˆ?ý,Ę8   @;!•!šY"Eš"yŮ’Ă4jGÓDąîJ čXIĽi>ˆçŇĘzŮP^/ëĘCášúŒ4-‡E$@$@—@vFĺeH÷‘ŽfC8Ýq‰E9td6"3ĎÎK7ˆŹŢR'eŐ6g ;ÄÎç I€H€:ÂœzŮÔ9Sv2#ĎÎŞ—ě\Nš%rP@'B-Ę`ŮfŸ!ž—~š\r2ë%G*Â#ÄOyâ=ľľfŞÚk„ájkÍZÁ;"ˇýŘLůéĎ:kű#4x ťşP=Ů ĺBőŕśP­ůĽŁ:Sˇ Z‡ŸNG´°ë›6‚ëł°šíóxăÚ¨7‘F  ¸ xÎŃÍŐĄżxç]*ĺ<]S]-™ć;)ł!O¤ďmß[řžÂ× ž/°Ąmír]}äŕ;Č8͋şő{öxž›Ż§őżk3 dM!ĐżŻ”ägJ'#žąœƒ.~Đń3KŤXóŒ%˜yîQ’/Cvč,}‹y5šV;™ƒ!  C`ĹćzYźr‹ýÎÇwU-żď=0( %—&ĺđŔ`hÍs˝të”##‡ô’KŇdt   €řxŮ&ٰľB6š›Ęřî˝4€"ZůÄăS@ÇC+Íóâ6UA^÷>Í÷3‡G$@$Đ1 `™¤]’‚U™t-"@Ý"|íŁđşuë¤{÷î1u67'Ë,Aΰßý2f"  vAŔťÎź]ôźíurŰS^mŻoí˛Gp€<÷ÜsŰ˝ďŤV­’óĎ?_ößšüňˡ{Ř   HĐípO._ž\†.Őć äHލ¨H.˝ôR9ýôÓílr¤|´“    ÄG€:>^qĺž˙ţűĺ†n|PÌ#§vš@üÂ-Y˛DŽ<ňHyűíˇ­żĎ>űČ}÷ÝŽ˙Ž;î;ďź3żçž{ä–[nąńsĎ=WŞŞŞäˆ#ސ_˙ú×áőÔS6;đ… eć̙rÓM7 Dńő×_/(ˇvíZÁÚeuëׯˇ6ħM›f͏<ňˆeÖ<ôI€H€H€H€RO€:ŌwÜqGšůć›eذa˛ß~űÉ'Ÿ|nOÂŢzë­˛űîťËĉĽ˙ţ2gΜpz¤@׎]mR=¤sçΑ˛ŃN$@$@$@$Đ)€ęV9`Ŕ€đ/äĺää¸IvWL | IDATy…k(8uęT™­—p´ÄDÚÁ łűC)‰ÔÁ2$@$@$@$@­O€şő™Ű1łˆçůóç'żâX#tÜ鑆ܧO+ óóó#eĄH€H€H ¨¨¨őëסÓޡ­nS@ˇ­ýą]{“““cgŸąŒƒŽH€H€H ˝ÔŐŐ žëéZN ­´žT˝ĺ˜Úg 555˛bĹ ŮqÇc@ff&×@ÇL‹I€H€H ýh.SéŽÁŇú&­y čsŔČsĎ=§ŃíćO:Uƍ'żţőŻĺˆ#ސYłfmˇž°a   ŽE`{h°Ö$œÖ3Љ‚lëWM˗/—ącÇĘG}ńVĚ\ XÓ 7gΙř Œ3FN;í4ř…[˛d‰yä‘ňöŰo[Ÿ}ö‘űîť/Üĺ;î¸CîźóÎpüž{î‘[nšĹĆĎ=÷\űĚ,c†ŮçT<# á 6HYY™/+m$@$@$@$ŕ%,Mä­ź) S¸ó Zątâă?–3fď?őÔSśEźJfá…2sćLšéŚ›˘řú믡BÖŽ]+ëÖ­ ÷OÍÂ7mÚ4ë?ňČ#r饗Úp´?O>ů¤@ wďŢ=Z6Ś‘    Ä@€K8b€Ô’,x€ďć›o<œˇß~űY1­őeeeÉ­ˇŢj—aěžűîňĐCŮĺGu”fńú]ťvľö=zD\ÂĄ_|ńEyá…ÂÂ]íôI€H€H€H€#@ˇ˜K 0ŔŠgž:ˇE\~ÄłŇÉrŻżţş]BňđĂ Ä6    @Ë p GË&­Ź‹5jT¸>,ůPˇyóf ĆäţůçvyÇÝwß×kěbŞœ™H€H€H€H  €ŢŽ;ďi~ď˝÷l>řŕYľjUX@céǂ yžyć™FŻĄĂZfüŘɢE‹"örČ!ҡo_ٲe‹Ý\Aą H€H€H€H€˘ €ŽŠ'ľ‰Xń6Ž &Ȕ)S$//Ď6ŠuĐkÖŹ‘=öŘC^~ůe›Ž˝),,”SO=ŐnżýíoŐÜȟ;wŽ]÷Œňşa†›ŽH€H€H€H e¸şeüš”~óÍ7ĂśK.š$F`ҤIâĐÓ§O—M›6I~~~X<#fŽgϞmgŽ;wîܨ"řĄźŰYw0Ăâŋƒ&ĆI€H€H€H€’@€: [ZEIIIÄ*|âY3k>    @+ŕŽVl3ĚîĽÓ'   h›( ˇÓ~ÁĚ2~Ž›ŽH€H€H€H } €n_ű‹˝%   ŘÎ( ˇó`ó$@$@$@$@í‹"l_ű+Ľ˝­ŻŻź+šď‹N)fVN$@$@ۅžçąŃľœtËŚM UUU˛|ůrűóâř™ńT;ýł­ÄI“aâě´$*‰Ä}2Lœ–$C%‘¸O†ÍłĂ÷<6ş–Hk­Ś–cę5 2Ä´śśśc ˜Ł$  Dż?ĄßőŠvşk°´^Ý3›Š>Y?    ´7éŽÁŇZ@'z°ĽűUS˘\XŽH€H€H c &ňďo h—tżjň ™&   hB€š¨ k €ösĄ•H€H€H€H€ź( ˝Xh$    ? h?ZI€H€H€H€HŔK€ڋ…F    đ €ösĄ•H€H€H€H€ź( ˝Xh$    ? h?ZI€H€H€H€HŔK€ڋ…F    đ €ösĄ•H€H€H€H€ź( ˝Xh$    ? h?ZI€H€H€H€HŔK€ڋ…F    đ €ösĄ•H€H€H€H€ź( ˝Xh$    ?´ĐőőőţQÓJ$@$@$@$2éŽÁŇZ@gdd¤ěŔ`Ĺ$@$@$@$@~éŽÁŇZ@űwióÖtżjjžs   €5‘˙( €öpI÷Ť&ϐi"   &¨‰š ą h?ZI€H€H€H€HŔK€ڋ…F    đ €ösĄ•H€H€H€H€ź( ˝Xh$    ? h?ZI€H€H€H€HŔK€ڋ…F    đ €ösĄ•H€H€H€H€ź( ˝Xh$    ? h?ZI€H€H€H€HŔK€ڋ…F    đ €ösĄ•H€H€H€H€ź( ˝Xh$    ? h?ZI€H€H€H€HŔK€ڋ…F    đHk]__ď5­$@$@$@$@)#î,­tFFFĘ VL$@$@$@$ŕ'î,­´—6oM÷ŤŚć 0    ˆPů h—tżjň ™&   hB€š¨ k €ösĄ•H€H€H€H€ź( ˝Xh$    ? h?ZI€H€H€H€HŔK€ڋ…F    đ €ösĄ•H€H€H€H€ź( ˝Xh$    ? h?ZI€H€H€H€HŔK€ڋ…F    đ €ösĄ•H€H€H€H€ź( ˝Xh$    ? h?ZI€H€H€H€HŔK€ڋ…F    đ €ösĄ•H€H€H€H€ź( ˝Xh$    ?´ĐőőőţQÓJ$@$@$@$2éŽÁŇZ@gdd¤ěŔ`Ĺ$@$@$@$@~éŽÁŇZ@űwióÖtżjjžs   €5‘˙( €öpI÷Ť&ϐi"   &¨‰š ą h?ZI€H€H€H€HŔK€ڋ…F    đ €ösĄ•H€H€H€H€ź( ˝Xh$    ? h?ZI€H€H€H€HŔK€ڋ…F    đ €ösĄ•H€H€H€H€ź( ˝Xh$    ? h?ZI€H€H€H€HŔK€ڋ…F    đ €ösĄ•H€H€H€H€ź( ˝Xh$    ? h?ZI€H€H€H€HŔK€ڋ…F    đHk]__ď5­$@$@$@$@)#î,­tFFFĘ VL$@$@$@$ŕ'î,­´—ŇJ$@$@$@$@‰ €ŽŔ.Ýo=D6Í$@$@$@$` P E>( =lrssĽşşÚ“B    t ĐBĐDtM d75ŃŇľkWŮźyłdffJNNޤű:îq   P˜y†x.++h"şŚ( ›2‘Ν;KVV–”––ڃǓ…&   H[ŮŮŮV<Śí[20 čôpŔ𠉇f   čŔ¸şď|H€H€H€H ~Đń3c     L€şď|H€H€H€H ~Đń3c     L€şď|H€H€H€H ~Đń3c     L€şď|H€H€H€H ~Đń3c     L€şď|H€H€H€H ~Đń3c     L ­t}}}ŤíڊŠ ůꍯ¤ŹŹŹŐڌÔPMMŹZľ*R2í$@$@$@$R­ŠÁR:•gG°§…9###ĺăXż~˝LŸ>]VŹX!}űö•ĽK— ěc=–ňś} <účŁňć›oJŻ^˝d͚5ňӟţTFŒáËJ    ¤„@kh°”t<ĆJÓZ@ÇČ EŮŚM›& ŤŻžZ23CúŐŰËuÔQrĘ)§Řć_|ńEyâ‰'( ˇ×Î`ť$@$@$@iI ­—p¤z}öŮg2ţ|?~|X<ŁÍnݺٌ—-[&—]v™Ěœ9S&L˜ UUUvŚúŠ+ސ3Ďůdšîşëäů矷ž}öْ••eóCô^~ůĺVHzčĄňîťď6ŞË? Öątă /l”Ś‘˙űßöĐÇź5aöÝwß­ÉôI€H€H€H€ZH C`óŐc˘žHŮçĂÜ0Ł v ť>”"âęCŔ#6ÝÔ>ÜĚČn[a2Äă.\hßÍŹ5ž˛ńćĹŰ3ÖŽ]+={ö”üüüf‹c暤¤¤ŃŰ;P?ÄRXXؤ<–cÜu×]R\\,XOŽH€H€H€ÚÚÚZ;I8tčЄťfž!;ŰţÔlxcBŮj qľĂGšë#ěnře=#ěیŮÚĂžŃČ‘* ˜’ŕ°<ďƒŽŐšŻ›sËřÄł›‹8wó3L$@$@$@$\˜ýĽk0űŒ7zБ    l_œŽŔď]ĆC{úĂ&˛ŃL$@$@$@iGwÖ(˝{÷Nťą%c@ĐŠŤWŻ–E‹هůđk~îŤč<Ůi"   ´!€jĂ+vĄ…đ8\Ż^˝ŇflÉ´‡äŠ+ěÀxČëm{–Ň“™&   H#xvż+ąiÓ&ű0 tӝKݔ‰Ě]şt‘˘˘"Î>{řĐD$@$@$Ţ0  D.eőďg hü: ŢvĽœ}ö˘‰H€H€H ­ @A šżžœÖŽsp| ‡XNNŽýqŠgšH€H€H€Ҟ4~GšˆŽ)´ĐQŢݔ-$@$@$@$@I!î,­4g“ň`%$@$@$@$t×`i- ăÚÓĚL$@$@$@$@1 €ö@J÷Űž!ÓD$@$@$@MP5Ab Đ.é~ŰÁ3dšH€H€H€H  j˘&HʁÚυV    đ €öbĄ‘H€H€H€H€ü( ý\h%    /ţĄ  P[[+ .”%K–ČŚM›$+3Kęęë$ř@ÖGዤ^˜N><>ęÍÁqü|đüŔó#żâý~ź{FĄů%dœK2œłI<ÁzéÝŤ@>¤Ÿœţăa’——Oa捁t :bˆç7ŢxÊĄO„urÚŠ§INnŽ-Ď'qŰţ>gI€H€Ú?oĘ2¤GIŚÔÔg ÖÚb2ŇBbńP8#,ž!˘ë̟Zł•ôé*g]z¨\{őËň࣠䜉߶ĺř'9( “Ă1\Ë W\q…Œ?>lہŠS§ĘÇ,={ö”E‹É\ 'œpBL]Áě3ƌ9Ň\ĹÖHFů˜â ؔ†ˆŢöĄÝV.ë`:ůđřĐ/5~>”Ď 2‡çO~˜… ŕhŸuĽu˛Š˘N˛Œr†hÖ ,n¨cýšŐŇ­g/[Ą­ÓüÁ\´™€ÍB›@ĽůţŢ÷ˆáňÂ}oĘON&YY\ĘĄÜ[ęS@ˇ”ŕv(ż|ůr;vŹ|ôŃG’““ăíÁľ×^Z—lR˙ńČM7Ý—€†ˆîÚľŤÔÔÔŘú­0Ć'ˇÁEž őŽ,Lo|’lO|ŞŤŤ%×WîIž=őŸÇ?<˙´ßó?żĄĎď–Jˆ_„őť5$¤•ĎĆukäâ3ÇË-÷üMş÷ęsřů+ Í Ü|KEu˝të]"_m„¨6‚œÚ˛JĆ čdPŒPÇý÷ß/+WŽ”ž}űĘ=÷Ü#;í´“ÜxăŇŻ_?ű`Ţyç'żúŐŻbwÝşurîšçĘĉmmwÜq‡Ŕ˜9†Ců 6Če—]fóUUUÉG!˜ńţÍo~có¸ěC+ †e˖ɐ!CÜä¨áŠŠ űAĚÎÎśŞ0V…ˇ–n•§ţňT“zŽ?ţxéÔŠSřetöŠQć†o¸TĽ˙势HéÖŇFMş‘NŚŞöŽbáĎöÝKІ˝˜âĎo<ŸîîŸFçDŇŕř,ŤŽ3ڈfü˄ßŘÝ÷‡›dő7+dĆôëäâkî '†–p4,ă0JşÂÔQ]—!9…R^^qŇ-\1 €ŽUü!xg͚%x Ě˜1à 姞zJ.şč"Ć.fΜig‡ß{ď=šţúëĺ‡?üĄů…qŻą–"nÚ´i6ß#<ŤşöřăËťďž+Ä×]w]„\Íř2ÂŹ3Ä3\pfœŽ×ŽY+^xĄńuęĆ5N MÔsR7V-ÍO>ůDvÜqG)î\ÜP2öňÚ6|­˙ý˙žo/8`űď˙k….84ý?řäçĺ#š‘ÓtˇnMŻ7oŰĐ>wîÜ9œEÓQ~ëÖ­rË-ˇČţűď/šÇMrÁtÜ9řÝď~gďěžűî˛aý+Ęß˙}{1ćľÁ`ůxÓëjël܁ŔtąÔ˙WsĚ_qĹĺRXXh/O?ýôp5ą”íů–í˙ćöÓÉ7|P:ŸĄó;?Ű˙óQiŹ2nüýÜŕB2zţźˇdöł3­í͗˙.ű~œěš˙!öť[­Ďx˜°ĚĚ@×@@dŰďs|ßb‮ĺ( [Î0j …7ß|łMŢożýěşd-|ë­ˇÚ+BˆŁ‡zHć̙#Gu”fńúXZףG¨W“˜ýĂ!ż`ÁéÓ't›Ç[iŔˆžA–””Ř[xFŰ|đđŃÓYŸK.šDöÚkOűľU˜ôşş đ2Ť˛ôĐPŢmŽ˘˘ÜΤżôŇK˛×¨Qś~7'óhĺ}éîŹü•W^)˜Q˝ýöŰ1厡łB.ţúqQ‚ŮôyÔ¨˝źýť>řŔ4ačP1ę´żmŒţö_{í5+’gÎ|B;ll({CyđoI˙ˇľĐśököęN´ţď˙{rĚ1GŰ CźÉÇCźű/R˙Üýˇ-Ďśţ3}ŰńM>J€Ç? ÇBç_=zÜóckž_*đ­2K82íhű­‹ćĽŢœO_i–ěúýÂ]|ăŸ&>jŒ™ŠÎ6çZsźă;Ç|çVVŐIie­Ź-Ť•ě|˙rĎp% ÄM€:ndń0`@x-rp˝2Ž]nÍcV:Y3ÝpO?ý´őĆltnnnLŐC@C4———ŮŤVkaH¸ĘĘJ“'´äCŻj7nÜ(˜áŌ:fO1űúŔČźyóäśŰnłkˇ‹ŠŠä…^°˜u‡;óĚ3Íkvňěr´÷űß˙^~řa;[Úi§ÉĽ—^jóEŞ_ۡ™œ?˜E‡Ô>kN4‘ÚxńĹm_ą §˙ţö¤tŐUWً,˝ öů_˙úWŁ}‰6´Ÿ¸0Úi§äoű›˝#Ľ:¸#€ť şl} öúôé2fĚůîw°ˇŢ‚éhĺî˝÷^Ëw(vŮeůőŻ-ßůÎwlŰĂ]°˝á†ě[Y~ń‹_ČŢ{ďmyâaѓN:I~ůË_Úö+ö+Ţý}ůĺ—Ű Ű÷{LÝďÚc >xˋŰ?Ěşă‡wŔ%R˙íŠßüazHšü°ÉÇŒ<>řůh˜`čHŸ-ٲjkŚ9§âĆŠUĎöUv0ŔfĎ Ć:ƒĘ/fő†YĆa&3Ě,´Y-ŮyąMžëc<2\פ­Ă—r[vĽXű ‡[ýŤV­2ËFŮ8–~`Ůň<óĚ3v&Ń&˜?XsŒ™dĚFr˜ýT÷üóĎŰŮQ¤XÎ8[Qg>źŰ–p˜ŹX‹‹ŰôŘžüňËFŸě)SŚĘa‡f„\/{@X–ńŒŮĚÜÜ&tŕ" ü&ы /3HÇřńPçwŢ)C‡•C=Ôś‰ťŁGď'p =–Âw>páÁփ>DFď;ZN=őTťß0źYć˘}™öpŰ>XZ×hüŚŚ}äÔŚ“~>x~h8ń:çO|ç֙óg˝9Ú _Ćf.ľĽÎlđë͢ąiÜć7'â:ŘÍ÷žĘ2L™œlłm‡蜎ÁB_Z‰˙Mëčđ‡2q>)-‰„8[ştŠ•ÄLÖAă!@Ě|đÁ2aÂٲe‹MĂĂY5ŘN9ĺÁ:䠛4i’]"€™MˆpĚşűóă>ćé", Îjă ˇĂ;˜o螘ĹÄ;˛1žłÎ:K.žřb3ĂšíA>äąmŻę+--ľÚ7ĚÂŰ<ę×|&S8ˆsŽÖťí" ”ą†ú!<ŃGˆĹcŽ9FöÝwßP˝NýZˇíˇśÚŽ6řh>ÖŻwíÖÍćt—Ó„ű†”†ň¸ˆúzů×áţkőšŽř×_-?úяÂ8¨sřđáÖnŰ7CĹ8 lqí–^h:|´Ż}DF‡š፷É`É ˜ĄţđŇ#S˙ˆ#ä­ˇŢ ÷Aű§ĺá۰íůÓ0> í Ś7bŇ€Č't˜ĺĐĂ ‡‚ü|šŸ7Ü~ůäçd 6űj†„Qá íź`ĂńąŘ6OhîXA47çZóŕ î #žktövřÂFÇ圣6mBi- ˇÇ^zóÍ7ĂÍ…-D­ë X°ÎuÓŚMVHŞxFźúnöěŮV4ëܲXaç–qÓńú4ˆĚFâľyń:]>ÚĽć“ę !ŘŕTxiýČăŚ!ŹWĄ„¸(xçw,0 }†łvÖ-‹43<€Šĺц›GűLמ¨2pČŻaÄľ źéB›Ž źEKž{î9ť>3ápîQŻ:ˇźćM9!Źvő5 u¸ĺ÷ÜsOÁZě)SŚ4ŔÚ.R0ƒ­} Ä1#úa×öQĆmSðkľĄœ†1;ă?ʃöpGCëEY¤÷îÝť‘MëÔz‡sÇ˛ŕ„y’czĂ7Ł1>ůđřĐÁŸŽóůČĎɔź\č†ď/ş9_>píOd٧ďăě`ś éłÓ.rÖ´GěC„0á—ą|K8ęLů\łˆ:‡K8ôc”4ŸڃŇýÂň$'݄[OűʜţůvöwP?ŢĂ ˆdźcw1ÇC¨X7Ž5×XkŽúÝ6Qżś _èaôSmXێ™f0Çń}ôŃöb >.ú°DëłŃ—×_Ý>HäŤÇHđř@?0ţ˙oďLŕ$-ęť_łłł'°Ź€ŕÉrŠ\‚g$EÔ×Ô.ĺoJźŔˆG4Ÿ7ă…(^‰†Oźń]Î ř *ş\+°ÇěÎ[żęýÍÖqkˆśë|đƒ űěłOú‡Ó×t˙˛ ş‡ňާź}:ţPo ô†bżýöKg˜Ťlß}÷ ˙ň/˙’žĐG'‰ˆßńÇt2‰Ę5uއVuB‹ĆŁ“A$ôőÚČůűţčúJWçOůÖ7đáőÁďGůß÷~ý÷c颅ańHüť÷pčż[śCjž{ě}@xĆq§†KÎo8ä9'…˝ń8šÓżŁńŸŇĆ t\tZ˜ŽďKB|ÉŇË˙ÝNâG"0”˙‘Ş2‰ĐüĄAÉŚ7FąMnőYś˘|NçVŸű+oŤżćĘËĘçh˙ŢńôyŃßUĐGËŞív˘ŔľzŰiťvűŸËőôzh’€ŇŢW­€[LˇúÜsÚú’™¸Ęčr-­ ~ŤŻ=}Śč˝Ú*×IˆžSőßMy~ Lą:>ůŞý{ĚŻĽňäĚ~TŰgE)ŮŹ\Ű|ôŚî‰÷3çă“X•˜ÍˇëäĺžNłţ].ŤUgÝÍM÷K+ňnŻžľZŸř͔ę¸\énŽO{˙S ?^?[ß@é÷IßÁůý8çűĂaĎ'­Őg?O”^ńÇú{ďďxů‘á´w_śYĄ/3Ó~g}ZÓXuÖö ýmťwýh¸íŽ{Ă?˙MxĂSFÓbQţ:R­‚˙>îšçž­ŞM*Sť[nš%ý͚TŘŚ#ţ:9V]cœM<Ł/N)‹ĘŰ/Ť˛Ü*GýB9Żt)Fwc!ß6ţ;4ůQľbP%@`S§ŐC‰#íłÖ› ŻäV+篯Ň/f^nń—÷ár=Ph!š—翸SőßmšŻŃi{ÍÇăט;mŻ6í´í3nֿʾ˛ßŹ\×Qh§Ü"\}ježŮřĚŹYyăŠíÍĎuŰŸëÚrý­˙žĂoŤŔâőŃ ŔďÇüüýŘv邰Í2ýݍŤŒŠńĽ­%MEIşmă‰Pgä aé˛ĺ)ŸÄsźĺ›77Nŕˆ Đń,čĆV˝Űďź'Üo™ŽÂŐˇę"€€Ž‹dŸôŁ?ŔÚߍ˝˝Z픀–H”x&@€ Đ{;ēRő˜“ţôĆC4˘rnˆg]Y"Zů+˘xŽÉ¸čœD´Ę$Ž%žăpŠ‹âIń˙°ŕw?Ž۟^\DQ;BçН3ëűÚĆ -Úʢ“*Ď}˙  Ě!÷Ű%„íă×H,§č8ś­k鍁&!­d,HBZIĽc”ˆŢżpxmÜŇń‡Őa§ĹkÓł6–üʃşŠ}ևśkzčĄń?ŽžúęôP Ë÷÷ٔ™ @`ÎĐwŠ-Œ_$6&l'H4çatăh¸ńš_‡\rQřĂ WĽ‡öńšŽœIÝéöîLÝWĽż9M@Ű8ôđĽNŔ¸řâ‹Ó—°äűčćôŕ @iť†žŃßrýM/=#Śî  ťg××-ľmcŐŞUáä“ON'rčťÖ×gr€ 9@@‡ťýťŤśŰoż}:)ÉGŒÎ)őŐĐ}u;띌ޭę!BĘ wŻ@€ćý gŐšw÷ Ý;ś}Ó3ż„}s+™ @5ŕl˛ Ň @€Ŕŕ@@νfŚ€ @5@@ב. @€‡zpî53… @¨@_?DČŮŝ˝B.źđ°|yüę# @s†ŔÝwßÎűвŽĆłhŃP8ŕ€Â)§ěVíş˘ŁśuTîw Öךă[:űŘ}÷ÝÓ7­3nԆ ôŠ€„če—].˝üŮńk˝‡Bü?Ä˙cؒHßBŘř*ÂÍúďX_ßLx×Úuá[—]^ňŠo‡˙÷ţƒg\D÷ť–čkÝŤsżöŤŐçűÜç>ń”=ýz™ Ě/ú2ý}žsÝć0ŐsăhŮ(Ÿ‡˘Jnčćd$š%śeGăM FO|h8ř–{Âť?đ“đžwšĐ5Ţztćt>vxüă^űÚ׆Ă?źĐóĚťÖŻ_žűÜçƏq˙đ˙ĐrúĽ”xF@ˇÄD! @`F čďó]ë7-o IDˎ`( hý×ĐÓcq:jî°)Šč 7‡Ú=œůɟ‡M›6…… ;—}ÓŃDăCěĂK…›:×?vřß˙ýß°÷Ţ{‡7F?ŃuÎ9ç´Uob+r€ Ě%÷Ć?ů÷Œ†pďĆąďŮbď"Yžu[⽹κŃF^é‹FÂВ%aÆ ]MgŽk˘Ž&UC#t ›uń‘|$źýíoűŘÇÂÁŽ;î¸ ńŤpă7†g<ăáťßýn˛}ěcÇ?üáńŽţéŸţ)|ŕĎčC Ă §œrJúExúӟŢôŚ7×Š&žůÍo†_ýęWářăçc›*ň€ yD`CŊ룐^…ńxܔĽU…ôzŐKţą°6nýYşˆĹ´šď5şf ywˇß~{ř˙řpĺ•W†óÎ;/~¤˛9|îsŸKUôNđşëŽ Ÿţô§Ă?ţă?&QŹ-jŁđÇ?ţ1ŹYł&ĽőăśŰnK>Ľ˙ţď˙^&|âŸŻ~őŤSşúCíĎ>űěđŽw˝‹-U8ä!@óŒŔ†¸5căŚ(˘ŁÝ ť%J,;˝aÓć­éŃÍIdŻÝ°9,\Üů֍y†gƇ‹€î1ň?řÁáď|gxŘĂ:č ´"ěK'űđ‡?<œtŇIá|`řŢ÷žçâŚvĺʕŠlÇw ŰnťmąŢßýÝ߅Wžň•áţ÷żąçěĐQDúT sTçH~÷ťß…×˝îuÓęňć›oëÖ­›V4† z HŃľE葏|dzS×UG4‚ Ú Ü"ź{ĂŚ7‡KżřŠpęQĽř*Ůç7ŇßšěâpwÍŠŰ6î¸ws¸yÍ˝i?ôđ"V ëž!­›č4úÓžčžđ…ă=hˇĂ]wÝĺä”vŻ˝öš°7ZŤ‰Kâűîťď”mKŽżţúŽžÜu_OxÂ’(;účŁíęÚ~˙űßoŤ“E$ö^ň’—ŒűşMÜtÓMáĄ}hXťví„75yÚŻžÍ6Ű䎜ŇęóÉO~rşˇ:ËÓdh5ZOEϕ űô‹_ü"草PÝu×]ĂĹ_žůĚgΕ!2@KŕŚŰ6ĆšxZV$đŔÇśűęEáĆŤś~j˝ĎAĎ+÷yrřőmŁaSÜćĄS8îŽGßĹ-K&.ŕ ,Ä'ÎŽavÚŐččhřńœšýěg? ż˙ýďĂŁýč”×֏kŽš&¨ÎżřĹ´—Úýď°ĂIäHؖ‚Vd˙ęŻţj5H„—‚ŐŃAguÖ¸xV=ëšÝvŰĽ&jŤ‡BĹN'ʈ­ƒŻĽýěxŔ‚„îwÜÎ8㌰óÎ;§űŹąçAB]ŤÝâűŢ÷žwź¨Őuî{ßűŚ×•*ë“őÝlNă’€ !°qÓP|ˆ0ž°Ą‡7‡'żčmadYăoČň•ť„C^pVHŰ7bů湥CŠqAatí÷];Ňö;ÔyËzPbôoţćoÂë_˙ú°xńâԁVýôqüžň•ݤr÷źlٲpěąÇŚŘíÇő- tŠ^1ŐjšöÚžôĽ/MXUŰEŢńŽw¤7o|ăS×ÎgžyfřÖˇž•„¤ˆ”pŐ–zzŘQŤ´ zřQ§—¨?­řvšő­U_ Xd˘qč͊xkĚ ˙úŻ˙šěמöľń‡4“#űĄ9˙éOJóüóĎOo€ôĆA\>úяfľˇ&ľçY["šżŠšyä‘AŰ}Ž˝öÚđÖˇž5œxâ‰á'?ůÉřľ>ţń‡ßţöˇiˇ4Ő‰oÍEœÄŃAoRôĐŞ8ęLrmў멮ăö˛?úя‚Ţ éľI€ Ů'0˛0nűŒqŃÂaɢa§ű?(ţâłÓŔŽxĺ9aĹĘÂH̋G˘`VÝ(œUw$ĆáĹŹ@×}ŮÂQ3QŻPŞ[‹3_âĹ/~ą“ÉJ@kuđÎ;ďL[,,žU¨‡˙$ć$,K žá oŻxĹ+Ć÷„Ž+ݞVÜmg%ýĺ*GqD|7;œÚjT_Ň⠑Ş=ÂwÚ7­ ąk5sŊiESžK.š$<ęQ K—.U6<ä!I+ťkzÓ !ŢMhŐ÷>űě“úŐą~ÚţĄ•f­‚+hU_AŤŽůžôälňCŤúŠbs衇ŽšP­.ąÝj5ý§?ýiĐ'zCĄ}ŃúôŕŸ˙ůŸÓń‡Ţ brîšçŚ´Ž<”Hö›ÍE"Ýüt$¸5}˘ĄUr lÍuŞëčˇÜrKZ­żŕ‚ Ćďcş0? @`Ö,^8˙Ţ4.wr¤pŔÁ‡…mś]ö8ࠔë1[žp(máS˘zřÔů]'Í.ű’¸lJâŮuýńżó˝˛cĽŐÓűÝď~.Š­ÚÎĄëűˇKĘM¨°%Ł7:ÚO["´şę m݆Šú֊šÎćÖC–>R°ŰkI@ű…ö 7 ZYÖC„Í‚N˝ĐkŔo:TO‚9ß>!aí 7*ŐźËdUžż ĐÖ lż‘iu­Tkżö›ßüćđěg?;ď–4 Ě"Ĺ‹âţç!oPş1˜}óÄř-„1Ősú6BŮu:‡śqŒÄŠ — ÷ęžu­›h›ýi…šÓS1ÚězÖŞiľôŞŤŽJ+ĽĎ{ŢóŇŻ2ë—ŮA'ghŐšî(Ô˙T}‹š˛\˝zu:ƒ[[azÄEű uÄ\é́V˝ő)„śěXk+‡öÁ×ԗ> ўëV×Ń6”g=ëYá„NH_úSÇľé€ę!°xdaŽ $ń˙´PŇĐύŻńVzŤxÖč( ăŃvCCŁaݢᰈčznB֋ßĘd.’3A@+ËzŻ_‚žFâY+ŐúĆE?ŘŚ‡ě´ꠇů.żüň ăö$Ž;9eÄý”lŤžľ Ź/­ŃÖ}룜śh_ł‚ ÓI%ů8KýwăÓJťŢ0IŹkśƒÎüփ˘ŘZĽÖžjąĐ8ľŻšŰ`mď_­´kKĆă˙ř)ŻóÁ~0ÜpĂ é´ mEßC @łC`i<ŠnI|péâEaiüzîŁ0^ă’XŚňĽJÇ:‹ˇÔ•YĐK—7žŻš‘÷çUĐýy_k•śhőRQç—Â=÷ܓöŕjŸí!‡’NťŘ~űíSՓO>9­Ŕú„ F=ävÔQGĽ}šŸüä'KÝvěkÖˇDĽö>ë!BdqŘa‡%Ą/qŤ•WÍMŰ;´}A<Ö´uâŤ_ýjú&J i}qΞ{]o<´÷ýSŸúT:DŰB4} NˇÇÇiköPëÝ ŢĄ7S]çë_˙z¸őÖ[Ó*¸î˘žˆ@łO`ů’Ĺ!ĹřľÜ˗-Ëb\ŽôŇh—-I>Ľˇ‰q[ůbŮ61.ťŹhŹWĎţ,úgCůGëŐiĹ˝”&^˛ňUŁš˘üNçVOŸ)oŤ-$ĘËĘçh˙ŢqOćyŃßUЗ’H°řĄˇv;ŃéÚßŰiťvűŸŤő´ú*Ńć}˝ÝŒS{h%źŞětްV™ý°žúÖkOŰ´…a:×,łŰžu<œÄŚb/‚NńОgm#É÷)űZâĄm(Ľ=çŽÓĘęÍ€ŽĄ7=:­C'śä§şítŻă~°€ Đ[úNÉżyďĂăßÖ(°˘j’pJ[9˘mlÝŘbă×GÄ?­ńčă‘wë7†pĂÍ ¸ňká˙>k˙Ž˙śéoŠžQҢO'Aíôé§ţÖu˘^89ś]cœMˆł ń€žń¨źý˛*Ë­Ňy&ç˛˜ŻÚčJžqľ„ęƒ„j߆óîŰ9ĎöÄrœEbąZŚ÷gŐó6ÓIwۡWͧsíVmőE,: ¤Y(í‘nVˇä×?”ęŻ|/՛îuJ}⃠ŢŘ1ľ )çh˝Ź/'!­ď]KjP6&˘~MŽŃx0ôšßm ÷ŢsM\˜yDďWčšß5X_ č­ č…;‹k˝Ř'†@`Ć řďňvńŔ.éf/‰6[u5żť3üč+ß ×]ţĽpÜąGOúd¸×éw Ö׺×/Ž~ë_űquŽuuűEżÍ“ů@€ć m‡Đßçw×ŮŠQڊ¸Űnť…l:ŞßíLßOtxżěP˜rr=â3űńNłqŕ‡ @`+=lżß~űmu´™ŇóEŠÓĎƒŞ‰ŚBŒ€.šÎ ­Đ.@€ 0-ĽϧŐa›ŃDePڎN€ @€Ú$€€nŐ @€ h^€ @耺XT… @€š× @€: €€îU!@€ €€ć5@€   ;€EU@€   y @€ @ č`Q€ @h^€ @耺XT… @€š× @€: Đ×zllŹT… @¨ƒ@żk°žĐCCCuźč€ @ ýŽÁúZ@wpŸŠ @€ ś   ˜úýc‡Â”qA€ IĐD“$şŔĽß?v(L @˜DM4 Ir  Ë\đB€ @ H]Ă€ @eč2ź€ @(@@ąŕ„ @€@™şĚ/ @€ŠĐE,8!@€ P&€€.sÁ @€ "t N@€ ”  Ë\đB€ @ H]Ă€ @eč2ź€ @(@@ąŕ„ @€@™şĚ/ @€ŠúZ@'€ @ wú]ƒőľ€ęÝ+ƒž!@€Šú]ƒőľ€.ŢQœ€ @˜t^żěP˜2.@€ 0‰šh’ä@@¸ôűÇ…)ă‚ @“ ‰&!ItɈo IDAT™ ^@€   ‹XpB€ @ L]ć‚€ @Eč"œ€ @(@@—šŕ… @€@‘şˆ' @€ĘĐe.x!@€ P$€€.bÁ @€ 2t™ ^@€   ‹XpB€ @ L]ć‚€ @Eč"œ€ @(@@—šŕ… @€@‘@_ čąąąâ¤qB€ ôŽ@żk°žĐCCC˝{eĐ3 @€@‘@żk°žĐĹ;Š€ @Ó €€.Ŕë÷ SĆ@€&@MB’č—~˙ŘĄ0e\€ @`4Ń$$Ɂ€.sÁ @€ "t N@€ ”  Ë\đB€ @ H]Ă€ @eč2ź€ @(@@ąŕ„ @€@™şĚ/ @€ŠĐE,8!@€ P&€€.sÁ @€ "t N@€ ”  Ë\đB€ @ H]Ă€ @eč2ź€ @(čk=66Vœ4N@€ Ţčw Ö×zhh¨wŻ z† @(čw Ö׺xGqB€ @`ĐӀGS@€ Á#€€nrĎű}ďN“iㆠ@‰Z¨ů ]`łhѢ°qăĆB .@€ 0¤…¤‰“ ,œěÂłrĺĘp×]w… „‘‘‘Đďášă€ @Ŕ´ň,ń|Ď=÷i"ÂdčÉLÂśŰn†‡‡ĂÝwߝ^<…*¸ @€@ßX¸paĎ˖-ëŰ9Ngbč&ôô‚áEÓn@€ 0ŔŘ=Ŕ7ŸŠC€ tNÝ93Z@€  0ôß|Ś@€ Đ9tçĚh@€ 0ŔĐ|ó™: @€@çН3Ł @€Ŕ@@đÍgę€ @@@wΌ€ @L=Ŕ7ŸŠC€ tNÝ93Z@€  0žĐCCCalll€o/S‡ @3K@ÚKʟC_ čĺ˗‡7öóýcn€ @`Nö’ëç°°Ÿ'ˇrĺʰvíÚ°aÆ022Âjt?ßlć@€ŔŹĐŞłÄóččhëçĐ×zٲeaÁ‚aÝşu)˛ŁŸ_ĘĚ € Ů$ =<<VŹX–,Y6oŢ<›ĂééľűZ@ëĆ-Z´(ŞR¤s@€ qý,ž5ÉžŢ=~I@€ @ &čš@Ň  @€Ŕ`@@Ć}f–€ @5@@×’n @€ƒz0î3ł„ @¨‰ş&t@€ 0ЃqŸ™% @€@MĐ5¤@€ Á €€ŒűĚ,!@€j"€€Ž $Ý@€  ô`Ügf @€ PtM é€ @`0  ă>3K@€ š  kI7€ @ƒA`á|Ÿć\0ß§Ŕř!@€Ŕ@8ć˜cćő|罀žď7`^żz< @@láŔ›Î”!@€ş'€€îž-!@€zo:S† @čžş{v´„ @@čźéL€ @ {čîŮŃ€ @`  đŚ3e@€ î  ťgGK@€ $€€Ŕ›Î”!@€ş'€€îž-!@€zo:S† @čžş{v´„ @@čźéL€ @ {čîŮŃ€ @`  đŚ3e@€ î  ťgGK@€ $°pç̔!@˜%ŁŁŁá—żüeřĹ/~n¸á†°víÚ°yóć=¤ąąą”˛+Ř7fĺöË …‘á‘°ÝvۅUŤV…ý÷ß?ěťďžaᙑ@31_3ńź•ď„—ęťí\`ŚńĚő0TěAGˆ~喬|Ő¨mEůÎíđż­^˝*—•ĎŃţ˝×ŹYs^ô @˜Ç¤7ŽşęŞđ…/|!,_ž<rČ!áŔLéE‹őtf7n úӟŇőżńo„;î¸#yä‘ILo•:őa6ç[ÇLfƒY>îvŘáä˜_ăćGcܔEĺí—UYn•ÎŁŢ‘9Żt)FwňŰxďääŠtY@€ę%°iÓŚpńŇ+ޏ"œzęŠaˇÝv_ńŹ÷JÍ{łŇj÷Í7ßŢőŽw…Ç<ć1á°Ă ĂĂZżŤ/̅ůÖ1›™dVď\Đ3óůE• y@€‚€ë%—\~őŤ_…מöľaÇw ˜úŒťůú^Íhâ:âؖĹE‰Â]vŮ%źć5Ż řŔ‚ Â3ŸůĚdë¸ęœ˜o™Afu wŚűĐö  @¨€ÄŞö:+>ç9Ď ŰlłMÚë,=:ş) iĽ[ĹŰnť-Ź^˝:Ź[ˇnR˝sÎ9'mË(ľ—÷oŢ4~]ů4ŽmˇÝ.<˙ůĎOÂ^ăójët Ô1ßń1W¸čMČ'?ůÉ­sŞ”7k׉6˜M‡÷lśE@Ď&}Ž @čc÷ÜsOřęWżţâ/ţ"­­ś_z饉‘öŒŰoŤą9=]űÔ§>5\xá…ăýiü3ÍŹ[ÖsĄz.ÜĆ@č3ëׯ×\sMĎK–,Ił“ďîťďIHÇăě&Ż˘ŽĆ•ăŃđá83÷’—ź$HčŽĆ¨>Î<óĚ Uç›nş)ů%"U_ĺœz đŽťîjřŠýo ÖoHGçi,zxpńâĹáAzPZɖŻŰ0ůjŽŠ´‡zhxŢóžÎ?˙üäs™ŽâŮgŸÂԐ?úяĆëčt“G=ęQiőú°řćCěÝöˆ#ŽŸůĚgŇ^ďźŕá­o}křń^˙úׇ8 ­v'Ž3ĚŹ[ÖsĄ΅ťŔ @}F@[tĆłšÎ\–X•”¨“XÓęďЂĄ° =M¨Óoý _Ü7}ĺ/ŇYÍëÖŻ“łq8n4{=d/UKĺŰŻÜ>­žJ¸^ůËŤÂË^ö˛đńó?ž”HWŁt!­PÇ3Ě⊴úJ+ˇq*Ә4śvÚ) hyéŇĽéţ˜Î|5E˙Œ×œ4ˇ#82ÜtóMil*ˇË.ť,‰ýó?q~xĎ{ŢÎ:ëŹpá§/ ×^{m8餓¹瞛ś˝œűîsĂQĎ?*|ýë_OsüőŻŢüć7‡3Ď:3<ćя K—- ZŐ?îř㒨ްqCzS3ÓĚ4ŻůXžŻwŽqC€ć0 [=4¸bŊ$âtڅŤěx’ ‰âYúYF˘:únżíö$dÄtŞ+ăâE‹“˙ŽŰďHyM_bů¤O o|ăÁ˜üşÎđđ‚Ř—j4„´Ú7ú˘=•7Ć"­˝Đ:›zş+ĐÝÎWcťzőŐáÖßßžô¤'…G?ęŃaˇÝv ˙ţůOóńŘ:č tzČ? üíŠ~řĂŚőĎîóaď˝÷ů—™öšŸ~Úéá†ëo?šâ'ăœôăđĂ;ďźsŘ.>@922Vlˇ"ě|ߝg™îÎ| Ź@Ď×;Ǹ!@s”€ˇVčŰ˙$Ôźmál!ŰlřÚRńĺ/yŇŃrËzPOĺęKáCúP:ĄC§|Řç~u‰Ąą­ńi5ÜĺŁÄŻVĆUf˙ÄśÍsӝŻzÖö ńzŰŰޖ.¤-+Úv!፠1iť‰çř‡<$ ţßüć7á–[n űíˇßxŮ}ď{ß$”ĺw}ÝçtępKŸ%ŸËś7Ě&^cţĺXž÷ŒC€ć<‰JEm=HSô tnŤĹZ1Ţľż×Â0÷ë´ ­ďłĎ>ŠžDĺK_úŇô â駟>Ąˇóu•_°`ë x#ß—ˇ”hźÝ†éĚW{Á?˙ůϧ˝Ďz¨QQű ľYGěiʚŤ˘çĽm+WŽ {ŘÂłň.ӛŒ[o˝5‰hˇÍ9ؗ÷眲yÝ^2ë–ő\h‡€ž w1@€úŒ€„˜蓘“P“(ł0“ŐŞ´ómÎ?÷šĎMÂPߨ r­ŚjuV‚yűíˇOmUŚ•c­Ţ~÷ťß :Ú}¨˘ŻSő+ď¨ýËúzoŐď6¨mˇóŐÉÍ:aDóÓŞłŽî;řŕƒÓÜ4N1ÔŃ~§Ňzhđ‰O|bšŸžÔ)%Ú ­2­\ëd˝Q[ĎUVcŐ*žęŰ/ŸăL1ë–ő\hÇŽšp @ HÄ-Z´(m1(­@Ť\ąY¨“@<ůä“ÓjłÄŢő×_^üâ§o3”ĐsP]›üŮĎ~6<íiO {îšg8ꨣ\œŹŽĺŐeŻ{ ZýŐ ´D´ĆÜj\:Í2j3ů^pÁá˜cŽ™$ŕ>účđş×˝.źýíoOBW˘X+ÓwŢyg:ÁäӟţtjŁł˛_ýęWŕĄŐhÍG'™h˙šƒ…łó'œpB8ĺ”S҃†ZŮŻ†^3Ť^ožĺ‡ü‚* <ÂóŤťdĺŤF˝ÍQ”ßéÜꯟ­źň˛ň9Úż÷š5k΋~ @óˆ€Vcżýío§bmšřÓ^c‰_ɋ­Łő¤´âúűß˙>ěąÇiľľuíŠK- ľZBóöŰoO+ť:ƒY+žÚ‡ÜM¨kžÍŽ-Ż SBÄCVƒŢŹDݔžŞźZVĘŤžĆ­{Ó*ôŠYŤkĆ1ËWǨÚGcܔEĺí—UYn•ÎŁöć8Żt)FwňŰ8ďŚ{zX& @ľXślY˝_úҗ’•`ő*hž‚l!ÝLŤě¸ăŽéd‰ş§ëh,:“ú{ßű^:ÎMcî6Ô5ßf××I!xŔœœ`ľőB[AÚ ŞßÎą}˝bÖî8çb=ô\ź+Œ € 0Ď H$ëä‡Ýwß=\rÉ%i[…N–ß{lgcŠώZŐýŻ˙úŻtdœĆš űNÇ6WçŰéQbŹ€ tL@Ť˛ÚŤ{Č!‡$ĄŞŻĄţŮĎ~–ŇZÍlśmŁă ľŃŔŰ$ćţ󟇷źĺ-IĐklÓ]}öĺçŇ|=Śéؙ`6ńÍf["œMú\€ Đç$´ĎXÇĐ}˙űßW^yeúBG>ň‘AߏˇëŽťŚ|/1hľYçJ먝+ޏ"­>ďż˙ţáq{\:ÁC_PRW˜ ó­c.3ÉŹ4Ţšţ!şt×đA€ P+xĄ5$dWŻ^žřC'`č$‰Î^mŻĐ úâ‘UŤVĽŻ˝ÖŃx:OZűą{fsžuĚg6˜ĺăžëş7ݚœi@€ž€„ŞŽKÓ^c‰X}ÁŠŽPÓ×sk[EŻD´„ śVč uDNËPěöĚçvoäl͡ÝńľŞ7[ĚZiŽ•! çÚa<€ >% aŚíŠZýŐţč^Šgc´ ”VzŚÂl͡ŽůÍł:Ć>}  g‚2׀ @` 4­Ňöj ń‹ÍĚ Íw ďé8…٧xé€ @ ß  űíŽ2@€ ž@@÷/C€ ôtżÝQć@€ ĐSčžâĽs@€ ~#€€îˇ;Ę| @€zJÝSźt@€ ĐoĐývG™ @€@O  {Š—Î!@€Ú%pă7ś[uVëÍE=‰( @€„€Äó%—\RíœÔ…u•wIřV}ŐźA•5Ťë6X@€ yNŕţç—żüĺp 'x&U X҉­ęşĚśÚŸý]ٙ^Îoś]M€F€ @ó—@.ž—-[6ŐDŹm]_ů ˝ОŒ­'VÍۏ… @×_ýřĘłÄs{ ŤšŇy۞ě…€ö€m۸ęçmŞůvűĄ @€Ŕ'píľ×†˙ţď˙NŰ6,žł=ĐUX͡3;ëJŰvÚ´U§î=Đm]4Ťä ŮŞHé<ŸU' @€ 0ß H<ĺ+_ 'žxbxžá†ĆĹtenU]hh[Š>3ŮvW ë¤űąm5KŐi§^Ť>(ƒ @˜CJâŮf{ ŰՁ֊śÓi[ý´+ KƒÉ/§›ŐmVGţR,őƒ€ @`ž¸úęŤ'­=Ŕčź|JŰ'+ßC׏Yóąh € @B`‡vxAœę51nŠq4Ć͙•OŃ>‰YçĺS´OV1÷Çě¸ĎiŐqş‘h!’ë>…Ăo Ą18§mUGâÚueŤiűĆ"ŔcšÄ´EśĹxîSöŰʧ¨z ÎŰڗ[Ľ € @Í äşMľĆuۖ´|´ö[źÚĘŻt.„]fŸŰć66ďÓéÜ*­ŕ6\ă§|ľ…:´$QÚ*”]\^Çe×ĹN-ˆm-¤mum—É*Ż2É>ĺółăÁuÇ$ @€ŠrÍŚ Ömš• VĎbÚ"YV~Y•ĺśZGőŞé<_Şc_ՖÚUë´Ě×! Ť𠪢T~Çź}%+ˆęGe y•)H Ű/Ÿňn§śyZyǘŮJ @€Ś&ë2ŐśkeĽÇňr卞źŻjYŢVé<äeš_i—UýÓʡĐqëÇXe´/ŚÁXŘʖ‚ěrĺ\f+żÓ%Ťr´XVÚ×W}ĺ\î>TGžfAő<ĆFŽŸ€ @ÍX?šÜş+ˇŔŞcż|öçž<×ˇ?ˇĽrůTĎÁmœŻZ׾P. <ÁQÉ´ЕşÝf=\đŞ/ŹZî2vĽ-Ž–uPYž—ߢX~Ľó2׹U€ @ 9\ĂŠVžˇŽË­´˜ŁüNË:ďúöĺţXmŇ5ZůÔś§Ą.íJˆ*mAš§ó‰ŘŸ[ĽÎbŮy÷§2ĽmŤmäwP=E÷埏ƒÚ+來‡Ÿ€ @%ÖO.łł•_šĚyĽˇÍ˔–_Ái—ËWmăzšU:jďŕtާ˺˛u h_\ł­ŚóA+­`_Ő ”W•ŐŸĘsŸË˘;_3÷ËçśNçvKÓ ísi@€ ÉŹă\RŐqŐź°lł´úr™u_nŤ}*ݐ[×i”l-ËëšlZś­ÁIˆś yjZyŮjÚžŞ_@uMŮ\$Çl ůxœ–UT}őçźmtů€ @S°NsÍ\żšŹ™ś_ÖQmrżűS˙N綕ße˛ j7Uh§Î„>:Đę<šžXîSçÍęٟ[ĽL}(Gů-–Uîźę(¸­Ňާ´Ç#ë~ÎËŞu•'@€ ´&k1ŐĚóJWcU+o_^מŞÍë(írĽšŮFéÖrçÝĆíěŻćíŸd;Гˇphšxu^M”vŹćíˇ—OůŤš_iEÁr[ĽrÜđ4~ޞĘô-6˛j/+żŻSÍçeŽŤ @€: ÝĽ` —§­á\f1lžWÚQőó´óîGVÁś‘ŰšŸŞžëOËÖ% 5X‹Q§m5@O&OŰ×Ě ^$„Ť>]Sí]–çŐÖcrZůŞOe@€ ÎHƒ9äzN>i6—;í:y^iG•;më6ŘŘM jŁ`[M§Ân~Ô! 5¨\”VÇár[•+í(@j_ľĹąh<اś š vZÖ×ĘÓŐúÎçVi @€@sÖaśŞŠ´óN7łŇ|.Ó.§-šm富ísY§míŻÚŠĘŤő'ĺ;Đş DŠC)ď2Y—{ ˛a!ěžňrľS×kä?ĺs}ľw^VůÜłă>_ËÖešUš@€ М€u˜­j:-ëč¤ëěs:ˇŞ§|Ußyˇ­ÚźźLýĺy§ĺw/Ő|^6)=Ľ€ÖwĹPiŠ‹äžjŢŐ=˜źŽĘ\ßV,–-ˆĺS°_éź?•Ť_ůÜFy§cr’xÎ}J;TÇg?€ @`"ë1{•Ď}ÎŰ'ką[MťŽW˘]OÖ鼍| ň)Ř6rŸî3÷9]­_Íi_Wnf§ĐÍüşX3!ęhҸ ň)ڗçݏ!YDŰ/+ŸŹ˘ÚVÓѕ|žžóާ<€ @`zŹád¤áœ—u>Ż›űórĽŤůź]^fîóŞVuk Ýh]<­ĽT¨úy{דŐÄ,–-|sżĘ•÷ősmaěţ}M×W[×q™|@€ î H{9Ş—RÚžÜJŁĺyĽĺËýNWýnŤ uĽ\fŰđNţŠrŰFŽŸÝčjˇş¨i~qçmó2ľwždHAeČÔĘŤż\4Űg,Nĺ˛ň)ȖҩpË—ç>Ň€ @“ Xżĺ%ňŮ_MŤžőąëŘVýĘŰgëşíX]SőňúΧ‚nÔ! =\„j Ęç6Ł@XçÖÍËŐN}9şO i•ťüšňťŇ ĘçÁyŰźŒ4 @€ŔdÖkśŽ‘ç•v^Ö"Xu•VČýŽoëúśÍüŐrŐS¨Ú†wŤßůŽl[şÉƒ„Ľ j°šőŕ]ˇTډ[Ťžę8/ë/I‘?ž–|NÇä80ůԇ‚óy:÷ĽJü€ @h‹€už­9-}§PĘË×*ş­Ĺq3ëžÓ… }Ú/[­›—§Űy€P•ŰĐă˝nMh%ášű\Ç­” Zűe헵¨u_ÓŞ'Ÿň˛y=çeŤ×ÍűŒĹăíŞiĺ € @íćr¨ŚKyůň¨śÎKŻšŹó­Ňn›×QŸň+Tm3_ŞÜΏntŤž=Hŕ°"^IDAT‹Y׾ŕušýśeqmŃŤźV ŐÖeyŢ×p߲Ž19!íźl5¸}ŐO€ @`"fZ.÷+íźÓy^=*oĄ\ĘťĚíŤyűÝŻű°?Ď+][h[@śqhpžśTžVŢAţvB.œÝĆâVe Ň*ËË-šmUOÁm›ŮF­­őœÇB€ ” XƒšÔůfVőTVöËZçĺuě“ÍýSĽŐ_5¨ƒÓśÉßîö Un[@űŠMŹ`‘Ş*|.łOĺSR[[Ľ˝íźúrßöÉ*TmĂťő§ËˇzHA€ ´CŔúŤZ×ţÜ*íźę;o[ňšŹë~lŐ6Ő|^Övş#]X….]H“0őś-ľąOmźUĂý¨]U×ůVi•)äuO[ƜĆB€ ´OŔZO-Şé<ďrűd[Ľ]ž×ńjt^VMű:śy{ůš†NVŸŐIGşpU LUĄ”öŔUÇĺöĽFŮ—çŤÎ*ś?­Ňjă19ç嫆ŠĘŤőÉC€ A%ĐL˙‡Ęó:NçśUşZŚźŁŽátníˇU™Ó[’Ĺ1šŹ#;wG Ty(†ŹQžNŅ2Őq˝ÜÚoëöĽ:Ľ˛V>•)¸ŻFnržTÇuą€ @ ”Äc՗çÎmžVďĘçžR>ŻçňźM^î´Ź‚ë5rYžÓŐgu0ÝhőáU…ŞĘTÇĺNťęŘç:nW*s;ŐUt[ˇąßyŮźß<×! @€ Đë3ľÎÓÎç>§eÎëٗ[×­úÜNVÁĺÜäŸS•OnQđÔ! ŤÝj`ŠSĽ= ŐwşÚŸóîË}Ëď6öšçÝV6÷ĺéźi@€ ÎXŠUžv/öUm^_eŐň<_-ĎËŞ×Éű­Ś]wZśŤ-şbe‡‘ ÓRÚžvŹę¸^şä–‹Ř×ĚVÇâzöç}ĺ>Ň€ @°˜Í[Úgë2ç§˛ŞŻ:ŽÎwbóşŐ´ňĄ›íj׾€N'K!Ź­ŇĽ2ůěŸĘ6ť–ŰŠ\Ąšox'ţl§ÎÄä @€Ŕ`°řm5űjçmŐś”śŻdŤ>÷ażó˛ ÍüÂnL-ëŮ˝ĽŤ˘ŃŔ-NŤi5¨–ĺu‡nWľ*ˇ/OWűđ5Ü_5ďś.ÇB€ tF ŞżŞyő–űJiűló6öŮşŹš—_!÷7<5ţœÖ ´ĆŃĆVŽT­2f‹ŘŞÍëş,÷ĺéfĺyĽňúöa!@€ę#PŽU_žwÚV#)Ľ[ůň˛jűRžë­ęLĄŞ_M$ŹÍňů„]?÷ŠŻfÁőÔ.OŤžňîOy×iä&ţŹÖXJ€ @ŔZi*׹Íë6KŤnł˛Üďzš/Oť\ÖĄZn˙´ě´W }őiŽDwU1Űi^}U۸˙ŠĘňz¤!@€Ú#ĐJ¨–ĘŞžvňíÔÉG[­?í•gwŢŤh÷ď[Đś“WŐŻśqŸUëúUłźÇĐŹ? @€@}ŞÚŤš×•J>űŤećë›É–žj[öȚŹDŤŘ‚ŘUKžj<Ÿ§[ő‘—•ŽQ-'@€ P/ŞČ­öŢŹ<÷çiľŸ*_Ş“ŽŰíquŠqáGŻW óKzŇš–ŻšwůÝFžj]ˇËë¸-€ @`ö´ŤĎňzyÚ#/ůTVőWónß[ű ´GŮb%ZU,~]˝™ĎĺĽúÍĘZŐu, @€Ŕ̨ Üj>I§eMë×˝ňěAöL@ëSˆčTĹŠŘvDp;uZ]ŁrI˛€ @5h*j+ýˇSŻYfţt‰^‰guŢSm@mé4×/ŘvŲ›vZßí°€ @őh)t —jUżUYꪗÂŮc=~ą¨¤žÂśSŻ:S\†b@€ Y$0Ľ Žck§NmGÔľĂbF´Ô㊴ŤËNG,O§m>Ň€ @íhKô6骣ś3ąâ\çŹč|]ˆéźšŇä*ň€ @`nčH$W§2˘9ĂŹ č|0J× ¨Ť]’‡ @˜Çf[0WŃÍ9] ňˆę|€ @ ˙Ě5ą\"śŃżÔŇ„’=ŁűL˙Ÿ+OűůGö.™˙>VŸ÷ň¸OÚWÔôO†w†“rÖWKcšĂ{¨•‡ĐŠ ýkřcă˙=Ÿ‹Ż|Uiľ™â˝>}šę=’#U]Ń(čçć=ëäÝY§kżźŮB6˝]ţĹÓ?çĘÓţţQý‹Śϕ§ýüŻÔ˜ţĹÓ?çĘÓţţQý‹Śϕ§ýüݏřšă 3Bđ•‡ö™­kşĆ’ÚƒKlf’9]ąŚDŹ[ćŔ žâľő‹:厳 5׆ Ň4MJŢÉćťźĘ#–vĂBZ%"6^.bGAÍ?m/ćbökąë?ŘşgüůZßĘ?ątĎůň´˙ż•ćż|KăÜř˛?ĎŁ\G§kזPˆ‰bňä&€cîł|Ç˝z†éœ_÷ŃŞU&ŐîÄăЇűL˙Ÿ+OűůGö.™˙>VŸ÷ňŚĎý3‹ţú4gţ™Ĺ˙}|óîţńZ=ˆątĎůň´˙ż”béŸóĺi˙*l˙Ó8żďŁFéœ_÷ŃŁž}ßޏbě]3ţ|­?ďĺŘşgüůZßʛ?ôÎ/űčџúgýôhçŸw÷…ŁŘ‡űL˙Ÿ+OűůGö.™˙>VŸ÷ňŚĎý3‹ţú4gţ™Ĺ˙}9çÝýáhö!ţĹÓ?çĘÓţţQý‹Śϕ§ýüŠł˙Lâ˙ž˙ŚqßFŽy÷xZ=ˆątĎůň´˙ż”béŸóĺi˙*l˙Ó8żďŁFéœ_÷ŃŁž}ßޏbě]3ţ|­?ďĺŘşgüůZßʛ?ôÎ/űčџúgýôhçŸw÷…ŁŘ‡űL˙Ÿ+OűůGö.™˙>VŸ÷ňŚĎý3‹ţú4gţ™Ĺ˙}9çÝýáhö!ţĹÓ?çĘÓţţQý‹Śϕ§ýüŠł˙Lâ˙ž˙ŚqßFŽy÷xZ=ˆątĎůň´˙ż•qŸöć°ÓôHďîP đ‘çŚć=°É­|˙Ó8żďŁYŢ•—CYAi¤g˜÷.IÎkĺx§ˆędÔŠ´ßźŢ˝­ë§SŻ †fîś*NśV˘kZv !ÚłůťâјcoԌ{֕ΙŁ[[Isqmc1Šwv—@ęjo˛Ühwq]ŃŽwjóÔnoži&` mŠi’KĹ’*gţřJóň.0ŠĄ^nďŮŤëůiĄ–gJ8:.ŞW˛gUo1żí:WƒÖkCĘKqsä™ŞŽ ÇŚqVô)t-Râk6Ó#łż€f[[†Úŕx`á—ÜŽ+ukđ ,űTQŠćźKŤ\ŰřŻĂ—čC]č­ĎmńČáXu$ÔeÜ_W‰…&Űćvűű[őšň<úëß.îŰ#˝ń=΁ ­źRi‰w{tĹm­-Žé%#ŠęQ݉VUƧ%„?jŐ| ąŮ™ÖđO$cÔŚ@ﴓőŽ/Ç:•őŻĹ RT`ź0Ŕqą” q˙-T˙á%ÖyÝxX ¨ŻœU§UÁ7ĄűVYÁĐĹa!YŮó+őëÚß­ĎeŇěü=ŠéđęX\ZÎťŁ‘ éôę+Ë>-řNŠĺ5+6ň6>Öğ)$†äp1Ücƒ‚ŔÍđPžKŻi…TÚÁqń‚p¤ß¸o”TßĆt)>Hů¸^‡ë_M•Ő–"*roT~}ĺtcRŚ˘M&Ő˙ާ§č_ň€ěîŸâ÷5ĹüOđ;xŽhľ]3ěQęG嚥š9ŘřäI!‡LžšăŞś¸ű7†mŽBC3í`@î=ˆ9ůGëU˙śßţ|m?ň'˙\Ż<.!ʞ3HRç„]ú'ük,ĆÖĂŔšF);Měˇë,iţŇŽIý+Ö~x2řx؉îöâC5ĺÉă͐úŔtŻýś˙óăi˙‘?řŞ?śßţ|m?ň'˙U‹Îńť{W{y•ő{lËzž§ę–†ĎSÓlom‹+˜n#!e!”ílŒ‚„ ‚ÇCŃl5;˝NÇDŇíoď9şš†Ig˙}ŔË~$ÔŰo˙>6Ÿů˙ŠŁűm˙çĆÓ˙"ńUÇőżî‡°ó ź9áůŻZú_hň]<ërÓľ˛ ŞťBŘÎनn tŞúWƒź%¤Ë4ş_„ô žłĘÖÖQĆd‹ű‡h_n•‘ŕŢxƒĂŸÚwZm„rëا™€‘]K'j.Osž+űm˙çĆÓ˙"ńT}oűĄěr•ǁ|qĽC¤ĎŕĎI§Á#I а‹ĘŰď2ŽÜ{‘Ö¤—Áž—PłÔeđ–€÷–(‘ÚNlŁ/§ÜT8ʅěNŐgűm˙çĆÓ˙"ńTmżüřÚäOţ*—Ö×ň‡°}É,t=ĂSťÔětM.Öţ󛫘`D–÷Ü ˇâMhŰ8˙ďŞËţŰůń´˙ȟüU`x“ơšwˆü1ŚAŚŘő[頝›ĚʢZÍ(Űóő܋Ϧ}rÖüƒęţgg˙lă˙ž¨˙śq˙ßU—ýś˙óăi˙‘?řŞ?śßţ|m?ň'˙G×<ƒęţf§ýłţúŁţŮÇ˙}V_öŰ˙ύ§ţD˙â¨ţŰůń´˙ȟüU\ňŤůšŸöÎ?űęűgýőYŰo˙>6Ÿů˙ŠŹřÖóÄţÓşÓl#ß^Ŕ<ĚŠęX“řů;Qr{œôéG×<ƒęţgg˙lă˙ž¨˙śq˙ßU—ýś˙óăi˙‘?řŞ?śßţ|m?ň'˙G×<ƒęţf§ýłţúŁţŮÇ˙}V_öŰ˙ύ§ţD˙â¨ţŰůń´˙ȟüU\ňŤůšŸöÎ?űęűgýőMŇľgł¸‘#ŽŮŇHÔ4% ‡ČÉ'ĐV.™â?jz=ž§cgbŃ]ۉíĂëlŮVYZ<´q:ržJ3¨ó$Ú\FŚWőĎ úż™š˙lă˙ž¨˙śq˙ßU>Šăćů6–/ţ^ýZUݏ7fq ĆvŰçŽ<É1ťË_4ŸTń€ó|›KĆ˙/~­*îǛł8„ă;mó×d˜Ý寚}sČ>Żćh˙Ű8˙ďŞ?íœ÷ŐgOŞxŔyžMĽ‹ă—żV•wcÍٜBqśůë2Lnň×Íľâ8ľh.`mî.!,7“ĘĘ NÁ˜vŻË?y‚î‘×q*žiőĎ úż™Ł˙lă˙ž¨˙śq˙ßUŔ|)ń&Łyá¸ÔvßÜśŤŠ†žáäg _Ngw@ (€ĽuŰo˙>6Ÿů˙ŠĽőĎ úż™Š˙lă˙žŤć=cIşšďFˇ‚ň ‰ylÚ@¤9ęPž9ęA57öŰ˙ύ§ţD˙â¨ţŰůń´˙ȟüUqcéańô˝•x]S„ŠťĹœŢ˝/ŽźUŇâŇâđő”œOs,ČĹRr~¸^•ŃGáÝ6/ ÇáŘ­Ő,â…bó.ލŸďdg>´ďíˇ˙ŸOü‰˙ĹV&ľâëťox[F†ÂÉcŐ廬y>rʑÚÍ(ۖĆKFźœńŸ\Œ°L.›§Fž?Ŕ+BUž6gŢAâ˝,yÖşŕ^â…ˆ‘Űrł~œT~đ–ˇ}âhMNO„wąčłĹ¤×šŞÚÉ&6ʆúăi9uőčzUhź]{ĽNš YęíŹËrŠ$z‰[Ą ˜ž@č`ĺĂym…$†'`ô˙ |-Ťś›Źxrô,ˇú›mwdŘxŢövVŤ+3Áő˛žӓO}=<nś •ápŘΑˇďß­8-GÄţ"oŇŻ˙âN%†ă2"y÷’ÂęŒ…đpGBjYxłYšńDştZGikzś72$Rd7–ŹŇîűĄAaňžJüŮí]đlÍěυc6ŇDź'O4%‘ íÁU,Ä€“Ž´ƒÁVĂP‹PŒ^BŞąÎ4ń˝Œ( ˇ#č(ËřÁű}Wž¤˛ÄâÍ tˇY$ Žv•Üٜ–Ú‘Ž?ä|đý….żô‚âşť˙Yßę)Š_xB Ťä ćm4<ŞĺpĹr0I#Ó5ăëÓřÓÁhš”°Űj7/<‰jěą)˛Ab`2{;Đ7/5m+\}^ňmKţč!‡-§M6シǕeԂŸt’8\ňs/ŢǢĎ“^jŤk$˜Ú˛덤ä×ÔĄé^‡¤xTéÍmĽxuŹaf.ŃŰ٘ԹęH“Ŕ暯†>Շ€[MÖ<9z[ýGÍśť˛lóţşĹü¤Ż"Őő;m8čÚĺέ§ë é:~Í-őŠ"źRĺ­¸Ie´›‡WrŰ1ć¸9ŻbŇ-Ž-lnVćŢX匨‘ –>qž¸ČüĹbiąřžÇIś´m?HźžÖßĘYŸRœyŹŤ( KÇ#Ű`'sť2Lł˜Á”Íőř†óIń1¸—M PK§K,B[$8Żćœ€7nÁ—hŔ::ωľ} óĆ&-pOSľá?#)ůä]ĹSy݁“S“áVŁ‹ňX]B1Łžč@­K/k7>(—N‹Hó­-oVĆćDŠL†ň՚]ßt(,>SÉ_›=Ť°> €Ů˝™đŹfÚH’„éăcF„˛!]¸*Ľ˜Đq֐x*Řjj‘‹ČUV9ƞ7 Q…śä`p=8řƒU´ńę˙Ľ&ŁŮZ]N-î&6Yś 1“Ĺy˙>“˙ßł@Wül?ń)ŒnQó/sÔ׼ýŠóţ}'˙żfźĂăL𽄖É<-5ŹÉÄ@‚ń9PáXuSľŃ°{0=ŻK*˙xů3 GŔzN’sáxžeoz÷é)t“Ÿ Ĺó+|ëĐżI\ŘĎăËÔt?†‚Š(Žc`˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(Ż×dwŸÇeä˙ÂRÍÉŔ˛ľđb˝îź Z?˝ńŕÜŁţ*Ž„s˙Vľée_ď&aˆř~ŇN|/Ě­óŻAţý%.’sáxžeoz÷é+›üyzއđĐQEĚlQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEŕZŃýďĺńUt#ŸřňľŻ}Ż֏ď|x7(˙ŠŤĄ˙Ǖ­zYWűÇɘb>ß´“Ÿ Ĺó+|ëĐżIK¤œř^/™[ç^ƒýúJćĆ^ŁĄü4QEsQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@x´{ăÁšGüU]çţ<­kßkŔľŁűß Ę?âŞčG?ńĺk^–Uţńňf€÷í$çÂń|Ęß:ôďŇRé'>‹ćVů× ˙~’šąŸÇ—¨č Q\ĆÁEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^­ŢřđnQ˙WB9˙+Z÷Úđ-hţ÷ǃrřŞşĎüyZ׼•ź|™†#ŕ=îÂxĄđ”rĎ ™Žƒ]ËŠÚÉ[ł!2"–U‚ĺGđ÷§AwâáßËşůńREuˆÚOłĆ˘R#0e|Ś"=Ľ0IoâÉΞ—EyuńŁŤÚŘŮ_x™<=&ŹíĹ$W°ĘÎĽ¤@ëœ#Ăâ@=1¤˙oé÷zśŻ¨Yř’ďS“ĂĐÇnŠĘ'’).Ôî*…V@Ś7Œ’ůPIĹ×ä–(Ţ4’DF•śĆ€.pNŠŔ'č >ź§Âˇ>)›QłŠá5;‹(5çňgžÎe?g:l‡9™w읡›šĆp@­Ÿ†ąx’ŢM/űbëWšžˇ¸˝7ĘqçÔ|ŁcaŽSýqœ’XöŠńGUńź—ž m2ß^€ËĽę…!6ÓÉä\#¨ś(î 0ÜUcČ óťŸ@đĝ–­ŻX\\ę7vq˜d´šďć$´ź ؆qŘąنXç…&†D’)2:6UäGQOŻ ˇƒĆ˛řzÚdş×Źnm4 Ă 0m_´ł¸š …0Ě(e# ÁŔŕֆł/ˆ,-ﴒuém\ň­Żąq$‰nlă—$ÂŚIÎy xÚKéôW‰ßk~0‹ĂśˇúÜţ"ąÔNŚ‹a Ł,M3ÉśăĎÂěW9k‘€FÁ’kĄđ%Nj&ń„ŸŰ7W‘0šín­¤ˇœÂÉć$ĆĆ1€ĄpUÉ`NěˇBŔzÎĄam’Ü_[CN#‘¤•T#RIŕGăÖŚ2Ä&XLˆ%e.¨Xn*č2?1^oŤhúŽŤă;Su˘--ü\eFČţÇ80WÎů7äŽ{UŸ‹öś§o¨XŘ[]Í ŢŐ÷œ´ű­ź¤ÜŢaż Ÿ˜ÁǏB˘šŢ_Yx =WĂńk˛YKÇŮŢ~Ős Ę<ŘĘ:‡,c߀Fsś¸q?ÄŰ}&úŇńő)eÓ~É ×I féf˜Ë<‘lR[ˌ¤y@X|ř€ głQ^aĄEâËËý9SŐ%´ŠŇţxóЍʲŰýž)žTW`—Ćĺ%°IľđŽO3žˇy~ĚlŁ7V÷vÓŠKœüĚŹń˘ŕ¤dŻ GBžX …ćžDŠ$RÎîŔ*Ô’z $–(Ţ4’DF•śĆ€.pNŠŔ'č xŸ‰Žź]ŠÁâ›H4ýq­ď4mZ6łkiä 2śáÔ!fRűV<‚%° lB5ëŻéňiąëWÚmŚĽćŰKŞ[HŽ“:ńdÝ˝U„[Ú’1šŮAč`=^ŠóŻ„sř’yőťËöceşˇťśJ\çćegw#%xR8äăép_é:tV2?Š-솽¨QĄˇ¸ym-ËŔc! 1śQ™˘Ď%w“@ťEpĆűİ|4Ńő Äż:ŒwozÜľĂ[ýĄ<ÂŃ Îď+%•FǴښËÍ_IJ^Ž˘Šâ í˙´nž›öKŤg–#"Ü:ÄGv]ŞAÉ#‚Ŕzĺ0ËL¨9,>S€p}:ÎźßŔ—,›ĆlÝ^DÂkľşś’Ţs '˜|“ÄJ…ÁW%;˛Ý3üUĄřšâ/ˆYI2ZÜęöňGh4ňďt˘ŇÉYă|䌣/ŕŁzÔ´t˙?Čű}Ż›ťfĎ9wnÎ1ŒőÍJ.-Ú8äÄRRlaÉěză¤đޞ~+ŽĽýjbţĘg7?c]żhóĂgv>˙Së^wá/ř’ĎĂ>‚îÂeÓ´ŠtŰŤk}ŒfŠiź“pdLe<Śňz Čăm{Â:8܌Ź2FAĎ ŕÎźZ?˝ńŕÜŁţ*Ž„s˙Vľč>ŐâŇôSN˝ÓľČîmőM^é—űčŤĆ×׊ü˝’FRĄI-Myö°Ů“ÇgrŒřŤ8#ŸřňľŻG*˙xů3 GŔ{ö’sáxžeoz÷é)t“Ÿ Ĺó+|ëĐżI\ŘĎăËÔt?†‚Š(Žc`˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(…^ę6ú•ć“cs{m"â[uy"Á$mb20I#ľ~Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(Ż֏ď|x7(˙ŠŤĄ˙Ǖ­{íx´{ăÁšGüU]çţ<­kŇĘżŢ>LĂđý¤œř^/™[ç^ƒýúJ]$çÂń|Ęß:ôďŇW63řňőá ˘Š+˜Ř(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š+ŔľŁűß Ę?âŞčG?ńĺk^ű^­ŢřđnQ˙WB9˙+Zô˛Ż÷“0Ä|żi'>‹ćVů× ˙~’—I9đź_2ˇÎ˝űô•ÍŒţ<˝GCřh(˘Šć6 (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ đ-hţ÷ǃrřŞşĎüyZמׁkG÷ž<”ĹUЎăĘÖ˝,ŤýăäĚ1ďÚIυâů•žuč?ߤĽŇN|/Ě­óŻAţý%sc?/QĐţ (˘š‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ź Z?˝ńŕÜŁţ*Ž„s˙VľďľŕZŃýďĺńUt#ŸřňľŻK*˙xů3 GŔ{Šă řWÂś'Ğ"ŇôݴɈĚëIˇví œ7.Hé¸g¨Źř[ß ˙č|Đ?đ1kŹą[™4ŰÔF#}ě`26r0Üź}ěœúqSů?ô‹˙Ç˙W63řňő*‡đâqŸđˇž˙Đů ŕbŃ˙ {áýšţ-v~EĎý"˙Áq˙ăÔy?ô‹˙Ç˙W1ŠĆÂŢř_˙Cć˙‹Gü-ď…˙ô>hřľŮů?ô‹˙Ç˙Qä\˙ĐR/üţ=@gü-ď…˙ô>hř´ÂŢř_˙Cć˙‹]Ÿ‘s˙AHżđ\řőEĎý"˙Áq˙ăÔĆÂŢř_˙Cć˙‹Gü-ď…˙ô>hřľŮů?ô‹˙Ç˙Qä\˙ĐR/üţ=@gü-ď…˙ô>hř´ÂŢř_˙Cć˙‹]Ÿ‘s˙AHżđ\řőEĎý"˙Áq˙ăÔĆÂŢř_˙Cć˙‹Gü-ď…˙ô>hřľŮů?ô‹˙Ç˙Qä\˙ĐR/üţ=@gü-ď…˙ô>hř´ÂŢř_˙Cć˙‹]Ÿ‘s˙AHżđ\řőEĎý"˙Áq˙ăÔĆÂŢř_˙Cć˙‹Gü-ď…˙ô>hřľŮů?ô‹˙Ç˙Qä\˙ĐR/üţ=@gü-ď…˙ô>hř´ÂŢř_˙Cć˙‹]Ÿ‘s˙AHżđ\řőEĎý"˙Áq˙ăÔĆÂŢř_˙Cć˙‹Gü-ď…˙ô>hřľŮů?ô‹˙Ç˙Qä\˙ĐR/üţ=@gü-ď…˙ô>hř´ÂŢř_˙Cć˙‹]Ÿ‘s˙AHżđ\řőEĎý"˙Áq˙ăÔĆÂŢř_˙Cć˙‹Gü-ď…˙ô>hřľŮů?ô‹˙Ç˙Qä\˙ĐR/üţ=@gü-ď…˙ô>hř´ÂŢř_˙Cć˙‹]Ÿ‘s˙AHżđ\řőEĎý"˙Áq˙ăÔĆÂŢř_˙Cć˙‹Gü-ď…˙ô>hřľŮů?ô‹˙Ç˙Qä\˙ĐR/üţ=@gü-ď…˙ô>hř´ÂŢř_˙Cć˙‹]Ÿ‘s˙AHżđ\řőEĎý"˙Áq˙ăÔĆÂŢř_˙Cć˙‹Gü-ď…˙ô>hřľŮů?ô‹˙Ç˙Qä\˙ĐR/üţ=@gü-ď…˙ô>hř´ÂŢř_˙Cć˙‹]Ÿ‘s˙AHżđ\řőEĎý"˙Áq˙ăÔĆÂŢř_˙Cć˙‹Gü-ď…˙ô>hřľŮů?ô‹˙Ç˙Qä\˙ĐR/üţ=@gü-ď…˙ô>hřľĺíŠéúŗ5-*ţÖöĘăĹណ>Çj2÷ČúŠúČš˙ ¤_ř.?üz¸€&‹ůë#ĺwą‹fNćč2ŘÇsÎkŇĘżŢ>LĂđö›Ÿě{L˛Ÿ”ôďST:knŃí>e?)č=ęjćĹ˙^ĽQţ (˘šBŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ˇwW1ȉÄȢ(đČäEu°ĐM:ęŕĹ|×?,xë¸çŒ{ÖOĹKMJ˙Áz͞ćé´ÝŹoąÜ˜‡Ę­ĆÖ# ŒEy‹4ču+-QüáťŰtđľýĽÔcJ–Óϑ„g„FČŚG]˛ýĐvî#?>)ˆökPżG˝’;۔uˇŤ,Ź!O#šÂř%,ą|đ“E#ĆÇDÓFUˆ8ű0ŞZşŹžÖ?ˇ…ŇęŞ&Jń•NΚčŃc–äîĂd _˙äˆxKţŔşoţ“PRu ‘ ŒßJ‚Á|ӒSŒűÎ˜uwĎru6Gť|žĘťI “œ AôÁŻ&ÖíüO'Ä7ńœ’Zi—°ŘÄ|Çf%ÁH<łź”žC ÂŢ23ĆyÝR×Ä_đ‰xƒJÓmźI-ŐÇö˙Úě岓ČňžK†ˇ0ĺBłł4{v’X;ç ŔĐmź˙Ÿš˙ďáŁíˇŸó÷?ýü5äśĂÄ:ˆml,oüPž“QA-ĹÄ2C>>ÉpŇŠg@˘-ţl™TŽÎŠóâüN$ŽăPMR8ďAś6ł:0|“ h„!‚€Wwç Î=˘MJxŢ4’ţDiljÓ\ŕœy8ý§ýśóţ~ç˙ż†źĘűNMaü*še߉ZÖ-fW¸š¸Žx§‰~Ă:ýéP2ŠfUĎ,@ đ9řo<~÷ÖPß]ꖆ;xŇf´ÖWYd3,Q0,ĘŠĺFÓšqÉŰöŰĎůűŸţţů˙Ä3Í=Ϗ%žs#˙ÂRi fŔąľ“Řá]υŁń4ZîŸy{uŹL—wş¤WPÜ!ňb…'“ěÄ.ŃłĺUÚßÄżŕőىŰ´ŰČÔYK4K=Ť´r) sV~Ńo˙=â˙žĹqž8Qmáý>ňÜŽKł"Dŕ’Ţh9őáTsé\kz°ń˙7ç]ÁCzŠľsk*^áî_hˇ˙žńßb´[˙Ďxżďą^u˝X˙Ëü˙÷Ő'öÖŤ˙?ó˙ßU§ö4?˜>ł.Çşý˘ßţ{Ĺ˙}Š>Ńo˙=â˙žĹxWöÖŤ˙?ó˙ßTmjżó˙?ýőGö4?›đŹËąîżhˇ˙žńßb´[˙Ďxżďą^ýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}Qýćüë2ě{ŻÚ-˙çź_÷ŘŁí˙óŢ/űěW…mjżó˙?ýőGöÖŤ˙?ó˙ßTcCůżúĚťëö‹ůďýö(űEżü÷‹ţűá_ŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐŘĐţoŔ>ł.Çşý˘ßţ{Ĺ˙}Š>Ńo˙=â˙žĹxWöÖŤ˙?ó˙ßTmjżó˙?ýőGö4?›đŹËąîżhˇ˙žńßb´[˙Ďxżďą^ýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}Qýćüë2ě{ŻÚ-˙çź_÷ŘŁí˙óŢ/űěW…mjżó˙?ýőGöÖŤ˙?ó˙ßTcCůżúĚťëö‹ůďýö(űEżü÷‹ţűá_ŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐŘĐţoŔ>ł.Çşý˘ßţ{Ĺ˙}Š>Ńo˙=â˙žĹxWöÖŤ˙?ó˙ßTmjżó˙?ýőGö4?›đŹËąîżhˇ˙žńßb´[˙Ďxżďą^ýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}Qýćüë2ě{ŻÚ-˙çź_÷ŘŁí˙óŢ/űěW…mjżó˙?ýőGöÖŤ˙?ó˙ßTcCůżúĚťëö‹ůďýö(űEżü÷‹ţűá_ŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐŘĐţoŔ>ł.ÇĽëß4+=Zk?ěŸܛ}ą4śţź’&eP­ľÄxapĂ őŒŁ˙ WC˙ ?đ™˝˙ăuÁmjżó˙?ýőGöÖŤ˙?ó˙ßTcCů˜}f]Ž×Sř˘Üé×6Ńč>2,.Š[Ă7¸‚9ýÝKŕďYř?ŕçƒěu}?[’ôé6Q˝ľ–“qs$Mş‡ĐůdœŕpżŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐŘĐţfY—c˝˙…ŤĄ˙ĐßřLŢ˙ńş?ájčôń§ţ7żün¸/í­Wţç˙ž¨ţÚŐçţűęěh3­KąŢ˙ÂŐĐ˙čăOü&ořÝđľt?úřÓ˙ ›ßţ7\öÖŤ˙?ó˙ßTmjżó˙?ýőGö4?™‡ÖĽŘďájčôń§ţ7żünüVЇ]Ćcţĺ›Ďţ7\öÖŤ˙?ó˙ßT‡YŐ[ů˙ďŞ?ąĄüĚ>ł.Ç{˙ [A˙ Œ˙đ™ź˙ăuçú_ÚĘňŐ|@×vŠ{i%´ŮۂĹdU egĄ*qOţŘŐ?çúűę˝WáݕŞh0jBö˕o6bIfĂ9č8 Š”#—ŻkvôEFnˇşĎ˙Ůgwenhywfar-4.15.2beta/doc/dialog/images/cocoa-6.png0000644000175000017500000012216412364015347016762 00000000000000‰PNG  IHDRĐ0Ż\ xiCCPICC ProfilexՖgTɆŤ{r"Ě C†!g$ 9Ar•a† ă0dDEdqLˆˆ`X0(¸*Aրˆb`0ÇdPŽ‹(ˇŹçÜť˙îŸ[çtŐÓo}őuuW矐;9A ,@*?CčáĚ ˆdâ€H"‡›.pň÷÷˙Ř>ސxňŽ‘8×?†ý÷ i^l:Č™ŽáĽsS>‹đ W Ě>…pv†aTÂt!˛A„+Ä?ĎőbŽ™çós1Á.HL?x2‡#Œ€ôљYÜx$ia>/‘Ůa{n‡‡°xŠkÄ\…°nĚyâ`'f1'‡żČóD욘.HáäÎÝü/ťÔ”Lä{Í5*ғů)ËĹgCGŽ1ÇŐ{)sg6§ÇňC‚t~ĚrżŽş.° Ăůö^Đó\–/plşŰbž$Ž—řĚćň 3C8=+Čmó‚Ă˜뺨Ç%şłôÄ öⳒ×x/î\Ŕ\ŕ 8 d€X ̈ÍÉ@Ö—5‚\ab|BÓ ůăb ™l>×ؐifbj"žţżiâZ›ßě{Ć\ AŒ›k91Ř%#5ŕůˇ@ł.ňákڊАşiŰĘÍfÍçC‹ "Lň@h]`̀%°ŽŔ x? "Ŕ*ä '€T Ů lĹ ěťA58zpœmŕ<¸ ށ[ ÜO€Œ€×`|Óá Dƒä!UH 2€Ě dšA>P ECńʄňĄMP)TUCľPô+tş ݀ GĐ4˝ƒžÂ(˜ ÓaeX^ł`'؆WÂńpœÁŰŕ*¸>ˇÂ—á[đ=Xż†§PEB1Pj(# ĺ‚ňCE˘âPBÔzT ŞU‡jBu zPwP"Ôę ‹ŚĄ™h#´-Ú‚ć˘ÓĐëŃečjt=şݍžƒBO˘żc(%ŒĆĂƄcâ1٘bL%ć(Śss3‚ůˆĹbXŹÖM®Ŗa÷c›ąŘě0v ‡ĂÉă pv8?—+ĆíŝŔ] âFpŸń$ź*Ţ ďŽÄóń…řJüqüEü ~?M"hl~!—°p˜ĐA¸M!LĽ‰:D;b01‰¸‘XEl"^%>%ž'‘Hę$kR)‘T@Ş""]' ‘žŠd}˛ 9ŠœIŢF>Fî$?"ż§P(ÚGJ$%ƒ˛Ň@šByNů,A“0–`Kđ$6HÔH´J Jź‘$HjI:IŽ’Ě“Ź”<#y[rBŠ Ľ-ĺ"őZ/U#uNęÔ”4MÚTÚO:UşLú¸ô é1*ŽŞMuŁň¨EÔCÔ+ÔaŠŚAsĄqi›h‡iWi#t,]‡ÎŚ'ŃKé'é}ôIŞĚR™P™™™ 2"ŠĄÍ`3Rۧ÷_e•edceˇČ6ÉĘ~’S”s”‹•+‘k–ť'÷Už)ď&Ÿ,żSžMţ™ZA_!@![á€ÂU… Eş˘­"WąDń´âc%XI_)Pi­Ň!Ľ^Ľ)eeeň^ĺ+Ę* G•$• •‹*ăŞ4U{ŐDŐ ŐKŞŻ˜2L'f łŠŮ͜TSRóTËTŤUëS›V×QQ/ToVŚAÔ`iÄiThtiLjŞjújćk6j>Ö"hą´´öhőh}ŇÖŃÓŢŹÝŚ=Ś#§ĂÖÉÓiÔyŞKŃuĐMÓ­Ó˝Ť‡Őcé%ëí×ëׇő-ôôkôoŔ–‰ű  1†Ö†|Ă:ĂFd#'Ł,ŁFŁ!c†ąqĄq›ń›%šK"—ě\ҳ仉…IŠÉa“'ŚTS/ÓBÓÓwfúf\łłťćswó ćíćo—,]z`éC š…ŻĹf‹.‹o–V–BË&Ëq+MŤhŤ}VXt–?ŤŒuÝcíl˝ÁúźőK› ›Ó6ŮŮ&ۡ[Śł,vŮáeĂvęvťZ;‘=Ó>Úţ{‘ƒšÇĄÎᅣ†#Ďń¨ă¨“žS’Ó §7Î&ÎBççO.6.ë\:]QŽŽ%Ž}nTˇˇjˇçîęîńîî“k=:=1žŢž;=°•Ů\v{ŇËĘkWˇ7Ů;ČťÚű…žĐ§ĂöőňÝĺűtšÖrţň6?ŕÇöŰĺ÷Ě_Ç?Í˙ˇl€@MŔË@ÓŔüŔž ZĐę ăAƒƒˇ? Ń É é •  mýćV& _ž.üV„BDbD{$.24ňhäÔ ˇťWŒDYDGÝ_Šł2gĺU ŤRV]X-ššłúL4&:,úxô ǏSǙŠaÇ싙äşp÷p_óyźńXťŘňŘŃ8ť¸ň¸ąxťř]ńă  • ‰.‰Ő‰o“<“&}JöK>–<›–ŇœŠON=ǧň“ůÝkTÖ䏊˘4›´Ýi“BoáŃt(}ez{15˝™ş™?eeŮgŐd}ÎÍ>“#ĂĎéÍŐĎݒ;šçžwd-z-wmWžZţĆüĄuNëj×CëcÖwmĐŘP´a¤ŔŁ ~#qcňĆß M Ë ?l ŰÔQ¤\TP4ü“ÇOĹĹÂâ›m7üýsâĎ}[̡ěÝň˝„WrłÔ¤´˛tڌ[vsŤéÖŞ­łŰâśőmˇÜ~`vÇý;ëËĽËóʇwůîj­`V”T|Ř˝z÷ĘĽ•÷÷dîUůTľďŐÜťcďLuBő˝çšć}Jűśěű´Ÿˇđ€ăŚƒĘK~ý%ń—‡ľľ­uÚu•‡°‡˛˝<z¸çëHĂQ…ŁĽGżăŐÖw7X54W:ž˝nĚl?u˘˙¤ëÉö&ŁŚÚfFsé)p*óÔŤ_Ł˝Úűt×Ö™ŚłZg÷ľĐZJZĄÖÜÖÉś„6Q{DűŔ9Żs]ś-ż˙věźÚůš 2ś_$^,ş8{)ďŇT§ sârüĺáŽŐ]OŽ„_šŰĐÝwŐűęőkî׎ô8ő\şnwýü ›çn˛nśÝ˛źŐÚkŃŰňťĹď-}–}­ˇ­nˇ÷[÷w ,¸8č0xůŽëkwŮwoÝ[~oŕ~Čý‡˘ˆňŽ=JyôöqÖăé'O1OKžI=Ť|Žôźî˝?šE–˘ CŽC˝/‚^<ćżţ3ýϙ‘˘—”—•ŁŞŁ cfcçÇÝÇű_­x5ňZđzz˘ř_Ň˙Ú÷F÷ÍŮż˙ę Ÿy+|;űŽě˝üűc–~čšňŸzţ1őăô§’ĎňŸëż°žô| ű::=ƒ›ŠúŚ÷­ăť÷÷§łŠłłސ3çPHÇĹđî”Ä+ ž˜Ř9ď…ç" y˙ްŘÇĎyů˙äyż<o Ŕ‘NB đDĆdÔFFŞ#bKě`sóĹ QÄ-=ÎÜl ˛ą&Ÿggß+€ëŕ›pvvz˙ěěˇĂˆg@gÚźGű€Ľşš›YőĚöÍ-˙ąű7…čŞÍöě pHYs  šœ IDATxě €ŐľţĚĘěò/äÉd5€€˛ˆE‚>ŔDŢb‚ćýMŒ/1H !y€&OŸ¨€‹1ĘbŮa†}™…Yţ÷ť3§šŐ=Ý=3=ßŐâîˇnýŞŚúëÓ§nŐ)++     đÔ Ż[‘     €4Ż    ˆ€t°Ř”H€H€H€H€( y     @( #€ĹŚ$@$@$@$@$@Ík€H€H€H€H€" AŰŤŽiŽşIsÂ$@$@$@$ĚRÉ1ťVrŤíŘ(Šcŕ/Ї@$@$@$@ŤMl_ąšBŮšŞ˜$   ZHŕJÖW”€Ž˘hŚťF-üĂâ!“   \U˘v븒Äô§. #ÍUÉUé{U]™œ,    |J˘Čfža÷ý´Ĺô§" #ÍáˆŢpÚ|J×wK$@$@$@$ŕC ąNů4ÄôeĐa çP‚8TĎš‘HŰűÁ2    Č „%€aCľUg‡¸œBú˛č0„s0ĄŹÜaśHg,w\ŚI€H€H€H€"#PŠĐ­.œvÁÚ+ˇC_!]ăşńě'jýĘôÔERŞ­ŽÇ˜H€H€H€H ćxĹŽ7ďî9Ňş íkZDט€Ž&áLťĺnÚ= n:œ6n{ŚI€H€H€H€˘#TŘ:ĂšmÜ´ÓÄ÷ĄBżś~evœšŇ5" #Ď~âÖ[Śy]¸šU‡6•Őë8ŒI€H€H€H€˘#TĚV Ş^ë4Öxó(÷–yóÚˇF2ŹvB<{Ź7uË4­q„§–űľC]°ríǘH€H€H€H z ´~ĺĄĘÜ:7­łő–yóś]u[˘ŤU@WA<ť"WÓ+ Pyo]°>••k=c    đřŠVÓ5œro›`yˇÜMc†•ĺíQT§ˆŽ6Śxö ]7Żiq°á¤˝íźyw ԅ ‘´ 5ëH€H€H€H Öx…j¨ăsŰşiô •wëüŇ~e:PuśMu‰čjĐŐ$ž]ńę—ö+ -×X!şu••šőL“    DFŔŻÚ3T™[ç—ö+ø(V§őˆÜvĺ%(4!‰2Qe]Eń Ńë _ż´–‹őĐ˝őZŽXë´Ě›×rĆ$@$@$@$@‘đ RoŁi™ĆşÍWťchÚŰÇ;ŚśÓň@\U]%D<{ĹŠ›÷Ś˝yĘ"-ńé:w<ˇ­Ś+Ť×vŒI€H€H€H śPጃˇyż2ôwËÝv‘–ű…2 îxśŹ*":^G­ĄŘŚŢ´ćCŨK0[ŞŮŇ*Ň& ˆlí‹2ÍkŹĚ6vÚkž1    @x.ĽŚ›–iŒ‘4­ąŽŽźn(+2Ű9ł1ŰyłiŤëLą ¨Ór¤÷KŰĘęü'j tÖg=(ĚWÓĄbˇNӉŚoöÓO?ÝsŔ€ˇ7iŇdpbbbk Č@$@$@$@$ w9räm^›>}ú?ĚQ55‚ iż´–ůĹn™7|ÔţĐŐ) Uôb>ÁŇuQY´ boZóY3gÎüěđáĂKHH¸áüůóRZZŞý“    āşuëŠŃzR\\źaٲełˆ^cëDĹĄŠ€Vë˛ćQ­eHť"Ń-–ŽZ@GĺÂÄúŒ‰#¨ř '­âYű¨ŔÖňôoźńvăŁrC~~žœ˙    ÄHx–¸¸¸úöí{‡9şMf;e6żĐ†Ž@6Y[‡rˇMeiô hÚh|ĄŁЁ˝^H¨žPrqJ1Jľ­–ycmƒňÄĚĚĚÁ°<3    Ä6éěěěAć(Ÿ7›jF=hZU kňh§1Ę˝mPŚAŰj>޸:´{p~i”iškš7ƁĘëšo­Ě†2߀:ýÖrćĚŮ˝{ˇœ¤„šśQgéÝqÔĎh(IIIvŽĄćlţ,'   Ť•€ŃE­ĚÜĄU0{-ĎŢCƒBƒ°ÓőšFŒ őŢ´­ŒôŸˆ´tÁ•ç…˝kÄn-´,œ¸.Dg¨PRR"°Pďßż_ t!’srr$%%Ĺ ÓsçÎ „őƍ­ŕmŢźšőą1?VÇܡo_`Ěú HJ˝zföu$ߎyV6lŘ`ÇlѢEĽcbŽpCůçÎ5ňż˙ř¤e¤JĂf ĽAvk))-‘ŁÇɖCkeýΕňšëÇÉgŽýŹÔ3űƒ?    ÔĎťŠ1‡­B:W0Ťöt˂ö…ś5˘]…vĐvnEÄÚílŇ:AkڍݴśAYe›BŤ[}}CQQ‘8pŔ čF‰nYYYV@Ÿ8qBrssĹ<ŮiŰ`f͚Y Żď€ŚcNâę–ĘůşŚ_\™Ô3sL,ɰK¸ŚKËNu$7czçÍ<    ÄčDĐ8$Ń*†˝‡Šâý´ĆhŤőH{Ű ,˘ś€6; ´^cmŤy‴ßćŠg¤ăB ];™ŹË´şşŚŞÓ…Ču7´E]¨qQë2„ˇ+ĘÝ1‘VQŽś•Y’”/͛gIfz†$&Ks\]‰7Ž qfŢ8§ĹĽŘĚˆfKJ:/š‹ě=u*äÁlć!ĸD{ö Š %ŢluĎĹRRPGf5 9f°}ąœH€H€H€ŽrVšcPńŒXu˘[†vŽó fôq…˛ćMqô!,mD#vNpŰ!ínčďćýŇ*¤ZĽ+k`­gŹ‚áŠgĐv§fúúŕÚ˘O(ą‹ąf3VďP­1ĆC_äˆŃ}BŮ˘~GٞˇFŒó†ŃfE#¤Sâë1ˆ!Ľnă§]q]”˜/žĘ-9ׇÓvä?$@$@$@${T âČT0Ť8††DđĆ*”ËkË˙uűhÚ­ż( Ík´]ĽíÂЍ|iĆ;yÍť-QŚĺnŹĺˆU<ťéşjéusÓxa Ţ<ˆeë­%z_5?,Ăm ¤ąŒ jw,MŁëGClŤˆÖńĐiŒž§OŸśoDťPsmŐMœţ‡ůä´´ď˜* u̓„f‹Ż t™I—Jb]óRsڝ'őëIëěë¤(ŸŻ1×ó˜H€H€H ÖP]ˆX-Ňj‰hFÔš1Ęľ=Ňn˝Űžź6ŠŁИ‚Ć幋˙EťĄÖÍťiĘÝ|ĽVßÔÔT+xaƛ]­VaX‰!´QĽ„úr>x0í!ĘŃí]<6„6ÚşKçá`˝Ąđ\™|ŚŮPْűÉK3Ž-“¤¤Žq˙¨řŐÁźŒPJŠË$w˙9™wNz6&…çŠhö‚džH€H€H 6€TÁěĆŔšW= H#¨@.ϕ˙ëÔZ‡>Ú>Xm{Q€žh'ŁwŠlŇďഭƁ€Ęm:”Đ5mŹŐnX‹V`XĽáç Á a Ą 1Œv°>Â,` ´…ĐĆňt"c" żŠgŒ‘ ëv¨11FF˝†ŇľŃPŮą˙M):Wl–ßːÔ3'#ĆĎć˜ůŸ’#ÇÎJˇ&Ă$˝NC9uţTČ1ƒÍŸĺ$@$@$@$p•PMaŤ˘ /AąjHÄŽÖr?AŹmM—Ş…h´NN÷îć‘ÖźkšĆ ioŹu•ú@C`Ăş  ׋3gÎXˇ WěBHĂG"mÔ2m3žÜ1!Žąn4^ž‚4‚Z°áśt¸cBÄgdäČM­'ȎĂeďžOŒ(? ý,Ĺç%=Ą˝ôťößäĚÉłVđc_Ąć‰z   ˆA-hŽMÝ6 4F­sËC jôuĹľ7q* • h#>u’~ƒyëÜ<ŇşĄŻÖi™Ć. oYĽ/RÁŔźxývaaĄŇXëYẀ5ĺŻę÷ŒCŞĚ˛íŽ ż1á˙ɘØŹ×-3Ż3Ž!Ÿ źţjˆ˙#s­ĹmŐĎÇČ@$@$@$@ľˆ€Ť UŤ`ÖXŰ Ö6•–{Ó~y”Ůíkt +˛ľ*W* -˘ˆ7čä˝ĺn^ۄť‚şR ´ťXƒ!DT÷ëń#ö–š}ƒĽŤ{Lzˆă#GŽX÷wżjmÖšjŢmĂ4    ÔЃ*”Ť0Ľ%őĄÄ/ęźm*ëWŢŤâßHôEƒdÜC¨7í浏Šç@^0‡´˝Ćnż2ˇ>XZűiěśó+sëýŇÚb:XĐ6ÁęYN$@$@$@1LŕMhŽUE4Ű՗šWQŒ:ˇ-ęľé*‡ęĐ~˘enŒt8›÷‡?üĄĘÉH€H€H€H€Ž*ЊĄ,Ď8WOęÁĄĚĎŽpÖ:mu áâ4Đ´ăŕPćnî7¤ƒmúŽsÔkZăŽfe?šr    ZB AƒŁÍĄţËlxH?Ůťą7źwƒŔņrMklŠĺHŁAc<+H—W]üouZ udŃČkZc-ÓXË˝ąŠm”3    Ô.ЀЃÁ^­¨yÔŤ^Ô2ÍCťi´­– ‹f0de}uâh§iíë—×:´ŻĘüПH€H€H€Hŕę# PuĄăhüňz”¨Ť,h˙ĘÚůÖëä|+=…:=Ő6ŤuŢIiލŃÁÍKűí‡e$@$@$@$@ąK ˜.tËqôn^ÓJĹÍ#,hĆÁÚĘ#ЁN>‰`; VŽCh=bÝtNˆľ^Ű3&   ˆ}Ѐ^M¨ZG_™F VŹ<"˘:ąˆ:iŹŇX›!ŻešÖmźiˇŹ:ç‡qH€H€H€H€Ž|jHu5$fíՍšwŰiZRókyÔqM TLҝ¨7­őZîćÝtÔǎ$@$@$@$@W%W şiŒ›GZƒ7íćľMľÄŃ hĆáNíýúhš_îŘlG$@$@$@$ü4Ą–y0Xšˇ›GËsaţ[ÓËŘé4üLËt⣏ˇNÇaL$@$@$@$űü´ jEż:Ńr—ŽöqËŞœiöźD%ŘÎ*›˜ˇ^óněM#Ż[°ý˛œH€H€H€H 6 ¨tcŠć5íĆH# M¨PY˝TځC čP{öŠsHŤ˝ÔźĆh§iÄşšĺH3    Ô.áhDˇKGËľĚ՘Zu\ş˛IčhŒöšö”[^ٸŹ'   ˆ-~ZĐՋZŁÖ´Ć5N˘&´„ĆîÁ L7ˇi-×Ř[Ď<    @lP¨ą÷hľą7h™ĆŢú*ç#ĐáNÄŰΛw'Ž:żÍmĂ4    @í#ŕ§+ӕ.ĽPmŁigűTewBnڝŒ›Fm§ą[ďMťí˝u狊ŠäwޑmۜɊS§ŕńěpŔ‰'$++ëBSŐF€lŤ ĺE‘ëE8Ş5CśŐŠÓööŠk¤N]că*ŤŰű‘Ĺňr0r(+-•ý÷T˙ ŤĹ#–••IzzştěŘQnšĺILLŹ.áę@ý눤˝{ĺh:˘yWE@G´Ł ÝƒÖ& @ë´<ęâů7żů4nÜXžüĺ/Kƒ $..î’ń˘Ú‹RgÂňrf†ĂÇ;?–śmŰ^¸š+M˛*'Qd[q1UĄ^Ž6ŽçăyÍş<ÂLaU7ŻŮ ˆU`¨§AĎŃŚyrMłF3Su{‘n×ćđł+Ękb٠ȗš/%G•ˇŢzKć͛'÷ßMˆh1vŻiÝ)]śt¸:’IFŇÖ=PôóöőćÝöa§WŹXaEó=÷Ü#uń׀;şZ¤=‡m‹†,/VÁßâÉWGő_d[ţWWÝlÉľf¸bT˛­~śygK$ťČÜgÁ|hŮĎ-÷ƒ •,/Gp ´ŻH•GŐ/żhřřŹř4ĆÇՇËP¤tUNĂ=z´,řÝďškȐ!Ú¤*ą÷bGŢ[îř‘ôC[÷0}÷Ž€öí\IĄ;Y7nŢ|%CE_oF~řĄ<đŔv䏾šR<ś)˙ń!P\Z"%,}ŞYTd[x!ş’k8UŹ"Ű*ôé~<żDΔ‹=÷ŁĘýđdy9¸H8€kI‰Šhđ,Šˆ€k‘Fş˙­ˇĘŻýk—kb5Áś¸¸ŘŢĚôúŻŽc9ţźÄÇÇ_K5Áľş8†§ŚÎ]¨}FZwšŘ~ňÉ'ҤIIJJşdŠ0Ž`Ăő á\Q™äŸżrîąĹř[OH¸ęтk,~v}Z÷ e‰žJ0× >KŤűóĆçâSěőÁę|†‹ŹčrßiüłŔĚ˝őŢ|dGgZçççúŕäâŤÂYO|ůn ㊽թHźú꫒››kč—óGů 7Ü íۡ—… ĘČQ#íŢíuGn{-CIůŚM›dÝúuś{jJŞ´nÝZz÷îmçÉ8‘î7Üööḛ̂ThvŚĄŕożőśźńĆŇ´iSËň–~ˇŘž‘Œƒ5Ő~üă%3#S^xᅊ#*.'óHŮ.Z´HΜ=”É}÷Ţ'p_şůć›ĺ;ßůŽďuřÚkŻIă&ĽGAÇńcŽ/ŚË–-“x)ŤÍ›6ËúőëmyJJŠ´jÝĘ^ĂuëT¸QUôĐö~ăŁIu•GĘóÂ= /7ŻbŚĺîÝŽëVmóŞěř† fĎݓßyŇN ˛ö:ŮËĹóŠNśíÚˇ“ß/ü˝Œ5*đ ňß×ý]ž1éV§ĽĽÉ›ožiÓ=Ć_ţň—ň‹_üB6lŘŕ{ŁƒŰ÷Xďő٧wŸŔ烡˝ÝaĹ?î85U^P\&EJqÝđî›ň÷UoHNŁŚŇĽG/šžO?),,×—üNÜyˇ¤gDţđ÷ńŁšrWßÖ2˙ݤMűÎî!űŚĎ™űŃňWŮş¸¸xiаątżá&IIMóm9 Áľ4?ť†*ˇÜ|‹˝Çť<ŤűZ5D—+žQQQ‡<´„tƒWj16ďl´žŠť Ż{u hżÉ{ËźyŠ–#Ö´ÖEă[P˝zőě ^3bŃĺëY×\yţŮgŸ•sçÎYĄ§hÖŹ™¨ťéŚ›ŹŘŇ TŰhŹź[śl‘kŽšĆ>šę×"ó‡?üĄÜu×]ňŃGÉ| Ÿ˙ü炍9Ęńi­N—\żĺłó›Ă˜űĆŘ FŽ)›7o–7Za€~í?•rsęq}ŕřüÂĺ˜g¤lß˙}9~ü¸.ÄÑ#GäsŸű\`ú#îaÉ{\îąŕ !„ágş&ňs„W8×p`’&áΧ&Ę#ĺŠ9<÷ěsž÷€Ž]ťÖČ|OŸ>-°˛vëÖ-0>ΛÝĚŻ>5Í)šńŤ“-ž\ëý5##Ăóüyó­OĺŹYłlţäɓNĘD9šťĄŽ%’ë3Ô8vBžŞŁ}ĄzçK*>›*ĆGÎďĂQ˟xđ^9yü¨ôżc”ěü×&Ůňá{Ňí†[ä̙ł2˙çĎĘu&œšiŽĄĐăäÚo-ˆMš_c÷|žâÚ+6ą;§`ă=vLžţ°Ü8p¨ČÖn0żÇËďŢÜě+˘ƒSĺŕzľvíß_~~ !ÁŔňŢău&Qפ;ž›Ć~ ˇ†ćŇ_sÝvUHťşĐďOCŁź|"ĺ;ňćýڔˇŒňßęĐQNŁfť%''ۓŠ?)ŕg=á•í~<3gÎź¤üŞÂÇ   @>űŮĎZ+ DK°““#?˙ůĎmőŻ~ő+yüńÇĺ™gžąDësšĘqܑ;V@řż˙ű?űe?Ájˆd ís9âOs^‘˛}úé§Hž|ňIůűß˙.?ýéOen"Řq͙3Ç6 VďŽáM‡šď•t ‡š§÷˜Üźß= Nî˜ÁҰx˙çţ§ý‚ímSSűôî'š|u˛Ĺţ˝÷׾k×ĘמöľŔ=Ǐ“ňŃ8œă¸’ŽOď|‹*ÄŞ>ߎ’WĎ[žo÷Yˇę˙äw+ś‹/îąĺ:‚ˇ^zśüćÍvĹś`ă üżfL•­ÚĘ×ƎSRѧ،]ĘÇ÷Gíă|\:tť^Žĺ–/ ę$oţĺOrÇçżlť{çď7Vw9¸ę˜ĺÇúß+ńłkÚ´ivŹď˙ű—L>’cť¤söj0׌ý]CsՆpńoŠ1zÄ8™XĘ?q…ÚJL=6´Á…ˆ‹iˇř‡ľ>aýń\ţ7âów…qôÖ}č5üąš†ľLcÝŻć5ŽÎňh¸‚ŽĆ˜×ZĎľ÷˘šöŔuř;Ĺß6Ž]ôAŮăÇËË/ż ŒfO­`ŒuęŸzę)Áß'úâC}Ýs׾âÜáK’ÎEÇÇ>ܲËY^lő~Š5űq x˛"׸ŔÝČË ÇŽ×>V¸Ő<ČV¸câ˝>ŰůÜcűřÜc1–ë‚Dď_˙ú×­ĄE™‡şŸ›ˇ<ßřęœ/5~ĐĽrÎŹĆqÎřsäŸÇVę[^—hŻ•wß~ý’öyf‰ąńwöwlˇă<÷ÔCňô#ă%ߎY*GňŽÉä{o•-›Ţ7–ęŮňţڕň†đ IDATڟ+ăďč!+ŢxŐîŸY经“ĎßŘJf~k‚œ8uÚw>Ĺĺž'…F­cž iő%=łžěúř#ÓçŒ<űä$ůĘ]˝ĺŢ[ÚĘ÷űŠœ4r=ŽżŻ~[ž:˘ŻÜݡĽüÇÔ/Éžý5™ó“™śÖŻY%_ŮWFői.O~ýn9třČ%Ç’›áŞçÉËב÷ď(ÚĎ.|f=˙üó]<ňˆýű]ľj•Üx㍂Ϯ{̯˸ft>¸7ŕ~ňCsżĆuŒ/ńú7?{ölŰ÷ˇżý­ý{Ŕ—IôÓűúŕďöń;.ô‰Ś\稹Ă|”baImĐľĘ Ą‰S;n°Œ}÷Ýwqď°.LˆUÜĐńsë9ăçsş"›úc=&ÝťwˇĺÓ§O—áÇŰ5¨÷íŰg×EDűŸţěgöçrˆ´…0ĆćäńaÇ7ű˜iÔ¨‘đ-‚đýć7żigĐ AÖWsčĐĄvˆ&L°.*ŻźňŠuĺzçΝv,4€ˆlٲĽŔŞó?˙ó?ňřˇż-˙‘Ě [¸Ą~ýúňĐCÉżąđÎęŐöe&xćômgNXAeďŢ˝^X¤}÷îÝvßřB?I|xáŠßuëÖ nP‰ćŁ{ď˝7pžžţŕƒňď˙ţďňđĂ˸qădéŇĽ7řˇ6í żň•ŻČ?ţń›†›N$ÇŚÇP]q¤lÝý⦆ëÖőýG=ĘćΝ+¸Fćϟ/Ď=÷œüčżţË :ԃ/žœčq#klqŐ5âţÚôÇ/!?ůÉO¤WŻ^öşFßBóeĘť?”ë5Œ:ü­č5ÜÚ|‘ńk>5˘á nű}î¸öFú\{x¸ ׎÷Ü+đs&Â'{öHťĂ‡ÇîeŒR\§ŕôç?˙ŮŢ/ŔÉ=wó*ÎÝ9çŽ&™…;vu˛Őű)âřqʏnżřĹ/Zśxaƒ—öë ÷km܋Á˙ťßýŽ=Ođ›öďőůB˜÷XěŠÍ}eňäɲuëV›8p`ŕ܆şŸyç,żçhĄÄŐ+’2cč­SaôET§ÂăŇňéwďů錇ä]s˝}â IÉl`۟=™/>ůXś8'yńEŇăîGĺŇČ ˙ď‡rëŘGdń§IvëĎČŠ´ŽŇf@3ińî;RżYkôĹÇ%!%]6:m§ůŁé“műžŁ‘yß-‹ţźT>Ó˙îňY9ó<~¤üól{nąœŢ›/ď˝ö[9qôˆd´ď'›HFŰ>rß˝ß<ńÓIýdń’żHˇ›‡ÉÉÜňăÉŁĺć{’/~XíŢ*řţDépĂ`ůç"9{P~üĎË=ž$mşß(ţŃC2wÎ/dŔŘoŮů…ćS^ Ž‘Ü˘ýě—=ƛ/Îp=fŒ ,°Kźáó_ ńˇŽ/bS§N•_÷Lĸ7ŕ‹ Ž{ďß< =ř˛/oßúÖˇל÷>Ą÷řËyŸ°Ţh–’’âZ# cŢ}Ř|`éˇ!œ`ÝěUĆ?°p…Ű˙÷‡ě›6žőAč"ŕ›+,ŠđW‚`Őˇóčü233CşcŔzxÝu×ÉŽ]ťŹŘÁ‡1ČÂöƒ‡¸ ęá‹€v˜3ŹŇ°¸â'ĘťďĆ Ž<ŔżrľššBtĂŇuýő×[K:öUÓ˘ 7ŹŠđ„š“Öá&„9ƒa‡ěT!2pcÂML1&fĂÍĂ pk/XMá[úĎţÓVăËVŰŔ‡ ¸ÂĘĽĆójLăF wXńaŻ‚˝wŢiŮ\{íľö‹nţ°ěőë×ĎňÂ5vńł—Žěž´ĺ•[âw÷ÚŤě¨\ƸśńaŚxŮ„˘†HϝöťŇc?śŢ9ăo†°—PœP‡çD`9Ćó#0šüë_˙ňČť>CÝc˙ô§?Ů{;~!@ťűˇťčžĄ÷ŹŞŢcńÂ#KR.ŠŘĘÓÁËŽJĆ<5_śo|K~öPŮ˝yé[Ţ­ă¤d5–Ńß6÷âßýHţúŇtŮżíŸ2řv_ńÉ—$ń‰ő$9ŁĄÔ‰Ośĺč?xÂ÷¤ű 1ҨÍuҤíuśŸŽď'ÚżúâăňĂąĺľ_͐ۿň´\{ý‰KJ—îƒÇJjśYM%­4nÓUöýëvž˙xkąÔO[Ć>jÚĽI󎽤eçŢö+ĆďÍE’šŐPę7o/'̓-şô‘ď­ We|ŔӞݓ‹ Dóم‡ń+( U‹/–ž}űZ‹3ŽĄ† Z7 \ƒ0HŔ"í†`óŠŠŠöoşîŠ4Áú¸ăÖDşĘˆŤňÍÜż07hŻX1mĆ „7^܀ąŮ||S6˙!T&`Š„Ă jĹÖ15‡_4öXÉßń°!,yHăÂŇ6Úß[Ә>@aQ…ePE ęń3 ,ˆřé"zűöíVdcó™Ď\´”ĄÖřVë<đ€›žë›l…ř'ÔÜCtü‘Ă1^°kXŰ\ÎóöÎ=œýűÝ*ťöÜó űDYeŒŃÖŰsŹě܅s5ŮŚ:Ů*/wL/;?Nhk!D‚ w—Úť>CÝc!x`´pď;îüBÝĎ"šÇÖKŹ+ɉĺ÷&üUĂ~ę ~ĺ=n˝K:öě'řÁ×dţw>/Oýi‡$%”“œ'ÉIĺéŽ˙v‹tę{ťŹ]úßr˙ţN22ËŘÄ>âęÖ1ƅşRĎ´Ĺ~‹+ćŃŹMG;'ě711IââÍ+ĆC?öƒpýŕ{Ľuˇ>ҰE;IŹWţ+@ŠůüZ>˙ů`ĺÉhĐDŽ|ň/iŃĄ‡ç܉ĂŇôÚŽ’–’8޸¸ňš€ĹŮc¤đÜ)yő§Óěřř'Ţng °"ĄóqËÁUŻ1ˇź˛t¤Ÿ]ř 2VI‚řyÁ„8ökż°ŕk řrçęo޽޴?âP}ÜvUI[ą\1€MČVO™ż§şFJ|ž@{ÁŔ‡Ď‘X ”C !,ż˜¸"ŕâÔ y¤5¸iˇ ĺŢ5ő"GŒ:o^űă'–?ţńÖ"ŹnŒ{…Žç7śöذnŔRč żř6‹oŹřr!Şcág#\źđ„+~:BŔ~őŠ]üáöďßߖGóî/šžř€ƒ„;VŔ—ż9Á]v,ąć|aÁ—°Â|pÜř v^ĐNĎ,ŮŻżţzŕ|čŘU96Ł*qUöŻ,ôÓy¸Ç2䴝_˝r˛ Í?ŕ…ż)íƒrÜ@˝í´=ʃ]ĂÚćrĆŃpEż~•]{.#¤qÂĘ.+/s°@=˜şý˝íGpŰ؂Oń?F•M}üú‚Ë yˇ­'”šm”wŒ…€ň`×g¨{,žĚăÝĆÂłřEűŹŽ{lr|œ¤$• Qě# (/|lŮbżň”¤2ć[?–ŁÍł7­“–ËďI ć˜+Äíż6ސ˝[×Kç>ˇÉŞE?‘7ßaqԐĐ F¸ÖĂţ‚.1˘!ý+ć‘`6͗OĆükÚTěŁăőŸ•k:^_^Uń `ůźń{yâ7ë$ٸ‡üü[w ö…q:Q˙ţ[4"ݜK+ÇÍX§IšYző ›]cć/Sž˙Ťą_0œŘTŒ_Ń-0/pŐkăBŁđR‘|vaD|6éK_˛.ƒřű‡Çžń‹4buŐňî׹{Ý" óöÖŁÎ[ćíƒ6Ő\ń7˙#eÓp9ƒÁß>/bY@—˙UŕŘc0ŕÂ2Hřy.HwÓ No„Čť¸y7í­óćŃN˙řŕ„ĹbĘqqAÜbRwL7ńÜ2MòIŒż]¸mœ:uĘśĹE‹ŸŘńS=~&‚P…0ŽýŰ´icýˆńpŹh(ĂR}gϞőݗîÓcćm§yXÉńs-,Ę(ƒ•sÂ7ćPsBž˝ĂKůĄ/üÇđG‹Ÿhqܸ !ŕ§Z¸ĚŔb¨űEšŚk@î6đeŗüÔ ÁŠ+lˇ›F{÷źááTüDWXXŘęaapűE’Ž”­;ś{|••Ł­śńöóćŃź°’ |>ńÓ$~QAĐ1źąßnpO- ‡­ś&ކk°ăŤěÚĂŻF¸ďŕ "žŔÂÍH˙Ţtî~|p˝Ăľ ż$…jl^čŁ×$bÏ5VşĐúŞĆŐÉsńŸ7_œěNĚ?~Çę Łî™ř Ďŕů üšUÝ÷XXvë%&Ńj,Ź&Ž—d҈+6oů‰ý˞Mk$ŢŕC›Ý˙4żÄ™{ě5m;Ů<Ž×ö1ăQúŰY_“‰3~%_Ÿő[9s"Oţň‹ďĆoŇŞŘţá…ýš9hÝo]ľRűĚ'`ń6VUmŻó?wâˆ4hz¤ĽŚËĄíďËŃ;Ľ(˙´Ý×ő7ÝaŇgeá3ĘćŐËdî÷ž,Çî‘#ě1ÎMŸgR;'+~˙Š[zŢö)8™waž!ř¸Ž~çذţ1ž~Öýşçe8ŸzNąo|řÁnď˝÷žőĄÖzżăZ˛d‰Ž:ţQóT:VZAŹí!,ŃNYhšć5UNƒśEŒš#¸eZŽÇ…<ú"ŻsĐ´öCŢmr|ŕ'ďţýűŰ/5đńÔ~:Žö×}¸ü˝u^Nx¸SŒE[ˆt°Eě7žîuîŘÁĘÝvᎧźíńwkÖ{íáZÂţÁ ×!ň¸ŢńËüď•Ú¸imqŤ/#ĘÝvzlĄ¸şÜĐXëýy\ŸĘűĐvë|4Żq¨ňpÚ¸ű Ćăčńi{—Ęđó¸Ë }ĐAçá7Ž[ç×ő.ë=ƒăÁ-Üca”€Oöď˙{{]⚸5ážßT?Ôý ăëqi{ÝŻ[n'D´ŮŕžPĎl)ÉFH"ďS~ěŕÇňü´ňȐŚ2}t7Yő?/˃3çIËk;H’鋐”'IĆíbîÓĺ֑ăĽç-ˇ[——)Ď-’•Śý‡Ť–Řą~~˘œČŰ/ßŃ^vl|ۊwŰßX–u>qć8 /żů`î‰N{˙1“äôń#2íś&ň‡˙÷-x÷Wdí_+—/’ěőĺ[/ź"gŽçĘߖÍ5‚yŒ´hŰERÍ/­ŘoókŽ•oţd‰ŹůË|ůć-íü~üđańš0τŔy ç\Tĺł çőžűîł× Ž!=ßř•Ťh`ý}¸âY$|Žé|Üë}ź×*>ó!ˆŃżDk˝~Ł6Ýgu~v阺?wž(ƒ€Víe/„ý§Ž×療R~G2:˛˘Ü‘önPŘPŽi7ƝyńW(!Ě ŕŕo„‹×°$Ź`¸ůť+Ŕ’˘=şu•Ľń"ˆôHD/ühń‡Ě0Ԝđ3)Ž?•ş×0,žx(ĂőKtۄJŤőŢď…ęWSuѰ­Ššř ëŽ;ÜDŻŚP\+ťöpmázô\ř{† ĂŃŐj‚m8Ç]Ӝ¹Çâ×'|Çę6nu?sŰůĽ˝ĄPZľll?LŐ;Ám‡Yo9îąšűvIbrŠd›7şÁŻ=ęC•=|@˛ĚšŇîçJ¨öŢů„˙Ôą\ɨßĐNńÔńX°zÇJłÎń_˙úWk1ń QŻ w.řăđŽWY_´o׎]ČfĄć¤_üPżCżşĘĘđĹăJ Ѱ˝œóWßúËšĎęŘWMq uíE{mšĎŐqě5=FMą­lŢ5Í)Ř=ÖD<Áűűţđkź€ĽŃ{O u?ŤěŘRÍŻ4ŻŚÂG9Ś7ĘëJFçśjĺŠl*ĚňÔkËŸŁą’"ä~#?-ľ\<ŁgZŠ1UŒ?ÓźMącŢÖďů­˙Y éYőĺÎ{ÇIRůjĺ;2óOk}á…\˝‡q\ŕŠ# Uýě ľŻŞÜOáĘůiW[jš+ZmńiO¤űŽy ~šÇOŽîM^…łĆ‘‚ť’ŰăçMŹ] ń Kď›ožyÉxU?XFjUŤę>kK˛­™3MŽ5ĂŁÖ&ś°Fâa°>úČŽ€tÇwXˇ:}íxuQÎĚ,6~¤f4WëA jˆÁr°í÷š;e÷ś­rhĎVšŮpq˙W%#ۨçj:ŢĚLăzRą*‰˘d9Ěn %Îáƍ­;%,Đąb^@ăƎ“‡{8ôăë G:öÂV“ŽѸKÔäœbel˛­™3IŽ5ĂŁÖ6śxv˘ŚCVvąqýŤé˝\iăוą“¨ŃIe™ůŮU=ˆĄĽTOaD¤ńŕ44´Wʇ˜?Büô‚‡°VqŔşŒ­[ˇŽ'ˇ&/^Xöcő HMr gl˛ ‡RämČ5rfáö ŰpIEĐÎX›‹/~AmŮ4(՟]AéDUŐľ°äě_ţňűË Âőş3E5đŢ)Ś4ž ÁE>Fx¸KÍ4oô~kşÂϧG$@$@$PMTÓ8ڜt6Ź­ÍUtVL hőoơMŹĂüŕƒÚľOœ8aýtxń“    DO ÔâĄ^¸n@{áaBŐ`я|e÷Œií˘Ç‰ÄCořf¤ßŽÜzŚI€H€H€H€"# BYăČz_˝­k€ÖS¤'Xc-gL$@$@$@$@áˆÍe(Â9rś!    (P@G]H€H€H€H€j/ čÚ{îyä$@$@$@$@Q €Žť    Ô^Đľ÷ÜóČI€H€H€H€˘ @4v!   ¨˝( kďšç‘“    DA€: hěB$@$@$@$P{ P@×ŢsĎ#'   ˆ‚tĐ؅H€H€H€H ö €Ž˝çžGN$@$@$@$ č( ą    @í%@]{Ď=œH€H€H€H ĐQ@c    ÚK ŚtYYYí=łńÄV<Ż]ťVFŽ){öě1ţ×ĺŻ-/**’;wÚś(›0a‚4kÖLVŻ^->ú¨óĂ? ŒĹ    @dřa˜ź ~aEŽ7‚8;˝ž¤×K,łŐ‰KÄ8|)°"u$+%A$)Aęš7‰×7m‹LôŰ6ť"š  @ œ—,Y¨ęÓ§O Ýťwoyĺ•Wlm×­['Ď=÷œ¤§§Ë€¤cǎžűmÚ´I6oŢ,żúŐŻ¤Aƒ2|řpÁ‡‹-˛–íŔ˜    ›tبŒD6ÝVéç¤ŘÄiIq’‘/ŠY Ľ˙¨äÝWćۑnö%iÖ¤‘ä•X['_Údb…Ž4ß=͜9Sš6mj-Ĺ´˘ á˛1gÎ9pŕ€Ý233mř7'&&JóćÍ}Çs áO ‘ݲeË@1Ü>ŕÖÁ@$@$@$@$‹ÍĄŃQ+zÁrœb–¨k\şKĘΗHJ˘Đő’Ź…yČÝ÷Ë/üÉnCî/Ůiő$3%Qғă%žŹD˛ŠvÚž^ë3ŔĽŚŚJ˙ţýeÔ¨Q2uęTër¸^´iÓFćϟ/ăǏG‘ 6”S§NÉéÓ§ľ(ŕž(¨HäääŘvG TÁ˝c0    DG€:LnżiiirMÚ i—Yl5ÄX “$;#Qԏ“kZ5–fk'ő3ˆN6Ž"í2J¤qň1Ű×O@ëî§OŸ.{÷^zɊč#GŽŘ˙đPᆠ!b•Fɂ äüůóÖ7Žę­ă!Ćyđ^źxą­ßąc‡kȐ!n3ŚI€H€H€H€" @,hź°¤đýš’_G2R̓‚Ƴ¸Kƒ‘ÄfËÎÉJ‹S-Gţ6ÇöAßP/-™1c†őm†•xҤI2qâD<đ@ĐśŹ    ÚH ŽŸĺRAÔ1Ą"íŁĚťAcCšŚÝď´F^cř`#eşiygă~đKSUŘž}ťľŔV׍´ń`nnŽźţúëňáö}Ň÷ ÓĽ{ˇ&’–.’œlŚhž#,0ď)8+ňńżňdůŻgH—v-Źp…ŰD( ´ßÂMŤqÄÇÇ[ 4|Ÿą!`é:,{W™0×qaŃĆj‹H€H€H€jŠô žájßž}Ôť0‹|ŐtĆ[ⰄYąŮJœ y-GŒ:7FÚݰ҃ć‘öŰLq`EÔă×{#í 1­ŚBˇ—CXy`Źfő”ËĘVƚ—‘-×t“îˇ ‘Ž×u°cěÜü‘ź˙Îr9ś{“ľŁ-úD*ž1ÔŕĘ֑¸}0   Ŕĺ PÝěrĚ9’}Ä´€ž`@Ičś°ŕśhŃBŕGŒk*Ż]ô‚Źúm‘í qăƍĽĎwÚĽé`yŚŐ74S֒   āšĐ`WĄ˜Đ5‚"9##ĂžĐäĉU1`5ÎĘʲÖcX‰Łą<×Ôź9.    @Ő P@GÉÂKĐakҤI”ٰ    ŔŐFđ1     „I€:LPlF$@$@$@$@ @Íë€H˜ŞcO IDAT€H€H€H€" @č`šMą< ^Š˝qăFŮśm›ŕAB<\ˆŰśm+={ö´ĆúS¨.ŚI€H€H€H 6 €Žâ,cp,_ˇ|ůriÓŚLž`őŽŽ°˙~űň—dűzĹę‘c   @ě tçbřđáòzőjű6Âcu.**’óçĎ ^ó q|AA}7Dôš5klż7ňôęŐËZ¨;uę$C‡•yóćE0› M—.]*[ˇâm—ć—&nÝşľMGúĎŤŻžjëńǡŻä‘G"‚íI€H€H€H ć ĐÁ).,,” 6H‡¤YłfR\\,(ÚĐęë Ą A]VV*M›6ľo#|ď˝÷dđŕÁâgѝ5k– 6L^{í5yđÁmťć͛G0Ť‹›bnđˎ&ôíŰ׺ĽŕmŠ8†Ţ˝{˛ož)ƒ Šf8ö!   ˜$@ t§ő̙3’——'-[ś´ćüü|+  ‹ ­ĺÖgjˆĎ‚‚BIIIąB~Ńč,@€÷čŃĂZ°Ož7nœtîÜŮZ—áŸ,äääÄ3BBB‚őëF     ( /°™‚‹ĆŮłg%33Sęׯo…&Ę ˜ X†xV˘8))I˛łłmôE{ż°k×.™={śŔ•ŁK—.ś ^>mÚ4Yż~˝Ýß… ]Ÿxâ +ž×Ž]+#GŽ”={öX_k4ŔžwîÜiŰÂ>aÂ+âávň裏Ú1ńdeáý÷ßĚ n( $@$@$@$@Ѕă‹)ˆ_X‘5jd­Ď°ĐbŮ:<čşp śđ‡F€ˆ†ŕF_”ŁŢ Éđ™†p^˛dI ŞOŸ>4\)^yĺ›GŰuëÖÉsĎ='ééé2`ŔéŘącŔ…$ĐÉ$6mÚ$›7o–_ýęWöĄŔáÇ 8\´h‘ľlťmÝôĄC‡dҤIňӟţÔZŰÝ:ŚI€H€H€H ś €Žŕ €Eîpр†€VíńŒz´W?i¤ýÂ̙3­Ż4,Ĺ´˘í°śôœ9säŔvƒĺţÍpłÇOŤi@dĂĺDC׎]­[‡ć˝ńącÇäŢ{ď•o~ó›öABo=ó$@$@$@$PŰ \l­í4B?1|š÷îÝkÝ$`y†b„ľYójĄ†€†‹úz­ĎŘ]jjŞôďß_F%S§N XŽ!¨ąĆôüůóeüřń™a˝iźŔĺôéӁ˛`â>ÍhwôčŃ@[¸wčšŐÂŠ„?öuß}÷É=÷Üă­fžH€H€H€HŔ €ó2€řMKKłîšŘ ’!œąA8C@ë†:[¸mœ;wÎöőĐşűéÓ§[qţŇK/Ůą9büĂC…XůCBÄ*p#Y°`ľ„Ă7Ž~"/qÁj!‹/śő;vě°c 2Dw{Qü›ßüFv›‡ńđ"D:6řx3    \ ÓÚOT^8ôČSĐĽŻưB{_‚ĺěÔľű‡}Đ7TŔÆ3f̰žÍ°ĂyâĉvY;ôÇ}/žř˘~ÓĎ<óŒŘ[śl‘nÝşůú@CĚŁĎË/ż,X˘oFĘÁ–ĽűŰßţf­ŐŘVíŔŚű 5w֑   €K ş5˜;ö•ŽęŹS1IżeŢ ‚Ę5íĆqĺĂőˆQŚ›–w6îż4ĺQ…íۡ[ ŹWäF5˜éќ››+ŻżţşuËxěąÇ¤UŤV—ˆW0…ď2Dn‹-Źp…ŰD( ´ßœŕ~Ő8 ČaV÷´…/6Źŕ• sm<̈ąH€H€H€H Ś@Ÿ@ľoß>ę]˜7;ŐtĆ[ⰄYąŮ°:ƒnČk9b”ť1Ňî†Ń4´ßfŠmy 6zÎ˙6ӂj ˜Â ŔxUwż~ýdĺʕňä“OZ+-\"`­Eř裏ä7ްŤ_Ŕ’‹śčŠxĆXxPƒW(CXGŕöÁ@$@$@$@$PuĐ2„VeˆfÄXSnXVâƍ˝wŢi—Śƒĺ™Vß!ł9    \Á( Ł89ÄÉö…&'NœʊŤqVV–ľĂJĺ9Š)ą    Ŕe"@%hc,A‡­I“&QŽÂn$@$@$@$@W<ŔÇ@$@$@$@$@$& č0Aą     €4Ż    ˆ€} #€ĺ6ĹҀxSßƍeŰśm‚ ńp! lŰś­ôěŮÓ>dxa)mˇ7Ó$@$@$@$@W+ č(ÎÇňu˗/—6mÚČäɓËŐ!?~\–-[&x%7Ţü‡ľ ŤëE.QL•]H€H€H€H€Ş™t„@!ž?řŕYľj•`őŽjŔzÖ{öěąk\'''Wu8ö'   ˜#@čN)ÄđáÇeőęŐö ƒ9Ćę Áyţüyűšoˆkä ě+¸!˘×ŹYcűř˝ ˛WŻ^ÖBÝŠS':t¨Ě›7/‚Ů\hştéRŮşoť4ďź4qëÖ­m:ŇđĹţýűËŹYłě‹b|đÁH‡`{   ˆy´@GpŠ eÆ ŇĄCiÖŹ™ ʰ&´ú:C(CP—••JÓŚMíŰß{ď=ńÄV<Ż]ťVFŽi}–ŐEűŢšs§m‹˛ &Xˇ“G}Ԏ‰ ƒŒ9cĆ yěąÇdΜ9vU‘`mYN$@$@$@ľ‘t˜gâVäFYësBB‚]ś16Ź´MóXŇD47úú hˆä›ožY6oŢ,K–, ĚŚOŸ>Ňťwoëö."ŔżzÝşuvĺôôt0`€těŘ1ŕBŔ$6mÚdDž•7>ÜZş-Zä6ť(ĺřŽ9"ű÷ď—÷ßßZÓ/jŔ    ÔrôŽŕ€Eîpр…YE˛w™:¸b íŐOZ-ÄŢÝ͜9ÓúJĂR|đŕA(FŔÚҰ8pŔn°|#ŔżÖďpü¤!‚1žë†ŃľkWëÖaóůçŽ;îlǎ<äˆöC† ńiÉ"   ¨bÚL´FsŞ!ˆáÓźwď^몥ÖfˆYlx@ÖfÍŤ…ËÂĄ/Ćđ†ÔÔTéßżżŒ5JŚNjý Ń‚kLϟ?_Əč†őŚń—Ó§OʂgNNŽmwôčŃ@[¸wčšŐBŸŹćĐpé`    HÓ&‘Œq%ˇ˝TŃ]Éłpnş2F„Ý|›CüŚĽĽY X˜ąA$C8cƒp†€Ö u¸xŕśqîÜ9Ű×O@ëÎŚOŸnĹ9^Ŕ‚ąáF˙đP!VţЇąĘÜH,X`-áđ†Ť†ß…ŠŐ3°ZČâŋmýŽ;ěXÁ,ĘćęfrčĐ!ë*Ňž}{"c   ‹@uj°°vx™Ĺ´€Žn–ĐĽŻšę÷ěîŒşv@Ô‚Œ>č*ŕaC<ź÷ÜsĎه'Mš$'N´ËÚĄ?4|ńĹíđ›~ć™gŹŔ޲e‹tëÖÍ×b}^~ůeéۡŻ}3"ĆÄru~áüŁëž{îąKëÝwß}­čáׇe$@$@$@$PŰÔńł\*#ëT¤ýb”y7rl(×´ÇU”k lÔ#F™nZŢٸüҔGśoßn-°^ĺ¨3 šsssĺő×_ˇnXŠ˘UŤV—ˆW0…ď2Dn‹-Źp…ŰD( ´ßœŕځŐ8 ČaV÷´…/6,Օ sm¸e`ŹPA"l׎]Äó 5.ëH€H€H€jčč ŞüŠm?řŞĄ…ˇÄa łbł•8ňZŽunŒ´ť•9y¤ý6SlËąŃshçBŤ)ß.ľˇŤYôë×OVŽ\)O>ů¤ľĂ%î}ô‘ŕ~XU–c´EŸHĹ3ĆŇ ‘ö eëHÜ> YYY\ş.PlC$@$@$Pk P@GxęaÁ…U˘1ÖT†›Ö_F€•¸qăĆrçwÚ5ayŽĚęá؜H€H€H€HŕS$@|bˆäŒŒ ťĚÜtU XaĹE +q4–ç(ŚÄ.$@$@$@$@—‰t” !Œąś&MšD9 ť‘    \mđ     @˜( ĂĹf$@$@$@$@$ĐźH€H€H€H€H ôŽ–ŰKâÍ}7n”mŰś $ÄÅx€°mۜҳgOűá…Ľ´ÝŢL“    \­( Ł8sX Ë×-_ž\Ú´i#“'O,W‡püřqYśl™ŕ•ܡß~ť] şş^äĹTمH€H€H€H š P@Gâůƒ>UŤVÉCF8_kŹÍnŔKSîż˙~8p <˙üóKu÷îÝíkżÝvՙž;wŽÝŹŢ $@$@$@$@5K€>Đđ…>|ř°Ź^˝Úža0ÇXń•óçĎŰ×|C\#_PP`׀†ˆ^łfíă÷6Č^˝zY u§NdčĐĄ2oŢźfsĄéŇĽKeëVźíŇźóŇÄ­[ˇśéŞüóěłĎŢŽX•qؗH€H€H€btg´°°P6lŘ :tf͚Iqqą LE3ŇÓȗ••JÓŚMíŰß{ď=ŰÎoWłf͒-[śX7§žzJöďßď×,ě2Ě ~ŮU ˙űßĺ˙÷Ť2ű’   @Ě €ŽŕԞ9sFňňň¤e˖ÖœŸŸo…qaQšˆ†pV]PP()))VhĂ/}ƒź”ĽG öɓ'mł+VČŘąc­…z̘1öAEíż{÷n1b„} â”)SóЀşŃŁGkVöíŰ'ăƍłÖä~ýúY˙ě@ĽOűüńÇĺšçžóŠe    t˜×@iiМ={V233Ľ~ýú’˜˜hÝ6 ˜ X†xV˘8))I˛łłmôĹ~a׎]2{öl+G—.]lź|Ú´i˛~ýzťż… ş>ńÄV<Ż]ťVFŽ){öěąžÖh€}ďÜšÓś…ŰȄ ʈ‡ŰÉŁ>jÇĐÁÄóמö5űpd°6,'   ÚL Ś´Ÿßq´'âVäFYësBB‚]ś16Ź´MóXŇD47úú hˆä›ožY6oŢ,K–, LŻOŸ>ŇťwoINNś1\D€őşuëŹËGzzş 0@:vě(~ËĺmڴɎ +5n>|¸ľt/Z´(°7ńűß˙Ţ pXŹH€H€H€H ZŐŠÁ˘CMö‹éU8üDeU`âb€ťüœaaV‘ě]ŚŽ¨G{ő“v!͜9ÓúJĂR|đŕA(FŔÚŇsć̑Ř –oř7ĂúÝźys›őüŠ1\N4tíÚŐşuh^cXŇრáţđĂ[!cE~Úڔ1    „$PÝ,äÎ>…Ę˜ś@W'Obř4ďݻ׊Kľ6CĚbƒĽÖfÍŤ….č‹1ź!55Uú÷ď/ŁF’ŠS§Z?h´ ĆÓóçϗńăÇşa˝iźŔĺôéӁ˛`â<''Çś;zôh -Ü;tÍę@ĄI`nO?ý´ 6Lnşé&éÖ­›ľ¨#ca    ('pŠ˘#_˜iiiօfl–ÎŘ œ! uC„-Ü6Ν;gűú hÝŮôéÓ­8Ç X0ö‘#Gěƒx¨+čCˆXen$ ,°–přFĂUĂOD_wÝuÖ˙yńâĹś~ǎvŹ!C†čn1拇uűÜç>g yřc3    ” €ŽŕJ€€†(…x…0VżgwüdĄŽľ° Łú† xŘpÌvő X‰'Mš$'N”ÁƒŰţxĐđĹ_´CŔoú™gžąKŕÁZě÷S Ä<úźüňËҡo_űfDŒ9hĐ PSa    @uü,—Úވ˛:iżeŢ ‚Ę5íĆqĺĂőˆQŚ›–w6îż4ĺQ…íۡ[ Ź×G9ŞÁL'ˆćÜÜ\yýő×­[Ćc=&­ZľşDź‚)|—!r[´ha…+Ü&BY ýć7 X!ČaV÷´…2,Օ sm<̈ąH€H€H€H Ś@Ÿ@ľoß>ę]˜Ĺžj:ă-qXÂŹŘl%Άź–#F#íneNiżÍŰň@lôÚůŞ)_,ţ…ŔXÍë)Ż\šRž|ňIk†KDçΝm§>úHŢxă ťú,Ďh‹>‘Šg Ś"íʑşUŔ탁H€H€H€H ę( #d .ŹĘ͈ąŚ2Ü$°ţ2ŹÄ7–;ďźÓŽé Ë3­žBfs   ¸‚ P@Gqr ˆ!’ą´–…;qâD`U Xł˛˛ŹőVâh,ĎQL‰]H€H€H€H€. č(ACc :lMš4‰rv#   ¸Úŕ>     0 P@‡ ŠÍH€H€H€H€H( y    @č,ˇ)–<~üŹüů•m˛ęýrčđY‰3~ŃM›§ĘM}šĘ¨á$;;ő’5˘Ý1˜&   ¸úP@Gqΰ@řŰďě”ď=űž4o•)łgÝ%]:âAÂ2ůxWž<ýَä×_|Uf|Ť§ ¸ľ­}caťa    +t„'âů­•Űĺąg7Ë÷žžCşá\Ż^˘ě9–/ö}5))2囷Éö]šňčˇ_“ŮćE8om_Ł"zîܚҽ{wéŮłg„GĂć$@$@$@$@‘ tÄŕśqđŕQyę'›%Ľw;‘Ôt9p˛Dv-”OŽž7[‘ě2Ű>S–Wš$)}ŰËw_Řlűř˝ ˛WŻ^‚ˇvęÔI†*óć͋`6š.]şTśnĹŰ.Í;/MÜşuk›ŽôŸS§NIóćÍĽ]ťv Ż-g    ¸@€č ,*MʢWśˆ4o* Z6”…ćűGœůżn™;fú—I|JŚä–ÉŠâ8ÓŚ‘äž2}^Ý*ߟ!ÉÉɗěcÖŹY2lŘ0yíľ×äÁ”Áƒ[{IĂ0 :tč 7n łőĽÍRŒ}űöí—V°„H€H€H€HŔˆi ´ŸŐˇ*çý̙3˛băIIhž#ŮéirčLŠ>S,oţuąüčą/ŰíÍW˙(yçP^* 2ÓlŰœô đR–=zÜCNžĐœyXt[ĽŸ“b§%Ł/ŠY Ľ˙¨äÝWćۑnö%iÖ¤‘ä•H]cĎ­“/m2ąBGšďžfΜ)M›6ľ–âƒZQŒ†p٘3gŽ8pŔn™™™ś?ü›Ăň“ŢżżŻe˖}wíÚUŕÖáâââŹŔ†; jÄCŽxˆVn    r´@‡y%ŔOŘ5.Ý%eçK$%ŃčzIÖÂ<äîűĺ‰ţdˇ!w—ě4cuNI”ôäx‰/+‘Ź˘ś/ĆđX}ű÷ď/ŁF’ŠS§Z?h´ëE›6mdţüů2~üř@ˇ†  VË8}út LÝ7‰œœŰîčŃŁ*¸w`ŒĘÚ`5Ă‡W֔ő$@$@$@$PŤ\ŞčjŐᇰżiiirMÚ i—Y,đŽÎHI’ěŒDiP?NŽiŐ@Zš­AvœÔĎL4":ٸvˆ´Ë(‘ĆÉÇl_?­3˜>}şěÝťW^zé%+˘9büĂC…6l<„ˆU65j$ ,óçĎ[ßh¸jř‰h,‘˙çŋŰú;vŘą† ˘ť c9<ŹĆőĽH€H€H€H€. €žŔ˘Ň4eáűs%%žŽd¤šg…q/–9"9ˆÍ–%’•'ŚZŽümŽíƒžĄBvvśĚ˜1Cž{î9űŕ¤I“dâĉvY;aéű…éŇ˝[IKó°ŸŮƒYŁ ĐlgE>ţWž,˙ő éŇŽ…Žp‰eö›Ü4°G||źľ@Ă÷îòw• smŹćą‚ü°1î5×\ŹËI€H€H€H (č<ĂŐž}ű m*Ť0‹|Ő´Á[ⰄYąŮJœ y-GŒ:7FÚݰT™ć‘öŰLą-ÄF#ŁoŽŚ|›×îB`Źfő”ËĘVƚ—‘-×t“îˇ ‘Ž×u°pvnţHŢgš۽ɮጶčŠxĆ`XeCƒW(CXGŕöQYŔń&B    ŕ( ƒłń­ˇE‹?bÄXSyí˘dŐo‹l{Xˆ7n,}îźS°Ś3,ĎĄŹžž;a!    ŔK€:ŠSA ‘œ‘‘a_hrâĉŔްgeeYë1ŹÄŃXžŁ˜ť    \&ĐQ‚†0Ćtؚ4iĺ(ěF$@$@$@$pľŔ| $@$@$@$@$@a €›‘    P@ó:     Đ:XnS, ˆWjoܸQśmŰ&xâÂśmŰJϞ=íC†–Ňv{3M$@$@$@$pľ €ŽâĚap,_ˇ|ůriÓŚLž<Ů.W‡ĄŽ?.˖-łŻäƛ˙đÁęz‘KSe    j&@!Pˆç>ř@V­Z%á|­ą6ť/Mš˙ţűeŕŔňüóϛŽ”ŮWyפˆž;wŽÝŹŢŐpŒxu8Ţ\ˆH€H€H€Hŕ˜öńĆ "HaźĂ‡ă6{đ IDATËęŐŤíŰsĚKRŠŠŠäüůó‚×`Cx"_PP`_Á ˝fÍŰÇo.˝ző˛ęN:ÉĐĄCeŢźyĚćBÓĽK—ĘÖ­xŰĽy祉[ˇnmÓŃüłhŃ"šéŚ›äűß˙žÜwß}ňÝď~7ša؇H€H€H đÓ=ą„#Ś-ĐŐí\XX(6l:Hłfͤ¸¸XP†5Ąu_¸` ¨ËĘJĽiÓŚöm„ď˝÷ž -gΜ‘źźCPC@JJJŠ˘đ‹Fß`źGւ}ňäIŰlŊ2věXkĄ3fŒ}PQűďŢ˝[FŒa߂8eĘÁ<4 nôčњ•}űöɸqă¤sçÎÖj˙ě`pXÂńĺ@CŹ˙čq2&   p P@‡I .gϞ•ĚĚL뜘˜hÝ6 ˜ X†xV˘8))I˛łłmôĹ~ţĆłgϸrtéŇĹ6ÁkŔ§M›&ëׯˇű[¸pa ëOjÇĐ~óŔëÉáĂÝ˝{wůž ‡ňkĘ2   ¨ľ( Ă<őż°"7jÔČZŸě˛uˆąá!AlšÇ’vŘ ˘ń úú hˆä›ožY6oŢ,K–, ĚŚOŸ>Ňťwoëö."ŔżzÝşuvĺôôt0`€těŘ1ŕBŔ$ŕ’qaĽĆÍǡ–nř9ű…ÜÜ\Yźxą<üđĂňÖ[oŮů˙ěg?ókĘ2   ¨ľbÚşşĎ*,şp—€‹,Ě*’˝+lŕaBÔŁ˝úIó%ž9sŚő•†ĽřŕÁƒQŒ€ľĽç̙#°,ßđo†ő;?éýű÷Űńŕr˘Ąk׎֭CónŒ5Źű÷ď/7Üpƒ-?~źľXĂ/ÇĂ@$@$@$@$Ŕ7†} @@§yďŢ˝ÖUC­ÍłŘđ€ ŹÍšW 54\,Đ×O„ŚŚŚZŃ:jÔ(™:uŞőƒĆ¤ ¨ąĆôüůóBVCCłň^ŕrúôi- ¸o *999śÝŃŁGUpďŔ~ŤwŔÇ[ƒö§´aL$@$@$@Đa_żiiiօflÉÎŘ œ! uCŹÎpŰ8wîœíë' uÓ§OˇâüĽ—^˛c9rÄ>ř‡‡ ąň‡>„ˆU6ŕF˛`Ák ‡o4\5ü,Üx‰ „[Ć˙oďŢc­9ëzĎni˘)QPË…IP#˘BЁDôp1DŃ?DF‰ţŽ˙˙‘hŽô`LD Ţ ń/ÜZ UÁÄ’B/Ľ´Ýg}gżżÝçw­őŽ˝.{­5ëó$ó>÷™çůĚţă×éěŮéżĺ–[ús}ۡ}[]ö˘ü9ĎyN÷ž÷ź§Ë“ë¤wźăý'íĐ1Š @€.ŕ˙˟á t‚ŇŻ Œë˝çö 6ëՎ­y‚œ9™;/ĺ— _űÚ×voxĂú_|éK_ÚýŔü@˙YťĚĎ/řýâ/ţbŠź7ýú׿ž°?ôĄu{Ü㌞`>sŢôŚ7uOyĘSşüeĜó[żő[§.ĺŠO}j˙íçäOúÓťw˝ë]Ýë^÷şŠc5 @€Uŕhړ˘ƒGĘÓň´ ä9Ň^ĺ6żňB{ĺy;ýÉÓVGľ?vňúÁ/MڗJýčGű'°Ăw”—:ŮdR‚ćü˘]Ëź–qĂ 7t|ä#/ ^cšw—ä>âčן61ď ô´5ĺ5|#yž@×ë!›wąóüry7O´óˌ9×ĺRžz絏źŇqÖ5_îÜú  @€q $>Itýő×/˝ŃÉÇ^2™œż—O˜Ý59înŽÔŤ=yúÚ<ĺö8nę)O;&Í}űi>‰ç2njş|45uÚa6&˜Ě×,ň„öÝď~w÷ŞW˝Ş œW"ňĺ¤›ožš˙C$ůúEžglć,ˆÖ/ćźĂ@9őYR^űX4ĺ뗝c @ŕPĐgźÓy‚›§Ę š“ç›ĘyM"ß_NĘSâ뎝ŽűŽďřŽţ›ÎyňźČSß3.Ăp @€-  —€O@œ 9t$Ÿ…ťýöŰOżŠ‘§Ćů\ň<%^ćÉóK2… @ŕœĐKB'0Î'čr<üá_ň,Ś @€ě›@~O"@€ @`Aô‚P† @€ˆ€ÚĎ @€3 Ď€e( @€QĐsžíÎ @€lH`ě1بč{˙â†~:œ– @ŕąÇ`Ł /š› @€Ź( €^Đt @€Ă@Öýś[ @€Đ+šN€ pXčĂşßvK€ °˘€zE@Ó  @€K@}X÷Űn  @€V@Żh: @€Ŕa  ë~Ű- @€ŔŠčM'@€8,ôaÝoť%@€XQ@˝" é @€‡% €>Źűmˇ @€+  W4 @ŕ°Їużí– @`EôŠ€Ś @€–Ŕ¨čăăăĂş›vK€ŘąÇ`Ł ŽŽvŕGČ @€‡%0ölÔôaý¨Ú- @€Ŕy ĎCŮ5 @€F# €Í­´ @€ó@Ÿ‡˛k @€ŒF@=š[i# @€ç! €>e× @€€z4ˇŇF @€ÎC@}ĘŽA€ 0ôhnĽ @€œ‡€ú<”]ƒ @`4čŃÜJ!@€8ôy(ť @€ŔhĐŁš•6B€ pčóPv  @€Ń Gs+m„ @ŕ<ĐçĄě @€Łu}||<še# @€}{ 6ęúččh_~ÎŹ“ 0ąÇ`Ł GóSh# @€;# €Ţ™[a! @€ű €Ţ‡ťd @€;# €Ţ™[a! @€ű €Ţ‡ťd @€;# €Ţ™[a! @€ű €Ţ‡ťd @€;# €Ţ™[a! @€ű €Ţ‡ťd @€;# €Ţ™[a! @€ű €Ţ‡ťd @€;# €Ţ™[a! @€ű €Ţ‡ťd @€;# €Ţ™[a! @€ű €Ţ‡ťd @€;# €Ţ™[a! @€ű 0ęúřřxî5 @€F%0ölÔôŃŃѨ~m† °cÁF@ďĂ˜5 @€엀zżî—Ő @€lY@˝ĺŕň @€ű% €ŢŻűeľ @€[@oů¸< @€Ŕ~  ÷ë~Y- @€Ŕ–Đ[ž.O€ °_čýş_VK€ °eô–o€Ë @€엀zżî—Ő @€lY@˝ĺŕň @€ű% €ŢŻűeľ @€[@oů¸< @€Ŕ~  ÷ë~Y- @€Ŕ–Đ[ž.O€ °_čýş_VK€ °eQĐÇÇÇ[ćuy @€Ŕá Œ=u}tttx?ąvL€زŔŘc°QĐ[ţŮqy @€  GxSm‰ @`sčÍŮ:3 @€ŔĐ#źŠśD€ °9ôćl™ @`„čŢT["@€؜€zsśÎL€ 0BôoŞ- @€lN@˝9[g&@€Ą€z„7Ֆ @€6' €Ţœ­3 @€ŒP@=›jK @€›@oÎ֙  @€F( €áMľ% @€Í  7gëĚ @€#@đŚÚ @€ŔćF@oNΙ  @€Ś Œ=u}tt4őŚj$@€؜ŔŘc°QЛűąpf @€C@ꝷo @€ĽĐKą™D€ p¨čC˝óöM€ °”€z)6“ @€U@}¨wŢž  @€–@/Ĺf @€ŔĄ  őÎŰ7 @€ŔRčĽŘL"@€8TôĄŢyű&@€XJ@˝›I @€‡* €>Ô;oß @€K  —b3‰ @ŕPЇzçí› @`)ôRl& @€Ş€úPďź} @€,%0ęúřřx)“ @€–{ 6ęúččhů;o& @€ŔRcÁF@/uÇM"@€ 0G@=G @€Ą€z(˘N€ @`Ž€zŽ. @€CôPD @€Ŕô] @€†襈: @€9č98ş @€ ĐCu @€sĐspt @€  ‡"ę @€ć çŕč"@€ 0@EÔ  @€Ě@ĎÁŃE€ @`( €Ѝ @€˜# €žƒŁ‹ @€ŔP`Ôôńńńpżę @€{ 6ęúččhĂ?NO€ 0{ 6ęzx3Ő  @€Ź* €^UĐ| @€ƒ@ÔíśY @€UĐŤ šO€ pP胺Ý6K€ °Ş€zUAó  @€J@}PˇŰf  @€V@Ż*h> @€ŔA  ęvŰ, @€ŔŞčUÍ'@€8(ôAÝn›%@€XU@˝Ş ů @€% €>¨Űmł @€Ť  W4Ÿ @ŕ Đuťm– @`UôŞ‚ć @€”Ŕ¨čăăヺ™6K€ŘąÇ`Ł ŽŽvágČ @€%0ölÔôAý¤Ú, @€Ŕš Ď…ŮE @€Ć" €˝´ @€s@Ÿ ł‹ @€ŒE@=–;i @€ç" €>f!@€‹€z,wŇ> @€ÎE@}.Ě.B€ 0ôXî¤} @€œ‹€ú\˜]„ @`,čąÜIű @€8ôš0ť @€ŔXĐcš“öA€ p.čsav @€ą Çr'íƒ @ŕ\ĐçÂě" @€cu}||<–űd @€˝{ 6ęúččho~Đ,” 0ąÇ`Ł ÇňCh @€ť# €Ţ{a% @€{ €Ţƒ›d‰ @€ť# €Ţ{a% @€{ €Ţƒ›d‰ @€ť# €Ţ{a% @€{ €Ţƒ›d‰ @€ť# €Ţ{a% @€{ €Ţƒ›d‰ @€ť# €Ţ{a% @€{ €Ţƒ›d‰ @€ť# €Ţ{a% @€{ €Ţƒ›d‰ @€ť# €Ţ{a% @€{ €Ţƒ›d‰ @€ť# €Ţ{a% @€{ 0ęúřřxn% @€Ć%0ölÔôŃŃѸ~í† °cÁF@ďÁϗ% @€와zĎn˜ĺ @€lW@˝]W'@€Ř3ôžÝ0Ë%@€ŘŽ€zťţŽN€ °gč=ťa–K€ °]ôvý] @`ĎĐ{vĂ,— @`ťčíúť: @€Ŕž  ÷ě†Y. @€ŔvĐŰőwu @€=@ďŮ ł\ @€í  ˇëďę @€{& €Ţłfš @€Ű@o×ßŐ  @€öL@˝g7Ěr  @€ś+ €ŢŽżŤ @€ě™Ŕ¨裣ŁîřřxĎn‰ĺ @€öW ąWb°1§QĐxŔşĎ}îscžöF€Ř)Ä^‰ÁÜî3ćÍ=řÁî>ó™ĎtwŢygwŐUWy=ć›mo @€ŔVňÔ9Áó]wÝŐ%su}Í5×tW\qEwÇwô‡×9ĆüŁlo @€Ŕ6@_yĺ•Ýľ×^ŰÝď~÷ëîšçžm.gŁ×uwőŐW÷ÇFœ @ŕT`ĚÁs69ęw Oď˘ @€5  ×é4 @€‡! €>Œűl— @€k@Ż Ňi @€C@}÷Ů.  @€Ö$ €^¤Ó @€†€ú0îł] @€ŹI@˝&H§!@€8 ôaÜgť$@€X“€zMNC€ pčøĎvI€ °&ôš † @ŕ0ЇqŸí’ @`Mč5A:  @€ŔaÜgߡů–ˇźeߡ`ý @€ƒxţóŸż×űÝűzßoŔ^˙ôX< @ŕźÂq€7ݖ  @€–@/og& @€Ŕ  đŚŰ2 @€ŔňčĺíĚ$@€8@ôŢt[&@€X^@˝ź™ @€( €>Ŕ›nË @€Ë  —ˇ3“ @ŕĐxÓm™ @`yôňvf @€ €úoş- @€,/ €^ŢÎL @€@ŕMˇe @€ĺĐËۙI€ p€čźéśL€ °ź€zy;3  @€Pŕ>¸g[&@€ś$p×]wuüŕť÷˝ď}Ý­ˇŢÚ}ć3Ÿéîšçžţ¨%÷ĹŁŁŁjęŞí´aR˜Ő_íɏŽ<ꎺňŞî|`÷¨G=Ş{üăß}őWuwŸűœOtű-“ÚwęgńĘřšť fYĎŽ§ŁiŔľč býäNËÓ6<ňD;GÚŤÜćW^hŻ×ýÇüGý?ýÓ?ínżýöîŮĎ~vLßęŹw ŰÜď:v˛ łvÝyČC^2Šß49î™wMŽť›#őjOžž6Oš=ň_dUOyÚ1iîŰOóÉ=<ů/š´ ’z˘J€ŹWŕîťďî~ď÷~Ż{ď{ßŰ˝ěe/ëýčGŸ>ń\ď•fŸ­bĄ<íţřÇ?Ţ˝á očžüä'wĎxĆ3ş+ŻĚóťőĽ]Řď:vsžfĂőîz}>˙˙b¨˘N€„@ÖoźąűЇ>ÔýÄOüD÷Ї>´K€™˙Ç=űůޚi&Ϗ/<\LPřđ‡?ź{ĺ+_ŮýÂ/üBwĹWtßůßŮçë¸ęNěw9Głu,÷źĎ‘×'$ @€ŔÚŹć]çßő]ßŐ}Ţç}^˙Žsčťîşť¤Sžw|ęSŸęnşéŚîŽ;î¸dÜĎýÜĎőŻeL›Ÿ@ö´ýžťOŻ›śŹëó?˙Ýóž÷ź>°Ďúęië*ëŘďéš.ů_űľ_ťwOƒţYóÎŇž łUźˇ9W˝M}×&@€#řŻ˙úŻî˙đťoř†očŸ<'@Ť ­Ęm~÷Ý zOߛožšOúŠO}j÷Ł?úŁÝő×_ß˝üĺ/ďßeŽ đW~ĺWş~ôŁ—•9gô:wO=AîI~Ď$ˆţüîëżţëťwżűÝ]ÖşjZeżľĆďűžďëžč‹ž¨űď˙ţď‹öőgögýk05nÝůśĚV5ßÖ|ôśä]—ŒX Y^Űř‚/ř‚îKżôKűŢyç}P˜žiÇńqÜ{ú 9ŻU<ó™Ďěߛţßůîďţîďú§Í7ÜpC×ăäĂ#çÎyę՟úÝžFç—äň „xÄ#şÉűśýSîô/›2wŮýÖúň´ý÷˙÷{Łź3^í•gmU^5úӟ޽ő­o==_ÖŢfËZďÂ<ô.Ük @€#řěg?Ű}řĂîƒçűÝď~ýîŇöŸ˙ůŸ]HO>gwéSÔť&OŽďę~ů—š˙ĚÜK_úŇ.î]“#çxőŤ_ÝĺŠóÇ>öąž=AdƧ?g~!đß˙ýßOÚŚž˙îîÎĎŢŮ:/kÉ/Ţ÷ž÷ížäKž¤’śeÓ*űÍs$ ý–oů–î9ĎyN÷ć7żšoŤž¸9^÷ş×őż„™_€üëżţëÓ1ůşÉ“žô¤ţéő3&˙ńűšűŹg=Ťűßřţ]ďźŕÝĎüĚĎtó7Ó˝ęUŻęžđ„'ôOť{Çs6[Özćů%Â]¸ Ö@€F&Wňçhůćr‚Ő€ ęŹĺéďŃGÝýoćëˇő‹~“÷Śß˙žţ[Íw|öŽ4ž|w’]˙˜ë3ŹďЃÔ?=Mŕúţ~ ű‘ů‘îWßüŤý/ &HϤţGyB=ů†Ůä‰tÎŐ?šŹ#}YSÖö…_ř…}5ß˙ţ÷ďŻqÖVŮoś˜”őßđĘşěíŮĎzv÷ąŹ_[úâöÇüÇ}°˙ć˙űćîçţçť×źć5Ý[ßöÖî#ůH÷⿸{ăßŘżöňĆ˙ýĆîšĎ{n÷'ň'ý˙ůŸ˙š{ík_Ű˝ú5ŻîžüľOîîÍýť<Ő˙ţ˙őý}P}ççîě˙ŁćźÍ˛Ż}Mž@ď띳n °Ă lóKƒ×^{mÄĺk X“ŸG C&Ásâçd Ş'mŸţÔ§ű@öŠIš›|rÜ÷ęűöíˇúöžží'X~ń‹^ÜýÔOýT÷Ä'<ąoĎuŽźňŠÉš2â$Îü“óO‚öž˙d-  ó.tžM˝ęče÷›ľÝ|ÓÍÝ'?ńÉů›ťŻ}Ň×v~ôŁťßzűoőűŠľÝ×}]˙ő'üĎ't?ö˛ëţęŻţŞ˘ţö˙÷ö}l÷=ßó=ýťćŻxů+ş[ošľűŰ÷ţíŠSţă™ĎxfwÝu×uœüĺUW]Ő]űŔkťëvÝÖĚrwö5y˝ŻwÎş  @€ŔŽ ÔŤůë Ôę tÎČÎZ~^Šxç;ßyɧĺ,çőҟs%˝éMoężĐ‘Ż|T[7ך8<Îúň4źúłĆży2žžjżxîěÚŞű͙óúFź~ögśżP^YÉk |“˛ŚźnR{|VH3urIDATĚcÓü˙ň/˙Ňýëżţk÷¸Ç=î´ďa{X(§˝ĆçÓ}UîOxáœÓÚŞ˙$ߌŮĹ×Řżš'ĐűwĎŹ˜ěź@‚Ęyő AZŽzÝć'O‹óÄřŢ#ď÷V`ŘśçkyRüU_őUýř•?üĂ?Ü˙˘â+^ńŠ‹ÎQó꺊_qĹ˝OŔOę'ëŞWJ˛ŢeÓ*űÍťŕoűŰűwŸóK9ňtŢcÎ'ö˛Öě5Gí+Że<řÁîžň+ż˛KŔœzőĺ?2>ůÉOöAtÍmŞ­=_ÍMގݤٲֻ0O˝ wÁ @€ŔČˆĺúĚ%PKPVYň<•ŽzmU˙îďţî>0Ě_ LJžŚćélć=čAýÜôĺÉqžŢţůŸ˙y—ďB×92'G]g؞zy9Ţ;ă—M™ťě~óĺÍůÂHö—§Îůtß7~ă7ö{Ë:c˜Oűe)痿雞Šß_~y2_)ÉťĐé˓ë|Y$˙!’šIľ×äYkžâg|ľ§­Žó2[Özćy…cî‚5 @€ $ˆťúęŤűW Ś=NŽY)A]ėźä%ýÓć{ˇÜrK÷ƒ?řƒý_3L W)cóÝäßüÍßěžýŰż˝űŠŻřŠîšĎ}nu÷yŽUO—ëIq­!Oó:AtÖÁŤŸîiyچGţ3'GÚŤÜćů‰O˝ňđŠ'O[ŐţŘŰnťí—&í °Gyűž÷ź§BœW.üĺ]ăż /î 1ćo*O\?ń‰Ot_ţĺ_Ţ?m?úň˝@çčšŸţô§ű'ťůsžřć=äeŇşö;ëÚ đ“ň•xä—‡)˙ą2‰›ú?U>ě›VĎřŹ;÷f^ڔټkNÖô’I˙M“#çžkrÜÝŠW{ňôľyĘí‘wsޞň´cŇܡŸć“}Ď|§Çč0I @€ŔZŽšćš>čýÝßýÝ>OŔZOAŰ'ČHϊUúЇö_–X×ârŹĽRžIýńýçܲćeÓşö;ëúůRHĽ/ţâ/ŽâEy^˝ČŤ ‹ŚŒ_äł}›2[tť8N˝‹wŚ @€Ŕž $HΗžěËžŹťńĆű×*ňe‰´×;śŰŘb‚ç:ňT÷ďxG˙É¸Źľ ěĎşś]ÝďY÷1m|y%_§Ů´kíK[^Ÿ @€kȓĺ<5Í_ÇË{ĆůĹś;u#O˘ˇ•ríůćóŻ˙úŻ÷_ ÉłÖzžĚÚvużËěe8gSfĂëěS}{?Áű¤d­ @€Ŕ™ňT6ďę>íiOëŐüęż˙űżďËyš9뵍3_h őB‚ůř‡č~ú§şčłśUŸ>×ĺwiżľŚUňó0[e}ۜë—ˇŠďÚ @`ä Âňžq>C÷—ů—Ýűß˙ţţ‚|Í×|M—żŹ÷ČG>˛Żo’!O›ó]é|ęî˝ď}o˙ôůń|÷”§<Ľ˙‚Gţ@ÉşŇ.ěw{9OłiëÝő_"@OťkÚ @€ľ ä‹ů˘FٛnşŠ˙ĂůFž‘ s“)ŻWä ůĂ#zÔŁú?{Oăĺ{Ňy{i›ű]Ç~śaÖŽ{×čÍüÔ´Ę @€ŔÁ $PÍçŇňŽq‚Řü•|B-ž;ŻUl*ˆN ˜W+ň ó‰ş|-#Dzß|^ôFnkż‹Žo޸m™Í[ÓŽő  wíŽXŠ@łź.‘#Oó~ô&ƒçbŹ€0tĘ當ľßuěo[fëXűyœC}ĘŽA€\$-Oi7ő ĹEہʥíwČ7ş_áŘ(Ż“ @€ŒM@=ś;j? @€@o”×É  @€Ć& €Űľ @€  7Ęëä @€c@íŽÚ @€ŔFĐĺur @€ą  ÇvGí‡ @`Łčň:9 @€Ŕ˘˙ôO˙´čĐ­ŽŰĹúx"’C"@€8Ď7Ţxăpˇ;ŽűOyO |‡mĂzAMš5śćČ  @€ö\ŕ˙ńťwžóÝ _řÂÚÉ0œ'Î[}•ĎWíKĺçýş]|ATžÔL"@€Ř_6xžćšk.ˇ‘Š+ŻńП[Út]›Šź66ŹWťœ @ŕ@nšĺ–Ó'Ď ž—xzSV˝ňHn"€ŽWžčÂ3ž3Ź/ză @€v\ŕ#ůH÷Žw˝ŤmŁ‚çćča8Ź/˛ťŠ++_dÎBcÖýôBmՆ*OWĘm˝ŽH€ °ď ž˙ŕţ {ы^Ô%xžőÖ[OƒéÁކqaň•†ŸOuŃ'ĐëZd§ňyťĚ˜EĆÍ;‡> @€˜<×/6ď@/VŹXůŞ;]č<‹ĐÓÓ^ -Ď;kLÚ§ÓÎŁ @`OnžůćKž<'xnŸDś6-Fź\L98ĹEŐvn[žhĐĺ*ŤĐóÎÝ.¨-ˇsŇ>­ŻÚ+oç( @€ěĄ@^ÓřŁ?úŁ‹‚ĺađœú…Tq`ĺŐ^ůŹöô§ŻR[Žś•ółĐgYÄplՓˇĺl˘mŤz›§, @€ěĄ@‚çiÁrűäšú/lo+ŚšŰţśÜęT{Ű6Ť|–ąÝŃńńěńG“Ô\ĽĘÉŤœźĘÉSŻśÔŻźĐ_íÉŤ-żŔXő´Ľ\mÉÓö?nťíś˙3É% @€xČCň‚ÉV?<9îžwMŽ{š,W۰= šfň6HžTűÔŽ§ĘÉsd|ÎWőĘ'M§)m @€Ŕĺ*NŤ‘müV}ł‚ájO^Gć´íužœżĘm>Ż˝ú’'eŢĺŇ"c.:ÇY蜼 4ëbm[N>k\ľˇyĘË9Rn´W°œţŞgLRÍMšĆĽ\ëI^ç­rŰ7›şD€ 0_ Ĺ2˛­§<<†ÁqęŐ֎­śaގIšúSNš•ŸôŢŰ_őšSóŞ}XŻöKňłЗLžÓ´ÁkŐ3%ĺ:†őjLÍO[ęmŞ€šâŒI[RľU9íՖźŽęO. @€œM ńWRĹom˝‚ÜôW9y[ŽyŐ^yľ'Żńm[ĘImŰIËI[őľyőŻ%_GĹ'(­ÍT°ZíľĐÚdęUŽ9URkXŽóT^sĆU@žšŸ|XŽśŒKJ=Šň“š  @€f ´ń[ŠXn^^Ápĺ›ňđ¨s ÇUűźźÖ“<ă*՜ÔŰöę?SžŽzÚł° ^ÓßÖŰ`ľmO9G°jnĘIm€|ŇrňoĆĽ/Ĺ&yć'O{]gXoűjĚd¸D€ pÄ]IĂľĺŠáŞŻ‚ájoë)בńmšęužäI•ŸÔî­_n\_)_WĹV0ZĺĘłŔÚL[ŽśYyđڔ@xؖkf~őľőĚ­5U9őa[ú$ @€ł $ŤÔĆsiKĚVýUŽ1m=ĺ:Ň_ĺĘkÎYňÉiú”9I•Ë}ç2˙Ź#€Î˘Ú t¸ŽęŻ<ý)× ĚćOşNSľenRW9y]Ť-ÇW˝ÍS– @€f TVyFŚ\ő*ĎĘóU_Ţ"¨r͕§}XŽśš“źR•+Żöa~šţářKęg  sÁĽ•ŚŐŤ/yő×B“˘á:W۟y“TăNj'˙Ś­Ćg~Փ§ŢśMާmu­ĘŤŻÍS– @€f TVyFV9yu†ÄuŐVĺ6ϸÔŰ#ăŤ^s‡y{Žś/çkëUN{Ľ´ľiXoű.)_6€Îß?š¤ÁĚ\¤mÖkx-Ś›ž_y*XŽ€8mI՞r{žôçźiŤ9ŠWyRź$xnŰRŽ4\_ľË  @€.¨xŹZSoŰŞ^mÉ+Ř–kl=‰ŽqÉŤÜÎI[Rڒ*?Šü[çlŰŞ<?Źw‰}kđŹü˛ôʉSÚsąYh-$›N€›”śŐÖÖë<…TAtľ'O[ň™;,Ošúśş^Ők\ę @€ŔjĂ%Ż”ŽęɫގmŰŰţ”‡őv^ŰWím[­a˜gěZŇ2t.Ţ­Ó2\`ĆWjç׸äŮxRËřśíéO˝ŽßŃ×ůëš5>skLőĽM"@€X^ ąW9Ë´rľľyb´śžrÚÚö*ŰkŢdři žrRőU~ŇzéżéOŞü¤śŔżËĐĂÓć˘ HۋW˝ňś/óŤ>-PRú W@zÎ×ÍŐVí“îž?yڒ’O+÷ţŠţśM™ @ŕRŠßڞ´Uű°œqßU@\c*ś§^m•×ŘEň\3ă’ÚńUď;–ýgt-¤ BłĐÔŰź]c *0nóÚh۟y9WuÎ ¤Ó_çhŻ™öš“rRęmŞzĺmŸ2 @€ŔĽŻU^#ÚzĘUO^ApĆŚœÔś×řĘk|ĺłÚ‡ý—4ĚOZďmŻúRůBôŒ_$œvÁ,ś Fkń5vZ_6^pĆeLՓ×II{{ÔľŇVĺIń,íI9GRŐŰrŰÖň @€ŔBçUžIUN|—4­žśyGÍ­ŕxV^çî/4ĺœŐž|8śí;-/ň „źP}zÖ{ YÄ´ŔľmŤ15+őT@[íÉŤ=yľuŽ Ś3.mŠ'oÇU=ůđşí9'ݧó†ĺÔ% @€ĹsU–§ŐÓÖ™[őÄk5'yŐç•kn;&笔ö¤a>Ť­źČ?ËĐóÎ]‹Ź`śĆVŔ[ýŐ^y *¸Ž 7ő<ÎÜękëu:wň:&ŋĘUO>L5ŘŽN€ pąŔŹXŽmOšęUnë9cę(OŤW_ÍÖŤ˝Î[ç¨öśžňÚŇÂô”×8˛¸ž•gQm9őJi_$ľsÍŠŕ6}I ¤Ó×öWĐ\yĆ%ŐÜYůɨ{ÇU]N€ 0] b°ę­úŹ<ăŇ7<Ş=yĹyí˜jKŢś_ޜó SćTŞrĺ}ű˘ŻodđÂt]qFžTš!ľ ´U_ľĽ˙r)P™[yĘuÔčŞç\uîjKž4ĚOZďýˇúďmQ"@€XD âŻáŘjo󔫞ńUŻ|Z[ő%ŻóTžšmÖŰž…Ëg  §<…žvĄ,,i-°Ę•O›Sm™SŻjÔy2Ż=2śęóĘéKjÇV˝ď¸ĐWe9 @€ŔâëeưÜÖŤżÚ’Ď+W;ŚžFˇ}Ăr]§ňv~ÚfŚł<}ÎIÎ@Ošj–5iZšž1Ő_mý¤ćŸęoŸ:§ťÚŰ@x^9sjMUnëiŚËőÇŤ @€U`V,WéoÇTšÍ畇}Š×‘kTšÍŤ˝ňôUůBqꚪďLůŃ$â>ӄ >š¤fR[îť§ôeLkójŻźćO3­o^[ú’ę\'ľKëÓĆÔX9 @€ŔĹӂÇa[[Żr›ˇĺœ=őśmZ˝Wý휶żĘɓjÜI­ŠŸőésN°ę蜣4 TÓW)cŞżĘ5/cŞ­ĆÔźi}5/csÔܚSíUOޞˇ-ˇc”  @€–¨ř,łŰrŐŰś*'Żr;ŽÚÚźĆŰj^ň¤ę?Š]úďĺú/1Ľeôđ´YXŠ—+×&2žĘĂóU˝ÎUçN{ÍŠś:OŐknňś­-ˇc”  @€Î&PńXfľĺ:Kľ óv|ú†ým}Řßö ŻÓžwXŽą+ĺK˝Â‘+^ă¨E´é´rľ-’gLë/yá"Ő6+ŽĽĆU{{ŽśM™ @ŕěĚś3Ť­ňęŤúĺňŒĎ˜:Ş~–ź;,§Ţ-óúFć-@÷“/~:MImŔ:Ż<­/mŐ~š|Öľj^ú“†ő“Ö‹˙]dĚĹ3Ô @€‡)PÁďźÝÇT˝ň̝VŽśiů°­ÎQíUOž4Ťý¤s™_ěgŽçč §ššeáœ˙0ěk7Z'ŹyĂ<ýŐ֖‡ç¨kÔů†őš[ýr @€ł ăŻa=gkŰŚ•Ť­ňvNľU^}ĂzړÚö“–5ţťŇčŹcW9úaƒ5W;ĚŰąŐלľĺYý혔+ľăŤMN€ °>ië°­­WšňŹdZy^[Ű7œ?­žôŤ9YŇ&~‰0çÍFڀuV˝ÝpoŰrŽYŠĆe^[ÎřÔë|Š'՘“ÚĹ˙Ç^ÜŤF€ PóbŞSy;vV9cgőľí5ŽmkË՟źŇ°żÚWĘW~]W_ńIôéi&…a0{ÖzÎ5œSçż\_;N™ @`1yę´žaŰ"őEĆ´ŤŽ_ůÉs|SO ëüľđ hŠgLĆçÔ9‡yśĎŞ×fők'@€XŸŔ0öÖsĽimŐ>ě;k}};špŚľ=Ž•Íxî ˆk贶ᘶޖ督í›vaż: @€Ŕz†AîđěłúŰöśœů—ŤOÓ_wŮĎŐő“§üłé'Đí%kÓm œśa˝ć¤˝ć¤m8śćľcjޜ @`{‹Ćgí¸ś\+ŸÖ–žaű°^ó7’Żý t­rÎ“č Šŕˇ†ĎjŤţiăgőÍä @€ç'0 p‡őv%gí›9~ÝOžk‘  sËŃýZČ _$^dĚźk .ŠJ€ °&™Aíŕü‹Œ›5fV{‰MĎ9ůFčZ î×Ră§ä‹Ë5őŹăkžœ @`˝sÝ)—š7~^_ŞMÎľÖs  O/6‰¤Ť|™|‘q‹ŒšĚet @€lQŕ˛ńdm‹ŒYŰ'ęą8׺´ŕéž|•`y•ší”  @€X(čqŞ3Í='ÎĂun%€nąD0ÝNOY€<Q'@€ěśŔ™‚äáVś4ˇkŘzÝ.&ĺ5ÔĂSŞ @€ěąŔść!ÝÎĐĂŚ.¨žŚ˘ 0>] –§ ďE=máÓÚÚÓT´ @€ś/°ń˘JŁ  Ý´q @€–¸bىć @€8Dô!Ţu{&@€XZ@˝4‰ @€‡( €>ÄťnĎ @€K  —Ś3‘ @ŕЇx×í™ @`i˙ ľúąęD}IENDŽB`‚gwenhywfar-4.15.2beta/doc/dialog/images/fox16-6.jpg0000644000175000017500000005616012364015347016637 00000000000000˙Ř˙ŕJFIFQP˙ŰC  !"$"$˙ŰC˙Ŕüˆ"˙Ä ˙Äľ}!1AQa"q2‘Ą#BąÁRŃđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚáâăäĺćçčéęńňóôőö÷řůú˙Ä ˙Äľw!1AQaq"2B‘ĄąÁ #3RđbrŃ $4á%ń&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚâăäĺćçčéęňóôőö÷řůú˙Ú ?ő€˙ź9ŕ_ŮŻŘ,ŚÖ¤ˇ˙Mż˝ćv dQ! ŢVĺWaA ą$ú/ö&Ÿ˙>vż÷đŇh_ňˇ;#űŸŢúՒ}#‹ţúŻNNP“Œ]’8ôi6ŠŸŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŻŸôŻ‹>4Ń<'ă kÄ6Ú>Žú‰ćŇ,á…ŮZóÖ5V ™0¨<1ŰĄëšNŹÖ킄_CŢżątĎůň´˙ż”béŸóĺi˙+Č'řŤăUđ§Ű‡€ö_AŞ=Ó4S˛, ˜.žq —ŠŕŠŤŁüIńNŁńBĐ[Üč7>ŸÂ0ë&Ţ&pď$x‹F$2eJ„l  f—ś—ó1ň.Ç´˙béŸóĺi˙(ţĹÓ?çĘÓţţWÍWß|YŤĘšĚŇZiöW> Ôuhlô˝E™”ŠYrËňʸ# ’xâş{?Wśţ#đţ’šužŁ§]ßXi7ŚCq<(ß4ŒĄl˝šČ<íĺüĚ~Ív=ťűL˙Ÿ+OűůGö.™˙>VŸ÷ňž~đ÷ĹŮÜęš$iڅđŐuť•šŐîÚ(Łľľ”… ‚K`ńŘžjŢšń÷R]&]WIđć“ ˝Ż‡mľ™âÔŻž9e3śŐŽç zž38ŁŰËů˜˝šě{ˇö.™˙>VŸ÷ňě]3ţ|­?ďĺ7Mš7zuľÓC ™ĄI xČc?ôÎ/űč֜óîţňmÄ?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ňě]3ţ|­?ďĺMŸúgýôhĎý3‹ţú4sĎťűÂŃěCý‹Śϕ§ýüŁűL˙Ÿ+OűůSgţ™Ĺ˙}3˙Lâ˙žóîţđ´{˙béŸóĺi˙(ţĹÓ?çĘÓţţTŮ˙ŚqßFŒ˙Ó8żďŁG<űżź-Ä?ŘşgüůZßĘ?ątĎůň´˙ż•6éœ_÷ŃŁ?ôÎ/űčŃĎ>ďď Gąö.™˙>VŸ÷ň›ý‹¤˙υ§ýő˙׍˙ŚqßF˘?őÎ/Κ•GöŸŢcĹi?†žń6w4V6°ępÈ.ˇmh™wđO—–9\É ‚ ë~' čzŸÉ(;űŠ+Ҏ•xŠOr#QÁ´ŽëB˙$dt˙šŠÎ?šýőY0čö?2ˇĘÝ˝6źđéş°ş>эƜ‚;~ËűUŒă(=—ę(úç÷CęĎůŠVžđ]ĄœŰx7Л„’9ĘXD<ēŐž^U°24˙řBüýښŸü">űtm%ĎŘbóǏ,†ŰWtŔÇJľE\_ĘWĚUÔ<á BŰě×ţđýÔh{Ÿ.[(Ů|ç9y0GŢnçŠď\˙Ä?…zî­›RžkkXmÖŘŰZĂlFŤ#DŇĆv‘¨ bşŞ)ťýĐúˇ™§˙lă˙ž¨˙śq˙ßU™E]ţč}[ĚÓ˙śq˙ßTŰ8˙ďŞĚ˘Ž˙t>­ći˙Ű8˙ďŞ?íœ÷ŐfQG׺Vó4˙íœ÷ŐöÎ?űęł(ŁëżÝŤyšöÎ?űęűgýőY”Qőßî‡ŐźÍ?űgýőGýłţúŹĘ(úď÷CęŢfŸýłţúŁţŮÇ˙}Ve}wűĄőo3OţŮÇ˙}Q˙lă˙žŤ2Š>ťýĐúˇ™§˙lă˙ž¨˙śq˙ßU™E]ţč}[ĚÓ˙śq˙ßTŰ8˙ďŞĚ˘Ž˙t>­ći˙Ű8˙ďŞ?íœ÷ŐfQG׺Vó4˙íœ÷ŐöÎ?űęł(ŁëżÝŤyšöÎ?űęűgýőY”Qőßî‡ŐźÍ?űgýőGýłţúŹĘ(úď÷CęŢfŸýłţúŁţŮÇ˙}Ve}wűĄőo3OţŮÇ˙}Q˙lă˙žŤ2Š>ťýĐúˇ™§˙lă˙ž¨˙śq˙ßU™E]ţč}[ĚÓ˙śq˙ßTŰ8˙ďŞĚ˘Ž˙t>­ći˙Ű8˙ďŞ?íœ÷ŐfQG׺Vó4˙íœ÷ŐöÎ?űęł(ŁëżÝŤyšöÎ?űęűgýőY”Qőßî‡ŐźÍ?űgýőGýłţúŹĘ(úď÷CęŢfŸýłţúŁţŮÇ˙}Ve}wűĄőo3OţŮÇ˙}Q˙lă˙žŤ2Š>ťýĐúˇ™§˙lă˙ž¨˙śq˙ßU™E]ţč}[ĚÓ˙śq˙ßTŰ8˙ďŞĚ˘Ž˙t>­ći˙Ű8˙ďŞ?íœ÷ŐfQG׺Vó4˙íœ÷ŐöÎ?űęł(ŁëżÝŤyšöÎ?űęűgýőY”Qőßî‡ŐźÍ?űgýőQ`r/űę¨ŃBÇwńŐźÎOâX˙‰ |¸ţď÷˝čŠ>&œxZăćQň÷âŠú<%okB3ľŽZ‘ĺ›GUΏcó+|­Đ{ÓiĐčö?2ˇĘÝ˝6ž_üyzřáD(ŞWŠłę[L˘HZ)Ła•b ‘ߏCÔ ĹMoŔ­b&Żá†ŐDŚą ˜ ţ`ęž^wnăŚ3XrŤj_3ž‡OEeéhš„֖íč2öž[}U”0ú*KŤ=ŇÖ[ŤŤ]> xPÉ,˛FŠˆ dłŔrI˘ŃďřÁ ˡő÷U$Ó´Š],,™eXB¤ę8ŹWđ&ľxöz6§á˝Jć0KĂi<2şÁ%T’(´{ţđBňíý}ÇIETţËÓ?či˙~Wü(ţËÓ?či˙~Wü(´{ţđGyvţžâÝSű/L˙ u§ýů_𬍠ˇÚ•ĽÚ$öö“‚'PUfí퀠ŕ`UFš”\“؇QŚ“[ĎXę^ żŐdŇloü=u¨ÄH’ŇĄy“r€äcéZßŮzgý­?ďĘ˙…MŁßđ˙‚UĺŰúű‹tUOě˝3ţÖŸ÷ĺě˝3ţÖŸ÷ĺ‹Gżá˙w—oëî-ŃU?˛ôĎúZߕ˙ ŚĂĂë­GŁ5­ ž’ÝŽR/łbVUfÎ1ŐÔc9ć‹Gżá˙W—oëî5čŽs[Ő| ĄÝĹg­j^Ó.f]ńĂw<0ťŽqŹA# Ž=+]4Ý-Ô:XY2°Č" Ę‹Gżá˙/.ß×Ü\˘ŞeéŸô´˙ż+ţeéŸô´˙ż+ţZ=˙ř#źť_qnŠçuźiúž™ Š%Ş]HcœDĄwŽäťňpzŒœUm[ÄtB];U×|)ay<Ë{›ťx¤L€FUˆ# ƒô"ŠÓI)_rFŰVŘęčŽIžđŽ­wöm-ôťç6Šv­oÉDÎ菎ÓóFマ*âÁ˘6¤úp°ˇűBBł0ű'Ëą™”|Űv“•Ěrž‡ ˆ˘ŃďřÁĺŰúűz+^žđo‡Öׯ4 %g$Doe†!Č]äg=jőĽŚ‰ykŐĽśqo*‡ŽXŁFGSЂ8"‹Gżá˙/.ß×ÜhŃU?˛ôĎúZߕ˙ ?˛ôĎúZߕ˙ -˙‡üŢ]żŻ¸ˇEsž* ¤ŘĹuŚĹ ŹŢpRńĆ •*Ü9ČSőű˙x}!_čz`œ‘ęĹ”Œg !#=O<Ő:iEJú2Fäămú+™—Xđ\vjôél˘´[Ăs ż™ DĚĘ şŠW$ŠT“ÓŽFdMGÂm˘Ţęćhíl!iŻśMÖꊟů‘2‰íů‚•‚Š›Gżá˙ŤËˇő÷F &hRhě-C)ňdGjĘÖő_hwqYëZ—‡4˙—|pÝĎ .ëœd+HČ#J-˙‡üźť_qŃŃTÓMŇÝCĽ…“+ ‚!RüОôĎúZߕ˙ -˙‡üŢ]żŻ¸ˇQÜOBy8Tłčä÷EVfEPEPEPEPEPEPEPEP/ń4ăÂ×2—¸÷Qń4ăÂ×2—¸÷WŐĺżî°ůţg›_řŒę 9Ńě~eo•şzm:ÇćVů[ ÷Ś×Ďc/Słü(•%˙Íˇý{Í˙ĄG\ÂČuóŞx‚hď´ą¤ęíÚÉÍÉ>ct—ÍÚp~áă#Ţ˝ ĄVšK‚NäF@;aŠ“˙ Š’šŰŃ#Dľgü5{ír÷J“T׾–Ž Y^ňŞźćyó+…`\á!˛pŔŕc7Nş—ƒźYáŐÔćńéđäňIŠiţ ¸˝†yŁ'Ňłsĺ&A]Ă Ĺ{ľŽ;ďÙtY|%fúŠýĽk°—űAîđűFĺŢěÄcűšăĐWđƒĂZ•˙‡<âKSł{Mćąľľ°d˜™ă"IL¸aĘŞš8ĎJőú(¸'ŕo]]xŰF:UË´­…Ô“YĎâ ľ EUtFëśÚ@r #c–ůrákÎÖź ,üOŞßë—qÜ6ťa=üŽ‹r-ŠK;`Ű&B  03ƒ´íőÎŘřU"×áÖoľ˝[UšŐd[8îÚ!ˇ™ĂĆĽŽÜšbyää¸Xó…:Śľ}ŽčOyâ/í9"ëśkóOrĚbbWěM­ąIýŇĐF_ עřgoöŽ˝¸ž8ëĎ]%RÓôŘ,ŽnŽ"yޟ{†#äž8÷5Ź&”$Ÿ[~fsƒs‹]?Čňkhš–áO ëş‹4ŕ’Ă Q[…˝ÓQ!vY&tb¸%BȌKƒÉČŞß um~÷UѤ—^°maŕ”ëZuLj&žáäň˜íűDŤlVPżtˇ#/kŰhŹŽicÇt\żĂ˝GPŇ?ł^ió_É$]mÇŘËlŒŤüŞ đ9Ď0MŹC‰żáńF§ŤiqxJęćâęMFK“mzŁ÷EdbLRó ŒˇbŤ^ÓE IŹÍŻčę QŐoo.źs|Šsp÷,nâh‚ČŠä…cćˇČ )!xŠ<ú|\śˆo5ťořFĺg’{÷ťÚćâüîIV#Ś@^>UĎ>ŻE eâ­;XŐ~-ŢŘi7úmšĎáˆă¸kËşâQň¨‘?]ĂÚ°>!Ď…ô¨ü1§_^[\č^ˆŮÜĎâŹ|ҊęŚ(cFRÜŹ1ó(ď^ŮE =â=tOw,ţ#ń ţŠĂv÷z2ÚŢ=şÜ]8”ĚUT4ŠD Dw şsX÷şÖą$:zƸš}”žąšÎęóÄSi‹5ÓŤyÎdHßϐb3ąÎ9ÎÖÜqëž(đôšôfŻęúu´‘47Y4*ł!ę xٔă#(Tó׼kY[AegŹKźŹQ"ôUQ€Đ w “˝ě–~“R¸ˇšžhâ73AŸ.Is&@;IÉJOŠ}ťÁ‡ţFX?ôDőÓęlˇ6ˇźŠÖŻ˝‘‚r<{ ťZNiÂ)tżćg5)7×ü3ńFş§ÄíhGS˛x^ÝĐŘÝ˝ťoóîśąd ¸?);NyŠćľ{^Ô4[y˙śŻígźđ߇çi-ć)˛YďśĘę°8ô˙iz‹k¤ięâÚŮ6Šw,Ěs’ĚOV$’OrM UŹ—ňü1ҟRÔíu9ţĐŕ][NfI# Œů…Wy ´Ú2A=é˙ăŐĽř‘ŕÄŃnŹmŽüGylÓǡl9UĐçßuvšĆ›Šlś÷"޸pP€s‚;ƒëWkYTNœbş\Î0jr—{5ńeoŽĽŐôÍNţwXtM.gKI巄ĚodGu@ůpI輒 ŐMcOĐô‰~)Řś§zšƒé˛ËgkwŹÜHóĂýœĄŸË’Cć€Á†ân1‘^áEesK{á{Ç:n™ŠŠÝŰ_řyî§Kťˇ™|čä…C bDy°*›WŔĹTńVŹjżďl4›ý6ÍgđÄqÜ5ĺƒ]q(ůTH€Žáí^›E 'ńx|/ĽGá:úňÚçBđěFÎćÍcć”WU1C0şĆĺa™Gzˇâ=tOw,ţ#ń ţŠĂv÷z2ÚŢ=şÜ]8”ĚUT4ŠD Dw şs^ĂX~(đôšôfŻęúu´‘47Y4*ł!ę xٔă#(Tó׼ E{­kCĄÇŹk‰§ŮKá{ŹîŻ€TWśjœogXšŢX_ˑŁœŻ*ĘAS…<‚ăQ’L™-:Ô´-]źS׆ü-ŞčŞ¤×š‚ją‹ ˆ<ĐegˇYIw‘3Ö C0;¸ÍP×ü â=sEŸ@ŽŐ4֛ZÔľŐZ`L1ź’yh˘7űՓ Ó ź1Zôůt{I7î›P÷gnĄ:ăw™œař˙ZŘÇL&1ĺŚŇ]ŇMűŚÔýŮۨN¸Ýćg~?Öś1Ó Œyiľ\Ť–k­ŮřžĂU—ÂłZÚÝh–Ú|°[OM>HĽ”~qşLm{[JŞE}:*ć (W@ó[Ć0˜Ç–›]ÂÇáÍ0h–şn’ô^Töňů“ÄňÇć\]?"ň׎ŘÔaB†}¸OFŹŤ˝$š !špRĺf“ÍžIHřUb@ůœŽ1ňí@ŐŤœ“ŒQMI°˘Š+#@˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(—řšqák™GËÜ{Š(řšqák™GËÜ{Š+ęňß÷X|˙3ÍŻüFuPčö?2ˇĘÝ˝6Ώcó+|­Đ{Ók籿ǗŠŮ‡ţBŠ(ŽS`˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˜ńfľŠGŹŮx{D›KľşžÚ{ëýCR”¤e„@ .˜pkÓľ×%L€6ŠtpxËÒ藺ÁÔ[ <Ťąqo,2Âçn˘u;—n[pĆr+Ÿ‹Çéy¨kékqoiiŚ9RKË„‘^âVFI";\…ĘŒn rľgđű[X5É^{XŽ.u?PąŠ]Fćô+Ú˛6Ée˜o!Šc | đ8ćĹ˙ƒźMŞÜxŽňôčöŇę˛éM PÜI"ĆśłůŽĚjI#Ą ßÉzÔGă? ÉŽc& ĆčÜ5¨ołJ iÔbmň̃ä ťƒĹZńnٍé:ĆĄŚi‘j3ŔĽĚ2Ýy ´IÝľ˝:`×oŕż ´Đ^]/űÓ^:Â] _íl>Ň×+ fŃűĆÁ“*>îMv/‡Ušđí妍meqwqBî堌ÜąšČĎMźúŠ@MáKűkĂzfąäůnłŠçĘÝťfô ˇ8Ćqœ ĐŹ‡ś:Ɨŕý7I×-ě!ş°ˇŽÔ;—$XŃT>Z4 œ—ڎé (˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šĺţ&œxZăćQň÷âŠ>&œxZăćQň÷âŠúźˇýÖ?Ěók˙T:=Ě­ňˇAďM§@sŁŘüĘß+tôÚůěońĺęva˙…˘Š+”Ř(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(ŽoY:Îťă'Ŕú¨şC]ZϨj7žHyÎ2‘˛Á“1yŁÁ`UF[ ĐéţŐ|5w#ˇŒő-oL{wۧMr— ¸M˘ů~Z0 ĺçqÎě ĺv¸Ż¨ú+ř§â[Ď éšTöwúNöÝN;9nő8ËÁ2HĹČGÝĺ€ćĄđ/‹ľ cĂzŚĽ=Ź:šąż{[iôtÄZŠ˜’#ŕ ĚĘrĺróR°­Ęéąé:ĺŘÝi×1ZͧË5ɖ]˘$@ŽČű˨1œ‘ƒŽ}źk&Šâazşśžt˜ŇŮ­íŢx^y™[Y\l†l ă 1E‚çĽŃ\”^=Ó$Ôăˇ~Ś,%żm6-Pße{Ĺ cçó>ú” Sia€Őšâ×$´DĐ.4ë{“ ß-ô2*`玄œíţ 1šC4hŽoáÖť}â [˝B;_: ŮíDöťź‹Ą•ócÜI pxÉäHćşJ(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šĺţ&œxZăćQň÷âŠ>&œxZăćQň÷âŠúźˇýÖ?Ěók˙T:=Ě­ňˇAďM§@sŁŘüĘß+tôÚůěońĺęva˙…˘Š+”Ř(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘ŠŤ›i˙ f•â3-Ý˝ćš%EkvUG"íhĽeăÎ×ٕůŃ9Q]ŤŹ˝Ü{ąĘă;vž¸'8ă9čHÇ9Źz)ÝÚÂą‹âk˛čî×"ŚęQß`ÇżÍڎť:Œg~sĎN•…ŞxϾ׏ŹuUł°Őn­ďVĐŰoŠ)‘•Ľ ŽřĽŘťŁzšĎĚqŰŃJă<ďMřaž°ßXZM}yi}n4ý1m ´šŘŤ!;”•99nyłqŕ=BţMnăSń 3\ęŇiîL68á“yULŒHnœˇ“ČŔÝî+4şŽâ #ŽŤxzßV:´V?cÄÂo8ÎÍż1+nfî݊×řƒĄjŢ#Đ?˛´­r=#̕MË˝łL'„gt_,‘˛†ă%XdwÍtTQp3<1c¨işDVZ…Ć›3CňEö ´…#Q’LcŢÇNiŃE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@żÄӏ \|Ę>^ăÜQGÄӏ \|Ę>^ăÜQ_W–˙şĂçůžmâ3Ş€çGąů•žVč=é´čt{™[ĺnƒŢ›_=ţ<˝NĚ?đ˘QEr›Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@žŠe7Šţ%hţ}N÷MÓ[OšŐui&É/"ă‡ěŰąş5c8bęCaHI˝e§Ăm—R]čWÚĚ6’ŰźgO¸Ô$ş€J><4ĹĽś=˜ßł;s’j 5­3WšľóŽôš^[9ŽŚxÚ6`Á%†0çĽkę:ʎŠT†Á]¤ťqqŔ €zgޏâ­5kgsÎ~/ë7Ú>™˘›-RűL[˝b+[‰ěmćqG!!Ł“'*˝šĽŕ?ę—> ×5{›Řu(lu`ąťÔ™,XS`-q„"Žd(§ Ţyě5í×Y“L’ęIé×É{–@Üꏠ6AĘáĎLœÖNŤŕm'P—VÜß[˙iÜZÝʰşmŽâݔ¤Čʤn;# r‹Ç\΃1´ß‰Ö÷z§u•ĺý•ő˝„p麒ÜŰÜËpPE˛}Ť…Ëá‰PWkpxÎUψľ˜5śťksnmE-lőG1Š–á”źrmSƒ•Ü6.íĽO×T<§Óĺ:Ź—şžŻ{>Š%œ—3LńÍŹždaBĆFx GĄ$—  ńí̗^ WĂ׹Ňbžűff3yĆć˜™Wh;÷rÜWGâŘľ tIN™wŠ[\FCěříÚyţű@1‚}OĽdCŕ-2=N;¨ę†Â-Aľ(´Ł"}•.K2“Ěűě\)}ĄŽvÖ濌ϪZG śł¨é$ÄöF-ç‚6‘":‘ĎB˝@¤Â}_TŐü=vÚĹ̓^Zj[2ÜB‘\ÄŞAUPó6rŸ) ¤g5×ÖG…´ OXÍom5Í̡7 susrᥞVŔ.Ä3…P Zô˜ÂŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( _âiDžŽ>e/qî(ŁâiDžŽ>e/qî(ŻŤËÝaóüĎ6żńŐ@sŁŘüĘß+tôÚt:=Ě­ňˇAďMŻžĆ˙^§fřQ (˘šM‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Čém$ލР31Ŕu$Ó-nmŽŁ2ZÜE:´´né‘\gŒ-?śźĽh—Úcj–0é7ڝ––o>Ëł¨BEc#ˇČčČňšB"2[(L˙´y/<ž-ńĂ[/‡úüÂâÍŹŹ"{+y Rgű8ŠBęąîp]‚Œ6×@+—K“}NÊŕž4Ďs›áč­ĆŽësŽC Đi—m<ń˜ĺ%‰#ĆHď•—ŕ}zňÇÁ^"şşÔć˛6şËŰYĂ­/.l”ůJ°Ę‹ĘěĚYť iXw=FŠó?ˆZĂiźmo>­kŠŮéö˛Éaqc†éŁTw†cć Rç#'pQ‚3ĆNŁuŞXk~4“[‡IÔŽcm<¤Čĺ€o,šee-7ˇ*|Q`šě”WœŰřÓÄ-5ׇKţÁť×ŽŽ–˘7űZ´ľ˛Ědß´ţńrcŮŸ˝‘[ŸüQ†ôx#:–{ŠN--./%T† –•‹0аOĚBŻńQ`:Ş+ƒřŞĹŞ|<‡nşÚÔś××°=ġh”ŞÝKĺď|““Â3ü$cŒWyHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP/ń4ăÂ×2—¸÷Qń4ăÂ×2—¸÷WŐĺżî°ůţg›_řŒę 9Ńě~eo•şzm:ÇćVů[ ÷Ś×Ďc/Słü(…Q\ŚÁEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPV+oˇ[^Éim5ĹŁˇ’X•š*T”cʤĘAÁ#<ŐŰËůîF ÁÁ,O9Ćć$ăŰ8ďŒÖN­ŠiúM„ˇúäv°Šy%™ÂŞ€ <Ÿ`OáTź1âŸxžŸĂúՎ§lQÍźĄś?úţtőoTŇě57ł{č<Ö˛š[Ťs˝—dŞCpFxfŕäsTu/ č„÷óÝX–—Pň ˤňFY 9‰ÁV]N0ë†ŕsŔĆ݆sĐř+ĂQZjVß`’TŐ6˝iŽĽ–IZšś÷Ré+2QŤ&Ǎ€îXᔷĘ>p•éţ&Ót_í#Ź=…—öżŘÚŮîü•űGŮłšc/Ű<݇nqœŸZç šX\´NT‘ƒčGĄÇą§Os4ČŘ;BŽ}p03ďVĽĽ‰ś§›|s´Ú†-—cމ|CýŽůśÁ7îŚů\ě~?ŕ&ą<z<9áZNfĐŻc×VôÍ9o°™ü”†;0e“!ƒUFČMzĹŐĽ­Ń…Ž­ĄœÁ(š$aźˇ€ëž‚FG<šŻyŁiŚčŢiV7&î4Šç͡Gó‘I*Ż‘ó(,H“ëSqžaoăAĽx‡Mžćę+Ë-_OąŽóQŽÔĎkÓDŹň‹ra%7ą+¸psZöëRŃußă[:Őźš ?hžL^ŕ‚ŽŞĄ7ms‚`=FkÔíĘĎOłŠĘÂŇ KX†Řá‚0ˆƒĐ(ŕTô˜ÂŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( _âiDžŽ>e/qî(ŁâiDžŽ>e/qî(ŻŤËÝaóüĎ6żńŐ@sŁŘüĘß+tôÚt:=Ě­ňˇAďMŻžĆ˙^§fřQ (˘šM‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  Ÿř‹Hđí´3j—^[ÜËäÚŔŠ^kŠH%b‰,îŘŔP $ŢŤřwĹzfľ¨ÉĽ¤žŠÇšk NÂ[KŸ#pO8G"†1î`ťąŔŽ˘¤ąˇž^ŐŽlŽ/tÁ§^ÚŁG •,.›c­Ěœb%1$Ńys0^ŒÄzOˆnídłĘ2ĘĄX\9\ĎLî*Řô\öj*×&úœˇŹčú˜˝Öő[2Ô¸A5ĺÂB…Žpť˜žŐ&•ŠiÚľŠ_iWöˇö’gdöÓ,ąś:ᔐkŽřÂˇŽžM:kx.ψŕň¤¸„ËŸ*oźĄ”‘ôa\Ɲ||5áďŮëŠçX:ĚW7ŚĆᏥ)rbŽ)ŃĆZvŚ˛ĚĽ%9@°ěé˝@Vّ]•!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@żÄӏ \|Ę>^ăÜQGÄӏ \|Ę>^ăÜQ_W–˙şĂçůžmâ3Ş€çGąů•žVč=é´čt{™[ĺnƒŢ›_=ţ<˝NĚ?đ˘QEr›Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ ŒČáъ˛œ‚4ůćšw4˛JŔ`bN?ŽŠ(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šĺţ&œxZăćQň÷âŠ>&œxZăćQň÷âŠúźˇýÖ?Ěók˙T:=Ě­ňˇAďM§@sŁŘüĘß+tôÚůěońĺęva˙…˘Š+”Ř(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šĺţ&œxZăćQň÷âŠ>&œxZăćQň÷âŠúźˇýÖ?Ěók˙T:=Ě­ňˇAďM§@sŁŘüĘß+tôÚůěońĺęva˙…˘Š+”Ř(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šĺţ&œxZăćQň÷âŠ>&œxZăćQň÷âŠúźˇýÖ?Ěók˙T:=Ě­ňˇAďM§@sŁŘüĘß+tôÚůěońĺęva˙…˘Š+”Ř(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šĺţ&œxZăćQň÷âŠ>&œxZăćQň÷âŠúźˇýÖ?Ěók˙T:=Ě­ňˇAďM§@sŁŘüĘß+tôÚůěońĺęva˙…˘Š+”Ř(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šĺţ&œxZăćQň÷âŠ>&œxZăćQň÷âŠúźˇýÖ?Ěók˙T:=Ě­ňˇAďM§@sŁŘüĘß+tôÚůěońĺęva˙…˘Š+”Ř(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šĺţ&œxZăćQň÷âŠ>&œxZăćQň÷âŠúźˇýÖ?Ěók˙T:=Ě­ňˇAďM§@sŁŘüĘß+tôÚůěońĺęva˙…˘Š+”Ř(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šĺţ&œxZăćQň÷âŠ>&œxZăćQň÷âŠúźˇýÖ?Ěók˙T:=Ě­ňˇAďM§@sŁŘüĘß+tôÚůěońĺęva˙…˘Š+”Ř(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šĺţ&œxZăćQň÷âŠ>&œxZăćQň÷âŠúźˇýÖ?Ěók˙T:=Ě­ňˇAďM§@sŁŘüĘß+tôÚůěońĺęva˙…˘Š+”Ř(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šĺţ&œxZăćQň÷âŠ>&œxZăćQň÷âŠúźˇýÖ?Ěók˙T:=Ě­ňˇAďM§@sŁŘüĘß+tôÚůěońĺęva˙…˘Š+”Ř(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šĺţ&œxZăćQň÷âŠ>&œxZăćQň÷âŠúźˇýÖ?Ěók˙T:=Ě­ňˇAďM§@sŁŘüĘß+tôÚůěońĺęva˙…˘Š+”Ř(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šĺţ&œxZăćQň÷âŠ>&œxZăćQň÷âŠúźˇýÖ?Ěók˙T:=Ě­ňˇAďM§@sŁŘüĘß+tôÚůěońĺęva˙…˘Š+”Ř(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šĺţ&œxZăćQň÷âŠ>&œxZăćQň÷âŠúźˇýÖ?Ěók˙T:=Ě­ňˇAďM§@sŁŘüĘß+tôÚůěońĺęva˙…˘Š+”Ř(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šĺţ&œxZăćQň÷âŠ>&œxZăćQň÷âŠúźˇýÖ?Ěók˙T:=Ě­ňˇAďM§@sŁŘüĘß+tôÚůěońĺęva˙…˘Š+”Ř(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šĺţ&œxZăćQň÷âŠ>&œxZăćQň÷âŠúźˇýÖ?Ěók˙T:=Ě­ňˇAďM§@sŁŘüĘß+tôÚůěońĺęva˙…˘Š+”Ř(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šĺţ&œxZăćQň÷âŠ>&œxZăćQň÷âŠúźˇýÖ?Ěók˙T:=Ě­ňˇAďM§@sŁŘüĘß+tôÚůěońĺęva˙…˘Š+”Ř(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šĺţ&œxZăćQň÷âŠ>&œxZăćQň÷âŠúźˇýÖ?Ěók˙T:=Ě­ňˇAďM§@sŁŘüĘß+tôÚůěońĺęva˙…˘Š+”Ř(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šĺţ&œxZăćQň÷âŠ>&œxZăćQň÷âŠúźˇýÖ?Ěók˙T:=Ě­ňˇAďL!XpYO+‘őő|:=Ě­ňˇAďMŻžĆ˙^§fřQ"űŸ˙>’˙ŕÂë˙ŽŃö=?ţ}%˙Á…×˙ŠhŽkšŘ‹ězüúK˙ƒ Żţ;GŘô˙ůô—˙_üvĽ˘‹…ˆžÇ§˙Ϥżř0ş˙ă´}O˙ŸIđau˙ÇjZ(¸X‹ězüúK˙ƒ Żţ;GŘô˙ůô—˙_üvĽ˘‹…ˆžÇ§˙Ϥżř0ş˙ă´}O˙ŸIđau˙ÇjZ(¸X‹ězüúK˙ƒ Żţ;GŘô˙ůô—˙_üvĽ˘‹…ˆžÇ§˙Ϥżř0ş˙ă´}O˙ŸIđau˙ÇjZ(¸X‹ězüúK˙ƒ Żţ;GŘô˙ůô—˙_üvĽ˘‹…ˆžÇ§˙Ϥżř0ş˙ă´}O˙ŸIđau˙ÇjZ(¸X‹ězüúK˙ƒ Żţ;GŘô˙ůô—˙_üvĽ˘‹…ˆžÇ§˙Ϥżř0ş˙ă´}O˙ŸIđau˙ÇjZ(¸X‹ězüúK˙ƒ Żţ;GŘô˙ůô—˙_üvĽ˘‹…ˆžÇ§˙Ϥżř0ş˙ă´}O˙ŸIđau˙ÇjZ(¸X‹ězüúK˙ƒ Żţ;GŘô˙ůô—˙_üvĽ˘‹…ˆžÇ§˙Ϥżř0ş˙ă´}O˙ŸIđau˙ÇjZ(¸X‹ězüúK˙ƒ Żţ;GŘô˙ůô—˙_üvĽ˘‹…ˆžÇ§˙Ϥżř0ş˙ă´}O˙ŸIđau˙ÇjZ(¸X‹ězüúK˙ƒ Żţ;GŘô˙ůô—˙_üvĽ˘‹…ˆžÇ§˙Ϥżř0ş˙ă´}O˙ŸIđau˙ÇjZ(¸X‹ězüúK˙ƒ Żţ;GŘô˙ůô—˙_üvĽ˘‹…ˆžÇ§˙Ϥżř0ş˙ă´}O˙ŸIđau˙ÇjZ(¸X‹ězüúK˙ƒ Żţ;GŘô˙ůô—˙_üvĽ˘‹…ˆžÇ§˙Ϥżř0ş˙ă´}O˙ŸIđau˙ÇjZ(¸X‹ězüúK˙ƒ Żţ;GŘô˙ůô—˙_üvĽ˘‹…ˆžÇ§˙Ϥżř0ş˙ă´}O˙ŸIđau˙ÇjZ(¸X‹ězüúK˙ƒ Żţ;GŘô˙ůô—˙_üvĽ˘‹…ˆžÇ§˙Ϥżř0ş˙ă´}O˙ŸIđau˙ÇjZ(¸X‹ězüúK˙ƒ Żţ;GŘô˙ůô—˙_üvĽ˘‹…ˆžÇ§˙Ϥżř0ş˙ă´}O˙ŸIđau˙ÇjZ(¸X‹ězüúK˙ƒ Żţ;GŘô˙ůô—˙_üvĽ˘‹…ˆžÇ§˙Ϥżř0ş˙ă´}O˙ŸIđau˙ÇjZ(¸X‹ězüúK˙ƒ Żţ;GŘô˙ůô—˙_üvĽ˘‹…ŠSžƒŚ)ŒqH:Ťęˇ Žý ÔĎ´xsţzÁ˙ƒkţ=]UŚ˝¤xgŔzvĽŤŢGgköhYݲÍ$˛pË;łąŕI< ~%xf] \Őm矐č–oy{g-œś×iŁ8>Lęóm¤€ zÖÎNĆiÉŤœěrř~I8Ţ'v *ŽŤrI' ÎŤ/kŚ˘3˝ŹŠŞ bu IýíwÝĹĄź›7Cql[c€rŹ˝éĐ×á‚gşđ÷žZMě÷w2Ŕî őĂ(o¨ŽDöfˇ*ýŁĂŸóÖü\ńę>ŃáĎůëţ Ž?řővşßŒt \ŃôMSRŽŰPÖdxôřYX™™,2 Ô ą$ÉĽ‹Äś’xśçĂ+âňŢÂ+çr–c’I@9ÎěÄŮă#ŸBŃţżáƒŢ8_´xsţzÁ˙ƒkţ=GÚ<9˙=`˙ÁľÇ˙Žę/ÚIâ۟ Źs‹Ë{ŻČYŽI$Eç;łgŒ`Ž}5>ŃďEŁýĂźyÚ<9˙=`˙ÁľÇ˙Łí˙ž°ŕÚă˙W§}ŁŢ¨x“^ˇĐ|;Šëˇ‰,–Úu¤ˇs,@d °PHŕd­ő˙ ńŔ}ŁĂŸóÖü\ńę>ŃáĎůëţ Ž?řőzUĽú\ÚCs`’˘ş†ęć¤űG˝ő˙ ńć?hđçüőƒ˙×üz´Ş ŞĽTpbŘRI?RIŽűíőćúgÎŁî¤ó"ŽĘ˘F@j™ĹZčqnöfÄӏ \|Ę>^ăÜQGÄӏ \|Ę>^ăÜQ_M–˙şĂçůœ5˙ˆÎޝÇćVů[ ÷ŚÓâ˙E >Fč}é•ó¸ĎăËÔěĄü8…Q\ĆÁEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP­ďż˛|ŽZŘOŠÁĄ\ŰŢ]ŮŔťäxÚÎH|Ä_ădiUöŽH8žńˇö‡Œ/|IŻi.Ż ” Ôt¸ÍՄśóßÜOľ‘HByg’Ł&\.yŽîŰQ¸´ľ‚ŃŹ.&ű<)’"\*… Ŕƒ€2=sÔsRlO˙@Ťßűę/ţ.ˇ–˛m~fQiE&s í/ôŮő(e/qî(Ľř—˙"ľ×ʧä=O¸˘ž§,WÂÇçůœ˙ˆÎƒG˝´żĐ,g˛žŢâBÉ,GS‚08 ƒGZžž;ýšž$xŞúňóĂ×÷Âň;şŠâ}Ď>D‘(BÄüĘ7ąŽpŇ|WŹţś?űâź˙ěď­ţú2ľüżŕšFť¤šŘőş+ȏŠő“˙-Ł˙žđ•ë?óÝ?ďOű_ĎřÁ×?şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä_đ•ë?óÝ?ďGü%zĎü÷OűŕQý…/çü?ŕ‡×şzíä-â`ő?ďM˙„ŸX˙žé˙| ?°ßóţđGőĎĹk›{o Ěne†$*ْWŞ $“€äžÔWË_´ˇŽźAě^Šá#ľ˝ąY§‘°/"4`çUČ'‘œ IâĺƒJ„5ˇ_Ä=š¨ůßS˙Ůgwenhywfar-4.15.2beta/doc/dialog/images/gtk2-4.jpg0000644000175000017500000004163412364015347016541 00000000000000˙Ř˙ŕJFIFQP˙ŰC  !"$"$˙ŰC˙Ŕë?"˙Ä ˙Äľ}!1AQa"q2‘Ą#BąÁRŃđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚáâăäĺćçčéęńňóôőö÷řůú˙Ä ˙Äľw!1AQaq"2B‘ĄąÁ #3RđbrŃ $4á%ń&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š˘Ł¤ĽŚ§¨ŠŞ˛ł´ľśˇ¸šşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚâăäĺćçčéęňóôőö÷řůú˙Ú ?÷_x/LÓ4xžH –éăýäĄóźœnů°܎|’ž3Ő<;ᅶŠ}4^ęŒRŇĆŐˇK1O$Q݉WCĄČÜěî{ë_7üfÖő]?ă.Ť4.#0ÚÁťc;c(íúšjúźŤ<Çčó[w÷Up´# q˛HőüE6ŸŰ5Ÿ‡ë ˆ’K;őš–!ęŃár}ĽąŽĎHśđöŻŚ[ęZlvV—)RS†ĐűE|°śŃżÔŇ„’=ŁűL˙Ÿ+OűůGö.™˙>VŸ÷ň¸OÚWÔôO†w†“rÖWKcšĂ{¨•‡ĐŠ ýkřcă˙=Ÿ‹Ż|Uiľ™â˝>}šę=’#U]Ń(čçć=ëäÝY§kżźŮB6˝]ţĹÓ?çĘÓţţQý‹Śϕ§ýüŻÔ˜ţĹÓ?çĘÓţţQý‹Śϕ§ýüݏřšă 3Bđ•‡ö™­kşĆ’ÚƒKlf’9]ąŚDŹ[ćŔ žâľő‹:厳 5׆ Ň4MJŢÉćťźĘ#–vĂBZ%"6^.bGAÍ?m/ćbökąë?ŘşgüůZßĘ?ątĎůň´˙ż•ćż|KăÜř˛?ĎŁ\G§kזPˆ‰bňä&€cîł|Ç˝z†éœ_÷ŃŞU&ŐîÄăЇűL˙Ÿ+OűůGö.™˙>VŸ÷ňŚĎý3‹ţú4gţ™Ĺ˙}|óîţńZ=ˆątĎůň´˙ż”béŸóĺi˙*l˙Ó8żďŁFéœ_÷ŃŁž}ßޏbě]3ţ|­?ďĺŘşgüůZßʛ?ôÎ/űčџúgýôhçŸw÷…ŁŘ‡űL˙Ÿ+OűůGö.™˙>VŸ÷ňŚĎý3‹ţú4gţ™Ĺ˙}9çÝýáhö!ţĹÓ?çĘÓţţQý‹Śϕ§ýüŠł˙Lâ˙ž˙ŚqßFŽy÷xZ=ˆątĎůň´˙ż”béŸóĺi˙*l˙Ó8żďŁFéœ_÷ŃŁž}ßޏbě]3ţ|­?ďĺŘşgüůZßʛ?ôÎ/űčџúgýôhçŸw÷…ŁŘ‡űL˙Ÿ+OűůGö.™˙>VŸ÷ňŚĎý3‹ţú4gţ™Ĺ˙}9çÝýáhö!ţĹÓ?çĘÓţţQý‹Śϕ§ýüŠł˙Lâ˙ž˙ŚqßFŽy÷xZ=ˆątĎůň´˙ż•qŸöć°ÓôHďîP đ‘çŚć=°É­|˙Ó8żďŁYŢ•—CYAi¤g˜÷.IÎkĺx§ˆędÔŠ´ßźŢ˝­ë§SŻ †fîś*NśV˘kZv !ÚłůťâјcoԌ{֕ΙŁ[[Isqmc1Šwv—@ęjo˛Ühwq]ŃŽwjóÔnoži&` mŠi’KĹ’*gţřJóň.0ŠĄ^nďŮŤëůiĄ–gJ8:.ŞW˛gUo1żí:WƒÖkCĘKqsä™ŞŽ ÇŚqVô)t-Râk6Ó#łż€f[[†Úŕx`á—ÜŽ+ukđ ,űTQŠćźKŤ\ŰřŻĂ—čC]č­ĎmńČáXu$ÔeÜ_W‰…&Űćvűű[őšň<úëß.îŰ#˝ń=΁ ­źRi‰w{tĹm­-Žé%#ŠęQ݉VUƧ%„?jŐ| ąŮ™ÖđO$cÔŚ@ﴓőŽ/Ç:•őŻĹ RT`ź0Ŕqą” q˙-T˙á%ÖyÝxX ¨ŻœU§UÁ7ĄűVYÁĐĹa!YŮó+őëÚß­ĎeŇěü=ŠéđęX\ZÎťŁ‘ éôę+Ë>-řNŠĺ5+6ň6>Öğ)$†äp1Ücƒ‚ŔÍđPžKŻi…TÚÁqń‚p¤ß¸o”TßĆt)>Hů¸^‡ë_M•Ő–"*roT~}ĺtcRŚ˘M&Ő˙ާ§č_ň€ěîŸâ÷5ĹüOđ;xŽhľ]3ěQęG嚥š9ŘřäI!‡LžšăŞś¸ű7†mŽBC3í`@î=ˆ9ůGëU˙śßţ|m?ň'˙\Ż<.!ʞ3HRç„]ú'ük,ĆÖĂŔšF);Měˇë,iţŇŽIý+Ö~x2řx؉îöâC5ĺÉă͐úŔtŻýś˙óăi˙‘?řŞ?śßţ|m?ň'˙U‹Îńť{W{y•ő{lËzž§ę–†ĎSÓlom‹+˜n#!e!”ílŒ‚„ ‚ÇCŃl5;˝NÇDŇíoď9şš†Ig˙}ŔË~$ÔŰo˙>6Ÿů˙ŠŁűm˙çĆÓ˙"ńUÇőżî‡°ó ź9áůŻZú_hň]<ërÓľ˛ ŞťBŘÎनn tŞúWƒź%¤Ë4ş_„ô žłĘÖÖQĆd‹ű‡h_n•‘ŕŢxƒĂŸÚwZm„rëا™€‘]K'j.Osž+űm˙çĆÓ˙"ńT}oűĄěr•ǁ|qĽC¤ĎŕĎI§Á#I а‹ĘŰď2ŽÜ{‘Ö¤—Áž—PłÔeđ–€÷–(‘ÚNlŁ/§ÜT8ʅěNŐgűm˙çĆÓ˙"ńTmżüřÚäOţ*—Ö×ň‡°}É,t=ĂSťÔětM.Öţ󛫘`D–÷Ü ˇâMhŰ8˙ďŞËţŰůń´˙ȟüU`x“ơšwˆü1ŚAŚŘő[頝›ĚʢZÍ(Űóő܋Ϧ}rÖüƒęţgg˙lă˙ž¨˙śq˙ßU—ýś˙óăi˙‘?řŞ?śßţ|m?ň'˙G×<ƒęţf§ýłţúŁţŮÇ˙}V_öŰ˙ύ§ţD˙â¨ţŰůń´˙ȟüU\ňŤůšŸöÎ?űęűgýőYŰo˙>6Ÿů˙Š­ëŰŤ˜ď'Ž;‰‘FUUrđŁëžAő2ŻýłţúŁţŮÇ˙}TŸmź˙Ÿš˙ďáŁíˇŸó÷?ýü4}sČ>ŻćG˙lă˙ž¨˙śq˙ßU'Űo?çîűřhűmçüýĎ˙ \ňŤů‘˙Ű8˙ďŞ?íœ÷ŐqżuÝVĎĹţˇŽövśšŐnÄ +l˜-ÉPŔ Ž™ö˝ýś˙óăi˙‘?řŞ>šäWó5?íœ÷ŐöÎ?űę˛˙śßţ|m?ň'˙GöŰ˙ύ§ţD˙â¨úç}_ĚÔ˙śq˙ßTŰ8˙ďŞËţŰůń´˙ȟüUŰo˙>6Ÿů˙ŠŁëžAő3SţŮÇ˙}Q˙lă˙žŤŒđošäWó5?íœ÷ŐbÜÇŹi7S]čÖđ^A1/-›H‡=JÇ=H&ŚţŰůń´˙ȟüUŰo˙>6Ÿů˙ŠŽ,},>>—˛Ż ŁJp•7xł›×Ľń׊˘:\Z\^˛“‰îe™ö÷ŘŞNO×ëŇş(ü;ŚĹáxü;şĽœPŹQáţeŰŃłýěŒç֝ýś˙óăi˙‘?řŞÄÖź]wm⯠hĐŘY,z˝ôĐO'ÎYR;YĽrŘÉhדž3둖 …ŔÓtčÓŃďçřhJˇĆĚűČšřF/čMlňĽÝőĚž}ĺÉă̐Œp;(\ˇĹ˙3ű¸˙ׯń}kÔ+Îţ6ř”Ć7(ů—‚9ękŰË1)Ôöj6Đńą“źäîŰ;iN|oó+~ů:i+ËźiyŤiZăę÷“j_đA 9m:hˇ}íć<¨ă.¤ű¤Âç“ęŃÁquáŢ&¸a*ą!$ ?\W7}ŕŤkýB=F÷‘ÜŢGˇdňéű¤]§+óĎ‘čzW›‹ţ<˝Mh uyăbëCÖŻăŃćM>+Kóщ#xZ áKHFŇXĄűźŠŔůš"ĺďŠuÝ._K0ˇ˝Šj :Ć%‰ˇGćĹnFíź°cc%Ž2îŔömustŢ…§şVK‰œ JŹ0ÁŽß˜ÁĎ^ő%׃Ąş–ękŸ G4—h#šy4đÍ2 a\•ů€Ŕŕú ć62<;yŠęúÇPˇ›Kťß$"Di#řeEpAĂ‚äuƒáÝÍÝׅŐďŽĺťž;ËČ Ňă{ŹwRĆšÚÎŐ€+˘´đŠ´Ó›NľđëCdáƒŰĽ–#`ß{+Œ÷őŚhޏE…áŃü0şlR6çKK)Y˝HU4ó˙‡ÉŠÉđŽö=x ÔšóU[Y$ĆՐß\m' Žž ýJ­‹ŻtŠÓAK=]ľ™nU$Q+t!SČ ¸o-°¤‚0Äŕ Ÿá…ľaŕÓu^…–˙QómŽě›ŢÎĂ*Õe`Fx ƒŢśSŔ:riď§§ƒ­ÖŃäź#NŔŔr6ýŕ;ő g¨řŸÄRmŕU˙üIİÜfDO>ňX]B1Łžč@­K/k7>(—N‹Hó­-oVĆćDŠL†ň՚]ßt(,>SÉ_›=Ť°> €Ů˝™đŹfÚH’„éăcF„˛!]¸*Ľ˜Đq֐x*Řjj‘‹ČUV9ƞ7 Q…śä`p=9=ďööŸoŁj÷ĂT–XœYĄCn–ë ó¤”ÎŇť”s’ŰBă’"ńÇüž˙°Ľ×ţ\WWŕ‹;ýE5+ďAu|BÜÍŚ‡•BœŽŽF $zfąücáýzx"â R–mFĺç‘-]–%6S¨,@‚ĚOrzĆńĽć­ĽkŤŢMŠÂ=0ĺ´é˘Ý÷ˇ˜ňٌşSî’@ žNeçŽu‹­ZżG™4ř­/ĚsF$áh7…-!Ib‡îň§ćäEžđUľţĄŁ{áHîo#۲ytýŇ.ӕůŠçƒČô=)ŔömustŢ…§şVK‰œ JŹ0ÁŽß˜ÁĎ^ô áď|SŽérřŠY…˝ěPëPiÖ1,Mş?6+r7mĺ€óă,qÇKáëÍGXЧţŇś›Lš/$!ŃJ:,¨Ž \‚zŽN˝×ƒĄş–ękŸ G4—h#šy4đÍ2 a\•ů€Ŕŕú tX4ˇŇĄđחa `öËcˆœ7ŢĘă=óցŸĂË˝MîľÍ?T–ëĚłşA7R$˛ĹDŹ3"Ü@äŽçŚ=âDfm_‰u…ŃKĂ2AŸhś'#y9ÔG¨ëYZG…N‘lÖÚW‡ZĆbí˝™K¤€9<kŹżekë†RLŹA‚2hĂ-źe>—öf“›iö‚CwŞŘę‚ęĎćÝBIpBG!*+dr:—łŞkúŐ͔×w˝Ž›4qh\ßŘĘ­ďçIžJů{T1#$WąyiłËŘť?ťŽ)Ô\g˜iţ1×.|zt´żÓžĎěvëł@snĐŤyč7yŒĚX˛”qX'ōS[ƒÄZ:ÇcŹ&›iŠŘ–ШKŠd¸Uu˜Ą2ĄHĂ~ęšôýŤ¸6Ѹ ŽihĎ~*Čéđ÷ţÂ×_úAsX^4źŐ´­qő{Éľ/řG †ś4@ŰžöóTq—R }ŇHásÉéţ"麍˙Œ| %…ŐŇ[jw/;C 8‰MÂ†bĘ 2{*Ý÷‚­Żőőß Gsyݓ˧î‘vœŻĚW<GĄé@uyăbëCÖŻăŃćM>+Kóщ#xZ áKHFŇXĄűźŠŔůš"ĺďŠuÝ._K0ˇ˝Šj :Ć%‰ˇGćĹnFíź°cc%Ž2îŔömustŢ…§şVK‰œ JŹ0ÁŽß˜ÁĎ^ő%׃Ąş–ękŸ G4—h#šy4đÍ2 a\•ů€Ŕŕú ç ťńłŕPEoý—­Ž ´‘Ő‘L›HŠPŁ%N8 őęWŔ——.5=/P7&ţÂáVc-ŇÜ.5eŘጅA=ˆ5ŇCá‡K}* l°0’Ůlq†űŮ\`çžzÓ´Ÿ 6‘jmtŻľŒ‹˜íěĚjXőbäńցyđů59>ŢǢĎ“^jŤk$˜Ú˛덤ä×ÔĄéU˘ńuî•:h)gŤśł-ʤ‘ę%n„*byĄƒ— 圐FœƒÓü1đśŹ<ÚnąáËвßę>mľÝ“aă{ŮŘeXrŹŹĎ{ÖĘxNM=ôôđuşÚ<‚W„iĂc8Fßź~´ ŕľřŠ@MźJż˙‰8–ŒČ‰çŢK ¨R2sÁÁŠeâÍfçĹéŃiuĽ­ęŘÜȑIŢZłKťî…‡Ęy+ógľvÁ°7ł>ŒŰIB𝺏FÔ^ ]Féî%[W)›…Ž0 ł(÷ w úŠŸěWŸóé?ýű4}Šóţ}'˙żfČ(ŠţĹy˙>“˙ßłGŘŻ?çŇűöh 󿍇ţ%1Ę>eŕŽzšôżą^Ϥ˙÷ěט|iž°’Ů'…Śľ™"¸ˆ^'*+Şvş6fĄée_ď&aˆř ωúö‘đ ÄŽ™vmďlěšh&ŒsŞšߟZäľxź=Łę2éÚżíŹi÷°ă͡şŐ´ČĽL€Ă*Đ2<ö"ş/Œç?łgŠžeoř–IĐą%vä/ńţĆH˙ô×§×>-^ź˝GGřq<žĘ_ ^ŢCggűDjW73ČąC Z֖ď#ąÂިƒ$’@u­kż k0ękaŽţ$ݡ–’I4GOXŁ @7ź ˝ĘŚâ3 FŻé_äA‹ţĂú'ţm+ƒńĺíÝ\XÉö˝ţĘą“Pň˜KŠ‘˜3E´)pLiœËÎՍLČS“Ö™wâoV>źŇMĽˆÔľŠ­–Ţáؕ-.­ÂŒ xňct¨đMA…üI'•żĹ_˘ßłvű#÷{źŹçŸťćžqŸőc9Ě đż‰$ňˇřŤât[önßq¤~ďw•œâ3÷|×Î3ţ˘Lg1ů‹kńTšłšżLąK},@ş„m3™¤¸x[Č8ĆŃĺ–RGϝż.3[žńuÖąă=[ĂŻkmöNď:u—p¸Ë~ďĘöŒ‰3÷_ 3ր0`đż‰$ňˇřŤât[önßq¤~ďw•œâ3÷|×Î3ţ˘Lg1ů–ôojŽeŠÁń?Ç ĺźsĆ>ѧI…u >híŮƒŐY”ö$s[/5ýżĹkkOíKŠlo4{™Í›„ň˘xĺśE)… ȑ󸞽†jx6_?Â,Ţwćiđ7™ćů›óŰüÉwgŽ|É3×{ýâÎ˙ÂŞ˙ŃPńÇýü˛˙äj?áŐč¨xăţţYň5wR‡˙„U˙˘Ąăűůe˙ČÔÂŞ˙ŃPńÇýü˛˙äjî( ţWţЇŽ?ďĺ—˙#Q˙Ť˙ECÇ÷ňË˙‘Ť¸˘€8ř@u_ú*8˙ż–_üGü :ŻýßË/ţFŽâŠá˙áŐč¨xăţţYň5đ€ężôTżřÎsű6xŤćV˙‰dűVĽ‡4]k]ťđçˆ|?ŚŻ|—Ż ţ‰5̑¸ś‚ĽÔ`Š)űšžMeüg9ý› źiôí+BĆŢÚV_ł°ÂĚá–EpŹT,ĺţóŒ$€*6ĐŮ|Bđ íä6v~8đÍÍĚň,PĂŤźŽÇ ŞĄ˛I$Z髙śhrş-–§­şŘ|>“MU˜yqYŻ“#,HÎvË÷•f‘I8†P2 ~c[NŇŻ%˛–ëáŃAłĘi`˛coš˘cŇS­+“ˇ<Á!&?3Ź˘œŹ:kÜÜ\ˇĂ׊mIwŽđŮ"Éäď‘)Ü?xۇ9ű<˜Ý˜źĹş˛Óľ_ů |=y~Ń,sJn!˛r$+ooޜ˛,ޤŒœA \ć?3Š˘€9Hě4ɧÓg“áăE-šD–ŽđŮhš„€¤Jv„29Âôň$ۜÇćZ°1Äö’Cŕ‹ŤGŒłÜJĐ´żvSŽdbŰs“o!ł™ĐŃ@¨˛Ónľ¸5ˏ‡ŒşŻîń},MżřÎsű6xŤćV˙‰dűWađwţB˙?ěd˙Mz}q˙ÎfĎ|Ęßń,“ ˙bJÔą°ńŚ‹­kˇ~ń‡ŕ´Őď’őáżŃ&š’7Đ@@tşŒ"?w “ÉŽ|SľyzŽđâtŸäA‹ţĂú'ţm+™řŠ^éş cuö'şÔ-läťÚŹm’Y•Ŕ`W8lAH=)5ű/xŠŇßNÖüKᖰMBÎňUłđüńJ˙gšŽŕ*ť^8\´@TđOĐŢ[[^ZËiwoĹźĘRHĽ@čęz‚{ćlÔ⚨ÜĹ ‡‡|ů-íŕ–ö(ŇI ´’:0€Â…ą ˙{§Ë‚kťŇü; ij‹Śčšm˜ŽS2y¨›d*SxŔᶒšë‚GJedž<7s-ꎗ,–żę혞mß/|ÜýyëHg%Źř“^˝řkâ@ÖśVŃXß}ˆBXÜÄđ—@ĚÝ2J´”ŕdőŚ]ř§[Տ…Ż4“ib5-jkeˇ¸v%cKK†+pŁH<˜ÇÝ*<]đ燅ÍíĎö™ç_#Gv˙eLÜ+cps˜ ƒ×4ş‡‡|?¨ůŸoĐôŰŻ6Q4†kTrŇŘä}ŕż.zăŠá­~#ę—6w7ńé–)oĽˆPŚbó4— yÚ<˛ĘHůóˇĺĆkwÂţ.şÖ!Ę?âŻnçţ=-kŃĘżŢ>LÇđ˙ĆsŸŮłĹ_2ˇüK$č?ؒľľř+GÔeÓľx{O˝‡m˝ÖĽ RŚ@a•fdyěEdüg9ý›šńjőĺę:?Ɂeń Ŕ7ˇŮŮřăĂ773ČąC ZŹň;*ކÉ$kŚĽřë˙" _öŃ?ôëi\ĎÄ}J÷MĐ kŻą=ÖĄkg%ŢŐcl’̨ΚĂ`‚Aé\íXÔéhŽÄëz&ŠáË \¸ź–÷Tt‘u)*§Řîb†ašOQÁł,~#뚍ĚPŘxwϒŢŢ ob$ťI#ŁŘ (QĎ÷ş|¸&ĎO˘źďYń&˝{đ×Äţ$­l­˘ąžű„ąš‰á.™şd”'h)ŔÉëLťńNˇŤ ^i&ŇÄjZÔÖËopěJƖ— VáF­ĽřďAž ÍA4ŰűŐˇ¸/,ml3€D"ŰżqeVŢ98⻊@QEQEQEQEQEQEQEQEQEQEQEQEOkţ˘ëţšý k?I˙T?őÚë˙JŚ­ _ő_őČčkYúOü‚Ą˙Ž×_úU51‡Çďů"ž0˙°L˙ú ŽĹ'ţ&ŸĆĺńWˇs˙–ľß|~˙’)ăűĎ˙ šŕ|Râiń nQ˙{pG?ńék^ŽUţńňf8€ďţ3œţ͞*ů•żâY'AţĕŠcaăMZ×nü9âÁiŤß%ëâMs$n- €€éu*D ~îA'“YÎfĎ|Ęßń,“ ˙bJÖŐüsŕ­Q—NŐüaáí>öyś÷Z”1J™†U˜Açąϋţ<˝JĄü8‘kö^>ńĽž­ř—Ă-`š…äŤgáůâ•ţĎsŔUvźpšh€$Šŕž+Ąźśśźľ–ŇîŢ+‹y”¤‘JŃÔőö5ĎY|Bđ íä6v~8đÍÍĚň,PĂŤźŽÇ ŞĄ˛I$Z髙śheé~Đ4ľEÓtM6ĚG)™<‹TM˛)ź`pŰI\őÁ#Ľ2ăĂš–Ţ[K–K_ő öˆL_6>n~źő­z) Ęđ𚽚ţĂÓ<ëähîß쩛…lnqózŕf—Pđď‡ő3íú›ućĘ&ÍjŽZ@ťœźĺĎ\qZ”PSxkĂ­=”í é†[Tł˛&mŐNT!ÇĘäÓľYˇŇôËg†K}:΀H!háU1‰4›p8Ü@'HÉŤ”Pbř{A]l닢éĂT<›Álžvq´řÎqĆsӊӢŠ(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šž×ýE×ýrúÖ~“˙ ¨ëľ×ţ•MZżę.żë˙ĐÖźżPŃuJöćx!Ę?âŻnçţ=-kŇĘżŢ>LÇđ˙ĆsŸŮłĹ_2ˇüK$č?ؒťƒżňř˙c$úkÓëřÎsű6xŤćV˙‰dűVĽ‡4]k]ťđçˆ|?ŚŻ|—Ż ţ‰5̑¸ś‚ĽÔ`Š)űšžMaŠvŻ/QŃţN“ăŻüˆ1ŘD˙Ó­Ľs?ő+Ý7@ŹnžÄ÷Z…­œ—{U˛K2Ł8 ç €H  Ľ&żeăďZ[éÚ߉|2Ö ¨YŢJś~ž)_ě÷1ÜWkÇ –ˆJž âşËkkËYm.í⸡™JI¨OPAŕc\͚œGˆ#ÖôMSÖ>šqy-î¨é"ęRUOąÜ6Ĺ ĂržŁ‚fXüG×5˜Ą°đďŸ%˝źŢĹI!v’GF°P˘6!ŸďtůpMwz_‡t -QtÝMłĘfO"Ől…Jo6ŇW=pHéL¸đdžîeˇ–ă@Ňĺ’×ýC=˘Íťĺ㏛ŸŻ=i 䵟k׿ |OâHÖĘÚ+ďąK˜žč›ŚIBvňœ ž´Ëżëząđľć’m,FĽ­Mlś÷ÄŹiipĹn`‰ǓűĽ@'‚k˛đ𚽚ţĂÓ<ëähîß쩛…lnqózŕf—Pđď‡ő3íú›ućĘ&ÍjŽZ@ťœźĺĎ\q@5ŻÄ}RćÎćţ=2Ĺ-ôąę´Ě^f’ááo ăG–YI>vü¸Ínř_Ĺ×Znjőo˝­´_Ů;źéÖ]Âă-űż(wÚ2$ĎÝ|(ĎZŰo xu§˛´0Ë`Š–oöDÍşŠĘ„8ů@<€:vŤ6ú^™lđÉo§YÂđ -*Ś1#“nˆăŠ4Ŕęţ1ť?´]&;ŤŤM=od˛’ÜÚ>.ŘŰHţar¸ÚŽWrœŒôŞŠkkiŚ‚y­â’[v/ şŃąR¤Š= RG‰- (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€'ľ˙Qu˙\‡ţ†ľĹÚËĎý~\čçŽŇ×ýE×ýrú×i˙/?őůq˙Łžחř¤˙ÄÓâÜŁţ*öŕŽăŇÖ˝BźżĹ'ţ&ŸĆĺńWˇs˙–ľée_ď&aˆř˙ă9ĎěŮ⯙[ţ%’těIZÚżŽ|Łę2éÚżŒ<=§ŢÏ6ŢëR†)S 0Ęł2<ö"˛~3œţ͞*ů•żâY'AţĕŘ|˙żÄű#˙Ó^Ÿ\řľzňő*đâ`Y|Bđ íä6v~8đÍÍĚň,PĂŤźŽÇ ŞĄ˛I$ZéŠ~:˙ȃý‡ôOý:ÚW3ńR˝ÓtĆëěOu¨ZŮÉwľXŰ$ł*3€ŔŽpŘ‚ zW;V5:Z+ƒńzމŞxrĂG×./%˝Ő$]J@ĘŠö;†ÁŘĄ˜n@ŔÔp@ŹËˆúćŁs6ó䡡‚[ŘŁI$.ŇHčÂ6 FÄ3ýîŸ. ¤3ÓčŻ;Ö|IŻ^ü5ń?‰ k[+hŹožÄ!,nbxK fn™% ÚĘp2zÓ.üS­ęÇÂךI´ą–ľ5˛ŰÜ;ąĽĽĂ¸Q‚$Lc ˘Ŕz=ćVżőK›;›řôˡŇÄ ¨FÓ1yšK‡…źƒŒmYe$|ůŰňă5ťá]k3Őź:öśŃdîó§Yw ŒˇîüĄßhȓ?uđŁ=h°˘¸;šőí#â"]jˇ7躖 –şrAxťb&Ô|˛Bc1%mÂBFW+€Mw”€(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Š(˘Šž×ýE×ýrú×i˙/?őůq˙ŁžťK_ő_őČčk\]§üź˙×ĺÇţŽzO^_â“˙OˆcrřŤŰ‚9˙KZő ň˙Ÿřš|C”Ĺ^ÜĎüzZ׼•ź|™†#ŕ;˙Œç?łgŠžeoř–IĐą%jXŘxÓE־ۿx‡ĂđZj÷Ézđßč“\É‹h :]F ‘ŸťIäÖ_ĆsŸŮłĹ_2ˇüK$č?ؒľľř+GÔeÓľx{O˝‡m˝ÖĽ RŚ@a•fdyěEsâ˙/Rč$Zý—źEio§k~%đËX&Ągy*Ůř~xĽłÜÇp]Ż.Z *x'Ščo-­Ż-e´ťˇŠâŢe)$R tu=A‚=sÖ_ź{y ŸŽ<3ss<‹0ĹŞŔď#ąÂިl’IÖşjćmšz_‡t -QtÝMłĘfO"Ől…Jo6ŇW=pHéL¸đdžîeˇ–ă@Ňĺ’×ýC=˘Íťĺ㏛ŸŻ=k^ŠC2‡‡<<.on°ôĎ:ů;ˇű*fá[ƒœ|Ŕŕd¸ĽÔ<;áýGĚű~‡ŚÝy˛‰¤3ZŁ–.Ŕç#ďůs×VĽ”ŢđëOe;h:a–Á,ß쉛uS•qň€ytíVmô˝2Ůá’ßNł…ŕZ8ULbF &Ü7 ÇR2jĺ˜žĐcÖŰ\MN]Qł›Ál‚c‘´üřĎ@^ƒ§EQEQEQEQEQEQEQEQEQEQEQEQE=Żú‹Żúä?ô5Ź-'Iˇ–ÉŽ%ź•[Ť–Ú° ‰Žáé[śżę.żë˙ĐÖš?čř›ŔRéúÎĽ˘ÜË%тűOšxe†Au6ӕ ˛úŠ8#ß1 ńôö^đNłâC%Ĺçöm”ˇ"('šUI ťqÚ ŔÎ:ŕôŻ0ńI˙‰§Ä1šGüUíÁ˙ÇĽ­]ń„ľO~Í^,˛×|MŞx‹V—JžKťťËÉfPŰÉrv ü ę{KĹ'ţ&ŸĆĺńWˇs˙–ľée_ď&cˆřcŐlt˝[áźş^ˇšÓŻ;{ˆbşUveňţOŸćČ_—ž<֍žŁ“Ü=žl×2‰§1i—he}Š›Űćm¨‹“ÎG@*sŸ iŸ2ˇüM,zúx•â-ZúËYŃ4űk70ßßĂ×DecVżďO'őí͋ţ<˝GCřhŐÔľŰÉĄŇ5.ęâYGÚ˘´¸°şvq ‘ˇš¨ĂŸ.Fˆîĺb‡‚EOýĽýľü^…qň˙Étą˙ąFű˙KlkąŽcQ?´Ł˙ Ą˙‚ËĎđŁűJ?újř,ź˙ Z(ŸÚQ˙Đ P˙ÁeçřQýĽýľü^…-ŸÚQ˙Đ P˙ÁeçřQýĽýľü^…-ŸÚQ˙Đ P˙ÁeçřQýĽýľü^…-ŸÚQ˙Đ P˙ÁeçřQýĽýľü^…-ŸÚQ˙Đ P˙ÁeçřQýĽýľü^…-ŸÚQ˙Đ P˙ÁeçřQýĽýľü^…-ŸÚQ˙Đ P˙ÁeçřQýĽýľü^…-ŸÚQ˙Đ P˙ÁeçřQýĽýľü^…-ŸÚQ˙Đ P˙ÁeçřQýĽýľü^…-ŸÚQ˙Đ P˙ÁeçřQýĽýľü^…-ŸÚQ˙Đ P˙ÁeçřQýĽýľü^…-ŸÚQ˙Đ P˙ÁeçřQýĽýľü^…-ŸÚQ˙Đ P˙ÁeçřQýĽýľü^…-ŸÚQ˙Đ P˙ÁeçřQýĽýľü^…-^÷]ą˛…fźŇî­˘ic…^[ ¤Rň8D@HűĚěŞRXÉŠ˙´Ł˙ Ą˙‚ËĎđŽ?âŻüyřcţĆí˙Ká­?jڍˆ´K ž[ă*ËcćvačÉÎxÇĽ6ăÖ-¤ş:hľ{KŠ­ŢeŽ{yĄw‰0ě˘Ln¤ŒgÇ­sšÇ€ź+Ť_=íýڍó9$ůZöĄ ’NŘăQrI$($ž¤ŐIÁ_Žö*q‘á;ńÁĎüžŘ×c@Î&çáO€Žm圚ҾI • Iž#ÔŮ]HÁR Î#ŒWř‚C%ߏäb€ż‹ [;Z÷Şđ-hţ÷ǃrřŞşĎüyZף•ź|™†#ŕ=cĹ,Đź3ŕťŐľý Nş{¨§˛‹R˝ű2\4/źŽŕŽŔ}ĐX#mÜ29óĄńŽŕ2ˇü%2ŹsâKŽ9ţ=;^˝bˇ2iś"+¨"ŒFűŘŔdlä`šxűŮ9ôâ§ň.č)ţ ˙Žl_ńĺęUáÄđořYń”^&o|&3ŤόŹCġAq,öňď?čyăČ#÷ç<`ęÂă¸˙Ą§áţ—ü‰^Ëä\˙ĐR/üţ=G‘s˙AHżđ\řősšž5˙ Žăţ†Ÿ„?řR]˙ň%đ¸î?čiřC˙…%ß˙"W˛ů?ô‹˙Ç˙Qä\˙ĐR/üţ=@5˙ Žăţ†Ÿ„?řR]˙ň%đ¸î?čiřC˙…%ß˙"W˛ů?ô‹˙Ç˙Qä\˙ĐR/üţ=@5˙ Žăţ†Ÿ„?řR]˙ň%đ¸î?čiřC˙…%ß˙"W˛ů?ô‹˙Ç˙Qä\˙ĐR/üţ=@5˙ Žăţ†Ÿ„?řR]˙ň%đ¸î?čiřC˙…%ß˙"W˛ů?ô‹˙Ç˙Qä\˙ĐR/üţ=@5˙ Žăţ†Ÿ„?řR]˙ň%đ¸î?čiřC˙…%ß˙"W˛ů?ô‹˙Ç˙Qä\˙ĐR/üţ=@5˙ Žăţ†Ÿ„?řR]˙ň%đ¸î?čiřC˙…%ß˙"W˛ů?ô‹˙Ç˙Qä\˙ĐR/üţ=@5˙ Žăţ†Ÿ„?řR]˙ň%đ¸î?čiřC˙…%ß˙"W˛ů?ô‹˙Ç˙Qä\˙ĐR/üţ=@5˙ Žăţ†Ÿ„?řR]˙ň%đ¸î?čiřC˙…%ß˙"W˛ů?ô‹˙Ç˙Qä\˙ĐR/üţ=@5˙ Žăţ†Ÿ„?řR]˙ň%đ¸î?čiřC˙…%ß˙"W˛ů?ô‹˙Ç˙Qä\˙ĐR/üţ=@5˙ Žăţ†Ÿ„?řR]˙ň%đ¸î?čiřC˙…%ß˙"W˛ů?ô‹˙Ç˙Qä\˙ĐR/üţ=@5˙ Žăţ†Ÿ„?řR]˙ň%đ¸î?čiřC˙…%ß˙"W˛ů?ô‹˙Ç˙Qä\˙ĐR/üţ=@5˙ Žăţ†Ÿ„?řR]˙ň%đ¸î?čiřC˙…%ß˙"W˛ů?ô‹˙Ç˙Qä\˙ĐR/üţ=@5˙ Žăţ†Ÿ„?řR]˙ň%đ¸î?čiřC˙…%ß˙"W˛ů?ô‹˙Ç˙Qä\˙ĐR/üţ=@5˙ Žăţ†Ÿ„?řR]˙ň%đ¸î?čiřC˙…%ß˙"W˛ů?ô‹˙Ç˙Qä\˙ĐR/üţ=@5˙ Žăţ†Ÿ„?řR]˙ň%đ¸î?čiřC˙…%ß˙"W˛ů?ô‹˙Ç˙Qä\˙ĐR/üţ=@ â/‰ŰkŚĽĎ‹žF–:ľ–¤<żÝeÍ˝ÂMł&ĚăvÍšíœŕăQ>2\+_ü! TĄořI.ó´HĎŮ:Ę˝—Čš˙ ¤_ř.?üz"çţ‚‘ŕ¸˙ńęńüEđüŸÄŢ&ńĎĂËx Ńn4ř˘Ó5™§wyn-¤‰ Œ-ÎOQĹvŸđˇž˙Đů ŕb×gä\˙ĐR/üţ=G‘s˙AHżđ\řőqŸđˇž˙Đů ŕbחś§§ë^4Ô´Ťű[Ű+o†x\:8ű¨Č#ß#ę+č?"çţ‚‘ŕ¸˙ńęŕ>6š, 笏•ŢĆ-™;› Ë`cĎ9ŻG*˙xů3 GŔwÚnąí2Ę~SĐc˝MPé­ťG´ů”ü§ ÷ŠŤ›üyz•Gřh(˘Šć5 (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€ (˘€.ÝÝ\Ç"$w"ˆŁŔW UÖĂA4덃ó\\üąăŽăž1ďY?-5+˙ë6z?˜oŚÓvBąžÇrb*ˇXŒ€r0H9ć>,ÓĄÔŹľGđg†ďlmÓÂ×ö—Q*[O>Fýž"™vË÷A۸ŒüřŚ#Řu­Bţ=öHďnQÖŢBʞ° …<Žk ŕ”˛ĹđKÂMMV ăěŠhRę˛řSXţŢKި˜]+ĆV;8çŁEŒr[“ť -|˙’!á/űéżúM@IÔ.D‚3}(r óNHN3î?:aŐÜ[=ÉÔŘAíňů˙*í$6Np0AÓź›[ˇń<ŸßĆphRIiŚ^Ăcó\=˜ — ňÎđ^Rů 7 xČĎçuK_Â%â +Mśń$ˇWŰ˙kł–ĘO#Ęy.ÜÕ ÎĚŃíÚI`@}śóţ~ç˙ż†śŢĎÜ˙÷đגŰę>!ľ°ążńBřzMEˇÉ řű%ĂJĽ,~`ˇů°feR8:+ψ_ń8’;A5Hă˝ŘÚĚčŔ9ňL%˘† \9ߜ0'8ö‰5)ăxŇKů¤mąŤLAs‚p9äŕôŸöŰĎůűŸţţó+í95‡đŞi—~%kXľ™^âćâ9âž%ű ë÷Ľ@ĘĽ™W< ąƒŔçáźńűßYC}wŞZíŕ[IšŇwY]fuĚąDŔł*ŚC•NĺÇ${oŰo?çîűřkç˙Ď4÷><–y̏˙ H¤%›ĆÔO`…w>ÄŃkş}ĺíÖą2]Ţę‘]Cp‡ÉŠžOłťFϕWknücƒÖŽ$ńčÜŁ>+čGý9Z׼•źŻFcˆřnÓo KQe,Ń,öŽŃȤ€AÍYűEżü÷‹ţűĆxáEˇ‡ôűËp"¸].̉‚Ky çׅQĎĽp ­ęŔÇüߝtC eęŚŐĚ}ŹŠ{‡š}˘ßţ{Ĺ˙}Š>Ńo˙=â˙žĹxYÖőc˙/ó˙ßTŸŰZŻü˙Ď˙}VŸŘĐţ`úĚťëö‹ůďýö(űEżü÷‹ţűá_ŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐŘĐţoŔ>ł.Çşý˘ßţ{Ĺ˙}Š>Ńo˙=â˙žĹxWöÖŤ˙?ó˙ßTmjżó˙?ýőGö4?›đŹËąîżhˇ˙žńßb´[˙Ďxżďą^ýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}Qýćüë2ě{ŻÚ-˙çź_÷ŘŁí˙óŢ/űěW…mjżó˙?ýőGöÖŤ˙?ó˙ßTcCůżúĚťëö‹ůďýö(űEżü÷‹ţűá_ŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐŘĐţoŔ>ł.Çşý˘ßţ{Ĺ˙}Š>Ńo˙=â˙žĹxWöÖŤ˙?ó˙ßTmjżó˙?ýőGö4?›đŹËąîżhˇ˙žńßb´[˙Ďxżďą^ýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}Qýćüë2ě{ŻÚ-˙çź_÷ŘŁí˙óŢ/űěW…mjżó˙?ýőGöÖŤ˙?ó˙ßTcCůżúĚťëö‹ůďýö(űEżü÷‹ţűá_ŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐŘĐţoŔ>ł.Çşý˘ßţ{Ĺ˙}Š>Ńo˙=â˙žĹxWöÖŤ˙?ó˙ßTmjżó˙?ýőGö4?›đŹËąîżhˇ˙žńßb´[˙Ďxżďą^ýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}Qýćüë2ě{ŻÚ-˙çź_÷ŘŁí˙óŢ/űěW…mjżó˙?ýőGöÖŤ˙?ó˙ßTcCůżúĚť—Ż|LĐŹőiŹ˙˛|WrmöÄŇŰřvňH™•Bś×á†AĂ ƒÔ0jü-]ţ€>4˙Âf÷˙×ýľŞ˙Ďü˙÷ŐŰZŻü˙Ď˙}Qýćaő™v;]Oâv‹s§\ŰG řČ<°ş)o Ţŕç÷u/ƒźMgŕ˙ƒžąŐôýnKÓ¤ŮFöÖZMĹ̑4vęH#CĺHls€pqÂ˙mjżó˙?ýőGöÖŤ˙?ó˙ßTcCů˜}f]Ž÷ţއ˙@á3{˙Ćč˙…ŤĄ˙ĐßřLŢ˙ńşŕżśľ_ů˙ŸţúŁűkU˙Ÿů˙ďŞ?ąĄüĚ>ľ.Ç{˙ WC˙ ?đ™˝˙ătÂŐĐ˙čăOü&ořÝp_ŰZŻü˙Ď˙}QýľŞ˙Ďü˙÷ŐŘĐţfZ—c˝˙…ŤĄ˙ĐßřLŢ˙ńşCń[Btű–o?řÝpŰZŻü˙Ď˙}RgT=oç˙ž¨ţƇó0úĚťďü-mţ€^3˙Âfó˙×Ÿéhń5÷‰íôű+ČUń]ÚĽí¤–Ň4kgn ‘T”až„ŠĹ?űcT˙Ÿé˙ďŞő_‡vVŠ ÁŠGŰ.UźŮ‰%› xç ŕp**PŽ^˝Ź]ŰŃşŢë?˙Ůgwenhywfar-4.15.2beta/doc/dialog/Makefile.am0000644000175000017500000000013612364015347015606 00000000000000SUBDIRS=images EXTRA_DIST=\ main.c \ testdialog.c \ testdialog.h \ testdialog_p.h gwenhywfar-4.15.2beta/doc/dialog/testdialog.c0000644000175000017500000001336212364015347016062 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include "testdialog_p.h" #include #include #include #include #include GWEN_DIALOG *TestDialog_new() { int rv; GWEN_DIALOG *dlg; /* create dialog */ dlg=GWEN_Dialog_new("testdialog"); /* set signal handler */ GWEN_Dialog_SetSignalHandler(dlg, TestDialog_SignalHandler); /* read dialog from dialog description file */ rv=GWEN_Dialog_ReadXmlFile(dlg, "testdialog.dlg"); if (rv<0) { fprintf(stderr, "Error reading dialog file (%d)\n", rv); GWEN_Dialog_free(dlg); return NULL; } return dlg; } static int GWENHYWFAR_CB TestDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { fprintf(stderr, "Received event %d from widget [%s]\n", t, sender); switch(t) { case GWEN_DialogEvent_TypeInit: /* This is the init event. It is issued immediately before showing the * dialog on screen. Only after this signal has been received the properties * of a dialog are accessible. */ fprintf(stderr, "Init\n"); /* add some entries to the ComboBox "combo1" */ GWEN_Dialog_SetCharProperty(dlg, "combo1", GWEN_DialogProperty_AddValue, 0, "Erster Text in Combo1", 0); GWEN_Dialog_SetCharProperty(dlg, "combo1", GWEN_DialogProperty_AddValue, 0, "Zweiter Text in Combo1", 0); /* select first entry (entry 0) of the ComboBo "combo1" */ GWEN_Dialog_SetIntProperty(dlg, "combo1", GWEN_DialogProperty_Value, 0, 0, 0); /* same for ComboBox "combo2" */ GWEN_Dialog_SetCharProperty(dlg, "combo2", GWEN_DialogProperty_AddValue, 0, "Erster Text in Combo2", 0); GWEN_Dialog_SetCharProperty(dlg, "combo2", GWEN_DialogProperty_AddValue, 0, "Zweiter Text in Combo2", 0); GWEN_Dialog_SetIntProperty(dlg, "combo2", GWEN_DialogProperty_Value, 0, 0, 0); /* set the title of the ListBox "listbox1". Please note that multiple * columns can be specified here (separated by TAB, i.e. '\t') */ GWEN_Dialog_SetCharProperty(dlg, "listbox1", GWEN_DialogProperty_Title, 0, "Column1\tColumn2", 0); /* add some entries to the ListBox "listbox1". As with the title * multiple columns can be specified (separated by TAB). */ GWEN_Dialog_SetCharProperty(dlg, "listbox1", GWEN_DialogProperty_AddValue, 0, "Zeile 1 Spalte 1\tZeile 1 Spalte 2", 0); GWEN_Dialog_SetCharProperty(dlg, "listbox1", GWEN_DialogProperty_AddValue, 0, "Zeile 2 Spalte 1\tZeile 2 Spalte 2", 0); /* for every column of a ListBox the width can be specified. This is done * by modification of the property "ColumnWidth". In this example we set * the width of column 0 to 100 pixel and that of column 1 to 200 pixel. */ GWEN_Dialog_SetIntProperty(dlg, "listbox1", GWEN_DialogProperty_ColumnWidth, 0, 100, 0); GWEN_Dialog_SetIntProperty(dlg, "listbox1", GWEN_DialogProperty_ColumnWidth, 1, 200, 0); /* Set the width and height of the dialog itself to 640x480 pixel. * As you can see specifying the dialog itself is done by providing * an empty widget name. */ GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, 640, 0); GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, 480, 0); break; case GWEN_DialogEvent_TypeFini: /* this is the fini signal. It is emitted immediately after hiding * the dialog from screen. After this signal handler returns the * properties of this dialog are no longer accessible. */ fprintf(stderr, "Fini\n"); break; case GWEN_DialogEvent_TypeValueChanged: /* this signal is emitted by some of the widgets when its value * has changed. For LineEdit widgets this event occurrs when something * is entered into the text field, for a ListBox this is emitted when * another entry from the ListBox is selected. */ fprintf(stderr, "ValueChanged\n"); if (strcasecmp(sender, "listbox1")==0) { fprintf(stderr, "Selected list entry %d\n", GWEN_Dialog_GetIntProperty(dlg, "listbox1", GWEN_DialogProperty_Value, 0, -1)); } break; /* this signal is emitted by some widgets upon activation, e.g. a Button * widget sends this signal when it is clicked. */ case GWEN_DialogEvent_TypeActivated: fprintf(stderr, "Activated\n"); if (strcasecmp(sender, "okButton")==0) return GWEN_DialogEvent_ResultAccept; else if (strcasecmp(sender, "abortButton")==0) return GWEN_DialogEvent_ResultReject; break; case GWEN_DialogEvent_TypeClose: /* this signal is emitted by the dialog when closing of the dialog is * requested (e.g. by clicking the little X in the title bar). * If the dialog doesn't want to be closed you can return * GWEN_DialogEvent_ResultReject here. */ fprintf(stderr, "Close\n"); return GWEN_DialogEvent_ResultNotHandled; default: fprintf(stderr, "Unhandled signal, ignored\n"); return GWEN_DialogEvent_ResultNotHandled; } return GWEN_DialogEvent_ResultHandled; } gwenhywfar-4.15.2beta/doc/widgets.h0000644000175000017500000002613412364015347014140 00000000000000 /** * @defgroup MOD_DIALOG Toolkit Independent Dialog Framework * * @brief Platform and toolkit independent XML-based dialog framework. * * @section SEC_Dialog GWEN_Dialog Framework * * A dialog consists of a tree of widgets. * * Widgets can have integer and string properties. Some widgets also emit signals * (like a push button which emits the "Activated" signal when clicked). * See @ref GWEN_Dialog_SetIntProperty, @ref GWEN_Dialog_GetIntProperty, * @ref GWEN_Dialog_SetCharProperty and @ref GWEN_Dialog_GetCharProperty about * how to get or manipulate widget properties. * * There is a special signal @ref GWEN_DialogEvent_TypeInit which is emitted * immediately before a dialog is shown to the user (e.g. upon @ref GWEN_Gui_ExecDialog). * It is only after the reception of this signal that properties become available for the * property retrieval and manipulation functions mentioned above. * * * * @section SEC_STRING String Properties * * Some widgets may allow for HTML text, e.g. the FOX and QT3/4 implementations allow for * HTML text as title property. However, not all implementations might have HTML support, * so it must still be possible to set standard text which is then used by HTML-agnostic * implementations. The chosen way to do this in the GWEN_Dialog framework is to specify both * formats in a single string. * String properties with the "html" mark in the following list may contain text in the following * format: * @code * "this is the html version and this is the standard text" * @endcode * * As you can see HTML text is enclosed by the HTML element "html". Everything outside that is * supposed to be standard text. * * Implementations which are aware of HTML text will only use that enclosed part and ignore the * rest. HTML-agnostic implementations will use the text outside those "html" markings. * * * * @section SEC_ALL_WIDGETS All Widgets * * @subsection SUBSEC_INT Integer Properties * * The following properties are handled by all widgets. *
    *
  • * GWEN_DialogProperty_Width (rw): The preferred width of * the widget. This is only guaranteed to work for * widgets of type @ref GWEN_Widget_TypeDialog. *
  • *
  • * GWEN_DialogProperty_Height (rw): The preferred height of * the widget. This is only guaranteed to work for * widgets of type @ref GWEN_Widget_TypeDialog. *
  • *
  • * GWEN_DialogProperty_Enabled (rw): The enabled state of * a widget (0=disabled, 1=enabled). This only works for * widgets, not for the dialog itself (which woudn't make sense * anyway). *
  • *
  • * GWEN_DialogProperty_Focus (rw): Whether a widget * has the focus (0=no focus, 1=has focus) *
  • *
* * * * * @section SEC_LABEL GWEN_Widget_TypeLabel * * This is a simple label widget (e.g. QLabel in QT or * FXLabel in FOX). * * * @subsection SUBSEC_STRING String Properties * * The following properties are handled by this widget. *
    *
  • * GWEN_DialogProperty_Title (rw, html): Text of the label. *
  • *
* * * @subsection SUBSEC_SIGNALS Signals * * This widget does not emit special signals. * * * * * @section SEC_PUSHBUTTON GWEN_Widget_TypePushButton * * This is a simple push button widget (e.g. QPushButton in QT or * FXButton in FOX). * * * @subsection SUBSEC_INT Integer Properties * * This widget does not have special integer properties. * * * @subsection SUBSEC_STRING String Properties * * The following properties are handled by this widget. *
    *
  • * GWEN_DialogProperty_Title (rw): Text of the button. *
  • *
  • * GWEN_DialogProperty_ToolTip (wo): Tooltip text. *
  • *
* * * * * @section SEC_LINEEDIT GWEN_Widget_TypeLineEdit * * This is a one line edit field widget (e.g. QLineEdit in QT or * FXTextField in FOX). * * * @subsection SUBSEC_INT Integer Properties * * This widget does not have special integer properties. * * * @subsection SUBSEC_STRING String Properties * * The following properties are handled by this widget. *
    *
  • * GWEN_DialogProperty_Value (rw): Entered text. *
  • *
  • * GWEN_DialogProperty_ToolTip (wo): Tooltip text. *
  • *
* * * @subsection SUBSEC_SIGNALS Signals * *
    *
  • * GWEN_DialogEvent_TypeValueChanged: This signal is * emitted whenever the content of the line edit changes. *
  • *
  • * GWEN_DialogEvent_TypeValueCommand: This signal is * emitted as soon as the enter key is pressed or * the widget looses focus. *
  • *
* * * * * @section SEC_TEXTEDIT GWEN_Widget_TypeTextEdit * * This is a multi line edit field widget (e.g. Q?? in QT or * FXText in FOX). * * * @subsection SUBSEC_INT Integer Properties * * This widget does not have special integer properties. * * * @subsection SUBSEC_STRING String Properties * * The following properties are handled by this widget. *
    *
  • * GWEN_DialogProperty_Value (rw): Entered text. *
  • *
  • * GWEN_DialogProperty_ToolTip (wo): Tooltip text. *
  • *
* * * @subsection SUBSEC_SIGNALS Signals * * No special signals for now. * * * * * @section SEC_COMBOBOX GWEN_Widget_TypeComboBox * * This is a combobox widget (e.g. QComboBox in QT or FXComboBox in FOX). * * * @subsection SUBSEC_INT Integer Properties * * The following properties are handled by this widget. *
    *
  • * GWEN_DialogProperty_Value (rw): Represents the index of the * currently selected entry. *
  • *
  • * GWEN_DialogProperty_ClearChoices (wo): Any value set here will clear * the list of entries of this widget. *
  • *
  • * GWEN_DialogProperty_ChoiceCount (ro): Number of entries in the combobox. *
  • *
* * * @subsection SUBSEC_STRING String Properties * * The following properties are handled by this widget. *
    *
  • * GWEN_DialogProperty_Value (ro): Text of an entry of a given index. *
  • *
  • * GWEN_DialogProperty_AddChoice (wo): Appends an entry at the end *
  • *
  • * GWEN_DialogProperty_ToolTip (wo): Tooltip text. *
  • *
* * * @subsection SUBSEC_SIGNALS Signals * *
    *
  • * GWEN_DialogEvent_TypeValueChanged: This signal is * emitted when an entry has been chosen from the combo box * and also when the widget looses focus. *
  • *
* * * * * @section SEC_PROGRESSBAR GWEN_Widget_TypeProgressBar * * This widget is a simple progress bar. It has a total value which * represents 100 percent and a progress value (from which the percentage * is calculated and shown). * * * @subsection SUBSEC_INT Integer Properties * * The following properties are handled by this widget. *
    *
  • * GWEN_DialogProperty_Value (rw): Progress value *
  • *
  • * GWEN_DialogProperty_MaxValue (rw): The value which represents 100 percent. *
  • *
* * * @subsection SUBSEC_SIGNALS Signals * * No special signals. * * * * * @section SEC_GROUPBOX GWEN_Widget_TypeGroupBox * * This widget is a box surrounding other widgets with a thin line. It may also * have a title. * * * @subsection SUBSEC_STRING String Properties * * The following properties are handled by this widget. *
    *
  • * GWEN_DialogProperty_Title (rw): Text written at the border of the widget *
  • *
* * * @subsection SUBSEC_SIGNALS Signals * * This widget does not emit special signals. * * * * * @section SEC_LISTBOX GWEN_Widget_TypeListBox * * A list box is a simple list with a horizontal title header at the top. * Entries of a list may have multiple columns. * * * @subsection SUBSEC_INT Integer Properties * * The following properties are handled by this widget. *
    *
  • * GWEN_DialogProperty_Value (rw): Represents the index of the * currently selected entry. *
  • *
  • * GWEN_DialogProperty_ClearChoices (wo): Any value set here will clear * the list of entries of this widget. *
  • *
  • * GWEN_DialogProperty_ChoiceCount (ro): Number of entries in the combobox. *
  • *
  • * GWEN_DialogProperty_ColumnWidth (rw): Width of the column given by @c index * (see @ref GWEN_Dialog_SetIntProperty). When setting this property * @c index is the column whose width is to be changed and @c value is the new * width. *
  • *
  • * GWEN_DialogProperty_SelectionMode (rw): Determines how to handle selecting of * entries in this widget. *
  • *
  • * GWEN_DialogProperty_SelectionState (rw): Selection state of the item given by * @c index (see @ref GWEN_Dialog_SetIntProperty). *
  • *
  • * GWEN_DialogProperty_SortDirection (rw): Sorting direction of the column given * by @c index (see @ref GWEN_Dialog_SetIntProperty). Only one column can determine * the sort direction at any given time, so setting the direction of one column will * remove the direction tag from every other column. If a column has a sorting * direction other than @ref GWEN_DialogSortDirection_None then that column will * determine how the list will be sorted. *
  • *
  • * GWEN_DialogProperty_Sort (wo): Any value written here will make the widget * sort its entries according to the current sort direction. Applications should * be aware that the implementation might or might not automatically sort items * when adding them to the list. So if the application wants to make sure the list * is always sorted it should set this property after adding items. *
  • *
* * * @subsection SUBSEC_STRING String Properties * * The following properties are handled by this widget. *
    *
  • * GWEN_DialogProperty_Title (rw): String of the header line. * Since list boxes might have multiple columns the title might * contain multiple strings divided by tab ("\t"). *
  • *
  • * GWEN_DialogProperty_AddChoice (wo): Appends an entry to the list. * Please note that the implementation might or might not sort-in new * entries. So if the application needs to be sure that the list is properly * sorted it should use the property @ref GWEN_DialogProperty_Sort after * appending items. * Since list boxes might have multiple columns an entry might * contain multiple strings divided by tab ( e.g. "col1\tcol2"). *
  • *
* * * @subsection SUBSEC_SIGNALS Signals * *
    *
  • * GWEN_DialogEvent_TypeValueChanged: This signal is * emitted when the current entry changes (e.g. another entry * becomes the current entry). *
  • *
* * * * * * * GWEN_Widget_TypeHSpacer * GWEN_Widget_TypeVSpacer * GWEN_Widget_TypeHLayout * GWEN_Widget_TypeVLayout * GWEN_Widget_TypeGridLayout * GWEN_Widget_TypeDialog * GWEN_Widget_TypeTabBook * GWEN_Widget_TypeTabPage * GWEN_Widget_TypeCheckBox * GWEN_Widget_TypeWidgetStack * GWEN_Widget_TypeScrollArea * GWEN_Widget_TypeHLine * GWEN_Widget_TypeVLine * GWEN_Widget_TypeRadioButton * * */ gwenhywfar-4.15.2beta/doc/Makefile.in0000644000175000017500000005571212634022412014361 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(srcdir)/plugindescr.xsd.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = plugindescr.xsd CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ EXTRA_DIST = \ apidoc.h \ STYLE \ db2.png \ testdialog.xml \ plugindescr.xml \ plugindescr.xsd.in \ widgets.h \ widgets_be.h SUBDIRS = inherit dialog all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): plugindescr.xsd: $(top_builddir)/config.status $(srcdir)/plugindescr.xsd.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am sources: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/doc/STYLE0000644000175000017500000002534412364015347013146 00000000000000$Id$ Table of Content 1. Introduction 2. Names of Header Files 3. Definitions of Types, Functions etc 3.1. Prefixes 3.2. Function Definitions 3.3. Type Definitions 3.4. Enum Elements 3.5. Macro Definitions 3.6. Callbacks 4. Formal Style 4.1. Indent Style 4.2. Brackets 4.3. Start of Files 5. ChangeLog 6. BUILD Version Number 7. Versioning 8. CVS Usage 9. Documentation 1. Introduction =============== This file contains some style guidelines which I would like to see respected by all authors contributing code to this project. Nobody will wrench off your head if your submission does not follow these guidelines, but you should be aware that your code will most likely be modified to comply to this document. The goal of these guidelines is to keep the project files uniform and thus making it easier to read them. This document is subject to changes, and the project admin is open for discussion and suggestions. I know that many parts of this project do not fully comply to this style guide but I am working on it. 2. Names of Header Files ======================== For every module there may optionally be these header files: - MODULENAME.h prototypes and type definitions to be exported - MODULENAME_p.h prototypes and type definitions to be used by the module only (these files are not installed) - MODULENAME_l.h prototypes and type definitions to be used by the library only (these files are not installed) MODULENAME must be the name of the module (like error) in all-lowercase letters (this is to avoid problems with file systems which do not support case sensitive file names). 3. Definitions of Types, Functions etc ====================================== Every type, function, macro etc that is exported must be introduced by the keyword "GWENHYWFAR_API". This is needed for WIN32 platforms to inform the compiler about which symbols are to be imported from this project. Every function must have a prototype. For exported functions they should be in the modules header file, for non-exported functions these should be in the "MODULENAME_p.h" or in the "MODULENAME_l.h" file. Example: GWENHYWFAR_API void GWEN_DB_Group_free(GWEN_DB_NODE *n); 3.1. Prefixes ------------- Every function or type name has two prefixes: - GWEN_ This forms a namespace "GWEN" which prevents function name collisions - a module name This makes every function name unique within GWEN. The module name should be all-capitals if the name is shorter than three characters or is an abbreviation. It should start with a capital otherwise. Please note that even internal functions (i.e. those which are not to be used outside the library) MUST have these prefixes. Examples: GWEN_DB_Values_Count, GWEN_Error_GetType 3.2. Function Definitions ------------------------- Function names consist of multiple words combined by underscores. Every word after the prefixes starts with a capital. If any word itself consists of multiple sub-words (like in GetType) then every sub-word should start with a capital, too. This improves the readability of the code. There is one exceptions from this rule (for historical reasons): Functions which are constructors, destructors or duplication functions (like GWEN_Buffer_new, GWEN_Buffer_free, GWEN_Buffer_dup) need to have the last word start with a lowercase letter. These functions also should use the given words below: - _new for constructors - _free for destructors - _dup for deep copy duplications Example: GWEN_DB_Values_Count, GWEN_Error_GetCode, GWEN_Error_new 3.3. Type Definitions --------------------- Types are written in all-capitals, like in GWEN_DB_NODE. Do not export structs per se. It is important that the real structure of the structs used within Gwen is hidden. Members of structs must be accessed using getter and setter functions. This makes sure that applications always use pointers instead of creating objects directly. This also reduces the number of incompatible API changes (those changes make it necessary for every depending package to be recompiled and thus should be avoided where possible). 3.4. Enum Elements ------------------ New enum elements should consist of multiple words which are concatenated (like in GWEN_LoggerLevelError). Unfortunately the enum definitions inside the GWEN_DB module do not follow this guideline in this regard. Since changing this would produce many problems this rule only applies to new enum definitions. 3.5. Macro Definitions ---------------------- Macro names are written in all-capitals, like in GWEN_DB_FLAGS_DEFAULT. 3.6. Callbacks -------------- Callbacks must be attributed using "GWENHYWFAR_CB" to make them work. Best known callbacks in Gwenhywfar are those of the GWEN_INHERIT framework. The following example illustrates this: void GWENHYWFAR_CB MyType_FreeData(void *bp, void *p); As you can see the return type is followed by the keyword GWENHYWFAR_CB which expands on WIN32 platforms to "__stdcall". This makes it possible to use such callbacks on WIN32, too. BTW: In a Linux environment this macro is expanded to an empty string because Linux doesn't need such an attribute. However, using the macro GWENHYWFAR_CB make the source code protable. 4. Formal Style =============== 4.1. Indent Style ----------------- The preferred style is GNU: two space indent. 4.2. Brackets ------------- The preferred style here is to have the opening bracket at the very same line as the keyword which introduces the block, like in: if (pos) { if (pos>=bf->bufferSize) { DBG_ERROR(0, "Position outside buffer"); return -1; } } The closing bracket is supposed to be alone in the next line following the block (as seen above). 4.3. Start of Files ------------------- Every source file (*.{c, cpp, h}) should have a header like this: ------------------------------------------------- X8 cut here /*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Tue Sep 09 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ ------------------------------------------------- X8 cut here The copyright and email entry should of course be adapted ;-) All files within this project are licensed under the GNU LGPL, and the header of every file must reflect that (as is in the header above). 5. ChangeLog ============ Every change to the CVS version of this project should be accompanied by a descriptive text in the file ChangeLog. The format of such an entry should match that of the existing entries, currently these are emacs-style and "my style" ;-) However, the format does not really matter, as long as it contains the following information: - date of change - name of the author of the changes - description of the change If the change breaks compatiblity with the previously existing version of this project then this should be marked. 6. BUILD Version Number ======================= The file "configure.ac" contains a line which sets the BUILD version number (GWENHYWFAR_VERSION_BUILD=xyz). Please update this number after a change (and just before committing your changes).. This has to do with the latency of the CVS server: Public CVS lags some hours behind developer CVS, because public access is served from the CVS backup. The BUILD version number allows to identify the version if some user wants to try the current CVS version of this project but only draws an older version because of the latency. 7. Versioning ============= Starting with version 1.0 the following versioning scheme is to be used: - if there are changes to the API which do not make it necessary to change the SO_MAJOR version (no addition to the API etc) then only the patchlevel version is incremented - if there are changes which require the SO_MAJOR version to be incremented then: - if the SO_AGE is also incremented (i.e. there are downward compatible additions to the API) the minor version number is incremented and the patchlevel is reset to 0. - if the SO_AGE is reset to 0 (i.e. the new API is not compatible to the old one) the major version is incremented and the other version parts are reset to 0. Starting with version 1.4.2 the version numbers of released packages always use three digits. Examples: - version 1.2.1 has the same SO_MAJOR as 1.2.2, so 1.2.2 can completely replace 1.2.1 and vice versa without any problems - version 1.3.0 is downward compatible to 1.2 - version 1.4.0 as well - version 2.0.0 is incompatible with 1.x 8. CVS Usage ============ Please make sure that a commit to CVS does not make the CVS repository unusable, so before committing: - check whether your local version compiles correctly - check whether the library/executable created actually DOES work This is necessary because the CVS version is actually used by testers and the developers. So rendering the CVS version unusable would be disastrous... 9. Documentation ================ Every exported function and type should be documented inside a header file. This project uses doxygen for this purpose. Well, not every function is documented right now, but I am working on that ;-) Martin Preuss, Hamburg/Germany, Feb 27 2006 gwenhywfar-4.15.2beta/doc/apidoc.h0000644000175000017500000000477212364015347013735 00000000000000 /* * This file is only to define a basic structure for the API documentation */ #ifndef GWENHYWFAR_APIDOC_H #define GWENHYWFAR_APIDOC_H /** @defgroup MOD_BASE Basic Stuff */ /** @defgroup MOD_OS Operating System Abstraction */ /** @defgroup MOD_IOLAYER Input Output Layer Functions */ /** @defgroup MOD_IO Input Output Functions */ /** @defgroup MOD_NET Networking Functions */ /** @defgroup MOD_IPC Inter Process communication */ /** @defgroup MOD_PARSER Data Management And Parsing */ /** @defgroup MOD_CRYPT Cryptographic Functions */ /** @defgroup MOD_GUI Graphical User Interface */ /** @defgroup MOD_DIALOG Toolkit Independent Dialog Framework */ /** @mainpage Gwenhywfar Documentation Main Page * This is Gwenhywfar, a multi-platform helper library for networking and security applications and libraries. It is heavily used by Libchipcard and OpenHBCI-TNG (The Next Generation). @section GWEN_features Features This library is written in C, and it follows the object-oriented programming paradigm for most of its parts. The header files can directly be used from C++, too. Gwenhywfar includes the following features:
  • Basic Data types for binary buffers, linked lists, error objects, string lists (src/base/), buffered IO operations (src/io/)
  • OS abstraction functions for directory and Internet address handling (src/os/)
  • extensive data type and function collections for Inter-Process communication (IPC, in src/ipc/ and src/impl/ipc/)
  • High-level cryptographic functions on top of OpenSSL functionality (src/crypt/)
  • High-level functions for parsing XML-like files and accessing them like a hierarchical database (src/parser/)
@section GWEN_contact Contact For questions about this library please ask on the mailing list of the AqBanking project aqbanking-user (subscriber-only, please subscribe on http://lists.aqbanking.de/cgi-bin/mailman/listinfo/aqbanking-user), since this is where the author(s) hang out. @section GWEN_author Authors This library is being written by and is being maintained by Martin Preuss Special thanks go to Christian Stimming and Micha Lenk. */ #endif gwenhywfar-4.15.2beta/doc/inherit/0000755000175000017500000000000012643267242014040 500000000000000gwenhywfar-4.15.2beta/doc/inherit/testinherit.c0000644000175000017500000000061412364015347016464 00000000000000 #ifdef HAVE_CONFIG_H # include #endif #include "derivedclass.h" #include int main(int argc, char *argv[]) { BASECLASS *object = DerivedClass_new("some data"); assert(object); printf("DerivedClass_new: Test object created with data \"%s\"\n", DerivedClass_GetTestData(object)); BaseClass_free(object); printf("BaseClass_free: Object freed.\n"); return 0; } gwenhywfar-4.15.2beta/doc/inherit/derivedclass.h0000644000175000017500000000200412364015347016572 00000000000000 #ifndef GWEN_EXAMPLE_INHERIT_DERIVEDCLASS_H #define GWEN_EXAMPLE_INHERIT_DERIVEDCLASS_H #include "baseclass.h" /* constructor of the derived class. Please note that a pointer to the * underlying base class is returned, not to the derived class! * Functions of the derived class can get their private data (in this case * DERIVEDCLASS*) via GWEN_INHERIT_GETDATA (see "derivedclass.c"). * Please note also that there is no destructor: This constructor registers * a callback function which does a cleanup of the DERIVEDCLASS data when * the destructor of the base class (in our example "BaseClass_free()") is * called. */ BASECLASS *DerivedClass_new(const char *data); /* This is a function of the derived class. It can only operate on BASECLASS * object which have been created by "DerivedClass_new()" because only then * a private pointer to DERIVEDCLASS is registered with the base object. */ const char *DerivedClass_GetTestData(const BASECLASS *baseClass); #endif /* GWEN_EXAMPLE_INHERIT_DERIVEDCLASS_H */ gwenhywfar-4.15.2beta/doc/inherit/derivedclass_p.h0000644000175000017500000000072612364015347017122 00000000000000 #ifndef GWEN_EXAMPLE_INHERIT_DERIVEDCLASS_P_H #define GWEN_EXAMPLE_INHERIT_DERIVEDCLASS_P_H #include "derivedclass.h" typedef struct DERIVEDCLASS DERIVEDCLASS; struct DERIVEDCLASS { /* this struct only contains private data for the derived class. * The inheritance administration data is only needed in the base class. */ char *testData; }; void GWENHYWFAR_CB DerivedClass_FreeData(void *bp, void *p); #endif /* GWEN_EXAMPLE_INHERIT_DERIVEDCLASS_P_H */ gwenhywfar-4.15.2beta/doc/inherit/derivedclass.c0000644000175000017500000000363012364015347016573 00000000000000 #ifdef HAVE_CONFIG_H # include #endif #include "derivedclass_p.h" /* this macro announces to the inheritance code that we are about to * extend BASECLASS with DERIVEDCLASS. Please consider this macro a black box, * don't rely on the implementation of this macro! */ GWEN_INHERIT(BASECLASS, DERIVEDCLASS) BASECLASS *DerivedClass_new(const char *data) { BASECLASS *baseClass; DERIVEDCLASS *derivedClass; /* first create the base class by calling its constructor. This also sets * up the inheritance data stored with the base object */ baseClass=BaseClass_new(); /* create our private data which is to be assigned to the base object * in the next step */ GWEN_NEW_OBJECT(DERIVEDCLASS, derivedClass) derivedClass->testData=strdup(data); /* now link our private data to the base object. This makes also sure that * out provided cleanup function "DerivedClass_FreeData()" is called as * soon as the destructor of the base object is called. */ GWEN_INHERIT_SETDATA(BASECLASS, DERIVEDCLASS, baseClass, derivedClass, DerivedClass_FreeData); /* return the pointer to the created base class */ return baseClass; } /* the first pointer is a pointer to the base class (in our case BASECLASS) * the second is a pointer to the private data (here DERIVEDCLASS). * When this function is called the base object still exists. */ void GWENHYWFAR_CB DerivedClass_FreeData(void *bp, void *p) { DERIVEDCLASS *derivedClass; derivedClass=(DERIVEDCLASS*) p; free(derivedClass->testData); GWEN_FREE_OBJECT(derivedClass); } const char *DerivedClass_GetTestData(const BASECLASS *baseClass) { DERIVEDCLASS *derivedClass; assert(baseClass); /* get the pointer to our private data which we assigned via * "GWEN_INHERIT_SETDATA" */ derivedClass=GWEN_INHERIT_GETDATA(BASECLASS, DERIVEDCLASS, baseClass); assert(derivedClass); return derivedClass->testData; } gwenhywfar-4.15.2beta/doc/inherit/baseclass.h0000644000175000017500000000075612364015347016076 00000000000000 #ifndef GWEN_EXAMPLE_INHERIT_BASECLASS_H #define GWEN_EXAMPLE_INHERIT_BASECLASS_H #include typedef struct BASECLASS BASECLASS; /* this macro defines some internal inheritance functions which are needed * by GWEN's inheritance code. Please consider this macro a black box, don't * rely on its members! */ GWEN_INHERIT_FUNCTION_DEFS(BASECLASS) BASECLASS *BaseClass_new(); void BaseClass_free(BASECLASS *baseClass); #endif /* GWEN_EXAMPLE_INHERIT_BASECLASS_H */ gwenhywfar-4.15.2beta/doc/inherit/Makefile.in0000644000175000017500000011133212634022412016012 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = testinherit$(EXEEXT) TESTS = testinherit$(EXEEXT) subdir = doc/inherit DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(noinst_HEADERS) \ $(top_srcdir)/test-driver README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libinherit_la_DEPENDENCIES = $(top_builddir)/src/libgwenhywfar.la am_libinherit_la_OBJECTS = baseclass.lo derivedclass.lo libinherit_la_OBJECTS = $(am_libinherit_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = PROGRAMS = $(noinst_PROGRAMS) am_testinherit_OBJECTS = testinherit.$(OBJEXT) testinherit_OBJECTS = $(am_testinherit_OBJECTS) am__DEPENDENCIES_1 = testinherit_DEPENDENCIES = libinherit.la \ $(top_builddir)/src/libgwenhywfar.la $(am__DEPENDENCIES_1) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libinherit_la_SOURCES) $(testinherit_SOURCES) DIST_SOURCES = $(libinherit_la_SOURCES) $(testinherit_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = -I$(gwenhywfar_symlinkdir) $(GPG_ERROR_CFLAGS) EXTRA_DIST = README noinst_LTLIBRARIES = libinherit.la libinherit_la_SOURCES = baseclass.c derivedclass.c noinst_HEADERS = baseclass.h baseclass_p.h derivedclass.h derivedclass_p.h libinherit_la_LIBADD = $(top_builddir)/src/libgwenhywfar.la testinherit_SOURCES = testinherit.c testinherit_LDADD = libinherit.la $(top_builddir)/src/libgwenhywfar.la \ $(GPG_ERROR_LIBS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/inherit/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/inherit/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libinherit.la: $(libinherit_la_OBJECTS) $(libinherit_la_DEPENDENCIES) $(EXTRA_libinherit_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libinherit_la_OBJECTS) $(libinherit_la_LIBADD) $(LIBS) clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list testinherit$(EXEEXT): $(testinherit_OBJECTS) $(testinherit_DEPENDENCIES) $(EXTRA_testinherit_DEPENDENCIES) @rm -f testinherit$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testinherit_OBJECTS) $(testinherit_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/baseclass.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/derivedclass.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testinherit.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ else \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? testinherit.log: testinherit$(EXEEXT) @p='testinherit$(EXEEXT)'; \ b='testinherit'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am recheck tags tags-am uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/doc/inherit/Makefile.am0000644000175000017500000000072712364015347016017 00000000000000INCLUDES= -I$(gwenhywfar_symlinkdir) $(GPG_ERROR_CFLAGS) EXTRA_DIST=README noinst_LTLIBRARIES=libinherit.la libinherit_la_SOURCES=baseclass.c derivedclass.c noinst_HEADERS=baseclass.h baseclass_p.h derivedclass.h derivedclass_p.h libinherit_la_LIBADD=$(top_builddir)/src/libgwenhywfar.la noinst_PROGRAMS = testinherit testinherit_SOURCES = testinherit.c testinherit_LDADD = libinherit.la $(top_builddir)/src/libgwenhywfar.la \ $(GPG_ERROR_LIBS) TESTS = testinherit gwenhywfar-4.15.2beta/doc/inherit/baseclass_p.h0000644000175000017500000000100312364015347016377 00000000000000 #ifndef GWEN_EXAMPLE_INHERIT_BASECLASS_P_H #define GWEN_EXAMPLE_INHERIT_BASECLASS_P_H #include "baseclass.h" struct BASECLASS { /* the following line creates the necessary structs which are needed by * GWEN's inheritance code. They are later initialized by invocation of * GWEN_INHERIT_INIT from the constructor of this struct. */ GWEN_INHERIT_ELEMENT(BASECLASS) /* the rest are private elements defined by the developer */ int someMember; }; #endif /* GWEN_EXAMPLE_INHERIT_BASECLASS_P_H */ gwenhywfar-4.15.2beta/doc/inherit/baseclass.c0000644000175000017500000000205312364015347016061 00000000000000 #ifdef HAVE_CONFIG_H # include #endif #include "baseclass_p.h" /* This implements the inherit functions which are specific to this * module. */ GWEN_INHERIT_FUNCTIONS(BASECLASS) BASECLASS *BaseClass_new() { BASECLASS *baseClass; /* this macro simply allocates memory for a BASECLASS object and * presets the memory area with zeroes */ GWEN_NEW_OBJECT(BASECLASS, baseClass) /* this macro allows GWEN to initialize the inheritance data defined * in baseclass_p.h within the struct definition (GWEN_INHERIT_ELEMENT) */ GWEN_INHERIT_INIT(BASECLASS, baseClass) /* the rest is specific to our example module */ baseClass->someMember=12345; return baseClass; } void BaseClass_free(BASECLASS *baseClass) { if (baseClass) { /* this macro calls the cleanup functions of all registered private * data pointers (if any) */ GWEN_INHERIT_FINI(BASECLASS, baseClass) /* this macro simply calls free() for now, maybe later we can do some * memory leak checking with it */ GWEN_FREE_OBJECT(baseClass); } } gwenhywfar-4.15.2beta/doc/inherit/README0000644000175000017500000000567112364015347014646 00000000000000 This folder contains an example of how to use GWEN's inheritance functions. The Problem =========== GWEN follows the object oriented pragma as far as possible. There are structs on which groups of functions operate. The module defined in "src/sio/syncio*.{c,h}" consists of a struct and functions which create a network connection. However, this module is very basic, i.e. it only knows how to deal with network connections in general, but it doesn't have a clue about special protocols like HTTP, HBCI etc. These protocols are implemented by extending the base module via GWEN's inherit module. Traditional Approach ==================== The easiest and therefore traditional way is to define a private pointer to user data stored within the struct and get this pointer by setter and getter functions, as in: myData=GetPrivateData(BASECLASS *baseClass); This approach only works if there is only one module extending an existing one. If there are multiple modules which extend a base module then each extending code has to know about the other module. This is not always possible with base modules, because in many cases we don't know how many other modules will extend a base module. Things get even more complicated if the private data is to be freed by using callbacks. GWEN's Approach =============== Inheritance in GWEN is established by assigning private data to an already existing struct (like in the traditional approach). However, GWEN stores the type of the data pointer along with the data itself. It also stores an optional pointer to a function which frees this private data. So inheritance data in GWEN consists of these elements: - pointer to private data - type of that pointer - optional pointer to a cleanup function GWEN keeps a list of those triplets with every element that is prepared for inheritance (see example definition in "baseclass_p.h"). For every module which wants to extend an existing object (and therefore needs to assign private data to that base object) one of those triplets is stored in the object's internal list. If the cleanup function of the base object is called (in our example this is BaseClass_free()) then all registered cleanup functions are called in reversed order. This has certain advantages: 1) we always use the pointer to the base module. Every module that extends another one also has access to the base module and may call the functions of that base module. 2) the caller of the base modules cleanup function (as well as that function itself) doesn't have to know how many private data pointers are stored with the object to be cleaned up, nor how to cleanup these pointers. This is all done transparently. This folder contains an example of how inheritance works practically. The files "baseclass*.{,c,h}" contain the declaration and implementation of a fictional base class, "derivedclass*.{c,h}" implements a module which extends the module "BaseClass". Hamburg, Germany, 2005/10/25 gwenhywfar-4.15.2beta/doc/Makefile.am0000644000175000017500000000026012364015347014345 00000000000000EXTRA_DIST= \ apidoc.h \ STYLE \ db2.png \ testdialog.xml \ plugindescr.xml \ plugindescr.xsd.in \ widgets.h \ widgets_be.h SUBDIRS=inherit dialog sources: gwenhywfar-4.15.2beta/doc/plugindescr.xsd.in0000644000175000017500000000316712364015347015766 00000000000000 gwenhywfar-4.15.2beta/doc/testdialog.xml0000644000175000017500000001150012364015347015171 00000000000000 WIDGET_FLAGS_DEFAULT WIDGET_FLAGS_BORDER WIDGET_FLAGS_MODAL WINDOW_FLAGS_TITLE 53 10 Enter Connection Data 1
20 1 Connection type WIDGET_FLAGS_DEFAULT WIDGET_FLAGS_BORDER WIDGET_FLAGS_HIGHLIGHT 30 1 local private secure This allows setting the connection type. type char 3 16
20 1 Address WIDGET_FLAGS_DEFAULT WIDGET_FLAGS_BORDER WIDGET_FLAGS_HIGHLIGHT EDITBOX_FLAGS_EDIT EDITBOX_FLAGS_CLEARALL EDITBOX_FLAGS_INSERT EDITBOX_FLAGS_DYNAMIC 30 1 64 This allows setting the address. addr char 64
20 1 TCP Port WIDGET_FLAGS_DEFAULT WIDGET_FLAGS_BORDER WIDGET_FLAGS_HIGHLIGHT EDITBOX_FLAGS_EDIT EDITBOX_FLAGS_CLEARALL EDITBOX_FLAGS_INSERT EDITBOX_FLAGS_DYNAMIC 8 1 6 This allows setting the TCP port. port int 1 65535
1 HLINE_FLAGS_EMPTY 1
WIDGET_FLAGS_DEFAULT WIDGET_FLAGS_HCENTER WIDGET_FLAGS_BORDER WIDGET_FLAGS_HIGHLIGHT 8 1 1 Ok Press this button when finished.. WIDGET_FLAGS_DEFAULT WIDGET_FLAGS_HCENTER WIDGET_FLAGS_BORDER WIDGET_FLAGS_HIGHLIGHT 8 1 2 Abort Press this button when to abort.
gwenhywfar-4.15.2beta/README.SOLARIS0000644000175000017500000000103312364015347013536 00000000000000 Currently Solaris does not handle the "__attribute__ ((constructor))" entries in C files as it seems, so in your programs on Solaris you will have to call GWEN_Init() yourself before doing anything else... If programs linked against libgwenhywfar complain about unavailable libraries upon start (most likely they mention OpenSSL) you should try this: LD_LIBRARY_PATH="/usr/local/ssl/lib:/usr/local/lib" YOURPROGRAM The LD_LIBRARY_PATH variable tells the Solaris linker where to search for libraries in addition to the system folders. gwenhywfar-4.15.2beta/gwenhywfar.pc.in0000644000175000017500000000120012364015347014651 00000000000000# pkg-config configuration for gwenhywfar # For information about the syntax, see pkg-config(1) # General installation directories prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ pkgincludedir=@includedir@/gwenhywfar datarootdir=@datarootdir@ datadir=@datadir@ bindir=@bindir@ sysconfdir=@sysconfdir@ # Particular variables of gwenhywfar plugindir=@gwenhywfar_plugindir@ # Human-readable name Name: gwenhywfar # Human-readable description Description: A multi-platform helper library for other libraries Version: @VERSION@ Libs: @gwenhywfar_ldflags@ @gwenhywfar_libs@ Cflags: -I@gwenhywfar_headerdir@ gwenhywfar-4.15.2beta/Makefile.cvs0000644000175000017500000001060712364015347014004 00000000000000 #MY_CFLAGS=-W -pedantic -std=c99 -ggdb -Wall -O -ggdb MY_CFLAGS=-ggdb -Wall -O0 WIN32_INSTALL_DIR=/home/martin/install/win32 all_warnings=\ -Wextra -Wall -Waddress \ -Waggregate-return -Warray-bounds \ -Wcast-qual -Wchar-subscripts -Wclobbered -Wcomment \ -Wcoverage-mismatch -Wno-deprecated-declarations -Wdisabled-optimization \ -Wempty-body -Wno-endif-labels -Wfloat-equal -Wformat \ -Wformat=2 -Wno-format-extra-args -Wformat-nonliteral -Wformat-security \ -Wformat-y2k -Wignored-qualifiers -Wimplicit -Wimplicit-function-declaration \ -Wimplicit-int -Wimport -Wno-import -Winit-self -Winline \ -Wno-int-to-pointer-cast -Winvalid-pch \ -Wunsafe-loop-optimizations -Wlogical-op -Wlong-long -Wmain -Wmissing-braces \ -Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-include-dirs \ -Wmissing-noreturn -Wno-multichar -Wnonnull -Wno-overflow -Woverlength-strings \ -Wparentheses -Wpointer-arith -Wno-pointer-to-int-cast -Wno-variadic-macros \ -Wredundant-decls -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare \ -Wstack-protector -Wstrict-aliasing \ -Wswitch -Wswitch-default -Wswitch-enum \ -Wtrigraphs -Wtype-limits -Wundef -Wuninitialized -Wunknown-pragmas \ -Wno-pragmas -Wunused -Wunused-function -Wunused-label \ -Wunused-parameter -Wunused-value -Wunused-variable \ -Wvla -Wvolatile-register-var -Wwrite-strings \ c_warnings=\ -Wbad-function-cast -Wmissing-declarations -Wmissing-parameter-type \ -Wnested-externs \ -Wdeclaration-after-statement -Wpointer-sign -Wc++-compat cplusplus_warnings=\ -Wc++0x-compat -Wno-invalid-offsetof WIN32_OPTIONS=\ --host=i586-mingw32msvc \ --target=i586-mingw32msvc \ --enable-version-specific-runtime-libs \ --with-gcc \ --with-gnu-ld \ --without-x \ --enable-threads=win32 \ --disable-win32-registry MINGW32_PREFIX=/usr/i586-mingw32msvc default: all dist: COPY=--copy dist: all touch stamp-h.in ./configure make dist cvsclean:: automake --include-deps autoconf touch stamp-h.in rm -f `find . -name \*~` rm -Rf apidoc all: libtoolize -f --automake $(COPY) aclocal -I ./m4 autoheader if test ! -f i18nsources; then echo > i18nsources; fi automake -f --add-missing $(COPY) autoconf local: PREFIX=/usr/local local: all ./configure --prefix=$(PREFIX) mp: libtoolize -f --automake aclocal -I ./m4 autoheader automake --add-missing autoconf CXXFLAGS="-O0 -ggdb -Wall $(cplusplus_warnings)" CFLAGS="-O0 -ggdb -Wall" ./configure INSTALL="/usr/bin/install -p" --with-guis="gtk2 fox16 qt4" --disable-static --enable-full-doc --prefix=/usr/local clang: libtoolize -f --automake aclocal -I ./m4 autoheader automake --add-missing autoconf CC=clang CXX=clang CXXFLAGS="-O0 -ggdb -Wall $(cplusplus_warnings)" CFLAGS="-O0 -ggdb -Wall" ./configure INSTALL="/usr/bin/install -p" --with-guis="gtk2 fox16 qt4" --disable-static --enable-full-doc mp-priv: libtoolize -f --automake aclocal -I ./m4 autoheader automake --add-missing autoconf CFLAGS="$(MY_CFLAGS)" CXXFLAGS="-ggdb -Wall" ./configure INSTALL="/usr/bin/install -p" --disable-static --prefix=/opt/devel/4 --enable-full-doc mp-darwin: CFLAGS="-I/sw/include -ggdb -Wall" LDFLAGS="-L/sw/lib" ./configure mp-w32: libtoolize -f --automake aclocal -I ./m4 autoheader automake --add-missing autoconf PATH="$(MINGW32_PREFIX)/bin:$(PATH)" \ PKG_CONFIG_PATH=$(WIN32_INSTALL_DIR)/lib/pkgconfig \ CFLAGS="$(MY_CFLAGS) -I$(WIN32_INSTALL_DIR)/include -L$(WIN32_INSTALL_DIR)/lib" CXXFLAGS="-ggdb -Wall -I$(WIN32_INSTALL_DIR)/include -L$(WIN32_INSTALL_DIR)/lib" \ DLLTOOL=i586-mingw32msvc-dlltool \ OBJDUMP=i586-mingw32msvc-objdump \ LD=i586-mingw32msvc-ld \ AR=i586-mingw32msvc-ar \ NM=i586-mingw32msvc-nm \ RANLIB=i586-mingw32msvc-ranlib \ STRIP=i586-mingw32msvc-strip \ STRIPPROG=i586-mingw32msvc-strip \ AS=i586-mingw32msvc-as \ RC=i586-mingw32msvc-windres \ ./configure \ --prefix=$(WIN32_INSTALL_DIR) $(WIN32_OPTIONS) \ --enable-release \ --disable-binreloc \ --with-openssl-includes=$(WIN32_INSTALL_DIR)/include \ --with-openssl-libs=$(WIN32_INSTALL_DIR)/lib \ --with-libgcrypt-prefix=$(WIN32_INSTALL_DIR) \ --with-libgnutls-prefix=$(WIN32_INSTALL_DIR) \ --with-fox-includes=$(WIN32_INSTALL_DIR)/include/fox-1.6 \ --disable-qt3 \ --disable-qt4 \ --with-guis=fox16 \ --with-fox-libs="-L$(WIN32_INSTALL_DIR)/lib -lFOX-1.6" \ git-log: git-log --pretty="format:%ad %an%n%s%n%b" --since="2008-08-16" >git.log gwenhywfar-4.15.2beta/TODO0000644000175000017500000000065312364015347012242 00000000000000 xml: - read encodings from XML header and convert text accordingly - add argument to file reader/writer code which contains the target encoding Get root CA certs: http://curl.haxx.se/docs/caextract.html Callgraphs - Generate callgraphs: make CC=/usr/gccgraph/bin/gcc C : genfull C++: genfull -g cppdepn - Show callgraph for s specific function: gengraph -f FUNCTION_NAME -o OUTFILENAME --output-type=png gwenhywfar-4.15.2beta/gwenhywfar.spec0000644000175000017500000000415412634022442014601 00000000000000# norootforbuild # neededforbuild gettext gettext-devel gcc openssl-devel openssl %define name gwenhywfar %define version 4.15.2beta %define rpm_cxxflags \"-O2 -march=i486 -mcpu=i586\" %define rpm_cflags \"-O2 -march=i486 -mcpu=i586\" %define dist Ubuntu %define disttag ubuntu %define distver # Note: There is not yet a special symbol for the rpm release # version. We set it to one here. %define release 1.%{disttag}%{distver} Summary: A multi-platform helper library for other libraries Name: %{name} Version: %{version} Release: %{release} Source: http://download.sourceforge.net/gwenhywfar/%{name}-%{version}.tar.gz Group: System Environment/Libraries License: LGPL Packager: Martin Preuss URL: http://sourceforge.net/projects/gwenhywfar BuildRoot: %{_tmppath}/%{name}-%{version}-root BuildRequires: openssl-devel gettext Prereq: /sbin/ldconfig %description This is Gwenhywfar, a multi-platform helper library for networking and security applications and libraries. It is heavily used by libchipcard www.libchipcard.de and AqBanking/AqHBCI, the German online banking libraries. %package devel Summary: Gwenhywfar development kit Group: Development/Libraries Requires: %{name} = %{version}-%{release} %description devel This package contains gwenhywfar-config and header files for writing and compiling programs using Gwenhywfar. %prep %setup -q %build %configure --disable-static --with-openssl-libs=%{_libdir} make %install [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT make DESTDIR=$RPM_BUILD_ROOT install %clean [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT %post /sbin/ldconfig %postun /sbin/ldconfig %files %defattr(-,root,root) %doc AUTHORS README COPYING ChangeLog %{_libdir}/*.so.* %{_libdir}/%{name} %{_datadir}/locale/*/LC_MESSAGES/gwenhywfar.mo %{_bindir}/gct-tool %{_datadir}/gwenhywfar/*.crt %files devel %defattr(-,root,root) %{_bindir}/gwenhywfar-config %{_bindir}/xmlmerge %{_bindir}/mklistdoc %{_bindir}/typemaker %{_includedir}/gwenhywfar3 %{_libdir}/*.so %{_libdir}/*.la #%{_libdir}/*.a %{_datadir}/aclocal/gwenhywfar.m4 %{_libdir}/pkgconfig/gwenhywfar.pc %changelog gwenhywfar-4.15.2beta/config.rpath0000755000175000017500000004364712364015347014074 00000000000000#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2007 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's _LT_CC_BASENAME. for cc_temp in $CC""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` # Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; darwin*) case $cc_basename in xlc*) wl='-Wl,' ;; esac ;; mingw* | cygwin* | pw32* | os2*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; newsos6) ;; linux* | k*bsd*-gnu) case $cc_basename in icc* | ecc*) wl='-Wl,' ;; pgcc | pgf77 | pgf90) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) wl='-Wl,' ;; esac ;; esac ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) wl='-Wl,' ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3*) wl='-Wl,' ;; sysv4*MP*) ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) wl='-Wl,' ;; unicos*) wl='-Wl,' ;; uts4*) ;; esac fi # Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' case "$host_os" in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we cannot use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; gnu* | linux* | k*bsd*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' else ld_shlibs=no fi ;; esac ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then hardcode_libdir_flag_spec= fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi[45]*) ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=no if test "$GCC" = yes ; then : else case $cc_basename in xlc*) ;; *) ld_shlibs=no ;; esac fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd1*) ld_shlibs=no ;; freebsd2.2*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; freebsd2*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | dragonfly*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no ;; *) hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ;; sysv5* | sco3.2v5* | sco5v6*) hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER. # Unlike libtool.m4, here we don't care about _all_ names of the library, but # only about the one the linker finds when passed -lNAME. This is the last # element of library_names_spec in libtool.m4, or possibly two of them if the # linker has special search rules. library_names_spec= # the last element of library_names_spec in libtool.m4 libname_spec='lib$name' case "$host_os" in aix3*) library_names_spec='$libname.a' ;; aix4* | aix5*) library_names_spec='$libname$shrext' ;; amigaos*) library_names_spec='$libname.a' ;; beos*) library_names_spec='$libname$shrext' ;; bsdi[45]*) library_names_spec='$libname$shrext' ;; cygwin* | mingw* | pw32*) shrext=.dll library_names_spec='$libname.dll.a $libname.lib' ;; darwin* | rhapsody*) shrext=.dylib library_names_spec='$libname$shrext' ;; dgux*) library_names_spec='$libname$shrext' ;; freebsd1*) ;; freebsd* | dragonfly*) case "$host_os" in freebsd[123]*) library_names_spec='$libname$shrext$versuffix' ;; *) library_names_spec='$libname$shrext' ;; esac ;; gnu*) library_names_spec='$libname$shrext' ;; hpux9* | hpux10* | hpux11*) case $host_cpu in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac library_names_spec='$libname$shrext' ;; interix[3-9]*) library_names_spec='$libname$shrext' ;; irix5* | irix6* | nonstopux*) library_names_spec='$libname$shrext' case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux* | k*bsd*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) library_names_spec='$libname$shrext' ;; netbsd*) library_names_spec='$libname$shrext' ;; newsos6) library_names_spec='$libname$shrext' ;; nto-qnx*) library_names_spec='$libname$shrext' ;; openbsd*) library_names_spec='$libname$shrext$versuffix' ;; os2*) libname_spec='$name' shrext=.dll library_names_spec='$libname.a' ;; osf3* | osf4* | osf5*) library_names_spec='$libname$shrext' ;; rdos*) ;; solaris*) library_names_spec='$libname$shrext' ;; sunos4*) library_names_spec='$libname$shrext$versuffix' ;; sysv4 | sysv4.3*) library_names_spec='$libname$shrext' ;; sysv4*MP*) library_names_spec='$libname$shrext' ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) library_names_spec='$libname$shrext' ;; uts4*) library_names_spec='$libname$shrext' ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' < header file. */ #undef HAVE_ARPA_INET_H /* Define to 1 if you have the declaration of `sigprocmask', and to 0 if you don't. */ #undef HAVE_DECL_SIGPROCMASK /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_DIRENT_H /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* whether FOX is available */ #undef HAVE_FOX /* Define to 1 if you have the `gethostbyaddr' function. */ #undef HAVE_GETHOSTBYADDR /* Define to 1 if you have the `gethostbyname' function. */ #undef HAVE_GETHOSTBYNAME /* Define to 1 if you have the `getpid' function. */ #undef HAVE_GETPID /* only in gnutls>=1.6 */ #undef HAVE_GNUTLS_TRANSPORT_SET_ERRNO /* whether I18N is available */ #undef HAVE_I18N /* Defined if libiconv is available */ #undef HAVE_ICONV /* Define to 1 if you have the header file. */ #undef HAVE_ICONV_H /* Define to 1 if you have the `inet_ntoa' function. */ #undef HAVE_INET_NTOA /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `isascii' function. */ #undef HAVE_ISASCII /* Define to 1 if you have the header file. */ #undef HAVE_LANGINFO_H /* Define to 1 if you have the `dl' library (-ldl). */ #undef HAVE_LIBDL /* Define to 1 if you have the header file. */ #undef HAVE_LIBINTL_H /* Define to 1 if you have the `pthread' library (-lpthread). */ #undef HAVE_LIBPTHREAD /* whether librt is available */ #undef HAVE_LIBRT /* Define to 1 if you have the header file. */ #undef HAVE_LOCALCHARSET_H /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define to 1 if you have the `memmove' function. */ #undef HAVE_MEMMOVE /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `memset' function. */ #undef HAVE_MEMSET /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_NETDB_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_IN_H /* Defined if OpenSSL is available */ #undef HAVE_OPENSSL /* whether Qt4 is available */ #undef HAVE_QT4 /* Define to 1 if you have the `random' function. */ #undef HAVE_RANDOM /* Define to 1 if you have the header file. */ #undef HAVE_REGEX_H /* Define to 1 if you have the `select' function. */ #undef HAVE_SELECT /* Define to 1 if you have the `setlocale' function. */ #undef HAVE_SETLOCALE /* Define to 1 if you have the header file. */ #undef HAVE_SIGNAL_H /* Define to 1 if you have the `snprintf' function. */ #undef HAVE_SNPRINTF /* Define to 1 if you have the `socket' function. */ #undef HAVE_SOCKET /* Define to 1 if you have the `srandom' function. */ #undef HAVE_SRANDOM /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strcasecmp' function. */ #undef HAVE_STRCASECMP /* Define to 1 if you have the `strchr' function. */ #undef HAVE_STRCHR /* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP /* Define to 1 if you have the `strerror' function. */ #undef HAVE_STRERROR /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `symlink' function. */ #undef HAVE_SYMLINK /* Define to 1 if you have the header file. */ #undef HAVE_SYSLOG_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_DIR_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SELECT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOCKET_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_WAIT_H /* Define to 1 if you have the header file. */ #undef HAVE_TERMIOS_H /* Define to 1 if you have the header file. */ #undef HAVE_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define as const if the declaration of iconv() needs const. */ #undef ICONV_CONST /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Required version of Libgcrypt */ #undef NEED_LIBGCRYPT_VERSION /* Define if variadic macros should be disabled */ #undef NO_VARIADIC_MACROS /* if BeOS is used */ #undef OS_BEOS /* if Apple Darwin is used */ #undef OS_DARWIN /* if FreeBSD is used */ #undef OS_FREEBSD /* if linux is used */ #undef OS_LINUX /* host system */ #undef OS_NAME /* if NetBSD is used */ #undef OS_NETBSD /* if OpenBSD is used */ #undef OS_OPENBSD /* if PalmOS is used */ #undef OS_PALMOS /* if this is a POSIX system */ #undef OS_POSIX /* host system */ #undef OS_SHORTNAME /* if Solaris is used */ #undef OS_SOLARIS /* system type */ #undef OS_TYPE /* if WIN32 is used */ #undef OS_WIN32 /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Disable the cast from QString to const char. */ #undef QT_NO_ASCII_CAST /* Define to the type of arg 1 for `select'. */ #undef SELECT_TYPE_ARG1 /* Define to the type of args 2, 3 and 4 for `select'. */ #undef SELECT_TYPE_ARG234 /* Define to the type of arg 5 for `select'. */ #undef SELECT_TYPE_ARG5 /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* Define to 1 if your declares `struct tm'. */ #undef TM_IN_SYS_TIME /* Version number of package */ #undef VERSION /* Define to empty if `const' does not conform to ANSI C. */ #undef const gwenhywfar-4.15.2beta/gwenhywfar.m40000644000175000017500000001145612364015347014200 00000000000000# $Id$ # (c) 2002 Martin Preuss # This function checks for libgwenhywfar AC_DEFUN([AC_GWENHYWFAR], [ dnl searches for gwenhywfar dnl Arguments: dnl $1: major version minimum dnl $2: minor version minimum dnl $3: patchlevel version minimum dnl $4: build version minimum dnl Returns: gwenhywfar_dir dnl gwenhywfar_bindir dnl gwenhywfar_libs dnl gwenhywfar_plugins dnl gwenhywfar_includes dnl gwenhywfar_headers dnl gwenhywfar_has_crypt dnl have_gwenhywfar if test -z "$1"; then vma="0"; else vma="$1"; fi if test -z "$2"; then vmi="1"; else vmi="$2"; fi if test -z "$3"; then vpl="0"; else vpl="$3"; fi if test -z "$4"; then vbld="0"; else vbld="$4"; fi AC_MSG_CHECKING(if gwenhywfar support desired) AC_ARG_ENABLE(gwenhywfar, [ --enable-gwenhywfar enable gwenhywfar support (default=yes)], enable_gwenhywfar="$enableval", enable_gwenhywfar="yes") AC_MSG_RESULT($enable_gwenhywfar) have_gwenhywfar="no" gwenhywfar_dir="" gwenhywfar_plugins="" gwenhywfar_libs="" gwenhywfar_bindir="" gwenhywfar_libspp="" gwenhywfar_includes="" gwenhywfar_has_crypt="yes" if test "$enable_gwenhywfar" != "no"; then AC_MSG_CHECKING(for gwenhywfar) AC_ARG_WITH(gwen-dir, [ --with-gwen-dir=DIR uses gwenhywfar from given dir], [lcc_dir="$withval"], [lcc_dir="${prefix} \ /usr/local \ /usr \ /gwen \ /sw \ /"]) for li in $lcc_dir; do if test -x "$li/bin/gwenhywfar-config"; then gwenhywfar_dir="$li"; break fi done if test -z "$gwenhywfar_dir"; then AC_MSG_RESULT([not found ]) AC_MSG_ERROR([ *** The library Gwenhywfar was not found. Obtain it from *** http://www.aquamaniac.de . *** If it is already installed (including the -devel package), *** you might need to specify the location with the *** option --with-gwen-dir=DIR.]) else AC_MSG_RESULT($gwenhywfar_dir) AC_MSG_CHECKING(for gwen libs) gwenhywfar_libs="`$gwenhywfar_dir/bin/gwenhywfar-config --libraries`" AC_MSG_RESULT($gwenhywfar_libs) AC_MSG_CHECKING(for gwen includes) gwenhywfar_includes="`$gwenhywfar_dir/bin/gwenhywfar-config --includes`" AC_MSG_RESULT($gwenhywfar_includes) AC_MSG_CHECKING(for gwen binary tools) gwenhywfar_bindir="`$gwenhywfar_dir/bin/gwenhywfar-config --bindir`" AC_MSG_RESULT($gwenhywfar_bindir) AC_MSG_CHECKING(for gwen plugins) gwenhywfar_plugins="`$gwenhywfar_dir/bin/gwenhywfar-config --plugins`" AC_MSG_RESULT($gwenhywfar_plugins) AC_MSG_CHECKING(for gwen headers) gwenhywfar_headers="`$gwenhywfar_dir/bin/gwenhywfar-config --headers`" AC_MSG_RESULT($gwenhywfar_headers) fi AC_MSG_CHECKING(if gwenhywfar test desired) AC_ARG_ENABLE(gwenhywfar, [ --enable-gwenhywfar-test enable gwenhywfar-test (default=yes)], enable_gwenhywfar_test="$enableval", enable_gwenhywfar_test="yes") AC_MSG_RESULT($enable_gwenhywfar_test) AC_MSG_CHECKING(for Gwenhywfar version >=$vma.$vmi.$vpl.$vbld) if test "$enable_gwenhywfar_test" != "no"; then gwen_versionstring="`$gwenhywfar_dir/bin/gwenhywfar-config --vstring`.`$gwenhywfar_dir/bin/gwenhywfar-config --vbuild`" AC_MSG_RESULT([found $gwen_versionstring]) if test "$vma" -gt "`$gwenhywfar_dir/bin/gwenhywfar-config --vmajor`"; then AC_MSG_ERROR([Your Gwenhywfar version is way too old. Please update from http://www.aquamaniac.de]) elif test "$vma" = "`$gwenhywfar_dir/bin/gwenhywfar-config --vmajor`"; then if test "$vmi" -gt "`$gwenhywfar_dir/bin/gwenhywfar-config --vminor`"; then AC_MSG_ERROR([Your Gwenhywfar version is too old. Please update from http://www.aquamaniac.de]) elif test "$vmi" = "`$gwenhywfar_dir/bin/gwenhywfar-config --vminor`"; then if test "$vpl" -gt "`$gwenhywfar_dir/bin/gwenhywfar-config --vpatchlevel`"; then AC_MSG_ERROR([Your Gwenhywfar version is a little bit too old. Please update from http://www.aquamaniac.de]) elif test "$vpl" = "`$gwenhywfar_dir/bin/gwenhywfar-config --vpatchlevel`"; then if test "$vbld" -gt "`$gwenhywfar_dir/bin/gwenhywfar-config --vbuild`"; then AC_MSG_ERROR([Your Gwenhywfar version is a little bit too old. Please update to the latest SVN version. Instructions for accessing SVN can be found on http://www.aquamaniac.de]) fi fi fi fi have_gwenhywfar="yes" #AC_MSG_RESULT(yes) else have_gwenhywfar="yes" AC_MSG_RESULT(assuming yes) fi dnl end of "if enable-gwenhywfar" fi AC_SUBST(gwenhywfar_dir) AC_SUBST(gwenhywfar_plugins) AC_SUBST(gwenhywfar_bindir) AC_SUBST(gwenhywfar_libs) AC_SUBST(gwenhywfar_includes) AC_SUBST(gwenhywfar_headers) AC_SUBST(gwenhywfar_has_crypt) ]) gwenhywfar-4.15.2beta/data/0000755000175000017500000000000012643267234012543 500000000000000gwenhywfar-4.15.2beta/data/Makefile.in0000644000175000017500000004520512634022412014521 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = data DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(dist_cert_DATA) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(certdir)" DATA = $(dist_cert_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ certdir = $(datadir)/gwenhywfar dist_cert_DATA = ca-bundle.crt all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_certDATA: $(dist_cert_DATA) @$(NORMAL_INSTALL) @list='$(dist_cert_DATA)'; test -n "$(certdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(certdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(certdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(certdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(certdir)" || exit $$?; \ done uninstall-dist_certDATA: @$(NORMAL_UNINSTALL) @list='$(dist_cert_DATA)'; test -n "$(certdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(certdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(certdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_certDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_certDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dist_certDATA install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-dist_certDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/data/ca-bundle.crt0000644000175000017500000335426012364015347015040 00000000000000# This is a bundle of X.509 certificates of public Certificate # Authorities. It was generated from the Mozilla root CA list. # # Source: mozilla/security/nss/lib/ckfw/builtins/certdata.txt # # Generated from certdata.txt RCS revision 1.87 # Certificate: Data: Version: 1 (0x0) Serial Number: 421 (0x1a5) Signature Algorithm: md5WithRSAEncryption Issuer: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Global Root Validity Not Before: Aug 13 00:29:00 1998 GMT Not After : Aug 13 23:59:00 2018 GMT Subject: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Global Root Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:95:0f:a0:b6:f0:50:9c:e8:7a:c7:88:cd:dd:17: 0e:2e:b0:94:d0:1b:3d:0e:f6:94:c0:8a:94:c7:06: c8:90:97:c8:b8:64:1a:7a:7e:6c:3c:53:e1:37:28: 73:60:7f:b2:97:53:07:9f:53:f9:6d:58:94:d2:af: 8d:6d:88:67:80:e6:ed:b2:95:cf:72:31:ca:a5:1c: 72:ba:5c:02:e7:64:42:e7:f9:a9:2c:d6:3a:0d:ac: 8d:42:aa:24:01:39:e6:9c:3f:01:85:57:0d:58:87: 45:f8:d3:85:aa:93:69:26:85:70:48:80:3f:12:15: c7:79:b4:1f:05:2f:3b:62:99 Exponent: 65537 (0x10001) Signature Algorithm: md5WithRSAEncryption 6d:eb:1b:09:e9:5e:d9:51:db:67:22:61:a4:2a:3c:48:77:e3: a0:7c:a6:de:73:a2:14:03:85:3d:fb:ab:0e:30:c5:83:16:33: 81:13:08:9e:7b:34:4e:df:40:c8:74:d7:b9:7d:dc:f4:76:55: 7d:9b:63:54:18:e9:f0:ea:f3:5c:b1:d9:8b:42:1e:b9:c0:95: 4e:ba:fa:d5:e2:7c:f5:68:61:bf:8e:ec:05:97:5f:5b:b0:d7: a3:85:34:c4:24:a7:0d:0f:95:93:ef:cb:94:d8:9e:1f:9d:5c: 85:6d:c7:aa:ae:4f:1f:22:b5:cd:95:ad:ba:a7:cc:f9:ab:0b: 7a:7f SHA1 Fingerprint=97:81:79:50:D8:1C:96:70:CC:34:D8:09:CF:79:44:31:36:7E:F4:74 -----BEGIN CERTIFICATE----- MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4 04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9 3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Server CA/emailAddress=server-certs@thawte.com Validity Not Before: Aug 1 00:00:00 1996 GMT Not After : Dec 31 23:59:59 2020 GMT Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Server CA/emailAddress=server-certs@thawte.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:d3:a4:50:6e:c8:ff:56:6b:e6:cf:5d:b6:ea:0c: 68:75:47:a2:aa:c2:da:84:25:fc:a8:f4:47:51:da: 85:b5:20:74:94:86:1e:0f:75:c9:e9:08:61:f5:06: 6d:30:6e:15:19:02:e9:52:c0:62:db:4d:99:9e:e2: 6a:0c:44:38:cd:fe:be:e3:64:09:70:c5:fe:b1:6b: 29:b6:2f:49:c8:3b:d4:27:04:25:10:97:2f:e7:90: 6d:c0:28:42:99:d7:4c:43:de:c3:f5:21:6d:54:9f: 5d:c3:58:e1:c0:e4:d9:5b:b0:b8:dc:b4:7b:df:36: 3a:c2:b5:66:22:12:d6:87:0d Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption 07:fa:4c:69:5c:fb:95:cc:46:ee:85:83:4d:21:30:8e:ca:d9: a8:6f:49:1a:e6:da:51:e3:60:70:6c:84:61:11:a1:1a:c8:48: 3e:59:43:7d:4f:95:3d:a1:8b:b7:0b:62:98:7a:75:8a:dd:88: 4e:4e:9e:40:db:a8:cc:32:74:b9:6f:0d:c6:e3:b3:44:0b:d9: 8a:6f:9a:29:9b:99:18:28:3b:d1:e3:40:28:9a:5a:3c:d5:b5: e7:20:1b:8b:ca:a4:ab:8d:e9:51:d9:e2:4c:2c:59:a9:da:b9: b2:75:1b:f6:42:f2:ef:c7:f2:18:f9:89:bc:a3:ff:8a:23:2e: 70:47 SHA1 Fingerprint=23:E5:94:94:51:95:F2:41:48:03:B4:D5:64:D2:A3:A3:F5:D8:8B:8C -----BEGIN CERTIFICATE----- MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3 dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3 DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91 yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG 7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ qdq5snUb9kLy78fyGPmJvKP/iiMucEc= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Premium Server CA/emailAddress=premium-server@thawte.com Validity Not Before: Aug 1 00:00:00 1996 GMT Not After : Dec 31 23:59:59 2020 GMT Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Premium Server CA/emailAddress=premium-server@thawte.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:d2:36:36:6a:8b:d7:c2:5b:9e:da:81:41:62:8f: 38:ee:49:04:55:d6:d0:ef:1c:1b:95:16:47:ef:18: 48:35:3a:52:f4:2b:6a:06:8f:3b:2f:ea:56:e3:af: 86:8d:9e:17:f7:9e:b4:65:75:02:4d:ef:cb:09:a2: 21:51:d8:9b:d0:67:d0:ba:0d:92:06:14:73:d4:93: cb:97:2a:00:9c:5c:4e:0c:bc:fa:15:52:fc:f2:44: 6e:da:11:4a:6e:08:9f:2f:2d:e3:f9:aa:3a:86:73: b6:46:53:58:c8:89:05:bd:83:11:b8:73:3f:aa:07: 8d:f4:42:4d:e7:40:9d:1c:37 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption 26:48:2c:16:c2:58:fa:e8:16:74:0c:aa:aa:5f:54:3f:f2:d7: c9:78:60:5e:5e:6e:37:63:22:77:36:7e:b2:17:c4:34:b9:f5: 08:85:fc:c9:01:38:ff:4d:be:f2:16:42:43:e7:bb:5a:46:fb: c1:c6:11:1f:f1:4a:b0:28:46:c9:c3:c4:42:7d:bc:fa:ab:59: 6e:d5:b7:51:88:11:e3:a4:85:19:6b:82:4c:a4:0c:12:ad:e9: a4:ae:3f:f1:c3:49:65:9a:8c:c5:c8:3e:25:b7:94:99:bb:92: 32:71:07:f0:86:5e:ed:50:27:a6:0d:a6:23:f9:bb:cb:a6:07: 14:42 SHA1 Fingerprint=62:7F:8D:78:27:65:63:99:D2:7D:7F:90:44:C9:FE:B3:F3:3E:FA:9A -----BEGIN CERTIFICATE----- MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG 9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 903804111 (0x35def4cf) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Equifax, OU=Equifax Secure Certificate Authority Validity Not Before: Aug 22 16:41:51 1998 GMT Not After : Aug 22 16:41:51 2018 GMT Subject: C=US, O=Equifax, OU=Equifax Secure Certificate Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:c1:5d:b1:58:67:08:62:ee:a0:9a:2d:1f:08:6d: 91:14:68:98:0a:1e:fe:da:04:6f:13:84:62:21:c3: d1:7c:ce:9f:05:e0:b8:01:f0:4e:34:ec:e2:8a:95: 04:64:ac:f1:6b:53:5f:05:b3:cb:67:80:bf:42:02: 8e:fe:dd:01:09:ec:e1:00:14:4f:fc:fb:f0:0c:dd: 43:ba:5b:2b:e1:1f:80:70:99:15:57:93:16:f1:0f: 97:6a:b7:c2:68:23:1c:cc:4d:59:30:ac:51:1e:3b: af:2b:d6:ee:63:45:7b:c5:d9:5f:50:d2:e3:50:0f: 3a:88:e7:bf:14:fd:e0:c7:b9 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 CRL Distribution Points: Full Name: DirName: C = US, O = Equifax, OU = Equifax Secure Certificate Authority, CN = CRL1 X509v3 Private Key Usage Period: Not After: Aug 22 16:41:51 2018 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:4F:33:98:90:9F:D4 X509v3 Subject Key Identifier: 48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:4F:33:98:90:9F:D4 X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0...V3.0c.... Signature Algorithm: sha1WithRSAEncryption 58:ce:29:ea:fc:f7:de:b5:ce:02:b9:17:b5:85:d1:b9:e3:e0: 95:cc:25:31:0d:00:a6:92:6e:7f:b6:92:63:9e:50:95:d1:9a: 6f:e4:11:de:63:85:6e:98:ee:a8:ff:5a:c8:d3:55:b2:66:71: 57:de:c0:21:eb:3d:2a:a7:23:49:01:04:86:42:7b:fc:ee:7f: a2:16:52:b5:67:67:d3:40:db:3b:26:58:b2:28:77:3d:ae:14: 77:61:d6:fa:2a:66:27:a0:0d:fa:a7:73:5c:ea:70:f1:94:21: 65:44:5f:fa:fc:ef:29:68:a9:a2:87:79:ef:79:ef:4f:ac:07: 77:38 SHA1 Fingerprint=D2:32:09:AD:23:D3:14:23:21:74:E4:0D:7F:9D:62:13:97:86:63:3A -----BEGIN CERTIFICATE----- MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1 MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y 7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh 1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4 -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 913315222 (0x36701596) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Digital Signature Trust Co., OU=DSTCA E1 Validity Not Before: Dec 10 18:10:23 1998 GMT Not After : Dec 10 18:40:23 2018 GMT Subject: C=US, O=Digital Signature Trust Co., OU=DSTCA E1 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:a0:6c:81:a9:cf:34:1e:24:dd:fe:86:28:cc:de: 83:2f:f9:5e:d4:42:d2:e8:74:60:66:13:98:06:1c: a9:51:12:69:6f:31:55:b9:49:72:00:08:7e:d3:a5: 62:44:37:24:99:8f:d9:83:48:8f:99:6d:95:13:bb: 43:3b:2e:49:4e:88:37:c1:bb:58:7f:fe:e1:bd:f8: bb:61:cd:f3:47:c0:99:a6:f1:f3:91:e8:78:7c:00: cb:61:c9:44:27:71:69:55:4a:7e:49:4d:ed:a2:a3: be:02:4c:00:ca:02:a8:ee:01:02:31:64:0f:52:2d: 13:74:76:36:b5:7a:b4:2d:71 Exponent: 3 (0x3) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 CRL Distribution Points: Full Name: DirName: C = US, O = Digital Signature Trust Co., OU = DSTCA E1, CN = CRL1 X509v3 Private Key Usage Period: Not Before: Dec 10 18:10:23 1998 GMT, Not After: Dec 10 18:10:23 2018 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:6A:79:7E:91:69:46:18:13:0A:02:77:A5:59:5B:60:98:25:0E:A2:F8 X509v3 Subject Key Identifier: 6A:79:7E:91:69:46:18:13:0A:02:77:A5:59:5B:60:98:25:0E:A2:F8 X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0 ..V4.0.... Signature Algorithm: sha1WithRSAEncryption 22:12:d8:7a:1d:dc:81:06:b6:09:65:b2:87:c8:1f:5e:b4:2f: e9:c4:1e:f2:3c:c1:bb:04:90:11:4a:83:4e:7e:93:b9:4d:42: c7:92:26:a0:5c:34:9a:38:72:f8:fd:6b:16:3e:20:ee:82:8b: 31:2a:93:36:85:23:88:8a:3c:03:68:d3:c9:09:0f:4d:fc:6c: a4:da:28:72:93:0e:89:80:b0:7d:fe:80:6f:65:6d:18:33:97: 8b:c2:6b:89:ee:60:3d:c8:9b:ef:7f:2b:32:62:73:93:cb:3c: e3:7b:e2:76:78:45:bc:a1:93:04:bb:86:9f:3a:5b:43:7a:c3: 8a:65 SHA1 Fingerprint=81:96:8B:3A:EF:1C:DC:70:F5:FA:32:69:C2:92:A3:63:5B:D1:23:D3 -----BEGIN CERTIFICATE----- MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL EwhEU1RDQSBFMTAeFw05ODEyMTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJ BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x ETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQCg bIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJENySZ j9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlV Sn5JTe2io74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCG SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI RFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMTAxODEw MjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFGp5 fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i +DAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG SIb3DQEBBQUAA4GBACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lN QseSJqBcNJo4cvj9axY+IO6CizEqkzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+ gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4RbyhkwS7hp86W0N6w4pl -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 913232846 (0x366ed3ce) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Digital Signature Trust Co., OU=DSTCA E2 Validity Not Before: Dec 9 19:17:26 1998 GMT Not After : Dec 9 19:47:26 2018 GMT Subject: C=US, O=Digital Signature Trust Co., OU=DSTCA E2 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:bf:93:8f:17:92:ef:33:13:18:eb:10:7f:4e:16: bf:ff:06:8f:2a:85:bc:5e:f9:24:a6:24:88:b6:03: b7:c1:c3:5f:03:5b:d1:6f:ae:7e:42:ea:66:23:b8: 63:83:56:fb:28:2d:e1:38:8b:b4:ee:a8:01:e1:ce: 1c:b6:88:2a:22:46:85:fb:9f:a7:70:a9:47:14:3f: ce:de:65:f0:a8:71:f7:4f:26:6c:8c:bc:c6:b5:ef: de:49:27:ff:48:2a:7d:e8:4d:03:cc:c7:b2:52:c6: 17:31:13:3b:b5:4d:db:c8:c4:f6:c3:0f:24:2a:da: 0c:9d:e7:91:5b:80:cd:94:9d Exponent: 3 (0x3) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 CRL Distribution Points: Full Name: DirName: C = US, O = Digital Signature Trust Co., OU = DSTCA E2, CN = CRL1 X509v3 Private Key Usage Period: Not Before: Dec 9 19:17:26 1998 GMT, Not After: Dec 9 19:17:26 2018 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:1E:82:4D:28:65:80:3C:C9:41:6E:AC:35:2E:5A:CB:DE:EE:F8:39:5B X509v3 Subject Key Identifier: 1E:82:4D:28:65:80:3C:C9:41:6E:AC:35:2E:5A:CB:DE:EE:F8:39:5B X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0 ..V4.0.... Signature Algorithm: sha1WithRSAEncryption 47:8d:83:ad:62:f2:db:b0:9e:45:22:05:b9:a2:d6:03:0e:38: 72:e7:9e:fc:7b:e6:93:b6:9a:a5:a2:94:c8:34:1d:91:d1:c5: d7:f4:0a:25:0f:3d:78:81:9e:0f:b1:67:c4:90:4c:63:dd:5e: a7:e2:ba:9f:f5:f7:4d:a5:31:7b:9c:29:2d:4c:fe:64:3e:ec: b6:53:fe:ea:9b:ed:82:db:74:75:4b:07:79:6e:1e:d8:19:83: 73:de:f5:3e:d0:b5:de:e7:4b:68:7d:43:2e:2a:20:e1:7e:a0: 78:44:9e:08:f5:98:f9:c7:7f:1b:1b:d6:06:20:02:58:a1:c3: a2:03 SHA1 Fingerprint=AB:48:F3:33:DB:04:AB:B9:C0:72:DA:5B:0C:C1:D0:57:F0:36:9B:46 -----BEGIN CERTIFICATE----- MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL EwhEU1RDQSBFMjAeFw05ODEyMDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJ BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x ETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQC/ k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGODVvso LeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3o TQPMx7JSxhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCG SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI RFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxOTE3 MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFB6C TShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5 WzAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG SIb3DQEBBQUAA4GBAEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHR xdf0CiUPPXiBng+xZ8SQTGPdXqfiup/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVL B3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1mPnHfxsb1gYgAlihw6ID -----END CERTIFICATE----- Certificate: Data: Version: 1 (0x0) Serial Number: 70:ba:e4:1d:10:d9:29:34:b6:38:ca:7b:03:cc:ba:bf Signature Algorithm: md2WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority Validity Not Before: Jan 29 00:00:00 1996 GMT Not After : Aug 1 23:59:59 2028 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:c9:5c:59:9e:f2:1b:8a:01:14:b4:10:df:04:40: db:e3:57:af:6a:45:40:8f:84:0c:0b:d1:33:d9:d9: 11:cf:ee:02:58:1f:25:f7:2a:a8:44:05:aa:ec:03: 1f:78:7f:9e:93:b9:9a:00:aa:23:7d:d6:ac:85:a2: 63:45:c7:72:27:cc:f4:4c:c6:75:71:d2:39:ef:4f: 42:f0:75:df:0a:90:c6:8e:20:6f:98:0f:f8:ac:23: 5f:70:29:36:a4:c9:86:e7:b1:9a:20:cb:53:a5:85: e7:3d:be:7d:9a:fe:24:45:33:dc:76:15:ed:0f:a2: 71:64:4c:65:2e:81:68:45:a7 Exponent: 65537 (0x10001) Signature Algorithm: md2WithRSAEncryption bb:4c:12:2b:cf:2c:26:00:4f:14:13:dd:a6:fb:fc:0a:11:84: 8c:f3:28:1c:67:92:2f:7c:b6:c5:fa:df:f0:e8:95:bc:1d:8f: 6c:2c:a8:51:cc:73:d8:a4:c0:53:f0:4e:d6:26:c0:76:01:57: 81:92:5e:21:f1:d1:b1:ff:e7:d0:21:58:cd:69:17:e3:44:1c: 9c:19:44:39:89:5c:dc:9c:00:0f:56:8d:02:99:ed:a2:90:45: 4c:e4:bb:10:a4:3d:f0:32:03:0e:f1:ce:f8:e8:c9:51:8c:e6: 62:9f:e6:9f:c0:7d:b7:72:9c:c9:36:3a:6b:9f:4e:a8:ff:64: 0d:64 SHA1 Fingerprint=74:2C:31:92:E6:07:E4:24:EB:45:49:54:2B:E1:BB:C5:3E:61:74:E2 -----BEGIN CERTIFICATE----- MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k -----END CERTIFICATE----- Certificate: Data: Version: 1 (0x0) Serial Number: 4c:c7:ea:aa:98:3e:71:d3:93:10:f8:3d:3a:89:91:92 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Validity Not Before: May 18 00:00:00 1998 GMT Not After : Aug 1 23:59:59 2028 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:aa:d0:ba:be:16:2d:b8:83:d4:ca:d2:0f:bc:76: 31:ca:94:d8:1d:93:8c:56:02:bc:d9:6f:1a:6f:52: 36:6e:75:56:0a:55:d3:df:43:87:21:11:65:8a:7e: 8f:bd:21:de:6b:32:3f:1b:84:34:95:05:9d:41:35: eb:92:eb:96:dd:aa:59:3f:01:53:6d:99:4f:ed:e5: e2:2a:5a:90:c1:b9:c4:a6:15:cf:c8:45:eb:a6:5d: 8e:9c:3e:f0:64:24:76:a5:cd:ab:1a:6f:b6:d8:7b: 51:61:6e:a6:7f:87:c8:e2:b7:e5:34:dc:41:88:ea: 09:40:be:73:92:3d:6b:e7:75 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption a9:4f:c3:0d:c7:67:be:2c:cb:d9:a8:cd:2d:75:e7:7e:15:9e: 3b:72:eb:7e:eb:5c:2d:09:87:d6:6b:6d:60:7c:e5:ae:c5:90: 23:0c:5c:4a:d0:af:b1:5d:f3:c7:b6:0a:db:e0:15:93:0d:dd: 03:bc:c7:76:8a:b5:dd:4f:c3:9b:13:75:b8:01:c0:e6:c9:5b: 6b:a5:b8:89:dc:ac:a4:dd:72:ed:4e:a1:f7:4f:bc:06:d3:ea: c8:64:74:7b:c2:95:41:9c:65:73:58:f1:90:9a:3c:6a:b1:98: c9:c4:87:bc:cf:45:6d:45:e2:6e:22:3f:fe:bc:0f:31:5c:e8: f2:d9 SHA1 Fingerprint=27:3E:E1:24:57:FD:C4:F9:0C:55:E8:2B:56:16:7F:62:F5:32:E5:47 -----BEGIN CERTIFICATE----- MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68 DzFc6PLZ -----END CERTIFICATE----- Certificate: Data: Version: 1 (0x0) Serial Number: b9:2f:60:cc:88:9f:a1:7a:46:09:b8:5b:70:6c:8a:af Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 2 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Validity Not Before: May 18 00:00:00 1998 GMT Not After : Aug 1 23:59:59 2028 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 2 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:a7:88:01:21:74:2c:e7:1a:03:f0:98:e1:97:3c: 0f:21:08:f1:9c:db:97:e9:9a:fc:c2:04:06:13:be: 5f:52:c8:cc:1e:2c:12:56:2c:b8:01:69:2c:cc:99: 1f:ad:b0:96:ae:79:04:f2:13:39:c1:7b:98:ba:08: 2c:e8:c2:84:13:2c:aa:69:e9:09:f4:c7:a9:02:a4: 42:c2:23:4f:4a:d8:f0:0e:a2:fb:31:6c:c9:e6:6f: 99:27:07:f5:e6:f4:4c:78:9e:6d:eb:46:86:fa:b9: 86:c9:54:f2:b2:c4:af:d4:46:1c:5a:c9:15:30:ff: 0d:6c:f5:2d:0e:6d:ce:7f:77 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 72:2e:f9:7f:d1:f1:71:fb:c4:9e:f6:c5:5e:51:8a:40:98:b8: 68:f8:9b:1c:83:d8:e2:9d:bd:ff:ed:a1:e6:66:ea:2f:09:f4: ca:d7:ea:a5:2b:95:f6:24:60:86:4d:44:2e:83:a5:c4:2d:a0: d3:ae:78:69:6f:72:da:6c:ae:08:f0:63:92:37:e6:bb:c4:30: 17:ad:77:cc:49:35:aa:cf:d8:8f:d1:be:b7:18:96:47:73:6a: 54:22:34:64:2d:b6:16:9b:59:5b:b4:51:59:3a:b3:0b:14:f4: 12:df:67:a0:f4:ad:32:64:5e:b1:46:72:27:8c:12:7b:c5:44: b4:ae SHA1 Fingerprint=B3:EA:C4:47:76:C9:C8:1C:EA:F2:9D:95:B6:CC:A0:08:1B:67:EC:9D -----BEGIN CERTIFICATE----- MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn jBJ7xUS0rg== -----END CERTIFICATE----- Certificate: Data: Version: 1 (0x0) Serial Number: 7d:d9:fe:07:cf:a8:1e:b7:10:79:67:fb:a7:89:34:c6 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Validity Not Before: May 18 00:00:00 1998 GMT Not After : Aug 1 23:59:59 2028 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:cc:5e:d1:11:5d:5c:69:d0:ab:d3:b9:6a:4c:99: 1f:59:98:30:8e:16:85:20:46:6d:47:3f:d4:85:20: 84:e1:6d:b3:f8:a4:ed:0c:f1:17:0f:3b:f9:a7:f9: 25:d7:c1:cf:84:63:f2:7c:63:cf:a2:47:f2:c6:5b: 33:8e:64:40:04:68:c1:80:b9:64:1c:45:77:c7:d8: 6e:f5:95:29:3c:50:e8:34:d7:78:1f:a8:ba:6d:43: 91:95:8f:45:57:5e:7e:c5:fb:ca:a4:04:eb:ea:97: 37:54:30:6f:bb:01:47:32:33:cd:dc:57:9b:64:69: 61:f8:9b:1d:1c:89:4f:5c:67 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 51:4d:cd:be:5c:cb:98:19:9c:15:b2:01:39:78:2e:4d:0f:67: 70:70:99:c6:10:5a:94:a4:53:4d:54:6d:2b:af:0d:5d:40:8b: 64:d3:d7:ee:de:56:61:92:5f:a6:c4:1d:10:61:36:d3:2c:27: 3c:e8:29:09:b9:11:64:74:cc:b5:73:9f:1c:48:a9:bc:61:01: ee:e2:17:a6:0c:e3:40:08:3b:0e:e7:eb:44:73:2a:9a:f1:69: 92:ef:71:14:c3:39:ac:71:a7:91:09:6f:e4:71:06:b3:ba:59: 57:26:79:00:f6:f8:0d:a2:33:30:28:d4:aa:58:a0:9d:9d:69: 91:fd SHA1 Fingerprint=85:37:1C:A6:E5:50:14:3D:CE:28:03:47:1B:DE:3A:09:E8:F8:77:0F -----BEGIN CERTIFICATE----- MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4 pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0 13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY oJ2daZH9 -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 04:00:00:00:00:01:15:4b:5a:c3:94 Signature Algorithm: sha1WithRSAEncryption Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA Validity Not Before: Sep 1 12:00:00 1998 GMT Not After : Jan 28 12:00:00 2028 GMT Subject: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:da:0e:e6:99:8d:ce:a3:e3:4f:8a:7e:fb:f1:8b: 83:25:6b:ea:48:1f:f1:2a:b0:b9:95:11:04:bd:f0: 63:d1:e2:67:66:cf:1c:dd:cf:1b:48:2b:ee:8d:89: 8e:9a:af:29:80:65:ab:e9:c7:2d:12:cb:ab:1c:4c: 70:07:a1:3d:0a:30:cd:15:8d:4f:f8:dd:d4:8c:50: 15:1c:ef:50:ee:c4:2e:f7:fc:e9:52:f2:91:7d:e0: 6d:d5:35:30:8e:5e:43:73:f2:41:e9:d5:6a:e3:b2: 89:3a:56:39:38:6f:06:3c:88:69:5b:2a:4d:c5:a7: 54:b8:6c:89:cc:9b:f9:3c:ca:e5:fd:89:f5:12:3c: 92:78:96:d6:dc:74:6e:93:44:61:d1:8d:c7:46:b2: 75:0e:86:e8:19:8a:d5:6d:6c:d5:78:16:95:a2:e9: c8:0a:38:eb:f2:24:13:4f:73:54:93:13:85:3a:1b: bc:1e:34:b5:8b:05:8c:b9:77:8b:b1:db:1f:20:91: ab:09:53:6e:90:ce:7b:37:74:b9:70:47:91:22:51: 63:16:79:ae:b1:ae:41:26:08:c8:19:2b:d1:46:aa: 48:d6:64:2a:d7:83:34:ff:2c:2a:c1:6c:19:43:4a: 07:85:e7:d3:7c:f6:21:68:ef:ea:f2:52:9f:7f:93: 90:cf Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B Signature Algorithm: sha1WithRSAEncryption d6:73:e7:7c:4f:76:d0:8d:bf:ec:ba:a2:be:34:c5:28:32:b5: 7c:fc:6c:9c:2c:2b:bd:09:9e:53:bf:6b:5e:aa:11:48:b6:e5: 08:a3:b3:ca:3d:61:4d:d3:46:09:b3:3e:c3:a0:e3:63:55:1b: f2:ba:ef:ad:39:e1:43:b9:38:a3:e6:2f:8a:26:3b:ef:a0:50: 56:f9:c6:0a:fd:38:cd:c4:0b:70:51:94:97:98:04:df:c3:5f: 94:d5:15:c9:14:41:9c:c4:5d:75:64:15:0d:ff:55:30:ec:86: 8f:ff:0d:ef:2c:b9:63:46:f6:aa:fc:df:bc:69:fd:2e:12:48: 64:9a:e0:95:f0:a6:ef:29:8f:01:b1:15:b5:0c:1d:a5:fe:69: 2c:69:24:78:1e:b3:a7:1c:71:62:ee:ca:c8:97:ac:17:5d:8a: c2:f8:47:86:6e:2a:c4:56:31:95:d0:67:89:85:2b:f9:6c:a6: 5d:46:9d:0c:aa:82:e4:99:51:dd:70:b7:db:56:3d:61:e4:6a: e1:5c:d6:f6:fe:3d:de:41:cc:07:ae:63:52:bf:53:53:f4:2b: e9:c7:fd:b6:f7:82:5f:85:d2:41:18:db:81:b3:04:1c:c5:1f: a4:80:6f:15:20:c9:de:0c:88:0a:1d:d6:66:55:e2:fc:48:c9: 29:26:69:e0 SHA1 Fingerprint=B1:BC:96:8B:D4:F4:9D:62:2A:A8:9A:81:F2:15:01:52:A4:1D:82:9C -----BEGIN CERTIFICATE----- MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp 1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE 38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 04:00:00:00:00:01:0f:86:26:e6:0d Signature Algorithm: sha1WithRSAEncryption Issuer: OU=GlobalSign Root CA - R2, O=GlobalSign, CN=GlobalSign Validity Not Before: Dec 15 08:00:00 2006 GMT Not After : Dec 15 08:00:00 2021 GMT Subject: OU=GlobalSign Root CA - R2, O=GlobalSign, CN=GlobalSign Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:a6:cf:24:0e:be:2e:6f:28:99:45:42:c4:ab:3e: 21:54:9b:0b:d3:7f:84:70:fa:12:b3:cb:bf:87:5f: c6:7f:86:d3:b2:30:5c:d6:fd:ad:f1:7b:dc:e5:f8: 60:96:09:92:10:f5:d0:53:de:fb:7b:7e:73:88:ac: 52:88:7b:4a:a6:ca:49:a6:5e:a8:a7:8c:5a:11:bc: 7a:82:eb:be:8c:e9:b3:ac:96:25:07:97:4a:99:2a: 07:2f:b4:1e:77:bf:8a:0f:b5:02:7c:1b:96:b8:c5: b9:3a:2c:bc:d6:12:b9:eb:59:7d:e2:d0:06:86:5f: 5e:49:6a:b5:39:5e:88:34:ec:bc:78:0c:08:98:84: 6c:a8:cd:4b:b4:a0:7d:0c:79:4d:f0:b8:2d:cb:21: ca:d5:6c:5b:7d:e1:a0:29:84:a1:f9:d3:94:49:cb: 24:62:91:20:bc:dd:0b:d5:d9:cc:f9:ea:27:0a:2b: 73:91:c6:9d:1b:ac:c8:cb:e8:e0:a0:f4:2f:90:8b: 4d:fb:b0:36:1b:f6:19:7a:85:e0:6d:f2:61:13:88: 5c:9f:e0:93:0a:51:97:8a:5a:ce:af:ab:d5:f7:aa: 09:aa:60:bd:dc:d9:5f:df:72:a9:60:13:5e:00:01: c9:4a:fa:3f:a4:ea:07:03:21:02:8e:82:ca:03:c2: 9b:8f Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 9B:E2:07:57:67:1C:1E:C0:6A:06:DE:59:B4:9A:2D:DF:DC:19:86:2E X509v3 CRL Distribution Points: Full Name: URI:http://crl.globalsign.net/root-r2.crl X509v3 Authority Key Identifier: keyid:9B:E2:07:57:67:1C:1E:C0:6A:06:DE:59:B4:9A:2D:DF:DC:19:86:2E Signature Algorithm: sha1WithRSAEncryption 99:81:53:87:1c:68:97:86:91:ec:e0:4a:b8:44:0b:ab:81:ac: 27:4f:d6:c1:b8:1c:43:78:b3:0c:9a:fc:ea:2c:3c:6e:61:1b: 4d:4b:29:f5:9f:05:1d:26:c1:b8:e9:83:00:62:45:b6:a9:08: 93:b9:a9:33:4b:18:9a:c2:f8:87:88:4e:db:dd:71:34:1a:c1: 54:da:46:3f:e0:d3:2a:ab:6d:54:22:f5:3a:62:cd:20:6f:ba: 29:89:d7:dd:91:ee:d3:5c:a2:3e:a1:5b:41:f5:df:e5:64:43: 2d:e9:d5:39:ab:d2:a2:df:b7:8b:d0:c0:80:19:1c:45:c0:2d: 8c:e8:f8:2d:a4:74:56:49:c5:05:b5:4f:15:de:6e:44:78:39: 87:a8:7e:bb:f3:79:18:91:bb:f4:6f:9d:c1:f0:8c:35:8c:5d: 01:fb:c3:6d:b9:ef:44:6d:79:46:31:7e:0a:fe:a9:82:c1:ff: ef:ab:6e:20:c4:50:c9:5f:9d:4d:9b:17:8c:0c:e5:01:c9:a0: 41:6a:73:53:fa:a5:50:b4:6e:25:0f:fb:4c:18:f4:fd:52:d9: 8e:69:b1:e8:11:0f:de:88:d8:fb:1d:49:f7:aa:de:95:cf:20: 78:c2:60:12:db:25:40:8c:6a:fc:7e:42:38:40:64:12:f7:9e: 81:e1:93:2e SHA1 Fingerprint=75:E0:AB:B6:13:85:12:27:1C:04:F8:5F:DD:DE:38:E4:B7:24:2E:FE -----BEGIN CERTIFICATE----- MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG 3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO 291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== -----END CERTIFICATE----- Certificate: Data: Version: 1 (0x0) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 1 Policy Validation Authority, CN=http://www.valicert.com//emailAddress=info@valicert.com Validity Not Before: Jun 25 22:23:48 1999 GMT Not After : Jun 25 22:23:48 2019 GMT Subject: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 1 Policy Validation Authority, CN=http://www.valicert.com//emailAddress=info@valicert.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:d8:59:82:7a:89:b8:96:ba:a6:2f:68:6f:58:2e: a7:54:1c:06:6e:f4:ea:8d:48:bc:31:94:17:f0:f3: 4e:bc:b2:b8:35:92:76:b0:d0:a5:a5:01:d7:00:03: 12:22:19:08:f8:ff:11:23:9b:ce:07:f5:bf:69:1a: 26:fe:4e:e9:d1:7f:9d:2c:40:1d:59:68:6e:a6:f8: 58:b0:9d:1a:8f:d3:3f:f1:dc:19:06:81:a8:0e:e0: 3a:dd:c8:53:45:09:06:e6:0f:70:c3:fa:40:a6:0e: e2:56:05:0f:18:4d:fc:20:82:d1:73:55:74:8d:76: 72:a0:1d:9d:1d:c0:dd:3f:71 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 50:68:3d:49:f4:2c:1c:06:94:df:95:60:7f:96:7b:17:fe:4f: 71:ad:64:c8:dd:77:d2:ef:59:55:e8:3f:e8:8e:05:2a:21:f2: 07:d2:b5:a7:52:fe:9c:b1:b6:e2:5b:77:17:40:ea:72:d6:23: cb:28:81:32:c3:00:79:18:ec:59:17:89:c9:c6:6a:1e:71:c9: fd:b7:74:a5:25:45:69:c5:48:ab:19:e1:45:8a:25:6b:19:ee: e5:bb:12:f5:7f:f7:a6:8d:51:c3:f0:9d:74:b7:a9:3e:a0:a5: ff:b6:49:03:13:da:22:cc:ed:71:82:2b:99:cf:3a:b7:f5:2d: 72:c8 SHA1 Fingerprint=E5:DF:74:3C:B6:01:C4:9B:98:43:DC:AB:8C:E8:6A:81:10:9F:E4:8E -----BEGIN CERTIFICATE----- MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG 9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+ TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0 LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI -----END CERTIFICATE----- Certificate: Data: Version: 1 (0x0) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 2 Policy Validation Authority, CN=http://www.valicert.com//emailAddress=info@valicert.com Validity Not Before: Jun 26 00:19:54 1999 GMT Not After : Jun 26 00:19:54 2019 GMT Subject: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 2 Policy Validation Authority, CN=http://www.valicert.com//emailAddress=info@valicert.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:ce:3a:71:ca:e5:ab:c8:59:92:55:d7:ab:d8:74: 0e:f9:ee:d9:f6:55:47:59:65:47:0e:05:55:dc:eb: 98:36:3c:5c:53:5d:d3:30:cf:38:ec:bd:41:89:ed: 25:42:09:24:6b:0a:5e:b3:7c:dd:52:2d:4c:e6:d4: d6:7d:5a:59:a9:65:d4:49:13:2d:24:4d:1c:50:6f: b5:c1:85:54:3b:fe:71:e4:d3:5c:42:f9:80:e0:91: 1a:0a:5b:39:36:67:f3:3f:55:7c:1b:3f:b4:5f:64: 73:34:e3:b4:12:bf:87:64:f8:da:12:ff:37:27:c1: b3:43:bb:ef:7b:6e:2e:69:f7 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 3b:7f:50:6f:6f:50:94:99:49:62:38:38:1f:4b:f8:a5:c8:3e: a7:82:81:f6:2b:c7:e8:c5:ce:e8:3a:10:82:cb:18:00:8e:4d: bd:a8:58:7f:a1:79:00:b5:bb:e9:8d:af:41:d9:0f:34:ee:21: 81:19:a0:32:49:28:f4:c4:8e:56:d5:52:33:fd:50:d5:7e:99: 6c:03:e4:c9:4c:fc:cb:6c:ab:66:b3:4a:21:8c:e5:b5:0c:32: 3e:10:b2:cc:6c:a1:dc:9a:98:4c:02:5b:f3:ce:b9:9e:a5:72: 0e:4a:b7:3f:3c:e6:16:68:f8:be:ed:74:4c:bc:5b:d5:62:1f: 43:dd SHA1 Fingerprint=31:7A:2A:D0:7F:2B:33:5E:F5:A1:C3:4E:4B:57:E8:B7:D8:F1:FC:A6 -----BEGIN CERTIFICATE----- MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG 9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9 WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd -----END CERTIFICATE----- Certificate: Data: Version: 1 (0x0) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 3 Policy Validation Authority, CN=http://www.valicert.com//emailAddress=info@valicert.com Validity Not Before: Jun 26 00:22:33 1999 GMT Not After : Jun 26 00:22:33 2019 GMT Subject: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 3 Policy Validation Authority, CN=http://www.valicert.com//emailAddress=info@valicert.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:e3:98:51:96:1c:e8:d5:b1:06:81:6a:57:c3:72: 75:93:ab:cf:9e:a6:fc:f3:16:52:d6:2d:4d:9f:35: 44:a8:2e:04:4d:07:49:8a:38:29:f5:77:37:e7:b7: ab:5d:df:36:71:14:99:8f:dc:c2:92:f1:e7:60:92: 97:ec:d8:48:dc:bf:c1:02:20:c6:24:a4:28:4c:30: 5a:76:6d:b1:5c:f3:dd:de:9e:10:71:a1:88:c7:5b: 9b:41:6d:ca:b0:b8:8e:15:ee:ad:33:2b:cf:47:04: 5c:75:71:0a:98:24:98:29:a7:49:59:a5:dd:f8:b7: 43:62:61:f3:d3:e2:d0:55:3f Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 56:bb:02:58:84:67:08:2c:df:1f:db:7b:49:33:f5:d3:67:9d: f4:b4:0a:10:b3:c9:c5:2c:e2:92:6a:71:78:27:f2:70:83:42: d3:3e:cf:a9:54:f4:f1:d8:92:16:8c:d1:04:cb:4b:ab:c9:9f: 45:ae:3c:8a:a9:b0:71:33:5d:c8:c5:57:df:af:a8:35:b3:7f: 89:87:e9:e8:25:92:b8:7f:85:7a:ae:d6:bc:1e:37:58:2a:67: c9:91:cf:2a:81:3e:ed:c6:39:df:c0:3e:19:9c:19:cc:13:4d: 82:41:b5:8c:de:e0:3d:60:08:20:0f:45:7e:6b:a2:7f:a3:8c: 15:ee SHA1 Fingerprint=69:BD:8C:F4:9C:D3:00:FB:59:2E:17:93:CA:55:6A:F3:EC:AA:35:FB -----BEGIN CERTIFICATE----- MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG 9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs 2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu -----END CERTIFICATE----- Certificate: Data: Version: 1 (0x0) Serial Number: 8b:5b:75:56:84:54:85:0b:00:cf:af:38:48:ce:b1:a4 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 1 Public Primary Certification Authority - G3 Validity Not Before: Oct 1 00:00:00 1999 GMT Not After : Jul 16 23:59:59 2036 GMT Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 1 Public Primary Certification Authority - G3 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:dd:84:d4:b9:b4:f9:a7:d8:f3:04:78:9c:de:3d: dc:6c:13:16:d9:7a:dd:24:51:66:c0:c7:26:59:0d: ac:06:08:c2:94:d1:33:1f:f0:83:35:1f:6e:1b:c8: de:aa:6e:15:4e:54:27:ef:c4:6d:1a:ec:0b:e3:0e: f0:44:a5:57:c7:40:58:1e:a3:47:1f:71:ec:60:f6: 6d:94:c8:18:39:ed:fe:42:18:56:df:e4:4c:49:10: 78:4e:01:76:35:63:12:36:dd:66:bc:01:04:36:a3: 55:68:d5:a2:36:09:ac:ab:21:26:54:06:ad:3f:ca: 14:e0:ac:ca:ad:06:1d:95:e2:f8:9d:f1:e0:60:ff: c2:7f:75:2b:4c:cc:da:fe:87:99:21:ea:ba:fe:3e: 54:d7:d2:59:78:db:3c:6e:cf:a0:13:00:1a:b8:27: a1:e4:be:67:96:ca:a0:c5:b3:9c:dd:c9:75:9e:eb: 30:9a:5f:a3:cd:d9:ae:78:19:3f:23:e9:5c:db:29: bd:ad:55:c8:1b:54:8c:63:f6:e8:a6:ea:c7:37:12: 5c:a3:29:1e:02:d9:db:1f:3b:b4:d7:0f:56:47:81: 15:04:4a:af:83:27:d1:c5:58:88:c1:dd:f6:aa:a7: a3:18:da:68:aa:6d:11:51:e1:bf:65:6b:9f:96:76: d1:3d Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption ab:66:8d:d7:b3:ba:c7:9a:b6:e6:55:d0:05:f1:9f:31:8d:5a: aa:d9:aa:46:26:0f:71:ed:a5:ad:53:56:62:01:47:2a:44:e9: fe:3f:74:0b:13:9b:b9:f4:4d:1b:b2:d1:5f:b2:b6:d2:88:5c: b3:9f:cd:cb:d4:a7:d9:60:95:84:3a:f8:c1:37:1d:61:ca:e7: b0:c5:e5:91:da:54:a6:ac:31:81:ae:97:de:cd:08:ac:b8:c0: 97:80:7f:6e:72:a4:e7:69:13:95:65:1f:c4:93:3c:fd:79:8f: 04:d4:3e:4f:ea:f7:9e:ce:cd:67:7c:4f:65:02:ff:91:85:54: 73:c7:ff:36:f7:86:2d:ec:d0:5e:4f:ff:11:9f:72:06:d6:b8: 1a:f1:4c:0d:26:65:e2:44:80:1e:c7:9f:e3:dd:e8:0a:da:ec: a5:20:80:69:68:a1:4f:7e:e1:6b:cf:07:41:fa:83:8e:bc:38: dd:b0:2e:11:b1:6b:b2:42:cc:9a:bc:f9:48:22:79:4a:19:0f: b2:1c:3e:20:74:d9:6a:c3:be:f2:28:78:13:56:79:4f:6d:50: ea:1b:b0:b5:57:b1:37:66:58:23:f3:dc:0f:df:0a:87:c4:ef: 86:05:d5:38:14:60:99:a3:4b:de:06:96:71:2c:f2:db:b6:1f: a4:ef:3f:ee SHA1 Fingerprint=20:42:85:DC:F7:EB:76:41:95:57:8E:13:6B:D4:B7:D1:E9:8E:46:A5 -----BEGIN CERTIFICATE----- MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4 nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO 8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2 6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4 wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3 ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4 E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g== -----END CERTIFICATE----- Certificate: Data: Version: 1 (0x0) Serial Number: 61:70:cb:49:8c:5f:98:45:29:e7:b0:a6:d9:50:5b:7a Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 2 Public Primary Certification Authority - G3 Validity Not Before: Oct 1 00:00:00 1999 GMT Not After : Jul 16 23:59:59 2036 GMT Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 2 Public Primary Certification Authority - G3 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:af:0a:0d:c2:d5:2c:db:67:b9:2d:e5:94:27:dd: a5:be:e0:b0:4d:8f:b3:61:56:3c:d6:7c:c3:f4:cd: 3e:86:cb:a2:88:e2:e1:d8:a4:69:c5:b5:e2:bf:c1: a6:47:50:5e:46:39:8b:d5:96:ba:b5:6f:14:bf:10: ce:27:13:9e:05:47:9b:31:7a:13:d8:1f:d9:d3:02: 37:8b:ad:2c:47:f0:8e:81:06:a7:0d:30:0c:eb:f7: 3c:0f:20:1d:dc:72:46:ee:a5:02:c8:5b:c3:c9:56: 69:4c:c5:18:c1:91:7b:0b:d5:13:00:9b:bc:ef:c3: 48:3e:46:60:20:85:2a:d5:90:b6:cd:8b:a0:cc:32: dd:b7:fd:40:55:b2:50:1c:56:ae:cc:8d:77:4d:c7: 20:4d:a7:31:76:ef:68:92:8a:90:1e:08:81:56:b2: ad:69:a3:52:d0:cb:1c:c4:23:3d:1f:99:fe:4c:e8: 16:63:8e:c6:08:8e:f6:31:f6:d2:fa:e5:76:dd:b5: 1c:92:a3:49:cd:cd:01:cd:68:cd:a9:69:ba:a3:eb: 1d:0d:9c:a4:20:a6:c1:a0:c5:d1:46:4c:17:6d:d2: ac:66:3f:96:8c:e0:84:d4:36:ff:22:59:c5:f9:11: 60:a8:5f:04:7d:f2:1a:f6:25:42:61:0f:c4:4a:b8: 3e:89 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 34:26:15:3c:c0:8d:4d:43:49:1d:bd:e9:21:92:d7:66:9c:b7: de:c5:b8:d0:e4:5d:5f:76:22:c0:26:f9:84:3a:3a:f9:8c:b5: fb:ec:60:f1:e8:ce:04:b0:c8:dd:a7:03:8f:30:f3:98:df:a4: e6:a4:31:df:d3:1c:0b:46:dc:72:20:3f:ae:ee:05:3c:a4:33: 3f:0b:39:ac:70:78:73:4b:99:2b:df:30:c2:54:b0:a8:3b:55: a1:fe:16:28:cd:42:bd:74:6e:80:db:27:44:a7:ce:44:5d:d4: 1b:90:98:0d:1e:42:94:b1:00:2c:04:d0:74:a3:02:05:22:63: 63:cd:83:b5:fb:c1:6d:62:6b:69:75:fd:5d:70:41:b9:f5:bf: 7c:df:be:c1:32:73:22:21:8b:58:81:7b:15:91:7a:ba:e3:64: 48:b0:7f:fb:36:25:da:95:d0:f1:24:14:17:dd:18:80:6b:46: 23:39:54:f5:8e:62:09:04:1d:94:90:a6:9b:e6:25:e2:42:45: aa:b8:90:ad:be:08:8f:a9:0b:42:18:94:cf:72:39:e1:b1:43: e0:28:cf:b7:e7:5a:6c:13:6b:49:b3:ff:e3:18:7c:89:8b:33: 5d:ac:33:d7:a7:f9:da:3a:55:c9:58:10:f9:aa:ef:5a:b6:cf: 4b:4b:df:2a SHA1 Fingerprint=61:EF:43:D7:7F:CA:D4:61:51:BC:98:E0:C3:59:12:AF:9F:EB:63:11 -----BEGIN CERTIFICATE----- MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u 7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q -----END CERTIFICATE----- Certificate: Data: Version: 1 (0x0) Serial Number: 9b:7e:06:49:a3:3e:62:b9:d5:ee:90:48:71:29:ef:57 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G3 Validity Not Before: Oct 1 00:00:00 1999 GMT Not After : Jul 16 23:59:59 2036 GMT Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G3 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:cb:ba:9c:52:fc:78:1f:1a:1e:6f:1b:37:73:bd: f8:c9:6b:94:12:30:4f:f0:36:47:f5:d0:91:0a:f5: 17:c8:a5:61:c1:16:40:4d:fb:8a:61:90:e5:76:20: c1:11:06:7d:ab:2c:6e:a6:f5:11:41:8e:fa:2d:ad: 2a:61:59:a4:67:26:4c:d0:e8:bc:52:5b:70:20:04: 58:d1:7a:c9:a4:69:bc:83:17:64:ad:05:8b:bc:d0: 58:ce:8d:8c:f5:eb:f0:42:49:0b:9d:97:27:67:32: 6e:e1:ae:93:15:1c:70:bc:20:4d:2f:18:de:92:88: e8:6c:85:57:11:1a:e9:7e:e3:26:11:54:a2:45:96: 55:83:ca:30:89:e8:dc:d8:a3:ed:2a:80:3f:7f:79: 65:57:3e:15:20:66:08:2f:95:93:bf:aa:47:2f:a8: 46:97:f0:12:e2:fe:c2:0a:2b:51:e6:76:e6:b7:46: b7:e2:0d:a6:cc:a8:c3:4c:59:55:89:e6:e8:53:5c: 1c:ea:9d:f0:62:16:0b:a7:c9:5f:0c:f0:de:c2:76: ce:af:f7:6a:f2:fa:41:a6:a2:33:14:c9:e5:7a:63: d3:9e:62:37:d5:85:65:9e:0e:e6:53:24:74:1b:5e: 1d:12:53:5b:c7:2c:e7:83:49:3b:15:ae:8a:68:b9: 57:97 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 11:14:96:c1:ab:92:08:f7:3f:2f:c9:b2:fe:e4:5a:9f:64:de: db:21:4f:86:99:34:76:36:57:dd:d0:15:2f:c5:ad:7f:15:1f: 37:62:73:3e:d4:e7:5f:ce:17:03:db:35:fa:2b:db:ae:60:09: 5f:1e:5f:8f:6e:bb:0b:3d:ea:5a:13:1e:0c:60:6f:b5:c0:b5: 23:22:2e:07:0b:cb:a9:74:cb:47:bb:1d:c1:d7:a5:6b:cc:2f: d2:42:fd:49:dd:a7:89:cf:53:ba:da:00:5a:28:bf:82:df:f8: ba:13:1d:50:86:82:fd:8e:30:8f:29:46:b0:1e:3d:35:da:38: 62:16:18:4a:ad:e6:b6:51:6c:de:af:62:eb:01:d0:1e:24:fe: 7a:8f:12:1a:12:68:b8:fb:66:99:14:14:45:5c:ae:e7:ae:69: 17:81:2b:5a:37:c9:5e:2a:f4:c6:e2:a1:5c:54:9b:a6:54:00: cf:f0:f1:c1:c7:98:30:1a:3b:36:16:db:a3:6e:ea:fd:ad:b2: c2:da:ef:02:47:13:8a:c0:f1:b3:31:ad:4f:1c:e1:4f:9c:af: 0f:0c:9d:f7:78:0d:d8:f4:35:56:80:da:b7:6d:17:8f:9d:1e: 81:64:e1:fe:c5:45:ba:ad:6b:b9:0a:7a:4e:4f:4b:84:ee:4b: f1:7d:dd:11 SHA1 Fingerprint=13:2D:0D:45:53:4B:69:97:CD:B2:D5:C3:39:E2:55:76:60:9B:5C:C6 -----BEGIN CERTIFICATE----- MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te 2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC /Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== -----END CERTIFICATE----- Certificate: Data: Version: 1 (0x0) Serial Number: ec:a0:a7:8b:6e:75:6a:01:cf:c4:7c:cc:2f:94:5e:d7 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 4 Public Primary Certification Authority - G3 Validity Not Before: Oct 1 00:00:00 1999 GMT Not After : Jul 16 23:59:59 2036 GMT Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 4 Public Primary Certification Authority - G3 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:ad:cb:a5:11:69:c6:59:ab:f1:8f:b5:19:0f:56: ce:cc:b5:1f:20:e4:9e:26:25:4b:e0:73:65:89:59: de:d0:83:e4:f5:0f:b5:bb:ad:f1:7c:e8:21:fc:e4: e8:0c:ee:7c:45:22:19:76:92:b4:13:b7:20:5b:09: fa:61:ae:a8:f2:a5:8d:85:c2:2a:d6:de:66:36:d2: 9b:02:f4:a8:92:60:7c:9c:69:b4:8f:24:1e:d0:86: 52:f6:32:9c:41:58:1e:22:bd:cd:45:62:95:08:6e: d0:66:dd:53:a2:cc:f0:10:dc:54:73:8b:04:a1:46: 33:33:5c:17:40:b9:9e:4d:d3:f3:be:55:83:e8:b1: 89:8e:5a:7c:9a:96:22:90:3b:88:25:f2:d2:53:88: 02:0c:0b:78:f2:e6:37:17:4b:30:46:07:e4:80:6d: a6:d8:96:2e:e8:2c:f8:11:b3:38:0d:66:a6:9b:ea: c9:23:5b:db:8e:e2:f3:13:8e:1a:59:2d:aa:02:f0: ec:a4:87:66:dc:c1:3f:f5:d8:b9:f4:ec:82:c6:d2: 3d:95:1d:e5:c0:4f:84:c9:d9:a3:44:28:06:6a:d7: 45:ac:f0:6b:6a:ef:4e:5f:f8:11:82:1e:38:63:34: 66:50:d4:3e:93:73:fa:30:c3:66:ad:ff:93:2d:97: ef:03 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 8f:fa:25:6b:4f:5b:e4:a4:4e:27:55:ab:22:15:59:3c:ca:b5: 0a:d4:4a:db:ab:dd:a1:5f:53:c5:a0:57:39:c2:ce:47:2b:be: 3a:c8:56:bf:c2:d9:27:10:3a:b1:05:3c:c0:77:31:bb:3a:d3: 05:7b:6d:9a:1c:30:8c:80:cb:93:93:2a:83:ab:05:51:82:02: 00:11:67:6b:f3:88:61:47:5f:03:93:d5:5b:0d:e0:f1:d4:a1: 32:35:85:b2:3a:db:b0:82:ab:d1:cb:0a:bc:4f:8c:5b:c5:4b: 00:3b:1f:2a:82:a6:7e:36:85:dc:7e:3c:67:00:b5:e4:3b:52: e0:a8:eb:5d:15:f9:c6:6d:f0:ad:1d:0e:85:b7:a9:9a:73:14: 5a:5b:8f:41:28:c0:d5:e8:2d:4d:a4:5e:cd:aa:d9:ed:ce:dc: d8:d5:3c:42:1d:17:c1:12:5d:45:38:c3:38:f3:fc:85:2e:83: 46:48:b2:d7:20:5f:92:36:8f:e7:79:0f:98:5e:99:e8:f0:d0: a4:bb:f5:53:bd:2a:ce:59:b0:af:6e:7f:6c:bb:d2:1e:00:b0: 21:ed:f8:41:62:82:b9:d8:b2:c4:bb:46:50:f3:31:c5:8f:01: a8:74:eb:f5:78:27:da:e7:f7:66:43:f3:9e:83:3e:20:aa:c3: 35:60:91:ce SHA1 Fingerprint=C8:EC:8C:87:92:69:CB:4B:AB:39:E9:8D:7E:57:67:F3:14:95:73:9D -----BEGIN CERTIFICATE----- MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1 GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ +mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1 CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c 2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/ bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 927650371 (0x374ad243) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Entrust.net, OU=www.entrust.net/CPS incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Secure Server Certification Authority Validity Not Before: May 25 16:09:40 1999 GMT Not After : May 25 16:39:40 2019 GMT Subject: C=US, O=Entrust.net, OU=www.entrust.net/CPS incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Secure Server Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:cd:28:83:34:54:1b:89:f3:0f:af:37:91:31:ff: af:31:60:c9:a8:e8:b2:10:68:ed:9f:e7:93:36:f1: 0a:64:bb:47:f5:04:17:3f:23:47:4d:c5:27:19:81: 26:0c:54:72:0d:88:2d:d9:1f:9a:12:9f:bc:b3:71: d3:80:19:3f:47:66:7b:8c:35:28:d2:b9:0a:df:24: da:9c:d6:50:79:81:7a:5a:d3:37:f7:c2:4a:d8:29: 92:26:64:d1:e4:98:6c:3a:00:8a:f5:34:9b:65:f8: ed:e3:10:ff:fd:b8:49:58:dc:a0:de:82:39:6b:81: b1:16:19:61:b9:54:b6:e6:43 Exponent: 3 (0x3) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 CRL Distribution Points: Full Name: DirName: C = US, O = Entrust.net, OU = www.entrust.net/CPS incorp. by ref. (limits liab.), OU = (c) 1999 Entrust.net Limited, CN = Entrust.net Secure Server Certification Authority, CN = CRL1 Full Name: URI:http://www.entrust.net/CRL/net1.crl X509v3 Private Key Usage Period: Not Before: May 25 16:09:40 1999 GMT, Not After: May 25 16:09:40 2019 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:F0:17:62:13:55:3D:B3:FF:0A:00:6B:FB:50:84:97:F3:ED:62:D0:1A X509v3 Subject Key Identifier: F0:17:62:13:55:3D:B3:FF:0A:00:6B:FB:50:84:97:F3:ED:62:D0:1A X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0 ..V4.0.... Signature Algorithm: sha1WithRSAEncryption 90:dc:30:02:fa:64:74:c2:a7:0a:a5:7c:21:8d:34:17:a8:fb: 47:0e:ff:25:7c:8d:13:0a:fb:e4:98:b5:ef:8c:f8:c5:10:0d: f7:92:be:f1:c3:d5:d5:95:6a:04:bb:2c:ce:26:36:65:c8:31: c6:e7:ee:3f:e3:57:75:84:7a:11:ef:46:4f:18:f4:d3:98:bb: a8:87:32:ba:72:f6:3c:e2:3d:9f:d7:1d:d9:c3:60:43:8c:58: 0e:22:96:2f:62:a3:2c:1f:ba:ad:05:ef:ab:32:78:87:a0:54: 73:19:b5:5c:05:f9:52:3e:6d:2d:45:0b:f7:0a:93:ea:ed:06: f9:b2 SHA1 Fingerprint=99:A6:9B:E6:1A:FE:88:6B:4D:2B:82:00:7C:B8:54:FC:31:7E:15:39 -----BEGIN CERTIFICATE----- MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1 MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/ I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3 wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5 BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0 MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN 95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd 2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 946059622 (0x3863b966) Signature Algorithm: sha1WithRSAEncryption Issuer: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048) Validity Not Before: Dec 24 17:50:51 1999 GMT Not After : Dec 24 18:20:51 2019 GMT Subject: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048) Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:ad:4d:4b:a9:12:86:b2:ea:a3:20:07:15:16:64: 2a:2b:4b:d1:bf:0b:4a:4d:8e:ed:80:76:a5:67:b7: 78:40:c0:73:42:c8:68:c0:db:53:2b:dd:5e:b8:76: 98:35:93:8b:1a:9d:7c:13:3a:0e:1f:5b:b7:1e:cf: e5:24:14:1e:b1:81:a9:8d:7d:b8:cc:6b:4b:03:f1: 02:0c:dc:ab:a5:40:24:00:7f:74:94:a1:9d:08:29: b3:88:0b:f5:87:77:9d:55:cd:e4:c3:7e:d7:6a:64: ab:85:14:86:95:5b:97:32:50:6f:3d:c8:ba:66:0c: e3:fc:bd:b8:49:c1:76:89:49:19:fd:c0:a8:bd:89: a3:67:2f:c6:9f:bc:71:19:60:b8:2d:e9:2c:c9:90: 76:66:7b:94:e2:af:78:d6:65:53:5d:3c:d6:9c:b2: cf:29:03:f9:2f:a4:50:b2:d4:48:ce:05:32:55:8a: fd:b2:64:4c:0e:e4:98:07:75:db:7f:df:b9:08:55: 60:85:30:29:f9:7b:48:a4:69:86:e3:35:3f:1e:86: 5d:7a:7a:15:bd:ef:00:8e:15:22:54:17:00:90:26: 93:bc:0e:49:68:91:bf:f8:47:d3:9d:95:42:c1:0e: 4d:df:6f:26:cf:c3:18:21:62:66:43:70:d6:d5:c0: 07:e1 Exponent: 65537 (0x10001) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 Authority Key Identifier: keyid:55:E4:81:D1:11:80:BE:D8:89:B9:08:A3:31:F9:A1:24:09:16:B9:70 X509v3 Subject Key Identifier: 55:E4:81:D1:11:80:BE:D8:89:B9:08:A3:31:F9:A1:24:09:16:B9:70 1.2.840.113533.7.65.0: 0...V5.0:4.0.... Signature Algorithm: sha1WithRSAEncryption 59:47:ac:21:84:8a:17:c9:9c:89:53:1e:ba:80:85:1a:c6:3c: 4e:3e:b1:9c:b6:7c:c6:92:5d:18:64:02:e3:d3:06:08:11:61: 7c:63:e3:2b:9d:31:03:70:76:d2:a3:28:a0:f4:bb:9a:63:73: ed:6d:e5:2a:db:ed:14:a9:2b:c6:36:11:d0:2b:eb:07:8b:a5: da:9e:5c:19:9d:56:12:f5:54:29:c8:05:ed:b2:12:2a:8d:f4: 03:1b:ff:e7:92:10:87:b0:3a:b5:c3:9d:05:37:12:a3:c7:f4: 15:b9:d5:a4:39:16:9b:53:3a:23:91:f1:a8:82:a2:6a:88:68: c1:79:02:22:bc:aa:a6:d6:ae:df:b0:14:5f:b8:87:d0:dd:7c: 7f:7b:ff:af:1c:cf:e6:db:07:ad:5e:db:85:9d:d0:2b:0d:33: db:04:d1:e6:49:40:13:2b:76:fb:3e:e9:9c:89:0f:15:ce:18: b0:85:78:21:4f:6b:4f:0e:fa:36:67:cd:07:f2:ff:08:d0:e2: de:d9:bf:2a:af:b8:87:86:21:3c:04:ca:b7:94:68:7f:cf:3c: e9:98:d7:38:ff:ec:c0:d9:50:f0:2e:4b:58:ae:46:6f:d0:2e: c3:60:da:72:55:72:bd:4c:45:9e:61:ba:bf:84:81:92:03:d1: d2:69:7c:c5 SHA1 Fingerprint=80:1D:62:D0:7B:44:9D:5C:5C:03:5C:98:EA:61:FA:44:3C:2A:58:FE -----BEGIN CERTIFICATE----- MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH 4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18 f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy vUxFnmG6v4SBkgPR0ml8xQ== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 33554617 (0x20000b9) Signature Algorithm: sha1WithRSAEncryption Issuer: C=IE, O=Baltimore, OU=CyberTrust, CN=Baltimore CyberTrust Root Validity Not Before: May 12 18:46:00 2000 GMT Not After : May 12 23:59:00 2025 GMT Subject: C=IE, O=Baltimore, OU=CyberTrust, CN=Baltimore CyberTrust Root Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:a3:04:bb:22:ab:98:3d:57:e8:26:72:9a:b5:79: d4:29:e2:e1:e8:95:80:b1:b0:e3:5b:8e:2b:29:9a: 64:df:a1:5d:ed:b0:09:05:6d:db:28:2e:ce:62:a2: 62:fe:b4:88:da:12:eb:38:eb:21:9d:c0:41:2b:01: 52:7b:88:77:d3:1c:8f:c7:ba:b9:88:b5:6a:09:e7: 73:e8:11:40:a7:d1:cc:ca:62:8d:2d:e5:8f:0b:a6: 50:d2:a8:50:c3:28:ea:f5:ab:25:87:8a:9a:96:1c: a9:67:b8:3f:0c:d5:f7:f9:52:13:2f:c2:1b:d5:70: 70:f0:8f:c0:12:ca:06:cb:9a:e1:d9:ca:33:7a:77: d6:f8:ec:b9:f1:68:44:42:48:13:d2:c0:c2:a4:ae: 5e:60:fe:b6:a6:05:fc:b4:dd:07:59:02:d4:59:18: 98:63:f5:a5:63:e0:90:0c:7d:5d:b2:06:7a:f3:85: ea:eb:d4:03:ae:5e:84:3e:5f:ff:15:ed:69:bc:f9: 39:36:72:75:cf:77:52:4d:f3:c9:90:2c:b9:3d:e5: c9:23:53:3f:1f:24:98:21:5c:07:99:29:bd:c6:3a: ec:e7:6e:86:3a:6b:97:74:63:33:bd:68:18:31:f0: 78:8d:76:bf:fc:9e:8e:5d:2a:86:a7:4d:90:dc:27: 1a:39 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: E5:9D:59:30:82:47:58:CC:AC:FA:08:54:36:86:7B:3A:B5:04:4D:F0 X509v3 Basic Constraints: critical CA:TRUE, pathlen:3 X509v3 Key Usage: critical Certificate Sign, CRL Sign Signature Algorithm: sha1WithRSAEncryption 85:0c:5d:8e:e4:6f:51:68:42:05:a0:dd:bb:4f:27:25:84:03: bd:f7:64:fd:2d:d7:30:e3:a4:10:17:eb:da:29:29:b6:79:3f: 76:f6:19:13:23:b8:10:0a:f9:58:a4:d4:61:70:bd:04:61:6a: 12:8a:17:d5:0a:bd:c5:bc:30:7c:d6:e9:0c:25:8d:86:40:4f: ec:cc:a3:7e:38:c6:37:11:4f:ed:dd:68:31:8e:4c:d2:b3:01: 74:ee:be:75:5e:07:48:1a:7f:70:ff:16:5c:84:c0:79:85:b8: 05:fd:7f:be:65:11:a3:0f:c0:02:b4:f8:52:37:39:04:d5:a9: 31:7a:18:bf:a0:2a:f4:12:99:f7:a3:45:82:e3:3c:5e:f5:9d: 9e:b5:c8:9e:7c:2e:c8:a4:9e:4e:08:14:4b:6d:fd:70:6d:6b: 1a:63:bd:64:e6:1f:b7:ce:f0:f2:9f:2e:bb:1b:b7:f2:50:88: 73:92:c2:e2:e3:16:8d:9a:32:02:ab:8e:18:dd:e9:10:11:ee: 7e:35:ab:90:af:3e:30:94:7a:d0:33:3d:a7:65:0f:f5:fc:8e: 9e:62:cf:47:44:2c:01:5d:bb:1d:b5:32:d2:47:d2:38:2e:d0: fe:81:dc:32:6a:1e:b5:ee:3c:d5:fc:e7:81:1d:19:c3:24:42: ea:63:39:a9 SHA1 Fingerprint=D4:DE:20:D0:5E:66:FC:53:FE:1A:50:88:2C:78:DB:28:52:CA:E4:74 -----BEGIN CERTIFICATE----- MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=US, O=Equifax Secure Inc., CN=Equifax Secure Global eBusiness CA-1 Validity Not Before: Jun 21 04:00:00 1999 GMT Not After : Jun 21 04:00:00 2020 GMT Subject: C=US, O=Equifax Secure Inc., CN=Equifax Secure Global eBusiness CA-1 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:ba:e7:17:90:02:65:b1:34:55:3c:49:c2:51:d5: df:a7:d1:37:8f:d1:e7:81:73:41:52:60:9b:9d:a1: 17:26:78:ad:c7:b1:e8:26:94:32:b5:de:33:8d:3a: 2f:db:f2:9a:7a:5a:73:98:a3:5c:e9:fb:8a:73:1b: 5c:e7:c3:bf:80:6c:cd:a9:f4:d6:2b:c0:f7:f9:99: aa:63:a2:b1:47:02:0f:d4:e4:51:3a:12:3c:6c:8a: 5a:54:84:70:db:c1:c5:90:cf:72:45:cb:a8:59:c0: cd:33:9d:3f:a3:96:eb:85:33:21:1c:3e:1e:3e:60: 6e:76:9c:67:85:c5:c8:c3:61 Exponent: 65537 (0x10001) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 Basic Constraints: critical CA:TRUE X509v3 Authority Key Identifier: keyid:BE:A8:A0:74:72:50:6B:44:B7:C9:23:D8:FB:A8:FF:B3:57:6B:68:6C X509v3 Subject Key Identifier: BE:A8:A0:74:72:50:6B:44:B7:C9:23:D8:FB:A8:FF:B3:57:6B:68:6C Signature Algorithm: md5WithRSAEncryption 30:e2:01:51:aa:c7:ea:5f:da:b9:d0:65:0f:30:d6:3e:da:0d: 14:49:6e:91:93:27:14:31:ef:c4:f7:2d:45:f8:ec:c7:bf:a2: 41:0d:23:b4:92:f9:19:00:67:bd:01:af:cd:e0:71:fc:5a:cf: 64:c4:e0:96:98:d0:a3:40:e2:01:8a:ef:27:07:f1:65:01:8a: 44:2d:06:65:75:52:c0:86:10:20:21:5f:6c:6b:0f:6c:ae:09: 1c:af:f2:a2:18:34:c4:75:a4:73:1c:f1:8d:dc:ef:ad:f9:b3: 76:b4:92:bf:dc:95:10:1e:be:cb:c8:3b:5a:84:60:19:56:94: a9:55 SHA1 Fingerprint=7E:78:4A:10:1C:82:65:CC:2D:E1:F1:6D:47:B4:40:CA:D9:0A:19:45 -----BEGIN CERTIFICATE----- MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc 58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/ o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv 8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 4 (0x4) Signature Algorithm: md5WithRSAEncryption Issuer: C=US, O=Equifax Secure Inc., CN=Equifax Secure eBusiness CA-1 Validity Not Before: Jun 21 04:00:00 1999 GMT Not After : Jun 21 04:00:00 2020 GMT Subject: C=US, O=Equifax Secure Inc., CN=Equifax Secure eBusiness CA-1 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:ce:2f:19:bc:17:b7:77:de:93:a9:5f:5a:0d:17: 4f:34:1a:0c:98:f4:22:d9:59:d4:c4:68:46:f0:b4: 35:c5:85:03:20:c6:af:45:a5:21:51:45:41:eb:16: 58:36:32:6f:e2:50:62:64:f9:fd:51:9c:aa:24:d9: f4:9d:83:2a:87:0a:21:d3:12:38:34:6c:8d:00:6e: 5a:a0:d9:42:ee:1a:21:95:f9:52:4c:55:5a:c5:0f: 38:4f:46:fa:6d:f8:2e:35:d6:1d:7c:eb:e2:f0:b0: 75:80:c8:a9:13:ac:be:88:ef:3a:6e:ab:5f:2a:38: 62:02:b0:12:7b:fe:8f:a6:03 Exponent: 65537 (0x10001) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 Basic Constraints: critical CA:TRUE X509v3 Authority Key Identifier: keyid:4A:78:32:52:11:DB:59:16:36:5E:DF:C1:14:36:40:6A:47:7C:4C:A1 X509v3 Subject Key Identifier: 4A:78:32:52:11:DB:59:16:36:5E:DF:C1:14:36:40:6A:47:7C:4C:A1 Signature Algorithm: md5WithRSAEncryption 75:5b:a8:9b:03:11:e6:e9:56:4c:cd:f9:a9:4c:c0:0d:9a:f3: cc:65:69:e6:25:76:cc:59:b7:d6:54:c3:1d:cd:99:ac:19:dd: b4:85:d5:e0:3d:fc:62:20:a7:84:4b:58:65:f1:e2:f9:95:21: 3f:f5:d4:7e:58:1e:47:87:54:3e:58:a1:b5:b5:f8:2a:ef:71: e7:bc:c3:f6:b1:49:46:e2:d7:a0:6b:e5:56:7a:9a:27:98:7c: 46:62:14:e7:c9:fc:6e:03:12:79:80:38:1d:48:82:8d:fc:17: fe:2a:96:2b:b5:62:a6:a6:3d:bd:7f:92:59:cd:5a:2a:82:b2: 37:79 SHA1 Fingerprint=DA:40:18:8B:91:89:A3:ED:EE:AE:DA:97:FE:2F:9D:F5:B7:D1:8A:41 -----BEGIN CERTIFICATE----- MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+ WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN /Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 930140085 (0x3770cfb5) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Equifax Secure, OU=Equifax Secure eBusiness CA-2 Validity Not Before: Jun 23 12:14:45 1999 GMT Not After : Jun 23 12:14:45 2019 GMT Subject: C=US, O=Equifax Secure, OU=Equifax Secure eBusiness CA-2 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:e4:39:39:93:1e:52:06:1b:28:36:f8:b2:a3:29: c5:ed:8e:b2:11:bd:fe:eb:e7:b4:74:c2:8f:ff:05: e7:d9:9d:06:bf:12:c8:3f:0e:f2:d6:d1:24:b2:11: de:d1:73:09:8a:d4:b1:2c:98:09:0d:1e:50:46:b2: 83:a6:45:8d:62:68:bb:85:1b:20:70:32:aa:40:cd: a6:96:5f:c4:71:37:3f:04:f3:b7:41:24:39:07:1a: 1e:2e:61:58:a0:12:0b:e5:a5:df:c5:ab:ea:37:71: cc:1c:c8:37:3a:b9:97:52:a7:ac:c5:6a:24:94:4e: 9c:7b:cf:c0:6a:d6:df:21:bd Exponent: 65537 (0x10001) X509v3 extensions: X509v3 CRL Distribution Points: Full Name: DirName: C = US, O = Equifax Secure, OU = Equifax Secure eBusiness CA-2, CN = CRL1 X509v3 Private Key Usage Period: Not After: Jun 23 12:14:45 2019 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:50:9E:0B:EA:AF:5E:B9:20:48:A6:50:6A:CB:FD:D8:20:7A:A7:82:76 X509v3 Subject Key Identifier: 50:9E:0B:EA:AF:5E:B9:20:48:A6:50:6A:CB:FD:D8:20:7A:A7:82:76 X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0...V3.0c.... Signature Algorithm: sha1WithRSAEncryption 0c:86:82:ad:e8:4e:1a:f5:8e:89:27:e2:35:58:3d:29:b4:07: 8f:36:50:95:bf:6e:c1:9e:eb:c4:90:b2:85:a8:bb:b7:42:e0: 0f:07:39:df:fb:9e:90:b2:d1:c1:3e:53:9f:03:44:b0:7e:4b: f4:6f:e4:7c:1f:e7:e2:b1:e4:b8:9a:ef:c3:bd:ce:de:0b:32: 34:d9:de:28:ed:33:6b:c4:d4:d7:3d:12:58:ab:7d:09:2d:cb: 70:f5:13:8a:94:a1:27:a4:d6:70:c5:6d:94:b5:c9:7d:9d:a0: d2:c6:08:49:d9:66:9b:a6:d3:f4:0b:dc:c5:26:57:e1:91:30: ea:cd SHA1 Fingerprint=39:4F:F6:85:0B:06:BE:52:E5:18:56:CC:10:E1:80:E8:82:B3:85:CC -----BEGIN CERTIFICATE----- MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0 NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/ BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy 0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1 E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C=SE, O=AddTrust AB, OU=AddTrust TTP Network, CN=AddTrust Class 1 CA Root Validity Not Before: May 30 10:38:31 2000 GMT Not After : May 30 10:38:31 2020 GMT Subject: C=SE, O=AddTrust AB, OU=AddTrust TTP Network, CN=AddTrust Class 1 CA Root Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:96:96:d4:21:49:60:e2:6b:e8:41:07:0c:de:c4: e0:dc:13:23:cd:c1:35:c7:fb:d6:4e:11:0a:67:5e: f5:06:5b:6b:a5:08:3b:5b:29:16:3a:e7:87:b2:34: 06:c5:bc:05:a5:03:7c:82:cb:29:10:ae:e1:88:81: bd:d6:9e:d3:fe:2d:56:c1:15:ce:e3:26:9d:15:2e: 10:fb:06:8f:30:04:de:a7:b4:63:b4:ff:b1:9c:ae: 3c:af:77:b6:56:c5:b5:ab:a2:e9:69:3a:3d:0e:33: 79:32:3f:70:82:92:99:61:6d:8d:30:08:8f:71:3f: a6:48:57:19:f8:25:dc:4b:66:5c:a5:74:8f:98:ae: c8:f9:c0:06:22:e7:ac:73:df:a5:2e:fb:52:dc:b1: 15:65:20:fa:35:66:69:de:df:2c:f1:6e:bc:30:db: 2c:24:12:db:eb:35:35:68:90:cb:00:b0:97:21:3d: 74:21:23:65:34:2b:bb:78:59:a3:d6:e1:76:39:9a: a4:49:8e:8c:74:af:6e:a4:9a:a3:d9:9b:d2:38:5c: 9b:a2:18:cc:75:23:84:be:eb:e2:4d:33:71:8e:1a: f0:c2:f8:c7:1d:a2:ad:03:97:2c:f8:cf:25:c6:f6: b8:24:31:b1:63:5d:92:7f:63:f0:25:c9:53:2e:1f: bf:4d Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: 95:B1:B4:F0:94:B6:BD:C7:DA:D1:11:09:21:BE:C1:AF:49:FD:10:7B X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Authority Key Identifier: keyid:95:B1:B4:F0:94:B6:BD:C7:DA:D1:11:09:21:BE:C1:AF:49:FD:10:7B DirName:/C=SE/O=AddTrust AB/OU=AddTrust TTP Network/CN=AddTrust Class 1 CA Root serial:01 Signature Algorithm: sha1WithRSAEncryption 2c:6d:64:1b:1f:cd:0d:dd:b9:01:fa:96:63:34:32:48:47:99: ae:97:ed:fd:72:16:a6:73:47:5a:f4:eb:dd:e9:f5:d6:fb:45: cc:29:89:44:5d:bf:46:39:3d:e8:ee:bc:4d:54:86:1e:1d:6c: e3:17:27:43:e1:89:56:2b:a9:6f:72:4e:49:33:e3:72:7c:2a: 23:9a:bc:3e:ff:28:2a:ed:a3:ff:1c:23:ba:43:57:09:67:4d: 4b:62:06:2d:f8:ff:6c:9d:60:1e:d8:1c:4b:7d:b5:31:2f:d9: d0:7c:5d:f8:de:6b:83:18:78:37:57:2f:e8:33:07:67:df:1e: c7:6b:2a:95:76:ae:8f:57:a3:f0:f4:52:b4:a9:53:08:cf:e0: 4f:d3:7a:53:8b:fd:bb:1c:56:36:f2:fe:b2:b6:e5:76:bb:d5: 22:65:a7:3f:fe:d1:66:ad:0b:bc:6b:99:86:ef:3f:7d:f3:18: 32:ca:7b:c6:e3:ab:64:46:95:f8:26:69:d9:55:83:7b:2c:96: 07:ff:59:2c:44:a3:c6:e5:e9:a9:dc:a1:63:80:5a:21:5e:21: cf:53:54:f0:ba:6f:89:db:a8:aa:95:cf:8b:e3:71:cc:1e:1b: 20:44:08:c0:7a:b6:40:fd:c4:e4:35:e1:1d:16:1c:d0:bc:2b: 8e:d6:71:d9 SHA1 Fingerprint=CC:AB:0E:A0:4C:23:01:D6:69:7B:DD:37:9F:CD:12:EB:24:E3:94:9D -----BEGIN CERTIFICATE----- MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC +Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X 7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz 43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C=SE, O=AddTrust AB, OU=AddTrust External TTP Network, CN=AddTrust External CA Root Validity Not Before: May 30 10:48:38 2000 GMT Not After : May 30 10:48:38 2020 GMT Subject: C=SE, O=AddTrust AB, OU=AddTrust External TTP Network, CN=AddTrust External CA Root Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:b7:f7:1a:33:e6:f2:00:04:2d:39:e0:4e:5b:ed: 1f:bc:6c:0f:cd:b5:fa:23:b6:ce:de:9b:11:33:97: a4:29:4c:7d:93:9f:bd:4a:bc:93:ed:03:1a:e3:8f: cf:e5:6d:50:5a:d6:97:29:94:5a:80:b0:49:7a:db: 2e:95:fd:b8:ca:bf:37:38:2d:1e:3e:91:41:ad:70: 56:c7:f0:4f:3f:e8:32:9e:74:ca:c8:90:54:e9:c6: 5f:0f:78:9d:9a:40:3c:0e:ac:61:aa:5e:14:8f:9e: 87:a1:6a:50:dc:d7:9a:4e:af:05:b3:a6:71:94:9c: 71:b3:50:60:0a:c7:13:9d:38:07:86:02:a8:e9:a8: 69:26:18:90:ab:4c:b0:4f:23:ab:3a:4f:84:d8:df: ce:9f:e1:69:6f:bb:d7:42:d7:6b:44:e4:c7:ad:ee: 6d:41:5f:72:5a:71:08:37:b3:79:65:a4:59:a0:94: 37:f7:00:2f:0d:c2:92:72:da:d0:38:72:db:14:a8: 45:c4:5d:2a:7d:b7:b4:d6:c4:ee:ac:cd:13:44:b7: c9:2b:dd:43:00:25:fa:61:b9:69:6a:58:23:11:b7: a7:33:8f:56:75:59:f5:cd:29:d7:46:b7:0a:2b:65: b6:d3:42:6f:15:b2:b8:7b:fb:ef:e9:5d:53:d5:34: 5a:27 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: AD:BD:98:7A:34:B4:26:F7:FA:C4:26:54:EF:03:BD:E0:24:CB:54:1A X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Authority Key Identifier: keyid:AD:BD:98:7A:34:B4:26:F7:FA:C4:26:54:EF:03:BD:E0:24:CB:54:1A DirName:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root serial:01 Signature Algorithm: sha1WithRSAEncryption b0:9b:e0:85:25:c2:d6:23:e2:0f:96:06:92:9d:41:98:9c:d9: 84:79:81:d9:1e:5b:14:07:23:36:65:8f:b0:d8:77:bb:ac:41: 6c:47:60:83:51:b0:f9:32:3d:e7:fc:f6:26:13:c7:80:16:a5: bf:5a:fc:87:cf:78:79:89:21:9a:e2:4c:07:0a:86:35:bc:f2: de:51:c4:d2:96:b7:dc:7e:4e:ee:70:fd:1c:39:eb:0c:02:51: 14:2d:8e:bd:16:e0:c1:df:46:75:e7:24:ad:ec:f4:42:b4:85: 93:70:10:67:ba:9d:06:35:4a:18:d3:2b:7a:cc:51:42:a1:7a: 63:d1:e6:bb:a1:c5:2b:c2:36:be:13:0d:e6:bd:63:7e:79:7b: a7:09:0d:40:ab:6a:dd:8f:8a:c3:f6:f6:8c:1a:42:05:51:d4: 45:f5:9f:a7:62:21:68:15:20:43:3c:99:e7:7c:bd:24:d8:a9: 91:17:73:88:3f:56:1b:31:38:18:b4:71:0f:9a:cd:c8:0e:9e: 8e:2e:1b:e1:8c:98:83:cb:1f:31:f1:44:4c:c6:04:73:49:76: 60:0f:c7:f8:bd:17:80:6b:2e:e9:cc:4c:0e:5a:9a:79:0f:20: 0a:2e:d5:9e:63:26:1e:55:92:94:d8:82:17:5a:7b:d0:bc:c7: 8f:4e:86:04 SHA1 Fingerprint=02:FA:F3:E2:91:43:54:68:60:78:57:69:4D:F5:E4:5B:68:85:18:68 -----BEGIN CERTIFICATE----- MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C=SE, O=AddTrust AB, OU=AddTrust TTP Network, CN=AddTrust Public CA Root Validity Not Before: May 30 10:41:50 2000 GMT Not After : May 30 10:41:50 2020 GMT Subject: C=SE, O=AddTrust AB, OU=AddTrust TTP Network, CN=AddTrust Public CA Root Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:e9:1a:30:8f:83:88:14:c1:20:d8:3c:9b:8f:1b: 7e:03:74:bb:da:69:d3:46:a5:f8:8e:c2:0c:11:90: 51:a5:2f:66:54:40:55:ea:db:1f:4a:56:ee:9f:23: 6e:f4:39:cb:a1:b9:6f:f2:7e:f9:5d:87:26:61:9e: 1c:f8:e2:ec:a6:81:f8:21:c5:24:cc:11:0c:3f:db: 26:72:7a:c7:01:97:07:17:f9:d7:18:2c:30:7d:0e: 7a:1e:62:1e:c6:4b:c0:fd:7d:62:77:d3:44:1e:27: f6:3f:4b:44:b3:b7:38:d9:39:1f:60:d5:51:92:73: 03:b4:00:69:e3:f3:14:4e:ee:d1:dc:09:cf:77:34: 46:50:b0:f8:11:f2:fe:38:79:f7:07:39:fe:51:92: 97:0b:5b:08:5f:34:86:01:ad:88:97:eb:66:cd:5e: d1:ff:dc:7d:f2:84:da:ba:77:ad:dc:80:08:c7:a7: 87:d6:55:9f:97:6a:e8:c8:11:64:ba:e7:19:29:3f: 11:b3:78:90:84:20:52:5b:11:ef:78:d0:83:f6:d5: 48:90:d0:30:1c:cf:80:f9:60:fe:79:e4:88:f2:dd: 00:eb:94:45:eb:65:94:69:40:ba:c0:d5:b4:b8:ba: 7d:04:11:a8:eb:31:05:96:94:4e:58:21:8e:9f:d0: 60:fd Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: 81:3E:37:D8:92:B0:1F:77:9F:5C:B4:AB:73:AA:E7:F6:34:60:2F:FA X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Authority Key Identifier: keyid:81:3E:37:D8:92:B0:1F:77:9F:5C:B4:AB:73:AA:E7:F6:34:60:2F:FA DirName:/C=SE/O=AddTrust AB/OU=AddTrust TTP Network/CN=AddTrust Public CA Root serial:01 Signature Algorithm: sha1WithRSAEncryption 03:f7:15:4a:f8:24:da:23:56:16:93:76:dd:36:28:b9:ae:1b: b8:c3:f1:64:ba:20:18:78:95:29:27:57:05:bc:7c:2a:f4:b9: 51:55:da:87:02:de:0f:16:17:31:f8:aa:79:2e:09:13:bb:af: b2:20:19:12:e5:93:f9:4b:f9:83:e8:44:d5:b2:41:25:bf:88: 75:6f:ff:10:fc:4a:54:d0:5f:f0:fa:ef:36:73:7d:1b:36:45: c6:21:6d:b4:15:b8:4e:cf:9c:5c:a5:3d:5a:00:8e:06:e3:3c: 6b:32:7b:f2:9f:f0:b6:fd:df:f0:28:18:48:f0:c6:bc:d0:bf: 34:80:96:c2:4a:b1:6d:8e:c7:90:45:de:2f:67:ac:45:04:a3: 7a:dc:55:92:c9:47:66:d8:1a:8c:c7:ed:9c:4e:9a:e0:12:bb: b5:6a:4c:84:e1:e1:22:0d:87:00:64:fe:8c:7d:62:39:65:a6: ef:42:b6:80:25:12:61:01:a8:24:13:70:00:11:26:5f:fa:35: 50:c5:48:cc:06:47:e8:27:d8:70:8d:5f:64:e6:a1:44:26:5e: 22:ec:92:cd:ff:42:9a:44:21:6d:5c:c5:e3:22:1d:5f:47:12: e7:ce:5f:5d:fa:d8:aa:b1:33:2d:d9:76:f2:4e:3a:33:0c:2b: b3:2d:90:06 SHA1 Fingerprint=2A:B6:28:48:5E:78:FB:F3:AD:9E:79:10:DD:6B:DF:99:72:2C:96:E5 -----BEGIN CERTIFICATE----- MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV 6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH 1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF 62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6 IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/ iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh 4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C=SE, O=AddTrust AB, OU=AddTrust TTP Network, CN=AddTrust Qualified CA Root Validity Not Before: May 30 10:44:50 2000 GMT Not After : May 30 10:44:50 2020 GMT Subject: C=SE, O=AddTrust AB, OU=AddTrust TTP Network, CN=AddTrust Qualified CA Root Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:e4:1e:9a:fe:dc:09:5a:87:a4:9f:47:be:11:5f: af:84:34:db:62:3c:79:78:b7:e9:30:b5:ec:0c:1c: 2a:c4:16:ff:e0:ec:71:eb:8a:f5:11:6e:ed:4f:0d: 91:d2:12:18:2d:49:15:01:c2:a4:22:13:c7:11:64: ff:22:12:9a:b9:8e:5c:2f:08:cf:71:6a:b3:67:01: 59:f1:5d:46:f3:b0:78:a5:f6:0e:42:7a:e3:7f:1b: cc:d0:f0:b7:28:fd:2a:ea:9e:b3:b0:b9:04:aa:fd: f6:c7:b4:b1:b8:2a:a0:fb:58:f1:19:a0:6f:70:25: 7e:3e:69:4a:7f:0f:22:d8:ef:ad:08:11:9a:29:99: e1:aa:44:45:9a:12:5e:3e:9d:6d:52:fc:e7:a0:3d: 68:2f:f0:4b:70:7c:13:38:ad:bc:15:25:f1:d6:ce: ab:a2:c0:31:d6:2f:9f:e0:ff:14:59:fc:84:93:d9: 87:7c:4c:54:13:eb:9f:d1:2d:11:f8:18:3a:3a:de: 25:d9:f7:d3:40:ed:a4:06:12:c4:3b:e1:91:c1:56: 35:f0:14:dc:65:36:09:6e:ab:a4:07:c7:35:d1:c2: 03:33:36:5b:75:26:6d:42:f1:12:6b:43:6f:4b:71: 94:fa:34:1d:ed:13:6e:ca:80:7f:98:2f:6c:b9:65: d8:e9 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: 39:95:8B:62:8B:5C:C9:D4:80:BA:58:0F:97:3F:15:08:43:CC:98:A7 X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Authority Key Identifier: keyid:39:95:8B:62:8B:5C:C9:D4:80:BA:58:0F:97:3F:15:08:43:CC:98:A7 DirName:/C=SE/O=AddTrust AB/OU=AddTrust TTP Network/CN=AddTrust Qualified CA Root serial:01 Signature Algorithm: sha1WithRSAEncryption 19:ab:75:ea:f8:8b:65:61:95:13:ba:69:04:ef:86:ca:13:a0: c7:aa:4f:64:1b:3f:18:f6:a8:2d:2c:55:8f:05:b7:30:ea:42: 6a:1d:c0:25:51:2d:a7:bf:0c:b3:ed:ef:08:7f:6c:3c:46:1a: ea:18:43:df:76:cc:f9:66:86:9c:2c:68:f5:e9:17:f8:31:b3: 18:c4:d6:48:7d:23:4c:68:c1:7e:bb:01:14:6f:c5:d9:6e:de: bb:04:42:6a:f8:f6:5c:7d:e5:da:fa:87:eb:0d:35:52:67:d0: 9e:97:76:05:93:3f:95:c7:01:e6:69:55:38:7f:10:61:99:c9: e3:5f:a6:ca:3e:82:63:48:aa:e2:08:48:3e:aa:f2:b2:85:62: a6:b4:a7:d9:bd:37:9c:68:b5:2d:56:7d:b0:b7:3f:a0:b1:07: d6:e9:4f:dc:de:45:71:30:32:7f:1b:2e:09:f9:bf:52:a1:ee: c2:80:3e:06:5c:2e:55:40:c1:1b:f5:70:45:b0:dc:5d:fa:f6: 72:5a:77:d2:63:cd:cf:58:89:00:42:63:3f:79:39:d0:44:b0: 82:6e:41:19:e8:dd:e0:c1:88:5a:d1:1e:71:93:1f:24:30:74: e5:1e:a8:de:3c:27:37:7f:83:ae:9e:77:cf:f0:30:b1:ff:4b: 99:e8:c6:a1 SHA1 Fingerprint=4D:23:78:EC:91:95:39:B5:00:7F:75:8F:03:3B:21:1E:C5:4D:8B:CF -----BEGIN CERTIFICATE----- MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1 MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G 87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i 2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1 0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3 P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no xqE= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1164660820 (0x456b5054) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Entrust, Inc., OU=www.entrust.net/CPS is incorporated by reference, OU=(c) 2006 Entrust, Inc., CN=Entrust Root Certification Authority Validity Not Before: Nov 27 20:23:42 2006 GMT Not After : Nov 27 20:53:42 2026 GMT Subject: C=US, O=Entrust, Inc., OU=www.entrust.net/CPS is incorporated by reference, OU=(c) 2006 Entrust, Inc., CN=Entrust Root Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:b6:95:b6:43:42:fa:c6:6d:2a:6f:48:df:94:4c: 39:57:05:ee:c3:79:11:41:68:36:ed:ec:fe:9a:01: 8f:a1:38:28:fc:f7:10:46:66:2e:4d:1e:1a:b1:1a: 4e:c6:d1:c0:95:88:b0:c9:ff:31:8b:33:03:db:b7: 83:7b:3e:20:84:5e:ed:b2:56:28:a7:f8:e0:b9:40: 71:37:c5:cb:47:0e:97:2a:68:c0:22:95:62:15:db: 47:d9:f5:d0:2b:ff:82:4b:c9:ad:3e:de:4c:db:90: 80:50:3f:09:8a:84:00:ec:30:0a:3d:18:cd:fb:fd: 2a:59:9a:23:95:17:2c:45:9e:1f:6e:43:79:6d:0c: 5c:98:fe:48:a7:c5:23:47:5c:5e:fd:6e:e7:1e:b4: f6:68:45:d1:86:83:5b:a2:8a:8d:b1:e3:29:80:fe: 25:71:88:ad:be:bc:8f:ac:52:96:4b:aa:51:8d:e4: 13:31:19:e8:4e:4d:9f:db:ac:b3:6a:d5:bc:39:54: 71:ca:7a:7a:7f:90:dd:7d:1d:80:d9:81:bb:59:26: c2:11:fe:e6:93:e2:f7:80:e4:65:fb:34:37:0e:29: 80:70:4d:af:38:86:2e:9e:7f:57:af:9e:17:ae:eb: 1c:cb:28:21:5f:b6:1c:d8:e7:a2:04:22:f9:d3:da: d8:cb Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Private Key Usage Period: Not Before: Nov 27 20:23:42 2006 GMT, Not After: Nov 27 20:53:42 2026 GMT X509v3 Authority Key Identifier: keyid:68:90:E4:67:A4:A6:53:80:C7:86:66:A4:F1:F7:4B:43:FB:84:BD:6D X509v3 Subject Key Identifier: 68:90:E4:67:A4:A6:53:80:C7:86:66:A4:F1:F7:4B:43:FB:84:BD:6D 1.2.840.113533.7.65.0: 0...V7.1:4.0.... Signature Algorithm: sha1WithRSAEncryption 93:d4:30:b0:d7:03:20:2a:d0:f9:63:e8:91:0c:05:20:a9:5f: 19:ca:7b:72:4e:d4:b1:db:d0:96:fb:54:5a:19:2c:0c:08:f7: b2:bc:85:a8:9d:7f:6d:3b:52:b3:2a:db:e7:d4:84:8c:63:f6: 0f:cb:26:01:91:50:6c:f4:5f:14:e2:93:74:c0:13:9e:30:3a: 50:e3:b4:60:c5:1c:f0:22:44:8d:71:47:ac:c8:1a:c9:e9:9b: 9a:00:60:13:ff:70:7e:5f:11:4d:49:1b:b3:15:52:7b:c9:54: da:bf:9d:95:af:6b:9a:d8:9e:e9:f1:e4:43:8d:e2:11:44:3a: bf:af:bd:83:42:73:52:8b:aa:bb:a7:29:cf:f5:64:1c:0a:4d: d1:bc:aa:ac:9f:2a:d0:ff:7f:7f:da:7d:ea:b1:ed:30:25:c1: 84:da:34:d2:5b:78:83:56:ec:9c:36:c3:26:e2:11:f6:67:49: 1d:92:ab:8c:fb:eb:ff:7a:ee:85:4a:a7:50:80:f0:a7:5c:4a: 94:2e:5f:05:99:3c:52:41:e0:cd:b4:63:cf:01:43:ba:9c:83: dc:8f:60:3b:f3:5a:b4:b4:7b:ae:da:0b:90:38:75:ef:81:1d: 66:d2:f7:57:70:36:b3:bf:fc:28:af:71:25:85:5b:13:fe:1e: 7f:5a:b4:3c SHA1 Fingerprint=B3:1E:B1:B7:40:E3:6C:84:02:DA:DC:37:D4:4D:F5:D4:67:49:52:F9 -----BEGIN CERTIFICATE----- MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi 94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP 9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m 0vdXcDazv/wor3ElhVsT/h5/WrQ8 -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 0a:01:01:01:00:00:02:7c:00:00:00:0a:00:00:00:02 Signature Algorithm: sha1WithRSAEncryption Issuer: O=RSA Security Inc, OU=RSA Security 2048 V3 Validity Not Before: Feb 22 20:39:23 2001 GMT Not After : Feb 22 20:39:23 2026 GMT Subject: O=RSA Security Inc, OU=RSA Security 2048 V3 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:b7:8f:55:71:d2:80:dd:7b:69:79:a7:f0:18:50: 32:3c:62:67:f6:0a:95:07:dd:e6:1b:f3:9e:d9:d2: 41:54:6b:ad:9f:7c:be:19:cd:fb:46:ab:41:68:1e: 18:ea:55:c8:2f:91:78:89:28:fb:27:29:60:ff:df: 8f:8c:3b:c9:49:9b:b5:a4:94:ce:01:ea:3e:b5:63: 7b:7f:26:fd:19:dd:c0:21:bd:84:d1:2d:4f:46:c3: 4e:dc:d8:37:39:3b:28:af:cb:9d:1a:ea:2b:af:21: a5:c1:23:22:b8:b8:1b:5a:13:87:57:83:d1:f0:20: e7:e8:4f:23:42:b0:00:a5:7d:89:e9:e9:61:73:94: 98:71:26:bc:2d:6a:e0:f7:4d:f0:f1:b6:2a:38:31: 81:0d:29:e1:00:c1:51:0f:4c:52:f8:04:5a:aa:7d: 72:d3:b8:87:2a:bb:63:10:03:2a:b3:a1:4f:0d:5a: 5e:46:b7:3d:0e:f5:74:ec:99:9f:f9:3d:24:81:88: a6:dd:60:54:e8:95:36:3d:c6:09:93:9a:a3:12:80: 00:55:99:19:47:bd:d0:a5:7c:c3:ba:fb:1f:f7:f5: 0f:f8:ac:b9:b5:f4:37:98:13:18:de:85:5b:b7:0c: 82:3b:87:6f:95:39:58:30:da:6e:01:68:17:22:cc: c0:0b Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:07:C3:51:30:A4:AA:E9:45:AE:35:24:FA:FF:24:2C:33:D0:B1:9D:8C X509v3 Subject Key Identifier: 07:C3:51:30:A4:AA:E9:45:AE:35:24:FA:FF:24:2C:33:D0:B1:9D:8C Signature Algorithm: sha1WithRSAEncryption 5f:3e:86:76:6e:b8:35:3c:4e:36:1c:1e:79:98:bf:fd:d5:12: 11:79:52:0e:ee:31:89:bc:dd:7f:f9:d1:c6:15:21:e8:8a:01: 54:0d:3a:fb:54:b9:d6:63:d4:b1:aa:96:4d:a2:42:4d:d4:53: 1f:8b:10:de:7f:65:be:60:13:27:71:88:a4:73:e3:84:63:d1: a4:55:e1:50:93:e6:1b:0e:79:d0:67:bc:46:c8:bf:3f:17:0d: 95:e6:c6:90:69:de:e7:b4:2f:de:95:7d:d0:12:3f:3d:3e:7f: 4d:3f:14:68:f5:11:50:d5:c1:f4:90:a5:08:1d:31:60:ff:60: 8c:23:54:0a:af:fe:a1:6e:c5:d1:7a:2a:68:78:cf:1e:82:0a: 20:b4:1f:ad:e5:85:b2:6a:68:75:4e:ad:25:37:94:85:be:bd: a1:d4:ea:b7:0c:4b:3c:9d:e8:12:00:f0:5f:ac:0d:e1:ac:70: 63:73:f7:7f:79:9f:32:25:42:74:05:80:28:bf:bd:c1:24:96: 58:15:b1:17:21:e9:89:4b:db:07:88:67:f4:15:ad:70:3e:2f: 4d:85:3b:c2:b7:db:fe:98:68:23:89:e1:74:0f:de:f4:c5:84: 63:29:1b:cc:cb:07:c9:00:a4:a9:d7:c2:22:4f:67:d7:77:ec: 20:05:61:de SHA1 Fingerprint=25:01:90:19:CF:FB:D9:99:1C:B7:68:25:74:8D:94:5F:30:93:95:42 -----BEGIN CERTIFICATE----- MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6 MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp dHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAX BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAy MDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt49VcdKA3Xtp eafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7Jylg /9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGl wSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnh AMFRD0xS+ARaqn1y07iHKrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2 PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpu AWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB BjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NR MKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYc HnmYv/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/ Zb5gEydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+ f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVO rSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEkllgVsRch 6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kApKnXwiJPZ9d3 7CAFYd4= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 144470 (0x23456) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=GeoTrust Inc., CN=GeoTrust Global CA Validity Not Before: May 21 04:00:00 2002 GMT Not After : May 21 04:00:00 2022 GMT Subject: C=US, O=GeoTrust Inc., CN=GeoTrust Global CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:da:cc:18:63:30:fd:f4:17:23:1a:56:7e:5b:df: 3c:6c:38:e4:71:b7:78:91:d4:bc:a1:d8:4c:f8:a8: 43:b6:03:e9:4d:21:07:08:88:da:58:2f:66:39:29: bd:05:78:8b:9d:38:e8:05:b7:6a:7e:71:a4:e6:c4: 60:a6:b0:ef:80:e4:89:28:0f:9e:25:d6:ed:83:f3: ad:a6:91:c7:98:c9:42:18:35:14:9d:ad:98:46:92: 2e:4f:ca:f1:87:43:c1:16:95:57:2d:50:ef:89:2d: 80:7a:57:ad:f2:ee:5f:6b:d2:00:8d:b9:14:f8:14: 15:35:d9:c0:46:a3:7b:72:c8:91:bf:c9:55:2b:cd: d0:97:3e:9c:26:64:cc:df:ce:83:19:71:ca:4e:e6: d4:d5:7b:a9:19:cd:55:de:c8:ec:d2:5e:38:53:e5: 5c:4f:8c:2d:fe:50:23:36:fc:66:e6:cb:8e:a4:39: 19:00:b7:95:02:39:91:0b:0e:fe:38:2e:d1:1d:05: 9a:f6:4d:3e:6f:0f:07:1d:af:2c:1e:8f:60:39:e2: fa:36:53:13:39:d4:5e:26:2b:db:3d:a8:14:bd:32: eb:18:03:28:52:04:71:e5:ab:33:3d:e1:38:bb:07: 36:84:62:9c:79:ea:16:30:f4:5f:c0:2b:e8:71:6b: e4:f9 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: C0:7A:98:68:8D:89:FB:AB:05:64:0C:11:7D:AA:7D:65:B8:CA:CC:4E X509v3 Authority Key Identifier: keyid:C0:7A:98:68:8D:89:FB:AB:05:64:0C:11:7D:AA:7D:65:B8:CA:CC:4E Signature Algorithm: sha1WithRSAEncryption 35:e3:29:6a:e5:2f:5d:54:8e:29:50:94:9f:99:1a:14:e4:8f: 78:2a:62:94:a2:27:67:9e:d0:cf:1a:5e:47:e9:c1:b2:a4:cf: dd:41:1a:05:4e:9b:4b:ee:4a:6f:55:52:b3:24:a1:37:0a:eb: 64:76:2a:2e:2c:f3:fd:3b:75:90:bf:fa:71:d8:c7:3d:37:d2: b5:05:95:62:b9:a6:de:89:3d:36:7b:38:77:48:97:ac:a6:20: 8f:2e:a6:c9:0c:c2:b2:99:45:00:c7:ce:11:51:22:22:e0:a5: ea:b6:15:48:09:64:ea:5e:4f:74:f7:05:3e:c7:8a:52:0c:db: 15:b4:bd:6d:9b:e5:c6:b1:54:68:a9:e3:69:90:b6:9a:a5:0f: b8:b9:3f:20:7d:ae:4a:b5:b8:9c:e4:1d:b6:ab:e6:94:a5:c1: c7:83:ad:db:f5:27:87:0e:04:6c:d5:ff:dd:a0:5d:ed:87:52: b7:2b:15:02:ae:39:a6:6a:74:e9:da:c4:e7:bc:4d:34:1e:a9: 5c:4d:33:5f:92:09:2f:88:66:5d:77:97:c7:1d:76:13:a9:d5: e5:f1:16:09:11:35:d5:ac:db:24:71:70:2c:98:56:0b:d9:17: b4:d1:e3:51:2b:5e:75:e8:d5:d0:dc:4f:34:ed:c2:05:66:80: a1:cb:e6:33 SHA1 Fingerprint=DE:28:F4:A4:FF:E5:B9:2F:A3:C5:03:D1:A3:49:A7:F9:96:2A:82:12 -----BEGIN CERTIFICATE----- MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU 1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV 5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=GeoTrust Inc., CN=GeoTrust Global CA 2 Validity Not Before: Mar 4 05:00:00 2004 GMT Not After : Mar 4 05:00:00 2019 GMT Subject: C=US, O=GeoTrust Inc., CN=GeoTrust Global CA 2 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:ef:3c:4d:40:3d:10:df:3b:53:00:e1:67:fe:94: 60:15:3e:85:88:f1:89:0d:90:c8:28:23:99:05:e8: 2b:20:9d:c6:f3:60:46:d8:c1:b2:d5:8c:31:d9:dc: 20:79:24:81:bf:35:32:fc:63:69:db:b1:2a:6b:ee: 21:58:f2:08:e9:78:cb:6f:cb:fc:16:52:c8:91:c4: ff:3d:73:de:b1:3e:a7:c2:7d:66:c1:f5:7e:52:24: 1a:e2:d5:67:91:d0:82:10:d7:78:4b:4f:2b:42:39: bd:64:2d:40:a0:b0:10:d3:38:48:46:88:a1:0c:bb: 3a:33:2a:62:98:fb:00:9d:13:59:7f:6f:3b:72:aa: ee:a6:0f:86:f9:05:61:ea:67:7f:0c:37:96:8b:e6: 69:16:47:11:c2:27:59:03:b3:a6:60:c2:21:40:56: fa:a0:c7:7d:3a:13:e3:ec:57:c7:b3:d6:ae:9d:89: 80:f7:01:e7:2c:f6:96:2b:13:0d:79:2c:d9:c0:e4: 86:7b:4b:8c:0c:72:82:8a:fb:17:cd:00:6c:3a:13: 3c:b0:84:87:4b:16:7a:29:b2:4f:db:1d:d4:0b:f3: 66:37:bd:d8:f6:57:bb:5e:24:7a:b8:3c:8b:b9:fa: 92:1a:1a:84:9e:d8:74:8f:aa:1b:7f:5e:f4:fe:45: 22:21 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 71:38:36:F2:02:31:53:47:2B:6E:BA:65:46:A9:10:15:58:20:05:09 X509v3 Authority Key Identifier: keyid:71:38:36:F2:02:31:53:47:2B:6E:BA:65:46:A9:10:15:58:20:05:09 X509v3 Key Usage: critical Digital Signature, Certificate Sign, CRL Sign Signature Algorithm: sha1WithRSAEncryption 03:f7:b5:2b:ab:5d:10:fc:7b:b2:b2:5e:ac:9b:0e:7e:53:78: 59:3e:42:04:fe:75:a3:ad:ac:81:4e:d7:02:8b:5e:c4:2d:c8: 52:76:c7:2c:1f:fc:81:32:98:d1:4b:c6:92:93:33:35:31:2f: fc:d8:1d:44:dd:e0:81:7f:9d:e9:8b:e1:64:91:62:0b:39:08: 8c:ac:74:9d:59:d9:7a:59:52:97:11:b9:16:7b:6f:45:d3:96: d9:31:7d:02:36:0f:9c:3b:6e:cf:2c:0d:03:46:45:eb:a0:f4: 7f:48:44:c6:08:40:cc:de:1b:70:b5:29:ad:ba:8b:3b:34:65: 75:1b:71:21:1d:2c:14:0a:b0:96:95:b8:d6:ea:f2:65:fb:29: ba:4f:ea:91:93:74:69:b6:f2:ff:e1:1a:d0:0c:d1:76:85:cb: 8a:25:bd:97:5e:2c:6f:15:99:26:e7:b6:29:ff:22:ec:c9:02: c7:56:00:cd:49:b9:b3:6c:7b:53:04:1a:e2:a8:c9:aa:12:05: 23:c2:ce:e7:bb:04:02:cc:c0:47:a2:e4:c4:29:2f:5b:45:57: 89:51:ee:3c:eb:52:08:ff:07:35:1e:9f:35:6a:47:4a:56:98: d1:5a:85:1f:8c:f5:22:bf:ab:ce:83:f3:e2:22:29:ae:7d:83: 40:a8:ba:6c SHA1 Fingerprint=A9:E9:78:08:14:37:58:88:F2:05:19:B0:6D:2B:0D:2B:60:16:90:7D -----BEGIN CERTIFICATE----- MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8 Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL 5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7 S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe 2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv /NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0 abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz 4iIprn2DQKi6bA== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=GeoTrust Inc., CN=GeoTrust Universal CA Validity Not Before: Mar 4 05:00:00 2004 GMT Not After : Mar 4 05:00:00 2029 GMT Subject: C=US, O=GeoTrust Inc., CN=GeoTrust Universal CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:a6:15:55:a0:a3:c6:e0:1f:8c:9d:21:50:d7:c1: be:2b:5b:b5:a4:9e:a1:d9:72:58:bd:00:1b:4c:bf: 61:c9:14:1d:45:82:ab:c6:1d:80:d6:3d:eb:10:9c: 3a:af:6d:24:f8:bc:71:01:9e:06:f5:7c:5f:1e:c1: 0e:55:ca:83:9a:59:30:ae:19:cb:30:48:95:ed:22: 37:8d:f4:4a:9a:72:66:3e:ad:95:c0:e0:16:00:e0: 10:1f:2b:31:0e:d7:94:54:d3:42:33:a0:34:1d:1e: 45:76:dd:4f:ca:18:37:ec:85:15:7a:19:08:fc:d5: c7:9c:f0:f2:a9:2e:10:a9:92:e6:3d:58:3d:a9:16: 68:3c:2f:75:21:18:7f:28:77:a5:e1:61:17:b7:a6: e9:f8:1e:99:db:73:6e:f4:0a:a2:21:6c:ee:da:aa: 85:92:66:af:f6:7a:6b:82:da:ba:22:08:35:0f:cf: 42:f1:35:fa:6a:ee:7e:2b:25:cc:3a:11:e4:6d:af: 73:b2:76:1d:ad:d0:b2:78:67:1a:a4:39:1c:51:0b: 67:56:83:fd:38:5d:0d:ce:dd:f0:bb:2b:96:1f:de: 7b:32:52:fd:1d:bb:b5:06:a1:b2:21:5e:a5:d6:95: 68:7f:f0:99:9e:dc:45:08:3e:e7:d2:09:0d:35:94: dd:80:4e:53:97:d7:b5:09:44:20:64:16:17:03:02: 4c:53:0d:68:de:d5:aa:72:4d:93:6d:82:0e:db:9c: bd:cf:b4:f3:5c:5d:54:7a:69:09:96:d6:db:11:c1: 8d:75:a8:b4:cf:39:c8:ce:3c:bc:24:7c:e6:62:ca: e1:bd:7d:a7:bd:57:65:0b:e4:fe:25:ed:b6:69:10: dc:28:1a:46:bd:01:1d:d0:97:b5:e1:98:3b:c0:37: 64:d6:3d:94:ee:0b:e1:f5:28:ae:0b:56:bf:71:8b: 23:29:41:8e:86:c5:4b:52:7b:d8:71:ab:1f:8a:15: a6:3b:83:5a:d7:58:01:51:c6:4c:41:d9:7f:d8:41: 67:72:a2:28:df:60:83:a9:9e:c8:7b:fc:53:73:72: 59:f5:93:7a:17:76:0e:ce:f7:e5:5c:d9:0b:55:34: a2:aa:5b:b5:6a:54:e7:13:ca:57:ec:97:6d:f4:5e: 06:2f:45:8b:58:d4:23:16:92:e4:16:6e:28:63:59: 30:df:50:01:9c:63:89:1a:9f:db:17:94:82:70:37: c3:24:9e:9a:47:d6:5a:ca:4e:a8:69:89:72:1f:91: 6c:db:7e:9e:1b:ad:c7:1f:73:dd:2c:4f:19:65:fd: 7f:93:40:10:2e:d2:f0:ed:3c:9e:2e:28:3e:69:26: 33:c5:7b Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: DA:BB:2E:AA:B0:0C:B8:88:26:51:74:5C:6D:03:D3:C0:D8:8F:7A:D6 X509v3 Authority Key Identifier: keyid:DA:BB:2E:AA:B0:0C:B8:88:26:51:74:5C:6D:03:D3:C0:D8:8F:7A:D6 X509v3 Key Usage: critical Digital Signature, Certificate Sign, CRL Sign Signature Algorithm: sha1WithRSAEncryption 31:78:e6:c7:b5:df:b8:94:40:c9:71:c4:a8:35:ec:46:1d:c2: 85:f3:28:58:86:b0:0b:fc:8e:b2:39:8f:44:55:ab:64:84:5c: 69:a9:d0:9a:38:3c:fa:e5:1f:35:e5:44:e3:80:79:94:68:a4: bb:c4:9f:3d:e1:34:cd:30:46:8b:54:2b:95:a5:ef:f7:3f:99: 84:fd:35:e6:cf:31:c6:dc:6a:bf:a7:d7:23:08:e1:98:5e:c3: 5a:08:76:a9:a6:af:77:2f:b7:60:bd:44:46:6a:ef:97:ff:73: 95:c1:8e:e8:93:fb:fd:31:b7:ec:57:11:11:45:9b:30:f1:1a: 88:39:c1:4f:3c:a7:00:d5:c7:fc:ab:6d:80:22:70:a5:0c:e0: 5d:04:29:02:fb:cb:a0:91:d1:7c:d6:c3:7e:50:d5:9d:58:be: 41:38:eb:b9:75:3c:15:d9:9b:c9:4a:83:59:c0:da:53:fd:33: bb:36:18:9b:85:0f:15:dd:ee:2d:ac:76:93:b9:d9:01:8d:48: 10:a8:fb:f5:38:86:f1:db:0a:c6:bd:84:a3:23:41:de:d6:77: 6f:85:d4:85:1c:50:e0:ae:51:8a:ba:8d:3e:76:e2:b9:ca:27: f2:5f:9f:ef:6e:59:0d:06:d8:2b:17:a4:d2:7c:6b:bb:5f:14: 1a:48:8f:1a:4c:e7:b3:47:1c:8e:4c:45:2b:20:ee:48:df:e7: dd:09:8e:18:a8:da:40:8d:92:26:11:53:61:73:5d:eb:bd:e7: c4:4d:29:37:61:eb:ac:39:2d:67:2e:16:d6:f5:00:83:85:a1: cc:7f:76:c4:7d:e4:b7:4b:66:ef:03:45:60:69:b6:0c:52:96: 92:84:5e:a6:a3:b5:a4:3e:2b:d9:cc:d8:1b:47:aa:f2:44:da: 4f:f9:03:e8:f0:14:cb:3f:f3:83:de:d0:c1:54:e3:b7:e8:0a: 37:4d:8b:20:59:03:30:19:a1:2c:c8:bd:11:1f:df:ae:c9:4a: c5:f3:27:66:66:86:ac:68:91:ff:d9:e6:53:1c:0f:8b:5c:69: 65:0a:26:c8:1e:34:c3:5d:51:7b:d7:a9:9c:06:a1:36:dd:d5: 89:94:bc:d9:e4:2d:0c:5e:09:6c:08:97:7c:a3:3d:7c:93:ff: 3f:a1:14:a7:cf:b5:5d:eb:db:db:1c:c4:76:df:88:b9:bd:45: 05:95:1b:ae:fc:46:6a:4c:af:48:e3:ce:ae:0f:d2:7e:eb:e6: 6c:9c:4f:81:6a:7a:64:ac:bb:3e:d5:e7:cb:76:2e:c5:a7:48: c1:5c:90:0f:cb:c8:3f:fa:e6:32:e1:8d:1b:6f:a4:e6:8e:d8: f9:29:48:8a:ce:73:fe:2c SHA1 Fingerprint=E6:21:F3:35:43:79:05:9A:4B:68:30:9D:8A:2F:74:22:15:87:EC:79 -----BEGIN CERTIFICATE----- MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0 IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8 cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+ nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB /wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG 9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9 ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=GeoTrust Inc., CN=GeoTrust Universal CA 2 Validity Not Before: Mar 4 05:00:00 2004 GMT Not After : Mar 4 05:00:00 2029 GMT Subject: C=US, O=GeoTrust Inc., CN=GeoTrust Universal CA 2 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:b3:54:52:c1:c9:3e:f2:d9:dc:b1:53:1a:59:29: e7:b1:c3:45:28:e5:d7:d1:ed:c5:c5:4b:a1:aa:74: 7b:57:af:4a:26:fc:d8:f5:5e:a7:6e:19:db:74:0c: 4f:35:5b:32:0b:01:e3:db:eb:7a:77:35:ea:aa:5a: e0:d6:e8:a1:57:94:f0:90:a3:74:56:94:44:30:03: 1e:5c:4e:2b:85:26:74:82:7a:0c:76:a0:6f:4d:ce: 41:2d:a0:15:06:14:5f:b7:42:cd:7b:8f:58:61:34: dc:2a:08:f9:2e:c3:01:a6:22:44:1c:4c:07:82:e6: 5b:ce:d0:4a:7c:04:d3:19:73:27:f0:aa:98:7f:2e: af:4e:eb:87:1e:24:77:6a:5d:b6:e8:5b:45:ba:dc: c3:a1:05:6f:56:8e:8f:10:26:a5:49:c3:2e:d7:41: 87:22:e0:4f:86:ca:60:b5:ea:a1:63:c0:01:97:10: 79:bd:00:3c:12:6d:2b:15:b1:ac:4b:b1:ee:18:b9: 4e:96:dc:dc:76:ff:3b:be:cf:5f:03:c0:fc:3b:e8: be:46:1b:ff:da:40:c2:52:f7:fe:e3:3a:f7:6a:77: 35:d0:da:8d:eb:5e:18:6a:31:c7:1e:ba:3c:1b:28: d6:6b:54:c6:aa:5b:d7:a2:2c:1b:19:cc:a2:02:f6: 9b:59:bd:37:6b:86:b5:6d:82:ba:d8:ea:c9:56:bc: a9:36:58:fd:3e:19:f3:ed:0c:26:a9:93:38:f8:4f: c1:5d:22:06:d0:97:ea:e1:ad:c6:55:e0:81:2b:28: 83:3a:fa:f4:7b:21:51:00:be:52:38:ce:cd:66:79: a8:f4:81:56:e2:d0:83:09:47:51:5b:50:6a:cf:db: 48:1a:5d:3e:f7:cb:f6:65:f7:6c:f1:95:f8:02:3b: 32:56:82:39:7a:5b:bd:2f:89:1b:bf:a1:b4:e8:ff: 7f:8d:8c:df:03:f1:60:4e:58:11:4c:eb:a3:3f:10: 2b:83:9a:01:73:d9:94:6d:84:00:27:66:ac:f0:70: 40:09:42:92:ad:4f:93:0d:61:09:51:24:d8:92:d5: 0b:94:61:b2:87:b2:ed:ff:9a:35:ff:85:54:ca:ed: 44:43:ac:1b:3c:16:6b:48:4a:0a:1c:40:88:1f:92: c2:0b:00:05:ff:f2:c8:02:4a:a4:aa:a9:cc:99:96: 9c:2f:58:e0:7d:e1:be:bb:07:dc:5f:04:72:5c:31: 34:c3:ec:5f:2d:e0:3d:64:90:22:e6:d1:ec:b8:2e: dd:59:ae:d9:a1:37:bf:54:35:dc:73:32:4f:8c:04: 1e:33:b2:c9:46:f1:d8:5c:c8:55:50:c9:68:bd:a8: ba:36:09 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 76:F3:55:E1:FA:A4:36:FB:F0:9F:5C:62:71:ED:3C:F4:47:38:10:2B X509v3 Authority Key Identifier: keyid:76:F3:55:E1:FA:A4:36:FB:F0:9F:5C:62:71:ED:3C:F4:47:38:10:2B X509v3 Key Usage: critical Digital Signature, Certificate Sign, CRL Sign Signature Algorithm: sha1WithRSAEncryption 66:c1:c6:23:f3:d9:e0:2e:6e:5f:e8:cf:ae:b0:b0:25:4d:2b: f8:3b:58:9b:40:24:37:5a:cb:ab:16:49:ff:b3:75:79:33:a1: 2f:6d:70:17:34:91:fe:67:7e:8f:ec:9b:e5:5e:82:a9:55:1f: 2f:dc:d4:51:07:12:fe:ac:16:3e:2c:35:c6:63:fc:dc:10:eb: 0d:a3:aa:d0:7c:cc:d1:d0:2f:51:2e:c4:14:5a:de:e8:19:e1: 3e:c6:cc:a4:29:e7:2e:84:aa:06:30:78:76:54:73:28:98:59: 38:e0:00:0d:62:d3:42:7d:21:9f:ae:3d:3a:8c:d5:fa:77:0d: 18:2b:16:0e:5f:36:e1:fc:2a:b5:30:24:cf:e0:63:0c:7b:58: 1a:fe:99:ba:42:12:b1:91:f4:7c:68:e2:c8:e8:af:2c:ea:c9: 7e:ae:bb:2a:3d:0d:15:dc:34:95:b6:18:74:a8:6a:0f:c7:b4: f4:13:c4:e4:5b:ed:0a:d2:a4:97:4c:2a:ed:2f:6c:12:89:3d: f1:27:70:aa:6a:03:52:21:9f:40:a8:67:50:f2:f3:5a:1f:df: df:23:f6:dc:78:4e:e6:98:4f:55:3a:53:e3:ef:f2:f4:9f:c7: 7c:d8:58:af:29:22:97:b8:e0:bd:91:2e:b0:76:ec:57:11:cf: ef:29:44:f3:e9:85:7a:60:63:e4:5d:33:89:17:d9:31:aa:da: d6:f3:18:35:72:cf:87:2b:2f:63:23:84:5d:84:8c:3f:57:a0: 88:fc:99:91:28:26:69:99:d4:8f:97:44:be:8e:d5:48:b1:a4: 28:29:f1:15:b4:e1:e5:9e:dd:f8:8f:a6:6f:26:d7:09:3c:3a: 1c:11:0e:a6:6c:37:f7:ad:44:87:2c:28:c7:d8:74:82:b3:d0: 6f:4a:57:bb:35:29:27:a0:8b:e8:21:a7:87:64:36:5d:cc:d8: 16:ac:c7:b2:27:40:92:55:38:28:8d:51:6e:dd:14:67:53:6c: 71:5c:26:84:4d:75:5a:b6:7e:60:56:a9:4d:ad:fb:9b:1e:97: f3:0d:d9:d2:97:54:77:da:3d:12:b7:e0:1e:ef:08:06:ac:f9: 85:87:e9:a2:dc:af:7e:18:12:83:fd:56:17:41:2e:d5:29:82: 7d:99:f4:31:f6:71:a9:cf:2c:01:27:a5:05:b9:aa:b2:48:4e: 2a:ef:9f:93:52:51:95:3c:52:73:8e:56:4c:17:40:c0:09:28: e4:8b:6a:48:53:db:ec:cd:55:55:f1:c6:f8:e9:a2:2c:4c:a6: d1:26:5f:7e:af:5a:4c:da:1f:a6:f2:1c:2c:7e:ae:02:16:d2: 56:d0:2f:57:53:47:e8:92 SHA1 Fingerprint=37:9A:19:7B:41:85:45:35:0C:A6:03:69:F3:3C:2E:AF:47:4F:20:79 -----BEGIN CERTIFICATE----- MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1 c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81 WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73 y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4 Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m 1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH 6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 44:be:0c:8b:50:00:24:b4:11:d3:36:30:4b:c0:33:77 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Network Applications Validity Not Before: Jul 9 18:48:39 1999 GMT Not After : Jul 9 18:57:49 2019 GMT Subject: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Network Applications Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:b3:fb:91:a1:e4:36:55:85:ac:06:34:5b:a0:9a: 58:b2:f8:b5:0f:05:77:83:ae:32:b1:76:92:68:ec: 23:4a:c9:76:3f:e3:9c:b6:37:79:03:b9:ab:69:8d: 07:25:b6:19:67:e4:b0:1b:18:73:61:4a:e8:7e:cd: d3:2f:64:e3:a6:7c:0c:fa:17:80:a3:0d:47:89:4f: 51:71:2f:ee:fc:3f:f9:b8:16:80:87:89:93:25:20: 9a:43:82:69:24:76:28:59:35:a1:1d:c0:7f:83:06: 64:16:20:2c:d3:49:a4:85:b4:c0:61:7f:51:08:f8: 68:15:91:80:cb:a5:d5:ee:3b:3a:f4:84:04:5e:60: 59:a7:8c:34:72:ee:b8:78:c5:d1:3b:12:4a:6f:7e: 65:27:b9:a4:55:c5:b9:6f:43:a4:c5:1d:2c:99:c0: 52:a4:78:4c:15:b3:40:98:08:6b:43:c6:01:b0:7a: 7b:f5:6b:1c:22:3f:cb:ef:ff:a8:d0:3a:4b:76:15: 9e:d2:d1:c6:2e:e3:db:57:1b:32:a2:b8:6f:e8:86: a6:3f:70:ab:e5:70:92:ab:44:1e:40:50:fb:9c:a3: 62:e4:6c:6e:a0:c8:de:e2:80:42:fa:e9:2f:e8:ce: 32:04:8f:7c:8d:b7:1c:a3:35:3c:15:dd:9e:c3:ae: 97:a5 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: Digital Signature, Non Repudiation, Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: FA:86:C9:DB:E0:BA:E9:78:F5:4B:A8:D6:15:DF:F0:D3:E1:6A:14:3C X509v3 CRL Distribution Points: Full Name: URI:http://crl.usertrust.com/UTN-USERFirst-NetworkApplications.crl Signature Algorithm: sha1WithRSAEncryption a4:f3:25:cc:d1:d4:91:83:22:d0:cc:32:ab:9b:96:4e:34:91: 54:20:25:34:61:5f:2a:02:15:e1:8b:aa:ff:7d:64:51:cf:0a: ff:bc:7d:d8:21:6a:78:cb:2f:51:6f:f8:42:1d:33:bd:eb:b5: 7b:94:c3:c3:a9:a0:2d:df:d1:29:1f:1d:fe:8f:3f:bb:a8:45: 2a:7f:d1:6e:55:24:e2:bb:02:fb:31:3f:be:e8:bc:ec:40:2b: f8:01:d4:56:38:e4:ca:44:82:b5:61:20:21:67:65:f6:f0:0b: e7:34:f8:a5:c2:9c:a3:5c:40:1f:85:93:95:06:de:4f:d4:27: a9:b6:a5:fc:16:cd:73:31:3f:b8:65:27:cf:d4:53:1a:f0:ac: 6e:9f:4f:05:0c:03:81:a7:84:29:c4:5a:bd:64:57:72:ad:3b: cf:37:18:a6:98:c6:ad:06:b4:dc:08:a3:04:d5:29:a4:96:9a: 12:67:4a:8c:60:45:9d:f1:23:9a:b0:00:9c:68:b5:98:50:d3: ef:8e:2e:92:65:b1:48:3e:21:be:15:30:2a:0d:b5:0c:a3:6b: 3f:ae:7f:57:f5:1f:96:7c:df:6f:dd:82:30:2c:65:1b:40:4a: cd:68:b9:72:ec:71:76:ec:54:8e:1f:85:0c:01:6a:fa:a6:38: ac:1f:c4:84 SHA1 Fingerprint=5D:98:9C:DB:15:96:11:36:51:65:64:1B:56:0F:DB:EA:2A:C2:3E:F1 -----BEGIN CERTIFICATE----- MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCB ozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3Qt TmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5WhcNMTkwNzA5MTg1 NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0 IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYD VQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VS Rmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IB DwAwggEKAoIBAQCz+5Gh5DZVhawGNFugmliy+LUPBXeDrjKxdpJo7CNKyXY/45y2 N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4CjDUeJT1FxL+78P/m4FoCH iZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXuOzr0hARe YFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1 axwiP8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6g yN7igEL66S/ozjIEj3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQD AgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPh ahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9V VE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0GCSqGSIb3DQEB BQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6Lzs QCv4AdRWOOTKRIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4 ZSfP1FMa8Kxun08FDAOBp4QpxFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qM YEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAqDbUMo2s/rn9X9R+WfN9v3YIwLGUb QErNaLly7HF27FSOH4UMAWr6pjisH8SE -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=America Online Inc., CN=America Online Root Certification Authority 1 Validity Not Before: May 28 06:00:00 2002 GMT Not After : Nov 19 20:43:00 2037 GMT Subject: C=US, O=America Online Inc., CN=America Online Root Certification Authority 1 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:a8:2f:e8:a4:69:06:03:47:c3:e9:2a:98:ff:19: a2:70:9a:c6:50:b2:7e:a5:df:68:4d:1b:7c:0f:b6: 97:68:7d:2d:a6:8b:97:e9:64:86:c9:a3:ef:a0:86: bf:60:65:9c:4b:54:88:c2:48:c5:4a:39:bf:14:e3: 59:55:e5:19:b4:74:c8:b4:05:39:5c:16:a5:e2:95: 05:e0:12:ae:59:8b:a2:33:68:58:1c:a6:d4:15:b7: d8:9f:d7:dc:71:ab:7e:9a:bf:9b:8e:33:0f:22:fd: 1f:2e:e7:07:36:ef:62:39:c5:dd:cb:ba:25:14:23: de:0c:c6:3d:3c:ce:82:08:e6:66:3e:da:51:3b:16: 3a:a3:05:7f:a0:dc:87:d5:9c:fc:72:a9:a0:7d:78: e4:b7:31:55:1e:65:bb:d4:61:b0:21:60:ed:10:32: 72:c5:92:25:1e:f8:90:4a:18:78:47:df:7e:30:37: 3e:50:1b:db:1c:d3:6b:9a:86:53:07:b0:ef:ac:06: 78:f8:84:99:fe:21:8d:4c:80:b6:0c:82:f6:66:70: 79:1a:d3:4f:a3:cf:f1:cf:46:b0:4b:0f:3e:dd:88: 62:b8:8c:a9:09:28:3b:7a:c7:97:e1:1e:e5:f4:9f: c0:c0:ae:24:a0:c8:a1:d9:0f:d6:7b:26:82:69:32: 3d:a7 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 00:AD:D9:A3:F6:79:F6:6E:74:A9:7F:33:3D:81:17:D7:4C:CF:33:DE X509v3 Authority Key Identifier: keyid:00:AD:D9:A3:F6:79:F6:6E:74:A9:7F:33:3D:81:17:D7:4C:CF:33:DE X509v3 Key Usage: critical Digital Signature, Certificate Sign, CRL Sign Signature Algorithm: sha1WithRSAEncryption 7c:8a:d1:1f:18:37:82:e0:b8:b0:a3:ed:56:95:c8:62:61:9c: 05:a2:cd:c2:62:26:61:cd:10:16:d7:cc:b4:65:34:d0:11:8a: ad:a8:a9:05:66:ef:74:f3:6d:5f:9d:99:af:f6:8b:fb:eb:52: b2:05:98:a2:6f:2a:c5:54:bd:25:bd:5f:ae:c8:86:ea:46:2c: c1:b3:bd:c1:e9:49:70:18:16:97:08:13:8c:20:e0:1b:2e:3a: 47:cb:1e:e4:00:30:95:5b:f4:45:a3:c0:1a:b0:01:4e:ab:bd: c0:23:6e:63:3f:80:4a:c5:07:ed:dc:e2:6f:c7:c1:62:f1:e3: 72:d6:04:c8:74:67:0b:fa:88:ab:a1:01:c8:6f:f0:14:af:d2: 99:cd:51:93:7e:ed:2e:38:c7:bd:ce:46:50:3d:72:e3:79:25: 9d:9b:88:2b:10:20:dd:a5:b8:32:9f:8d:e0:29:df:21:74:86: 82:db:2f:82:30:c6:c7:35:86:b3:f9:96:5f:46:db:0c:45:fd: f3:50:c3:6f:c6:c3:48:ad:46:a6:e1:27:47:0a:1d:0e:9b:b6: c2:77:7f:63:f2:e0:7d:1a:be:fc:e0:df:d7:c7:a7:6c:b0:f9: ae:ba:3c:fd:74:b4:11:e8:58:0d:80:bc:d3:a8:80:3a:99:ed: 75:cc:46:7b SHA1 Fingerprint=39:21:C1:15:C1:5D:0E:CA:5C:CB:5B:C4:F0:7D:21:D8:05:0B:56:6A -----BEGIN CERTIFICATE----- MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2 MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym 1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb 2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7 -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=America Online Inc., CN=America Online Root Certification Authority 2 Validity Not Before: May 28 06:00:00 2002 GMT Not After : Sep 29 14:08:00 2037 GMT Subject: C=US, O=America Online Inc., CN=America Online Root Certification Authority 2 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:cc:41:45:1d:e9:3d:4d:10:f6:8c:b1:41:c9:e0: 5e:cb:0d:b7:bf:47:73:d3:f0:55:4d:dd:c6:0c:fa: b1:66:05:6a:cd:78:b4:dc:02:db:4e:81:f3:d7:a7: 7c:71:bc:75:63:a0:5d:e3:07:0c:48:ec:25:c4:03: 20:f4:ff:0e:3b:12:ff:9b:8d:e1:c6:d5:1b:b4:6d: 22:e3:b1:db:7f:21:64:af:86:bc:57:22:2a:d6:47: 81:57:44:82:56:53:bd:86:14:01:0b:fc:7f:74:a4: 5a:ae:f1:ba:11:b5:9b:58:5a:80:b4:37:78:09:33: 7c:32:47:03:5c:c4:a5:83:48:f4:57:56:6e:81:36: 27:18:4f:ec:9b:28:c2:d4:b4:d7:7c:0c:3e:0c:2b: df:ca:04:d7:c6:8e:ea:58:4e:a8:a4:a5:18:1c:6c: 45:98:a3:41:d1:2d:d2:c7:6d:8d:19:f1:ad:79:b7: 81:3f:bd:06:82:27:2d:10:58:05:b5:78:05:b9:2f: db:0c:6b:90:90:7e:14:59:38:bb:94:24:13:e5:d1: 9d:14:df:d3:82:4d:46:f0:80:39:52:32:0f:e3:84: b2:7a:43:f2:5e:de:5f:3f:1d:dd:e3:b2:1b:a0:a1: 2a:23:03:6e:2e:01:15:87:5c:a6:75:75:c7:97:61: be:de:86:dc:d4:48:db:bd:2a:bf:4a:55:da:e8:7d: 50:fb:b4:80:17:b8:94:bf:01:3d:ea:da:ba:7c:e0: 58:67:17:b9:58:e0:88:86:46:67:6c:9d:10:47:58: 32:d0:35:7c:79:2a:90:a2:5a:10:11:23:35:ad:2f: cc:e4:4a:5b:a7:c8:27:f2:83:de:5e:bb:5e:77:e7: e8:a5:6e:63:c2:0d:5d:61:d0:8c:d2:6c:5a:21:0e: ca:28:a3:ce:2a:e9:95:c7:48:cf:96:6f:1d:92:25: c8:c6:c6:c1:c1:0c:05:ac:26:c4:d2:75:d2:e1:2a: 67:c0:3d:5b:a5:9a:eb:cf:7b:1a:a8:9d:14:45:e5: 0f:a0:9a:65:de:2f:28:bd:ce:6f:94:66:83:48:29: d8:ea:65:8c:af:93:d9:64:9f:55:57:26:bf:6f:cb: 37:31:99:a3:60:bb:1c:ad:89:34:32:62:b8:43:21: 06:72:0c:a1:5c:6d:46:c5:fa:29:cf:30:de:89:dc: 71:5b:dd:b6:37:3e:df:50:f5:b8:07:25:26:e5:bc: b5:fe:3c:02:b3:b7:f8:be:43:c1:87:11:94:9e:23: 6c:17:8a:b8:8a:27:0c:54:47:f0:a9:b3:c0:80:8c: a0:27:eb:1d:19:e3:07:8e:77:70:ca:2b:f4:7d:76: e0:78:67 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 4D:45:C1:68:38:BB:73:A9:69:A1:20:E7:ED:F5:22:A1:23:14:D7:9E X509v3 Authority Key Identifier: keyid:4D:45:C1:68:38:BB:73:A9:69:A1:20:E7:ED:F5:22:A1:23:14:D7:9E X509v3 Key Usage: critical Digital Signature, Certificate Sign, CRL Sign Signature Algorithm: sha1WithRSAEncryption 67:6b:06:b9:5f:45:3b:2a:4b:33:b3:e6:1b:6b:59:4e:22:cc: b9:b7:a4:25:c9:a7:c4:f0:54:96:0b:64:f3:b1:58:4f:5e:51: fc:b2:97:7b:27:65:c2:e5:ca:e7:0d:0c:25:7b:62:e3:fa:9f: b4:87:b7:45:46:af:83:a5:97:48:8c:a5:bd:f1:16:2b:9b:76: 2c:7a:35:60:6c:11:80:97:cc:a9:92:52:e6:2b:e6:69:ed:a9: f8:36:2d:2c:77:bf:61:48:d1:63:0b:b9:5b:52:ed:18:b0:43: 42:22:a6:b1:77:ae:de:69:c5:cd:c7:1c:a1:b1:a5:1c:10:fb: 18:be:1a:70:dd:c1:92:4b:be:29:5a:9d:3f:35:be:e5:7d:51: f8:55:e0:25:75:23:87:1e:5c:dc:ba:9d:b0:ac:b3:69:db:17: 83:c9:f7:de:0c:bc:08:dc:91:9e:a8:d0:d7:15:37:73:a5:35: b8:fc:7e:c5:44:40:06:c3:eb:f8:22:80:5c:47:ce:02:e3:11: 9f:44:ff:fd:9a:32:cc:7d:64:51:0e:eb:57:26:76:3a:e3:1e: 22:3c:c2:a6:36:dd:19:ef:a7:fc:12:f3:26:c0:59:31:85:4c: 9c:d8:cf:df:a4:cc:cc:29:93:ff:94:6d:76:5c:13:08:97:f2: ed:a5:0b:4d:dd:e8:c9:68:0e:66:d3:00:0e:33:12:5b:bc:95: e5:32:90:a8:b3:c6:6c:83:ad:77:ee:8b:7e:7e:b1:a9:ab:d3: e1:f1:b6:c0:b1:ea:88:c0:e7:d3:90:e9:28:92:94:7b:68:7b: 97:2a:0a:67:2d:85:02:38:10:e4:03:61:d4:da:25:36:c7:08: 58:2d:a1:a7:51:af:30:0a:49:f5:a6:69:87:07:2d:44:46:76: 8e:2a:e5:9a:3b:d7:18:a2:fc:9c:38:10:cc:c6:3b:d2:b5:17: 3a:6f:fd:ae:25:bd:f5:72:59:64:b1:74:2a:38:5f:18:4c:df: cf:71:04:5a:36:d4:bf:2f:99:9c:e8:d9:ba:b1:95:e6:02:4b: 21:a1:5b:d5:c1:4f:8f:ae:69:6d:53:db:01:93:b5:5c:1e:18: dd:64:5a:ca:18:28:3e:63:04:11:fd:1c:8d:00:0f:b8:37:df: 67:8a:9d:66:a9:02:6a:91:ff:13:ca:2f:5d:83:bc:87:93:6c: dc:24:51:16:04:25:66:fa:b3:d9:c2:ba:29:be:9a:48:38:82: 99:f4:bf:3b:4a:31:19:f9:bf:8e:21:33:14:ca:4f:54:5f:fb: ce:fb:8f:71:7f:fd:5e:19:a0:0f:4b:91:b8:c4:54:bc:06:b0: 45:8f:26:91:a2:8e:fe:a9 SHA1 Fingerprint=85:B5:FF:67:9B:0C:79:96:1F:C8:6E:44:22:00:46:13:DB:17:92:84 -----BEGIN CERTIFICATE----- MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2 MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC 206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2 JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9 BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67 Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3 +L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2 LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8 CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw RY8mkaKO/qk= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 13:86:35:4d:1d:3f:06:f2:c1:f9:65:05:d5:90:1c:62 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VISA, OU=Visa International Service Association, CN=Visa eCommerce Root Validity Not Before: Jun 26 02:18:36 2002 GMT Not After : Jun 24 00:16:12 2022 GMT Subject: C=US, O=VISA, OU=Visa International Service Association, CN=Visa eCommerce Root Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:af:57:de:56:1e:6e:a1:da:60:b1:94:27:cb:17: db:07:3f:80:85:4f:c8:9c:b6:d0:f4:6f:4f:cf:99: d8:e1:db:c2:48:5c:3a:ac:39:33:c7:1f:6a:8b:26: 3d:2b:35:f5:48:b1:91:c1:02:4e:04:96:91:7b:b0: 33:f0:b1:14:4e:11:6f:b5:40:af:1b:45:a5:4a:ef: 7e:b6:ac:f2:a0:1f:58:3f:12:46:60:3c:8d:a1:e0: 7d:cf:57:3e:33:1e:fb:47:f1:aa:15:97:07:55:66: a5:b5:2d:2e:d8:80:59:b2:a7:0d:b7:46:ec:21:63: ff:35:ab:a5:02:cf:2a:f4:4c:fe:7b:f5:94:5d:84: 4d:a8:f2:60:8f:db:0e:25:3c:9f:73:71:cf:94:df: 4a:ea:db:df:72:38:8c:f3:96:bd:f1:17:bc:d2:ba: 3b:45:5a:c6:a7:f6:c6:17:8b:01:9d:fc:19:a8:2a: 83:16:b8:3a:48:fe:4e:3e:a0:ab:06:19:e9:53:f3: 80:13:07:ed:2d:bf:3f:0a:3c:55:20:39:2c:2c:00: 69:74:95:4a:bc:20:b2:a9:79:e5:18:89:91:a8:dc: 1c:4d:ef:bb:7e:37:0b:5d:fe:39:a5:88:52:8c:00: 6c:ec:18:7c:41:bd:f6:8b:75:77:ba:60:9d:84:e7: fe:2d Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 15:38:83:0F:3F:2C:3F:70:33:1E:CD:46:FE:07:8C:20:E0:D7:C3:B7 Signature Algorithm: sha1WithRSAEncryption 5f:f1:41:7d:7c:5c:08:b9:2b:e0:d5:92:47:fa:67:5c:a5:13: c3:03:21:9b:2b:4c:89:46:cf:59:4d:c9:fe:a5:40:b6:63:cd: dd:71:28:95:67:11:cc:24:ac:d3:44:6c:71:ae:01:20:6b:03: a2:8f:18:b7:29:3a:7d:e5:16:60:53:78:3c:c0:af:15:83:f7: 8f:52:33:24:bd:64:93:97:ee:8b:f7:db:18:a8:6d:71:b3:f7: 2c:17:d0:74:25:69:f7:fe:6b:3c:94:be:4d:4b:41:8c:4e:e2: 73:d0:e3:90:22:73:43:cd:f3:ef:ea:73:ce:45:8a:b0:a6:49: ff:4c:7d:9d:71:88:c4:76:1d:90:5b:1d:ee:fd:cc:f7:ee:fd: 60:a5:b1:7a:16:71:d1:16:d0:7c:12:3c:6c:69:97:db:ae:5f: 39:9a:70:2f:05:3c:19:46:04:99:20:36:d0:60:6e:61:06:bb: 16:42:8c:70:f7:30:fb:e0:db:66:a3:00:01:bd:e6:2c:da:91: 5f:a0:46:8b:4d:6a:9c:3d:3d:dd:05:46:fe:76:bf:a0:0a:3c: e4:00:e6:27:b7:ff:84:2d:de:ba:22:27:96:10:71:eb:22:ed: df:df:33:9c:cf:e3:ad:ae:8e:d4:8e:e6:4f:51:af:16:92:e0: 5c:f6:07:0f SHA1 Fingerprint=70:17:9B:86:8C:00:A4:FA:60:91:52:22:3F:9F:3E:32:BD:E0:05:62 -----BEGIN CERTIFICATE----- MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h 2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq 299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3 LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd 7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw ++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt 398znM/jra6O1I7mT1GvFpLgXPYHDw== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 65568 (0x10020) Signature Algorithm: sha1WithRSAEncryption Issuer: C=PL, O=Unizeto Sp. z o.o., CN=Certum CA Validity Not Before: Jun 11 10:46:39 2002 GMT Not After : Jun 11 10:46:39 2027 GMT Subject: C=PL, O=Unizeto Sp. z o.o., CN=Certum CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:ce:b1:c1:2e:d3:4f:7c:cd:25:ce:18:3e:4f:c4: 8c:6f:80:6a:73:c8:5b:51:f8:9b:d2:dc:bb:00:5c: b1:a0:fc:75:03:ee:81:f0:88:ee:23:52:e9:e6:15: 33:8d:ac:2d:09:c5:76:f9:2b:39:80:89:e4:97:4b: 90:a5:a8:78:f8:73:43:7b:a4:61:b0:d8:58:cc:e1: 6c:66:7e:9c:f3:09:5e:55:63:84:d5:a8:ef:f3:b1: 2e:30:68:b3:c4:3c:d8:ac:6e:8d:99:5a:90:4e:34: dc:36:9a:8f:81:88:50:b7:6d:96:42:09:f3:d7:95: 83:0d:41:4b:b0:6a:6b:f8:fc:0f:7e:62:9f:67:c4: ed:26:5f:10:26:0f:08:4f:f0:a4:57:28:ce:8f:b8: ed:45:f6:6e:ee:25:5d:aa:6e:39:be:e4:93:2f:d9: 47:a0:72:eb:fa:a6:5b:af:ca:53:3f:e2:0e:c6:96: 56:11:6e:f7:e9:66:a9:26:d8:7f:95:53:ed:0a:85: 88:ba:4f:29:a5:42:8c:5e:b6:fc:85:20:00:aa:68: 0b:a1:1a:85:01:9c:c4:46:63:82:88:b6:22:b1:ee: fe:aa:46:59:7e:cf:35:2c:d5:b6:da:5d:f7:48:33: 14:54:b6:eb:d9:6f:ce:cd:88:d6:ab:1b:da:96:3b: 1d:59 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: sha1WithRSAEncryption b8:8d:ce:ef:e7:14:ba:cf:ee:b0:44:92:6c:b4:39:3e:a2:84: 6e:ad:b8:21:77:d2:d4:77:82:87:e6:20:41:81:ee:e2:f8:11: b7:63:d1:17:37:be:19:76:24:1c:04:1a:4c:eb:3d:aa:67:6f: 2d:d4:cd:fe:65:31:70:c5:1b:a6:02:0a:ba:60:7b:6d:58:c2: 9a:49:fe:63:32:0b:6b:e3:3a:c0:ac:ab:3b:b0:e8:d3:09:51: 8c:10:83:c6:34:e0:c5:2b:e0:1a:b6:60:14:27:6c:32:77:8c: bc:b2:72:98:cf:cd:cc:3f:b9:c8:24:42:14:d6:57:fc:e6:26: 43:a9:1d:e5:80:90:ce:03:54:28:3e:f7:3f:d3:f8:4d:ed:6a: 0a:3a:93:13:9b:3b:14:23:13:63:9c:3f:d1:87:27:79:e5:4c: 51:e3:01:ad:85:5d:1a:3b:b1:d5:73:10:a4:d3:f2:bc:6e:64: f5:5a:56:90:a8:c7:0e:4c:74:0f:2e:71:3b:f7:c8:47:f4:69: 6f:15:f2:11:5e:83:1e:9c:7c:52:ae:fd:02:da:12:a8:59:67: 18:db:bc:70:dd:9b:b1:69:ed:80:ce:89:40:48:6a:0e:35:ca: 29:66:15:21:94:2c:e8:60:2a:9b:85:4a:40:f3:6b:8a:24:ec: 06:16:2c:73 SHA1 Fingerprint=62:52:DC:40:F7:11:43:A2:2F:DE:9E:F7:34:8E:06:42:51:B1:81:18 -----BEGIN CERTIFICATE----- MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7 HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs 6GAqm4VKQPNriiTsBhYscw== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Services Validity Not Before: Jan 1 00:00:00 2004 GMT Not After : Dec 31 23:59:59 2028 GMT Subject: C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Services Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:be:40:9d:f4:6e:e1:ea:76:87:1c:4d:45:44:8e: be:46:c8:83:06:9d:c1:2a:fe:18:1f:8e:e4:02:fa: f3:ab:5d:50:8a:16:31:0b:9a:06:d0:c5:70:22:cd: 49:2d:54:63:cc:b6:6e:68:46:0b:53:ea:cb:4c:24: c0:bc:72:4e:ea:f1:15:ae:f4:54:9a:12:0a:c3:7a: b2:33:60:e2:da:89:55:f3:22:58:f3:de:dc:cf:ef: 83:86:a2:8c:94:4f:9f:68:f2:98:90:46:84:27:c7: 76:bf:e3:cc:35:2c:8b:5e:07:64:65:82:c0:48:b0: a8:91:f9:61:9f:76:20:50:a8:91:c7:66:b5:eb:78: 62:03:56:f0:8a:1a:13:ea:31:a3:1e:a0:99:fd:38: f6:f6:27:32:58:6f:07:f5:6b:b8:fb:14:2b:af:b7: aa:cc:d6:63:5f:73:8c:da:05:99:a8:38:a8:cb:17: 78:36:51:ac:e9:9e:f4:78:3a:8d:cf:0f:d9:42:e2: 98:0c:ab:2f:9f:0e:01:de:ef:9f:99:49:f1:2d:df: ac:74:4d:1b:98:b5:47:c5:e5:29:d1:f9:90:18:c7: 62:9c:be:83:c7:26:7b:3e:8a:25:c7:c0:dd:9d:e6: 35:68:10:20:9d:8f:d8:de:d2:c3:84:9c:0d:5e:e8: 2f:c9 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: A0:11:0A:23:3E:96:F1:07:EC:E2:AF:29:EF:82:A5:7F:D0:30:A4:B4 X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 CRL Distribution Points: Full Name: URI:http://crl.comodoca.com/AAACertificateServices.crl Full Name: URI:http://crl.comodo.net/AAACertificateServices.crl Signature Algorithm: sha1WithRSAEncryption 08:56:fc:02:f0:9b:e8:ff:a4:fa:d6:7b:c6:44:80:ce:4f:c4: c5:f6:00:58:cc:a6:b6:bc:14:49:68:04:76:e8:e6:ee:5d:ec: 02:0f:60:d6:8d:50:18:4f:26:4e:01:e3:e6:b0:a5:ee:bf:bc: 74:54:41:bf:fd:fc:12:b8:c7:4f:5a:f4:89:60:05:7f:60:b7: 05:4a:f3:f6:f1:c2:bf:c4:b9:74:86:b6:2d:7d:6b:cc:d2:f3: 46:dd:2f:c6:e0:6a:c3:c3:34:03:2c:7d:96:dd:5a:c2:0e:a7: 0a:99:c1:05:8b:ab:0c:2f:f3:5c:3a:cf:6c:37:55:09:87:de: 53:40:6c:58:ef:fc:b6:ab:65:6e:04:f6:1b:dc:3c:e0:5a:15: c6:9e:d9:f1:59:48:30:21:65:03:6c:ec:e9:21:73:ec:9b:03: a1:e0:37:ad:a0:15:18:8f:fa:ba:02:ce:a7:2c:a9:10:13:2c: d4:e5:08:26:ab:22:97:60:f8:90:5e:74:d4:a2:9a:53:bd:f2: a9:68:e0:a2:6e:c2:d7:6c:b1:a3:0f:9e:bf:eb:68:e7:56:f2: ae:f2:e3:2b:38:3a:09:81:b5:6b:85:d7:be:2d:ed:3f:1a:b7: b2:63:e2:f5:62:2c:82:d4:6a:00:41:50:f1:39:83:9f:95:e9: 36:96:98:6e SHA1 Fingerprint=D1:EB:23:A4:6D:17:D6:8F:D9:25:64:C2:F1:F1:60:17:64:D8:E3:49 -----BEGIN CERTIFICATE----- MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe 3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=Secure Certificate Services Validity Not Before: Jan 1 00:00:00 2004 GMT Not After : Dec 31 23:59:59 2028 GMT Subject: C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=Secure Certificate Services Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:c0:71:33:82:8a:d0:70:eb:73:87:82:40:d5:1d: e4:cb:c9:0e:42:90:f9:de:34:b9:a1:ba:11:f4:25: 85:f3:cc:72:6d:f2:7b:97:6b:b3:07:f1:77:24:91: 5f:25:8f:f6:74:3d:e4:80:c2:f8:3c:0d:f3:bf:40: ea:f7:c8:52:d1:72:6f:ef:c8:ab:41:b8:6e:2e:17: 2a:95:69:0c:cd:d2:1e:94:7b:2d:94:1d:aa:75:d7: b3:98:cb:ac:bc:64:53:40:bc:8f:ac:ac:36:cb:5c: ad:bb:dd:e0:94:17:ec:d1:5c:d0:bf:ef:a5:95:c9: 90:c5:b0:ac:fb:1b:43:df:7a:08:5d:b7:b8:f2:40: 1b:2b:27:9e:50:ce:5e:65:82:88:8c:5e:d3:4e:0c: 7a:ea:08:91:b6:36:aa:2b:42:fb:ea:c2:a3:39:e5: db:26:38:ad:8b:0a:ee:19:63:c7:1c:24:df:03:78: da:e6:ea:c1:47:1a:0b:0b:46:09:dd:02:fc:de:cb: 87:5f:d7:30:63:68:a1:ae:dc:32:a1:ba:be:fe:44: ab:68:b6:a5:17:15:fd:bd:d5:a7:a7:9a:e4:44:33: e9:88:8e:fc:ed:51:eb:93:71:4e:ad:01:e7:44:8e: ab:2d:cb:a8:fe:01:49:48:f0:c0:dd:c7:68:d8:92: fe:3d Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: 3C:D8:93:88:C2:C0:82:09:CC:01:99:06:93:20:E9:9E:70:09:63:4F X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 CRL Distribution Points: Full Name: URI:http://crl.comodoca.com/SecureCertificateServices.crl Full Name: URI:http://crl.comodo.net/SecureCertificateServices.crl Signature Algorithm: sha1WithRSAEncryption 87:01:6d:23:1d:7e:5b:17:7d:c1:61:32:cf:8f:e7:f3:8a:94: 59:66:e0:9e:28:a8:5e:d3:b7:f4:34:e6:aa:39:b2:97:16:c5: 82:6f:32:a4:e9:8c:e7:af:fd:ef:c2:e8:b9:4b:aa:a3:f4:e6: da:8d:65:21:fb:ba:80:eb:26:28:85:1a:fe:39:8c:de:5b:04: 04:b4:54:f9:a3:67:9e:41:fa:09:52:cc:05:48:a8:c9:3f:21: 04:1e:ce:48:6b:fc:85:e8:c2:7b:af:7f:b7:cc:f8:5f:3a:fd: 35:c6:0d:ef:97:dc:4c:ab:11:e1:6b:cb:31:d1:6c:fb:48:80: ab:dc:9c:37:b8:21:14:4b:0d:71:3d:ec:83:33:6e:d1:6e:32: 16:ec:98:c7:16:8b:59:a6:34:ab:05:57:2d:93:f7:aa:13:cb: d2:13:e2:b7:2e:3b:cd:6b:50:17:09:68:3e:b5:26:57:ee:b6: e0:b6:dd:b9:29:80:79:7d:8f:a3:f0:a4:28:a4:15:c4:85:f4: 27:d4:6b:bf:e5:5c:e4:65:02:76:54:b4:e3:37:66:24:d3:19: 61:c8:52:10:e5:8b:37:9a:b9:a9:f9:1d:bf:ea:99:92:61:96: ff:01:cd:a1:5f:0d:bc:71:bc:0e:ac:0b:1d:47:45:1d:c1:ec: 7c:ec:fd:29 SHA1 Fingerprint=4A:65:D5:F4:1D:EF:39:B8:B8:90:4A:4A:D3:64:81:33:CF:C7:A1:D1 -----BEGIN CERTIFICATE----- MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996 CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk 3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz 6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0 5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=Trusted Certificate Services Validity Not Before: Jan 1 00:00:00 2004 GMT Not After : Dec 31 23:59:59 2028 GMT Subject: C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=Trusted Certificate Services Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:df:71:6f:36:58:53:5a:f2:36:54:57:80:c4:74: 08:20:ed:18:7f:2a:1d:e6:35:9a:1e:25:ac:9c:e5: 96:7e:72:52:a0:15:42:db:59:dd:64:7a:1a:d0:b8: 7b:dd:39:15:bc:55:48:c4:ed:3a:00:ea:31:11:ba: f2:71:74:1a:67:b8:cf:33:cc:a8:31:af:a3:e3:d7: 7f:bf:33:2d:4c:6a:3c:ec:8b:c3:92:d2:53:77:24: 74:9c:07:6e:70:fc:bd:0b:5b:76:ba:5f:f2:ff:d7: 37:4b:4a:60:78:f7:f0:fa:ca:70:b4:ea:59:aa:a3: ce:48:2f:a9:c3:b2:0b:7e:17:72:16:0c:a6:07:0c: 1b:38:cf:c9:62:b7:3f:a0:93:a5:87:41:f2:b7:70: 40:77:d8:be:14:7c:e3:a8:c0:7a:8e:e9:63:6a:d1: 0f:9a:c6:d2:f4:8b:3a:14:04:56:d4:ed:b8:cc:6e: f5:fb:e2:2c:58:bd:7f:4f:6b:2b:f7:60:24:58:24: ce:26:ef:34:91:3a:d5:e3:81:d0:b2:f0:04:02:d7: 5b:b7:3e:92:ac:6b:12:8a:f9:e4:05:b0:3b:91:49: 5c:b2:eb:53:ea:f8:9f:47:86:ee:bf:95:c0:c0:06: 9f:d2:5b:5e:11:1b:f4:c7:04:35:29:d2:55:5c:e4: ed:eb Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: C5:7B:58:BD:ED:DA:25:69:D2:F7:59:16:A8:B3:32:C0:7B:27:5B:F4 X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 CRL Distribution Points: Full Name: URI:http://crl.comodoca.com/TrustedCertificateServices.crl Full Name: URI:http://crl.comodo.net/TrustedCertificateServices.crl Signature Algorithm: sha1WithRSAEncryption c8:93:81:3b:89:b4:af:b8:84:12:4c:8d:d2:f0:db:70:ba:57: 86:15:34:10:b9:2f:7f:1e:b0:a8:89:60:a1:8a:c2:77:0c:50: 4a:9b:00:8b:d8:8b:f4:41:e2:d0:83:8a:4a:1c:14:06:b0:a3: 68:05:70:31:30:a7:53:9b:0e:e9:4a:a0:58:69:67:0e:ae:9d: f6:a5:2c:41:bf:3c:06:6b:e4:59:cc:6d:10:f1:96:6f:1f:df: f4:04:02:a4:9f:45:3e:c8:d8:fa:36:46:44:50:3f:82:97:91: 1f:28:db:18:11:8c:2a:e4:65:83:57:12:12:8c:17:3f:94:36: fe:5d:b0:c0:04:77:13:b8:f4:15:d5:3f:38:cc:94:3a:55:d0: ac:98:f5:ba:00:5f:e0:86:19:81:78:2f:28:c0:7e:d3:cc:42: 0a:f5:ae:50:a0:d1:3e:c6:a1:71:ec:3f:a0:20:8c:66:3a:89: b4:8e:d4:d8:b1:4d:25:47:ee:2f:88:c8:b5:e1:05:45:c0:be: 14:71:de:7a:fd:8e:7b:7d:4d:08:96:a5:12:73:f0:2d:ca:37: 27:74:12:27:4c:cb:b6:97:e9:d9:ae:08:6d:5a:39:40:dd:05: 47:75:6a:5a:21:b3:a3:18:cf:4e:f7:2e:57:b7:98:70:5e:c8: c4:78:b0:62 SHA1 Fingerprint=E1:9F:E3:0E:8B:84:60:9E:80:9B:17:0D:72:A8:C5:BA:6E:14:09:BD -----BEGIN CERTIFICATE----- MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0 aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW 1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7 kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/ HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+ xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 985026699 (0x3ab6508b) Signature Algorithm: sha1WithRSAEncryption Issuer: C=BM, O=QuoVadis Limited, OU=Root Certification Authority, CN=QuoVadis Root Certification Authority Validity Not Before: Mar 19 18:33:33 2001 GMT Not After : Mar 17 18:33:33 2021 GMT Subject: C=BM, O=QuoVadis Limited, OU=Root Certification Authority, CN=QuoVadis Root Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:bf:61:b5:95:53:ba:57:fc:fa:f2:67:0b:3a:1a: df:11:80:64:95:b4:d1:bc:cd:7a:cf:f6:29:96:2e: 24:54:40:24:38:f7:1a:85:dc:58:4c:cb:a4:27:42: 97:d0:9f:83:8a:c3:e4:06:03:5b:00:a5:51:1e:70: 04:74:e2:c1:d4:3a:ab:d7:ad:3b:07:18:05:8e:fd: 83:ac:ea:66:d9:18:1b:68:8a:f5:57:1a:98:ba:f5: ed:76:3d:7c:d9:de:94:6a:3b:4b:17:c1:d5:8f:bd: 65:38:3a:95:d0:3d:55:36:4e:df:79:57:31:2a:1e: d8:59:65:49:58:20:98:7e:ab:5f:7e:9f:e9:d6:4d: ec:83:74:a9:c7:6c:d8:ee:29:4a:85:2a:06:14:f9: 54:e6:d3:da:65:07:8b:63:37:12:d7:d0:ec:c3:7b: 20:41:44:a3:ed:cb:a0:17:e1:71:65:ce:1d:66:31: f7:76:01:19:c8:7d:03:58:b6:95:49:1d:a6:12:26: e8:c6:0c:76:e0:e3:66:cb:ea:5d:a6:26:ee:e5:cc: 5f:bd:67:a7:01:27:0e:a2:ca:54:c5:b1:7a:95:1d: 71:1e:4a:29:8a:03:dc:6a:45:c1:a4:19:5e:6f:36: cd:c3:a2:b0:b7:fe:5c:38:e2:52:bc:f8:44:43:e6: 90:bb Exponent: 65537 (0x10001) X509v3 extensions: Authority Information Access: OCSP - URI:https://ocsp.quovadisoffshore.com X509v3 Basic Constraints: critical CA:TRUE X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.8024.0.1 User Notice: Explicit Text: Reliance on the QuoVadis Root Certificate by any party assumes acceptance of the then applicable standard terms and conditions of use, certification practices, and the QuoVadis Certificate Policy. CPS: http://www.quovadis.bm X509v3 Subject Key Identifier: 8B:4B:6D:ED:D3:29:B9:06:19:EC:39:39:A9:F0:97:84:6A:CB:EF:DF X509v3 Authority Key Identifier: keyid:8B:4B:6D:ED:D3:29:B9:06:19:EC:39:39:A9:F0:97:84:6A:CB:EF:DF DirName:/C=BM/O=QuoVadis Limited/OU=Root Certification Authority/CN=QuoVadis Root Certification Authority serial:3A:B6:50:8B X509v3 Key Usage: critical Certificate Sign, CRL Sign Signature Algorithm: sha1WithRSAEncryption 8a:d4:14:b5:fe:f4:9a:92:a7:19:d4:a4:7e:72:18:8f:d9:68: 7c:52:24:dd:67:6f:39:7a:c4:aa:5e:3d:e2:58:b0:4d:70:98: 84:61:e8:1b:e3:69:18:0e:ce:fb:47:50:a0:4e:ff:f0:24:1f: bd:b2:ce:f5:27:fc:ec:2f:53:aa:73:7b:03:3d:74:6e:e6:16: 9e:eb:a5:2e:c4:bf:56:27:50:2b:62:ba:be:4b:1c:3c:55:5c: 41:1d:24:be:82:20:47:5d:d5:44:7e:7a:16:68:df:7d:4d:51: 70:78:57:1d:33:1e:fd:02:99:9c:0c:cd:0a:05:4f:c7:bb:8e: a4:75:fa:4a:6d:b1:80:8e:09:56:b9:9c:1a:60:fe:5d:c1:d7: 7a:dc:11:78:d0:d6:5d:c1:b7:d5:ad:32:99:03:3a:8a:cc:54: 25:39:31:81:7b:13:22:51:ba:46:6c:a1:bb:9e:fa:04:6c:49: 26:74:8f:d2:73:eb:cc:30:a2:e6:ea:59:22:87:f8:97:f5:0e: fd:ea:cc:92:a4:16:c4:52:18:ea:21:ce:b1:f1:e6:84:81:e5: ba:a9:86:28:f2:43:5a:5d:12:9d:ac:1e:d9:a8:e5:0a:6a:a7: 7f:a0:87:29:cf:f2:89:4d:d4:ec:c5:e2:e6:7a:d0:36:23:8a: 4a:74:36:f9 SHA1 Fingerprint=DE:3F:40:BD:50:93:D3:9B:6C:60:F6:DA:BC:07:62:01:00:89:76:C9 -----BEGIN CERTIFICATE----- MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0 aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0 aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8 7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK SnQ2+Q== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1289 (0x509) Signature Algorithm: sha1WithRSAEncryption Issuer: C=BM, O=QuoVadis Limited, CN=QuoVadis Root CA 2 Validity Not Before: Nov 24 18:27:00 2006 GMT Not After : Nov 24 18:23:33 2031 GMT Subject: C=BM, O=QuoVadis Limited, CN=QuoVadis Root CA 2 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:9a:18:ca:4b:94:0d:00:2d:af:03:29:8a:f0:0f: 81:c8:ae:4c:19:85:1d:08:9f:ab:29:44:85:f3:2f: 81:ad:32:1e:90:46:bf:a3:86:26:1a:1e:fe:7e:1c: 18:3a:5c:9c:60:17:2a:3a:74:83:33:30:7d:61:54: 11:cb:ed:ab:e0:e6:d2:a2:7e:f5:6b:6f:18:b7:0a: 0b:2d:fd:e9:3e:ef:0a:c6:b3:10:e9:dc:c2:46:17: f8:5d:fd:a4:da:ff:9e:49:5a:9c:e6:33:e6:24:96: f7:3f:ba:5b:2b:1c:7a:35:c2:d6:67:fe:ab:66:50: 8b:6d:28:60:2b:ef:d7:60:c3:c7:93:bc:8d:36:91: f3:7f:f8:db:11:13:c4:9c:77:76:c1:ae:b7:02:6a: 81:7a:a9:45:83:e2:05:e6:b9:56:c1:94:37:8f:48: 71:63:22:ec:17:65:07:95:8a:4b:df:8f:c6:5a:0a: e5:b0:e3:5f:5e:6b:11:ab:0c:f9:85:eb:44:e9:f8: 04:73:f2:e9:fe:5c:98:8c:f5:73:af:6b:b4:7e:cd: d4:5c:02:2b:4c:39:e1:b2:95:95:2d:42:87:d7:d5: b3:90:43:b7:6c:13:f1:de:dd:f6:c4:f8:89:3f:d1: 75:f5:92:c3:91:d5:8a:88:d0:90:ec:dc:6d:de:89: c2:65:71:96:8b:0d:03:fd:9c:bf:5b:16:ac:92:db: ea:fe:79:7c:ad:eb:af:f7:16:cb:db:cd:25:2b:e5: 1f:fb:9a:9f:e2:51:cc:3a:53:0c:48:e6:0e:bd:c9: b4:76:06:52:e6:11:13:85:72:63:03:04:e0:04:36: 2b:20:19:02:e8:74:a7:1f:b6:c9:56:66:f0:75:25: dc:67:c1:0e:61:60:88:b3:3e:d1:a8:fc:a3:da:1d: b0:d1:b1:23:54:df:44:76:6d:ed:41:d8:c1:b2:22: b6:53:1c:df:35:1d:dc:a1:77:2a:31:e4:2d:f5:e5: e5:db:c8:e0:ff:e5:80:d7:0b:63:a0:ff:33:a1:0f: ba:2c:15:15:ea:97:b3:d2:a2:b5:be:f2:8c:96:1e: 1a:8f:1d:6c:a4:61:37:b9:86:73:33:d7:97:96:9e: 23:7d:82:a4:4c:81:e2:a1:d1:ba:67:5f:95:07:a3: 27:11:ee:16:10:7b:bc:45:4a:4c:b2:04:d2:ab:ef: d5:fd:0c:51:ce:50:6a:08:31:f9:91:da:0c:8f:64: 5c:03:c3:3a:8b:20:3f:6e:8d:67:3d:3a:d6:fe:7d: 5b:88:c9:5e:fb:cc:61:dc:8b:33:77:d3:44:32:35: 09:62:04:92:16:10:d8:9e:27:47:fb:3b:21:e3:f8: eb:1d:5b Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 1A:84:62:BC:48:4C:33:25:04:D4:EE:D0:F6:03:C4:19:46:D1:94:6B X509v3 Authority Key Identifier: keyid:1A:84:62:BC:48:4C:33:25:04:D4:EE:D0:F6:03:C4:19:46:D1:94:6B DirName:/C=BM/O=QuoVadis Limited/CN=QuoVadis Root CA 2 serial:05:09 Signature Algorithm: sha1WithRSAEncryption 3e:0a:16:4d:9f:06:5b:a8:ae:71:5d:2f:05:2f:67:e6:13:45: 83:c4:36:f6:f3:c0:26:0c:0d:b5:47:64:5d:f8:b4:72:c9:46: a5:03:18:27:55:89:78:7d:76:ea:96:34:80:17:20:dc:e7:83: f8:8d:fc:07:b8:da:5f:4d:2e:67:b2:84:fd:d9:44:fc:77:50: 81:e6:7c:b4:c9:0d:0b:72:53:f8:76:07:07:41:47:96:0c:fb: e0:82:26:93:55:8c:fe:22:1f:60:65:7c:5f:e7:26:b3:f7:32: 90:98:50:d4:37:71:55:f6:92:21:78:f7:95:79:fa:f8:2d:26: 87:66:56:30:77:a6:37:78:33:52:10:58:ae:3f:61:8e:f2:6a: b1:ef:18:7e:4a:59:63:ca:8d:a2:56:d5:a7:2f:bc:56:1f:cf: 39:c1:e2:fb:0a:a8:15:2c:7d:4d:7a:63:c6:6c:97:44:3c:d2: 6f:c3:4a:17:0a:f8:90:d2:57:a2:19:51:a5:2d:97:41:da:07: 4f:a9:50:da:90:8d:94:46:e1:3e:f0:94:fd:10:00:38:f5:3b: e8:40:e1:b4:6e:56:1a:20:cc:6f:58:8d:ed:2e:45:8f:d6:e9: 93:3f:e7:b1:2c:df:3a:d6:22:8c:dc:84:bb:22:6f:d0:f8:e4: c6:39:e9:04:88:3c:c3:ba:eb:55:7a:6d:80:99:24:f5:6c:01: fb:f8:97:b0:94:5b:eb:fd:d2:6f:f1:77:68:0d:35:64:23:ac: b8:55:a1:03:d1:4d:42:19:dc:f8:75:59:56:a3:f9:a8:49:79: f8:af:0e:b9:11:a0:7c:b7:6a:ed:34:d0:b6:26:62:38:1a:87: 0c:f8:e8:fd:2e:d3:90:7f:07:91:2a:1d:d6:7e:5c:85:83:99: b0:38:08:3f:e9:5e:f9:35:07:e4:c9:62:6e:57:7f:a7:50:95: f7:ba:c8:9b:e6:8e:a2:01:c5:d6:66:bf:79:61:f3:3c:1c:e1: b9:82:5c:5d:a0:c3:e9:d8:48:bd:19:a2:11:14:19:6e:b2:86: 1b:68:3e:48:37:1a:88:b7:5d:96:5e:9c:c7:ef:27:62:08:e2: 91:19:5c:d2:f1:21:dd:ba:17:42:82:97:71:81:53:31:a9:9f: f6:7d:62:bf:72:e1:a3:93:1d:cc:8a:26:5a:09:38:d0:ce:d7: 0d:80:16:b4:78:a5:3a:87:4c:8d:8a:a5:d5:46:97:f2:2c:10: b9:bc:54:22:c0:01:50:69:43:9e:f4:b2:ef:6d:f8:ec:da:f1: e3:b1:ef:df:91:8f:54:2a:0b:25:c1:26:19:c4:52:10:05:65: d5:82:10:ea:c2:31:cd:2e SHA1 Fingerprint=CA:3A:FB:CF:12:40:36:4B:44:B2:16:20:88:80:48:39:19:93:7C:F7 -----BEGIN CERTIFICATE----- MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp +ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og /zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y 4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza 8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1478 (0x5c6) Signature Algorithm: sha1WithRSAEncryption Issuer: C=BM, O=QuoVadis Limited, CN=QuoVadis Root CA 3 Validity Not Before: Nov 24 19:11:23 2006 GMT Not After : Nov 24 19:06:44 2031 GMT Subject: C=BM, O=QuoVadis Limited, CN=QuoVadis Root CA 3 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:cc:57:42:16:54:9c:e6:98:d3:d3:4d:ee:fe:ed: c7:9f:43:39:4a:65:b3:e8:16:88:34:db:0d:59:91: 74:cf:92:b8:04:40:ad:02:4b:31:ab:bc:8d:91:68: d8:20:0e:1a:01:e2:1a:7b:4e:17:5d:e2:8a:b7:3f: 99:1a:cd:eb:61:ab:c2:65:a6:1f:b7:b7:bd:b7:8f: fc:fd:70:8f:0b:a0:67:be:01:a2:59:cf:71:e6:0f: 29:76:ff:b1:56:79:45:2b:1f:9e:7a:54:e8:a3:29: 35:68:a4:01:4f:0f:a4:2e:37:ef:1b:bf:e3:8f:10: a8:72:ab:58:57:e7:54:86:c8:c9:f3:5b:da:2c:da: 5d:8e:6e:3c:a3:3e:da:fb:82:e5:dd:f2:5c:b2:05: 33:6f:8a:36:ce:d0:13:4e:ff:bf:4a:0c:34:4c:a6: c3:21:bd:50:04:55:eb:b1:bb:9d:fb:45:1e:64:15: de:55:01:8c:02:76:b5:cb:a1:3f:42:69:bc:2f:bd: 68:43:16:56:89:2a:37:61:91:fd:a6:ae:4e:c0:cb: 14:65:94:37:4b:92:06:ef:04:d0:c8:9c:88:db:0b: 7b:81:af:b1:3d:2a:c4:65:3a:78:b6:ee:dc:80:b1: d2:d3:99:9c:3a:ee:6b:5a:6b:b3:8d:b7:d5:ce:9c: c2:be:a5:4b:2f:16:b1:9e:68:3b:06:6f:ae:7d:9f: f8:de:ec:cc:29:a7:98:a3:25:43:2f:ef:f1:5f:26: e1:88:4d:f8:5e:6e:d7:d9:14:6e:19:33:69:a7:3b: 84:89:93:c4:53:55:13:a1:51:78:40:f8:b8:c9:a2: ee:7b:ba:52:42:83:9e:14:ed:05:52:5a:59:56:a7: 97:fc:9d:3f:0a:29:d8:dc:4f:91:0e:13:bc:de:95: a4:df:8b:99:be:ac:9b:33:88:ef:b5:81:af:1b:c6: 22:53:c8:f6:c7:ee:97:14:b0:c5:7c:78:52:c8:f0: ce:6e:77:60:84:a6:e9:2a:76:20:ed:58:01:17:30: 93:e9:1a:8b:e0:73:63:d9:6a:92:94:49:4e:b4:ad: 4a:85:c4:a3:22:30:fc:09:ed:68:22:73:a6:88:0c: 55:21:58:c5:e1:3a:9f:2a:dd:ca:e1:90:e0:d9:73: ab:6c:80:b8:e8:0b:64:93:a0:9c:8c:19:ff:b3:d2: 0c:ec:91:26:87:8a:b3:a2:e1:70:8f:2c:0a:e5:cd: 6d:68:51:eb:da:3f:05:7f:8b:32:e6:13:5c:6b:fe: 5f:40:e2:22:c8:b4:b4:64:4f:d6:ba:7d:48:3e:a8: 69:0c:d7:bb:86:71:c9:73:b8:3f:3b:9d:25:4b:da: ff:40:eb Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.8024.0.3 User Notice: Explicit Text: Any use of this Certificate constitutes acceptance of the QuoVadis Root CA 3 Certificate Policy / Certification Practice Statement. CPS: http://www.quovadisglobal.com/cps X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Subject Key Identifier: F2:C0:13:E0:82:43:3E:FB:EE:2F:67:32:96:35:5C:DB:B8:CB:02:D0 X509v3 Authority Key Identifier: keyid:F2:C0:13:E0:82:43:3E:FB:EE:2F:67:32:96:35:5C:DB:B8:CB:02:D0 DirName:/C=BM/O=QuoVadis Limited/CN=QuoVadis Root CA 3 serial:05:C6 Signature Algorithm: sha1WithRSAEncryption 4f:ad:a0:2c:4c:fa:c0:f2:6f:f7:66:55:ab:23:34:ee:e7:29: da:c3:5b:b6:b0:83:d9:d0:d0:e2:21:fb:f3:60:a7:3b:5d:60: 53:27:a2:9b:f6:08:22:2a:e7:bf:a0:72:e5:9c:24:6a:31:b1: 90:7a:27:db:84:11:89:27:a6:77:5a:38:d7:bf:ac:86:fc:ee: 5d:83:bc:06:c6:d1:77:6b:0f:6d:24:2f:4b:7a:6c:a7:07:96: ca:e3:84:9f:ad:88:8b:1d:ab:16:8d:5b:66:17:d9:16:f4:8b: 80:d2:dd:f8:b2:76:c3:fc:38:13:aa:0c:de:42:69:2b:6e:f3: 3c:eb:80:27:db:f5:a6:44:0d:9f:5a:55:59:0b:d5:0d:52:48: c5:ae:9f:f2:2f:80:c5:ea:32:50:35:12:97:2e:c1:e1:ff:f1: 23:88:51:38:9f:f2:66:56:76:e7:0f:51:97:a5:52:0c:4d:49: 51:95:36:3d:bf:a2:4b:0c:10:1d:86:99:4c:aa:f3:72:11:93: e4:ea:f6:9b:da:a8:5d:a7:4d:b7:9e:02:ae:73:00:c8:da:23: 03:e8:f9:ea:19:74:62:00:94:cb:22:20:be:94:a7:59:b5:82: 6a:be:99:79:7a:a9:f2:4a:24:52:f7:74:fd:ba:4e:e6:a8:1d: 02:6e:b1:0d:80:44:c1:ae:d3:23:37:5f:bb:85:7c:2b:92:2e: e8:7e:a5:8b:dd:99:e1:bf:27:6f:2d:5d:aa:7b:87:fe:0a:dd: 4b:fc:8e:f5:26:e4:6e:70:42:6e:33:ec:31:9e:7b:93:c1:e4: c9:69:1a:3d:c0:6b:4e:22:6d:ee:ab:58:4d:c6:d0:41:c1:2b: ea:4f:12:87:5e:eb:45:d8:6c:f5:98:02:d3:a0:d8:55:8a:06: 99:19:a2:a0:77:d1:30:9e:ac:cc:75:ee:83:f5:b0:62:39:cf: 6c:57:e2:4c:d2:91:0b:0e:75:28:1b:9a:bf:fd:1a:43:f1:ca: 77:fb:3b:8f:61:b8:69:28:16:42:04:5e:70:2a:1c:21:d8:8f: e1:bd:23:5b:2d:74:40:92:d9:63:19:0d:73:dd:69:bc:62:47: bc:e0:74:2b:b2:eb:7d:be:41:1b:b5:c0:46:c5:a1:22:cb:5f: 4e:c1:28:92:de:18:ba:d5:2a:28:bb:11:8b:17:93:98:99:60: 94:5c:23:cf:5a:27:97:5e:0b:05:06:93:37:1e:3b:69:36:eb: a9:9e:61:1d:8f:32:da:8e:0c:d6:74:3e:7b:09:24:da:01:77: 47:c4:3b:cd:34:8c:99:f5:ca:e1:25:61:33:b2:59:1b:e2:6e: d7:37:57:b6:0d:a9:12:da SHA1 Fingerprint=1F:49:14:F7:D8:74:95:1D:DD:AE:02:C0:BE:FD:3A:2D:82:75:51:85 -----BEGIN CERTIFICATE----- MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB 4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd 8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A 4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd +LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B 4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK 4SVhM7JZG+Ju1zdXtg2pEto= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: sha1WithRSAEncryption Issuer: C=JP, O=SECOM Trust.net, OU=Security Communication RootCA1 Validity Not Before: Sep 30 04:20:49 2003 GMT Not After : Sep 30 04:20:49 2023 GMT Subject: C=JP, O=SECOM Trust.net, OU=Security Communication RootCA1 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:b3:b3:fe:7f:d3:6d:b1:ef:16:7c:57:a5:0c:6d: 76:8a:2f:4b:bf:64:fb:4c:ee:8a:f0:f3:29:7c:f5: ff:ee:2a:e0:e9:e9:ba:5b:64:22:9a:9a:6f:2c:3a: 26:69:51:05:99:26:dc:d5:1c:6a:71:c6:9a:7d:1e: 9d:dd:7c:6c:c6:8c:67:67:4a:3e:f8:71:b0:19:27: a9:09:0c:a6:95:bf:4b:8c:0c:fa:55:98:3b:d8:e8: 22:a1:4b:71:38:79:ac:97:92:69:b3:89:7e:ea:21: 68:06:98:14:96:87:d2:61:36:bc:6d:27:56:9e:57: ee:c0:c0:56:fd:32:cf:a4:d9:8e:c2:23:d7:8d:a8: f3:d8:25:ac:97:e4:70:38:f4:b6:3a:b4:9d:3b:97: 26:43:a3:a1:bc:49:59:72:4c:23:30:87:01:58:f6: 4e:be:1c:68:56:66:af:cd:41:5d:c8:b3:4d:2a:55: 46:ab:1f:da:1e:e2:40:3d:db:cd:7d:b9:92:80:9c: 37:dd:0c:96:64:9d:dc:22:f7:64:8b:df:61:de:15: 94:52:15:a0:7d:52:c9:4b:a8:21:c9:c6:b1:ed:cb: c3:95:60:d1:0f:f0:ab:70:f8:df:cb:4d:7e:ec:d6: fa:ab:d9:bd:7f:54:f2:a5:e9:79:fa:d9:d6:76:24: 28:73 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: A0:73:49:99:68:DC:85:5B:65:E3:9B:28:2F:57:9F:BD:33:BC:07:48 X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: sha1WithRSAEncryption 68:40:a9:a8:bb:e4:4f:5d:79:b3:05:b5:17:b3:60:13:eb:c6: 92:5d:e0:d1:d3:6a:fe:fb:be:9b:6d:bf:c7:05:6d:59:20:c4: 1c:f0:b7:da:84:58:02:63:fa:48:16:ef:4f:a5:0b:f7:4a:98: f2:3f:9e:1b:ad:47:6b:63:ce:08:47:eb:52:3f:78:9c:af:4d: ae:f8:d5:4f:cf:9a:98:2a:10:41:39:52:c4:dd:d9:9b:0e:ef: 93:01:ae:b2:2e:ca:68:42:24:42:6c:b0:b3:3a:3e:cd:e9:da: 48:c4:15:cb:e9:f9:07:0f:92:50:49:8a:dd:31:97:5f:c9:e9: 37:aa:3b:59:65:97:94:32:c9:b3:9f:3e:3a:62:58:c5:49:ad: 62:0e:71:a5:32:aa:2f:c6:89:76:43:40:13:13:67:3d:a2:54: 25:10:cb:f1:3a:f2:d9:fa:db:49:56:bb:a6:fe:a7:41:35:c3: e0:88:61:c9:88:c7:df:36:10:22:98:59:ea:b0:4a:fb:56:16: 73:6e:ac:4d:f7:22:a1:4f:ad:1d:7a:2d:45:27:e5:30:c1:5e: f2:da:13:cb:25:42:51:95:47:03:8c:6c:21:cc:74:42:ed:53: ff:33:8b:8f:0f:57:01:16:2f:cf:a6:ee:c9:70:22:14:bd:fd: be:6c:0b:03 SHA1 Fingerprint=36:B1:2B:49:F9:81:9E:D7:4C:9E:BC:38:0F:C6:56:8F:5D:AC:B2:F7 -----BEGIN CERTIFICATE----- MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5 WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8 9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9 Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5 Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 36 (0x24) Signature Algorithm: sha1WithRSAEncryption Issuer: C=FI, O=Sonera, CN=Sonera Class1 CA Validity Not Before: Apr 6 10:49:13 2001 GMT Not After : Apr 6 10:49:13 2021 GMT Subject: C=FI, O=Sonera, CN=Sonera Class1 CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:b5:89:1f:2b:4f:67:0a:79:ff:c5:1e:f8:7f:3c: ed:d1:7e:da:b0:cd:6d:2f:36:ac:34:c6:db:d9:64: 17:08:63:30:33:22:8a:4c:ee:8e:bb:0f:0d:42:55: c9:9d:2e:a5:ef:f7:a7:8c:c3:ab:b9:97:cb:8e:ef: 3f:15:67:a8:82:72:63:53:0f:41:8c:7d:10:95:24: a1:5a:a5:06:fa:92:57:9d:fa:a5:01:f2:75:e9:1f: bc:56:26:52:4e:78:19:65:58:55:03:58:c0:14:ae: 8c:7c:55:5f:70:5b:77:23:06:36:97:f3:24:b5:9a: 46:95:e4:df:0d:0b:05:45:e5:d1:f2:1d:82:bb:c6: 13:e0:fe:aa:7a:fd:69:30:94:f3:d2:45:85:fc:f2: 32:5b:32:de:e8:6c:5d:1f:cb:a4:22:74:b0:80:8e: 5d:94:f7:06:00:4b:a9:d4:5e:2e:35:50:09:f3:80: 97:f4:0c:17:ae:39:d8:5f:cd:33:c1:1c:ca:89:c2: 22:f7:45:12:ed:5e:12:93:9d:63:ab:82:2e:b9:eb: 42:41:44:cb:4a:1a:00:82:0d:9e:f9:8b:57:3e:4c: c7:17:ed:2c:8b:72:33:5f:72:7a:38:56:d5:e6:d9: ae:05:1a:1d:75:45:b1:cb:a5:25:1c:12:57:36:fd: 22:37 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 47:E2:0C:8B:F6:53:88:52 X509v3 Key Usage: Certificate Sign, CRL Sign Signature Algorithm: sha1WithRSAEncryption 8b:1a:b2:c9:5d:61:b4:e1:b9:2b:b9:53:d1:b2:85:9d:77:8e: 16:ee:11:3d:db:c2:63:d9:5b:97:65:fb:12:67:d8:2a:5c:b6: ab:e5:5e:c3:b7:16:2f:c8:e8:ab:1d:8a:fd:ab:1a:7c:d5:5f: 63:cf:dc:b0:dd:77:b9:a8:e6:d2:22:38:87:07:14:d9:ff:be: 56:b5:fd:07:0e:3c:55:ca:16:cc:a7:a6:77:37:fb:db:5c:1f: 4e:59:06:87:a3:03:43:f5:16:ab:b7:84:bd:4e:ef:9f:31:37: f0:46:f1:40:b6:d1:0c:a5:64:f8:63:5e:21:db:55:4e:4f:31: 76:9c:10:61:8e:b6:53:3a:a3:11:be:af:6d:7c:1e:bd:ae:2d: e2:0c:69:c7:85:53:68:a2:61:ba:c5:3e:b4:79:54:78:9e:0a: c7:02:be:62:d1:11:82:4b:65:2f:91:5a:c2:a8:87:b1:56:68: 94:79:f9:25:f7:c1:d5:ae:1a:b8:bb:3d:8f:a9:8a:38:15:f7: 73:d0:5a:60:d1:80:b0:f0:dc:d5:50:cd:4e:ee:92:48:69:ed: b2:23:1e:30:cc:c8:94:c8:b6:f5:3b:86:7f:3f:a6:2e:9f:f6: 3e:2c:b5:92:96:3e:df:2c:93:8a:ff:81:8c:0f:0f:59:21:19: 57:bd:55:9a SHA1 Fingerprint=07:47:22:01:99:CE:74:B9:7C:B0:3D:79:B2:64:A2:C8:55:E9:33:FF -----BEGIN CERTIFICATE----- MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAx MDQwNjEwNDkxM1oXDTIxMDQwNjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNV BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMSBDQTCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H887dF+2rDNbS82rDTG 29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9EJUk oVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk 3w0LBUXl0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBL qdReLjVQCfOAl/QMF6452F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIIN nvmLVz5MxxftLItyM19yejhW1ebZrgUaHXVFsculJRwSVzb9IjcCAwEAAaMzMDEw DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZTiFIwCwYDVR0PBAQDAgEG MA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE928Jj2VuX ZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0H DjxVyhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VO TzF2nBBhjrZTOqMRvq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2Uv kVrCqIexVmiUefkl98HVrhq4uz2PqYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4w zMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9ZIRlXvVWa -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 29 (0x1d) Signature Algorithm: sha1WithRSAEncryption Issuer: C=FI, O=Sonera, CN=Sonera Class2 CA Validity Not Before: Apr 6 07:29:40 2001 GMT Not After : Apr 6 07:29:40 2021 GMT Subject: C=FI, O=Sonera, CN=Sonera Class2 CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:90:17:4a:35:9d:ca:f0:0d:96:c7:44:fa:16:37: fc:48:bd:bd:7f:80:2d:35:3b:e1:6f:a8:67:a9:bf: 03:1c:4d:8c:6f:32:47:d5:41:68:a4:13:04:c1:35: 0c:9a:84:43:fc:5c:1d:ff:89:b3:e8:17:18:cd:91: 5f:fb:89:e3:ea:bf:4e:5d:7c:1b:26:d3:75:79:ed: e6:84:e3:57:e5:ad:29:c4:f4:3a:28:e7:a5:7b:84: 36:69:b3:fd:5e:76:bd:a3:2d:99:d3:90:4e:23:28: 7d:18:63:f1:54:3b:26:9d:76:5b:97:42:b2:ff:ae: f0:4e:ec:dd:39:95:4e:83:06:7f:e7:49:40:c8:c5: 01:b2:54:5a:66:1d:3d:fc:f9:e9:3c:0a:9e:81:b8: 70:f0:01:8b:e4:23:54:7c:c8:ae:f8:90:1e:00:96: 72:d4:54:cf:61:23:bc:ea:fb:9d:02:95:d1:b6:b9: 71:3a:69:08:3f:0f:b4:e1:42:c7:88:f5:3f:98:a8: a7:ba:1c:e0:71:71:ef:58:57:81:50:7a:5c:6b:74: 46:0e:83:03:98:c3:8e:a8:6e:f2:76:32:6e:27:83: c2:73:f3:dc:18:e8:b4:93:ea:75:44:6b:04:60:20: 71:57:87:9d:f3:be:a0:90:23:3d:8a:24:e1:da:21: db:c3 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 4A:A0:AA:58:84:D3:5E:3C X509v3 Key Usage: Certificate Sign, CRL Sign Signature Algorithm: sha1WithRSAEncryption 5a:ce:87:f9:16:72:15:57:4b:1d:d9:9b:e7:a2:26:30:ec:93: 67:df:d6:2d:d2:34:af:f7:38:a5:ce:ab:16:b9:ab:2f:7c:35: cb:ac:d0:0f:b4:4c:2b:fc:80:ef:6b:8c:91:5f:36:76:f7:db: b3:1b:19:ea:f4:b2:11:fd:61:71:44:bf:28:b3:3a:1d:bf:b3: 43:e8:9f:bf:dc:31:08:71:b0:9d:8d:d6:34:47:32:90:c6:65: 24:f7:a0:4a:7c:04:73:8f:39:6f:17:8c:72:b5:bd:4b:c8:7a: f8:7b:83:c3:28:4e:9c:09:ea:67:3f:b2:67:04:1b:c3:14:da: f8:e7:49:24:91:d0:1d:6a:fa:61:39:ef:6b:e7:21:75:06:07: d8:12:b4:21:20:70:42:71:81:da:3c:9a:36:be:a6:5b:0d:6a: 6c:9a:1f:91:7b:f9:f9:ef:42:ba:4e:4e:9e:cc:0c:8d:94:dc: d9:45:9c:5e:ec:42:50:63:ae:f4:5d:c4:b1:12:dc:ca:3b:a8: 2e:9d:14:5a:05:75:b7:ec:d7:63:e2:ba:35:b6:04:08:91:e8: da:9d:9c:f6:66:b5:18:ac:0a:a6:54:26:34:33:d2:1b:c1:d4: 7f:1a:3a:8e:0b:aa:32:6e:db:fc:4f:25:9f:d9:32:c7:96:5a: 70:ac:df:4c SHA1 Fingerprint=37:F7:6D:E6:07:7C:90:C5:B1:3E:93:1A:B7:41:10:B4:F2:E4:9A:27 -----BEGIN CERTIFICATE----- MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt 5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s 3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu 8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/ 3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6 Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2 ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 10000010 (0x98968a) Signature Algorithm: sha1WithRSAEncryption Issuer: C=NL, O=Staat der Nederlanden, CN=Staat der Nederlanden Root CA Validity Not Before: Dec 17 09:23:49 2002 GMT Not After : Dec 16 09:15:38 2015 GMT Subject: C=NL, O=Staat der Nederlanden, CN=Staat der Nederlanden Root CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:98:d2:b5:51:11:7a:81:a6:14:98:71:6d:be:cc: e7:13:1b:d6:27:0e:7a:b3:6a:18:1c:b6:61:5a:d5: 61:09:bf:de:90:13:c7:67:ee:dd:f3:da:c5:0c:12: 9e:35:55:3e:2c:27:88:40:6b:f7:dc:dd:22:61:f5: c2:c7:0e:f5:f6:d5:76:53:4d:8f:8c:bc:18:76:37: 85:9d:e8:ca:49:c7:d2:4f:98:13:09:a2:3e:22:88: 9c:7f:d6:f2:10:65:b4:ee:5f:18:d5:17:e3:f8:c5: fd:e2:9d:a2:ef:53:0e:85:77:a2:0f:e1:30:47:ee: 00:e7:33:7d:44:67:1a:0b:51:e8:8b:a0:9e:50:98: 68:34:52:1f:2e:6d:01:f2:60:45:f2:31:eb:a9:31: 68:29:bb:7a:41:9e:c6:19:7f:94:b4:51:39:03:7f: b2:de:a7:32:9b:b4:47:8e:6f:b4:4a:ae:e5:af:b1: dc:b0:1b:61:bc:99:72:de:e4:89:b7:7a:26:5d:da: 33:49:5b:52:9c:0e:f5:8a:ad:c3:b8:3d:e8:06:6a: c2:d5:2a:0b:6c:7b:84:bd:56:05:cb:86:65:92:ec: 44:2b:b0:8e:b9:dc:70:0b:46:da:ad:bc:63:88:39: fa:db:6a:fe:23:fa:bc:e4:48:f4:67:2b:6a:11:10: 21:49 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:TRUE X509v3 Certificate Policies: Policy: X509v3 Any Policy CPS: http://www.pkioverheid.nl/policies/root-policy X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: A8:7D:EB:BC:63:A4:74:13:74:00:EC:96:E0:D3:34:C1:2C:BF:6C:F8 Signature Algorithm: sha1WithRSAEncryption 05:84:87:55:74:36:61:c1:bb:d1:d4:c6:15:a8:13:b4:9f:a4: fe:bb:ee:15:b4:2f:06:0c:29:f2:a8:92:a4:61:0d:fc:ab:5c: 08:5b:51:13:2b:4d:c2:2a:61:c8:f8:09:58:fc:2d:02:b2:39: 7d:99:66:81:bf:6e:5c:95:45:20:6c:e6:79:a7:d1:d8:1c:29: fc:c2:20:27:51:c8:f1:7c:5d:34:67:69:85:11:30:c6:00:d2: d7:f3:d3:7c:b6:f0:31:57:28:12:82:73:e9:33:2f:a6:55:b4: 0b:91:94:47:9c:fa:bb:7a:42:32:e8:ae:7e:2d:c8:bc:ac:14: bf:d9:0f:d9:5b:fc:c1:f9:7a:95:e1:7d:7e:96:fc:71:b0:c2: 4c:c8:df:45:34:c9:ce:0d:f2:9c:64:08:d0:3b:c3:29:c5:b2: ed:90:04:c1:b1:29:91:c5:30:6f:c1:a9:72:33:cc:fe:5d:16: 17:2c:11:69:e7:7e:fe:c5:83:08:df:bc:dc:22:3a:2e:20:69: 23:39:56:60:67:90:8b:2e:76:39:fb:11:88:97:f6:7c:bd:4b: b8:20:16:67:05:8d:e2:3b:c1:72:3f:94:95:37:c7:5d:b9:9e: d8:93:a1:17:8f:ff:0c:66:15:c1:24:7c:32:7c:03:1d:3b:a1: 58:45:32:93 SHA1 Fingerprint=10:1D:FA:3F:D5:0B:CB:BB:9B:B5:60:0C:19:55:A4:1A:F4:73:3A:04 -----BEGIN CERTIFICATE----- MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJO TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFh dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEy MTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVTdGFhdCBkZXIgTmVk ZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENB MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFtvszn ExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw71 9tV2U02PjLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MO hXeiD+EwR+4A5zN9RGcaC1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+U tFE5A3+y3qcym7RHjm+0Sq7lr7HcsBthvJly3uSJt3omXdozSVtSnA71iq3DuD3o BmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn622r+I/q85Ej0ZytqERAh SQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRVHSAAMDww OgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMv cm9vdC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA 7Jbg0zTBLL9s+DANBgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k /rvuFbQvBgwp8qiSpGEN/KtcCFtREytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzm eafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbwMVcoEoJz6TMvplW0C5GUR5z6 u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3ynGQI0DvDKcWy 7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 986490188 (0x3acca54c) Signature Algorithm: sha1WithRSAEncryption Issuer: C=DK, O=TDC Internet, OU=TDC Internet Root CA Validity Not Before: Apr 5 16:33:17 2001 GMT Not After : Apr 5 17:03:17 2021 GMT Subject: C=DK, O=TDC Internet, OU=TDC Internet Root CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:c4:b8:40:bc:91:d5:63:1f:d7:99:a0:8b:0c:40: 1e:74:b7:48:9d:46:8c:02:b2:e0:24:5f:f0:19:13: a7:37:83:6b:5d:c7:8e:f9:84:30:ce:1a:3b:fa:fb: ce:8b:6d:23:c6:c3:6e:66:9f:89:a5:df:e0:42:50: 67:fa:1f:6c:1e:f4:d0:05:d6:bf:ca:d6:4e:e4:68: 60:6c:46:aa:1c:5d:63:e1:07:86:0e:65:00:a7:2e: a6:71:c6:bc:b9:81:a8:3a:7d:1a:d2:f9:d1:ac:4b: cb:ce:75:af:dc:7b:fa:81:73:d4:fc:ba:bd:41:88: d4:74:b3:f9:5e:38:3a:3c:43:a8:d2:95:4e:77:6d: 13:0c:9d:8f:78:01:b7:5a:20:1f:03:37:35:e2:2c: db:4b:2b:2c:78:b9:49:db:c4:d0:c7:9c:9c:e4:8a: 20:09:21:16:56:66:ff:05:ec:5b:e3:f0:cf:ab:24: 24:5e:c3:7f:70:7a:12:c4:d2:b5:10:a0:b6:21:e1: 8d:78:69:55:44:69:f5:ca:96:1c:34:85:17:25:77: e2:f6:2f:27:98:78:fd:79:06:3a:a2:d6:5a:43:c1: ff:ec:04:3b:ee:13:ef:d3:58:5a:ff:92:eb:ec:ae: da:f2:37:03:47:41:b6:97:c9:2d:0a:41:22:bb:bb: e6:a7 Exponent: 65537 (0x10001) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 CRL Distribution Points: Full Name: DirName: C = DK, O = TDC Internet, OU = TDC Internet Root CA, CN = CRL1 X509v3 Private Key Usage Period: Not Before: Apr 5 16:33:17 2001 GMT, Not After: Apr 5 17:03:17 2021 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:6C:64:01:C7:FD:85:6D:AC:C8:DA:9E:50:08:85:08:B5:3C:56:A8:50 X509v3 Subject Key Identifier: 6C:64:01:C7:FD:85:6D:AC:C8:DA:9E:50:08:85:08:B5:3C:56:A8:50 X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0...V5.0:4.0.... Signature Algorithm: sha1WithRSAEncryption 4e:43:cc:d1:dd:1d:10:1b:06:7f:b7:a4:fa:d3:d9:4d:fb:23: 9f:23:54:5b:e6:8b:2f:04:28:8b:b5:27:6d:89:a1:ec:98:69: dc:e7:8d:26:83:05:79:74:ec:b4:b9:a3:97:c1:35:00:fd:15: da:39:81:3a:95:31:90:de:97:e9:86:a8:99:77:0c:e5:5a:a0: 84:ff:12:16:ac:6e:b8:8d:c3:7b:92:c2:ac:2e:d0:7d:28:ec: b6:f3:60:38:69:6f:3e:d8:04:55:3e:9e:cc:55:d2:ba:fe:bb: 47:04:d7:0a:d9:16:0a:34:29:f5:58:13:d5:4f:cf:8f:56:4b: b3:1e:ee:d3:98:79:da:08:1e:0c:6f:b8:f8:16:27:ef:c2:6f: 3d:f6:a3:4b:3e:0e:e4:6d:6c:db:3b:41:12:9b:bd:0d:47:23: 7f:3c:4a:d0:af:c0:af:f6:ef:1b:b5:15:c4:eb:83:c4:09:5f: 74:8b:d9:11:fb:c2:56:b1:3c:f8:70:ca:34:8d:43:40:13:8c: fd:99:03:54:79:c6:2e:ea:86:a1:f6:3a:d4:09:bc:f4:bc:66: cc:3d:58:d0:57:49:0a:ee:25:e2:41:ee:13:f9:9b:38:34:d1: 00:f5:7e:e7:94:1d:fc:69:03:62:b8:99:05:05:3d:6b:78:12: bd:b0:6f:65 SHA1 Fingerprint=21:FC:BD:8E:7F:6C:AF:05:1B:D1:B3:43:EC:A8:E7:61:47:F2:0F:8A -----BEGIN CERTIFICATE----- MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJE SzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQg Um9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNV BAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl cm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxLhA vJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20jxsNu Zp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a 0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc1 4izbSysseLlJ28TQx5yc5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGN eGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcD R0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUG A1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIElu dGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxME Q1JMMTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3 WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJ KoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQBO Q8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540mgwV5dOy0uaOX wTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+ 2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm89 9qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0 jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38 aQNiuJkFBT1reBK9sG9l -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1044954564 (0x3e48bdc4) Signature Algorithm: sha1WithRSAEncryption Issuer: C=DK, O=TDC, CN=TDC OCES CA Validity Not Before: Feb 11 08:39:30 2003 GMT Not After : Feb 11 09:09:30 2037 GMT Subject: C=DK, O=TDC, CN=TDC OCES CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:ac:62:f6:61:20:b2:cf:c0:c6:85:d7:e3:79:e6: cc:ed:f2:39:92:a4:97:2e:64:a3:84:5b:87:9c:4c: fd:a4:f3:c4:5f:21:bd:56:10:eb:db:2e:61:ec:93: 69:e3:a3:cc:bd:99:c3:05:fc:06:b8:ca:36:1c:fe: 90:8e:49:4c:c4:56:9a:2f:56:bc:cf:7b:0c:f1:6f: 47:a6:0d:43:4d:e2:e9:1d:39:34:cd:8d:2c:d9:12: 98:f9:e3:e1:c1:4a:7c:86:38:c4:a9:c4:61:88:d2: 5e:af:1a:26:4d:d5:e4:a0:22:47:84:d9:64:b7:19: 96:fc:ec:19:e4:b2:97:26:4e:4a:4c:cb:8f:24:8b: 54:18:1c:48:61:7b:d5:88:68:da:5d:b5:ea:cd:1a: 30:c1:80:83:76:50:aa:4f:d1:d4:dd:38:f0:ef:16: f4:e1:0c:50:06:bf:ea:fb:7a:49:a1:28:2b:1c:f6: fc:15:32:a3:74:6a:8f:a9:c3:62:29:71:31:e5:3b: a4:60:17:5e:74:e6:da:13:ed:e9:1f:1f:1b:d1:b2: 68:73:c6:10:34:75:46:10:10:e3:90:00:76:40:cb: 8b:b7:43:09:21:ff:ab:4e:93:c6:58:e9:a5:82:db: 77:c4:3a:99:b1:72:95:49:04:f0:b7:2b:fa:7b:59: 8e:dd Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Certificate Policies: Policy: 1.2.208.169.1.1.1 CPS: http://www.certifikat.dk/repository User Notice: Organization: TDC Number: 1 Explicit Text: Certifikater fra denne CA udstedes under OID 1.2.208.169.1.1.1. Certificates from this CA are issued under OID 1.2.208.169.1.1.1. Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 CRL Distribution Points: Full Name: DirName: C = DK, O = TDC, CN = TDC OCES CA, CN = CRL1 Full Name: URI:http://crl.oces.certifikat.dk/oces.crl X509v3 Private Key Usage Period: Not Before: Feb 11 08:39:30 2003 GMT, Not After: Feb 11 09:09:30 2037 GMT X509v3 Authority Key Identifier: keyid:60:B5:85:EC:56:64:7E:12:19:27:67:1D:50:15:4B:73:AE:3B:F9:12 X509v3 Subject Key Identifier: 60:B5:85:EC:56:64:7E:12:19:27:67:1D:50:15:4B:73:AE:3B:F9:12 1.2.840.113533.7.65.0: 0...V6.0:4.0.... Signature Algorithm: sha1WithRSAEncryption 0a:ba:26:26:46:d3:73:a8:09:f3:6b:0b:30:99:fd:8a:e1:57: 7a:11:d3:b8:94:d7:09:10:6e:a3:b1:38:03:d1:b6:f2:43:41: 29:62:a7:72:d8:fb:7c:05:e6:31:70:27:54:18:4e:8a:7c:4e: e5:d1:ca:8c:78:88:cf:1b:d3:90:8b:e6:23:f8:0b:0e:33:43: 7d:9c:e2:0a:19:8f:c9:01:3e:74:5d:74:c9:8b:1c:03:e5:18: c8:01:4c:3f:cb:97:05:5d:98:71:a6:98:6f:b6:7c:bd:37:7f: be:e1:93:25:6d:6f:f0:0a:ad:17:18:e1:03:bc:07:29:c8:ad: 26:e8:f8:61:f0:fd:21:09:7e:9a:8e:a9:68:7d:48:62:72:bd: 00:ea:01:99:b8:06:82:51:81:4e:f1:f5:b4:91:54:b9:23:7a: 00:9a:9f:5d:8d:e0:3c:64:b9:1a:12:92:2a:c7:82:44:72:39: dc:e2:3c:c6:d8:55:f5:15:4e:c8:05:0e:db:c6:d0:62:a6:ec: 15:b4:b5:02:82:db:ac:8c:a2:81:f0:9b:99:31:f5:20:20:a8: 88:61:0a:07:9f:94:fc:d0:d7:1b:cc:2e:17:f3:04:27:76:67: eb:54:83:fd:a4:90:7e:06:3d:04:a3:43:2d:da:fc:0b:62:ea: 2f:5f:62:53 SHA1 Fingerprint=87:81:C2:5A:96:BD:C2:FB:4C:65:06:4F:F9:39:0B:26:04:8A:0E:01 -----BEGIN CERTIFICATE----- MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJE SzEMMAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEw ODM5MzBaFw0zNzAyMTEwOTA5MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNU REMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A MIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuHnEz9pPPEXyG9VhDr 2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0zY0s 2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItU GBxIYXvViGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKj dGqPqcNiKXEx5TukYBdedObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+r TpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/ BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB5DCB4TCB3gYIKoFQgSkB AQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5kay9yZXBv c2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRl ciBmcmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEu MS4xLiBDZXJ0aWZpY2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIg T0lEIDEuMi4yMDguMTY5LjEuMS4xLjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1Ud HwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEMMAoGA1UEChMDVERDMRQwEgYD VQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYmaHR0cDovL2Ny bC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZ J2cdUBVLc647+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqG SIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACrom JkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4A9G28kNBKWKnctj7fAXmMXAnVBhO inxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYscA+UYyAFMP8uXBV2Y caaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9AOoB mbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQ YqbsFbS1AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9 BKNDLdr8C2LqL19iUw== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 44:be:0c:8b:50:00:21:b4:11:d3:2a:68:06:a9:ad:69 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN - DATACorp SGC Validity Not Before: Jun 24 18:57:21 1999 GMT Not After : Jun 24 19:06:30 2019 GMT Subject: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN - DATACorp SGC Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:df:ee:58:10:a2:2b:6e:55:c4:8e:bf:2e:46:09: e7:e0:08:0f:2e:2b:7a:13:94:1b:bd:f6:b6:80:8e: 65:05:93:00:1e:bc:af:e2:0f:8e:19:0d:12:47:ec: ac:ad:a3:fa:2e:70:f8:de:6e:fb:56:42:15:9e:2e: 5c:ef:23:de:21:b9:05:76:27:19:0f:4f:d6:c3:9c: b4:be:94:19:63:f2:a6:11:0a:eb:53:48:9c:be:f2: 29:3b:16:e8:1a:a0:4c:a6:c9:f4:18:59:68:c0:70: f2:53:00:c0:5e:50:82:a5:56:6f:36:f9:4a:e0:44: 86:a0:4d:4e:d6:47:6e:49:4a:cb:67:d7:a6:c4:05: b9:8e:1e:f4:fc:ff:cd:e7:36:e0:9c:05:6c:b2:33: 22:15:d0:b4:e0:cc:17:c0:b2:c0:f4:fe:32:3f:29: 2a:95:7b:d8:f2:a7:4e:0f:54:7c:a1:0d:80:b3:09: 03:c1:ff:5c:dd:5e:9a:3e:bc:ae:bc:47:8a:6a:ae: 71:ca:1f:b1:2a:b8:5f:42:05:0b:ec:46:30:d1:72: 0b:ca:e9:56:6d:f5:ef:df:78:be:61:ba:b2:a5:ae: 04:4c:bc:a8:ac:69:15:97:bd:ef:eb:b4:8c:bf:35: f8:d4:c3:d1:28:0e:5c:3a:9f:70:18:33:20:77:c4: a2:af Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: Digital Signature, Non Repudiation, Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 53:32:D1:B3:CF:7F:FA:E0:F1:A0:5D:85:4E:92:D2:9E:45:1D:B4:4F X509v3 CRL Distribution Points: Full Name: URI:http://crl.usertrust.com/UTN-DATACorpSGC.crl X509v3 Extended Key Usage: TLS Web Server Authentication, Microsoft Server Gated Crypto, Netscape Server Gated Crypto Signature Algorithm: sha1WithRSAEncryption 27:35:97:00:8a:8b:28:bd:c6:33:30:1e:29:fc:e2:f7:d5:98: d4:40:bb:60:ca:bf:ab:17:2c:09:36:7f:50:fa:41:dc:ae:96: 3a:0a:23:3e:89:59:c9:a3:07:ed:1b:37:ad:fc:7c:be:51:49: 5a:de:3a:0a:54:08:16:45:c2:99:b1:87:cd:8c:68:e0:69:03: e9:c4:4e:98:b2:3b:8c:16:b3:0e:a0:0c:98:50:9b:93:a9:70: 09:c8:2c:a3:8f:df:02:e4:e0:71:3a:f1:b4:23:72:a0:aa:01: df:df:98:3e:14:50:a0:31:26:bd:28:e9:5a:30:26:75:f9:7b: 60:1c:8d:f3:cd:50:26:6d:04:27:9a:df:d5:0d:45:47:29:6b: 2c:e6:76:d9:a9:29:7d:32:dd:c9:36:3c:bd:ae:35:f1:11:9e: 1d:bb:90:3f:12:47:4e:8e:d7:7e:0f:62:73:1d:52:26:38:1c: 18:49:fd:30:74:9a:c4:e5:22:2f:d8:c0:8d:ed:91:7a:4c:00: 8f:72:7f:5d:da:dd:1b:8b:45:6b:e7:dd:69:97:a8:c5:56:4c: 0f:0c:f6:9f:7a:91:37:f6:97:82:e0:dd:71:69:ff:76:3f:60: 4d:3c:cf:f7:99:f9:c6:57:f4:c9:55:39:78:ba:2c:79:c9:a6: 88:2b:f4:08 SHA1 Fingerprint=58:11:9F:0E:12:82:87:EA:50:FD:D9:87:45:6F:4F:78:DC:FA:D6:D4 -----BEGIN CERTIFICATE----- MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6 E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK 4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv 2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3 mfnGV/TJVTl4uix5yaaIK/QI -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 44:be:0c:8b:50:00:24:b4:11:d3:36:25:25:67:c9:89 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Client Authentication and Email Validity Not Before: Jul 9 17:28:50 1999 GMT Not After : Jul 9 17:36:58 2019 GMT Subject: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Client Authentication and Email Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:b2:39:85:a4:f2:7d:ab:41:3b:62:46:37:ae:cd: c1:60:75:bc:39:65:f9:4a:1a:47:a2:b9:cc:48:cc: 6a:98:d5:4d:35:19:b9:a4:42:e5:ce:49:e2:8a:2f: 1e:7c:d2:31:07:c7:4e:b4:83:64:9d:2e:29:d5:a2: 64:c4:85:bd:85:51:35:79:a4:4e:68:90:7b:1c:7a: a4:92:a8:17:f2:98:15:f2:93:cc:c9:a4:32:95:bb: 0c:4f:30:bd:98:a0:0b:8b:e5:6e:1b:a2:46:fa:78: bc:a2:6f:ab:59:5e:a5:2f:cf:ca:da:6d:aa:2f:eb: ac:a1:b3:6a:aa:b7:2e:67:35:8b:79:e1:1e:69:88: e2:e6:46:cd:a0:a5:ea:be:0b:ce:76:3a:7a:0e:9b: ea:fc:da:27:5b:3d:73:1f:22:e6:48:61:c6:4c:f3: 69:b1:a8:2e:1b:b6:d4:31:20:2c:bc:82:8a:8e:a4: 0e:a5:d7:89:43:fc:16:5a:af:1d:71:d7:11:59:da: ba:87:0d:af:fa:f3:e1:c2:f0:a4:c5:67:8c:d6:d6: 54:3a:de:0a:a4:ba:03:77:b3:65:c8:fd:1e:d3:74: 62:aa:18:ca:68:93:1e:a1:85:7e:f5:47:65:cb:f8: 4d:57:28:74:d2:34:ff:30:b6:ee:f6:62:30:14:8c: 2c:eb Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: Digital Signature, Non Repudiation, Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 89:82:67:7D:C4:9D:26:70:00:4B:B4:50:48:7C:DE:3D:AE:04:6E:7D X509v3 CRL Distribution Points: Full Name: URI:http://crl.usertrust.com/UTN-USERFirst-ClientAuthenticationandEmail.crl X509v3 Extended Key Usage: TLS Web Client Authentication, E-mail Protection Signature Algorithm: sha1WithRSAEncryption b1:6d:61:5d:a6:1a:7f:7c:ab:4a:e4:30:fc:53:6f:25:24:c6: ca:ed:e2:31:5c:2b:0e:ee:ee:61:55:6f:04:3e:cf:39:de:c5: 1b:49:94:e4:eb:20:4c:b4:e6:9e:50:2e:72:d9:8d:f5:aa:a3: b3:4a:da:56:1c:60:97:80:dc:82:a2:ad:4a:bd:8a:2b:ff:0b: 09:b4:c6:d7:20:04:45:e4:cd:80:01:ba:ba:2b:6e:ce:aa:d7: 92:fe:e4:af:eb:f4:26:1d:16:2a:7f:6c:30:95:37:2f:33:12: ac:7f:dd:c7:d1:11:8c:51:98:b2:d0:a3:91:d0:ad:f6:9f:9e: 83:93:1e:1d:42:b8:46:af:6b:66:f0:9b:7f:ea:e3:03:02:e5: 02:51:c1:aa:d5:35:9d:72:40:03:89:ba:31:1d:c5:10:68:52: 9e:df:a2:85:c5:5c:08:a6:78:e6:53:4f:b1:e8:b7:d3:14:9e: 93:a6:c3:64:e3:ac:7e:71:cd:bc:9f:e9:03:1b:cc:fb:e9:ac: 31:c1:af:7c:15:74:02:99:c3:b2:47:a6:c2:32:61:d7:c7:6f: 48:24:51:27:a1:d5:87:55:f2:7b:8f:98:3d:16:9e:ee:75:b6: f8:d0:8e:f2:f3:c6:ae:28:5b:a7:f0:f3:36:17:fc:c3:05:d3: ca:03:4a:54 SHA1 Fingerprint=B1:72:B1:A5:6D:95:F9:1F:E5:02:87:E1:4D:37:EA:6A:44:63:76:8A -----BEGIN CERTIFICATE----- MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCB rjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNVBAMTLVVUTi1VU0VSRmlyc3Qt Q2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05OTA3MDkxNzI4NTBa Fw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAV BgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5l dHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UE AxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWls MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3B YHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9 hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8om+rWV6l L8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLm SGHGTPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM 1tZUOt4KpLoDd7NlyP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws 6wIDAQABo4G5MIG2MAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud DgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNVHR8EUTBPME2gS6BJhkdodHRw Oi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGllbnRBdXRoZW50 aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u 7mFVbwQ+zznexRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0 xtcgBEXkzYABurorbs6q15L+5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQ rfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarVNZ1yQAOJujEdxRBoUp7fooXFXAim eOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gk USeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 44:be:0c:8b:50:00:24:b4:11:d3:36:2a:fe:65:0a:fd Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Hardware Validity Not Before: Jul 9 18:10:42 1999 GMT Not After : Jul 9 18:19:22 2019 GMT Subject: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Hardware Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:b1:f7:c3:38:3f:b4:a8:7f:cf:39:82:51:67:d0: 6d:9f:d2:ff:58:f3:e7:9f:2b:ec:0d:89:54:99:b9: 38:99:16:f7:e0:21:79:48:c2:bb:61:74:12:96:1d: 3c:6a:72:d5:3c:10:67:3a:39:ed:2b:13:cd:66:eb: 95:09:33:a4:6c:97:b1:e8:c6:ec:c1:75:79:9c:46: 5e:8d:ab:d0:6a:fd:b9:2a:55:17:10:54:b3:19:f0: 9a:f6:f1:b1:5d:b6:a7:6d:fb:e0:71:17:6b:a2:88: fb:00:df:fe:1a:31:77:0c:9a:01:7a:b1:32:e3:2b: 01:07:38:6e:c3:a5:5e:23:bc:45:9b:7b:50:c1:c9: 30:8f:db:e5:2b:7a:d3:5b:fb:33:40:1e:a0:d5:98: 17:bc:8b:87:c3:89:d3:5d:a0:8e:b2:aa:aa:f6:8e: 69:88:06:c5:fa:89:21:f3:08:9d:69:2e:09:33:9b: 29:0d:46:0f:8c:cc:49:34:b0:69:51:bd:f9:06:cd: 68:ad:66:4c:bc:3e:ac:61:bd:0a:88:0e:c8:df:3d: ee:7c:04:4c:9d:0a:5e:6b:91:d6:ee:c7:ed:28:8d: ab:4d:87:89:73:d0:6e:a4:d0:1e:16:8b:14:e1:76: 44:03:7f:63:ac:e4:cd:49:9c:c5:92:f4:ab:32:a1: 48:5b Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: Digital Signature, Non Repudiation, Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: A1:72:5F:26:1B:28:98:43:95:5D:07:37:D5:85:96:9D:4B:D2:C3:45 X509v3 CRL Distribution Points: Full Name: URI:http://crl.usertrust.com/UTN-USERFirst-Hardware.crl X509v3 Extended Key Usage: TLS Web Server Authentication, IPSec End System, IPSec Tunnel, IPSec User Signature Algorithm: sha1WithRSAEncryption 47:19:0f:de:74:c6:99:97:af:fc:ad:28:5e:75:8e:eb:2d:67: ee:4e:7b:2b:d7:0c:ff:f6:de:cb:55:a2:0a:e1:4c:54:65:93: 60:6b:9f:12:9c:ad:5e:83:2c:eb:5a:ae:c0:e4:2d:f4:00:63: 1d:b8:c0:6c:f2:cf:49:bb:4d:93:6f:06:a6:0a:22:b2:49:62: 08:4e:ff:c8:c8:14:b2:88:16:5d:e7:01:e4:12:95:e5:45:34: b3:8b:69:bd:cf:b4:85:8f:75:51:9e:7d:3a:38:3a:14:48:12: c6:fb:a7:3b:1a:8d:0d:82:40:07:e8:04:08:90:a1:89:cb:19: 50:df:ca:1c:01:bc:1d:04:19:7b:10:76:97:3b:ee:90:90:ca: c4:0e:1f:16:6e:75:ef:33:f8:d3:6f:5b:1e:96:e3:e0:74:77: 74:7b:8a:a2:6e:2d:dd:76:d6:39:30:82:f0:ab:9c:52:f2:2a: c7:af:49:5e:7e:c7:68:e5:82:81:c8:6a:27:f9:27:88:2a:d5: 58:50:95:1f:f0:3b:1c:57:bb:7d:14:39:62:2b:9a:c9:94:92: 2a:a3:22:0c:ff:89:26:7d:5f:23:2b:47:d7:15:1d:a9:6a:9e: 51:0d:2a:51:9e:81:f9:d4:3b:5e:70:12:7f:10:32:9c:1e:bb: 9d:f8:66:a8 SHA1 Fingerprint=04:83:ED:33:99:AC:36:08:05:87:22:ED:BC:5E:46:00:E3:BE:F9:D7 -----BEGIN CERTIFICATE----- MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn 0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0 dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM //bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t 3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 44:be:0c:8b:50:00:24:b4:11:d3:36:2d:e0:b3:5f:1b Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Object Validity Not Before: Jul 9 18:31:20 1999 GMT Not After : Jul 9 18:40:36 2019 GMT Subject: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Object Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:ce:aa:81:3f:a3:a3:61:78:aa:31:00:55:95:11: 9e:27:0f:1f:1c:df:3a:9b:82:68:30:c0:4a:61:1d: f1:2f:0e:fa:be:79:f7:a5:23:ef:55:51:96:84:cd: db:e3:b9:6e:3e:31:d8:0a:20:67:c7:f4:d9:bf:94: eb:47:04:3e:02:ce:2a:a2:5d:87:04:09:f6:30:9d: 18:8a:97:b2:aa:1c:fc:41:d2:a1:36:cb:fb:3d:91: ba:e7:d9:70:35:fa:e4:e7:90:c3:9b:a3:9b:d3:3c: f5:12:99:77:b1:b7:09:e0:68:e6:1c:b8:f3:94:63: 88:6a:6a:fe:0b:76:c9:be:f4:22:e4:67:b9:ab:1a: 5e:77:c1:85:07:dd:0d:6c:bf:ee:06:c7:77:6a:41: 9e:a7:0f:d7:fb:ee:94:17:b7:fc:85:be:a4:ab:c4: 1c:31:dd:d7:b6:d1:e4:f0:ef:df:16:8f:b2:52:93: d7:a1:d4:89:a1:07:2e:bf:e1:01:12:42:1e:1a:e1: d8:95:34:db:64:79:28:ff:ba:2e:11:c2:e5:e8:5b: 92:48:fb:47:0b:c2:6c:da:ad:32:83:41:f3:a5:e5: 41:70:fd:65:90:6d:fa:fa:51:c4:f9:bd:96:2b:19: 04:2c:d3:6d:a7:dc:f0:7f:6f:83:65:e2:6a:ab:87: 86:75 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: Digital Signature, Non Repudiation, Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: DA:ED:64:74:14:9C:14:3C:AB:DD:99:A9:BD:5B:28:4D:8B:3C:C9:D8 X509v3 CRL Distribution Points: Full Name: URI:http://crl.usertrust.com/UTN-USERFirst-Object.crl X509v3 Extended Key Usage: Code Signing, Time Stamping, Microsoft Encrypted File System Signature Algorithm: sha1WithRSAEncryption 08:1f:52:b1:37:44:78:db:fd:ce:b9:da:95:96:98:aa:55:64: 80:b5:5a:40:dd:21:a5:c5:c1:f3:5f:2c:4c:c8:47:5a:69:ea: e8:f0:35:35:f4:d0:25:f3:c8:a6:a4:87:4a:bd:1b:b1:73:08: bd:d4:c3:ca:b6:35:bb:59:86:77:31:cd:a7:80:14:ae:13:ef: fc:b1:48:f9:6b:25:25:2d:51:b6:2c:6d:45:c1:98:c8:8a:56: 5d:3e:ee:43:4e:3e:6b:27:8e:d0:3a:4b:85:0b:5f:d3:ed:6a: a7:75:cb:d1:5a:87:2f:39:75:13:5a:72:b0:02:81:9f:be:f0: 0f:84:54:20:62:6c:69:d4:e1:4d:c6:0d:99:43:01:0d:12:96: 8c:78:9d:bf:50:a2:b1:44:aa:6a:cf:17:7a:cf:6f:0f:d4:f8: 24:55:5f:f0:34:16:49:66:3e:50:46:c9:63:71:38:31:62:b8: 62:b9:f3:53:ad:6c:b5:2b:a2:12:aa:19:4f:09:da:5e:e7:93: c6:8e:14:08:fe:f0:30:80:18:a0:86:85:4d:c8:7d:d7:8b:03: fe:6e:d5:f7:9d:16:ac:92:2c:a0:23:e5:9c:91:52:1f:94:df: 17:94:73:c3:b3:c1:c1:71:05:20:00:78:bd:13:52:1d:a8:3e: cd:00:1f:c8 SHA1 Fingerprint=E1:2D:FB:4B:41:D7:D9:C3:2B:30:51:4B:AC:1D:81:D8:38:5E:2D:46 -----BEGIN CERTIFICATE----- MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCB lTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAbBgNVBAMTFFVUTi1VU0VSRmlyc3Qt T2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAzNlowgZUxCzAJBgNV BAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAc BgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3 dy51c2VydHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCC ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicP HxzfOpuCaDDASmEd8S8O+r5596Uj71VRloTN2+O5bj4x2AogZ8f02b+U60cEPgLO KqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQw5ujm9M89RKZd7G3CeBo 5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vulBe3/IW+ pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehb kkj7RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUC AwEAAaOBrzCBrDALBgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E FgQU2u1kdBScFDyr3ZmpvVsoTYs8ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDov L2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmlyc3QtT2JqZWN0LmNybDApBgNV HSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQwDQYJKoZIhvcN AQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXB mMiKVl0+7kNOPmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU 4U3GDZlDAQ0Slox4nb9QorFEqmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK5 81OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCGhU3IfdeLA/5u1fedFqySLKAj5ZyR Uh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: sha1WithRSAEncryption Issuer: C=EU, O=AC Camerfirma SA CIF A82743287, OU=http://www.chambersign.org, CN=Chambers of Commerce Root Validity Not Before: Sep 30 16:13:43 2003 GMT Not After : Sep 30 16:13:44 2037 GMT Subject: C=EU, O=AC Camerfirma SA CIF A82743287, OU=http://www.chambersign.org, CN=Chambers of Commerce Root Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:b7:36:55:e5:a5:5d:18:30:e0:da:89:54:91:fc: c8:c7:52:f8:2f:50:d9:ef:b1:75:73:65:47:7d:1b: 5b:ba:75:c5:fc:a1:88:24:fa:2f:ed:ca:08:4a:39: 54:c4:51:7a:b5:da:60:ea:38:3c:81:b2:cb:f1:bb: d9:91:23:3f:48:01:70:75:a9:05:2a:ad:1f:71:f3: c9:54:3d:1d:06:6a:40:3e:b3:0c:85:ee:5c:1b:79: c2:62:c4:b8:36:8e:35:5d:01:0c:23:04:47:35:aa: 9b:60:4e:a0:66:3d:cb:26:0a:9c:40:a1:f4:5d:98: bf:71:ab:a5:00:68:2a:ed:83:7a:0f:a2:14:b5:d4: 22:b3:80:b0:3c:0c:5a:51:69:2d:58:18:8f:ed:99: 9e:f1:ae:e2:95:e6:f6:47:a8:d6:0c:0f:b0:58:58: db:c3:66:37:9e:9b:91:54:33:37:d2:94:1c:6a:48: c9:c9:f2:a5:da:a5:0c:23:f7:23:0e:9c:32:55:5e: 71:9c:84:05:51:9a:2d:fd:e6:4e:2a:34:5a:de:ca: 40:37:67:0c:54:21:55:77:da:0a:0c:cc:97:ae:80: dc:94:36:4a:f4:3e:ce:36:13:1e:53:e4:ac:4e:3a: 05:ec:db:ae:72:9c:38:8b:d0:39:3b:89:0a:3e:77: fe:75 Exponent: 3 (0x3) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE, pathlen:12 X509v3 CRL Distribution Points: Full Name: URI:http://crl.chambersign.org/chambersroot.crl X509v3 Subject Key Identifier: E3:94:F5:B1:4D:E9:DB:A1:29:5B:57:8B:4D:76:06:76:E1:D1:A2:8A X509v3 Key Usage: critical Certificate Sign, CRL Sign Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 Subject Alternative Name: email:chambersroot@chambersign.org X509v3 Issuer Alternative Name: email:chambersroot@chambersign.org X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.17326.10.3.1 CPS: http://cps.chambersign.org/cps/chambersroot.html Signature Algorithm: sha1WithRSAEncryption 0c:41:97:c2:1a:86:c0:22:7c:9f:fb:90:f3:1a:d1:03:b1:ef: 13:f9:21:5f:04:9c:da:c9:a5:8d:27:6c:96:87:91:be:41:90: 01:72:93:e7:1e:7d:5f:f6:89:c6:5d:a7:40:09:3d:ac:49:45: 45:dc:2e:8d:30:68:b2:09:ba:fb:c3:2f:cc:ba:0b:df:3f:77: 7b:46:7d:3a:12:24:8e:96:8f:3c:05:0a:6f:d2:94:28:1d:6d: 0c:c0:2e:88:22:d5:d8:cf:1d:13:c7:f0:48:d7:d7:05:a7:cf: c7:47:9e:3b:3c:34:c8:80:4f:d4:14:bb:fc:0d:50:f7:fa:b3: ec:42:5f:a9:dd:6d:c8:f4:75:cf:7b:c1:72:26:b1:01:1c:5c: 2c:fd:7a:4e:b4:01:c5:05:57:b9:e7:3c:aa:05:d9:88:e9:07: 46:41:ce:ef:41:81:ae:58:df:83:a2:ae:ca:d7:77:1f:e7:00: 3c:9d:6f:8e:e4:32:09:1d:4d:78:34:78:34:3c:94:9b:26:ed: 4f:71:c6:19:7a:bd:20:22:48:5a:fe:4b:7d:03:b7:e7:58:be: c6:32:4e:74:1e:68:dd:a8:68:5b:b3:3e:ee:62:7d:d9:80:e8: 0a:75:7a:b7:ee:b4:65:9a:21:90:e0:aa:d0:98:bc:38:b5:73: 3c:8b:f8:dc SHA1 Fingerprint=6E:3A:55:A4:19:0C:19:5C:93:84:3C:C0:DB:72:2E:31:30:61:F0:B1 -----BEGIN CERTIFICATE----- MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq 7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3 0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p 26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi 1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0 eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu tGWaIZDgqtCYvDi1czyL+Nw= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: sha1WithRSAEncryption Issuer: C=EU, O=AC Camerfirma SA CIF A82743287, OU=http://www.chambersign.org, CN=Global Chambersign Root Validity Not Before: Sep 30 16:14:18 2003 GMT Not After : Sep 30 16:14:18 2037 GMT Subject: C=EU, O=AC Camerfirma SA CIF A82743287, OU=http://www.chambersign.org, CN=Global Chambersign Root Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:a2:70:a2:d0:9f:42:ae:5b:17:c7:d8:7d:cf:14: 83:fc:4f:c9:a1:b7:13:af:8a:d7:9e:3e:04:0a:92: 8b:60:56:fa:b4:32:2f:88:4d:a1:60:08:f4:b7:09: 4e:a0:49:2f:49:d6:d3:df:9d:97:5a:9f:94:04:70: ec:3f:59:d9:b7:cc:66:8b:98:52:28:09:02:df:c5: 2f:84:8d:7a:97:77:bf:ec:40:9d:25:72:ab:b5:3f: 32:98:fb:b7:b7:fc:72:84:e5:35:87:f9:55:fa:a3: 1f:0e:6f:2e:28:dd:69:a0:d9:42:10:c6:f8:b5:44: c2:d0:43:7f:db:bc:e4:a2:3c:6a:55:78:0a:77:a9: d8:ea:19:32:b7:2f:fe:5c:3f:1b:ee:b1:98:ec:ca: ad:7a:69:45:e3:96:0f:55:f6:e6:ed:75:ea:65:e8: 32:56:93:46:89:a8:25:8a:65:06:ee:6b:bf:79:07: d0:f1:b7:af:ed:2c:4d:92:bb:c0:a8:5f:a7:67:7d: 04:f2:15:08:70:ac:92:d6:7d:04:d2:33:fb:4c:b6: 0b:0b:fb:1a:c9:c4:8d:03:a9:7e:5c:f2:50:ab:12: a5:a1:cf:48:50:a5:ef:d2:c8:1a:13:fa:b0:7f:b1: 82:1c:77:6a:0f:5f:dc:0b:95:8f:ef:43:7e:e6:45: 09:25 Exponent: 3 (0x3) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE, pathlen:12 X509v3 CRL Distribution Points: Full Name: URI:http://crl.chambersign.org/chambersignroot.crl X509v3 Subject Key Identifier: 43:9C:36:9F:B0:9E:30:4D:C6:CE:5F:AD:10:AB:E5:03:A5:FA:A9:14 X509v3 Key Usage: critical Certificate Sign, CRL Sign Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 Subject Alternative Name: email:chambersignroot@chambersign.org X509v3 Issuer Alternative Name: email:chambersignroot@chambersign.org X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.17326.10.1.1 CPS: http://cps.chambersign.org/cps/chambersignroot.html Signature Algorithm: sha1WithRSAEncryption 3c:3b:70:91:f9:04:54:27:91:e1:ed:ed:fe:68:7f:61:5d:e5: 41:65:4f:32:f1:18:05:94:6a:1c:de:1f:70:db:3e:7b:32:02: 34:b5:0c:6c:a1:8a:7c:a5:f4:8f:ff:d4:d8:ad:17:d5:2d:04: d1:3f:58:80:e2:81:59:88:be:c0:e3:46:93:24:fe:90:bd:26: a2:30:2d:e8:97:26:57:35:89:74:96:18:f6:15:e2:af:24:19: 56:02:02:b2:ba:0f:14:ea:c6:8a:66:c1:86:45:55:8b:be:92: be:9c:a4:04:c7:49:3c:9e:e8:29:7a:89:d7:fe:af:ff:68:f5: a5:17:90:bd:ac:99:cc:a5:86:57:09:67:46:db:d6:16:c2:46: f1:e4:a9:50:f5:8f:d1:92:15:d3:5f:3e:c6:00:49:3a:6e:58: b2:d1:d1:27:0d:25:c8:32:f8:20:11:cd:7d:32:33:48:94:54: 4c:dd:dc:79:c4:30:9f:eb:8e:b8:55:b5:d7:88:5c:c5:6a:24: 3d:b2:d3:05:03:51:c6:07:ef:cc:14:72:74:3d:6e:72:ce:18: 28:8c:4a:a0:77:e5:09:2b:45:44:47:ac:b7:67:7f:01:8a:05: 5a:93:be:a1:c1:ff:f8:e7:0e:67:a4:47:49:76:5d:75:90:1a: f5:26:8f:f0 SHA1 Fingerprint=33:9B:6B:14:50:24:9B:55:7A:01:87:72:84:D9:E0:2F:C3:D2:D8:E9 -----BEGIN CERTIFICATE----- MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEn MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENo YW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYxNDE4WhcNMzcwOTMwMTYxNDE4WjB9 MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgy NzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4G A1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUA A4IBDQAwggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0 Mi+ITaFgCPS3CU6gSS9J1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/s QJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8Oby4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpV eAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl6DJWk0aJqCWKZQbua795 B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c8lCrEqWh z0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0T AQH/BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1i ZXJzaWduLm9yZy9jaGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4w TcbOX60Qq+UDpfqpFDAOBgNVHQ8BAf8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAH MCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBjaGFtYmVyc2lnbi5vcmcwKgYD VR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9yZzBbBgNVHSAE VDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0B AQUFAAOCAQEAPDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUM bKGKfKX0j//U2K0X1S0E0T9YgOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXi ryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJPJ7oKXqJ1/6v/2j1pReQvayZzKWG VwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4IBHNfTIzSJRUTN3c ecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREest2d/ AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 123 (0x7b) Signature Algorithm: sha1WithRSAEncryption Issuer: C=HU, L=Budapest, O=NetLock Halozatbiztonsagi Kft., OU=Tanusitvanykiadok, CN=NetLock Minositett Kozjegyzoi (Class QA) Tanusitvanykiado/emailAddress=info@netlock.hu Validity Not Before: Mar 30 01:47:11 2003 GMT Not After : Dec 15 01:47:11 2022 GMT Subject: C=HU, L=Budapest, O=NetLock Halozatbiztonsagi Kft., OU=Tanusitvanykiadok, CN=NetLock Minositett Kozjegyzoi (Class QA) Tanusitvanykiado/emailAddress=info@netlock.hu Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:c7:52:25:b2:d8:3d:d4:84:55:09:a7:1b:bd:6c: b9:14:f4:8a:02:db:76:fc:6a:2a:78:ab:e5:77:f0: 6e:e0:8c:23:67:db:a5:64:99:b9:dd:01:3e:6f:ef: 2d:9a:3c:22:f0:5d:c9:57:a0:55:41:7f:f2:43:5e: 58:82:53:31:65:ce:1e:f2:26:ba:00:54:1e:af:b0: bc:1c:e4:52:8c:a0:32:af:b7:37:b1:53:67:68:74: 67:50:f6:2d:2e:64:de:ae:26:79:df:df:99:86:ab: ab:7f:85:ec:a0:fb:80:cc:f4:b8:0c:1e:93:45:63: b9:dc:b8:5b:9b:ed:5b:39:d4:5f:62:b0:a7:8e:7c: 66:38:2c:aa:b1:08:63:17:67:7d:cc:bd:b3:f1:c3: 3f:cf:50:39:ed:d1:19:83:15:db:87:12:27:96:b7: da:ea:e5:9d:bc:ba:ea:39:4f:8b:ef:74:9a:e7:c5: d0:d2:ea:86:51:1c:e4:fe:64:08:28:04:79:05:eb: ca:c5:71:0e:0b:ef:ab:ea:ec:12:11:a1:18:05:32: 69:d1:0c:2c:1a:3d:25:99:3f:b5:7c:ca:6d:b0:ae: 99:99:fa:08:60:e7:19:c2:f2:bd:51:d3:cc:d3:02: ac:c1:11:0c:80:ce:ab:dc:94:9d:6b:a3:39:53:3a: d6:85 Exponent: 50557 (0xc57d) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE, pathlen:4 X509v3 Key Usage: critical Certificate Sign, CRL Sign Netscape Comment: FIGYELEM! Ezen tanusitvany a NetLock Kft. Minositett Szolgaltatasi Szabalyzataban leirt eljarasok alapjan keszult. A minositett elektronikus alairas joghatas ervenyesulesenek, valamint elfogadasanak feltetele a Minositett Szolgaltatasi Szabalyzatban, az Altalanos Szerzodesi Feltetelekben eloirt ellenorzesi eljaras megtetele. A dokumentumok megtalalhatok a https://www.netlock.hu/docs/ cimen vagy kerhetok az info@netlock.net e-mail cimen. WARNING! The issuance and the use of this certificate are subject to the NetLock Qualified CPS available at https://www.netlock.hu/docs/ or by e-mail at info@netlock.net X509v3 Subject Key Identifier: 09:6A:62:16:92:B0:5A:BB:55:0E:CB:75:32:3A:32:E5:B2:21:C9:28 Signature Algorithm: sha1WithRSAEncryption 91:6a:50:9c:db:78:81:9b:3f:8b:42:e3:3b:fc:a6:c3:ee:43: e0:cf:f3:e2:80:35:49:45:76:02:e2:e3:2f:05:c5:f1:2a:e7: c0:41:33:c6:b6:9b:d0:33:39:cd:c0:db:a1:ad:6c:37:02:4c: 58:41:3b:f2:97:92:c6:48:a8:cd:e5:8a:39:89:61:f9:52:97: e9:bd:f6:f9:94:74:e8:71:0e:bc:77:86:c3:06:cc:5a:7c:4a: 7e:34:50:30:2e:fb:7f:32:9a:8d:3d:f3:20:5b:f8:6a:ca:86: f3:31:4c:2c:59:80:02:7d:fe:38:c9:30:75:1c:b7:55:e3:bc: 9f:ba:a8:6d:84:28:05:75:b3:8b:0d:c0:91:54:21:e7:a6:0b: b4:99:f5:51:41:dc:cd:a3:47:22:d9:c7:01:81:c4:dc:47:4f: 26:ea:1f:ed:db:cd:0d:98:f4:a3:9c:b4:73:32:4a:96:99:fe: bc:7f:c8:25:58:f8:58:f3:76:66:89:54:a4:a6:3e:c4:50:5c: ba:89:18:82:75:48:21:d2:4f:13:e8:60:7e:07:76:db:10:b5: 51:e6:aa:b9:68:aa:cd:f6:9d:90:75:12:ea:38:1a:ca:44:e8: b7:99:a7:2a:68:95:66:95:ab:ad:ef:89:cb:60:a9:06:12:c6: 94:47:e9:28 SHA1 Fingerprint=01:68:97:E1:A0:B8:F2:C3:B1:34:66:5C:20:A7:27:B7:A1:58:E2:8F -----BEGIN CERTIFICATE----- MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUx ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0 b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQD EzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVneXpvaSAoQ2xhc3MgUUEpIFRhbnVz aXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0bG9jay5odTAeFw0w MzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTERMA8G A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5l dExvY2sgTWlub3NpdGV0dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZh bnlraWFkbzEeMBwGCSqGSIb3DQEJARYPaW5mb0BuZXRsb2NrLmh1MIIBIjANBgkq hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRVCacbvWy5FPSKAtt2/Goq eKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e8ia6AFQe r7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO5 3Lhbm+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWd vLrqOU+L73Sa58XQ0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0l mT+1fMptsK6ZmfoIYOcZwvK9UdPM0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4IC wDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8EBAMCAQYwggJ1Bglg hkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2YW55IGEgTmV0 TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQg ZWxla3Ryb25pa3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywg dmFsYW1pbnQgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6 b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwgYXogQWx0YWxhbm9zIFN6ZXJ6b2Rl c2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kgZWxqYXJhcyBtZWd0 ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczovL3d3 dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0Bu ZXRsb2NrLm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBh bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRo ZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3 Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0IGluZm9AbmV0bG9jay5u ZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3DQEBBQUA A4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQ MznNwNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+ NFAwLvt/MpqNPfMgW/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCR VCHnpgu0mfVRQdzNo0ci2ccBgcTcR08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY 83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR5qq5aKrN9p2QdRLqOBrKROi3 macqaJVmlaut74nLYKkGEsaUR+ko -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 259 (0x103) Signature Algorithm: md5WithRSAEncryption Issuer: C=HU, ST=Hungary, L=Budapest, O=NetLock Halozatbiztonsagi Kft., OU=Tanusitvanykiadok, CN=NetLock Kozjegyzoi (Class A) Tanusitvanykiado Validity Not Before: Feb 24 23:14:47 1999 GMT Not After : Feb 19 23:14:47 2019 GMT Subject: C=HU, ST=Hungary, L=Budapest, O=NetLock Halozatbiztonsagi Kft., OU=Tanusitvanykiadok, CN=NetLock Kozjegyzoi (Class A) Tanusitvanykiado Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:bc:74:8c:0f:bb:4c:f4:37:1e:a9:05:82:d8:e6: e1:6c:70:ea:78:b5:6e:d1:38:44:0d:a8:83:ce:5d: d2:d6:d5:81:c5:d4:4b:e7:5b:94:70:26:db:3b:9d: 6a:4c:62:f7:71:f3:64:d6:61:3b:3d:eb:73:a3:37: d9:cf:ea:8c:92:3b:cd:f7:07:dc:66:74:97:f4:45: 22:dd:f4:5c:e0:bf:6d:f3:be:65:33:e4:15:3a:bf: db:98:90:55:38:c4:ed:a6:55:63:0b:b0:78:04:f4: e3:6e:c1:3f:8e:fc:51:78:1f:92:9e:83:c2:fe:d9: b0:a9:c9:bc:5a:00:ff:a9:a8:98:74:fb:f6:2c:3e: 15:39:0d:b6:04:55:a8:0e:98:20:42:b3:b1:25:ad: 7e:9a:6f:5d:53:b1:ab:0c:fc:eb:e0:f3:7a:b3:a8: b3:ff:46:f6:63:a2:d8:3a:98:7b:b6:ac:85:ff:b0: 25:4f:74:63:e7:13:07:a5:0a:8f:05:f7:c0:64:6f: 7e:a7:27:80:96:de:d4:2e:86:60:c7:6b:2b:5e:73: 7b:17:e7:91:3f:64:0c:d8:4b:22:34:2b:9b:32:f2: 48:1f:9f:a1:0a:84:7a:e2:c2:ad:97:3d:8e:d5:c1: f9:56:a3:50:e9:c6:b4:fa:98:a2:ee:95:e6:2a:03: 8c:df Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE, pathlen:4 Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA Netscape Comment: FIGYELEM! Ezen tanusitvany a NetLock Kft. Altalanos Szolgaltatasi Felteteleiben leirt eljarasok alapjan keszult. A hitelesites folyamatat a NetLock Kft. termekfelelosseg-biztositasa vedi. A digitalis alairas elfogadasanak feltetele az eloirt ellenorzesi eljaras megtetele. Az eljaras leirasa megtalalhato a NetLock Kft. Internet honlapjan a https://www.netlock.net/docs cimen vagy kerheto az ellenorzes@netlock.net e-mail cimen. IMPORTANT! The issuance and the use of this certificate is subject to the NetLock CPS available at https://www.netlock.net/docs or by e-mail at cps@netlock.net. Signature Algorithm: md5WithRSAEncryption 48:24:46:f7:ba:56:6f:fa:c8:28:03:40:4e:e5:31:39:6b:26: 6b:53:7f:db:df:df:f3:71:3d:26:c0:14:0e:c6:67:7b:23:a8: 0c:73:dd:01:bb:c6:ca:6e:37:39:55:d5:c7:8c:56:20:0e:28: 0a:0e:d2:2a:a4:b0:49:52:c6:38:07:fe:be:0a:09:8c:d1:98: cf:ca:da:14:31:a1:4f:d2:39:fc:0f:11:2c:43:c3:dd:ab:93: c7:55:3e:47:7c:18:1a:00:dc:f3:7b:d8:f2:7f:52:6c:20:f4: 0b:5f:69:52:f4:ee:f8:b2:29:60:eb:e3:49:31:21:0d:d6:b5: 10:41:e2:41:09:6c:e2:1a:9a:56:4b:77:02:f6:a0:9b:9a:27: 87:e8:55:29:71:c2:90:9f:45:78:1a:e1:15:64:3d:d0:0e:d8: a0:76:9f:ae:c5:d0:2e:ea:d6:0f:56:ec:64:7f:5a:9b:14:58: 01:27:7e:13:50:c7:6b:2a:e6:68:3c:bf:5c:a0:0a:1b:e1:0e: 7a:e9:e2:80:c3:e9:e9:f6:fd:6c:11:9e:d0:e5:28:27:2b:54: 32:42:14:82:75:e6:4a:f0:2b:66:75:63:8c:a2:fb:04:3e:83: 0e:9b:36:f0:18:e4:26:20:c3:8c:f0:28:07:ad:3c:17:66:88: b5:fd:b6:88 SHA1 Fingerprint=AC:ED:5F:65:53:FD:25:CE:01:5F:1F:7A:48:3B:6A:74:9F:61:78:C6 -----BEGIN CERTIFICATE----- MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhV MRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMe TmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0 dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBB KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oXDTE5MDIxOTIzMTQ0 N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhC dWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQu MRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBL b3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiD zl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi 3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8 WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LY Oph7tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2Esi NCubMvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCC ApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4 QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEgRXplbiB0 YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFz aSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtm ZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMg ZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVs amFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJhc2EgbWVndGFsYWxoYXRv IGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3 Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6 ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1 YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3Qg dG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRs b2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0G CSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQO xmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoUMaFP 0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQ QeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxk f1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK 8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 105 (0x69) Signature Algorithm: md5WithRSAEncryption Issuer: C=HU, L=Budapest, O=NetLock Halozatbiztonsagi Kft., OU=Tanusitvanykiadok, CN=NetLock Uzleti (Class B) Tanusitvanykiado Validity Not Before: Feb 25 14:10:22 1999 GMT Not After : Feb 20 14:10:22 2019 GMT Subject: C=HU, L=Budapest, O=NetLock Halozatbiztonsagi Kft., OU=Tanusitvanykiadok, CN=NetLock Uzleti (Class B) Tanusitvanykiado Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:b1:ea:04:ec:20:a0:23:c2:8f:38:60:cf:c7:46: b3:d5:1b:fe:fb:b9:99:9e:04:dc:1c:7f:8c:4a:81: 98:ee:a4:d4:ca:8a:17:b9:22:7f:83:0a:75:4c:9b: c0:69:d8:64:39:a3:ed:92:a3:fd:5b:5c:74:1a:c0: 47:ca:3a:69:76:9a:ba:e2:44:17:fc:4c:a3:d5:fe: b8:97:88:af:88:03:89:1f:a4:f2:04:3e:c8:07:0b: e6:f9:b3:2f:7a:62:14:09:46:14:ca:64:f5:8b:80: b5:62:a8:d8:6b:d6:71:93:2d:b3:bf:09:54:58:ed: 06:eb:a8:7b:dc:43:b1:a1:69 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE, pathlen:4 X509v3 Key Usage: critical Certificate Sign, CRL Sign Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA Netscape Comment: FIGYELEM! Ezen tanusitvany a NetLock Kft. Altalanos Szolgaltatasi Felteteleiben leirt eljarasok alapjan keszult. A hitelesites folyamatat a NetLock Kft. termekfelelosseg-biztositasa vedi. A digitalis alairas elfogadasanak feltetele az eloirt ellenorzesi eljaras megtetele. Az eljaras leirasa megtalalhato a NetLock Kft. Internet honlapjan a https://www.netlock.net/docs cimen vagy kerheto az ellenorzes@netlock.net e-mail cimen. IMPORTANT! The issuance and the use of this certificate is subject to the NetLock CPS available at https://www.netlock.net/docs or by e-mail at cps@netlock.net. Signature Algorithm: md5WithRSAEncryption 04:db:ae:8c:17:af:f8:0e:90:31:4e:cd:3e:09:c0:6d:3a:b0: f8:33:4c:47:4c:e3:75:88:10:97:ac:b0:38:15:91:c6:29:96: cc:21:c0:6d:3c:a5:74:cf:d8:82:a5:39:c3:65:e3:42:70:bb: 22:90:e3:7d:db:35:76:e1:a0:b5:da:9f:70:6e:93:1a:30:39: 1d:30:db:2e:e3:7c:b2:91:b2:d1:37:29:fa:b9:d6:17:5c:47: 4f:e3:1d:38:eb:9f:d5:7b:95:a8:28:9e:15:4a:d1:d1:d0:2b: 00:97:a0:e2:92:36:2b:63:ac:58:01:6b:33:29:50:86:83:f1: 01:48 SHA1 Fingerprint=87:9F:4B:EE:05:DF:98:58:3B:E3:60:D6:33:E7:0D:3F:FE:98:71:AF -----BEGIN CERTIFICATE----- MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUx ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0 b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQD EylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikgVGFudXNpdHZhbnlraWFkbzAeFw05 OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYDVQQGEwJIVTERMA8G A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5l dExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqG SIb3DQEBAQUAA4GNADCBiQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xK gZjupNTKihe5In+DCnVMm8Bp2GQ5o+2So/1bXHQawEfKOml2mrriRBf8TKPV/riX iK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr1nGTLbO/CVRY7QbrqHvc Q7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8E BAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1G SUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFu b3MgU3pvbGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBh bGFwamFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExv Y2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGln aXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0 IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGph biBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJo ZXRvIGF6IGVsbGVub3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBP UlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmlj YXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBo dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNA bmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06 sPgzTEdM43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXa n3BukxowOR0w2y7jfLKRstE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKS NitjrFgBazMpUIaD8QFI -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 104 (0x68) Signature Algorithm: md5WithRSAEncryption Issuer: C=HU, L=Budapest, O=NetLock Halozatbiztonsagi Kft., OU=Tanusitvanykiadok, CN=NetLock Expressz (Class C) Tanusitvanykiado Validity Not Before: Feb 25 14:08:11 1999 GMT Not After : Feb 20 14:08:11 2019 GMT Subject: C=HU, L=Budapest, O=NetLock Halozatbiztonsagi Kft., OU=Tanusitvanykiadok, CN=NetLock Expressz (Class C) Tanusitvanykiado Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:eb:ec:b0:6c:61:8a:23:25:af:60:20:e3:d9:9f: fc:93:0b:db:5d:8d:b0:a1:b3:40:3a:82:ce:fd:75: e0:78:32:03:86:5a:86:95:91:ed:53:fa:9d:40:fc: e6:e8:dd:d9:5b:7a:03:bd:5d:f3:3b:0c:c3:51:79: 9b:ad:55:a0:e9:d0:03:10:af:0a:ba:14:42:d9:52: 26:11:22:c7:d2:20:cc:82:a4:9a:a9:fe:b8:81:76: 9d:6a:b7:d2:36:75:3e:b1:86:09:f6:6e:6d:7e:4e: b7:7a:ec:ae:71:84:f6:04:33:08:25:32:eb:74:ac: 16:44:c6:e4:40:93:1d:7f:ad Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE, pathlen:4 X509v3 Key Usage: critical Certificate Sign, CRL Sign Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA Netscape Comment: FIGYELEM! Ezen tanusitvany a NetLock Kft. Altalanos Szolgaltatasi Felteteleiben leirt eljarasok alapjan keszult. A hitelesites folyamatat a NetLock Kft. termekfelelosseg-biztositasa vedi. A digitalis alairas elfogadasanak feltetele az eloirt ellenorzesi eljaras megtetele. Az eljaras leirasa megtalalhato a NetLock Kft. Internet honlapjan a https://www.netlock.net/docs cimen vagy kerheto az ellenorzes@netlock.net e-mail cimen. IMPORTANT! The issuance and the use of this certificate is subject to the NetLock CPS available at https://www.netlock.net/docs or by e-mail at cps@netlock.net. Signature Algorithm: md5WithRSAEncryption 10:ad:7f:d7:0c:32:80:0a:d8:86:f1:79:98:b5:ad:d4:cd:b3: 36:c4:96:48:c1:5c:cd:9a:d9:05:2e:9f:be:50:eb:f4:26:14: 10:2d:d4:66:17:f8:9e:c1:27:fd:f1:ed:e4:7b:4b:a0:6c:b5: ab:9a:57:70:a6:ed:a0:a4:ed:2e:f5:fd:fc:bd:fe:4d:37:08: 0c:bc:e3:96:83:22:f5:49:1b:7f:4b:2b:b4:54:c1:80:7c:99: 4e:1d:d0:8c:ee:d0:ac:e5:92:fa:75:56:fe:64:a0:13:8f:b8: b8:16:9d:61:05:67:80:c8:d0:d8:a5:07:02:34:98:04:8d:33: 04:d4 SHA1 Fingerprint=E3:92:51:2F:0A:CF:F5:05:DF:F6:DE:06:7F:75:37:E1:65:EA:57:4B -----BEGIN CERTIFICATE----- MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUx ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0 b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQD EytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBDKSBUYW51c2l0dmFueWtpYWRvMB4X DTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJBgNVBAYTAkhVMREw DwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9u c2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMr TmV0TG9jayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzAN BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNA OoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3ZW3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC 2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63euyucYT2BDMIJTLrdKwW RMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0P AQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEW ggJNRklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0 YWxhbm9zIFN6b2xnYWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFz b2sgYWxhcGphbiBrZXN6dWx0LiBBIGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBO ZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1iaXp0b3NpdGFzYSB2ZWRpLiBB IGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0ZWxlIGF6IGVs b2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25s YXBqYW4gYSBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kg a2VyaGV0byBheiBlbGxlbm9yemVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4g SU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5kIHRoZSB1c2Ugb2YgdGhpcyBjZXJ0 aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQUyBhdmFpbGFibGUg YXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwgYXQg Y3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmY ta3UzbM2xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2g pO0u9f38vf5NNwgMvOOWgyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4 Fp1hBWeAyNDYpQcCNJgEjTME1A== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 50:94:6c:ec:18:ea:d5:9c:4d:d5:97:ef:75:8f:a0:ad Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, OU=www.xrampsecurity.com, O=XRamp Security Services Inc, CN=XRamp Global Certification Authority Validity Not Before: Nov 1 17:14:04 2004 GMT Not After : Jan 1 05:37:19 2035 GMT Subject: C=US, OU=www.xrampsecurity.com, O=XRamp Security Services Inc, CN=XRamp Global Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:98:24:1e:bd:15:b4:ba:df:c7:8c:a5:27:b6:38: 0b:69:f3:b6:4e:a8:2c:2e:21:1d:5c:44:df:21:5d: 7e:23:74:fe:5e:7e:b4:4a:b7:a6:ad:1f:ae:e0:06: 16:e2:9b:5b:d9:67:74:6b:5d:80:8f:29:9d:86:1b: d9:9c:0d:98:6d:76:10:28:58:e4:65:b0:7f:4a:98: 79:9f:e0:c3:31:7e:80:2b:b5:8c:c0:40:3b:11:86: d0:cb:a2:86:36:60:a4:d5:30:82:6d:d9:6e:d0:0f: 12:04:33:97:5f:4f:61:5a:f0:e4:f9:91:ab:e7:1d: 3b:bc:e8:cf:f4:6b:2d:34:7c:e2:48:61:1c:8e:f3: 61:44:cc:6f:a0:4a:a9:94:b0:4d:da:e7:a9:34:7a: 72:38:a8:41:cc:3c:94:11:7d:eb:c8:a6:8c:b7:86: cb:ca:33:3b:d9:3d:37:8b:fb:7a:3e:86:2c:e7:73: d7:0a:57:ac:64:9b:19:eb:f4:0f:04:08:8a:ac:03: 17:19:64:f4:5a:25:22:8d:34:2c:b2:f6:68:1d:12: 6d:d3:8a:1e:14:da:c4:8f:a6:e2:23:85:d5:7a:0d: bd:6a:e0:e9:ec:ec:17:bb:42:1b:67:aa:25:ed:45: 83:21:fc:c1:c9:7c:d5:62:3e:fa:f2:c5:2d:d3:fd: d4:65 Exponent: 65537 (0x10001) X509v3 extensions: 1.3.6.1.4.1.311.20.2: ...C.A X509v3 Key Usage: Digital Signature, Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: C6:4F:A2:3D:06:63:84:09:9C:CE:62:E4:04:AC:8D:5C:B5:E9:B6:1B X509v3 CRL Distribution Points: Full Name: URI:http://crl.xrampsecurity.com/XGCA.crl 1.3.6.1.4.1.311.21.1: ... Signature Algorithm: sha1WithRSAEncryption 91:15:39:03:01:1b:67:fb:4a:1c:f9:0a:60:5b:a1:da:4d:97: 62:f9:24:53:27:d7:82:64:4e:90:2e:c3:49:1b:2b:9a:dc:fc: a8:78:67:35:f1:1d:f0:11:bd:b7:48:e3:10:f6:0d:df:3f:d2: c9:b6:aa:55:a4:48:ba:02:db:de:59:2e:15:5b:3b:9d:16:7d: 47:d7:37:ea:5f:4d:76:12:36:bb:1f:d7:a1:81:04:46:20:a3: 2c:6d:a9:9e:01:7e:3f:29:ce:00:93:df:fd:c9:92:73:89:89: 64:9e:e7:2b:e4:1c:91:2c:d2:b9:ce:7d:ce:6f:31:99:d3:e6: be:d2:1e:90:f0:09:14:79:5c:23:ab:4d:d2:da:21:1f:4d:99: 79:9d:e1:cf:27:9f:10:9b:1c:88:0d:b0:8a:64:41:31:b8:0e: 6c:90:24:a4:9b:5c:71:8f:ba:bb:7e:1c:1b:db:6a:80:0f:21: bc:e9:db:a6:b7:40:f4:b2:8b:a9:b1:e4:ef:9a:1a:d0:3d:69: 99:ee:a8:28:a3:e1:3c:b3:f0:b2:11:9c:cf:7c:40:e6:dd:e7: 43:7d:a2:d8:3a:b5:a9:8d:f2:34:99:c4:d4:10:e1:06:fd:09: 84:10:3b:ee:c4:4c:f4:ec:27:7c:42:c2:74:7c:82:8a:09:c9: b4:03:25:bc SHA1 Fingerprint=B8:01:86:D1:EB:9C:86:A5:41:04:CF:30:54:F3:4C:52:B7:E5:58:C6 -----BEGIN CERTIFICATE----- MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ O+7ETPTsJ3xCwnR8gooJybQDJbw= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=The Go Daddy Group, Inc., OU=Go Daddy Class 2 Certification Authority Validity Not Before: Jun 29 17:06:20 2004 GMT Not After : Jun 29 17:06:20 2034 GMT Subject: C=US, O=The Go Daddy Group, Inc., OU=Go Daddy Class 2 Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:de:9d:d7:ea:57:18:49:a1:5b:eb:d7:5f:48:86: ea:be:dd:ff:e4:ef:67:1c:f4:65:68:b3:57:71:a0: 5e:77:bb:ed:9b:49:e9:70:80:3d:56:18:63:08:6f: da:f2:cc:d0:3f:7f:02:54:22:54:10:d8:b2:81:d4: c0:75:3d:4b:7f:c7:77:c3:3e:78:ab:1a:03:b5:20: 6b:2f:6a:2b:b1:c5:88:7e:c4:bb:1e:b0:c1:d8:45: 27:6f:aa:37:58:f7:87:26:d7:d8:2d:f6:a9:17:b7: 1f:72:36:4e:a6:17:3f:65:98:92:db:2a:6e:5d:a2: fe:88:e0:0b:de:7f:e5:8d:15:e1:eb:cb:3a:d5:e2: 12:a2:13:2d:d8:8e:af:5f:12:3d:a0:08:05:08:b6: 5c:a5:65:38:04:45:99:1e:a3:60:60:74:c5:41:a5: 72:62:1b:62:c5:1f:6f:5f:1a:42:be:02:51:65:a8: ae:23:18:6a:fc:78:03:a9:4d:7f:80:c3:fa:ab:5a: fc:a1:40:a4:ca:19:16:fe:b2:c8:ef:5e:73:0d:ee: 77:bd:9a:f6:79:98:bc:b1:07:67:a2:15:0d:dd:a0: 58:c6:44:7b:0a:3e:62:28:5f:ba:41:07:53:58:cf: 11:7e:38:74:c5:f8:ff:b5:69:90:8f:84:74:ea:97: 1b:af Exponent: 3 (0x3) X509v3 extensions: X509v3 Subject Key Identifier: D2:C4:B0:D2:91:D4:4C:11:71:B3:61:CB:3D:A1:FE:DD:A8:6A:D4:E3 X509v3 Authority Key Identifier: keyid:D2:C4:B0:D2:91:D4:4C:11:71:B3:61:CB:3D:A1:FE:DD:A8:6A:D4:E3 DirName:/C=US/O=The Go Daddy Group, Inc./OU=Go Daddy Class 2 Certification Authority serial:00 X509v3 Basic Constraints: CA:TRUE Signature Algorithm: sha1WithRSAEncryption 32:4b:f3:b2:ca:3e:91:fc:12:c6:a1:07:8c:8e:77:a0:33:06: 14:5c:90:1e:18:f7:08:a6:3d:0a:19:f9:87:80:11:6e:69:e4: 96:17:30:ff:34:91:63:72:38:ee:cc:1c:01:a3:1d:94:28:a4: 31:f6:7a:c4:54:d7:f6:e5:31:58:03:a2:cc:ce:62:db:94:45: 73:b5:bf:45:c9:24:b5:d5:82:02:ad:23:79:69:8d:b8:b6:4d: ce:cf:4c:ca:33:23:e8:1c:88:aa:9d:8b:41:6e:16:c9:20:e5: 89:9e:cd:3b:da:70:f7:7e:99:26:20:14:54:25:ab:6e:73:85: e6:9b:21:9d:0a:6c:82:0e:a8:f8:c2:0c:fa:10:1e:6c:96:ef: 87:0d:c4:0f:61:8b:ad:ee:83:2b:95:f8:8e:92:84:72:39:eb: 20:ea:83:ed:83:cd:97:6e:08:bc:eb:4e:26:b6:73:2b:e4:d3: f6:4c:fe:26:71:e2:61:11:74:4a:ff:57:1a:87:0f:75:48:2e: cf:51:69:17:a0:02:12:61:95:d5:d1:40:b2:10:4c:ee:c4:ac: 10:43:a6:a5:9e:0a:d5:95:62:9a:0d:cf:88:82:c5:32:0c:e4: 2b:9f:45:e6:0d:9f:28:9c:b1:b9:2a:5a:57:ad:37:0f:af:1d: 7f:db:bd:9f SHA1 Fingerprint=27:96:BA:E6:3F:18:01:E2:77:26:1B:A0:D7:77:70:02:8F:20:EE:E4 -----BEGIN CERTIFICATE----- MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h /t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf ReYNnyicsbkqWletNw+vHX/bvZ8= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Starfield Technologies, Inc., OU=Starfield Class 2 Certification Authority Validity Not Before: Jun 29 17:39:16 2004 GMT Not After : Jun 29 17:39:16 2034 GMT Subject: C=US, O=Starfield Technologies, Inc., OU=Starfield Class 2 Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:b7:32:c8:fe:e9:71:a6:04:85:ad:0c:11:64:df: ce:4d:ef:c8:03:18:87:3f:a1:ab:fb:3c:a6:9f:f0: c3:a1:da:d4:d8:6e:2b:53:90:fb:24:a4:3e:84:f0: 9e:e8:5f:ec:e5:27:44:f5:28:a6:3f:7b:de:e0:2a: f0:c8:af:53:2f:9e:ca:05:01:93:1e:8f:66:1c:39: a7:4d:fa:5a:b6:73:04:25:66:eb:77:7f:e7:59:c6: 4a:99:25:14:54:eb:26:c7:f3:7f:19:d5:30:70:8f: af:b0:46:2a:ff:ad:eb:29:ed:d7:9f:aa:04:87:a3: d4:f9:89:a5:34:5f:db:43:91:82:36:d9:66:3c:b1: b8:b9:82:fd:9c:3a:3e:10:c8:3b:ef:06:65:66:7a: 9b:19:18:3d:ff:71:51:3c:30:2e:5f:be:3d:77:73: b2:5d:06:6c:c3:23:56:9a:2b:85:26:92:1c:a7:02: b3:e4:3f:0d:af:08:79:82:b8:36:3d:ea:9c:d3:35: b3:bc:69:ca:f5:cc:9d:e8:fd:64:8d:17:80:33:6e: 5e:4a:5d:99:c9:1e:87:b4:9d:1a:c0:d5:6e:13:35: 23:5e:df:9b:5f:3d:ef:d6:f7:76:c2:ea:3e:bb:78: 0d:1c:42:67:6b:04:d8:f8:d6:da:6f:8b:f2:44:a0: 01:ab Exponent: 3 (0x3) X509v3 extensions: X509v3 Subject Key Identifier: BF:5F:B7:D1:CE:DD:1F:86:F4:5B:55:AC:DC:D7:10:C2:0E:A9:88:E7 X509v3 Authority Key Identifier: keyid:BF:5F:B7:D1:CE:DD:1F:86:F4:5B:55:AC:DC:D7:10:C2:0E:A9:88:E7 DirName:/C=US/O=Starfield Technologies, Inc./OU=Starfield Class 2 Certification Authority serial:00 X509v3 Basic Constraints: CA:TRUE Signature Algorithm: sha1WithRSAEncryption 05:9d:3f:88:9d:d1:c9:1a:55:a1:ac:69:f3:f3:59:da:9b:01: 87:1a:4f:57:a9:a1:79:09:2a:db:f7:2f:b2:1e:cc:c7:5e:6a: d8:83:87:a1:97:ef:49:35:3e:77:06:41:58:62:bf:8e:58:b8: 0a:67:3f:ec:b3:dd:21:66:1f:c9:54:fa:72:cc:3d:4c:40:d8: 81:af:77:9e:83:7a:bb:a2:c7:f5:34:17:8e:d9:11:40:f4:fc: 2c:2a:4d:15:7f:a7:62:5d:2e:25:d3:00:0b:20:1a:1d:68:f9: 17:b8:f4:bd:8b:ed:28:59:dd:4d:16:8b:17:83:c8:b2:65:c7: 2d:7a:a5:aa:bc:53:86:6d:dd:57:a4:ca:f8:20:41:0b:68:f0: f4:fb:74:be:56:5d:7a:79:f5:f9:1d:85:e3:2d:95:be:f5:71: 90:43:cc:8d:1f:9a:00:0a:87:29:e9:55:22:58:00:23:ea:e3: 12:43:29:5b:47:08:dd:8c:41:6a:65:06:a8:e5:21:aa:41:b4: 95:21:95:b9:7d:d1:34:ab:13:d6:ad:bc:dc:e2:3d:39:cd:bd: 3e:75:70:a1:18:59:03:c9:22:b4:8f:9c:d5:5e:2a:d7:a5:b6: d4:0a:6d:f8:b7:40:11:46:9a:1f:79:0e:62:bf:0f:97:ec:e0: 2f:1f:17:94 SHA1 Fingerprint=AD:7E:1C:28:B0:64:EF:8F:60:03:40:20:14:C3:D0:E3:37:0E:B5:8A -----BEGIN CERTIFICATE----- MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf 8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN +lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA 1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C=IL, O=StartCom Ltd., OU=Secure Digital Certificate Signing, CN=StartCom Certification Authority Validity Not Before: Sep 17 19:46:36 2006 GMT Not After : Sep 17 19:46:36 2036 GMT Subject: C=IL, O=StartCom Ltd., OU=Secure Digital Certificate Signing, CN=StartCom Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:c1:88:db:09:bc:6c:46:7c:78:9f:95:7b:b5:33: 90:f2:72:62:d6:c1:36:20:22:24:5e:ce:e9:77:f2: 43:0a:a2:06:64:a4:cc:8e:36:f8:38:e6:23:f0:6e: 6d:b1:3c:dd:72:a3:85:1c:a1:d3:3d:b4:33:2b:d3: 2f:af:fe:ea:b0:41:59:67:b6:c4:06:7d:0a:9e:74: 85:d6:79:4c:80:37:7a:df:39:05:52:59:f7:f4:1b: 46:43:a4:d2:85:85:d2:c3:71:f3:75:62:34:ba:2c: 8a:7f:1e:8f:ee:ed:34:d0:11:c7:96:cd:52:3d:ba: 33:d6:dd:4d:de:0b:3b:4a:4b:9f:c2:26:2f:fa:b5: 16:1c:72:35:77:ca:3c:5d:e6:ca:e1:26:8b:1a:36: 76:5c:01:db:74:14:25:fe:ed:b5:a0:88:0f:dd:78: ca:2d:1f:07:97:30:01:2d:72:79:fa:46:d6:13:2a: a8:b9:a6:ab:83:49:1d:e5:f2:ef:dd:e4:01:8e:18: 0a:8f:63:53:16:85:62:a9:0e:19:3a:cc:b5:66:a6: c2:6b:74:07:e4:2b:e1:76:3e:b4:6d:d8:f6:44:e1: 73:62:1f:3b:c4:be:a0:53:56:25:6c:51:09:f7:aa: ab:ca:bf:76:fd:6d:9b:f3:9d:db:bf:3d:66:bc:0c: 56:aa:af:98:48:95:3a:4b:df:a7:58:50:d9:38:75: a9:5b:ea:43:0c:02:ff:99:eb:e8:6c:4d:70:5b:29: 65:9c:dd:aa:5d:cc:af:01:31:ec:0c:eb:d2:8d:e8: ea:9c:7b:e6:6e:f7:27:66:0c:1a:48:d7:6e:42:e3: 3f:de:21:3e:7b:e1:0d:70:fb:63:aa:a8:6c:1a:54: b4:5c:25:7a:c9:a2:c9:8b:16:a6:bb:2c:7e:17:5e: 05:4d:58:6e:12:1d:01:ee:12:10:0d:c6:32:7f:18: ff:fc:f4:fa:cd:6e:91:e8:36:49:be:1a:48:69:8b: c2:96:4d:1a:12:b2:69:17:c1:0a:90:d6:fa:79:22: 48:bf:ba:7b:69:f8:70:c7:fa:7a:37:d8:d8:0d:d2: 76:4f:57:ff:90:b7:e3:91:d2:dd:ef:c2:60:b7:67: 3a:dd:fe:aa:9c:f0:d4:8b:7f:72:22:ce:c6:9f:97: b6:f8:af:8a:a0:10:a8:d9:fb:18:c6:b6:b5:5c:52: 3c:89:b6:19:2a:73:01:0a:0f:03:b3:12:60:f2:7a: 2f:81:db:a3:6e:ff:26:30:97:f5:8b:dd:89:57:b6: ad:3d:b3:af:2b:c5:b7:76:02:f0:a5:d6:2b:9a:86: 14:2a:72:f6:e3:33:8c:5d:09:4b:13:df:bb:8c:74: 13:52:4b Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:TRUE X509v3 Key Usage: Digital Signature, Key Encipherment, Key Agreement, Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 4E:0B:EF:1A:A4:40:5B:A5:17:69:87:30:CA:34:68:43:D0:41:AE:F2 X509v3 CRL Distribution Points: Full Name: URI:http://cert.startcom.org/sfsca-crl.crl Full Name: URI:http://crl.startcom.org/sfsca-crl.crl X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.23223.1.1.1 CPS: http://cert.startcom.org/policy.pdf CPS: http://cert.startcom.org/intermediate.pdf User Notice: Organization: Start Commercial (StartCom) Ltd. Number: 1 Explicit Text: Limited Liability, read the section *Legal Limitations* of the StartCom Certification Authority Policy available at http://cert.startcom.org/policy.pdf Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA Netscape Comment: StartCom Free SSL Certification Authority Signature Algorithm: sha1WithRSAEncryption 16:6c:99:f4:66:0c:34:f5:d0:85:5e:7d:0a:ec:da:10:4e:38: 1c:5e:df:a6:25:05:4b:91:32:c1:e8:3b:f1:3d:dd:44:09:5b: 07:49:8a:29:cb:66:02:b7:b1:9a:f7:25:98:09:3c:8e:1b:e1: dd:36:87:2b:4b:bb:68:d3:39:66:3d:a0:26:c7:f2:39:91:1d: 51:ab:82:7b:7e:d5:ce:5a:e4:e2:03:57:70:69:97:08:f9:5e: 58:a6:0a:df:8c:06:9a:45:16:16:38:0a:5e:57:f6:62:c7:7a: 02:05:e6:bc:1e:b5:f2:9e:f4:a9:29:83:f8:b2:14:e3:6e:28: 87:44:c3:90:1a:de:38:a9:3c:ac:43:4d:64:45:ce:dd:28:a9: 5c:f2:73:7b:04:f8:17:e8:ab:b1:f3:2e:5c:64:6e:73:31:3a: 12:b8:bc:b3:11:e4:7d:8f:81:51:9a:3b:8d:89:f4:4d:93:66: 7b:3c:03:ed:d3:9a:1d:9a:f3:65:50:f5:a0:d0:75:9f:2f:af: f0:ea:82:43:98:f8:69:9c:89:79:c4:43:8e:46:72:e3:64:36: 12:af:f7:25:1e:38:89:90:77:7e:c3:6b:6a:b9:c3:cb:44:4b: ac:78:90:8b:e7:c7:2c:1e:4b:11:44:c8:34:52:27:cd:0a:5d: 9f:85:c1:89:d5:1a:78:f2:95:10:53:32:dd:80:84:66:75:d9: b5:68:28:fb:61:2e:be:84:a8:38:c0:99:12:86:a5:1e:67:64: ad:06:2e:2f:a9:70:85:c7:96:0f:7c:89:65:f5:8e:43:54:0e: ab:dd:a5:80:39:94:60:c0:34:c9:96:70:2c:a3:12:f5:1f:48: 7b:bd:1c:7e:6b:b7:9d:90:f4:22:3b:ae:f8:fc:2a:ca:fa:82: 52:a0:ef:af:4b:55:93:eb:c1:b5:f0:22:8b:ac:34:4e:26:22: 04:a1:87:2c:75:4a:b7:e5:7d:13:d7:b8:0c:64:c0:36:d2:c9: 2f:86:12:8c:23:09:c1:1b:82:3b:73:49:a3:6a:57:87:94:e5: d6:78:c5:99:43:63:e3:4d:e0:77:2d:e1:65:99:72:69:04:1a: 47:09:e6:0f:01:56:24:fb:1f:bf:0e:79:a9:58:2e:b9:c4:09: 01:7e:95:ba:6d:00:06:3e:b2:ea:4a:10:39:d8:d0:2b:f5:bf: ec:75:bf:97:02:c5:09:1b:08:dc:55:37:e2:81:fb:37:84:43: 62:20:ca:e7:56:4b:65:ea:fe:6c:c1:24:93:24:a1:34:eb:05: ff:9a:22:ae:9b:7d:3f:f1:65:51:0a:a6:30:6a:b3:f4:88:1c: 80:0d:fc:72:8a:e8:83:5e SHA1 Fingerprint=3E:2B:F7:F2:03:1B:96:F3:8C:E6:C4:D8:A8:5D:3E:2D:58:47:6A:0F -----BEGIN CERTIFICATE----- MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9 MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w +2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+ Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3 Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B 26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9j ZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM BgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0 Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3Rh cnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlh YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ 9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8 jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1 ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu L6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuC O3NJo2pXh5Tl1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6V um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1f:9d:59:5a:d7:2f:c2:06:44:a5:80:08:69:e3:5e:f6 Signature Algorithm: sha1WithRSAEncryption Issuer: C=TW, O=Government Root Certification Authority Validity Not Before: Dec 5 13:23:33 2002 GMT Not After : Dec 5 13:23:33 2032 GMT Subject: C=TW, O=Government Root Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:9a:25:b8:ec:cc:a2:75:a8:7b:f7:ce:5b:59:8a: c9:d1:86:12:08:54:ec:9c:f2:e7:46:f6:88:f3:7c: e9:a5:df:4c:47:36:a4:1b:01:1c:7f:1e:57:8a:8d: c3:c5:d1:21:e3:da:24:3f:48:2b:fb:9f:2e:a1:94: e7:2c:1c:93:d1:bf:1b:01:87:53:99:ce:a7:f5:0a: 21:76:77:ff:a9:b7:c6:73:94:4f:46:f7:10:49:37: fa:a8:59:49:5d:6a:81:07:56:f2:8a:f9:06:d0:f7: 70:22:4d:b4:b7:41:b9:32:b8:b1:f0:b1:c3:9c:3f: 70:fd:53:dd:81:aa:d8:63:78:f6:d8:53:6e:a1:ac: 6a:84:24:72:54:86:c6:d2:b2:ca:1c:0e:79:81:d6: b5:70:62:08:01:2e:4e:4f:0e:d5:11:af:a9:af:e5: 9a:bf:dc:cc:87:6d:26:e4:c9:57:a2:fb:96:f9:cc: e1:3f:53:8c:6c:4c:7e:9b:53:08:0b:6c:17:fb:67: c8:c2:ad:b1:cd:80:b4:97:dc:76:01:16:15:e9:6a: d7:a4:e1:78:47:ce:86:d5:fb:31:f3:fa:31:be:34: aa:28:fb:70:4c:1d:49:c7:af:2c:9d:6d:66:a6:b6: 8d:64:7e:b5:20:6a:9d:3b:81:b6:8f:40:00:67:4b: 89:86:b8:cc:65:fe:15:53:e9:04:c1:d6:5f:1d:44: d7:0a:2f:27:9a:46:7d:a1:0d:75:ad:54:86:15:dc: 49:3b:f1:96:ce:0f:9b:a0:ec:a3:7a:5d:be:d5:2a: 75:42:e5:7b:de:a5:b6:aa:af:28:ac:ac:90:ac:38: b7:d5:68:35:26:7a:dc:f7:3b:f3:fd:45:9b:d1:bb: 43:78:6e:6f:f1:42:54:6a:98:f0:0d:ad:97:e9:52: 5e:e9:d5:6a:72:de:6a:f7:1b:60:14:f4:a5:e4:b6: 71:67:aa:1f:ea:e2:4d:c1:42:40:fe:67:46:17:38: 2f:47:3f:71:9c:ae:e5:21:ca:61:2d:6d:07:a8:84: 7c:2d:ee:51:25:f1:63:90:9e:fd:e1:57:88:6b:ef: 8a:23:6d:b1:e6:bd:3f:ad:d1:3d:96:0b:85:8d:cd: 6b:27:bb:b7:05:9b:ec:bb:91:a9:0a:07:12:02:97: 4e:20:90:f0:ff:0d:1e:e2:41:3b:d3:40:3a:e7:8d: 5d:da:66:e4:02:b0:07:52:98:5c:0e:8e:33:9c:c2: a6:95:fb:55:19:6e:4c:8e:ae:4b:0f:bd:c1:38:4d: 5e:8f:84:1d:66:cd:c5:60:96:b4:52:5a:05:89:8e: 95:7a:98:c1:91:3c:95:23:b2:0e:f4:79:b4:c9:7c: c1:4a:21 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: CC:CC:EF:CC:29:60:A4:3B:B1:92:B6:3C:FA:32:62:8F:AC:25:15:3B X509v3 Basic Constraints: CA:TRUE setCext-hashedRoot: 0/0-...0...+......0...g*........"...(6....2.1:.Qe Signature Algorithm: sha1WithRSAEncryption 40:80:4a:fa:26:c9:ce:5e:30:dd:4f:86:74:76:58:f5:ae:b3: 83:33:78:a4:7a:74:17:19:4e:e9:52:b5:b9:e0:0a:74:62:aa: 68:ca:78:a0:4c:9a:8e:2c:23:2e:d5:6a:12:24:bf:d4:68:d3: 8a:d0:d8:9c:9f:b4:1f:0c:de:38:7e:57:38:fc:8d:e2:4f:5e: 0c:9f:ab:3b:d2:ff:75:97:cb:a4:e3:67:08:ff:e5:c0:16:b5: 48:01:7d:e9:f9:0a:ff:1b:e5:6a:69:bf:78:21:a8:c2:a7:23: a9:86:ab:76:56:e8:0e:0c:f6:13:dd:2a:66:8a:64:49:3d:1a: 18:87:90:04:9f:42:52:b7:4f:cb:fe:47:41:76:35:ef:ff:00: 76:36:45:32:9b:c6:46:85:5d:e2:24:b0:1e:e3:48:96:98:57: 47:94:55:7a:0f:41:b1:44:24:f3:c1:fe:1a:6b:bf:88:fd:c1: a6:da:93:60:5e:81:4a:99:20:9c:48:66:19:b5:00:79:54:0f: b8:2c:2f:4b:bc:a9:5d:5b:60:7f:8c:87:a5:e0:52:63:2a:be: d8:3b:85:40:15:fe:1e:b6:65:3f:c5:4b:da:7e:b5:7a:35:29: a3:2e:7a:98:60:22:a3:f4:7d:27:4e:2d:ea:b4:74:3c:e9:0f: a4:33:0f:10:11:bc:13:01:d6:e5:0e:d3:bf:b5:12:a2:e1:45: 23:c0:cc:08:6e:61:b7:89:ab:83:e3:24:1e:e6:5d:07:e7:1f: 20:3e:cf:67:c8:e7:ac:30:6d:27:4b:68:6e:4b:2a:5c:02:08: 34:db:f8:76:e4:67:a3:26:9c:3f:a2:32:c2:4a:c5:81:18:31: 10:56:aa:84:ef:2d:0a:ff:b8:1f:77:d2:bf:a5:58:a0:62:e4: d7:4b:91:75:8d:89:80:98:7e:6d:cb:53:4e:5e:af:f6:b2:97: 85:97:b9:da:55:06:b9:24:ee:d7:c6:38:1e:63:1b:12:3b:95: e1:58:ac:f2:df:84:d5:5f:99:2f:0d:55:5b:e6:38:db:2e:3f: 72:e9:48:85:cb:bb:29:13:8f:1e:38:55:b9:f3:b2:c4:30:99: 23:4e:5d:f2:48:a1:12:0c:dc:12:90:09:90:54:91:03:3c:47: e5:d5:c9:65:e0:b7:4b:7d:ec:47:d3:b3:0b:3e:ad:9e:d0:74: 00:0e:eb:bd:51:ad:c0:de:2c:c0:c3:6a:fe:ef:dc:0b:a7:fa: 46:df:60:db:9c:a6:59:50:75:23:69:73:93:b2:f9:fc:02:d3: 47:e6:71:ce:10:02:ee:27:8c:84:ff:ac:45:0d:13:5c:83:32: e0:25:a5:86:2c:7c:f4:12 SHA1 Fingerprint=F4:8B:11:BF:DE:AB:BE:94:54:20:71:E6:41:DE:6B:BE:88:2B:40:B9 -----BEGIN CERTIFICATE----- MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/ MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2 jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7 hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1 EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl pYYsfPQS -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C=ES, L=C/ Muntaner 244 Barcelona, CN=Autoridad de Certificacion Firmaprofesional CIF A62634068/emailAddress=ca@firmaprofesional.com Validity Not Before: Oct 24 22:00:00 2001 GMT Not After : Oct 24 22:00:00 2013 GMT Subject: C=ES, L=C/ Muntaner 244 Barcelona, CN=Autoridad de Certificacion Firmaprofesional CIF A62634068/emailAddress=ca@firmaprofesional.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:e7:23:03:6f:6f:23:a5:5e:78:ce:95:2c:ed:94: 1e:6e:0a:9e:01:c7:ea:30:d1:2c:9d:dd:37:e8:9b: 98:79:56:d3:fc:73:df:d0:8a:de:55:8f:51:f9:5a: ea:de:b5:70:c4:ed:a4:ed:ff:a3:0d:6e:0f:64:50: 31:af:01:27:58:ae:fe:6c:a7:4a:2f:17:2d:d3:73: d5:13:1c:8f:59:a5:34:2c:1d:54:04:45:cd:68:b8: a0:c0:03:a5:cf:85:42:47:95:28:5b:cf:ef:80:6c: e0:90:97:8a:01:3c:1d:f3:87:10:30:26:48:7d:d7: fc:e9:9d:91:71:ff:41:9a:a9:40:b5:37:9c:29:20: 4f:1f:52:e3:a0:7d:13:6d:54:b7:0a:de:e9:6a:4e: 07:ac:ac:19:5f:dc:7e:62:74:f6:b2:05:00:ba:85: a0:fd:1d:38:6e:cb:5a:bb:86:bc:94:67:33:35:83: 2c:1f:23:cd:f8:c8:91:71:cc:97:8b:ef:ae:0f:dc: 29:03:1b:c0:39:eb:70:ed:c1:6e:0e:d8:67:0b:89: a9:bc:35:e4:ef:b6:34:b4:a5:b6:c4:2d:a5:be:d0: c3:94:24:48:db:df:96:d3:00:b5:66:1a:8b:66:05: 0f:dd:3f:3f:cb:3f:aa:5e:9a:4a:f8:b4:4a:ef:95: 37:1b Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Alternative Name: URI:http://www.firmaprofesional.com X509v3 Basic Constraints: critical CA:TRUE, pathlen:1 X509v3 Private Key Usage Period: Not Before: Oct 24 22:00:00 2001 GMT, Not After: Oct 24 22:00:00 2013 GMT X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 33:0B:A0:66:D1:EA:DA:CE:DE:62:93:04:28:52:B5:14:7F:38:68:B7 Signature Algorithm: sha1WithRSAEncryption 47:73:fe:8d:27:54:f0:f5:d4:77:9c:27:79:57:57:b7:15:56: ec:c7:d8:58:b7:01:02:f4:33:ed:93:50:88:9e:7c:46:b1:bd: 3f:14:6f:f1:b3:47:48:8b:8c:97:06:d7:ea:7e:a3:5c:2a:bb: 4d:2f:47:e2:f8:39:06:c9:9c:2e:31:1a:03:78:f4:bc:38:c6: 22:8b:33:31:f0:16:04:04:7d:f9:76:e4:4b:d7:c0:e6:83:ec: 59:cc:3f:de:ff:4f:6b:b7:67:7e:a6:86:81:32:23:03:9d:c8: f7:5f:c1:4a:60:a5:92:a9:b1:a4:a0:60:c3:78:87:b3:22:f3: 2a:eb:5b:a9:ed:05:ab:37:0f:b1:e2:d3:95:76:63:56:74:8c: 58:72:1b:37:e5:64:a1:be:4d:0c:93:98:0c:97:f6:87:6d:b3: 3f:e7:cb:80:a6:ed:88:c7:5f:50:62:02:e8:99:74:16:d0:e6: b4:39:f1:27:cb:c8:40:d6:e3:86:10:a9:23:12:92:e0:69:41: 63:a7:af:25:0b:c0:c5:92:cb:1e:98:a3:5a:ba:c5:33:0f:a0: 97:01:dd:7f:e0:7b:d6:06:54:cf:a1:e2:4d:38:eb:4b:50:b5: cb:26:f4:ca:da:70:4a:6a:a1:e2:79:aa:e1:a7:33:f6:fd:4a: 1f:f6:d9:60 SHA1 Fingerprint=A9:62:8F:4B:98:A9:1B:48:35:BA:D2:C1:46:32:86:BB:66:64:6A:8C -----BEGIN CERTIFICATE----- MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMx IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1 dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w HhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTELMAkGA1UEBhMCRVMx IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1 dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5u Cp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5Vj1H5WuretXDE7aTt/6MNbg9kUDGvASdY rv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJHlShbz++AbOCQl4oBPB3z hxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf3H5idPay BQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcL iam8NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcb AgMBAAGjgZ8wgZwwKgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lv bmFsLmNvbTASBgNVHRMBAf8ECDAGAQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0 MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E FgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQADggEBAEdz/o0n VPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36m hoEyIwOdyPdfwUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzfl ZKG+TQyTmAyX9odtsz/ny4Cm7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBp QWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YGVM+h4k0460tQtcsm9MracEpqoeJ5 quGnM/b9Sh/22WA= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 971282334 (0x39e4979e) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Wells Fargo, OU=Wells Fargo Certification Authority, CN=Wells Fargo Root Certificate Authority Validity Not Before: Oct 11 16:41:28 2000 GMT Not After : Jan 14 16:41:28 2021 GMT Subject: C=US, O=Wells Fargo, OU=Wells Fargo Certification Authority, CN=Wells Fargo Root Certificate Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:d5:a8:33:3b:26:f9:34:ff:cd:9b:7e:e5:04:47: ce:00:e2:7d:77:e7:31:c2:2e:27:a5:4d:68:b9:31: ba:8d:43:59:97:c7:73:aa:7f:3d:5c:40:9e:05:e5: a1:e2:89:d9:4c:b8:3f:9b:f9:0c:b4:c8:62:19:2c: 45:ae:91:1e:73:71:41:c4:4b:13:fd:70:c2:25:ac: 22:f5:75:0b:b7:53:e4:a5:2b:dd:ce:bd:1c:3a:7a: c3:f7:13:8f:26:54:9c:16:6b:6b:af:fb:d8:96:b1: 60:9a:48:e0:25:22:24:79:34:ce:0e:26:00:0b:4e: ab:fd:8b:ce:82:d7:2f:08:70:68:c1:a8:0a:f9:74: 4f:07:ab:a4:f9:e2:83:7e:27:73:74:3e:b8:f9:38: 42:fc:a5:a8:5b:48:23:b3:eb:e3:25:b2:80:ae:96: d4:0a:9c:c2:78:9a:c6:68:18:ae:37:62:37:5e:51: 75:a8:58:63:c0:51:ee:40:78:7e:a8:af:1a:a0:e1: b0:78:9d:50:8c:7b:e7:b3:fc:8e:23:b0:db:65:00: 70:84:01:08:00:14:6e:54:86:9a:ba:cc:f9:37:10: f6:e0:de:84:2d:9d:a4:85:37:d3:87:e3:15:d0:c1: 17:90:7e:19:21:6a:12:a9:76:fd:12:02:e9:4f:21: 5e:17 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Certificate Policies: Policy: 2.16.840.1.114171.903.1.11 CPS: http://www.wellsfargo.com/certpolicy Signature Algorithm: sha1WithRSAEncryption d2:27:dd:9c:0a:77:2b:bb:22:f2:02:b5:4a:4a:91:f9:d1:2d: be:e4:bb:1a:68:ef:0e:a4:00:e9:ee:e7:ef:ee:f6:f9:e5:74: a4:c2:d8:52:58:c4:74:fb:ce:6b:b5:3b:29:79:18:5a:ef:9b: ed:1f:6b:36:ee:48:25:25:14:b6:56:a2:10:e8:ee:a7:7f:d0: 3f:a3:d0:c3:5d:26:ee:07:cc:c3:c1:24:21:87:1e:df:2a:12: 53:6f:41:16:e7:ed:ae:94:fa:8c:72:fa:13:47:f0:3c:7e:ae: 7d:11:3a:13:ec:ed:fa:6f:72:64:7b:9d:7d:7f:26:fd:7a:fb: 25:ad:ea:3e:29:7f:4c:e3:00:57:32:b0:b3:e9:ed:53:17:d9: 8b:b2:14:0e:30:e8:e5:d5:13:c6:64:af:c4:00:d5:d8:58:24: fc:f5:8f:ec:f1:c7:7d:a5:db:0f:27:d1:c6:f2:40:88:e6:1f: f6:61:a8:f4:42:c8:b9:37:d3:a9:be:2c:56:78:c2:72:9b:59: 5d:35:40:8a:e8:4e:63:1a:b6:e9:20:6a:51:e2:ce:a4:90:df: 76:70:99:5c:70:43:4d:b7:b6:a7:19:64:4e:92:b7:c5:91:3c: 7f:48:16:65:7b:16:fd:cb:fc:fb:d9:d5:d6:4f:21:65:3b:4a: 7f:47:a3:fb SHA1 Fingerprint=93:E6:AB:22:03:03:B5:23:28:DC:DA:56:9E:BA:E4:D1:D1:CC:FB:65 -----BEGIN CERTIFICATE----- MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMC VVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBD ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9v dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDAxMDExMTY0MTI4WhcNMjEwMTE0 MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSww KgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0G A1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEi MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n13 5zHCLielTWi5MbqNQ1mXx3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHE SxP9cMIlrCL1dQu3U+SlK93OvRw6esP3E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4O JgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5OEL8pahbSCOz6+MlsoCu ltQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4jsNtlAHCE AQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMB AAGjYTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcB CzAyMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRw b2xpY3kwDQYJKoZIhvcNAQEFBQADggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo 7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrvm+0fazbuSCUlFLZWohDo7qd/ 0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0ROhPs7fpvcmR7 nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ 33ZwmVxwQ023tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 5c:0b:85:5c:0b:e7:59:41:df:57:cc:3f:7f:9d:a8:36 Signature Algorithm: sha1WithRSAEncryption Issuer: C=ch, O=Swisscom, OU=Digital Certificate Services, CN=Swisscom Root CA 1 Validity Not Before: Aug 18 12:06:20 2005 GMT Not After : Aug 18 22:06:20 2025 GMT Subject: C=ch, O=Swisscom, OU=Digital Certificate Services, CN=Swisscom Root CA 1 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:d0:b9:b0:a8:0c:d9:bb:3f:21:f8:1b:d5:33:93: 80:16:65:20:75:b2:3d:9b:60:6d:46:c8:8c:31:6f: 17:c3:fa:9a:6c:56:ed:3c:c5:91:57:c3:cd:ab:96: 49:90:2a:19:4b:1e:a3:6d:57:dd:f1:2b:62:28:75: 45:5e:aa:d6:5b:fa:0b:25:d8:a1:16:f9:1c:c4:2e: e6:95:2a:67:cc:d0:29:6e:3c:85:34:38:61:49:b1: 00:9f:d6:3a:71:5f:4d:6d:ce:5f:b9:a9:e4:89:7f: 6a:52:fa:ca:9b:f2:dc:a9:f9:9d:99:47:3f:4e:29: 5f:b4:a6:8d:5d:7b:0b:99:11:03:03:fe:e7:db:db: a3:ff:1d:a5:cd:90:1e:01:1f:35:b0:7f:00:db:90: 6f:c6:7e:7b:d1:ee:7a:7a:a7:aa:0c:57:6f:a4:6d: c5:13:3b:b0:a5:d9:ed:32:1c:b4:5e:67:8b:54:dc: 73:87:e5:d3:17:7c:66:50:72:5d:d4:1a:58:c1:d9: cf:d8:89:02:6f:a7:49:b4:36:5d:d0:a4:de:07:2c: b6:75:b7:28:91:d6:97:be:28:f5:98:1e:ea:5b:26: c9:bd:b0:97:73:da:ae:91:26:eb:68:c1:f9:39:15: d6:67:4b:0a:6d:4f:cb:cf:b0:e4:42:71:8c:53:79: e7:ee:e1:db:1d:a0:6e:1d:8c:1a:77:35:5c:16:1e: 2b:53:1f:34:8b:d1:6c:fc:f2:67:07:7a:f5:ad:ed: d6:9a:ab:a1:b1:4b:e1:cc:37:5f:fd:7f:cd:4d:ae: b8:1f:9c:43:f9:2a:58:55:43:45:bc:96:cd:70:0e: fc:c9:e3:66:ba:4e:8d:3b:81:cb:15:64:7b:b9:94: e8:5d:33:52:85:71:2e:4f:8e:a2:06:11:51:c9:e3: cb:a1:6e:31:08:64:0c:c2:d2:3c:f5:36:e8:d7:d0: 0e:78:23:20:91:c9:24:2a:65:29:5b:22:f7:21:ce: 83:5e:a4:f3:de:4b:d3:68:8f:46:75:5c:83:09:6e: 29:6b:c4:70:8c:f5:9d:d7:20:2f:ff:46:d2:2b:38: c2:2f:75:1c:3d:7e:da:a5:ef:1e:60:85:69:42:d3: cc:f8:63:fe:1e:43:39:85:a6:b6:63:41:10:b3:73: 1e:bc:d3:fa:ca:7d:16:47:e2:a7:d5:d0:a3:8a:0a: 08:96:62:56:6e:34:db:d9:02:b9:30:75:e3:04:d2: e7:8f:c2:b0:11:40:0a:ac:d5:71:02:62:8b:31:be: dd:c6:23:58:31:42:43:2d:74:f9:c6:9e:a6:8a:0f: e9:fe:bf:83:e6:43:57:24:ba:ef:46:34:aa:d7:12: 01:38:ed Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Digital Signature, Certificate Sign, CRL Sign X509v3 Policy Mappings: 2.16.756.1.83.0.1:2.16.756.1.83.0.1 X509v3 Basic Constraints: critical CA:TRUE, pathlen:7 X509v3 Authority Key Identifier: keyid:03:25:2F:DE:6F:82:01:3A:5C:2C:DC:2B:A1:69:B5:67:D4:8C:D3:FD X509v3 Subject Key Identifier: 03:25:2F:DE:6F:82:01:3A:5C:2C:DC:2B:A1:69:B5:67:D4:8C:D3:FD Signature Algorithm: sha1WithRSAEncryption 35:10:cb:ec:a6:04:0d:0d:0f:cd:c0:db:ab:a8:f2:88:97:0c: df:93:2f:4d:7c:40:56:31:7a:eb:a4:0f:60:cd:7a:f3:be:c3: 27:8e:03:3e:a4:dd:12:ef:7e:1e:74:06:3c:3f:31:f2:1c:7b: 91:31:21:b4:f0:d0:6c:97:d4:e9:97:b2:24:56:1e:56:c3:35: bd:88:05:0f:5b:10:1a:64:e1:c7:82:30:f9:32:ad:9e:50:2c: e7:78:05:d0:31:b1:5a:98:8a:75:4e:90:5c:6a:14:2a:e0:52: 47:82:60:e6:1e:da:81:b1:fb:14:0b:5a:f1:9f:d2:95:ba:3e: d0:1b:d6:15:1d:a3:be:86:d5:db:0f:c0:49:64:bb:2e:50:19: 4b:d2:24:f8:dd:1e:07:56:d0:38:a0:95:70:20:76:8c:d7:dd: 1e:de:9f:71:c4:23:ef:83:13:5c:a3:24:15:4d:29:40:3c:6a: c4:a9:d8:b7:a6:44:a5:0d:f4:e0:9d:77:1e:40:70:26:fc:da: d9:36:e4:79:e4:b5:3f:bc:9b:65:be:bb:11:96:cf:db:c6:28: 39:3a:08:ce:47:5b:53:5a:c5:99:fe:5d:a9:dd:ef:4c:d4:c6: a5:ad:02:e6:8c:07:12:1e:6f:03:d1:6f:a0:a3:f3:29:bd:12: c7:50:a2:b0:7f:88:a9:99:77:9a:b1:c0:a5:39:2e:5c:7c:69: e2:2c:b0:ea:37:6a:a4:e1:5a:e1:f5:50:e5:83:ef:a5:bb:2a: 88:e7:8c:db:fd:6d:5e:97:19:a8:7e:66:75:6b:71:ea:bf:b1: c7:6f:a0:f4:8e:a4:ec:34:51:5b:8c:26:03:70:a1:77:d5:01: 12:57:00:35:db:23:de:0e:8a:28:99:fd:b1:10:6f:4b:ff:38: 2d:60:4e:2c:9c:eb:67:b5:ad:49:ee:4b:1f:ac:af:fb:0d:90: 5a:66:60:70:5d:aa:cd:78:d4:24:ee:c8:41:a0:93:01:92:9c: 6a:9e:fc:b9:24:c5:b3:15:82:7e:be:ae:95:2b:eb:b1:c0:da: e3:01:60:0b:5e:69:ac:84:56:61:be:71:17:fe:1d:13:0f:fe: c6:87:45:e9:fe:32:a0:1a:0d:13:a4:94:55:71:a5:16:8b:ba: ca:89:b0:b2:c7:fc:8f:d8:54:b5:93:62:9d:ce:cf:59:fb:3d: 18:ce:2a:cb:35:15:82:5d:ff:54:22:5b:71:52:fb:b7:c9:fe: 60:9b:00:41:64:f0:aa:2a:ec:b6:42:43:ce:89:66:81:c8:8b: 9f:39:54:03:25:d3:16:35:8e:84:d0:5f:fa:30:1a:f5:9a:6c: f4:0e:53:f9:3a:5b:d1:1c SHA1 Fingerprint=5F:3A:FC:0A:8B:64:F6:86:67:34:74:DF:7E:A9:A2:FE:F9:FA:7A:51 -----BEGIN CERTIFICATE----- MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBk MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0 YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg Q0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4MTgyMjA2MjBaMGQxCzAJBgNVBAYT AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIICIjAN BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9 m2BtRsiMMW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdih FvkcxC7mlSpnzNApbjyFNDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/ TilftKaNXXsLmREDA/7n29uj/x2lzZAeAR81sH8A25Bvxn570e56eqeqDFdvpG3F EzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkCb6dJtDZd0KTeByy2dbco kdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn7uHbHaBu HYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNF vJbNcA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo 19AOeCMgkckkKmUpWyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjC L3UcPX7ape8eYIVpQtPM+GP+HkM5haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJW bjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNYMUJDLXT5xp6mig/p/r+D5kNX JLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw FDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzc K6FptWfUjNP9MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzf ky9NfEBWMXrrpA9gzXrzvsMnjgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7Ik Vh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQMbFamIp1TpBcahQq4FJHgmDmHtqB sfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4HVtA4oJVwIHaM190e 3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtlvrsR ls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ip mXeascClOS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HH b6D0jqTsNFFbjCYDcKF31QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksf rK/7DZBaZmBwXarNeNQk7shBoJMBkpxqnvy5JMWzFYJ+vq6VK+uxwNrjAWALXmms hFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCyx/yP2FS1k2Kdzs9Z+z0Y zirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMWNY6E0F/6 MBr1mmz0DlP5OlvRHA== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 0c:e7:e0:e5:17:d8:46:fe:8f:e5:60:fc:1b:f0:30:39 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Assured ID Root CA Validity Not Before: Nov 10 00:00:00 2006 GMT Not After : Nov 10 00:00:00 2031 GMT Subject: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Assured ID Root CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:ad:0e:15:ce:e4:43:80:5c:b1:87:f3:b7:60:f9: 71:12:a5:ae:dc:26:94:88:aa:f4:ce:f5:20:39:28: 58:60:0c:f8:80:da:a9:15:95:32:61:3c:b5:b1:28: 84:8a:8a:dc:9f:0a:0c:83:17:7a:8f:90:ac:8a:e7: 79:53:5c:31:84:2a:f6:0f:98:32:36:76:cc:de:dd: 3c:a8:a2:ef:6a:fb:21:f2:52:61:df:9f:20:d7:1f: e2:b1:d9:fe:18:64:d2:12:5b:5f:f9:58:18:35:bc: 47:cd:a1:36:f9:6b:7f:d4:b0:38:3e:c1:1b:c3:8c: 33:d9:d8:2f:18:fe:28:0f:b3:a7:83:d6:c3:6e:44: c0:61:35:96:16:fe:59:9c:8b:76:6d:d7:f1:a2:4b: 0d:2b:ff:0b:72:da:9e:60:d0:8e:90:35:c6:78:55: 87:20:a1:cf:e5:6d:0a:c8:49:7c:31:98:33:6c:22: e9:87:d0:32:5a:a2:ba:13:82:11:ed:39:17:9d:99: 3a:72:a1:e6:fa:a4:d9:d5:17:31:75:ae:85:7d:22: ae:3f:01:46:86:f6:28:79:c8:b1:da:e4:57:17:c4: 7e:1c:0e:b0:b4:92:a6:56:b3:bd:b2:97:ed:aa:a7: f0:b7:c5:a8:3f:95:16:d0:ff:a1:96:eb:08:5f:18: 77:4f Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Digital Signature, Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 45:EB:A2:AF:F4:92:CB:82:31:2D:51:8B:A7:A7:21:9D:F3:6D:C8:0F X509v3 Authority Key Identifier: keyid:45:EB:A2:AF:F4:92:CB:82:31:2D:51:8B:A7:A7:21:9D:F3:6D:C8:0F Signature Algorithm: sha1WithRSAEncryption a2:0e:bc:df:e2:ed:f0:e3:72:73:7a:64:94:bf:f7:72:66:d8: 32:e4:42:75:62:ae:87:eb:f2:d5:d9:de:56:b3:9f:cc:ce:14: 28:b9:0d:97:60:5c:12:4c:58:e4:d3:3d:83:49:45:58:97:35: 69:1a:a8:47:ea:56:c6:79:ab:12:d8:67:81:84:df:7f:09:3c: 94:e6:b8:26:2c:20:bd:3d:b3:28:89:f7:5f:ff:22:e2:97:84: 1f:e9:65:ef:87:e0:df:c1:67:49:b3:5d:eb:b2:09:2a:eb:26: ed:78:be:7d:3f:2b:f3:b7:26:35:6d:5f:89:01:b6:49:5b:9f: 01:05:9b:ab:3d:25:c1:cc:b6:7f:c2:f1:6f:86:c6:fa:64:68: eb:81:2d:94:eb:42:b7:fa:8c:1e:dd:62:f1:be:50:67:b7:6c: bd:f3:f1:1f:6b:0c:36:07:16:7f:37:7c:a9:5b:6d:7a:f1:12: 46:60:83:d7:27:04:be:4b:ce:97:be:c3:67:2a:68:11:df:80: e7:0c:33:66:bf:13:0d:14:6e:f3:7f:1f:63:10:1e:fa:8d:1b: 25:6d:6c:8f:a5:b7:61:01:b1:d2:a3:26:a1:10:71:9d:ad:e2: c3:f9:c3:99:51:b7:2b:07:08:ce:2e:e6:50:b2:a7:fa:0a:45: 2f:a2:f0:f2 SHA1 Fingerprint=05:63:B8:63:0D:62:D7:5A:BB:C8:AB:1E:4B:DF:B5:A8:99:B2:4D:43 -----BEGIN CERTIFICATE----- MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe +o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 08:3b:e0:56:90:42:46:b1:a1:75:6a:c9:59:91:c7:4a Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA Validity Not Before: Nov 10 00:00:00 2006 GMT Not After : Nov 10 00:00:00 2031 GMT Subject: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:e2:3b:e1:11:72:de:a8:a4:d3:a3:57:aa:50:a2: 8f:0b:77:90:c9:a2:a5:ee:12:ce:96:5b:01:09:20: cc:01:93:a7:4e:30:b7:53:f7:43:c4:69:00:57:9d: e2:8d:22:dd:87:06:40:00:81:09:ce:ce:1b:83:bf: df:cd:3b:71:46:e2:d6:66:c7:05:b3:76:27:16:8f: 7b:9e:1e:95:7d:ee:b7:48:a3:08:da:d6:af:7a:0c: 39:06:65:7f:4a:5d:1f:bc:17:f8:ab:be:ee:28:d7: 74:7f:7a:78:99:59:85:68:6e:5c:23:32:4b:bf:4e: c0:e8:5a:6d:e3:70:bf:77:10:bf:fc:01:f6:85:d9: a8:44:10:58:32:a9:75:18:d5:d1:a2:be:47:e2:27: 6a:f4:9a:33:f8:49:08:60:8b:d4:5f:b4:3a:84:bf: a1:aa:4a:4c:7d:3e:cf:4f:5f:6c:76:5e:a0:4b:37: 91:9e:dc:22:e6:6d:ce:14:1a:8e:6a:cb:fe:cd:b3: 14:64:17:c7:5b:29:9e:32:bf:f2:ee:fa:d3:0b:42: d4:ab:b7:41:32:da:0c:d4:ef:f8:81:d5:bb:8d:58: 3f:b5:1b:e8:49:28:a2:70:da:31:04:dd:f7:b2:16: f2:4c:0a:4e:07:a8:ed:4a:3d:5e:b5:7f:a3:90:c3: af:27 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Digital Signature, Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 03:DE:50:35:56:D1:4C:BB:66:F0:A3:E2:1B:1B:C3:97:B2:3D:D1:55 X509v3 Authority Key Identifier: keyid:03:DE:50:35:56:D1:4C:BB:66:F0:A3:E2:1B:1B:C3:97:B2:3D:D1:55 Signature Algorithm: sha1WithRSAEncryption cb:9c:37:aa:48:13:12:0a:fa:dd:44:9c:4f:52:b0:f4:df:ae: 04:f5:79:79:08:a3:24:18:fc:4b:2b:84:c0:2d:b9:d5:c7:fe: f4:c1:1f:58:cb:b8:6d:9c:7a:74:e7:98:29:ab:11:b5:e3:70: a0:a1:cd:4c:88:99:93:8c:91:70:e2:ab:0f:1c:be:93:a9:ff: 63:d5:e4:07:60:d3:a3:bf:9d:5b:09:f1:d5:8e:e3:53:f4:8e: 63:fa:3f:a7:db:b4:66:df:62:66:d6:d1:6e:41:8d:f2:2d:b5: ea:77:4a:9f:9d:58:e2:2b:59:c0:40:23:ed:2d:28:82:45:3e: 79:54:92:26:98:e0:80:48:a8:37:ef:f0:d6:79:60:16:de:ac: e8:0e:cd:6e:ac:44:17:38:2f:49:da:e1:45:3e:2a:b9:36:53: cf:3a:50:06:f7:2e:e8:c4:57:49:6c:61:21:18:d5:04:ad:78: 3c:2c:3a:80:6b:a7:eb:af:15:14:e9:d8:89:c1:b9:38:6c:e2: 91:6c:8a:ff:64:b9:77:25:57:30:c0:1b:24:a3:e1:dc:e9:df: 47:7c:b5:b4:24:08:05:30:ec:2d:bd:0b:bf:45:bf:50:b9:a9: f3:eb:98:01:12:ad:c8:88:c6:98:34:5f:8d:0a:3c:c6:e9:d5: 95:95:6d:de SHA1 Fingerprint=A8:98:5D:3A:65:E5:E5:C4:B2:D7:D6:6D:40:C6:DD:2F:B1:9C:54:36 -----BEGIN CERTIFICATE----- MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG 9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt 43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg 06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 02:ac:5c:26:6a:0b:40:9b:8f:0b:79:f2:ae:46:25:77 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert High Assurance EV Root CA Validity Not Before: Nov 10 00:00:00 2006 GMT Not After : Nov 10 00:00:00 2031 GMT Subject: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert High Assurance EV Root CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:c6:cc:e5:73:e6:fb:d4:bb:e5:2d:2d:32:a6:df: e5:81:3f:c9:cd:25:49:b6:71:2a:c3:d5:94:34:67: a2:0a:1c:b0:5f:69:a6:40:b1:c4:b7:b2:8f:d0:98: a4:a9:41:59:3a:d3:dc:94:d6:3c:db:74:38:a4:4a: cc:4d:25:82:f7:4a:a5:53:12:38:ee:f3:49:6d:71: 91:7e:63:b6:ab:a6:5f:c3:a4:84:f8:4f:62:51:be: f8:c5:ec:db:38:92:e3:06:e5:08:91:0c:c4:28:41: 55:fb:cb:5a:89:15:7e:71:e8:35:bf:4d:72:09:3d: be:3a:38:50:5b:77:31:1b:8d:b3:c7:24:45:9a:a7: ac:6d:00:14:5a:04:b7:ba:13:eb:51:0a:98:41:41: 22:4e:65:61:87:81:41:50:a6:79:5c:89:de:19:4a: 57:d5:2e:e6:5d:1c:53:2c:7e:98:cd:1a:06:16:a4: 68:73:d0:34:04:13:5c:a1:71:d3:5a:7c:55:db:5e: 64:e1:37:87:30:56:04:e5:11:b4:29:80:12:f1:79: 39:88:a2:02:11:7c:27:66:b7:88:b7:78:f2:ca:0a: a8:38:ab:0a:64:c2:bf:66:5d:95:84:c1:a1:25:1e: 87:5d:1a:50:0b:20:12:cc:41:bb:6e:0b:51:38:b8: 4b:cb Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Digital Signature, Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: B1:3E:C3:69:03:F8:BF:47:01:D4:98:26:1A:08:02:EF:63:64:2B:C3 X509v3 Authority Key Identifier: keyid:B1:3E:C3:69:03:F8:BF:47:01:D4:98:26:1A:08:02:EF:63:64:2B:C3 Signature Algorithm: sha1WithRSAEncryption 1c:1a:06:97:dc:d7:9c:9f:3c:88:66:06:08:57:21:db:21:47: f8:2a:67:aa:bf:18:32:76:40:10:57:c1:8a:f3:7a:d9:11:65: 8e:35:fa:9e:fc:45:b5:9e:d9:4c:31:4b:b8:91:e8:43:2c:8e: b3:78:ce:db:e3:53:79:71:d6:e5:21:94:01:da:55:87:9a:24: 64:f6:8a:66:cc:de:9c:37:cd:a8:34:b1:69:9b:23:c8:9e:78: 22:2b:70:43:e3:55:47:31:61:19:ef:58:c5:85:2f:4e:30:f6: a0:31:16:23:c8:e7:e2:65:16:33:cb:bf:1a:1b:a0:3d:f8:ca: 5e:8b:31:8b:60:08:89:2d:0c:06:5c:52:b7:c4:f9:0a:98:d1: 15:5f:9f:12:be:7c:36:63:38:bd:44:a4:7f:e4:26:2b:0a:c4: 97:69:0d:e9:8c:e2:c0:10:57:b8:c8:76:12:91:55:f2:48:69: d8:bc:2a:02:5b:0f:44:d4:20:31:db:f4:ba:70:26:5d:90:60: 9e:bc:4b:17:09:2f:b4:cb:1e:43:68:c9:07:27:c1:d2:5c:f7: ea:21:b9:68:12:9c:3c:9c:bf:9e:fc:80:5c:9b:63:cd:ec:47: aa:25:27:67:a0:37:f3:00:82:7d:54:d7:a9:f8:e9:2e:13:a3: 77:e8:1f:4a SHA1 Fingerprint=5F:B7:EE:06:33:E2:59:DB:AD:0C:4C:9A:E6:D3:8F:1A:61:C7:DC:25 -----BEGIN CERTIFICATE----- MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm +9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep +OkuE6N36B9K -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 85:bd:4b:f3:d8:da:e3:69:f6:94:d7:5f:c3:a5:44:23 Signature Algorithm: sha1WithRSAEncryption Issuer: C=FR, O=Certplus, CN=Class 2 Primary CA Validity Not Before: Jul 7 17:05:00 1999 GMT Not After : Jul 6 23:59:59 2019 GMT Subject: C=FR, O=Certplus, CN=Class 2 Primary CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:dc:50:96:d0:12:f8:35:d2:08:78:7a:b6:52:70: fd:6f:ee:cf:b9:11:cb:5d:77:e1:ec:e9:7e:04:8d: d6:cc:6f:73:43:57:60:ac:33:0a:44:ec:03:5f:1c: 80:24:91:e5:a8:91:56:12:82:f7:e0:2b:f4:db:ae: 61:2e:89:10:8d:6b:6c:ba:b3:02:bd:d5:36:c5:48: 37:23:e2:f0:5a:37:52:33:17:12:e2:d1:60:4d:be: 2f:41:11:e3:f6:17:25:0c:8b:91:c0:1b:99:7b:99: 56:0d:af:ee:d2:bc:47:57:e3:79:49:7b:34:89:27: 24:84:de:b1:ec:e9:58:4e:fe:4e:df:5a:be:41:ad: ac:08:c5:18:0e:ef:d2:53:ee:6c:d0:9d:12:01:13: 8d:dc:80:62:f7:95:a9:44:88:4a:71:4e:60:55:9e: db:23:19:79:56:07:0c:3f:63:0b:5c:b0:e2:be:7e: 15:fc:94:33:58:41:38:74:c4:e1:8f:8b:df:26:ac: 1f:b5:8b:3b:b7:43:59:6b:b0:24:a6:6d:90:8b:c4: 72:ea:5d:33:98:b7:cb:de:5e:7b:ef:94:f1:1b:3e: ca:c9:21:c1:c5:98:02:aa:a2:f6:5b:77:9b:f5:7e: 96:55:34:1c:67:69:c0:f1:42:e3:47:ac:fc:28:1c: 66:55 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:TRUE, pathlen:10 X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Subject Key Identifier: E3:73:2D:DF:CB:0E:28:0C:DE:DD:B3:A4:CA:79:B8:8E:BB:E8:30:89 Netscape Cert Type: SSL CA, S/MIME CA X509v3 CRL Distribution Points: Full Name: URI:http://www.certplus.com/CRL/class2.crl Signature Algorithm: sha1WithRSAEncryption a7:54:cf:88:44:19:cb:df:d4:7f:00:df:56:33:62:b5:f7:51: 01:90:eb:c3:3f:d1:88:44:e9:24:5d:ef:e7:14:bd:20:b7:9a: 3c:00:fe:6d:9f:db:90:dc:d7:f4:62:d6:8b:70:5d:e7:e5:04: 48:a9:68:7c:c9:f1:42:f3:6c:7f:c5:7a:7c:1d:51:88:ba:d2: 0a:3e:27:5d:de:2d:51:4e:d3:13:64:69:e4:2e:e3:d3:e7:9b: 09:99:a6:e0:95:9b:ce:1a:d7:7f:be:3c:ce:52:b3:11:15:c1: 0f:17:cd:03:bb:9c:25:15:ba:a2:76:89:fc:06:f1:18:d0:93: 4b:0e:7c:82:b7:a5:f4:f6:5f:fe:ed:40:a6:9d:84:74:39:b9: dc:1e:85:16:da:29:1b:86:23:00:c9:bb:89:7e:6e:80:88:1e: 2f:14:b4:03:24:a8:32:6f:03:9a:47:2c:30:be:56:c6:a7:42: 02:70:1b:ea:40:d8:ba:05:03:70:07:a4:96:ff:fd:48:33:0a: e1:dc:a5:81:90:9b:4d:dd:7d:e7:e7:b2:cd:5c:c8:6a:95:f8: a5:f6:8d:c4:5d:78:08:be:7b:06:d6:49:cf:19:36:50:23:2e: 08:e6:9e:05:4d:47:18:d5:16:e9:b1:d6:b6:10:d5:bb:97:bf: a2:8e:b4:54 SHA1 Fingerprint=74:20:74:41:72:9C:DD:92:EC:79:31:D8:23:10:8D:C2:81:92:E2:BB -----BEGIN CERTIFICATE----- MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9 MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0 HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4 QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/ AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8 yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 l7+ijrRU -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 44:af:b0:80:d6:a3:27:ba:89:30:39:86:2e:f8:40:6b Signature Algorithm: sha1WithRSAEncryption Issuer: O=Digital Signature Trust Co., CN=DST Root CA X3 Validity Not Before: Sep 30 21:12:19 2000 GMT Not After : Sep 30 14:01:15 2021 GMT Subject: O=Digital Signature Trust Co., CN=DST Root CA X3 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:df:af:e9:97:50:08:83:57:b4:cc:62:65:f6:90: 82:ec:c7:d3:2c:6b:30:ca:5b:ec:d9:c3:7d:c7:40: c1:18:14:8b:e0:e8:33:76:49:2a:e3:3f:21:49:93: ac:4e:0e:af:3e:48:cb:65:ee:fc:d3:21:0f:65:d2: 2a:d9:32:8f:8c:e5:f7:77:b0:12:7b:b5:95:c0:89: a3:a9:ba:ed:73:2e:7a:0c:06:32:83:a2:7e:8a:14: 30:cd:11:a0:e1:2a:38:b9:79:0a:31:fd:50:bd:80: 65:df:b7:51:63:83:c8:e2:88:61:ea:4b:61:81:ec: 52:6b:b9:a2:e2:4b:1a:28:9f:48:a3:9e:0c:da:09: 8e:3e:17:2e:1e:dd:20:df:5b:c6:2a:8a:ab:2e:bd: 70:ad:c5:0b:1a:25:90:74:72:c5:7b:6a:ab:34:d6: 30:89:ff:e5:68:13:7b:54:0b:c8:d6:ae:ec:5a:9c: 92:1e:3d:64:b3:8c:c6:df:bf:c9:41:70:ec:16:72: d5:26:ec:38:55:39:43:d0:fc:fd:18:5c:40:f1:97: eb:d5:9a:9b:8d:1d:ba:da:25:b9:c6:d8:df:c1:15: 02:3a:ab:da:6e:f1:3e:2e:f5:5c:08:9c:3c:d6:83: 69:e4:10:9b:19:2a:b6:29:57:e3:e5:3d:9b:9f:f0: 02:5d Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: C4:A7:B1:A4:7B:2C:71:FA:DB:E1:4B:90:75:FF:C4:15:60:85:89:10 Signature Algorithm: sha1WithRSAEncryption a3:1a:2c:9b:17:00:5c:a9:1e:ee:28:66:37:3a:bf:83:c7:3f: 4b:c3:09:a0:95:20:5d:e3:d9:59:44:d2:3e:0d:3e:bd:8a:4b: a0:74:1f:ce:10:82:9c:74:1a:1d:7e:98:1a:dd:cb:13:4b:b3: 20:44:e4:91:e9:cc:fc:7d:a5:db:6a:e5:fe:e6:fd:e0:4e:dd: b7:00:3a:b5:70:49:af:f2:e5:eb:02:f1:d1:02:8b:19:cb:94: 3a:5e:48:c4:18:1e:58:19:5f:1e:02:5a:f0:0c:f1:b1:ad:a9: dc:59:86:8b:6e:e9:91:f5:86:ca:fa:b9:66:33:aa:59:5b:ce: e2:a7:16:73:47:cb:2b:cc:99:b0:37:48:cf:e3:56:4b:f5:cf: 0f:0c:72:32:87:c6:f0:44:bb:53:72:6d:43:f5:26:48:9a:52: 67:b7:58:ab:fe:67:76:71:78:db:0d:a2:56:14:13:39:24:31: 85:a2:a8:02:5a:30:47:e1:dd:50:07:bc:02:09:90:00:eb:64: 63:60:9b:16:bc:88:c9:12:e6:d2:7d:91:8b:f9:3d:32:8d:65: b4:e9:7c:b1:57:76:ea:c5:b6:28:39:bf:15:65:1c:c8:f6:77: 96:6a:0a:8d:77:0b:d8:91:0b:04:8e:07:db:29:b6:0a:ee:9d: 82:35:35:10 SHA1 Fingerprint=DA:C9:02:4F:54:D8:F6:DF:94:93:5F:B1:73:26:38:CA:6A:D7:7C:13 -----BEGIN CERTIFICATE----- MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/ MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw 7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69 ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5 JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 0d:5e:99:0a:d6:9d:b7:78:ec:d8:07:56:3b:86:15:d9 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Digital Signature Trust, OU=DST ACES, CN=DST ACES CA X6 Validity Not Before: Nov 20 21:19:58 2003 GMT Not After : Nov 20 21:19:58 2017 GMT Subject: C=US, O=Digital Signature Trust, OU=DST ACES, CN=DST ACES CA X6 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:b9:3d:f5:2c:c9:94:dc:75:8a:95:5d:63:e8:84: 77:76:66:b9:59:91:5c:46:dd:92:3e:9f:f9:0e:03: b4:3d:61:92:bd:23:26:b5:63:ee:92:d2:9e:d6:3c: c8:0d:90:5f:64:81:b1:a8:08:0d:4c:d8:f9:d3:05: 28:52:b4:01:25:c5:95:1c:0c:7e:3e:10:84:75:cf: c1:19:91:63:cf:e8:a8:91:88:b9:43:52:bb:80:b1: 55:89:8b:31:fa:d0:b7:76:be:41:3d:30:9a:a4:22: 25:17:73:e8:1e:e2:d3:ac:2a:bd:5b:38:21:d5:2a: 4b:d7:55:7d:e3:3a:55:bd:d7:6d:6b:02:57:6b:e6: 47:7c:08:c8:82:ba:de:a7:87:3d:a1:6d:b8:30:56: c2:b3:02:81:5f:2d:f5:e2:9a:30:18:28:b8:66:d3: cb:01:96:6f:ea:8a:45:55:d6:e0:9d:ff:67:2b:17: 02:a6:4e:1a:6a:11:0b:7e:b7:7b:e7:98:d6:8c:76: 6f:c1:3b:db:50:93:7e:e5:d0:8e:1f:37:b8:bd:ba: c6:9f:6c:e9:7c:33:f2:32:3c:26:47:fa:27:24:02: c9:7e:1d:5b:88:42:13:6a:35:7c:7d:35:e9:2e:66: 91:72:93:d5:32:26:c4:74:f5:53:a3:b3:5d:9a:f6: 09:cb Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Digital Signature, Non Repudiation, Certificate Sign, CRL Sign X509v3 Subject Alternative Name: email:pki-ops@trustdst.com X509v3 Certificate Policies: Policy: 2.16.840.1.101.3.2.1.1.1 CPS: http://www.trustdst.com/certificates/policy/ACES-index.html X509v3 Subject Key Identifier: 09:72:06:4E:18:43:0F:E5:D6:CC:C3:6A:8B:31:7B:78:8F:A8:83:B8 Signature Algorithm: sha1WithRSAEncryption a3:d8:8e:d6:b2:db:ce:05:e7:32:cd:01:d3:04:03:e5:76:e4: 56:2b:9c:99:90:e8:08:30:6c:df:7d:3d:ee:e5:bf:b5:24:40: 84:49:e1:d1:28:ae:c4:c2:3a:53:30:88:f1:f5:77:6e:51:ca: fa:ff:99:af:24:5f:1b:a0:fd:f2:ac:84:ca:df:a9:f0:5f:04: 2e:ad:16:bf:21:97:10:81:3d:e3:ff:87:8d:32:dc:94:e5:47: 8a:5e:6a:13:c9:94:95:3d:d2:ee:c8:34:95:d0:80:d4:ad:32: 08:80:54:3c:e0:bd:52:53:d7:52:7c:b2:69:3f:7f:7a:cf:6a: 74:ca:fa:04:2a:9c:4c:5a:06:a5:e9:20:ad:45:66:0f:69:f1: dd:bf:e9:e3:32:8b:fa:e0:c1:86:4d:72:3c:2e:d8:93:78:0a: 2a:f8:d8:d2:27:3d:19:89:5f:5a:7b:8a:3b:cc:0c:da:51:ae: c7:0b:f7:2b:b0:37:05:ec:bc:57:23:e2:38:d2:9b:68:f3:56: 12:88:4f:42:7c:b8:31:c4:b5:db:e4:c8:21:34:e9:48:11:35: ee:fa:c7:92:57:c5:9f:34:e4:c7:f6:f7:0e:0b:4c:9c:68:78: 7b:71:31:c7:eb:1e:e0:67:41:f3:b7:a0:a7:cd:e5:7a:33:36: 6a:fa:9a:2b SHA1 Fingerprint=40:54:DA:6F:1C:3F:40:74:AC:ED:0F:EC:CD:DB:79:D1:53:FB:90:1D -----BEGIN CERTIFICATE----- MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBb MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3Qx ETAPBgNVBAsTCERTVCBBQ0VTMRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0w MzExMjAyMTE5NThaFw0xNzExMjAyMTE5NThaMFsxCzAJBgNVBAYTAlVTMSAwHgYD VQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UECxMIRFNUIEFDRVMx FzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A MIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPu ktKe1jzIDZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7 gLFViYsx+tC3dr5BPTCapCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZH fAjIgrrep4c9oW24MFbCswKBXy314powGCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4a ahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPyMjwmR/onJALJfh1biEIT ajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1UdEwEB/wQF MAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rk c3QuY29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjto dHRwOi8vd3d3LnRydXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMt aW5kZXguaHRtbDAdBgNVHQ4EFgQUCXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZI hvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V25FYrnJmQ6AgwbN99Pe7lv7Uk QIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6tFr8hlxCBPeP/ h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpR rscL9yuwNwXsvFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf2 9w4LTJxoeHtxMcfrHuBnQfO3oKfN5XozNmr6mis= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: CN=T\xC3\x9CRKTRUST Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xC4\xB1c\xC4\xB1s\xC4\xB1, C=TR, L=ANKARA, O=(c) 2005 T\xC3\x9CRKTRUST Bilgi \xC4\xB0leti\xC5\x9Fim ve Bili\xC5\x9Fim G\xC3\xBCvenli\xC4\x9Fi Hizmetleri A.\xC5\x9E. Validity Not Before: May 13 10:27:17 2005 GMT Not After : Mar 22 10:27:17 2015 GMT Subject: CN=T\xC3\x9CRKTRUST Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xC4\xB1c\xC4\xB1s\xC4\xB1, C=TR, L=ANKARA, O=(c) 2005 T\xC3\x9CRKTRUST Bilgi \xC4\xB0leti\xC5\x9Fim ve Bili\xC5\x9Fim G\xC3\xBCvenli\xC4\x9Fi Hizmetleri A.\xC5\x9E. Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:ca:52:05:d6:63:03:d8:1c:5f:dd:d2:7b:5d:f2: 0c:60:61:5b:6b:3b:74:2b:78:0d:7d:45:bd:22:74: e8:8c:03:c1:c6:11:2a:3d:95:bc:a9:94:b0:bb:91: 97:c8:69:7c:84:c5:b4:91:6c:6c:13:6a:a4:55:ad: a4:85:e8:95:7e:b3:00:af:00:c2:05:18:f5:70:9d: 36:8b:ae:cb:e4:1b:81:7f:93:88:fb:6a:55:bb:7d: 85:92:ce:ba:58:9f:db:32:c5:bd:5d:ef:22:4a:2f: 41:07:7e:49:61:b3:86:ec:4e:a6:41:6e:84:bc:03: ec:f5:3b:1c:c8:1f:c2:ee:a8:ee:ea:12:4a:8d:14: cf:f3:0a:e0:50:39:f9:08:35:f8:11:59:ad:e7:22: ea:4b:ca:14:06:de:42:ba:b2:99:f3:2d:54:88:10: 06:ea:e1:1a:3e:3d:67:1f:fb:ce:fb:7c:82:e8:11: 5d:4a:c1:b9:14:ea:54:d9:66:9b:7c:89:7d:04:9a: 62:c9:e9:52:3c:9e:9c:ef:d2:f5:26:e4:e6:e5:18: 7c:8b:6e:df:6c:cc:78:5b:4f:72:b2:cb:5c:3f:8c: 05:8d:d1:4c:8c:ad:92:c7:e1:78:7f:65:6c:49:06: 50:2c:9e:32:c2:d7:4a:c6:75:8a:59:4e:75:6f:47: 5e:c1 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:TRUE Signature Algorithm: sha1WithRSAEncryption 15:f5:55:ff:37:96:80:59:21:a4:fc:a1:15:4c:20:f6:d4:5f: da:03:24:fc:cf:90:1a:f4:21:0a:9a:ee:3a:b1:6a:ef:ef:f8: 60:d1:4c:36:66:45:1d:f3:66:02:74:04:7b:92:30:a8:de:0a: 76:0f:ef:95:6e:bd:c9:37:e6:1a:0d:ac:89:48:5b:cc:83:36: c2:f5:46:5c:59:82:56:b4:d5:fe:23:b4:d8:54:1c:44:ab:c4: a7:e5:14:ce:3c:41:61:7c:43:e6:cd:c4:81:09:8b:24:fb:54: 25:d6:16:a8:96:0c:67:07:6f:b3:50:47:e3:1c:24:28:dd:2a: 98:a4:61:fe:db:ea:12:37:bc:01:1a:34:85:bd:6e:4f:e7:91: 72:07:44:85:1e:58:ca:54:44:dd:f7:ac:b9:cb:89:21:72:db: 8f:c0:69:29:97:2a:a3:ae:18:23:97:1c:41:2a:8b:7c:2a:c1: 7c:90:e8:a9:28:c0:d3:91:c6:ad:28:87:40:68:b5:ff:ec:a7: d2:d3:38:18:9c:d3:7d:69:5d:f0:c6:a5:1e:24:1b:a3:47:fc: 69:07:68:e7:e4:9a:b4:ed:0f:a1:87:87:02:ce:87:d2:48:4e: e1:bc:ff:cb:f1:72:92:44:64:03:25:ea:de:5b:6e:9f:c9:f2: 4e:ac:dd:c7 SHA1 Fingerprint=79:98:A3:08:E1:4D:65:85:E6:C2:1E:15:3A:71:9F:BA:5A:D3:4A:D9 -----BEGIN CERTIFICATE----- MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOc UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx c8SxMQswCQYDVQQGDAJUUjEPMA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykg MjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8 dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMxMDI3MTdaFw0xNTAz MjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2Vy dGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYD VQQHDAZBTktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kg xLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEu xZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7 XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GXyGl8hMW0kWxsE2qkVa2k heiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8iSi9BB35J YbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5C urKZ8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1 JuTm5Rh8i27fbMx4W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51 b0dewQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV 9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46sWrv7/hg0Uw2ZkUd82YCdAR7 kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxEq8Sn5RTOPEFh fEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdA aLX/7KfS0zgYnNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKS RGQDJereW26fyfJOrN3H -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: CN=T\xC3\x9CRKTRUST Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xC4\xB1c\xC4\xB1s\xC4\xB1, C=TR, L=Ankara, O=T\xC3\x9CRKTRUST Bilgi \xC4\xB0leti\xC5\x9Fim ve Bili\xC5\x9Fim G\xC3\xBCvenli\xC4\x9Fi Hizmetleri A.\xC5\x9E. (c) Kas\xC4\xB1m 2005 Validity Not Before: Nov 7 10:07:57 2005 GMT Not After : Sep 16 10:07:57 2015 GMT Subject: CN=T\xC3\x9CRKTRUST Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xC4\xB1c\xC4\xB1s\xC4\xB1, C=TR, L=Ankara, O=T\xC3\x9CRKTRUST Bilgi \xC4\xB0leti\xC5\x9Fim ve Bili\xC5\x9Fim G\xC3\xBCvenli\xC4\x9Fi Hizmetleri A.\xC5\x9E. (c) Kas\xC4\xB1m 2005 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:a9:36:7e:c3:91:43:4c:c3:19:98:08:c8:c7:58: 7b:4f:16:8c:a5:ce:49:01:1f:73:0e:ac:75:13:a6: fa:9e:2c:20:de:d8:90:0e:0a:d1:69:d2:27:fb:aa: 77:9f:27:52:25:e2:cb:5d:d8:d8:83:50:17:7d:8a: b5:82:3f:04:8e:b4:d5:f0:49:a7:64:b7:1e:2e:5f: 20:9c:50:75:4f:af:e1:b5:41:14:f4:98:92:88:c7: e5:e5:64:47:61:47:79:fd:c0:51:f1:c1:99:e7:dc: ce:6a:fb:af:b5:01:30:dc:46:1c:ef:8a:ec:95:ef: dc:ff:af:10:1c:eb:9d:d8:b0:aa:6a:85:18:0d:17: c9:3e:bf:f1:9b:d0:09:89:42:fd:a0:42:b4:9d:89: 51:55:29:cf:1b:70:bc:84:54:ad:c1:13:1f:98:f4: 2e:76:60:8b:5d:3f:9a:ad:ca:0c:bf:a7:56:5b:8f: 77:b8:d5:9e:79:49:92:3f:e0:f1:97:24:7a:6c:9b: 17:0f:6d:ef:53:98:91:2b:e4:0f:be:59:79:07:78: bb:97:95:f4:9f:69:d4:58:87:0a:a9:e3:cc:b6:58: 19:9f:26:21:b1:c4:59:8d:b2:41:75:c0:ad:69:ce: 9c:00:08:f2:36:ff:3e:f0:a1:0f:1a:ac:14:fd:a6: 60:0f Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: D9:37:B3:4E:05:FD:D9:CF:9F:12:16:AE:B6:89:2F:EB:25:3A:88:1C X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: sha1WithRSAEncryption 72:60:96:b7:c9:dc:d8:29:5e:23:85:5f:b2:b3:2d:76:fb:88: d7:17:fe:7b:6d:45:b8:f6:85:6c:9f:22:fc:2a:10:22:ec:aa: b9:30:f6:ab:58:d6:39:10:31:99:29:00:bd:89:66:41:fb:74: de:91:c1:18:0b:9f:b5:61:cb:9d:3a:be:f5:a8:94:a3:22:55: 6e:17:49:ff:d2:29:f1:38:26:5d:ef:a5:aa:3a:f9:71:7b:e6: da:58:1d:d3:74:c2:01:fa:3e:69:58:5f:ad:cb:68:be:14:2e: 9b:6c:c0:b6:dc:a0:26:fa:77:1a:e2:24:da:1a:37:e0:67:ad: d1:73:83:0d:a5:1a:1d:6e:12:92:7e:84:62:00:17:bd:bc:25: 18:57:f2:d7:a9:6f:59:88:bc:34:b7:2e:85:78:9d:96:dc:14: c3:2c:8a:52:9b:96:8c:52:66:3d:86:16:8b:47:b8:51:09:8c: ea:7d:cd:88:72:b3:60:33:b1:f0:0a:44:ef:0f:f5:09:37:88: 24:0e:2c:6b:20:3a:a2:fa:11:f2:40:35:9c:44:68:63:3b:ac: 33:6f:63:bc:2c:bb:f2:d2:cb:76:7d:7d:88:d8:1d:c8:05:1d: 6e:bc:94:a9:66:8c:77:71:c7:fa:91:fa:2f:51:9e:e9:39:52: b6:e7:04:42 SHA1 Fingerprint=B4:35:D4:E1:11:9D:1C:66:90:A7:49:EB:B3:94:BD:63:7B:A7:82:B7 -----BEGIN CERTIFICATE----- MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOc UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xS S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg SGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcNMDUxMTA3MTAwNzU3 WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVrdHJv bmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJU UjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSw bGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWe LiAoYykgS2FzxLFtIDIwMDUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB AQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqeLCDe2JAOCtFp0if7qnef J1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKIx+XlZEdh R3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJ Qv2gQrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGX JHpsmxcPbe9TmJEr5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1p zpwACPI2/z7woQ8arBT9pmAPAgMBAAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58S Fq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8GA1UdEwEB/wQFMAMBAf8wDQYJ KoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/nttRbj2hWyfIvwq ECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4 Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFz gw2lGh1uEpJ+hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotH uFEJjOp9zYhys2AzsfAKRO8P9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LS y3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5UrbnBEI= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 5670595323396054351 (0x4eb200670c035d4f) Signature Algorithm: sha1WithRSAEncryption Issuer: C=CH, O=SwissSign AG, CN=SwissSign Platinum CA - G2 Validity Not Before: Oct 25 08:36:00 2006 GMT Not After : Oct 25 08:36:00 2036 GMT Subject: C=CH, O=SwissSign AG, CN=SwissSign Platinum CA - G2 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:ca:df:a2:02:e2:da:f8:fc:07:16:b1:de:60:aa: de:96:5c:64:1f:c7:2f:7e:cf:67:fa:44:42:d6:76: 63:95:ae:eb:af:72:20:8a:45:47:86:62:78:86:d6: 20:39:26:f4:ae:a3:fd:23:e7:a5:9c:b5:22:21:19: b7:37:93:22:c0:50:9c:82:7b:d4:d5:04:44:5c:cb: b4:c2:9f:92:be:24:d8:7b:67:22:e2:69:5f:e5:05: 78:d4:87:d9:71:70:33:25:53:b4:87:3b:29:90:28: 36:9a:55:44:30:68:a4:83:97:7f:0d:1e:9c:76:ff: 15:9d:60:97:00:8d:8a:85:03:ec:80:be:ea:2c:6e: 10:51:92:cc:7e:d5:a3:33:d8:d6:49:de:58:2a:af: f6:16:eb:4b:7b:90:32:97:b9:ba:9d:58:f1:f8:57: 49:04:1e:a2:5d:06:70:dd:71:db:f9:dd:8b:9a:1b: 8c:cf:3d:a3:4d:ce:cb:7c:f6:bb:9c:a0:fa:09:ce: 23:62:b2:e9:0d:1f:e2:72:28:8f:9f:ac:68:20:7d: 6f:3b:a8:85:31:09:7f:0b:c7:e8:65:e9:e3:78:0e: 09:67:30:8b:34:82:fb:5d:e0:cc:9d:81:6d:62:ee: 08:1e:04:2c:4e:9b:ec:fe:a9:4f:5f:fd:69:78:ef: 09:1f:a1:b4:bf:fa:f3:ef:90:1e:4c:05:8b:1e:ea: 7a:91:7a:c3:d7:e5:fb:30:bc:6c:1b:10:58:98:f7: 1a:5f:d0:29:32:03:13:46:4d:61:6a:85:4c:52:74: 2f:06:1f:7b:11:e2:84:97:c6:99:f3:6d:7f:d7:67: 83:7e:13:68:d8:71:28:5a:d8:ce:dd:e8:10:14:9a: fe:6d:23:87:6e:8e:5a:70:3c:d5:8d:09:00:a7:aa: bc:b0:31:37:6d:c8:84:14:1e:5b:bd:45:63:20:6b: 4b:74:8c:bd:db:3a:0e:c1:cf:5a:16:8f:a5:98:f2: 76:89:b2:13:12:3b:0b:77:77:ac:bb:e5:3c:29:4a: 92:72:ca:61:1a:2b:5e:4c:e2:83:74:77:fa:35:48: 7a:85:4d:8d:9a:53:c4:df:78:ca:97:91:48:2b:45: 2b:01:f7:1c:1a:a2:ed:18:ba:0a:bd:83:fa:6f:bc: 8d:57:93:3b:d4:d4:a6:ce:1e:f1:a0:b1:ce:ab:fd: 2b:28:9a:4f:1b:d7:c3:72:db:a4:c4:bf:5d:4c:f5: dd:7b:96:69:ee:68:80:e6:e7:98:ba:36:b7:fe:6e: ed:2b:bd:20:f8:65:19:da:55:09:7e:25:dc:fe:61: 62:72:f9:7e:18:02:ef:63:b4:d0:fb:af:e5:3b:63: 8c:67:8f Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 50:AF:CC:07:87:15:47:6F:38:C5:B4:65:D1:DE:95:AA:E9:DF:9C:CC X509v3 Authority Key Identifier: keyid:50:AF:CC:07:87:15:47:6F:38:C5:B4:65:D1:DE:95:AA:E9:DF:9C:CC X509v3 Certificate Policies: Policy: 2.16.756.1.89.1.1.1.1 CPS: http://repository.swisssign.com/ Signature Algorithm: sha1WithRSAEncryption 08:85:a6:f5:16:0c:fc:44:1a:c1:63:e0:f9:55:46:08:fc:70: 1c:42:28:96:8e:b7:c5:c1:41:75:4e:09:71:79:e5:6d:96:ca: 4b:a5:88:60:d0:30:74:b8:ca:08:dc:b4:30:9e:40:07:16:6b: 65:95:77:01:ae:a4:b7:35:0b:81:da:71:15:a9:74:17:38:7b: 58:ca:f9:2f:fb:c0:65:76:8d:5b:01:b9:7d:de:82:3d:64:b8: be:14:74:a3:0a:54:d3:2c:95:18:17:35:f5:51:6b:3f:8f:a2: 96:61:39:78:6b:4b:e5:a6:a0:f8:53:df:51:10:93:62:e7:80: 2f:e2:d1:e0:bc:8e:36:46:77:33:ec:b8:fb:8e:9a:2c:89:4d: 31:11:0f:26:9e:04:bb:b7:04:8d:0b:f2:b9:fc:5a:9d:3b:16: b7:2f:c8:98:ab:fe:8a:50:59:2e:a3:3b:fc:29:5d:8b:c1:4b: c9:e2:8a:13:1d:b1:bf:bb:42:1d:52:dd:4e:d8:14:5e:10:c6: 31:07:ef:71:27:f7:1b:39:09:dc:82:ea:8b:b3:95:86:5e:fd: f5:da:5d:31:a6:e0:31:b6:94:e6:44:49:74:c5:16:e5:f7:1f: 03:61:28:c5:c8:cb:12:a0:42:4b:f9:6b:88:08:8d:b4:32:18: f3:75:9f:c4:7f:00:4f:05:95:9c:a3:17:02:c3:b3:53:9b:aa: 20:39:29:2b:66:fa:9d:af:5e:b3:92:d2:b5:a6:e1:1a:f9:2d: 41:69:81:14:b4:b4:b5:ed:89:3d:ce:fb:a9:9d:35:42:44:b1: 1c:14:73:81:cf:2a:01:35:9a:31:d5:2d:8f:6d:84:df:80:4d: 57:e3:3f:c5:84:75:da:89:c6:30:bb:eb:8f:cb:22:08:a0:ae: aa:f1:03:6c:3a:4b:4d:09:a5:0e:72:c6:56:6b:21:42:4e:23: 25:14:68:ae:76:0a:7c:0c:07:70:64:f9:9a:2f:f6:05:39:26: c6:0c:8f:19:7f:43:5e:6e:f4:5b:15:2f:db:61:5d:e6:67:2f: 3f:08:94:f9:60:b4:98:31:da:74:f1:84:93:71:4d:5f:fb:60: 58:d1:fb:c4:c1:6d:89:a2:bb:20:1f:9d:71:91:cb:32:9b:13: 3d:3e:7d:92:52:35:ac:92:94:a2:d3:18:c2:7c:c7:ea:af:76: 05:16:dd:67:27:c2:7e:1c:07:22:21:f3:40:0a:1b:34:07:44: 13:c2:84:6a:8e:df:19:5a:bf:7f:eb:1d:e2:1a:38:d1:5c:af: 47:92:6b:80:b5:30:a5:c9:8d:d8:ab:31:81:1f:df:c2:66:37: d3:93:a9:85:86:79:65:d2 SHA1 Fingerprint=56:E0:FA:C0:3B:8F:18:23:55:18:E5:D3:11:CA:E8:C2:43:31:AB:66 -----BEGIN CERTIFICATE----- MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWdu IFBsYXRpbnVtIENBIC0gRzIwHhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAw WjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMSMwIQYDVQQD ExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQAD ggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu669y IIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2Htn IuJpX+UFeNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+ 6ixuEFGSzH7VozPY1kneWCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5ob jM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIoj5+saCB9bzuohTEJfwvH6GXp43gOCWcw izSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/68++QHkwFix7qepF6w9fl +zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34TaNhxKFrY zt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaP pZjydomyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtF KwH3HBqi7Ri6Cr2D+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuW ae5ogObnmLo2t/5u7Su9IPhlGdpVCX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMB AAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O BBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCvzAeHFUdvOMW0 ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUA A4ICAQAIhab1Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0 uMoI3LQwnkAHFmtllXcBrqS3NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+ FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4U99REJNi54Av4tHgvI42Rncz7Lj7 jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8KV2LwUvJ4ooTHbG/ u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl9x8D YSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1 puEa+S1BaYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXa icYwu+uPyyIIoK6q8QNsOktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbG DI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSYMdp08YSTcU1f+2BY0fvEwW2JorsgH51x kcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAciIfNAChs0B0QTwoRqjt8Z Wr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 13492815561806991280 (0xbb401c43f55e4fb0) Signature Algorithm: sha1WithRSAEncryption Issuer: C=CH, O=SwissSign AG, CN=SwissSign Gold CA - G2 Validity Not Before: Oct 25 08:30:35 2006 GMT Not After : Oct 25 08:30:35 2036 GMT Subject: C=CH, O=SwissSign AG, CN=SwissSign Gold CA - G2 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:af:e4:ee:7e:8b:24:0e:12:6e:a9:50:2d:16:44: 3b:92:92:5c:ca:b8:5d:84:92:42:13:2a:bc:65:57: 82:40:3e:57:24:cd:50:8b:25:2a:b7:6f:fc:ef:a2: d0:c0:1f:02:24:4a:13:96:8f:23:13:e6:28:58:00: a3:47:c7:06:a7:84:23:2b:bb:bd:96:2b:7f:55:cc: 8b:c1:57:1f:0e:62:65:0f:dd:3d:56:8a:73:da:ae: 7e:6d:ba:81:1c:7e:42:8c:20:35:d9:43:4d:84:fa: 84:db:52:2c:f3:0e:27:77:0b:6b:bf:11:2f:72:78: 9f:2e:d8:3e:e6:18:37:5a:2a:72:f9:da:62:90:92: 95:ca:1f:9c:e9:b3:3c:2b:cb:f3:01:13:bf:5a:cf: c1:b5:0a:60:bd:dd:b5:99:64:53:b8:a0:96:b3:6f: e2:26:77:91:8c:e0:62:10:02:9f:34:0f:a4:d5:92: 33:51:de:be:8d:ba:84:7a:60:3c:6a:db:9f:2b:ec: de:de:01:3f:6e:4d:e5:50:86:cb:b4:af:ed:44:40: c5:ca:5a:8c:da:d2:2b:7c:a8:ee:be:a6:e5:0a:aa: 0e:a5:df:05:52:b7:55:c7:22:5d:32:6a:97:97:63: 13:db:c9:db:79:36:7b:85:3a:4a:c5:52:89:f9:24: e7:9d:77:a9:82:ff:55:1c:a5:71:69:2b:d1:02:24: f2:b3:26:d4:6b:da:04:55:e5:c1:0a:c7:6d:30:37: 90:2a:e4:9e:14:33:5e:16:17:55:c5:5b:b5:cb:34: 89:92:f1:9d:26:8f:a1:07:d4:c6:b2:78:50:db:0c: 0c:0b:7c:0b:8c:41:d7:b9:e9:dd:8c:88:f7:a3:4d: b2:32:cc:d8:17:da:cd:b7:ce:66:9d:d4:fd:5e:ff: bd:97:3e:29:75:e7:7e:a7:62:58:af:25:34:a5:41: c7:3d:bc:0d:50:ca:03:03:0f:08:5a:1f:95:73:78: 62:bf:af:72:14:69:0e:a5:e5:03:0e:78:8e:26:28: 42:f0:07:0b:62:20:10:67:39:46:fa:a9:03:cc:04: 38:7a:66:ef:20:83:b5:8c:4a:56:8e:91:00:fc:8e: 5c:82:de:88:a0:c3:e2:68:6e:7d:8d:ef:3c:dd:65: f4:5d:ac:51:ef:24:80:ae:aa:56:97:6f:f9:ad:7d: da:61:3f:98:77:3c:a5:91:b6:1c:8c:26:da:65:a2: 09:6d:c1:e2:54:e3:b9:ca:4c:4c:80:8f:77:7b:60: 9a:1e:df:b6:f2:48:1e:0e:ba:4e:54:6d:98:e0:e1: a2:1a:a2:77:50:cf:c4:63:92:ec:47:19:9d:eb:e6: 6b:ce:c1 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 5B:25:7B:96:A4:65:51:7E:B8:39:F3:C0:78:66:5E:E8:3A:E7:F0:EE X509v3 Authority Key Identifier: keyid:5B:25:7B:96:A4:65:51:7E:B8:39:F3:C0:78:66:5E:E8:3A:E7:F0:EE X509v3 Certificate Policies: Policy: 2.16.756.1.89.1.2.1.1 CPS: http://repository.swisssign.com/ Signature Algorithm: sha1WithRSAEncryption 27:ba:e3:94:7c:f1:ae:c0:de:17:e6:e5:d8:d5:f5:54:b0:83: f4:bb:cd:5e:05:7b:4f:9f:75:66:af:3c:e8:56:7e:fc:72:78: 38:03:d9:2b:62:1b:00:b9:f8:e9:60:cd:cc:ce:51:8a:c7:50: 31:6e:e1:4a:7e:18:2f:69:59:b6:3d:64:81:2b:e3:83:84:e6: 22:87:8e:7d:e0:ee:02:99:61:b8:1e:f4:b8:2b:88:12:16:84: c2:31:93:38:96:31:a6:b9:3b:53:3f:c3:24:93:56:5b:69:92: ec:c5:c1:bb:38:00:e3:ec:17:a9:b8:dc:c7:7c:01:83:9f:32: 47:ba:52:22:34:1d:32:7a:09:56:a7:7c:25:36:a9:3d:4b:da: c0:82:6f:0a:bb:12:c8:87:4b:27:11:f9:1e:2d:c7:93:3f:9e: db:5f:26:6b:52:d9:2e:8a:f1:14:c6:44:8d:15:a9:b7:bf:bd: de:a6:1a:ee:ae:2d:fb:48:77:17:fe:bb:ec:af:18:f5:2a:51: f0:39:84:97:95:6c:6e:1b:c3:2b:c4:74:60:79:25:b0:0a:27: df:df:5e:d2:39:cf:45:7d:42:4b:df:b3:2c:1e:c5:c6:5d:ca: 55:3a:a0:9c:69:9a:8f:da:ef:b2:b0:3c:9f:87:6c:12:2b:65: 70:15:52:31:1a:24:cf:6f:31:23:50:1f:8c:4f:8f:23:c3:74: 41:63:1c:55:a8:14:dd:3e:e0:51:50:cf:f1:1b:30:56:0e:92: b0:82:85:d8:83:cb:22:64:bc:2d:b8:25:d5:54:a2:b8:06:ea: ad:92:a4:24:a0:c1:86:b5:4a:13:6a:47:cf:2e:0b:56:95:54: cb:ce:9a:db:6a:b4:a6:b2:db:41:08:86:27:77:f7:6a:a0:42: 6c:0b:38:ce:d7:75:50:32:92:c2:df:2b:30:22:48:d0:d5:41: 38:25:5d:a4:e9:5d:9f:c6:94:75:d0:45:fd:30:97:43:8f:90: ab:0a:c7:86:73:60:4a:69:2d:de:a5:78:d7:06:da:6a:9e:4b: 3e:77:3a:20:13:22:01:d0:bf:68:9e:63:60:6b:35:4d:0b:6d: ba:a1:3d:c0:93:e0:7f:23:b3:55:ad:72:25:4e:46:f9:d2:16: ef:b0:64:c1:01:9e:e9:ca:a0:6a:98:0e:cf:d8:60:f2:2f:49: b8:e4:42:e1:38:35:16:f4:c8:6e:4f:f7:81:56:e8:ba:a3:be: 23:af:ae:fd:6f:03:e0:02:3b:30:76:fa:1b:6d:41:cf:01:b1: e9:b8:c9:66:f4:db:26:f3:3a:a4:74:f2:49:24:5b:c9:b0:d0: 57:c1:fa:3e:7a:e1:97:c9 SHA1 Fingerprint=D8:C5:38:8A:B7:30:1B:1B:6E:D4:7A:E6:45:25:3A:6F:9F:1A:27:61 -----BEGIN CERTIFICATE----- MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8 76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+ bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c 6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7 lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn 8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6 45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5 O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a 77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3 92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 5700383053117599563 (0x4f1bd42f54bb2f4b) Signature Algorithm: sha1WithRSAEncryption Issuer: C=CH, O=SwissSign AG, CN=SwissSign Silver CA - G2 Validity Not Before: Oct 25 08:32:46 2006 GMT Not After : Oct 25 08:32:46 2036 GMT Subject: C=CH, O=SwissSign AG, CN=SwissSign Silver CA - G2 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:c4:f1:87:7f:d3:78:31:f7:38:c9:f8:c3:99:43: bc:c7:f7:bc:37:e7:4e:71:ba:4b:8f:a5:73:1d:5c: 6e:98:ae:03:57:ae:38:37:43:2f:17:3d:1f:c8:ce: 68:10:c1:78:ae:19:03:2b:10:fa:2c:79:83:f6:e8: b9:68:b9:55:f2:04:44:a7:39:f9:fc:04:8b:1e:f1: a2:4d:27:f9:61:7b:ba:b7:e5:a2:13:b6:eb:61:3e: d0:6c:d1:e6:fb:fa:5e:ed:1d:b4:9e:a0:35:5b:a1: 92:cb:f0:49:92:fe:85:0a:05:3e:e6:d9:0b:e2:4f: bb:dc:95:37:fc:91:e9:32:35:22:d1:1f:3a:4e:27: 85:9d:b0:15:94:32:da:61:0d:47:4d:60:42:ae:92: 47:e8:83:5a:50:58:e9:8a:8b:b9:5d:a1:dc:dd:99: 4a:1f:36:67:bb:48:e4:83:b6:37:eb:48:3a:af:0f: 67:8f:17:07:e8:04:ca:ef:6a:31:87:d4:c0:b6:f9: 94:71:7b:67:64:b8:b6:91:4a:42:7b:65:2e:30:6a: 0c:f5:90:ee:95:e6:f2:cd:82:ec:d9:a1:4a:ec:f6: b2:4b:e5:45:85:e6:6d:78:93:04:2e:9c:82:6d:36: a9:c4:31:64:1f:86:83:0b:2a:f4:35:0a:78:c9:55: cf:41:b0:47:e9:30:9f:99:be:61:a8:06:84:b9:28: 7a:5f:38:d9:1b:a9:38:b0:83:7f:73:c1:c3:3b:48: 2a:82:0f:21:9b:b8:cc:a8:35:c3:84:1b:83:b3:3e: be:a4:95:69:01:3a:89:00:78:04:d9:c9:f4:99:19: ab:56:7e:5b:8b:86:39:15:91:a4:10:2c:09:32:80: 60:b3:93:c0:2a:b6:18:0b:9d:7e:8d:49:f2:10:4a: 7f:f9:d5:46:2f:19:92:a3:99:a7:26:ac:bb:8c:3c: e6:0e:bc:47:07:dc:73:51:f1:70:64:2f:08:f9:b4: 47:1d:30:6c:44:ea:29:37:85:92:68:66:bc:83:38: fe:7b:39:2e:d3:50:f0:1f:fb:5e:60:b6:a9:a6:fa: 27:41:f1:9b:18:72:f2:f5:84:74:4a:c9:67:c4:54: ae:48:64:df:8c:d1:6e:b0:1d:e1:07:8f:08:1e:99: 9c:71:e9:4c:d8:a5:f7:47:12:1f:74:d1:51:9e:86: f3:c2:a2:23:40:0b:73:db:4b:a6:e7:73:06:8c:c1: a0:e9:c1:59:ac:46:fa:e6:2f:f8:cf:71:9c:46:6d: b9:c4:15:8d:38:79:03:45:48:ef:c4:5d:d7:08:ee: 87:39:22:86:b2:0d:0f:58:43:f7:71:a9:48:2e:fd: ea:d6:1f Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 17:A0:CD:C1:E4:41:B6:3A:5B:3B:CB:45:9D:BD:1C:C2:98:FA:86:58 X509v3 Authority Key Identifier: keyid:17:A0:CD:C1:E4:41:B6:3A:5B:3B:CB:45:9D:BD:1C:C2:98:FA:86:58 X509v3 Certificate Policies: Policy: 2.16.756.1.89.1.3.1.1 CPS: http://repository.swisssign.com/ Signature Algorithm: sha1WithRSAEncryption 73:c6:81:e0:27:d2:2d:0f:e0:95:30:e2:9a:41:7f:50:2c:5f: 5f:62:61:a9:86:6a:69:18:0c:74:49:d6:5d:84:ea:41:52:18: 6f:58:ad:50:56:20:6a:c6:bd:28:69:58:91:dc:91:11:35:a9: 3a:1d:bc:1a:a5:60:9e:d8:1f:7f:45:91:69:d9:7e:bb:78:72: c1:06:0f:2a:ce:8f:85:70:61:ac:a0:cd:0b:b8:39:29:56:84: 32:4e:86:bb:3d:c4:2a:d9:d7:1f:72:ee:fe:51:a1:22:41:b1: 71:02:63:1a:82:b0:62:ab:5e:57:12:1f:df:cb:dd:75:a0:c0: 5d:79:90:8c:1b:e0:50:e6:de:31:fe:98:7b:70:5f:a5:90:d8: ad:f8:02:b6:6f:d3:60:dd:40:4b:22:c5:3d:ad:3a:7a:9f:1a: 1a:47:91:79:33:ba:82:dc:32:69:03:96:6e:1f:4b:f0:71:fe: e3:67:72:a0:b1:bf:5c:8b:e4:fa:99:22:c7:84:b9:1b:8d:23: 97:3f:ed:25:e0:cf:65:bb:f5:61:04:ef:dd:1e:b2:5a:41:22: 5a:a1:9f:5d:2c:e8:5b:c9:6d:a9:0c:0c:78:aa:60:c6:56:8f: 01:5a:0c:68:bc:69:19:79:c4:1f:7e:97:05:bf:c5:e9:24:51: 5e:d4:d5:4b:53:ed:d9:23:5a:36:03:65:a3:c1:03:ad:41:30: f3:46:1b:85:90:af:65:b5:d5:b1:e4:16:5b:78:75:1d:97:7a: 6d:59:a9:2a:8f:7b:de:c3:87:89:10:99:49:73:78:c8:3d:bd: 51:35:74:2a:d5:f1:7e:69:1b:2a:bb:3b:bd:25:b8:9a:5a:3d: 72:61:90:66:87:ee:0c:d6:4d:d4:11:74:0b:6a:fe:0b:03:fc: a3:55:57:89:fe:4a:cb:ae:5b:17:05:c8:f2:8d:23:31:53:38: d2:2d:6a:3f:82:b9:8d:08:6a:f7:5e:41:74:6e:c3:11:7e:07: ac:29:60:91:3f:38:ca:57:10:0d:bd:30:2f:c7:a5:e6:41:a0: da:ae:05:87:9a:a0:a4:65:6c:4c:09:0c:89:ba:b8:d3:b9:c0: 93:8a:30:fa:8d:e5:9a:6b:15:01:4e:67:aa:da:62:56:3e:84: 08:66:d2:c4:36:7d:a7:3e:10:fc:88:e0:d4:80:e5:00:bd:aa: f3:4e:06:a3:7a:6a:f9:62:72:e3:09:4f:eb:9b:0e:01:23:f1: 9f:bb:7c:dc:dc:6c:11:97:25:b2:f2:b4:63:14:d2:06:2a:67: 8c:83:f5:ce:ea:07:d8:9a:6a:1e:ec:e4:0a:bb:2a:4c:eb:09: 60:39:ce:ca:62:d8:2e:6e SHA1 Fingerprint=9B:AA:E5:9F:56:EE:21:CB:43:5A:BE:25:93:DF:A7:F0:40:D1:1D:CB -----BEGIN CERTIFICATE----- MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu IFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow RzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY U3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A MIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv Fz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br YT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF nbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH 6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt eJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/ c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ MoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH HTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf jNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6 5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU F6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB AHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp WJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9 xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ 2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ IseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8 aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X em1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/ OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+ hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 18:ac:b5:6a:fd:69:b6:15:3a:63:6c:af:da:fa:c4:a1 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=GeoTrust Inc., CN=GeoTrust Primary Certification Authority Validity Not Before: Nov 27 00:00:00 2006 GMT Not After : Jul 16 23:59:59 2036 GMT Subject: C=US, O=GeoTrust Inc., CN=GeoTrust Primary Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:be:b8:15:7b:ff:d4:7c:7d:67:ad:83:64:7b:c8: 42:53:2d:df:f6:84:08:20:61:d6:01:59:6a:9c:44: 11:af:ef:76:fd:95:7e:ce:61:30:bb:7a:83:5f:02: bd:01:66:ca:ee:15:8d:6f:a1:30:9c:bd:a1:85:9e: 94:3a:f3:56:88:00:31:cf:d8:ee:6a:96:02:d9:ed: 03:8c:fb:75:6d:e7:ea:b8:55:16:05:16:9a:f4:e0: 5e:b1:88:c0:64:85:5c:15:4d:88:c7:b7:ba:e0:75: e9:ad:05:3d:9d:c7:89:48:e0:bb:28:c8:03:e1:30: 93:64:5e:52:c0:59:70:22:35:57:88:8a:f1:95:0a: 83:d7:bc:31:73:01:34:ed:ef:46:71:e0:6b:02:a8: 35:72:6b:97:9b:66:e0:cb:1c:79:5f:d8:1a:04:68: 1e:47:02:e6:9d:60:e2:36:97:01:df:ce:35:92:df: be:67:c7:6d:77:59:3b:8f:9d:d6:90:15:94:bc:42: 34:10:c1:39:f9:b1:27:3e:7e:d6:8a:75:c5:b2:af: 96:d3:a2:de:9b:e4:98:be:7d:e1:e9:81:ad:b6:6f: fc:d7:0e:da:e0:34:b0:0d:1a:77:e7:e3:08:98:ef: 58:fa:9c:84:b7:36:af:c2:df:ac:d2:f4:10:06:70: 71:35 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 2C:D5:50:41:97:15:8B:F0:8F:36:61:5B:4A:FB:6B:D9:99:C9:33:92 Signature Algorithm: sha1WithRSAEncryption 5a:70:7f:2c:dd:b7:34:4f:f5:86:51:a9:26:be:4b:b8:aa:f1: 71:0d:dc:61:c7:a0:ea:34:1e:7a:77:0f:04:35:e8:27:8f:6c: 90:bf:91:16:24:46:3e:4a:4e:ce:2b:16:d5:0b:52:1d:fc:1f: 67:a2:02:45:31:4f:ce:f3:fa:03:a7:79:9d:53:6a:d9:da:63: 3a:f8:80:d7:d3:99:e1:a5:e1:be:d4:55:71:98:35:3a:be:93: ea:ae:ad:42:b2:90:6f:e0:fc:21:4d:35:63:33:89:49:d6:9b: 4e:ca:c7:e7:4e:09:00:f7:da:c7:ef:99:62:99:77:b6:95:22: 5e:8a:a0:ab:f4:b8:78:98:ca:38:19:99:c9:72:9e:78:cd:4b: ac:af:19:a0:73:12:2d:fc:c2:41:ba:81:91:da:16:5a:31:b7: f9:b4:71:80:12:48:99:72:73:5a:59:53:c1:63:52:33:ed:a7: c9:d2:39:02:70:fa:e0:b1:42:66:29:aa:9b:51:ed:30:54:22: 14:5f:d9:ab:1d:c1:e4:94:f0:f8:f5:2b:f7:ea:ca:78:46:d6: b8:91:fd:a6:0d:2b:1a:14:01:3e:80:f0:42:a0:95:07:5e:6d: cd:cc:4b:a4:45:8d:ab:12:e8:b3:de:5a:e5:a0:7c:e8:0f:22: 1d:5a:e9:59 SHA1 Fingerprint=32:3C:11:8E:1B:F7:B8:B6:52:54:E2:E2:10:0D:D6:02:90:37:F0:96 -----BEGIN CERTIFICATE----- MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9 AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0 7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1 6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl 4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 34:4e:d5:57:20:d5:ed:ec:49:f4:2f:ce:37:db:2b:6d Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=thawte, Inc., OU=Certification Services Division, OU=(c) 2006 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA Validity Not Before: Nov 17 00:00:00 2006 GMT Not After : Jul 16 23:59:59 2036 GMT Subject: C=US, O=thawte, Inc., OU=Certification Services Division, OU=(c) 2006 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:ac:a0:f0:fb:80:59:d4:9c:c7:a4:cf:9d:a1:59: 73:09:10:45:0c:0d:2c:6e:68:f1:6c:5b:48:68:49: 59:37:fc:0b:33:19:c2:77:7f:cc:10:2d:95:34:1c: e6:eb:4d:09:a7:1c:d2:b8:c9:97:36:02:b7:89:d4: 24:5f:06:c0:cc:44:94:94:8d:02:62:6f:eb:5a:dd: 11:8d:28:9a:5c:84:90:10:7a:0d:bd:74:66:2f:6a: 38:a0:e2:d5:54:44:eb:1d:07:9f:07:ba:6f:ee:e9: fd:4e:0b:29:f5:3e:84:a0:01:f1:9c:ab:f8:1c:7e: 89:a4:e8:a1:d8:71:65:0d:a3:51:7b:ee:bc:d2:22: 60:0d:b9:5b:9d:df:ba:fc:51:5b:0b:af:98:b2:e9: 2e:e9:04:e8:62:87:de:2b:c8:d7:4e:c1:4c:64:1e: dd:cf:87:58:ba:4a:4f:ca:68:07:1d:1c:9d:4a:c6: d5:2f:91:cc:7c:71:72:1c:c5:c0:67:eb:32:fd:c9: 92:5c:94:da:85:c0:9b:bf:53:7d:2b:09:f4:8c:9d: 91:1f:97:6a:52:cb:de:09:36:a4:77:d8:7b:87:50: 44:d5:3e:6e:29:69:fb:39:49:26:1e:09:a5:80:7b: 40:2d:eb:e8:27:85:c9:fe:61:fd:7e:e6:7c:97:1d: d5:9d Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 7B:5B:45:CF:AF:CE:CB:7A:FD:31:92:1A:6A:B6:F3:46:EB:57:48:50 Signature Algorithm: sha1WithRSAEncryption 79:11:c0:4b:b3:91:b6:fc:f0:e9:67:d4:0d:6e:45:be:55:e8: 93:d2:ce:03:3f:ed:da:25:b0:1d:57:cb:1e:3a:76:a0:4c:ec: 50:76:e8:64:72:0c:a4:a9:f1:b8:8b:d6:d6:87:84:bb:32:e5: 41:11:c0:77:d9:b3:60:9d:eb:1b:d5:d1:6e:44:44:a9:a6:01: ec:55:62:1d:77:b8:5c:8e:48:49:7c:9c:3b:57:11:ac:ad:73: 37:8e:2f:78:5c:90:68:47:d9:60:60:e6:fc:07:3d:22:20:17: c4:f7:16:e9:c4:d8:72:f9:c8:73:7c:df:16:2f:15:a9:3e:fd: 6a:27:b6:a1:eb:5a:ba:98:1f:d5:e3:4d:64:0a:9d:13:c8:61: ba:f5:39:1c:87:ba:b8:bd:7b:22:7f:f6:fe:ac:40:79:e5:ac: 10:6f:3d:8f:1b:79:76:8b:c4:37:b3:21:18:84:e5:36:00:eb: 63:20:99:b9:e9:fe:33:04:bb:41:c8:c1:02:f9:44:63:20:9e: 81:ce:42:d3:d6:3f:2c:76:d3:63:9c:59:dd:8f:a6:e1:0e:a0: 2e:41:f7:2e:95:47:cf:bc:fd:33:f3:f6:0b:61:7e:7e:91:2b: 81:47:c2:27:30:ee:a7:10:5d:37:8f:5c:39:2b:e4:04:f0:7b: 8d:56:8c:68 SHA1 Fingerprint=91:C6:D6:EE:3E:8A:C8:63:84:E5:48:C2:99:29:5C:75:6C:81:7B:81 -----BEGIN CERTIFICATE----- MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta 3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk 6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6 Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2 /qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/ LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7 jVaMaA== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 18:da:d1:9e:26:7d:e8:bb:4a:21:58:cd:cc:6b:3b:4a Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 2006 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G5 Validity Not Before: Nov 8 00:00:00 2006 GMT Not After : Jul 16 23:59:59 2036 GMT Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 2006 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G5 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:af:24:08:08:29:7a:35:9e:60:0c:aa:e7:4b:3b: 4e:dc:7c:bc:3c:45:1c:bb:2b:e0:fe:29:02:f9:57: 08:a3:64:85:15:27:f5:f1:ad:c8:31:89:5d:22:e8: 2a:aa:a6:42:b3:8f:f8:b9:55:b7:b1:b7:4b:b3:fe: 8f:7e:07:57:ec:ef:43:db:66:62:15:61:cf:60:0d: a4:d8:de:f8:e0:c3:62:08:3d:54:13:eb:49:ca:59: 54:85:26:e5:2b:8f:1b:9f:eb:f5:a1:91:c2:33:49: d8:43:63:6a:52:4b:d2:8f:e8:70:51:4d:d1:89:69: 7b:c7:70:f6:b3:dc:12:74:db:7b:5d:4b:56:d3:96: bf:15:77:a1:b0:f4:a2:25:f2:af:1c:92:67:18:e5: f4:06:04:ef:90:b9:e4:00:e4:dd:3a:b5:19:ff:02: ba:f4:3c:ee:e0:8b:eb:37:8b:ec:f4:d7:ac:f2:f6: f0:3d:af:dd:75:91:33:19:1d:1c:40:cb:74:24:19: 21:93:d9:14:fe:ac:2a:52:c7:8f:d5:04:49:e4:8d: 63:47:88:3c:69:83:cb:fe:47:bd:2b:7e:4f:c5:95: ae:0e:9d:d4:d1:43:c0:67:73:e3:14:08:7e:e5:3f: 9f:73:b8:33:0a:cf:5d:3f:34:87:96:8a:ee:53:e8: 25:15 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign 1.3.6.1.5.5.7.1.12: 0_.].[0Y0W0U..image/gif0!0.0...+..............k...j.H.,{..0%.#http://logo.verisign.com/vslogo.gif X509v3 Subject Key Identifier: 7F:D3:65:A7:C2:DD:EC:BB:F0:30:09:F3:43:39:FA:02:AF:33:31:33 Signature Algorithm: sha1WithRSAEncryption 93:24:4a:30:5f:62:cf:d8:1a:98:2f:3d:ea:dc:99:2d:bd:77: f6:a5:79:22:38:ec:c4:a7:a0:78:12:ad:62:0e:45:70:64:c5: e7:97:66:2d:98:09:7e:5f:af:d6:cc:28:65:f2:01:aa:08:1a: 47:de:f9:f9:7c:92:5a:08:69:20:0d:d9:3e:6d:6e:3c:0d:6e: d8:e6:06:91:40:18:b9:f8:c1:ed:df:db:41:aa:e0:96:20:c9: cd:64:15:38:81:c9:94:ee:a2:84:29:0b:13:6f:8e:db:0c:dd: 25:02:db:a4:8b:19:44:d2:41:7a:05:69:4a:58:4f:60:ca:7e: 82:6a:0b:02:aa:25:17:39:b5:db:7f:e7:84:65:2a:95:8a:bd: 86:de:5e:81:16:83:2d:10:cc:de:fd:a8:82:2a:6d:28:1f:0d: 0b:c4:e5:e7:1a:26:19:e1:f4:11:6f:10:b5:95:fc:e7:42:05: 32:db:ce:9d:51:5e:28:b6:9e:85:d3:5b:ef:a5:7d:45:40:72: 8e:b7:0e:6b:0e:06:fb:33:35:48:71:b8:9d:27:8b:c4:65:5f: 0d:86:76:9c:44:7a:f6:95:5c:f6:5d:32:08:33:a4:54:b6:18: 3f:68:5c:f2:42:4a:85:38:54:83:5f:d1:e8:2c:f2:ac:11:d6: a8:ed:63:6a SHA1 Fingerprint=4E:B6:D5:78:49:9B:1C:CF:5F:58:1E:AD:56:BE:3D:9B:67:44:A5:E5 -----BEGIN CERTIFICATE----- MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y 5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ 4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 0c:f0:8e:5c:08:16:a5:ad:42:7f:f0:eb:27:18:59:d0 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=SecureTrust Corporation, CN=SecureTrust CA Validity Not Before: Nov 7 19:31:18 2006 GMT Not After : Dec 31 19:40:55 2029 GMT Subject: C=US, O=SecureTrust Corporation, CN=SecureTrust CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:ab:a4:81:e5:95:cd:f5:f6:14:8e:c2:4f:ca:d4: e2:78:95:58:9c:41:e1:0d:99:40:24:17:39:91:33: 66:e9:be:e1:83:af:62:5c:89:d1:fc:24:5b:61:b3: e0:11:11:41:1c:1d:6e:f0:b8:bb:f8:de:a7:81:ba: a6:48:c6:9f:1d:bd:be:8e:a9:41:3e:b8:94:ed:29: 1a:d4:8e:d2:03:1d:03:ef:6d:0d:67:1c:57:d7:06: ad:ca:c8:f5:fe:0e:af:66:25:48:04:96:0b:5d:a3: ba:16:c3:08:4f:d1:46:f8:14:5c:f2:c8:5e:01:99: 6d:fd:88:cc:86:a8:c1:6f:31:42:6c:52:3e:68:cb: f3:19:34:df:bb:87:18:56:80:26:c4:d0:dc:c0:6f: df:de:a0:c2:91:16:a0:64:11:4b:44:bc:1e:f6:e7: fa:63:de:66:ac:76:a4:71:a3:ec:36:94:68:7a:77: a4:b1:e7:0e:2f:81:7a:e2:b5:72:86:ef:a2:6b:8b: f0:0f:db:d3:59:3f:ba:72:bc:44:24:9c:e3:73:b3: f7:af:57:2f:42:26:9d:a9:74:ba:00:52:f2:4b:cd: 53:7c:47:0b:36:85:0e:66:a9:08:97:16:34:57:c1: 66:f7:80:e3:ed:70:54:c7:93:e0:2e:28:15:59:87: ba:bb Exponent: 65537 (0x10001) X509v3 extensions: 1.3.6.1.4.1.311.20.2: ...C.A X509v3 Key Usage: Digital Signature, Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 42:32:B6:16:FA:04:FD:FE:5D:4B:7A:C3:FD:F7:4C:40:1D:5A:43:AF X509v3 CRL Distribution Points: Full Name: URI:http://crl.securetrust.com/STCA.crl 1.3.6.1.4.1.311.21.1: ... Signature Algorithm: sha1WithRSAEncryption 30:ed:4f:4a:e1:58:3a:52:72:5b:b5:a6:a3:65:18:a6:bb:51: 3b:77:e9:9d:ea:d3:9f:5c:e0:45:65:7b:0d:ca:5b:e2:70:50: b2:94:05:14:ae:49:c7:8d:41:07:12:73:94:7e:0c:23:21:fd: bc:10:7f:60:10:5a:72:f5:98:0e:ac:ec:b9:7f:dd:7a:6f:5d: d3:1c:f4:ff:88:05:69:42:a9:05:71:c8:b7:ac:26:e8:2e:b4: 8c:6a:ff:71:dc:b8:b1:df:99:bc:7c:21:54:2b:e4:58:a2:bb: 57:29:ae:9e:a9:a3:19:26:0f:99:2e:08:b0:ef:fd:69:cf:99: 1a:09:8d:e3:a7:9f:2b:c9:36:34:7b:24:b3:78:4c:95:17:a4: 06:26:1e:b6:64:52:36:5f:60:67:d9:9c:c5:05:74:0b:e7:67: 23:d2:08:fc:88:e9:ae:8b:7f:e1:30:f4:37:7e:fd:c6:32:da: 2d:9e:44:30:30:6c:ee:07:de:d2:34:fc:d2:ff:40:f6:4b:f4: 66:46:06:54:a6:f2:32:0a:63:26:30:6b:9b:d1:dc:8b:47:ba: e1:b9:d5:62:d0:a2:a0:f4:67:05:78:29:63:1a:6f:04:d6:f8: c6:4c:a3:9a:b1:37:b4:8d:e5:28:4b:1d:9e:2c:c2:b8:68:bc: ed:02:ee:31 SHA1 Fingerprint=87:82:C6:C3:04:35:3B:CF:D2:96:92:D2:59:3E:7D:44:D9:34:FF:11 -----BEGIN CERTIFICATE----- MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO 0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj 7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS 8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB /zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ 3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR 3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 07:56:22:a4:e8:d4:8a:89:4d:f4:13:c8:f0:f8:ea:a5 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=SecureTrust Corporation, CN=Secure Global CA Validity Not Before: Nov 7 19:42:28 2006 GMT Not After : Dec 31 19:52:06 2029 GMT Subject: C=US, O=SecureTrust Corporation, CN=Secure Global CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:af:35:2e:d8:ac:6c:55:69:06:71:e5:13:68:24: b3:4f:d8:cc:21:47:f8:f1:60:38:89:89:03:e9:bd: ea:5e:46:53:09:dc:5c:f5:5a:e8:f7:45:2a:02:eb: 31:61:d7:29:33:4c:ce:c7:7c:0a:37:7e:0f:ba:32: 98:e1:1d:97:af:8f:c7:dc:c9:38:96:f3:db:1a:fc: 51:ed:68:c6:d0:6e:a4:7c:24:d1:ae:42:c8:96:50: 63:2e:e0:fe:75:fe:98:a7:5f:49:2e:95:e3:39:33: 64:8e:1e:a4:5f:90:d2:67:3c:b2:d9:fe:41:b9:55: a7:09:8e:72:05:1e:8b:dd:44:85:82:42:d0:49:c0: 1d:60:f0:d1:17:2c:95:eb:f6:a5:c1:92:a3:c5:c2: a7:08:60:0d:60:04:10:96:79:9e:16:34:e6:a9:b6: fa:25:45:39:c8:1e:65:f9:93:f5:aa:f1:52:dc:99: 98:3d:a5:86:1a:0c:35:33:fa:4b:a5:04:06:15:1c: 31:80:ef:aa:18:6b:c2:7b:d7:da:ce:f9:33:20:d5: f5:bd:6a:33:2d:81:04:fb:b0:5c:d4:9c:a3:e2:5c: 1d:e3:a9:42:75:5e:7b:d4:77:ef:39:54:ba:c9:0a: 18:1b:12:99:49:2f:88:4b:fd:50:62:d1:73:e7:8f: 7a:43 Exponent: 65537 (0x10001) X509v3 extensions: 1.3.6.1.4.1.311.20.2: ...C.A X509v3 Key Usage: Digital Signature, Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: AF:44:04:C2:41:7E:48:83:DB:4E:39:02:EC:EC:84:7A:E6:CE:C9:A4 X509v3 CRL Distribution Points: Full Name: URI:http://crl.securetrust.com/SGCA.crl 1.3.6.1.4.1.311.21.1: ... Signature Algorithm: sha1WithRSAEncryption 63:1a:08:40:7d:a4:5e:53:0d:77:d8:7a:ae:1f:0d:0b:51:16: 03:ef:18:7c:c8:e3:af:6a:58:93:14:60:91:b2:84:dc:88:4e: be:39:8a:3a:f3:e6:82:89:5d:01:37:b3:ab:24:a4:15:0e:92: 35:5a:4a:44:5e:4e:57:fa:75:ce:1f:48:ce:66:f4:3c:40:26: 92:98:6c:1b:ee:24:46:0c:17:b3:52:a5:db:a5:91:91:cf:37: d3:6f:e7:27:08:3a:4e:19:1f:3a:a7:58:5c:17:cf:79:3f:8b: e4:a7:d3:26:23:9d:26:0f:58:69:fc:47:7e:b2:d0:8d:8b:93: bf:29:4f:43:69:74:76:67:4b:cf:07:8c:e6:02:f7:b5:e1:b4: 43:b5:4b:2d:14:9f:f9:dc:26:0d:bf:a6:47:74:06:d8:88:d1: 3a:29:30:84:ce:d2:39:80:62:1b:a8:c7:57:49:bc:6a:55:51: 67:15:4a:be:35:07:e4:d5:75:98:37:79:30:14:db:29:9d:6c: c5:69:cc:47:55:a2:30:f7:cc:5c:7f:c2:c3:98:1c:6b:4e:16: 80:eb:7a:78:65:45:a2:00:1a:af:0c:0d:55:64:34:48:b8:92: b9:f1:b4:50:29:f2:4f:23:1f:da:6c:ac:1f:44:e1:dd:23:78: 51:5b:c7:16 SHA1 Fingerprint=3A:44:73:5A:E5:81:90:1F:24:86:61:46:1E:3B:9C:C4:5F:F5:3A:1B -----BEGIN CERTIFICATE----- MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa /FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 4e:81:2d:8a:82:65:e0:0b:02:ee:3e:35:02:46:e5:3d Signature Algorithm: sha1WithRSAEncryption Issuer: C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO Certification Authority Validity Not Before: Dec 1 00:00:00 2006 GMT Not After : Dec 31 23:59:59 2029 GMT Subject: C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:d0:40:8b:8b:72:e3:91:1b:f7:51:c1:1b:54:04: 98:d3:a9:bf:c1:e6:8a:5d:3b:87:fb:bb:88:ce:0d: e3:2f:3f:06:96:f0:a2:29:50:99:ae:db:3b:a1:57: b0:74:51:71:cd:ed:42:91:4d:41:fe:a9:c8:d8:6a: 86:77:44:bb:59:66:97:50:5e:b4:d4:2c:70:44:cf: da:37:95:42:69:3c:30:c4:71:b3:52:f0:21:4d:a1: d8:ba:39:7c:1c:9e:a3:24:9d:f2:83:16:98:aa:16: 7c:43:9b:15:5b:b7:ae:34:91:fe:d4:62:26:18:46: 9a:3f:eb:c1:f9:f1:90:57:eb:ac:7a:0d:8b:db:72: 30:6a:66:d5:e0:46:a3:70:dc:68:d9:ff:04:48:89: 77:de:b5:e9:fb:67:6d:41:e9:bc:39:bd:32:d9:62: 02:f1:b1:a8:3d:6e:37:9c:e2:2f:e2:d3:a2:26:8b: c6:b8:55:43:88:e1:23:3e:a5:d2:24:39:6a:47:ab: 00:d4:a1:b3:a9:25:fe:0d:3f:a7:1d:ba:d3:51:c1: 0b:a4:da:ac:38:ef:55:50:24:05:65:46:93:34:4f: 2d:8d:ad:c6:d4:21:19:d2:8e:ca:05:61:71:07:73: 47:e5:8a:19:12:bd:04:4d:ce:4e:9c:a5:48:ac:bb: 26:f7 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: 0B:58:E5:8B:C6:4C:15:37:A4:40:A9:30:A9:21:BE:47:36:5A:56:FF X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 CRL Distribution Points: Full Name: URI:http://crl.comodoca.com/COMODOCertificationAuthority.crl Signature Algorithm: sha1WithRSAEncryption 3e:98:9e:9b:f6:1b:e9:d7:39:b7:78:ae:1d:72:18:49:d3:87: e4:43:82:eb:3f:c9:aa:f5:a8:b5:ef:55:7c:21:52:65:f9:d5: 0d:e1:6c:f4:3e:8c:93:73:91:2e:02:c4:4e:07:71:6f:c0:8f: 38:61:08:a8:1e:81:0a:c0:2f:20:2f:41:8b:91:dc:48:45:bc: f1:c6:de:ba:76:6b:33:c8:00:2d:31:46:4c:ed:e7:9d:cf:88: 94:ff:33:c0:56:e8:24:86:26:b8:d8:38:38:df:2a:6b:dd:12: cc:c7:3f:47:17:4c:a2:c2:06:96:09:d6:db:fe:3f:3c:46:41: df:58:e2:56:0f:3c:3b:c1:1c:93:35:d9:38:52:ac:ee:c8:ec: 2e:30:4e:94:35:b4:24:1f:4b:78:69:da:f2:02:38:cc:95:52: 93:f0:70:25:59:9c:20:67:c4:ee:f9:8b:57:61:f4:92:76:7d: 3f:84:8d:55:b7:e8:e5:ac:d5:f1:f5:19:56:a6:5a:fb:90:1c: af:93:eb:e5:1c:d4:67:97:5d:04:0e:be:0b:83:a6:17:83:b9: 30:12:a0:c5:33:15:05:b9:0d:fb:c7:05:76:e3:d8:4a:8d:fc: 34:17:a3:c6:21:28:be:30:45:31:1e:c7:78:be:58:61:38:ac: 3b:e2:01:65 SHA1 Fingerprint=66:31:BF:9E:F7:4F:9E:B6:C9:D5:A6:0C:BA:6A:BE:D1:F7:BD:EF:7B -----BEGIN CERTIFICATE----- MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI 2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp +2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW /zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB ZQ== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 57:cb:33:6f:c2:5c:16:e6:47:16:17:e3:90:31:68:e0 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Network Solutions L.L.C., CN=Network Solutions Certificate Authority Validity Not Before: Dec 1 00:00:00 2006 GMT Not After : Dec 31 23:59:59 2029 GMT Subject: C=US, O=Network Solutions L.L.C., CN=Network Solutions Certificate Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:e4:bc:7e:92:30:6d:c6:d8:8e:2b:0b:bc:46:ce: e0:27:96:de:de:f9:fa:12:d3:3c:33:73:b3:04:2f: bc:71:8c:e5:9f:b6:22:60:3e:5f:5d:ce:09:ff:82: 0c:1b:9a:51:50:1a:26:89:dd:d5:61:5d:19:dc:12: 0f:2d:0a:a2:43:5d:17:d0:34:92:20:ea:73:cf:38: 2c:06:26:09:7a:72:f7:fa:50:32:f8:c2:93:d3:69: a2:23:ce:41:b1:cc:e4:d5:1f:36:d1:8a:3a:f8:8c: 63:e2:14:59:69:ed:0d:d3:7f:6b:e8:b8:03:e5:4f: 6a:e5:98:63:69:48:05:be:2e:ff:33:b6:e9:97:59: 69:f8:67:19:ae:93:61:96:44:15:d3:72:b0:3f:bc: 6a:7d:ec:48:7f:8d:c3:ab:aa:71:2b:53:69:41:53: 34:b5:b0:b9:c5:06:0a:c4:b0:45:f5:41:5d:6e:89: 45:7b:3d:3b:26:8c:74:c2:e5:d2:d1:7d:b2:11:d4: fb:58:32:22:9a:80:c9:dc:fd:0c:e9:7f:5e:03:97: ce:3b:00:14:87:27:70:38:a9:8e:6e:b3:27:76:98: 51:e0:05:e3:21:ab:1a:d5:85:22:3c:29:b5:9a:16: c5:80:a8:f4:bb:6b:30:8f:2f:46:02:a2:b1:0c:22: e0:d3 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: 21:30:C9:FB:00:D7:4E:98:DA:87:AA:2A:D0:A7:2E:B1:40:31:A7:4C X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 CRL Distribution Points: Full Name: URI:http://crl.netsolssl.com/NetworkSolutionsCertificateAuthority.crl Signature Algorithm: sha1WithRSAEncryption bb:ae:4b:e7:b7:57:eb:7f:aa:2d:b7:73:47:85:6a:c1:e4:a5: 1d:e4:e7:3c:e9:f4:59:65:77:b5:7a:5b:5a:8d:25:36:e0:7a: 97:2e:38:c0:57:60:83:98:06:83:9f:b9:76:7a:6e:50:e0:ba: 88:2c:fc:45:cc:18:b0:99:95:51:0e:ec:1d:b8:88:ff:87:50: 1c:82:c2:e3:e0:32:80:bf:a0:0b:47:c8:c3:31:ef:99:67:32: 80:4f:17:21:79:0c:69:5c:de:5e:34:ae:02:b5:26:ea:50:df: 7f:18:65:2c:c9:f2:63:e1:a9:07:fe:7c:71:1f:6b:33:24:6a: 1e:05:f7:05:68:c0:6a:12:cb:2e:5e:61:cb:ae:28:d3:7e:c2: b4:66:91:26:5f:3c:2e:24:5f:cb:58:0f:eb:28:ec:af:11:96: f3:dc:7b:6f:c0:a7:88:f2:53:77:b3:60:5e:ae:ae:28:da:35: 2c:6f:34:45:d3:26:e1:de:ec:5b:4f:27:6b:16:7c:bd:44:04: 18:82:b3:89:79:17:10:71:3d:7a:a2:16:4e:f5:01:cd:a4:6c: 65:68:a1:49:76:5c:43:c9:d8:bc:36:67:6c:a5:94:b5:d4:cc: b9:bd:6a:35:56:21:de:d8:c3:eb:fb:cb:a4:60:4c:b0:55:a0: a0:7b:57:b2 SHA1 Fingerprint=74:F8:A3:C3:EF:E7:B3:90:06:4B:83:90:3C:21:64:60:20:E5:DF:CE -----BEGIN CERTIFICATE----- MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4 qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8 6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/ h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH /nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Wells Fargo WellsSecure, OU=Wells Fargo Bank NA, CN=WellsSecure Public Root Certificate Authority Validity Not Before: Dec 13 17:07:54 2007 GMT Not After : Dec 14 00:07:54 2022 GMT Subject: C=US, O=Wells Fargo WellsSecure, OU=Wells Fargo Bank NA, CN=WellsSecure Public Root Certificate Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:ee:6f:b4:bd:79:e2:8f:08:21:9e:38:04:41:25: ef:ab:5b:1c:53:92:ac:6d:9e:dd:c2:c4:2e:45:94: 03:35:88:67:74:57:e3:df:8c:b8:a7:76:8f:3b:f7: a8:c4:db:29:63:0e:91:68:36:8a:97:8e:8a:71:68: 09:07:e4:e8:d4:0e:4f:f8:d6:2b:4c:a4:16:f9:ef: 43:98:8f:b3:9e:52:df:6d:91:39:8f:38:bd:77:8b: 43:63:eb:b7:93:fc:30:4c:1c:01:93:b6:13:fb:f7: a1:1f:bf:25:e1:74:37:2c:1e:a4:5e:3c:68:f8:4b: bf:0d:b9:1e:2e:36:e8:a9:e4:a7:f8:0f:cb:82:75: 7c:35:2d:22:d6:c2:bf:0b:f3:b4:fc:6c:95:61:1e: 57:d7:04:81:32:83:52:79:e6:83:63:cf:b7:cb:63: 8b:11:e2:bd:5e:eb:f6:8d:ed:95:72:28:b4:ac:12: 62:e9:4a:33:e6:83:32:ae:05:75:95:bd:84:95:db: 2a:5c:9b:8e:2e:0c:b8:81:2b:41:e6:38:56:9f:49: 9b:6c:76:fa:8a:5d:f7:01:79:81:7c:c1:83:40:05: fe:71:fd:0c:3f:cc:4e:60:09:0e:65:47:10:2f:01: c0:05:3f:8f:f8:b3:41:ef:5a:42:7e:59:ef:d2:97: 0c:65 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 CRL Distribution Points: Full Name: URI:http://crl.pki.wellsfargo.com/wsprca.crl X509v3 Key Usage: critical Digital Signature, Non Repudiation, Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 26:95:19:10:D9:E8:A1:97:91:FF:DC:19:D9:B5:04:3E:D2:73:0A:6A X509v3 Authority Key Identifier: keyid:26:95:19:10:D9:E8:A1:97:91:FF:DC:19:D9:B5:04:3E:D2:73:0A:6A DirName:/C=US/O=Wells Fargo WellsSecure/OU=Wells Fargo Bank NA/CN=WellsSecure Public Root Certificate Authority serial:01 Signature Algorithm: sha1WithRSAEncryption b9:15:b1:44:91:cc:23:c8:2b:4d:77:e3:f8:9a:7b:27:0d:cd: 72:bb:99:00:ca:7c:66:19:50:c6:d5:98:ed:ab:bf:03:5a:e5: 4d:e5:1e:c8:4f:71:97:86:d5:e3:1d:fd:90:c9:3c:75:77:57: 7a:7d:f8:de:f4:d4:d5:f7:95:e6:74:6e:1d:3c:ae:7c:9d:db: 02:03:05:2c:71:4b:25:3e:07:e3:5e:9a:f5:66:17:29:88:1a: 38:9f:cf:aa:41:03:84:97:6b:93:38:7a:ca:30:44:1b:24:44: 33:d0:e4:d1:dc:28:38:f4:13:43:35:35:29:63:a8:7c:a2:b5: ad:38:a4:ed:ad:fd:c6:9a:1f:ff:97:73:fe:fb:b3:35:a7:93: 86:c6:76:91:00:e6:ac:51:16:c4:27:32:5c:db:73:da:a5:93: 57:8e:3e:6d:35:26:08:59:d5:e7:44:d7:76:20:63:e7:ac:13: 67:c3:6d:b1:70:46:7c:d5:96:11:3d:89:6f:5d:a8:a1:eb:8d: 0a:da:c3:1d:33:6c:a3:ea:67:19:9a:99:7f:4b:3d:83:51:2a: 1d:ca:2f:86:0c:a2:7e:10:2d:2b:d4:16:95:0b:07:aa:2e:14: 92:49:b7:29:6f:d8:6d:31:7d:f5:fc:a1:10:07:87:ce:2f:59: dc:3e:58:db SHA1 Fingerprint=E7:B4:F6:9D:61:EC:90:69:DB:7E:90:A7:40:1A:3C:F4:7D:4F:E8:EE -----BEGIN CERTIFICATE----- MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMx IDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxs cyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9v dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDcxMjEzMTcwNzU0WhcNMjIxMjE0 MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdl bGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQD DC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+r WxxTkqxtnt3CxC5FlAM1iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjU Dk/41itMpBb570OYj7OeUt9tkTmPOL13i0Nj67eT/DBMHAGTthP796EfvyXhdDcs HqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8bJVhHlfXBIEyg1J55oNj z7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiBK0HmOFaf SZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/Slwxl AgMBAAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqG KGh0dHA6Ly9jcmwucGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0P AQH/BAQDAgHGMB0GA1UdDgQWBBQmlRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0j BIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGBi6SBiDCBhTELMAkGA1UEBhMC VVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNX ZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEB ALkVsUSRzCPIK0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd /ZDJPHV3V3p9+N701NX3leZ0bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pB A4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSljqHyita04pO2t/caaH/+Xc/77szWn k4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+esE2fDbbFwRnzVlhE9 iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJtylv 2G0xffX8oRAHh84vWdw+WNs= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1f:47:af:aa:62:00:70:50:54:4c:01:9e:9b:63:99:2a Signature Algorithm: ecdsa-with-SHA384 Issuer: C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO ECC Certification Authority Validity Not Before: Mar 6 00:00:00 2008 GMT Not After : Jan 18 23:59:59 2038 GMT Subject: C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO ECC Certification Authority Subject Public Key Info: Public Key Algorithm: id-ecPublicKey Public-Key: (384 bit) pub: 04:03:47:7b:2f:75:c9:82:15:85:fb:75:e4:91:16: d4:ab:62:99:f5:3e:52:0b:06:ce:41:00:7f:97:e1: 0a:24:3c:1d:01:04:ee:3d:d2:8d:09:97:0c:e0:75: e4:fa:fb:77:8a:2a:f5:03:60:4b:36:8b:16:23:16: ad:09:71:f4:4a:f4:28:50:b4:fe:88:1c:6e:3f:6c: 2f:2f:09:59:5b:a5:5b:0b:33:99:e2:c3:3d:89:f9: 6a:2c:ef:b2:d3:06:e9 ASN1 OID: secp384r1 X509v3 extensions: X509v3 Subject Key Identifier: 75:71:A7:19:48:19:BC:9D:9D:EA:41:47:DF:94:C4:48:77:99:D3:79 X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: ecdsa-with-SHA384 30:65:02:31:00:ef:03:5b:7a:ac:b7:78:0a:72:b7:88:df:ff: b5:46:14:09:0a:fa:a0:e6:7d:08:c6:1a:87:bd:18:a8:73:bd: 26:ca:60:0c:9d:ce:99:9f:cf:5c:0f:30:e1:be:14:31:ea:02: 30:14:f4:93:3c:49:a7:33:7a:90:46:47:b3:63:7d:13:9b:4e: b7:6f:18:37:80:53:fe:dd:20:e0:35:9a:36:d1:c7:01:b9:e6: dc:dd:f3:ff:1d:2c:3a:16:57:d9:92:39:d6 SHA1 Fingerprint=9F:74:4E:9F:2B:4D:BA:EC:0F:31:2C:50:B6:56:3B:8E:2D:93:C3:11 -----BEGIN CERTIFICATE----- MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 66 (0x42) Signature Algorithm: md5WithRSAEncryption Issuer: C=US, O=Equifax Secure Inc., CN=Equifax Secure Global eBusiness CA-1 Validity Not Before: Jul 31 00:00:01 2004 GMT Not After : Sep 2 00:00:01 2004 GMT Subject: CN=MD5 Collisions Inc. (http://www.phreedom.org/md5) Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:ba:a6:59:c9:2c:28:d6:2a:b0:f8:ed:9f:46:a4: a4:37:ee:0e:19:68:59:d1:b3:03:99:51:d6:16:9a: 5e:37:6b:15:e0:0e:4b:f5:84:64:f8:a3:db:41:6f: 35:d5:9b:15:1f:db:c4:38:52:70:81:97:5e:8f:a0: b5:f7:7e:39:f0:32:ac:1e:ad:44:d2:b3:fa:48:c3: ce:91:9b:ec:f4:9c:7c:e1:5a:f5:c8:37:6b:9a:83: de:e7:ca:20:97:31:42:73:15:91:68:f4:88:af:f9: 28:28:c5:e9:0f:73:b0:17:4b:13:4c:99:75:d0:44: e6:7e:08:6c:1a:f2:4f:1b:41 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: Digital Signature, Non Repudiation, Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: A7:04:60:1F:AB:72:43:08:C5:7F:08:90:55:56:1C:D6:CE:E6:38:EB X509v3 Authority Key Identifier: keyid:BE:A8:A0:74:72:50:6B:44:B7:C9:23:D8:FB:A8:FF:B3:57:6B:68:6C Netscape Comment: 3 Signature Algorithm: md5WithRSAEncryption a7:21:02:8d:d1:0e:a2:80:77:25:fd:43:60:15:8f:ec:ef:90: 47:d4:84:42:15:26:11:1c:cd:c2:3c:10:29:a9:b6:df:ab:57: 75:91:da:e5:2b:b3:90:45:1c:30:63:56:3f:8a:d9:50:fa:ed: 58:6c:c0:65:ac:66:57:de:1c:c6:76:3b:f5:00:0e:8e:45:ce: 7f:4c:90:ec:2b:c6:cd:b3:b4:8f:62:d0:fe:b7:c5:26:72:44: ed:f6:98:5b:ae:cb:d1:95:f5:da:08:be:68:46:b1:75:c8:ec: 1d:8f:1e:7a:94:f1:aa:53:78:a2:45:ae:54:ea:d1:9e:74:c8: 76:67 SHA1 Fingerprint=64:23:13:7E:5C:53:D6:4A:A6:64:85:ED:36:54:F5:AB:05:5A:8B:8A -----BEGIN CERTIFICATE----- MIIEMjCCA5ugAwIBAgIBQjANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTA0MDczMTAwMDAwMVoXDTA0 MDkwMjAwMDAwMVowPDE6MDgGA1UEAxMxTUQ1IENvbGxpc2lvbnMgSW5jLiAoaHR0 cDovL3d3dy5waHJlZWRvbS5vcmcvbWQ1KTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw gYkCgYEAuqZZySwo1iqw+O2fRqSkN+4OGWhZ0bMDmVHWFppeN2sV4A5L9YRk+KPb QW811ZsVH9vEOFJwgZdej6C193458DKsHq1E0rP6SMPOkZvs9Jx84Vr1yDdrmoPe 58oglzFCcxWRaPSIr/koKMXpD3OwF0sTTJl10ETmfghsGvJPG0ECAwEAAaOCAiQw ggIgMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSnBGAf q3JDCMV/CJBVVhzWzuY46zAfBgNVHSMEGDAWgBS+qKB0clBrRLfJI9j7qP+zV2to bDCCAb4GCWCGSAGG+EIBDQSCAa8WggGrMwAAACdeOeCJYQ9Oo8VFCza7AdFTqsMI j2/4Tz6Hh0QR3GDg35JV+bhzG1STxZ/QRsRgtjVizbmvHKhpGslbPJY3wO1n77v+ wIucUC8pvYMino4I+qwTcKJYf2JiihH3ifbftmdZcxb7YxaKtJE4zi71tr5MpJRJ 5GURCkIVycEw4mnVRX2lJru5YexiZPA54ee8aNhQUZ4dYNPRo6cK+AMgoXABF5E2 TwJwMYaD3fcP2AcdEbMTBKXc8K5QsSgOY2kqDIJvj0cz32yiBpLxT0W+2TA2oyuM 1neuNWN/Tkyak0g22Z8CAwEAAaOBvTCBujAOBgNVHQ8BAf8EBAMCBPAwHQYDVR0O BBYEFM2mg/qlYDf3ljcXKd5BePGHiVXnMDsGA1UdHwQ0MDIwMKAuoCyGKmh0dHA6 Ly9jcmwuZ2VvdHJ1c3QuY29tL2NybHMvZ2xvYmFsY2ExLmNybDAfBgNVHSMEGDAW gBS+qKB0clBrRLfJI9j7qP+zV2tobDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB BQUHAwIwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQQFAAOBgQCnIQKN0Q6igHcl /UNgFY/s75BH1IRCFSYRHM3CPBApqbbfq1d1kdrlK7OQRRwwY1Y/itlQ+u1YbMBl rGZX3hzGdjv1AA6ORc5/TJDsK8bNs7SPYtD+t8UmckTt9phbrsvRlfXaCL5oRrF1 yOwdjx56lPGqU3iiRa5U6tGedMh2Zw== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 245102874772 (0x3911451094) Signature Algorithm: sha1WithRSAEncryption Issuer: C=FR, ST=France, L=Paris, O=PM/SGDN, OU=DCSSI, CN=IGC/A/emailAddress=igca@sgdn.pm.gouv.fr Validity Not Before: Dec 13 14:29:23 2002 GMT Not After : Oct 17 14:29:22 2020 GMT Subject: C=FR, ST=France, L=Paris, O=PM/SGDN, OU=DCSSI, CN=IGC/A/emailAddress=igca@sgdn.pm.gouv.fr Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:b2:1f:d1:d0:62:c5:33:3b:c0:04:86:88:b3:dc: f8:88:f7:fd:df:43:df:7a:8d:9a:49:5c:f6:4e:aa: cc:1c:b9:a1:eb:27:89:f2:46:e9:3b:4a:71:d5:1d: 8e:2d:cf:e6:ad:ab:63:50:c7:54:0b:6e:12:c9:90: 36:c6:d8:2f:da:91:aa:68:c5:72:fe:17:0a:b2:17: 7e:79:b5:32:88:70:ca:70:c0:96:4a:8e:e4:55:cd: 1d:27:94:bf:ce:72:2a:ec:5c:f9:73:20:fe:bd:f7: 2e:89:67:b8:bb:47:73:12:f7:d1:35:69:3a:f2:0a: b9:ae:ff:46:42:46:a2:bf:a1:85:1a:f9:bf:e4:ff: 49:85:f7:a3:70:86:32:1c:5d:9f:60:f7:a9:ad:a5: ff:cf:d1:34:f9:7d:5b:17:c6:dc:d6:0e:28:6b:c2: dd:f1:f5:33:68:9d:4e:fc:87:7c:36:12:d6:a3:80: e8:43:0d:55:61:94:ea:64:37:47:ea:77:ca:d0:b2: 58:05:c3:5d:7e:b1:a8:46:90:31:56:ce:70:2a:96: b2:30:b8:77:e6:79:c0:bd:29:3b:fd:94:77:4c:bd: 20:cd:41:25:e0:2e:c7:1b:bb:ee:a4:04:41:d2:5d: ad:12:6a:8a:9b:47:fb:c9:dd:46:40:e1:9d:3c:33: d0:b5 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: Non Repudiation, Certificate Sign, CRL Sign X509v3 Certificate Policies: Policy: 1.2.250.1.121.1.1.1 X509v3 Subject Key Identifier: A3:05:2F:18:60:50:C2:89:0A:DD:2B:21:4F:FF:8E:4E:A8:30:31:36 X509v3 Authority Key Identifier: keyid:A3:05:2F:18:60:50:C2:89:0A:DD:2B:21:4F:FF:8E:4E:A8:30:31:36 Signature Algorithm: sha1WithRSAEncryption 05:dc:26:d8:fa:77:15:44:68:fc:2f:66:3a:74:e0:5d:e4:29: ff:06:07:13:84:4a:ab:cf:6d:a0:1f:51:94:f8:49:cb:74:36: 14:bc:15:dd:db:89:2f:dd:8f:a0:5d:7c:f5:12:eb:9f:9e:38: a4:47:cc:b3:96:d9:be:9c:25:ab:03:7e:33:0f:95:81:0d:fd: 16:e0:88:be:37:f0:6c:5d:d0:31:9b:32:2b:5d:17:65:93:98: 60:bc:6e:8f:b1:a8:3c:1e:d9:1c:f3:a9:26:42:f9:64:1d:c2: e7:92:f6:f4:1e:5a:aa:19:52:5d:af:e8:a2:f7:60:a0:f6:8d: f0:89:f5:6e:e0:0a:05:01:95:c9:8b:20:0a:ba:5a:fc:9a:2c: 3c:bd:c3:b7:c9:5d:78:25:05:3f:56:14:9b:0c:da:fb:3a:48: fe:97:69:5e:ca:10:86:f7:4e:96:04:08:4d:ec:b0:be:5d:dc: 3b:8e:4f:c1:fd:9a:36:34:9a:4c:54:7e:17:03:48:95:08:11: 1c:07:6f:85:08:7e:5d:4d:c4:9d:db:fb:ae:ce:b2:d1:b3:b8: 83:6c:1d:b2:b3:79:f1:d8:70:99:7e:f0:13:02:ce:5e:dd:51: d3:df:36:81:a1:1b:78:2f:71:b3:f1:59:4c:46:18:28:ab:85: d2:60:56:5a SHA1 Fingerprint=60:D6:89:74:B5:C2:65:9E:8A:0F:C1:88:7C:88:D2:46:69:1B:18:2C -----BEGIN CERTIFICATE----- MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYT AkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQ TS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG 9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMB4XDTAyMTIxMzE0MjkyM1oXDTIw MTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAM BgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEO MAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2 LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaI s9z4iPf930Pfeo2aSVz2TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2 xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCWSo7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4 u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYyHF2fYPepraX/z9E0+X1b F8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNdfrGoRpAx Vs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGd PDPQtQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNV HSAEDjAMMAoGCCqBegF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAx NjAfBgNVHSMEGDAWgBSjBS8YYFDCiQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUF AAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RKq89toB9RlPhJy3Q2FLwV3duJ L92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3QMZsyK10XZZOY YLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2a NjSaTFR+FwNIlQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R 0982gaEbeC9xs/FZTEYYKKuF0mBWWg== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: sha1WithRSAEncryption Issuer: C=JP, O=SECOM Trust Systems CO.,LTD., OU=Security Communication EV RootCA1 Validity Not Before: Jun 6 02:12:32 2007 GMT Not After : Jun 6 02:12:32 2037 GMT Subject: C=JP, O=SECOM Trust Systems CO.,LTD., OU=Security Communication EV RootCA1 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:bc:7f:ec:57:9b:24:e0:fe:9c:ba:42:79:a9:88: 8a:fa:80:e0:f5:07:29:43:ea:8e:0a:34:36:8d:1c: fa:a7:b5:39:78:ff:97:75:f7:2f:e4:aa:6b:04:84: 44:ca:a6:e2:68:8e:fd:55:50:62:0f:a4:71:0e:ce: 07:38:2d:42:85:50:ad:3c:96:6f:8b:d5:a2:0e:cf: de:49:89:3d:d6:64:2e:38:e5:1e:6c:b5:57:8a:9e: ef:48:0e:cd:7a:69:16:87:44:b5:90:e4:06:9d:ae: a1:04:97:58:79:ef:20:4a:82:6b:8c:22:bf:ec:1f: 0f:e9:84:71:ed:f1:0e:e4:b8:18:13:cc:56:36:5d: d1:9a:1e:51:6b:39:6e:60:76:88:34:0b:f3:b3:d1: b0:9d:ca:61:e2:64:1d:c1:46:07:b8:63:dd:1e:33: 65:b3:8e:09:55:52:3d:b5:bd:ff:07:eb:ad:61:55: 18:2c:a9:69:98:4a:aa:40:c5:33:14:65:74:00:f9: 91:de:af:03:48:c5:40:54:dc:0f:84:90:68:20:c5: 92:96:dc:2e:e5:02:45:aa:c0:5f:54:f8:6d:ea:49: cf:5d:6c:4b:af:ef:9a:c2:56:5c:c6:35:56:42:6a: 30:5f:c2:ab:f6:e2:3d:3f:b3:c9:11:8f:31:4c:d7: 9f:49 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: 35:4A:F5:4D:AF:3F:D7:82:38:AC:AB:71:65:17:75:8C:9D:55:93:E6 X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: sha1WithRSAEncryption a8:87:e9:ec:f8:40:67:5d:c3:c1:66:c7:40:4b:97:fc:87:13: 90:5a:c4:ef:a0:ca:5f:8b:b7:a7:b7:f1:d6:b5:64:b7:8a:b3: b8:1b:cc:da:fb:ac:66:88:41:ce:e8:fc:e4:db:1e:88:a6:ed: 27:50:1b:02:30:24:46:79:fe:04:87:70:97:40:73:d1:c0:c1: 57:19:9a:69:a5:27:99:ab:9d:62:84:f6:51:c1:2c:c9:23:15: d8:28:b7:ab:25:13:b5:46:e1:86:02:ff:26:8c:c4:88:92:1d: 56:fe:19:67:f2:55:e4:80:a3:6b:9c:ab:77:e1:51:71:0d:20: db:10:9a:db:bd:76:79:07:77:99:28:ad:9a:5e:da:b1:4f:44: 2c:35:8e:a5:96:c7:fd:83:f0:58:c6:79:d6:98:7c:a8:8d:fe: 86:3e:07:16:92:e1:7b:e7:1d:ec:33:76:7e:42:2e:4a:85:f9: 91:89:68:84:03:81:a5:9b:9a:be:e3:37:c5:54:ab:56:3b:18: 2d:41:a4:0c:f8:42:db:99:a0:e0:72:6f:bb:5d:e1:16:4f:53: 0a:64:f9:4e:f4:bf:4e:54:bd:78:6c:88:ea:bf:9c:13:24:c2: 70:69:a2:7f:0f:c8:3c:ad:08:c9:b0:98:40:a3:2a:e7:88:83: ed:77:8f:74 SHA1 Fingerprint=FE:B8:C4:32:DC:F9:76:9A:CE:AE:3D:D8:90:8F:FD:28:86:65:64:7D -----BEGIN CERTIFICATE----- MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDEl MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMh U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIz MloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09N IFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNlY3VyaXR5IENvbW11 bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC ggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSE RMqm4miO/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gO zXppFodEtZDkBp2uoQSXWHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5 bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4zZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDF MxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4bepJz11sS6/vmsJWXMY1 VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK9U2vP9eC OKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G CSqGSIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HW tWS3irO4G8za+6xmiEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZ q51ihPZRwSzJIxXYKLerJRO1RuGGAv8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDb EJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnWmHyojf6GPgcWkuF75x3sM3Z+ Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEWT1MKZPlO9L9O VL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490 -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 41:3d:72:c7:f4:6b:1f:81:43:7d:f1:d2:28:54:df:9a Signature Algorithm: sha1WithRSAEncryption Issuer: C=CH, O=WISeKey, OU=Copyright (c) 2005, OU=OISTE Foundation Endorsed, CN=OISTE WISeKey Global Root GA CA Validity Not Before: Dec 11 16:03:44 2005 GMT Not After : Dec 11 16:09:51 2037 GMT Subject: C=CH, O=WISeKey, OU=Copyright (c) 2005, OU=OISTE Foundation Endorsed, CN=OISTE WISeKey Global Root GA CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:cb:4f:b3:00:9b:3d:36:dd:f9:d1:49:6a:6b:10: 49:1f:ec:d8:2b:b2:c6:f8:32:81:29:43:95:4c:9a: 19:23:21:15:45:de:e3:c8:1c:51:55:5b:ae:93:e8: 37:ff:2b:6b:e9:d4:ea:be:2a:dd:a8:51:2b:d7:66: c3:61:5c:60:02:c8:f5:ce:72:7b:3b:b8:f2:4e:65: 08:9a:cd:a4:6a:19:c1:01:bb:73:a6:d7:f6:c3:dd: cd:bc:a4:8b:b5:99:61:b8:01:a2:a3:d4:4d:d4:05: 3d:91:ad:f8:b4:08:71:64:af:70:f1:1c:6b:7e:f6: c3:77:9d:24:73:7b:e4:0c:8c:e1:d9:36:e1:99:8b: 05:99:0b:ed:45:31:09:ca:c2:00:db:f7:72:a0:96: aa:95:87:d0:8e:c7:b6:61:73:0d:76:66:8c:dc:1b: b4:63:a2:9f:7f:93:13:30:f1:a1:27:db:d9:ff:2c: 55:88:91:a0:e0:4f:07:b0:28:56:8c:18:1b:97:44: 8e:89:dd:e0:17:6e:e7:2a:ef:8f:39:0a:31:84:82: d8:40:14:49:2e:7a:41:e4:a7:fe:e3:64:cc:c1:59: 71:4b:2c:21:a7:5b:7d:e0:1d:d1:2e:81:9b:c3:d8: 68:f7:bd:96:1b:ac:70:b1:16:14:0b:db:60:b9:26: 01:05 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: Digital Signature, Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: B3:03:7E:AE:36:BC:B0:79:D1:DC:94:26:B6:11:BE:21:B2:69:86:94 1.3.6.1.4.1.311.21.1: ... Signature Algorithm: sha1WithRSAEncryption 4b:a1:ff:0b:87:6e:b3:f9:c1:43:b1:48:f3:28:c0:1d:2e:c9: 09:41:fa:94:00:1c:a4:a4:ab:49:4f:8f:3d:1e:ef:4d:6f:bd: bc:a4:f6:f2:26:30:c9:10:ca:1d:88:fb:74:19:1f:85:45:bd: b0:6c:51:f9:36:7e:db:f5:4c:32:3a:41:4f:5b:47:cf:e8:0b: 2d:b6:c4:19:9d:74:c5:47:c6:3b:6a:0f:ac:14:db:3c:f4:73: 9c:a9:05:df:00:dc:74:78:fa:f8:35:60:59:02:13:18:7c:bc: fb:4d:b0:20:6d:43:bb:60:30:7a:67:33:5c:c5:99:d1:f8:2d: 39:52:73:fb:8c:aa:97:25:5c:72:d9:08:1e:ab:4e:3c:e3:81: 31:9f:03:a6:fb:c0:fe:29:88:55:da:84:d5:50:03:b6:e2:84: a3:a6:36:aa:11:3a:01:e1:18:4b:d6:44:68:b3:3d:f9:53:74: 84:b3:46:91:46:96:00:b7:80:2c:b6:e1:e3:10:e2:db:a2:e7: 28:8f:01:96:62:16:3e:00:e3:1c:a5:36:81:18:a2:4c:52:76: c0:11:a3:6e:e6:1d:ba:e3:5a:be:36:53:c5:3e:75:8f:86:69: 29:58:53:b5:9c:bb:6f:9f:5c:c5:18:ec:dd:2f:e1:98:c9:fc: be:df:0a:0d SHA1 Fingerprint=59:22:A1:E1:5A:EA:16:35:21:F8:98:39:6A:46:46:B0:44:1B:0F:A9 -----BEGIN CERTIFICATE----- MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2 w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg 4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9 4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2 ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8 vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ /L7fCg0= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 37:19:18:e6:53:54:7c:1a:b5:b8:cb:59:5a:db:35:b7 Signature Algorithm: sha1WithRSAEncryption Issuer: C=DE, ST=Baden-Wuerttemberg (BW), L=Stuttgart, O=Deutscher Sparkassen Verlag GmbH, CN=S-TRUST Authentication and Encryption Root CA 2005:PN Validity Not Before: Jun 22 00:00:00 2005 GMT Not After : Jun 21 23:59:59 2030 GMT Subject: C=DE, ST=Baden-Wuerttemberg (BW), L=Stuttgart, O=Deutscher Sparkassen Verlag GmbH, CN=S-TRUST Authentication and Encryption Root CA 2005:PN Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:d9:b5:4a:c1:d3:33:ea:d3:46:b3:d1:e2:4c:d2: f5:b6:83:d0:6f:d5:18:e9:93:af:27:8e:13:cd:b5: 25:36:50:34:12:64:29:a1:55:e1:3a:60:93:9e:28: c9:e3:f3:9b:e1:04:b0:23:bf:95:8a:8e:5b:1b:41: 7f:5a:c3:e8:4d:4c:d5:24:16:3e:87:48:d4:27:ae: e6:f7:53:1d:bb:0c:00:ef:3e:61:71:ad:bf:3a:7a: 58:1f:94:3d:5c:81:d5:d5:6f:df:b8:9b:d2:f5:e5: cb:83:72:92:c2:53:b2:82:02:eb:ad:ad:5f:16:2d: 92:53:76:f1:89:b6:2c:f5:c1:2f:e0:a7:4a:6f:a0: 30:6a:32:eb:9a:74:03:68:78:13:9d:ca:2f:9b:0b: 1d:be:cf:75:0d:26:97:9b:c7:f5:5e:0a:9f:78:df: b3:bc:ec:9a:ba:ef:55:8f:1b:9a:a6:07:63:29:17: 59:62:09:2a:79:07:77:a5:e0:d1:17:69:e9:5b:dd: f6:90:ab:e2:98:0a:00:d1:25:6d:9e:d7:85:87:2f: 92:f1:d1:76:83:4f:0b:3a:59:37:28:2f:33:a7:17: 50:d6:20:0b:0a:f4:26:f9:9f:38:e7:2d:a4:b8:9b: 89:8d:ad:ad:c9:6a:7d:89:17:bb:f6:7f:80:83:7a: e6:ed Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE, pathlen:0 X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Alternative Name: DirName:/CN=STRonline1-2048-5 X509v3 Subject Key Identifier: 0F:CA:1E:5C:79:E0:A2:F3:29:B6:D2:85:B3:0B:4A:B5:65:EC:6B:52 X509v3 Authority Key Identifier: keyid:0F:CA:1E:5C:79:E0:A2:F3:29:B6:D2:85:B3:0B:4A:B5:65:EC:6B:52 Signature Algorithm: sha1WithRSAEncryption af:01:f0:ed:19:3c:28:e8:4d:5c:bb:a5:63:1c:88:33:03:a7: 00:87:a4:1f:20:ab:d6:1c:e3:06:1f:97:7e:54:bd:b7:d1:b2: c9:d5:da:80:ec:17:d7:8a:f5:7b:c2:00:f6:e9:11:6f:84:a0: 5a:25:31:e2:89:f9:a4:00:3f:31:68:2e:d5:3d:e8:6e:e6:d5: 1d:3c:3f:b2:bd:9f:77:eb:9d:d3:8c:ba:c0:d7:b6:4d:ec:53: 9c:0f:04:6e:ea:35:67:57:e3:0a:65:7b:90:3a:e1:4f:3e:c3: 00:92:7a:bb:05:89:73:8c:cb:a6:4d:c0:fb:f6:02:d6:b0:07: a3:03:c2:27:40:9f:0c:e4:85:82:2d:af:9a:42:1d:d0:c7:8d: f8:40:ee:9d:06:57:1c:d9:a2:d8:80:14:fe:e1:63:2d:32:87: d5:94:52:96:3a:46:c6:71:96:3d:f7:98:0e:b2:91:aa:8f:da: f4:4e:24:00:39:55:e8:ad:17:b9:d3:34:2b:4a:a9:40:cc:17: 2a:55:65:41:74:42:7e:f5:c0:af:c8:93:ad:f2:18:5b:3d:89: 0c:db:47:39:24:f8:e0:4c:f2:1f:b0:3d:0a:ca:05:4e:89:21: 1a:e3:2a:99:ac:fc:7f:a1:f1:0f:1b:1f:3d:9e:04:83:dd:96: d9:1d:3a:94 SHA1 Fingerprint=BE:B5:A9:95:74:6B:9E:DF:73:8B:56:E6:DF:43:7A:77:BE:10:6B:81 -----BEGIN CERTIFICATE----- MIIEezCCA2OgAwIBAgIQNxkY5lNUfBq1uMtZWts1tzANBgkqhkiG9w0BAQUFADCB rjELMAkGA1UEBhMCREUxIDAeBgNVBAgTF0JhZGVuLVd1ZXJ0dGVtYmVyZyAoQlcp MRIwEAYDVQQHEwlTdHV0dGdhcnQxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fz c2VuIFZlcmxhZyBHbWJIMT4wPAYDVQQDEzVTLVRSVVNUIEF1dGhlbnRpY2F0aW9u IGFuZCBFbmNyeXB0aW9uIFJvb3QgQ0EgMjAwNTpQTjAeFw0wNTA2MjIwMDAwMDBa Fw0zMDA2MjEyMzU5NTlaMIGuMQswCQYDVQQGEwJERTEgMB4GA1UECBMXQmFkZW4t V3VlcnR0ZW1iZXJnIChCVykxEjAQBgNVBAcTCVN0dXR0Z2FydDEpMCcGA1UEChMg RGV1dHNjaGVyIFNwYXJrYXNzZW4gVmVybGFnIEdtYkgxPjA8BgNVBAMTNVMtVFJV U1QgQXV0aGVudGljYXRpb24gYW5kIEVuY3J5cHRpb24gUm9vdCBDQSAyMDA1OlBO MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2bVKwdMz6tNGs9HiTNL1 toPQb9UY6ZOvJ44TzbUlNlA0EmQpoVXhOmCTnijJ4/Ob4QSwI7+Vio5bG0F/WsPo TUzVJBY+h0jUJ67m91MduwwA7z5hca2/OnpYH5Q9XIHV1W/fuJvS9eXLg3KSwlOy ggLrra1fFi2SU3bxibYs9cEv4KdKb6AwajLrmnQDaHgTncovmwsdvs91DSaXm8f1 XgqfeN+zvOyauu9VjxuapgdjKRdZYgkqeQd3peDRF2npW932kKvimAoA0SVtnteF hy+S8dF2g08LOlk3KC8zpxdQ1iALCvQm+Z845y2kuJuJja2tyWp9iRe79n+Ag3rm 7QIDAQABo4GSMIGPMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEG MCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFTVFJvbmxpbmUxLTIwNDgtNTAdBgNV HQ4EFgQUD8oeXHngovMpttKFswtKtWXsa1IwHwYDVR0jBBgwFoAUD8oeXHngovMp ttKFswtKtWXsa1IwDQYJKoZIhvcNAQEFBQADggEBAK8B8O0ZPCjoTVy7pWMciDMD pwCHpB8gq9Yc4wYfl35UvbfRssnV2oDsF9eK9XvCAPbpEW+EoFolMeKJ+aQAPzFo LtU96G7m1R08P7K9n3frndOMusDXtk3sU5wPBG7qNWdX4wple5A64U8+wwCSersF iXOMy6ZNwPv2AtawB6MDwidAnwzkhYItr5pCHdDHjfhA7p0GVxzZotiAFP7hYy0y h9WUUpY6RsZxlj33mA6ykaqP2vROJAA5VeitF7nTNCtKqUDMFypVZUF0Qn71wK/I k63yGFs9iQzbRzkk+OBM8h+wPQrKBU6JIRrjKpms/H+h8Q8bHz2eBIPdltkdOpQ= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: cc:b8:e7:bf:4e:29:1a:fd:a2:dc:66:a5:1c:2c:0f:11 Signature Algorithm: sha1WithRSAEncryption Issuer: C=HU, L=Budapest, O=Microsec Ltd., OU=e-Szigno CA, CN=Microsec e-Szigno Root CA Validity Not Before: Apr 6 12:28:44 2005 GMT Not After : Apr 6 12:28:44 2017 GMT Subject: C=HU, L=Budapest, O=Microsec Ltd., OU=e-Szigno CA, CN=Microsec e-Szigno Root CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:ed:c8:00:d5:81:7b:cd:38:00:47:cc:db:84:c1: 21:69:2c:74:90:0c:21:d9:53:87:ed:3e:43:44:53: af:ab:f8:80:9b:3c:78:8d:d4:8d:ae:b8:ef:d3:11: dc:81:e6:cf:3b:96:8c:d6:6f:15:c6:77:7e:a1:2f: e0:5f:92:b6:27:d7:76:9a:1d:43:3c:ea:d9:ec:2f: ee:39:f3:6a:67:4b:8b:82:cf:22:f8:65:55:fe:2c: cb:2f:7d:48:7a:3d:75:f9:aa:a0:27:bb:78:c2:06: ca:51:c2:7e:66:4b:af:cd:a2:a7:4d:02:82:3f:82: ac:85:c6:e1:0f:90:47:99:94:0a:71:72:93:2a:c9: a6:c0:be:3c:56:4c:73:92:27:f1:6b:b5:f5:fd:fc: 30:05:60:92:c6:eb:96:7e:01:91:c2:69:b1:1e:1d: 7b:53:45:b8:dc:41:1f:c9:8b:71:d6:54:14:e3:8b: 54:78:3f:be:f4:62:3b:5b:f5:a3:ec:d5:92:74:e2: 74:30:ef:01:db:e1:d4:ab:99:9b:2a:6b:f8:bd:a6: 1c:86:23:42:5f:ec:49:de:9a:8b:5b:f4:72:3a:40: c5:49:3e:a5:be:8e:aa:71:eb:6c:fa:f5:1a:e4:6a: fd:7b:7d:55:40:ef:58:6e:e6:d9:d5:bc:24:ab:c1: ef:b7 Exponent: 65537 (0x10001) X509v3 extensions: Authority Information Access: OCSP - URI:https://rca.e-szigno.hu/ocsp CA Issuers - URI:http://www.e-szigno.hu/RootCA.crt X509v3 Basic Constraints: critical CA:TRUE X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.21528.2.1.1.1 CPS: http://www.e-szigno.hu/SZSZ/ User Notice: Explicit Text: X509v3 CRL Distribution Points: Full Name: URI:http://www.e-szigno.hu/RootCA.crl URI:ldap://ldap.e-szigno.hu/CN=Microsec%20e-Szigno%20Root%20CA,OU=e-Szigno%20CA,O=Microsec%20Ltd.,L=Budapest,C=HU?certificateRevocationList;binary X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Alternative Name: email:info@e-szigno.hu, DirName:/CN=Microsec e-Szign\xC3\xB3 Root CA/OU=e-Szign\xC3\xB3 HSZ/O=Microsec Kft./L=Budapest/C=HU X509v3 Authority Key Identifier: keyid:C7:A0:49:75:16:61:84:DB:31:4B:84:D2:F1:37:40:90:EF:4E:DC:F7 DirName:/C=HU/L=Budapest/O=Microsec Ltd./OU=e-Szigno CA/CN=Microsec e-Szigno Root CA serial:CC:B8:E7:BF:4E:29:1A:FD:A2:DC:66:A5:1C:2C:0F:11 X509v3 Subject Key Identifier: C7:A0:49:75:16:61:84:DB:31:4B:84:D2:F1:37:40:90:EF:4E:DC:F7 Signature Algorithm: sha1WithRSAEncryption d3:13:9c:66:63:59:2e:ca:5c:70:0c:fc:83:bc:55:b1:f4:8e: 07:6c:66:27:ce:c1:3b:20:a9:1c:bb:46:54:70:ee:5a:cc:a0: 77:ea:68:44:27:eb:f2:29:dd:77:a9:d5:fb:e3:d4:a7:04:c4: 95:b8:0b:e1:44:68:60:07:43:30:31:42:61:e5:ee:d9:e5:24: d5:1b:df:e1:4a:1b:aa:9f:c7:5f:f8:7a:11:ea:13:93:00:ca: 8a:58:b1:ee:ed:0e:4d:b4:d7:a8:36:26:7c:e0:3a:c1:d5:57: 82:f1:75:b6:fd:89:5f:da:f3:a8:38:9f:35:06:08:ce:22:95: be:cd:d5:fc:be:5b:de:79:6b:dc:7a:a9:65:66:be:b1:25:5a: 5f:ed:7e:d3:ac:46:6d:4c:f4:32:87:b4:20:04:e0:6c:78:b0: 77:d1:85:46:4b:a6:12:b7:75:e8:4a:c9:56:6c:d7:92:ab:9d: f5:49:38:d2:4f:53:e3:55:90:11:db:98:96:c6:49:f2:3e:f4: 9f:1b:e0:f7:88:dc:25:62:99:44:d8:73:bf:3f:30:f3:0c:37: 3e:d4:c2:28:80:73:b1:01:b7:9d:5a:96:14:01:4b:a9:11:9d: 29:6a:2e:d0:5d:81:c0:cf:b2:20:43:c7:03:e0:37:4e:5d:0a: dc:59:20:25 SHA1 Fingerprint=23:88:C9:D3:71:CC:9E:96:3D:FF:7D:3C:A7:CE:FC:D6:25:EC:19:0D -----BEGIN CERTIFICATE----- MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAw cjELMAkGA1UEBhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNy b3NlYyBMdGQuMRQwEgYDVQQLEwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9z ZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0MDYxMjI4NDRaFw0xNzA0MDYxMjI4 NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEWMBQGA1UEChMN TWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMTGU1p Y3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw ggEKAoIBAQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2u uO/TEdyB5s87lozWbxXGd36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+ LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/NoqdNAoI/gqyFxuEPkEeZlApxcpMqyabA vjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjcQR/Ji3HWVBTji1R4P770 Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJPqW+jqpx 62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcB AQRbMFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3Aw LQYIKwYBBQUHMAKGIWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAP BgNVHRMBAf8EBTADAQH/MIIBcwYDVR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIB AQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3LmUtc3ppZ25vLmh1L1NaU1ov MIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0AdAB2AOEAbgB5 ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABT AHoAbwBsAGcA4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABh ACAAcwB6AGUAcgBpAG4AdAAgAGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABo AHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMAegBpAGcAbgBvAC4AaAB1AC8AUwBa AFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6Ly93d3cuZS1zemln bm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NOPU1p Y3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxP PU1pY3Jvc2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZv Y2F0aW9uTGlzdDtiaW5hcnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuB EGluZm9AZS1zemlnbm8uaHWkdzB1MSMwIQYDVQQDDBpNaWNyb3NlYyBlLVN6aWdu w7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhTWjEWMBQGA1UEChMNTWlj cm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhVMIGsBgNV HSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJI VTERMA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDAS BgNVBAsTC2UtU3ppZ25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBS b290IENBghEAzLjnv04pGv2i3GalHCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS 8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMTnGZjWS7KXHAM/IO8VbH0jgds ZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FEaGAHQzAxQmHl 7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a 86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfR hUZLphK3dehKyVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/ MPMMNz7UwiiAc7EBt51alhQBS6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 18364802974209362175 (0xfedce3010fc948ff) Signature Algorithm: sha1WithRSAEncryption Issuer: C=FR, O=Dhimyotis, CN=Certigna Validity Not Before: Jun 29 15:13:05 2007 GMT Not After : Jun 29 15:13:05 2027 GMT Subject: C=FR, O=Dhimyotis, CN=Certigna Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:c8:68:f1:c9:d6:d6:b3:34:75:26:82:1e:ec:b4: be:ea:5c:e1:26:ed:11:47:61:e1:a2:7c:16:78:40: 21:e4:60:9e:5a:c8:63:e1:c4:b1:96:92:ff:18:6d: 69:23:e1:2b:62:f7:dd:e2:36:2f:91:07:b9:48:cf: 0e:ec:79:b6:2c:e7:34:4b:70:08:25:a3:3c:87:1b: 19:f2:81:07:0f:38:90:19:d3:11:fe:86:b4:f2:d1: 5e:1e:1e:96:cd:80:6c:ce:3b:31:93:b6:f2:a0:d0: a9:95:12:7d:a5:9a:cc:6b:c8:84:56:8a:33:a9:e7: 22:15:53:16:f0:cc:17:ec:57:5f:e9:a2:0a:98:09: de:e3:5f:9c:6f:dc:48:e3:85:0b:15:5a:a6:ba:9f: ac:48:e3:09:b2:f7:f4:32:de:5e:34:be:1c:78:5d: 42:5b:ce:0e:22:8f:4d:90:d7:7d:32:18:b3:0b:2c: 6a:bf:8e:3f:14:11:89:20:0e:77:14:b5:3d:94:08: 87:f7:25:1e:d5:b2:60:00:ec:6f:2a:28:25:6e:2a: 3e:18:63:17:25:3f:3e:44:20:16:f6:26:c8:25:ae: 05:4a:b4:e7:63:2c:f3:8c:16:53:7e:5c:fb:11:1a: 08:c1:46:62:9f:22:b8:f1:c2:8d:69:dc:fa:3a:58: 06:df Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 1A:ED:FE:41:39:90:B4:24:59:BE:01:F2:52:D5:45:F6:5A:39:DC:11 X509v3 Authority Key Identifier: keyid:1A:ED:FE:41:39:90:B4:24:59:BE:01:F2:52:D5:45:F6:5A:39:DC:11 DirName:/C=FR/O=Dhimyotis/CN=Certigna serial:FE:DC:E3:01:0F:C9:48:FF X509v3 Key Usage: critical Certificate Sign, CRL Sign Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA Signature Algorithm: sha1WithRSAEncryption 85:03:1e:92:71:f6:42:af:e1:a3:61:9e:eb:f3:c0:0f:f2:a5: d4:da:95:e6:d6:be:68:36:3d:7e:6e:1f:4c:8a:ef:d1:0f:21: 6d:5e:a5:52:63:ce:12:f8:ef:2a:da:6f:eb:37:fe:13:02:c7: cb:3b:3e:22:6b:da:61:2e:7f:d4:72:3d:dd:30:e1:1e:4c:40: 19:8c:0f:d7:9c:d1:83:30:7b:98:59:dc:7d:c6:b9:0c:29:4c: a1:33:a2:eb:67:3a:65:84:d3:96:e2:ed:76:45:70:8f:b5:2b: de:f9:23:d6:49:6e:3c:14:b5:c6:9f:35:1e:50:d0:c1:8f:6a: 70:44:02:62:cb:ae:1d:68:41:a7:aa:57:e8:53:aa:07:d2:06: f6:d5:14:06:0b:91:03:75:2c:6c:72:b5:61:95:9a:0d:8b:b9: 0d:e7:f5:df:54:cd:de:e6:d8:d6:09:08:97:63:e5:c1:2e:b0: b7:44:26:c0:26:c0:af:55:30:9e:3b:d5:36:2a:19:04:f4:5c: 1e:ff:cf:2c:b7:ff:d0:fd:87:40:11:d5:11:23:bb:48:c0:21: a9:a4:28:2d:fd:15:f8:b0:4e:2b:f4:30:5b:21:fc:11:91:34: be:41:ef:7b:9d:97:75:ff:97:95:c0:96:58:2f:ea:bb:46:d7: bb:e4:d9:2e SHA1 Fingerprint=B1:2E:13:63:45:86:A4:6F:1A:B2:60:68:37:58:2D:C4:AC:FD:94:97 -----BEGIN CERTIFICATE----- MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q 130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG 9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 07:7e:52:93:7b:e0:15:e3:57:f0:69:8c:cb:ec:0c Signature Algorithm: sha1WithRSAEncryption Issuer: C=CO, O=Sociedad Cameral de Certificaci\xC3\xB3n Digital - Certic\xC3\xA1mara S.A., CN=AC Ra\xC3\xADz Certic\xC3\xA1mara S.A. Validity Not Before: Nov 27 20:46:29 2006 GMT Not After : Apr 2 21:42:02 2030 GMT Subject: C=CO, O=Sociedad Cameral de Certificaci\xC3\xB3n Digital - Certic\xC3\xA1mara S.A., CN=AC Ra\xC3\xADz Certic\xC3\xA1mara S.A. Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:ab:6b:89:a3:53:cc:48:23:08:fb:c3:cf:51:96: 08:2e:b8:08:7a:6d:3c:90:17:86:a9:e9:ed:2e:13: 34:47:b2:d0:70:dc:c9:3c:d0:8d:ca:ee:4b:17:ab: d0:85:b0:a7:23:04:cb:a8:a2:fc:e5:75:db:40:ca: 62:89:8f:50:9e:01:3d:26:5b:18:84:1c:cb:7c:37: b7:7d:ec:d3:7f:73:19:b0:6a:b2:d8:88:8a:2d:45: 74:a8:f7:b3:b8:c0:d4:da:cd:22:89:74:4d:5a:15: 39:73:18:74:4f:b5:eb:99:a7:c1:1e:88:b4:c2:93: 90:63:97:f3:a7:a7:12:b2:09:22:07:33:d9:91:cd: 0e:9c:1f:0e:20:c7:ee:bb:33:8d:8f:c2:d2:58:a7: 5f:fd:65:37:e2:88:c2:d8:8f:86:75:5e:f9:2d:a7: 87:33:f2:78:37:2f:8b:bc:1d:86:37:39:b1:94:f2: d8:bc:4a:9c:83:18:5a:06:fc:f3:d4:d4:ba:8c:15: 09:25:f0:f9:b6:8d:04:7e:17:12:33:6b:57:48:4c: 4f:db:26:1e:eb:cc:90:e7:8b:f9:68:7c:70:0f:a3: 2a:d0:3a:38:df:37:97:e2:5b:de:80:61:d3:80:d8: 91:83:42:5a:4c:04:89:68:11:3c:ac:5f:68:80:41: cc:60:42:ce:0d:5a:2a:0c:0f:9b:30:c0:a6:f0:86: db:ab:49:d7:97:6d:48:8b:f9:03:c0:52:67:9b:12: f7:c2:f2:2e:98:65:42:d9:d6:9a:e3:d0:19:31:0c: ad:87:d5:57:02:7a:30:e8:86:26:fb:8f:23:8a:54: 87:e4:bf:3c:ee:eb:c3:75:48:5f:1e:39:6f:81:62: 6c:c5:2d:c4:17:54:19:b7:37:8d:9c:37:91:c8:f6: 0b:d5:ea:63:6f:83:ac:38:c2:f3:3f:de:9a:fb:e1: 23:61:f0:c8:26:cb:36:c8:a1:f3:30:8f:a4:a3:a2: a1:dd:53:b3:de:f0:9a:32:1f:83:91:79:30:c1:a9: 1f:53:9b:53:a2:15:53:3f:dd:9d:b3:10:3b:48:7d: 89:0f:fc:ed:03:f5:fb:25:64:75:0e:17:19:0d:8f: 00:16:67:79:7a:40:fc:2d:59:07:d9:90:fa:9a:ad: 3d:dc:80:8a:e6:5c:35:a2:67:4c:11:6b:b1:f8:80: 64:00:2d:6f:22:61:c5:ac:4b:26:e5:5a:10:82:9b: a4:83:7b:34:f7:9e:89:91:20:97:8e:b7:42:c7:66: c3:d0:e9:a4:d6:f5:20:8d:c4:c3:95:ac:44:0a:9d: 5b:73:3c:26:3d:2f:4a:be:a7:c9:a7:10:1e:fb:9f: 50:69:f3 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: D1:09:D0:E9:D7:CE:79:74:54:F9:3A:30:B3:F4:6D:2C:03:03:1B:68 X509v3 Certificate Policies: Policy: X509v3 Any Policy CPS: http://www.certicamara.com/dpc/ User Notice: Explicit Text: Limitaciones de garantías de este certificado se pueden encontrar en la DPC. Signature Algorithm: sha1WithRSAEncryption 5c:94:b5:b8:45:91:4d:8e:61:1f:03:28:0f:53:7c:e6:a4:59: a9:b3:8a:7a:c5:b0:ff:08:7c:2c:a3:71:1c:21:13:67:a1:95: 12:40:35:83:83:8f:74:db:33:5c:f0:49:76:0a:81:52:dd:49: d4:9a:32:33:ef:9b:a7:cb:75:e5:7a:cb:97:12:90:5c:ba:7b: c5:9b:df:bb:39:23:c8:ff:98:ce:0a:4d:22:01:48:07:7e:8a: c0:d5:20:42:94:44:ef:bf:77:a2:89:67:48:1b:40:03:05:a1: 89:ec:cf:62:e3:3d:25:76:66:bf:26:b7:bb:22:be:6f:ff:39: 57:74:ba:7a:c9:01:95:c1:95:51:e8:ab:2c:f8:b1:86:20:e9: 3f:cb:35:5b:d2:17:e9:2a:fe:83:13:17:40:ee:88:62:65:5b: d5:3b:60:e9:7b:3c:b8:c9:d5:7f:36:02:25:aa:68:c2:31:15: b7:30:65:eb:7f:1d:48:79:b1:cf:39:e2:42:80:16:d3:f5:93: 23:fc:4c:97:c9:5a:37:6c:7c:22:d8:4a:cd:d2:8e:36:83:39: 91:90:10:c8:f1:c9:35:7e:3f:b8:d3:81:c6:20:64:1a:b6:50: c2:21:a4:78:dc:d0:2f:3b:64:93:74:f0:96:90:f1:ef:fb:09: 5a:34:40:96:f0:36:12:c1:a3:74:8c:93:7e:41:de:77:8b:ec: 86:d9:d2:0f:3f:2d:d1:cc:40:a2:89:66:48:1e:20:b3:9c:23: 59:73:a9:44:73:bc:24:79:90:56:37:b3:c6:29:7e:a3:0f:f1: 29:39:ef:7e:5c:28:32:70:35:ac:da:b8:c8:75:66:fc:9b:4c: 39:47:8e:1b:6f:9b:4d:02:54:22:33:ef:61:ba:9e:29:84:ef: 4e:4b:33:47:76:97:6a:cb:7e:5f:fd:15:a6:9e:42:43:5b:66: 5a:8a:88:0d:f7:16:b9:3f:51:65:2b:66:6a:8b:d1:38:52:a2: d6:46:11:fa:fc:9a:1c:74:9e:8f:97:0b:02:4f:64:c6:f5:68: d3:4b:2d:ff:a4:37:1e:8b:3f:bf:44:be:61:46:a1:84:3d:08: 27:4c:81:20:77:89:08:ea:67:40:5e:6c:08:51:5f:34:5a:8c: 96:68:cd:d7:f7:89:c2:1c:d3:32:00:af:52:cb:d3:60:5b:2a: 3a:47:7e:6b:30:33:a1:62:29:7f:4a:b9:e1:2d:e7:14:23:0e: 0e:18:47:e1:79:fc:15:55:d0:b1:fc:25:71:63:75:33:1c:23: 2b:af:5c:d9:ed:47:77:60:0e:3b:0f:1e:d2:c0:dc:64:05:89: fc:78:d6:5c:2c:26:43:a9 SHA1 Fingerprint=CB:A1:C5:F8:B0:E3:5E:B8:B9:45:12:D3:F9:34:A2:E9:06:10:D3:36 -----BEGIN CERTIFICATE----- MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsx CzAJBgNVBAYTAkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRp ZmljYWNpw7NuIERpZ2l0YWwgLSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwa QUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4wHhcNMDYxMTI3MjA0NjI5WhcNMzAw NDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+U29jaWVkYWQgQ2Ft ZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJhIFMu QS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkq hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeG qentLhM0R7LQcNzJPNCNyu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzL fDe3fezTf3MZsGqy2IiKLUV0qPezuMDU2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQ Y5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU34ojC2I+GdV75LaeHM/J4 Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP2yYe68yQ 54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+b MMCm8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48j ilSH5L887uvDdUhfHjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++Ej YfDIJss2yKHzMI+ko6Kh3VOz3vCaMh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/zt A/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK5lw1omdMEWux+IBkAC1vImHF rEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1bczwmPS9KvqfJ pxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCB lTCBkgYEVR0gADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFy YS5jb20vZHBjLzBaBggrBgEFBQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW50 7WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2UgcHVlZGVuIGVuY29udHJhciBlbiBs YSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEfAygPU3zmpFmps4p6 xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuXEpBc unvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/ Jre7Ir5v/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dp ezy4ydV/NgIlqmjCMRW3MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42 gzmRkBDI8ck1fj+404HGIGQatlDCIaR43NAvO2STdPCWkPHv+wlaNECW8DYSwaN0 jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wkeZBWN7PGKX6jD/EpOe9+ XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f/RWmnkJD W2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/ RL5hRqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35r MDOhYil/SrnhLecUIw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxk BYn8eNZcLCZDqQ== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 2e:6a:00:01:00:02:1f:d7:52:21:2c:11:5c:3b Signature Algorithm: sha1WithRSAEncryption Issuer: C=DE, O=TC TrustCenter GmbH, OU=TC TrustCenter Class 2 CA, CN=TC TrustCenter Class 2 CA II Validity Not Before: Jan 12 14:38:43 2006 GMT Not After : Dec 31 22:59:59 2025 GMT Subject: C=DE, O=TC TrustCenter GmbH, OU=TC TrustCenter Class 2 CA, CN=TC TrustCenter Class 2 CA II Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:ab:80:87:9b:8e:f0:c3:7c:87:d7:e8:24:82:11: b3:3c:dd:43:62:ee:f8:c3:45:da:e8:e1:a0:5f:d1: 2a:b2:ea:93:68:df:b4:c8:d6:43:e9:c4:75:59:7f: fc:e1:1d:f8:31:70:23:1b:88:9e:27:b9:7b:fd:3a: d2:c9:a9:e9:14:2f:90:be:03:52:c1:49:cd:f6:fd: e4:08:66:0b:57:8a:a2:42:a0:b8:d5:7f:69:5c:90: 32:b2:97:0d:ca:4a:dc:46:3e:02:55:89:53:e3:1a: 5a:cb:36:c6:07:56:f7:8c:cf:11:f4:4c:bb:30:70: 04:95:a5:f6:39:8c:fd:73:81:08:7d:89:5e:32:1e: 22:a9:22:45:4b:b0:66:2e:30:cc:9f:65:fd:fc:cb: 81:a9:f1:e0:3b:af:a3:86:d1:89:ea:c4:45:79:50: 5d:ae:e9:21:74:92:4d:8b:59:82:8f:94:e3:e9:4a: f1:e7:49:b0:14:e3:f5:62:cb:d5:72:bd:1f:b9:d2: 9f:a0:cd:a8:fa:01:c8:d9:0d:df:da:fc:47:9d:b3: c8:54:df:49:4a:f1:21:a9:fe:18:4e:ee:48:d4:19: bb:ef:7d:e4:e2:9d:cb:5b:b6:6e:ff:e3:cd:5a:e7: 74:82:05:ba:80:25:38:cb:e4:69:9e:af:41:aa:1a: 84:f5 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: E3:AB:54:4C:80:A1:DB:56:43:B7:91:4A:CB:F3:82:7A:13:5C:08:AB X509v3 CRL Distribution Points: Full Name: URI:http://www.trustcenter.de/crl/v2/tc_class_2_ca_II.crl URI:ldap://www.trustcenter.de/CN=TC%20TrustCenter%20Class%202%20CA%20II,O=TC%20TrustCenter%20GmbH,OU=rootcerts,DC=trustcenter,DC=de?certificateRevocationList?base? Signature Algorithm: sha1WithRSAEncryption 8c:d7:df:7e:ee:1b:80:10:b3:83:f5:db:11:ea:6b:4b:a8:92: 18:d9:f7:07:39:f5:2c:be:06:75:7a:68:53:15:1c:ea:4a:ed: 5e:fc:23:b2:13:a0:d3:09:ff:f6:f6:2e:6b:41:71:79:cd:e2: 6d:fd:ae:59:6b:85:1d:b8:4e:22:9a:ed:66:39:6e:4b:94:e6: 55:fc:0b:1b:8b:77:c1:53:13:66:89:d9:28:d6:8b:f3:45:4a: 63:b7:fd:7b:0b:61:5d:b8:6d:be:c3:dc:5b:79:d2:ed:86:e5: a2:4d:be:5e:74:7c:6a:ed:16:38:1f:7f:58:81:5a:1a:eb:32: 88:2d:b2:f3:39:77:80:af:5e:b6:61:75:29:db:23:4d:88:ca: 50:28:cb:85:d2:d3:10:a2:59:6e:d3:93:54:00:7a:a2:46:95: 86:05:9c:a9:19:98:e5:31:72:0c:00:e2:67:d9:40:e0:24:33: 7b:6f:2c:b9:5c:ab:65:9d:2c:ac:76:ea:35:99:f5:97:b9:0f: 24:ec:c7:76:21:28:65:ae:57:e8:07:88:75:4a:56:a0:d2:05: 3a:a4:e6:8d:92:88:2c:f3:f2:e1:c1:c6:61:db:41:c5:c7:9b: f7:0e:1a:51:45:c2:61:6b:dc:64:27:17:8c:5a:b7:da:74:28: cd:97:e4:bd SHA1 Fingerprint=AE:50:83:ED:7C:F4:5C:BC:8F:61:C6:21:FE:68:5D:79:42:21:15:6E -----BEGIN CERTIFICATE----- MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjEL MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYwMTEyMTQzODQzWhcNMjUxMjMxMjI1 OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UEAxMc VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD ggEPADCCAQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jf tMjWQ+nEdVl//OEd+DFwIxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKg uNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2J XjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQXa7pIXSSTYtZgo+U4+lK 8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7uSNQZu+99 5OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1Ud EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3 kUrL84J6E1wIqzCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6 Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz JTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290 Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iS GNn3Bzn1LL4GdXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprt ZjluS5TmVfwLG4t3wVMTZonZKNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8 au0WOB9/WIFaGusyiC2y8zl3gK9etmF1KdsjTYjKUCjLhdLTEKJZbtOTVAB6okaV hgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kPJOzHdiEoZa5X6AeI dUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfkvQ== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 4a:47:00:01:00:02:e5:a0:5d:d6:3f:00:51:bf Signature Algorithm: sha1WithRSAEncryption Issuer: C=DE, O=TC TrustCenter GmbH, OU=TC TrustCenter Class 3 CA, CN=TC TrustCenter Class 3 CA II Validity Not Before: Jan 12 14:41:57 2006 GMT Not After : Dec 31 22:59:59 2025 GMT Subject: C=DE, O=TC TrustCenter GmbH, OU=TC TrustCenter Class 3 CA, CN=TC TrustCenter Class 3 CA II Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:b4:e0:bb:51:bb:39:5c:8b:04:c5:4c:79:1c:23: 86:31:10:63:43:55:27:3f:c6:45:c7:a4:3d:ec:09: 0d:1a:1e:20:c2:56:1e:de:1b:37:07:30:22:2f:6f: f1:06:f1:ab:ad:d6:c8:ab:61:a3:2f:43:c4:b0:b2: 2d:fc:c3:96:69:7b:7e:8a:e4:cc:c0:39:12:90:42: 60:c9:cc:35:68:ee:da:5f:90:56:5f:cd:1c:4d:5b: 58:49:eb:0e:01:4f:64:fa:2c:3c:89:58:d8:2f:2e: e2:b0:68:e9:22:3b:75:89:d6:44:1a:65:f2:1b:97: 26:1d:28:6d:ac:e8:bd:59:1d:2b:24:f6:d6:84:03: 66:88:24:00:78:60:f1:f8:ab:fe:02:b2:6b:fb:22: fb:35:e6:16:d1:ad:f6:2e:12:e4:fa:35:6a:e5:19: b9:5d:db:3b:1e:1a:fb:d3:ff:15:14:08:d8:09:6a: ba:45:9d:14:79:60:7d:af:40:8a:07:73:b3:93:96: d3:74:34:8d:3a:37:29:de:5c:ec:f5:ee:2e:31:c2: 20:dc:be:f1:4f:7f:23:52:d9:5b:e2:64:d9:9c:aa: 07:08:b5:45:bd:d1:d0:31:c1:ab:54:9f:a9:d2:c3: 62:60:03:f1:bb:39:4a:92:4a:3d:0a:b9:9d:c5:a0: fe:37 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: D4:A2:FC:9F:B3:C3:D8:03:D3:57:5C:07:A4:D0:24:A7:C0:F2:00:D4 X509v3 CRL Distribution Points: Full Name: URI:http://www.trustcenter.de/crl/v2/tc_class_3_ca_II.crl URI:ldap://www.trustcenter.de/CN=TC%20TrustCenter%20Class%203%20CA%20II,O=TC%20TrustCenter%20GmbH,OU=rootcerts,DC=trustcenter,DC=de?certificateRevocationList?base? Signature Algorithm: sha1WithRSAEncryption 36:60:e4:70:f7:06:20:43:d9:23:1a:42:f2:f8:a3:b2:b9:4d: 8a:b4:f3:c2:9a:55:31:7c:c4:3b:67:9a:b4:df:4d:0e:8a:93: 4a:17:8b:1b:8d:ca:89:e1:cf:3a:1e:ac:1d:f1:9c:32:b4:8e: 59:76:a2:41:85:25:37:a0:13:d0:f5:7c:4e:d5:ea:96:e2:6e: 72:c1:bb:2a:fe:6c:6e:f8:91:98:46:fc:c9:1b:57:5b:ea:c8: 1a:3b:3f:b0:51:98:3c:07:da:2c:59:01:da:8b:44:e8:e1:74: fd:a7:68:dd:54:ba:83:46:ec:c8:46:b5:f8:af:97:c0:3b:09: 1c:8f:ce:72:96:3d:33:56:70:bc:96:cb:d8:d5:7d:20:9a:83: 9f:1a:dc:39:f1:c5:72:a3:11:03:fd:3b:42:52:29:db:e8:01: f7:9b:5e:8c:d6:8d:86:4e:19:fa:bc:1c:be:c5:21:a5:87:9e: 78:2e:36:db:09:71:a3:72:34:f8:6c:e3:06:09:f2:5e:56:a5: d3:dd:98:fa:d4:e6:06:f4:f0:b6:20:63:4b:ea:29:bd:aa:82: 66:1e:fb:81:aa:a7:37:ad:13:18:e6:92:c3:81:c1:33:bb:88: 1e:a1:e7:e2:b4:bd:31:6c:0e:51:3d:6f:fb:96:56:80:e2:36: 17:d1:dc:e4 SHA1 Fingerprint=80:25:EF:F4:6E:70:C8:D4:72:24:65:84:FE:40:3B:8A:8D:6A:DB:F5 -----BEGIN CERTIFICATE----- MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjEL MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYwMTEyMTQ0MTU3WhcNMjUxMjMxMjI1 OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UEAxMc VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD ggEPADCCAQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJW Ht4bNwcwIi9v8Qbxq63WyKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+Q Vl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo6SI7dYnWRBpl8huXJh0obazovVkdKyT2 1oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZuV3bOx4a+9P/FRQI2Alq ukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk2ZyqBwi1 Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1Ud EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NX XAek0CSnwPIA1DCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6 Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz JTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290 Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlN irTzwppVMXzEO2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8 TtXqluJucsG7Kv5sbviRmEb8yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6 g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9IJqDnxrcOfHFcqMRA/07QlIp2+gB 95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal092Y+tTmBvTwtiBj S+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc5A== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1d:a2:00:01:00:02:ec:b7:60:80:78:8d:b6:06 Signature Algorithm: sha1WithRSAEncryption Issuer: C=DE, O=TC TrustCenter GmbH, OU=TC TrustCenter Universal CA, CN=TC TrustCenter Universal CA I Validity Not Before: Mar 22 15:54:28 2006 GMT Not After : Dec 31 22:59:59 2025 GMT Subject: C=DE, O=TC TrustCenter GmbH, OU=TC TrustCenter Universal CA, CN=TC TrustCenter Universal CA I Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:a4:77:23:96:44:af:90:f4:31:a7:10:f4:26:87: 9c:f3:38:d9:0f:5e:de:cf:41:e8:31:ad:c6:74:91: 24:96:78:1e:09:a0:9b:9a:95:4a:4a:f5:62:7c:02: a8:ca:ac:fb:5a:04:76:39:de:5f:f1:f9:b3:bf:f3: 03:58:55:d2:aa:b7:e3:04:22:d1:f8:94:da:22:08: 00:8d:d3:7c:26:5d:cc:77:79:e7:2c:78:39:a8:26: 73:0e:a2:5d:25:69:85:4f:55:0e:9a:ef:c6:b9:44: e1:57:3d:df:1f:54:22:e5:6f:65:aa:33:84:3a:f3: ce:7a:be:55:97:ae:8d:12:0f:14:33:e2:50:70:c3: 49:87:13:bc:51:de:d7:98:12:5a:ef:3a:83:33:92: 06:75:8b:92:7c:12:68:7b:70:6a:0f:b5:9b:b6:77: 5b:48:59:9d:e4:ef:5a:ad:f3:c1:9e:d4:d7:45:4e: ca:56:34:21:bc:3e:17:5b:6f:77:0c:48:01:43:29: b0:dd:3f:96:6e:e6:95:aa:0c:c0:20:b6:fd:3e:36: 27:9c:e3:5c:cf:4e:81:dc:19:bb:91:90:7d:ec:e6: 97:04:1e:93:cc:22:49:d7:97:86:b6:13:0a:3c:43: 23:77:7e:f0:dc:e6:cd:24:1f:3b:83:9b:34:3a:83: 34:e3 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Authority Key Identifier: keyid:92:A4:75:2C:A4:9E:BE:81:44:EB:79:FC:8A:C5:95:A5:EB:10:75:73 X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Digital Signature, Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 92:A4:75:2C:A4:9E:BE:81:44:EB:79:FC:8A:C5:95:A5:EB:10:75:73 Signature Algorithm: sha1WithRSAEncryption 28:d2:e0:86:d5:e6:f8:7b:f0:97:dc:22:6b:3b:95:14:56:0f: 11:30:a5:9a:4f:3a:b0:3a:e0:06:cb:65:f5:ed:c6:97:27:fe: 25:f2:57:e6:5e:95:8c:3e:64:60:15:5a:7f:2f:0d:01:c5:b1: 60:fd:45:35:cf:f0:b2:bf:06:d9:ef:5a:be:b3:62:21:b4:d7: ab:35:7c:53:3e:a6:27:f1:a1:2d:da:1a:23:9d:cc:dd:ec:3c: 2d:9e:27:34:5d:0f:c2:36:79:bc:c9:4a:62:2d:ed:6b:d9:7d: 41:43:7c:b6:aa:ca:ed:61:b1:37:82:15:09:1a:8a:16:30:d8: ec:c9:d6:47:72:78:4b:10:46:14:8e:5f:0e:af:ec:c7:2f:ab: 10:d7:b6:f1:6e:ec:86:b2:c2:e8:0d:92:73:dc:a2:f4:0f:3a: bf:61:23:10:89:9c:48:40:6e:70:00:b3:d3:ba:37:44:58:11: 7a:02:6a:88:f0:37:34:f0:19:e9:ac:d4:65:73:f6:69:8c:64: 94:3a:79:85:29:b0:16:2b:0c:82:3f:06:9c:c7:fd:10:2b:9e: 0f:2c:b6:9e:e3:15:bf:d9:36:1c:ba:25:1a:52:3d:1a:ec:22: 0c:1c:e0:a4:a2:3d:f0:e8:39:cf:81:c0:7b:ed:5d:1f:6f:c5: d0:0b:d7:98 SHA1 Fingerprint=6B:2F:34:AD:89:58:BE:62:FD:B0:6B:5C:CE:BB:9D:D9:4F:4E:39:F3 -----BEGIN CERTIFICATE----- MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTEL MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1 c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcNMDYwMzIyMTU1NDI4WhcNMjUxMjMx MjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIg R21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYwJAYD VQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcN AQEBBQADggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSR JJZ4Hgmgm5qVSkr1YnwCqMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3T fCZdzHd55yx4Oagmcw6iXSVphU9VDprvxrlE4Vc93x9UIuVvZaozhDrzznq+VZeu jRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtwag+1m7Z3W0hZneTvWq3z wZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9OgdwZu5GQ fezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYD VR0jBBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAO BgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0G CSqGSIb3DQEBBQUAA4IBAQAo0uCG1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X1 7caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/CyvwbZ71q+s2IhtNerNXxTPqYn 8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3ghUJGooWMNjs ydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/ 2TYcuiUaUj0a7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 38 (0x26) Signature Algorithm: sha1WithRSAEncryption Issuer: C=DE, O=Deutsche Telekom AG, OU=T-TeleSec Trust Center, CN=Deutsche Telekom Root CA 2 Validity Not Before: Jul 9 12:11:00 1999 GMT Not After : Jul 9 23:59:00 2019 GMT Subject: C=DE, O=Deutsche Telekom AG, OU=T-TeleSec Trust Center, CN=Deutsche Telekom Root CA 2 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:ab:0b:a3:35:e0:8b:29:14:b1:14:85:af:3c:10: e4:39:6f:35:5d:4a:ae:dd:ea:61:8d:95:49:f4:6f: 64:a3:1a:60:66:a4:a9:40:22:84:d9:d4:a5:e5:78: 93:0e:68:01:ad:b9:4d:5c:3a:ce:d3:b8:a8:42:40: df:cf:a3:ba:82:59:6a:92:1b:ac:1c:9a:da:08:2b: 25:27:f9:69:23:47:f1:e0:eb:2c:7a:9b:f5:13:02: d0:7e:34:7c:c2:9e:3c:00:59:ab:f5:da:0c:f5:32: 3c:2b:ac:50:da:d6:c3:de:83:94:ca:a8:0c:99:32: 0e:08:48:56:5b:6a:fb:da:e1:58:58:01:49:5f:72: 41:3c:15:06:01:8e:5d:ad:aa:b8:93:b4:cd:9e:eb: a7:e8:6a:2d:52:34:db:3a:ef:5c:75:51:da:db:f3: 31:f9:ee:71:98:32:c4:54:15:44:0c:f9:9b:55:ed: ad:df:18:08:a0:a3:86:8a:49:ee:53:05:8f:19:4c: d5:de:58:79:9b:d2:6a:1c:42:ab:c5:d5:a7:cf:68: 0f:96:e4:e1:61:98:76:61:c8:91:7c:d6:3e:00:e2: 91:50:87:e1:9d:0a:e6:ad:97:d2:1d:c6:3a:7d:cb: bc:da:03:34:d5:8e:5b:01:f5:6a:07:b7:16:b6:6e: 4a:7f Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: 31:C3:79:1B:BA:F5:53:D7:17:E0:89:7A:2D:17:6C:0A:B3:2B:9D:33 X509v3 Basic Constraints: CA:TRUE, pathlen:5 X509v3 Key Usage: critical Certificate Sign, CRL Sign Signature Algorithm: sha1WithRSAEncryption 94:64:59:ad:39:64:e7:29:eb:13:fe:5a:c3:8b:13:57:c8:04: 24:f0:74:77:c0:60:e3:67:fb:e9:89:a6:83:bf:96:82:7c:6e: d4:c3:3d:ef:9e:80:6e:bb:29:b4:98:7a:b1:3b:54:eb:39:17: 47:7e:1a:8e:0b:fc:1f:31:59:31:04:b2:ce:17:f3:2c:c7:62: 36:55:e2:22:d8:89:55:b4:98:48:aa:64:fa:d6:1c:36:d8:44: 78:5a:5a:23:3a:57:97:f5:7a:30:4f:ae:9f:6a:4c:4b:2b:8e: a0:03:e3:3e:e0:a9:d4:d2:7b:d2:b3:a8:e2:72:3c:ad:9e:ff: 80:59:e4:9b:45:b4:f6:3b:b0:cd:39:19:98:32:e5:ea:21:61: 90:e4:31:21:8e:34:b1:f7:2f:35:4a:85:10:da:e7:8a:37:21: be:59:63:e0:f2:85:88:31:53:d4:54:14:85:70:79:f4:2e:06: 77:27:75:2f:1f:b8:8a:f9:fe:c5:ba:d8:36:e4:83:ec:e7:65: b7:bf:63:5a:f3:46:af:81:94:37:d4:41:8c:d6:23:d6:1e:cf: f5:68:1b:44:63:a2:5a:ba:a7:35:59:a1:e5:70:05:9b:0e:23: 57:99:94:0a:6d:ba:39:63:28:86:92:f3:18:84:d8:fb:d1:cf: 05:56:64:57 SHA1 Fingerprint=85:A4:08:C0:9C:19:3E:5D:51:58:7D:CD:D6:13:30:FD:8C:DE:37:BF -----BEGIN CERTIFICATE----- MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290 IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl 6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+ xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU Cm26OWMohpLzGITY+9HPBVZkVw== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 14:13:96:83:14:55:8c:ea:7b:63:e5:fc:34:87:77:44 Signature Algorithm: sha1WithRSAEncryption Issuer: CN=ComSign CA, O=ComSign, C=IL Validity Not Before: Mar 24 11:32:18 2004 GMT Not After : Mar 19 15:02:18 2029 GMT Subject: CN=ComSign CA, O=ComSign, C=IL Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:f0:e4:54:69:2b:d3:c7:8f:6a:44:e4:7e:58:27: f8:0b:d0:e4:94:12:8a:f1:1b:38:38:2f:1f:31:9c: 06:d4:2c:a7:de:0b:2a:ae:1a:a0:e3:9e:6a:bf:9f: 3c:c7:6e:a2:f9:8b:64:6c:3a:ad:85:55:51:54:a5: 38:55:b8:ab:83:04:f2:3f:64:36:f7:c0:8d:43:43: 6a:66:d1:f7:17:2a:d5:ef:36:fa:30:10:42:d7:53: cd:f9:fa:33:73:4c:b3:e9:84:20:8a:d6:41:27:35: e4:38:fa:94:9b:b8:7a:e4:79:1f:33:fb:1b:d8:21: 09:28:7c:4d:18:69:5e:64:8a:7a:19:93:ca:7e:ec: f3:72:e7:37:07:58:59:28:ac:42:f9:c5:ff:cd:3f: e7:a5:fa:38:b1:d0:0c:c7:d9:52:1a:53:d6:81:cc: 42:7a:35:5b:ed:4b:3a:7a:f6:b5:8e:cc:ff:0f:7c: e4:60:36:87:2f:ad:f0:a1:25:7d:ff:d2:4b:11:88: 70:54:a6:41:a8:67:53:52:42:5e:e4:34:9e:e4:be: a3:ec:aa:62:5d:dd:c3:4c:a6:82:41:e4:33:0b:ac: c9:33:0f:64:82:57:2a:fd:0c:ad:36:e1:0c:ae:4b: c5:ef:3b:99:d9:23:b3:5b:5d:b4:57:ec:74:70:0c: 2a:4f Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:TRUE X509v3 CRL Distribution Points: Full Name: URI:http://fedir.comsign.co.il/crl/ComSignCA.crl X509v3 Key Usage: critical Digital Signature, Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:4B:01:9B:3E:56:1A:65:36:76:CB:7B:97:AA:92:05:EE:32:E7:28:31 X509v3 Subject Key Identifier: 4B:01:9B:3E:56:1A:65:36:76:CB:7B:97:AA:92:05:EE:32:E7:28:31 Signature Algorithm: sha1WithRSAEncryption d0:d9:a5:7e:fe:29:60:45:9d:7e:83:cf:6e:bc:47:6e:f5:1a: 9e:54:76:42:71:b4:3c:58:3f:2d:40:25:42:f6:81:9c:f1:89: 10:c8:0e:aa:78:4f:38:09:57:b0:3c:c0:08:fc:35:8e:f1:48: 51:8d:0c:71:74:ba:84:c4:d7:72:9b:84:7c:38:4e:64:06:27: 2a:e1:a7:b5:ec:08:99:b4:0a:0d:d4:85:73:c8:12:e1:35:ed: f1:05:31:1d:73:99:0c:eb:96:ca:dd:d3:e6:85:aa:f0:8a:fb: 75:c1:f2:09:3c:65:65:64:f3:4c:d8:ad:cb:88:69:f3:e4:83: b7:0c:bd:17:5a:96:17:ca:5b:ff:ad:bb:1c:e9:2d:84:80:d8: 21:be:85:52:d9:d4:74:b9:69:85:ba:4d:ed:28:32:eb:f9:61: 4a:e4:c4:36:1e:19:dc:6f:84:11:1f:95:f5:83:28:18:a8:33: 92:43:27:dd:5d:13:04:45:4f:87:d5:46:cd:3d:a8:ba:f0:f3: b8:56:24:45:eb:37:c7:e1:76:4f:72:39:18:df:7e:74:72:c7: 73:2d:39:ea:60:e6:ad:11:a2:56:87:7b:c3:68:9a:fe:f8:8c: 70:a8:df:65:32:f4:a4:40:8c:a1:c2:44:03:0e:94:00:67:a0: 71:00:82:48 SHA1 Fingerprint=E1:A4:5B:14:1A:21:DA:1A:79:F4:1A:42:A9:61:D6:69:CD:06:34:C1 -----BEGIN CERTIFICATE----- MIIDkzCCAnugAwIBAgIQFBOWgxRVjOp7Y+X8NId3RDANBgkqhkiG9w0BAQUFADA0 MRMwEQYDVQQDEwpDb21TaWduIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQG EwJJTDAeFw0wNDAzMjQxMTMyMThaFw0yOTAzMTkxNTAyMThaMDQxEzARBgNVBAMT CkNvbVNpZ24gQ0ExEDAOBgNVBAoTB0NvbVNpZ24xCzAJBgNVBAYTAklMMIIBIjAN BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ORUaSvTx49qROR+WCf4C9DklBKK 8Rs4OC8fMZwG1Cyn3gsqrhqg455qv588x26i+YtkbDqthVVRVKU4VbirgwTyP2Q2 98CNQ0NqZtH3FyrV7zb6MBBC11PN+fozc0yz6YQgitZBJzXkOPqUm7h65HkfM/sb 2CEJKHxNGGleZIp6GZPKfuzzcuc3B1hZKKxC+cX/zT/npfo4sdAMx9lSGlPWgcxC ejVb7Us6eva1jsz/D3zkYDaHL63woSV9/9JLEYhwVKZBqGdTUkJe5DSe5L6j7Kpi Xd3DTKaCQeQzC6zJMw9kglcq/QytNuEMrkvF7zuZ2SOzW120V+x0cAwqTwIDAQAB o4GgMIGdMAwGA1UdEwQFMAMBAf8wPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL2Zl ZGlyLmNvbXNpZ24uY28uaWwvY3JsL0NvbVNpZ25DQS5jcmwwDgYDVR0PAQH/BAQD AgGGMB8GA1UdIwQYMBaAFEsBmz5WGmU2dst7l6qSBe4y5ygxMB0GA1UdDgQWBBRL AZs+VhplNnbLe5eqkgXuMucoMTANBgkqhkiG9w0BAQUFAAOCAQEA0Nmlfv4pYEWd foPPbrxHbvUanlR2QnG0PFg/LUAlQvaBnPGJEMgOqnhPOAlXsDzACPw1jvFIUY0M cXS6hMTXcpuEfDhOZAYnKuGntewImbQKDdSFc8gS4TXt8QUxHXOZDOuWyt3T5oWq 8Ir7dcHyCTxlZWTzTNity4hp8+SDtwy9F1qWF8pb/627HOkthIDYIb6FUtnUdLlp hbpN7Sgy6/lhSuTENh4Z3G+EER+V9YMoGKgzkkMn3V0TBEVPh9VGzT2ouvDzuFYk Res3x+F2T3I5GN9+dHLHcy056mDmrRGiVod7w2ia/viMcKjfZTL0pECMocJEAw6U AGegcQCCSA== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: c7:28:47:09:b3:b8:6c:45:8c:1d:fa:24:f5:36:4e:e9 Signature Algorithm: sha1WithRSAEncryption Issuer: CN=ComSign Secured CA, O=ComSign, C=IL Validity Not Before: Mar 24 11:37:20 2004 GMT Not After : Mar 16 15:04:56 2029 GMT Subject: CN=ComSign Secured CA, O=ComSign, C=IL Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:c6:b5:68:5f:1d:94:15:c3:a4:08:55:2d:e3:a0: 57:7a:ef:e9:74:2a:bb:b9:7c:57:49:1a:11:5e:4f: 29:87:0c:48:d6:6a:e7:8f:d4:7e:57:24:b9:06:89: e4:1c:3c:ea:ac:e3:da:21:80:73:21:0a:ef:79:98: 6c:1f:08:ff:a1:50:7d:f2:98:1b:c9:54:6f:3e:a5: 28:ec:21:04:0f:45:bb:07:3d:a1:c0:fa:2a:98:1d: 4e:06:93:fb:f5:88:3b:ab:5f:cb:16:bf:e6:f3:9e: 4a:87:ed:19:ea:c2:9f:43:e4:f1:81:a5:7f:10:4f: 3e:d1:4a:62:ad:53:1b:cb:83:ff:07:65:a5:92:2d: 66:a9:5b:b8:5a:f4:1d:b4:21:91:4a:17:7b:9e:32: fe:56:24:39:b2:54:84:43:f5:84:c2:d8:bc:41:90: cc:9d:d6:68:da:e9:82:50:a9:3b:68:cf:b5:5d:02: 94:60:16:b1:43:d9:43:5d:dd:5d:87:6e:ea:bb:b3: c9:6b:f6:03:94:09:70:de:16:11:7a:2b:e8:76:8f: 49:10:98:77:b9:63:5c:8b:33:97:75:f6:0b:8c:b2: ab:5b:de:74:20:25:3f:e3:f3:11:f9:87:68:86:35: 71:c3:1d:8c:2d:eb:e5:1a:ac:0f:73:d5:82:59:40: 80:d3 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:TRUE X509v3 CRL Distribution Points: Full Name: URI:http://fedir.comsign.co.il/crl/ComSignSecuredCA.crl X509v3 Key Usage: critical Digital Signature, Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:C1:4B:ED:70:B6:F7:3E:7C:00:3B:00:8F:C7:3E:0E:45:9F:1E:5D:EC X509v3 Subject Key Identifier: C1:4B:ED:70:B6:F7:3E:7C:00:3B:00:8F:C7:3E:0E:45:9F:1E:5D:EC Signature Algorithm: sha1WithRSAEncryption 16:cf:ee:92:13:50:ab:7b:14:9e:33:b6:42:20:6a:d4:15:bd: 09:ab:fc:72:e8:ef:47:7a:90:ac:51:c1:64:4e:e9:88:bd:43: 45:81:e3:66:23:3f:12:86:4d:19:e4:05:b0:e6:37:c2:8d:da: 06:28:c9:0f:89:a4:53:a9:75:3f:b0:96:fb:ab:4c:33:55:f9: 78:26:46:6f:1b:36:98:fb:42:76:c1:82:b9:8e:de:fb:45:f9: 63:1b:62:3b:39:06:ca:77:7a:a8:3c:09:cf:6c:36:3d:0f:0a: 45:4b:69:16:1a:45:7d:33:03:65:f9:52:71:90:26:95:ac:4c: 0c:f5:8b:93:3f:cc:75:74:85:98:ba:ff:62:7a:4d:1f:89:fe: ae:bd:94:00:99:bf:11:a5:dc:e0:79:c5:16:0b:7d:02:61:1d: ea:85:f9:02:15:4f:e7:5a:89:4e:14:6f:e3:37:4b:85:f5:c1: 3c:61:e0:fd:05:41:b2:92:7f:c3:1d:a0:d0:ae:52:64:60:6b: 18:c6:26:9c:d8:f5:64:e4:36:1a:62:9f:8a:0f:3e:ff:6d:4e: 19:56:4e:20:91:6c:9f:34:33:3a:34:57:50:3a:6f:81:5e:06: c6:f5:3e:7c:4e:8e:2b:ce:65:06:2e:5d:d2:2a:53:74:5e:d3: 6e:27:9e:8f SHA1 Fingerprint=F9:CD:0E:2C:DA:76:24:C1:8F:BD:F0:F0:AB:B6:45:B8:F7:FE:D5:7A -----BEGIN CERTIFICATE----- MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAw PDEbMBkGA1UEAxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWdu MQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwx GzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBDQTEQMA4GA1UEChMHQ29tU2lnbjEL MAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGtWhf HZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs49oh gHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sW v+bznkqH7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ue Mv5WJDmyVIRD9YTC2LxBkMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr 9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d19guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt 6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUwAwEB/zBEBgNVHR8EPTA7 MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29tU2lnblNl Y3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58 ADsAj8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkq hkiG9w0BAQUFAAOCAQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7p iL1DRYHjZiM/EoZNGeQFsOY3wo3aBijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtC dsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtpFhpFfTMDZflScZAmlaxMDPWL kz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP51qJThRv4zdL hfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 04:00:00:00:00:01:0f:85:aa:2d:48 Signature Algorithm: sha1WithRSAEncryption Issuer: O=Cybertrust, Inc, CN=Cybertrust Global Root Validity Not Before: Dec 15 08:00:00 2006 GMT Not After : Dec 15 08:00:00 2021 GMT Subject: O=Cybertrust, Inc, CN=Cybertrust Global Root Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:f8:c8:bc:bd:14:50:66:13:ff:f0:d3:79:ec:23: f2:b7:1a:c7:8e:85:f1:12:73:a6:19:aa:10:db:9c: a2:65:74:5a:77:3e:51:7d:56:f6:dc:23:b6:d4:ed: 5f:58:b1:37:4d:d5:49:0e:6e:f5:6a:87:d6:d2:8c: d2:27:c6:e2:ff:36:9f:98:65:a0:13:4e:c6:2a:64: 9b:d5:90:12:cf:14:06:f4:3b:e3:d4:28:be:e8:0e: f8:ab:4e:48:94:6d:8e:95:31:10:5c:ed:a2:2d:bd: d5:3a:6d:b2:1c:bb:60:c0:46:4b:01:f5:49:ae:7e: 46:8a:d0:74:8d:a1:0c:02:ce:ee:fc:e7:8f:b8:6b: 66:f3:7f:44:00:bf:66:25:14:2b:dd:10:30:1d:07: 96:3f:4d:f6:6b:b8:8f:b7:7b:0c:a5:38:eb:de:47: db:d5:5d:39:fc:88:a7:f3:d7:2a:74:f1:e8:5a:a2: 3b:9f:50:ba:a6:8c:45:35:c2:50:65:95:dc:63:82: ef:dd:bf:77:4d:9c:62:c9:63:73:16:d0:29:0f:49: a9:48:f0:b3:aa:b7:6c:c5:a7:30:39:40:5d:ae:c4: e2:5d:26:53:f0:ce:1c:23:08:61:a8:94:19:ba:04: 62:40:ec:1f:38:70:77:12:06:71:a7:30:18:5d:25: 27:a5 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: B6:08:7B:0D:7A:CC:AC:20:4C:86:56:32:5E:CF:AB:6E:85:2D:70:57 X509v3 CRL Distribution Points: Full Name: URI:http://www2.public-trust.com/crl/ct/ctroot.crl X509v3 Authority Key Identifier: keyid:B6:08:7B:0D:7A:CC:AC:20:4C:86:56:32:5E:CF:AB:6E:85:2D:70:57 Signature Algorithm: sha1WithRSAEncryption 56:ef:0a:23:a0:54:4e:95:97:c9:f8:89:da:45:c1:d4:a3:00: 25:f4:1f:13:ab:b7:a3:85:58:69:c2:30:ad:d8:15:8a:2d:e3: c9:cd:81:5a:f8:73:23:5a:a7:7c:05:f3:fd:22:3b:0e:d1:06: c4:db:36:4c:73:04:8e:e5:b0:22:e4:c5:f3:2e:a5:d9:23:e3: b8:4e:4a:20:a7:6e:02:24:9f:22:60:67:7b:8b:1d:72:09:c5: 31:5c:e9:79:9f:80:47:3d:ad:a1:0b:07:14:3d:47:ff:03:69: 1a:0c:0b:44:e7:63:25:a7:7f:b2:c9:b8:76:84:ed:23:f6:7d: 07:ab:45:7e:d3:df:b3:bf:e9:8a:b6:cd:a8:a2:67:2b:52:d5: b7:65:f0:39:4c:63:a0:91:79:93:52:0f:54:dd:83:bb:9f:d1: 8f:a7:53:73:c3:cb:ff:30:ec:7c:04:b8:d8:44:1f:93:5f:71: 09:22:b7:6e:3e:ea:1c:03:4e:9d:1a:20:61:fb:81:37:ec:5e: fc:0a:45:ab:d7:e7:17:55:d0:a0:ea:60:9b:a6:f6:e3:8c:5b: 29:c2:06:60:14:9d:2d:97:4c:a9:93:15:9d:61:c4:01:5f:48: d6:58:bd:56:31:12:4e:11:c8:21:e0:b3:11:91:65:db:b4:a6: 88:38:ce:55 SHA1 Fingerprint=5F:43:E5:B1:BF:F8:78:8C:AC:1C:C7:CA:4A:9A:C6:22:2B:CC:34:C6 -----BEGIN CERTIFICATE----- MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5 7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/ MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW WL1WMRJOEcgh4LMRkWXbtKaIOM5V -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 15:c8:bd:65:47:5c:af:b8:97:00:5e:e4:06:d2:bc:9d Signature Algorithm: sha1WithRSAEncryption Issuer: C=TW, O=Chunghwa Telecom Co., Ltd., OU=ePKI Root Certification Authority Validity Not Before: Dec 20 02:31:27 2004 GMT Not After : Dec 20 02:31:27 2034 GMT Subject: C=TW, O=Chunghwa Telecom Co., Ltd., OU=ePKI Root Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:e1:25:0f:ee:8d:db:88:33:75:67:cd:ad:1f:7d: 3a:4e:6d:9d:d3:2f:14:f3:63:74:cb:01:21:6a:37: ea:84:50:07:4b:26:5b:09:43:6c:21:9e:6a:c8:d5: 03:f5:60:69:8f:cc:f0:22:e4:1f:e7:f7:6a:22:31: b7:2c:15:f2:e0:fe:00:6a:43:ff:87:65:c6:b5:1a: c1:a7:4c:6d:22:70:21:8a:31:f2:97:74:89:09:12: 26:1c:9e:ca:d9:12:a2:95:3c:da:e9:67:bf:08:a0: 64:e3:d6:42:b7:45:ef:97:f4:f6:f5:d7:b5:4a:15: 02:58:7d:98:58:4b:60:bc:cd:d7:0d:9a:13:33:53: d1:61:f9:7a:d5:d7:78:b3:9a:33:f7:00:86:ce:1d: 4d:94:38:af:a8:ec:78:51:70:8a:5c:10:83:51:21: f7:11:3d:34:86:5e:e5:48:cd:97:81:82:35:4c:19: ec:65:f6:6b:c5:05:a1:ee:47:13:d6:b3:21:27:94: 10:0a:d9:24:3b:ba:be:44:13:46:30:3f:97:3c:d8: d7:d7:6a:ee:3b:38:e3:2b:d4:97:0e:b9:1b:e7:07: 49:7f:37:2a:f9:77:78:cf:54:ed:5b:46:9d:a3:80: 0e:91:43:c1:d6:5b:5f:14:ba:9f:a6:8d:24:47:40: 59:bf:72:38:b2:36:6c:37:ff:99:d1:5d:0e:59:0a: ab:69:f7:c0:b2:04:45:7a:54:00:ae:be:53:f6:b5: e7:e1:f8:3c:a3:31:d2:a9:fe:21:52:64:c5:a6:67: f0:75:07:06:94:14:81:55:c6:27:e4:01:8f:17:c1: 6a:71:d7:be:4b:fb:94:58:7d:7e:11:33:b1:42:f7: 62:6c:18:d6:cf:09:68:3e:7f:6c:f6:1e:8f:62:ad: a5:63:db:09:a7:1f:22:42:41:1e:6f:99:8a:3e:d7: f9:3f:40:7a:79:b0:a5:01:92:d2:9d:3d:08:15:a5: 10:01:2d:b3:32:76:a8:95:0d:b3:7a:9a:fb:07:10: 78:11:6f:e1:8f:c7:ba:0f:25:1a:74:2a:e5:1c:98: 41:99:df:21:87:e8:95:06:6a:0a:b3:6a:47:76:65: f6:3a:cf:8f:62:17:19:7b:0a:28:cd:1a:d2:83:1e: 21:c7:2c:bf:be:ff:61:68:b7:67:1b:bb:78:4d:8d: ce:67:e5:e4:c1:8e:b7:23:66:e2:9d:90:75:34:98: a9:36:2b:8a:9a:94:b9:9d:ec:cc:8a:b1:f8:25:89: 5c:5a:b6:2f:8c:1f:6d:79:24:a7:52:68:c3:84:35: e2:66:8d:63:0e:25:4d:d5:19:b2:e6:79:37:a7:22: 9d:54:31 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: 1E:0C:F7:B6:67:F2:E1:92:26:09:45:C0:55:39:2E:77:3F:42:4A:A2 X509v3 Basic Constraints: CA:TRUE setCext-hashedRoot: 0/0-...0...+......0...g*.....E... V|.[x....S..... Signature Algorithm: sha1WithRSAEncryption 09:b3:83:53:59:01:3e:95:49:b9:f1:81:ba:f9:76:20:23:b5: 27:60:74:d4:6a:99:34:5e:6c:00:53:d9:9f:f2:a6:b1:24:07: 44:6a:2a:c6:a5:8e:78:12:e8:47:d9:58:1b:13:2a:5e:79:9b: 9f:0a:2a:67:a6:25:3f:06:69:56:73:c3:8a:66:48:fb:29:81: 57:74:06:ca:9c:ea:28:e8:38:67:26:2b:f1:d5:b5:3f:65:93: f8:36:5d:8e:8d:8d:40:20:87:19:ea:ef:27:c0:3d:b4:39:0f: 25:7b:68:50:74:55:9c:0c:59:7d:5a:3d:41:94:25:52:08:e0: 47:2c:15:31:19:d5:bf:07:55:c6:bb:12:b5:97:f4:5f:83:85: ba:71:c1:d9:6c:81:11:76:0a:0a:b0:bf:82:97:f7:ea:3d:fa: fa:ec:2d:a9:28:94:3b:56:dd:d2:51:2e:ae:c0:bd:08:15:8c: 77:52:34:96:d6:9b:ac:d3:1d:8e:61:0f:35:7b:9b:ae:39:69: 0b:62:60:40:20:36:8f:af:fb:36:ee:2d:08:4a:1d:b8:bf:9b: 5c:f8:ea:a5:1b:a0:73:a6:d8:f8:6e:e0:33:04:5f:68:aa:27: 87:ed:d9:c1:90:9c:ed:bd:e3:6a:35:af:63:df:ab:18:d9:ba: e6:e9:4a:ea:50:8a:0f:61:93:1e:e2:2d:19:e2:30:94:35:92: 5d:0e:b6:07:af:19:80:8f:47:90:51:4b:2e:4d:dd:85:e2:d2: 0a:52:0a:17:9a:fc:1a:b0:50:02:e5:01:a3:63:37:21:4c:44: c4:9b:51:99:11:0e:73:9c:06:8f:54:2e:a7:28:5e:44:39:87: 56:2d:37:bd:85:44:94:e1:0c:4b:2c:9c:c3:92:85:34:61:cb: 0f:b8:9b:4a:43:52:fe:34:3a:7d:b8:e9:29:dc:76:a9:c8:30: f8:14:71:80:c6:1e:36:48:74:22:41:5c:87:82:e8:18:71:8b: 41:89:44:e7:7e:58:5b:a8:b8:8d:13:e9:a7:6c:c3:47:ed:b3: 1a:9d:62:ae:8d:82:ea:94:9e:dd:59:10:c3:ad:dd:e2:4d:e3: 31:d5:c7:ec:e8:f2:b0:fe:92:1e:16:0a:1a:fc:d9:f3:f8:27: b6:c9:be:1d:b4:6c:64:90:7f:f4:e4:c4:5b:d7:37:ae:42:0e: dd:a4:1a:6f:7c:88:54:c5:16:6e:e1:7a:68:2e:f8:3a:bf:0d: a4:3c:89:3b:78:a7:4e:63:83:04:21:08:67:8d:f2:82:49:d0: 5b:fd:b1:cd:0f:83:84:d4:3e:20:85:f7:4a:3d:2b:9c:fd:2a: 0a:09:4d:ea:81:f8:11:9c SHA1 Fingerprint=67:65:0D:F1:7E:8E:7E:5B:82:40:A4:F4:56:4B:CF:E2:3D:69:C6:F0 -----BEGIN CERTIFICATE----- MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1 TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/ gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2 j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6 5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS /jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D hNQ+IIX3Sj0rnP0qCglN6oH4EZw= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 17 (0x11) Signature Algorithm: sha1WithRSAEncryption Issuer: C=TR, L=Gebze - Kocaeli, O=T\xC3\xBCrkiye Bilimsel ve Teknolojik Ara\xC5\x9Ft\xC4\xB1rma Kurumu - T\xC3\x9CB\xC4\xB0TAK, OU=Ulusal Elektronik ve Kriptoloji Ara\xC5\x9Ft\xC4\xB1rma Enstit\xC3\xBCs\xC3\xBC - UEKAE, OU=Kamu Sertifikasyon Merkezi, CN=T\xC3\x9CB\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xC4\xB1c\xC4\xB1s\xC4\xB1 - S\xC3\xBCr\xC3\xBCm 3 Validity Not Before: Aug 24 11:37:07 2007 GMT Not After : Aug 21 11:37:07 2017 GMT Subject: C=TR, L=Gebze - Kocaeli, O=T\xC3\xBCrkiye Bilimsel ve Teknolojik Ara\xC5\x9Ft\xC4\xB1rma Kurumu - T\xC3\x9CB\xC4\xB0TAK, OU=Ulusal Elektronik ve Kriptoloji Ara\xC5\x9Ft\xC4\xB1rma Enstit\xC3\xBCs\xC3\xBC - UEKAE, OU=Kamu Sertifikasyon Merkezi, CN=T\xC3\x9CB\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xC4\xB1c\xC4\xB1s\xC4\xB1 - S\xC3\xBCr\xC3\xBCm 3 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:8a:6d:4b:ff:10:88:3a:c3:f6:7e:94:e8:ea:20: 64:70:ae:21:81:be:3a:7b:3c:db:f1:1d:52:7f:59: fa:f3:22:4c:95:a0:90:bc:48:4e:11:ab:fb:b7:b5: 8d:7a:83:28:8c:26:46:d8:4e:95:40:87:61:9f:c5: 9e:6d:81:87:57:6c:8a:3b:b4:66:ea:cc:40:fc:e3: aa:6c:b2:cb:01:db:32:bf:d2:eb:85:cf:a1:0d:55: c3:5b:38:57:70:b8:75:c6:79:d1:14:30:ed:1b:58: 5b:6b:ef:35:f2:a1:21:4e:c5:ce:7c:99:5f:6c:b9: b8:22:93:50:a7:cd:4c:70:6a:be:6a:05:7f:13:9c: 2b:1e:ea:fe:47:ce:04:a5:6f:ac:93:2e:7c:2b:9f: 9e:79:13:91:e8:ea:9e:ca:38:75:8e:62:b0:95:93: 2a:e5:df:e9:5e:97:6e:20:5f:5f:84:7a:44:39:19: 40:1c:ba:55:2b:fb:30:b2:81:ef:84:e3:dc:ec:98: 38:39:03:85:08:a9:54:03:05:29:f0:c9:8f:8b:ea: 0b:86:65:19:11:d3:e9:09:23:de:68:93:03:c9:36: 1c:21:6e:ce:8c:66:f1:99:30:d8:d7:b3:c3:1d:f8: 81:2e:a8:bd:82:0b:66:fe:82:cb:e1:e0:1a:82:c3: 40:81 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: BD:88:87:C9:8F:F6:A4:0A:0B:AA:EB:C5:FE:91:23:9D:AB:4A:8A:32 X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: sha1WithRSAEncryption 1d:7c:fa:49:8f:34:e9:b7:26:92:16:9a:05:74:e7:4b:d0:6d: 39:6c:c3:26:f6:ce:b8:31:bc:c4:df:bc:2a:f8:37:91:18:dc: 04:c8:64:99:2b:18:6d:80:03:59:c9:ae:f8:58:d0:3e:ed:c3: 23:9f:69:3c:86:38:1c:9e:ef:da:27:78:d1:84:37:71:8a:3c: 4b:39:cf:7e:45:06:d6:2d:d8:8a:4d:78:12:d6:ad:c2:d3:cb: d2:d0:41:f3:26:36:4a:9b:95:6c:0c:ee:e5:d1:43:27:66:c1: 88:f7:7a:b3:20:6c:ea:b0:69:2b:c7:20:e8:0c:03:c4:41:05: 99:e2:3f:e4:6b:f8:a0:86:81:c7:84:c6:1f:d5:4b:81:12:b2: 16:21:2c:13:a1:80:b2:5e:0c:4a:13:9e:20:d8:62:40:ab:90: ea:64:4a:2f:ac:0d:01:12:79:45:a8:2f:87:19:68:c8:e2:85: c7:30:b2:75:f9:38:3f:b2:c0:93:b4:6b:e2:03:44:ce:67:a0: df:89:d6:ad:8c:76:a3:13:c3:94:61:2b:6b:d9:6c:c1:07:0a: 22:07:85:6c:85:24:46:a9:be:3f:8b:78:84:82:7e:24:0c:9d: fd:81:37:e3:25:a8:ed:36:4e:95:2c:c9:9c:90:da:ec:a9:42: 3c:ad:b6:02 SHA1 Fingerprint=1B:4B:39:61:26:27:6B:64:91:A2:68:6D:D7:02:43:21:2D:1F:1D:96 -----BEGIN CERTIFICATE----- MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRS MRgwFgYDVQQHDA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJp bGltc2VsIHZlIFRla25vbG9qaWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSw VEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ryb25payB2ZSBLcmlwdG9sb2ppIEFy YcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNVBAsMGkthbXUgU2Vy dGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUgS8O2 ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAe Fw0wNzA4MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIx GDAWBgNVBAcMD0dlYnplIC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmls aW1zZWwgdmUgVGVrbm9sb2ppayBBcmHFn3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBU QUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZlIEtyaXB0b2xvamkgQXJh xZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2FtdSBTZXJ0 aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7Zr IFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIB IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4h gb46ezzb8R1Sf1n68yJMlaCQvEhOEav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yK O7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1xnnRFDDtG1hba+818qEhTsXO fJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR6Oqeyjh1jmKw lZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQID AQABo0IwQDAdBgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/ BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmP NOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4N5EY3ATIZJkrGG2AA1nJrvhY0D7t wyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLTy9LQQfMmNkqblWwM 7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYhLBOh gLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5n oN+J1q2MdqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUs yZyQ2uypQjyttgI= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C=NO, O=Buypass AS-983163327, CN=Buypass Class 2 CA 1 Validity Not Before: Oct 13 10:25:09 2006 GMT Not After : Oct 13 10:25:09 2016 GMT Subject: C=NO, O=Buypass AS-983163327, CN=Buypass Class 2 CA 1 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:8b:3c:07:45:d8:f6:df:e6:c7:ca:ba:8d:43:c5: 47:8d:b0:5a:c1:38:db:92:84:1c:af:13:d4:0f:6f: 36:46:20:c4:2e:cc:71:70:34:a2:34:d3:37:2e:d8: dd:3a:77:2f:c0:eb:29:e8:5c:d2:b5:a9:91:34:87: 22:59:fe:cc:db:e7:99:af:96:c1:a8:c7:40:dd:a5: 15:8c:6e:c8:7c:97:03:cb:e6:20:f2:d7:97:5f:31: a1:2f:37:d2:be:ee:be:a9:ad:a8:4c:9e:21:66:43: 3b:a8:bc:f3:09:a3:38:d5:59:24:c1:c2:47:76:b1: 88:5c:82:3b:bb:2b:a6:04:d7:8c:07:8f:cd:d5:41: 1d:f0:ae:b8:29:2c:94:52:60:34:94:3b:da:e0:38: d1:9d:33:3e:15:f4:93:32:c5:00:da:b5:29:66:0e: 3a:78:0f:21:52:5f:02:e5:92:7b:25:d3:92:1e:2f: 15:9d:81:e4:9d:8e:e8:ef:89:ce:14:4c:54:1d:1c: 81:12:4d:70:a8:be:10:05:17:7e:1f:d1:b8:57:55: ed:cd:bb:52:c2:b0:1e:78:c2:4d:36:68:cb:56:26: c1:52:c1:bd:76:f7:58:d5:72:7e:1f:44:76:bb:00: 89:1d:16:9d:51:35:ef:4d:c2:56:ef:6b:e0:8c:3b: 0d:e9 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 3F:8D:9A:59:8B:FC:7B:7B:9C:A3:AF:38:B0:39:ED:90:71:80:D6:C8 X509v3 Key Usage: critical Certificate Sign, CRL Sign Signature Algorithm: sha1WithRSAEncryption 15:1a:7e:13:8a:b9:e8:07:a3:4b:27:32:b2:40:91:f2:21:d1: 64:85:be:63:6a:d2:cf:81:c2:15:d5:7a:7e:0c:29:ac:37:1e: 1c:7c:76:52:95:da:b5:7f:23:a1:29:77:65:c9:32:9d:a8:2e: 56:ab:60:76:ce:16:b4:8d:7f:78:c0:d5:99:51:83:7f:5e:d9: be:0c:a8:50:ed:22:c7:ad:05:4c:76:fb:ed:ee:1e:47:64:f6: f7:27:7d:5c:28:0f:45:c5:5c:62:5e:a6:9a:91:91:b7:53:17: 2e:dc:ad:60:9d:96:64:39:bd:67:68:b2:ae:05:cb:4d:e7:5f: 1f:57:86:d5:20:9c:28:fb:6f:13:38:f5:f6:11:92:f6:7d:99: 5e:1f:0c:e8:ab:44:24:29:72:40:3d:36:52:af:8c:58:90:73: c1:ec:61:2c:79:a1:ec:87:b5:3f:da:4d:d9:21:00:30:de:90: da:0e:d3:1a:48:a9:3e:85:0b:14:8b:8c:bc:41:9e:6a:f7:0e: 70:c0:35:f7:39:a2:5d:66:d0:7b:59:9f:a8:47:12:9a:27:23: a4:2d:8e:27:83:92:20:a1:d7:15:7f:f1:2e:18:ee:f4:48:7f: 2f:7f:f1:a1:18:b5:a1:0b:94:a0:62:20:32:9c:1d:f6:d4:ef: bf:4c:88:68 SHA1 Fingerprint=A0:A1:AB:90:C9:FC:84:7B:3B:12:61:E8:97:7D:5F:D3:22:61:D3:CC -----BEGIN CERTIFICATE----- MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg Q2xhc3MgMiBDQSAxMB4XDTA2MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzEL MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD VQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP ADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7McXA0 ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLX l18xoS830r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVB HfCuuCkslFJgNJQ72uA40Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B 5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/RuFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3 WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNCMEAwDwYDVR0TAQH/BAUw AwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0PAQH/BAQD AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLP gcIV1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+ DKhQ7SLHrQVMdvvt7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKu BctN518fV4bVIJwo+28TOPX2EZL2fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHs h7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5wwDX3OaJdZtB7WZ+oRxKaJyOk LY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 2 (0x2) Signature Algorithm: sha1WithRSAEncryption Issuer: C=NO, O=Buypass AS-983163327, CN=Buypass Class 3 CA 1 Validity Not Before: May 9 14:13:03 2005 GMT Not After : May 9 14:13:03 2015 GMT Subject: C=NO, O=Buypass AS-983163327, CN=Buypass Class 3 CA 1 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:a4:8e:d7:74:d9:29:64:de:5f:1f:87:80:91:ea: 4e:39:e6:19:c6:44:0b:80:d5:0b:af:53:07:8b:12: bd:e6:67:f0:02:b1:89:f6:60:8a:c4:5b:b0:42:d1: c0:21:a8:cb:e1:9b:ef:64:51:b6:a7:cf:15:f5:74: 80:68:04:90:a0:58:a2:e6:74:a6:53:53:55:48:63: 3f:92:56:dd:24:4e:8e:f8:ba:2b:ff:f3:34:8a:9e: 28:d7:34:9f:ac:2f:d6:0f:f1:a4:2f:bd:52:b2:49: 85:6d:39:35:f0:44:30:93:46:24:f3:b6:e7:53:fb: bc:61:af:a9:a3:14:fb:c2:17:17:84:6c:e0:7c:88: f8:c9:1c:57:2c:f0:3d:7e:94:bc:25:93:84:e8:9a: 00:9a:45:05:42:57:80:f4:4e:ce:d9:ae:39:f6:c8: 53:10:0c:65:3a:47:7b:60:c2:d6:fa:91:c9:c6:71: 6c:bd:91:87:3c:91:86:49:ab:f3:0f:a0:6c:26:76: 5e:1c:ac:9b:71:e5:8d:bc:9b:21:1e:9c:d6:38:7e: 24:80:15:31:82:96:b1:49:d3:62:37:5b:88:0c:0a: 62:34:fe:a7:48:7e:99:b1:30:8b:90:37:95:1c:a8: 1f:a5:2c:8d:f4:55:c8:db:dd:59:0a:c2:ad:78:a0: f4:8b Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 38:14:E6:C8:F0:A9:A4:03:F4:4E:3E:22:A3:5B:F2:D6:E0:AD:40:74 X509v3 Key Usage: critical Certificate Sign, CRL Sign Signature Algorithm: sha1WithRSAEncryption 01:67:a3:8c:c9:25:3d:13:63:5d:16:6f:ec:a1:3e:09:5c:91: 15:2a:2a:d9:80:21:4f:05:dc:bb:a5:89:ab:13:33:2a:9e:38: b7:8c:6f:02:72:63:c7:73:77:1e:09:06:ba:3b:28:7b:a4:47: c9:61:6b:08:08:20:fc:8a:05:8a:1f:bc:ba:c6:c2:fe:cf:6e: ec:13:33:71:67:2e:69:fa:a9:2c:3f:66:c0:12:59:4d:0b:54: 02:92:84:bb:db:12:ef:83:70:70:78:c8:53:fa:df:c6:c6:ff: dc:88:2f:07:c0:49:9d:32:57:60:d3:f2:f6:99:29:5f:e7:aa: 01:cc:ac:33:a8:1c:0a:bb:91:c4:03:a0:6f:b6:34:f9:86:d3: b3:76:54:98:f4:4a:81:b3:53:9d:4d:40:ec:e5:77:13:45:af: 5b:aa:1f:d8:2f:4c:82:7b:fe:2a:c4:58:bb:4f:fc:9e:fd:03: 65:1a:2a:0e:c3:a5:20:16:94:6b:79:a6:a2:12:b4:bb:1a:a4: 23:7a:5f:f0:ae:84:24:e4:f3:2b:fb:8a:24:a3:27:98:65:da: 30:75:76:fc:19:91:e8:db:eb:9b:3f:32:bf:40:97:07:26:ba: cc:f3:94:85:4a:7a:27:93:cf:90:42:d4:b8:5b:16:a6:e7:cb: 40:03:dd:79 SHA1 Fingerprint=61:57:3A:11:DF:0E:D8:7E:D5:92:65:22:EA:D0:56:D7:44:B3:23:71 -----BEGIN CERTIFICATE----- MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg Q2xhc3MgMyBDQSAxMB4XDTA1MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzEL MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD VQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP ADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKxifZg isRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//z NIqeKNc0n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI +MkcVyzwPX6UvCWThOiaAJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2R hzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+ mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNCMEAwDwYDVR0TAQH/BAUw AwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0PAQH/BAQD AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFP Bdy7pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27s EzNxZy5p+qksP2bAEllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2 mSlf56oBzKwzqBwKu5HEA6BvtjT5htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yC e/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQjel/wroQk5PMr+4okoyeYZdow dXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915 -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 5525761995591021570 (0x4caf73421c8e7402) Signature Algorithm: sha1WithRSAEncryption Issuer: CN=EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xC4\xB1c\xC4\xB1s\xC4\xB1, O=EBG Bili\xC5\x9Fim Teknolojileri ve Hizmetleri A.\xC5\x9E., C=TR Validity Not Before: Aug 17 00:21:09 2006 GMT Not After : Aug 14 00:31:09 2016 GMT Subject: CN=EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xC4\xB1c\xC4\xB1s\xC4\xB1, O=EBG Bili\xC5\x9Fim Teknolojileri ve Hizmetleri A.\xC5\x9E., C=TR Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:ee:a0:84:61:d0:3a:6a:66:10:32:d8:31:38:7f: a7:a7:e5:fd:a1:e1:fb:97:77:b8:71:96:e8:13:96: 46:83:4f:b6:f2:5f:72:56:6e:13:60:a5:01:91:e2: 5b:c5:cd:57:1f:77:63:51:ff:2f:3d:db:b9:3f:aa: a9:35:e7:79:d0:f5:d0:24:b6:21:ea:eb:23:94:fe: 29:bf:fb:89:91:0c:64:9a:05:4a:2b:cc:0c:ee:f1: 3d:9b:82:69:a4:4c:f8:9a:6f:e7:22:da:10:ba:5f: 92:fc:18:27:0a:a8:aa:44:fa:2e:2c:b4:fb:46:9a: 08:03:83:72:ab:88:e4:6a:72:c9:e5:65:1f:6e:2a: 0f:9d:b3:e8:3b:e4:0c:6e:7a:da:57:fd:d7:eb:79: 8b:5e:20:06:d3:76:0b:6c:02:95:a3:96:e4:cb:76: 51:d1:28:9d:a1:1a:fc:44:a2:4d:cc:7a:76:a8:0d: 3d:bf:17:4f:22:88:50:fd:ae:b6:ec:90:50:4a:5b: 9f:95:41:aa:ca:0f:b2:4a:fe:80:99:4e:a3:46:15: ab:f8:73:42:6a:c2:66:76:b1:0a:26:15:dd:93:92: ec:db:a9:5f:54:22:52:91:70:5d:13:ea:48:ec:6e: 03:6c:d9:dd:6c:fc:eb:0d:03:ff:a6:83:12:9b:f1: a9:93:0f:c5:26:4c:31:b2:63:99:61:72:e7:2a:64: 99:d2:b8:e9:75:e2:7c:a9:a9:9a:1a:aa:c3:56:db: 10:9a:3c:83:52:b6:7b:96:b7:ac:87:77:a8:b9:f2: 67:0b:94:43:b3:af:3e:73:fa:42:36:b1:25:c5:0a: 31:26:37:56:67:ba:a3:0b:7d:d6:f7:89:cd:67:a1: b7:3a:1e:66:4f:f6:a0:55:14:25:4c:2c:33:0d:a6: 41:8c:bd:04:31:6a:10:72:0a:9d:0e:2e:76:bd:5e: f3:51:89:8b:a8:3f:55:73:bf:db:3a:c6:24:05:96: 92:48:aa:4b:8d:2a:03:e5:57:91:10:f4:6a:28:15: 6e:47:77:84:5c:51:74:9f:19:e9:e6:1e:63:16:39: e3:11:15:e3:58:1a:44:bd:cb:c4:6c:66:d7:84:06: df:30:f4:37:a2:43:22:79:d2:10:6c:df:bb:e6:13: 11:fc:9d:84:0a:13:7b:f0:3b:d0:fc:a3:0a:d7:89: ea:96:7e:8d:48:85:1e:64:5f:db:54:a2:ac:d5:7a: 02:79:6b:d2:8a:f0:67:da:65:72:0d:14:70:e4:e9: 8e:78:8f:32:74:7c:57:f2:d6:d6:f4:36:89:1b:f8: 29:6c:8b:b9:f6:97:d1:a4:2e:aa:be:0b:19:c2:45: e9:70:5d Exponent: 40409 (0x9dd9) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: E7:CE:C6:4F:FC:16:67:96:FA:4A:A3:07:C1:04:A7:CB:6A:DE:DA:47 X509v3 Authority Key Identifier: keyid:E7:CE:C6:4F:FC:16:67:96:FA:4A:A3:07:C1:04:A7:CB:6A:DE:DA:47 Signature Algorithm: sha1WithRSAEncryption 9b:98:9a:5d:be:f3:28:23:76:c6:6c:f7:7f:e6:40:9e:c0:36: dc:95:0d:1d:ad:15:c5:36:d8:d5:39:ef:f2:1e:22:5e:b3:82: b4:5d:bb:4c:1a:ca:92:0d:df:47:24:1e:b3:24:da:91:88:e9: 83:70:dd:93:d7:e9:ba:b3:df:16:5a:3e:de:e0:c8:fb:d3:fd: 6c:29:f8:15:46:a0:68:26:cc:93:52:ae:82:01:93:90:ca:77: ca:4d:49:ef:e2:5a:d9:2a:bd:30:ce:4c:b2:81:b6:30:ce:59: 4f:da:59:1d:6a:7a:a4:45:b0:82:26:81:86:76:f5:f5:10:00: b8:ee:b3:09:e8:4f:87:02:07:ae:24:5c:f0:5f:ac:0a:30:cc: 8a:40:a0:73:04:c1:fb:89:24:f6:9a:1c:5c:b7:3c:0a:67:36: 05:08:31:b3:af:d8:01:68:2a:e0:78:8f:74:de:b8:51:a4:8c: 6c:20:3d:a2:fb:b3:d4:09:fd:7b:c2:80:aa:93:6c:29:98:21: a8:bb:16:f3:a9:12:5f:74:b5:87:98:f2:95:26:df:34:ef:8a: 53:91:88:5d:1a:94:a3:3f:7c:22:f8:d7:88:ba:a6:8c:96:a8: 3d:52:34:62:9f:00:1e:54:55:42:67:c6:4d:46:8f:bb:14:45: 3d:0a:96:16:8e:10:a1:97:99:d5:d3:30:85:cc:de:b4:72:b7: bc:8a:3c:18:29:68:fd:dc:71:07:ee:24:39:6a:fa:ed:a5:ac: 38:2f:f9:1e:10:0e:06:71:1a:10:4c:fe:75:7e:ff:1e:57:39: 42:ca:d7:e1:15:a1:56:55:59:1b:d1:a3:af:11:d8:4e:c3:a5: 2b:ef:90:bf:c0:ec:82:13:5b:8d:d6:72:2c:93:4e:8f:6a:29: df:85:3c:d3:0d:e0:a2:18:12:cc:55:2f:47:b7:a7:9b:02:fe: 41:f6:88:4c:6d:da:a9:01:47:83:64:27:62:10:82:d6:12:7b: 5e:03:1f:34:a9:c9:91:fe:af:5d:6d:86:27:b7:23:aa:75:18: ca:20:e7:b0:0f:d7:89:0e:a6:67:22:63:f4:83:41:2b:06:4b: bb:58:d5:d1:d7:b7:b9:10:63:d8:89:4a:b4:aa:dd:16:63:f5: 6e:be:60:a1:f8:ed:e8:d6:90:4f:1a:c6:c5:a0:29:d3:a7:21: a8:f5:5a:3c:f7:c7:49:a2:21:9a:4a:95:52:20:96:72:9a:66: cb:f7:d2:86:43:7c:22:be:96:f9:bd:01:a8:47:dd:e5:3b:40: f9:75:2b:9b:2b:46:64:86:8d:1e:f4:8f:fb:07:77:d0:ea:49: a2:1c:8d:52:14:a6:0a:93 SHA1 Fingerprint=8C:96:BA:EB:DD:2B:07:07:48:EE:30:32:66:A0:F3:98:6E:7C:AE:58 -----BEGIN CERTIFICATE----- MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNV BAMML0VCRyBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx c8SxMTcwNQYDVQQKDC5FQkcgQmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXpt ZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAeFw0wNjA4MTcwMDIxMDlaFw0xNjA4 MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25payBTZXJ0aWZpa2Eg SGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2ltIFRl a25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIi MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h 4fuXd7hxlugTlkaDT7byX3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAk tiHq6yOU/im/+4mRDGSaBUorzAzu8T2bgmmkTPiab+ci2hC6X5L8GCcKqKpE+i4s tPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfreYteIAbTdgtsApWjluTL dlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZTqNGFav4 c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8Um TDGyY5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z +kI2sSXFCjEmN1ZnuqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0O Lna9XvNRiYuoP1Vzv9s6xiQFlpJIqkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMW OeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vmExH8nYQKE3vwO9D8owrXieqW fo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0Nokb+Clsi7n2 l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB /wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgw FoAU587GT/wWZ5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+ 8ygjdsZs93/mQJ7ANtyVDR2tFcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI 6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgmzJNSroIBk5DKd8pNSe/iWtkqvTDO TLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64kXPBfrAowzIpAoHME wfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqTbCmY Iai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJn xk1Gj7sURT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4Q DgZxGhBM/nV+/x5XOULK1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9q Kd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11t hie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQY9iJSrSq3RZj9W6+YKH4 7ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9AahH3eU7 QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 35210227249154 (0x200605167002) Signature Algorithm: sha1WithRSAEncryption Issuer: C=RO, O=certSIGN, OU=certSIGN ROOT CA Validity Not Before: Jul 4 17:20:04 2006 GMT Not After : Jul 4 17:20:04 2031 GMT Subject: C=RO, O=certSIGN, OU=certSIGN ROOT CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:b7:33:b9:7e:c8:25:4a:8e:b5:db:b4:28:1b:aa: 57:90:e8:d1:22:d3:64:ba:d3:93:e8:d4:ac:86:61: 40:6a:60:57:68:54:84:4d:bc:6a:54:02:05:ff:df: 9b:9a:2a:ae:5d:07:8f:4a:c3:28:7f:ef:fb:2b:fa: 79:f1:c7:ad:f0:10:53:24:90:8b:66:c9:a8:88:ab: af:5a:a3:00:e9:be:ba:46:ee:5b:73:7b:2c:17:82: 81:5e:62:2c:a1:02:65:b3:bd:c5:2b:00:7e:c4:fc: 03:33:57:0d:ed:e2:fa:ce:5d:45:d6:38:cd:35:b6: b2:c1:d0:9c:81:4a:aa:e4:b2:01:5c:1d:8f:5f:99: c4:b1:ad:db:88:21:eb:90:08:82:80:f3:30:a3:43: e6:90:82:ae:55:28:49:ed:5b:d7:a9:10:38:0e:fe: 8f:4c:5b:9b:46:ea:41:f5:b0:08:74:c3:d0:88:33: b6:7c:d7:74:df:dc:84:d1:43:0e:75:39:a1:25:40: 28:ea:78:cb:0e:2c:2e:39:9d:8c:8b:6e:16:1c:2f: 26:82:10:e2:e3:65:94:0a:04:c0:5e:f7:5d:5b:f8: 10:e2:d0:ba:7a:4b:fb:de:37:00:00:1a:5b:28:e3: d2:9c:73:3e:32:87:98:a1:c9:51:2f:d7:de:ac:33: b3:4f Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Digital Signature, Non Repudiation, Certificate Sign, CRL Sign X509v3 Subject Key Identifier: E0:8C:9B:DB:25:49:B3:F1:7C:86:D6:B2:42:87:0B:D0:6B:A0:D9:E4 Signature Algorithm: sha1WithRSAEncryption 3e:d2:1c:89:2e:35:fc:f8:75:dd:e6:7f:65:88:f4:72:4c:c9: 2c:d7:32:4e:f3:dd:19:79:47:bd:8e:3b:5b:93:0f:50:49:24: 13:6b:14:06:72:ef:09:d3:a1:a1:e3:40:84:c9:e7:18:32:74: 3c:48:6e:0f:9f:4b:d4:f7:1e:d3:93:86:64:54:97:63:72:50: d5:55:cf:fa:20:93:02:a2:9b:c3:23:93:4e:16:55:76:a0:70: 79:6d:cd:21:1f:cf:2f:2d:bc:19:e3:88:31:f8:59:1a:81:09: c8:97:a6:74:c7:60:c4:5b:cc:57:8e:b2:75:fd:1b:02:09:db: 59:6f:72:93:69:f7:31:41:d6:88:38:bf:87:b2:bd:16:79:f9: aa:e4:be:88:25:dd:61:27:23:1c:b5:31:07:04:36:b4:1a:90: bd:a0:74:71:50:89:6d:bc:14:e3:0f:86:ae:f1:ab:3e:c7:a0: 09:cc:a3:48:d1:e0:db:64:e7:92:b5:cf:af:72:43:70:8b:f9: c3:84:3c:13:aa:7e:92:9b:57:53:93:fa:70:c2:91:0e:31:f9: 9b:67:5d:e9:96:38:5e:5f:b3:73:4e:88:15:67:de:9e:76:10: 62:20:be:55:69:95:43:00:39:4d:f6:ee:b0:5a:4e:49:44:54: 58:5f:42:83 SHA1 Fingerprint=FA:B7:EE:36:97:26:62:FB:2D:B0:2A:F6:BF:03:FD:E8:7C:4B:2F:9B -----BEGIN CERTIFICATE----- MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do 0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ 44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN 9u6wWk5JRFRYX0KD -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1228079105 (0x49330001) Signature Algorithm: sha1WithRSAEncryption Issuer: C=CN, O=CNNIC, CN=CNNIC ROOT Validity Not Before: Apr 16 07:09:14 2007 GMT Not After : Apr 16 07:09:14 2027 GMT Subject: C=CN, O=CNNIC, CN=CNNIC ROOT Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:d3:35:f7:3f:73:77:ad:e8:5b:73:17:c2:d1:6f: ed:55:bc:6e:ea:e8:a4:79:b2:6c:c3:a3:ef:e1:9f: b1:3b:48:85:f5:9a:5c:21:22:10:2c:c5:82:ce:da: e3:9a:6e:37:e1:87:2c:dc:b9:0c:5a:ba:88:55:df: fd:aa:db:1f:31:ea:01:f1:df:39:01:c1:13:fd:48: 52:21:c4:55:df:da:d8:b3:54:76:ba:74:b1:b7:7d: d7:c0:e8:f6:59:c5:4d:c8:bd:ad:1f:14:da:df:58: 44:25:32:19:2a:c7:7e:7e:8e:ae:38:b0:30:7b:47: 72:09:31:f0:30:db:c3:1b:76:29:bb:69:76:4e:57: f9:1b:64:a2:93:56:b7:6f:99:6e:db:0a:04:9c:11: e3:80:1f:cb:63:94:10:0a:a9:e1:64:82:31:f9:8c: 27:ed:a6:99:00:f6:70:93:18:f8:a1:34:86:a3:dd: 7a:c2:18:79:f6:7a:65:35:cf:90:eb:bd:33:93:9f: 53:ab:73:3b:e6:9b:34:20:2f:1d:ef:a9:1d:63:1a: a0:80:db:03:2f:f9:26:1a:86:d2:8d:bb:a9:be:52: 3a:87:67:48:0d:bf:b4:a0:d8:26:be:23:5f:73:37: 7f:26:e6:92:04:a3:7f:cf:20:a7:b7:f3:3a:ca:cb: 99:cb Exponent: 65537 (0x10001) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 Authority Key Identifier: keyid:65:F2:31:AD:2A:F7:F7:DD:52:96:0A:C7:02:C1:0E:EF:A6:D5:3B:11 X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: Digital Signature, Non Repudiation, Key Encipherment, Data Encipherment, Key Agreement, Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 65:F2:31:AD:2A:F7:F7:DD:52:96:0A:C7:02:C1:0E:EF:A6:D5:3B:11 Signature Algorithm: sha1WithRSAEncryption 4b:35:ee:cc:e4:ae:bf:c3:6e:ad:9f:95:3b:4b:3f:5b:1e:df: 57:29:a2:59:ca:38:e2:b9:1a:ff:9e:e6:6e:32:dd:1e:ae:ea: 35:b7:f5:93:91:4e:da:42:e1:c3:17:60:50:f2:d1:5c:26:b9: 82:b7:ea:6d:e4:9c:84:e7:03:79:17:af:98:3d:94:db:c7:ba: 00:e7:b8:bf:01:57:c1:77:45:32:0c:3b:f1:b4:1c:08:b0:fd: 51:a0:a1:dd:9a:1d:13:36:9a:6d:b7:c7:3c:b9:e1:c5:d9:17: fa:83:d5:3d:15:a0:3c:bb:1e:0b:e2:c8:90:3f:a8:86:0c:fc: f9:8b:5e:85:cb:4f:5b:4b:62:11:47:c5:45:7c:05:2f:41:b1: 9e:10:69:1b:99:96:e0:55:79:fb:4e:86:99:b8:94:da:86:38: 6a:93:a3:e7:cb:6e:e5:df:ea:21:55:89:9c:7d:7d:7f:98:f5: 00:89:ee:e3:84:c0:5c:96:b5:c5:46:ea:46:e0:85:55:b6:1b: c9:12:d6:c1:cd:cd:80:f3:02:01:3c:c8:69:cb:45:48:63:d8: 94:d0:ec:85:0e:3b:4e:11:65:f4:82:8c:a6:3d:ae:2e:22:94: 09:c8:5c:ea:3c:81:5d:16:2a:03:97:16:55:09:db:8a:41:82: 9e:66:9b:11 SHA1 Fingerprint=8B:AF:4C:9B:1D:F0:2A:92:F7:DA:12:8E:B9:1B:AC:F4:98:60:4B:6F -----BEGIN CERTIFICATE----- MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJD TjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2 MDcwOTE0WhcNMjcwNDE2MDcwOTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMF Q05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwggEiMA0GCSqGSIb3DQEBAQUAA4IB DwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzDo+/hn7E7SIX1mlwh IhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tizVHa6 dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZO V/kbZKKTVrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrC GHn2emU1z5DrvTOTn1OrczvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gN v7Sg2Ca+I19zN38m5pIEo3/PIKe38zrKy5nLAgMBAAGjczBxMBEGCWCGSAGG+EIB AQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscCwQ7vptU7ETAPBgNVHRMB Af8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991SlgrHAsEO 76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnK OOK5Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvH ugDnuL8BV8F3RTIMO/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7Hgvi yJA/qIYM/PmLXoXLT1tLYhFHxUV8BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fL buXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2G8kS1sHNzYDzAgE8yGnLRUhj 2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5mmxE= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 49 (0x31) Signature Algorithm: sha1WithRSAEncryption Issuer: C=JP, O=Japanese Government, OU=ApplicationCA Validity Not Before: Dec 12 15:00:00 2007 GMT Not After : Dec 12 15:00:00 2017 GMT Subject: C=JP, O=Japanese Government, OU=ApplicationCA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:a7:6d:e0:74:4e:87:8f:a5:06:de:68:a2:db:86: 99:4b:64:0d:71:f0:0a:05:9b:8e:aa:e1:cc:2e:d2: 6a:3b:c1:7a:b4:97:61:8d:8a:be:c6:9a:9c:06:b4: 86:51:e4:37:0e:74:78:7e:5f:8a:7f:94:a4:d7:47: 08:fd:50:5a:56:e4:68:ac:28:73:a0:7b:e9:7f:18: 92:40:4f:2d:9d:f5:ae:44:48:73:36:06:9e:64:2c: 3b:34:23:db:5c:26:e4:71:79:8f:d4:6e:79:22:b9: 93:c1:ca:cd:c1:56:ed:88:6a:d7:a0:39:21:04:57: 2c:a2:f5:bc:47:41:4f:5e:34:22:95:b5:1f:29:6d: 5e:4a:f3:4d:72:be:41:56:20:87:fc:e9:50:47:d7: 30:14:ee:5c:8c:55:ba:59:8d:87:fc:23:de:93:d0: 04:8c:fd:ef:6d:bd:d0:7a:c9:a5:3a:6a:72:33:c6: 4a:0d:05:17:2a:2d:7b:b1:a7:d8:d6:f0:be:f4:3f: ea:0e:28:6d:41:61:23:76:78:c3:b8:65:a4:f3:5a: ae:cc:c2:aa:d9:e7:58:de:b6:7e:9d:85:6e:9f:2a: 0a:6f:9f:03:29:30:97:28:1d:bc:b7:cf:54:29:4e: 51:31:f9:27:b6:28:26:fe:a2:63:e6:41:16:f0:33: 98:47 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: 54:5A:CB:26:3F:71:CC:94:46:0D:96:53:EA:6B:48:D0:93:FE:42:75 X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Alternative Name: DirName:/C=JP/O=\xE6\x97\xA5\xE6\x9C\xAC\xE5\x9B\xBD\xE6\x94\xBF\xE5\xBA\x9C/OU=\xE3\x82\xA2\xE3\x83\x97\xE3\x83\xAA\xE3\x82\xB1\xE3\x83\xBC\xE3\x82\xB7\xE3\x83\xA7\xE3\x83\xB3CA X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: sha1WithRSAEncryption 39:6a:44:76:77:38:3a:ec:a3:67:46:0f:f9:8b:06:a8:fb:6a: 90:31:ce:7e:ec:da:d1:89:7c:7a:eb:2e:0c:bd:99:32:e7:b0: 24:d6:c3:ff:f5:b2:88:09:87:2c:e3:54:e1:a3:a6:b2:08:0b: c0:85:a8:c8:d2:9c:71:f6:1d:9f:60:fc:38:33:13:e1:9e:dc: 0b:5f:da:16:50:29:7b:2f:70:91:0f:99:ba:34:34:8d:95:74: c5:7e:78:a9:66:5d:bd:ca:21:77:42:10:ac:66:26:3d:de:91: ab:fd:15:f0:6f:ed:6c:5f:10:f8:f3:16:f6:03:8a:8f:a7:12: 11:0c:cb:fd:3f:79:c1:9c:fd:62:ee:a3:cf:54:0c:d1:2b:5f: 17:3e:e3:3e:bf:c0:2b:3e:09:9b:fe:88:a6:7e:b4:92:17:fc: 23:94:81:bd:6e:a7:c5:8c:c2:eb:11:45:db:f8:41:c9:96:76: ea:70:5f:79:12:6b:e4:a3:07:5a:05:ef:27:49:cf:21:9f:8a: 4c:09:70:66:a9:26:c1:2b:11:4e:33:d2:0e:fc:d6:6c:d2:0e: 32:64:68:ff:ad:05:78:5f:03:1d:a8:e3:90:ac:24:e0:0f:40: a7:4b:ae:8b:28:b7:82:ca:18:07:e6:b7:5b:74:e9:20:19:7f: b2:1b:89:54 SHA1 Fingerprint=7F:8A:B0:CF:D0:51:87:6A:66:F3:36:0F:47:C8:8D:8C:D3:35:FC:74 -----BEGIN CERTIFICATE----- MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEc MBoGA1UEChMTSmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRp b25DQTAeFw0wNzEyMTIxNTAwMDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYT AkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zlcm5tZW50MRYwFAYDVQQLEw1BcHBs aWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp23gdE6H j6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4fl+K f5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55 IrmTwcrNwVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cw FO5cjFW6WY2H/CPek9AEjP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDiht QWEjdnjDuGWk81quzMKq2edY3rZ+nYVunyoKb58DKTCXKB28t89UKU5RMfkntigm /qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRUWssmP3HMlEYNllPqa0jQ k/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNVBAYTAkpQ MRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOC seODvOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD ggEBADlqRHZ3ODrso2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJ hyzjVOGjprIIC8CFqMjSnHH2HZ9g/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+ eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYDio+nEhEMy/0/ecGc/WLuo89U DNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmWdupwX3kSa+Sj B1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL rosot4LKGAfmt1t06SAZf7IbiVQ= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 15:ac:6e:94:19:b2:79:4b:41:f6:27:a9:c3:18:0f:1f Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, O=GeoTrust Inc., OU=(c) 2008 GeoTrust Inc. - For authorized use only, CN=GeoTrust Primary Certification Authority - G3 Validity Not Before: Apr 2 00:00:00 2008 GMT Not After : Dec 1 23:59:59 2037 GMT Subject: C=US, O=GeoTrust Inc., OU=(c) 2008 GeoTrust Inc. - For authorized use only, CN=GeoTrust Primary Certification Authority - G3 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:dc:e2:5e:62:58:1d:33:57:39:32:33:fa:eb:cb: 87:8c:a7:d4:4a:dd:06:88:ea:64:8e:31:98:a5:38: 90:1e:98:cf:2e:63:2b:f0:46:bc:44:b2:89:a1:c0: 28:0c:49:70:21:95:9f:64:c0:a6:93:12:02:65:26: 86:c6:a5:89:f0:fa:d7:84:a0:70:af:4f:1a:97:3f: 06:44:d5:c9:eb:72:10:7d:e4:31:28:fb:1c:61:e6: 28:07:44:73:92:22:69:a7:03:88:6c:9d:63:c8:52: da:98:27:e7:08:4c:70:3e:b4:c9:12:c1:c5:67:83: 5d:33:f3:03:11:ec:6a:d0:53:e2:d1:ba:36:60:94: 80:bb:61:63:6c:5b:17:7e:df:40:94:1e:ab:0d:c2: 21:28:70:88:ff:d6:26:6c:6c:60:04:25:4e:55:7e: 7d:ef:bf:94:48:de:b7:1d:dd:70:8d:05:5f:88:a5: 9b:f2:c2:ee:ea:d1:40:41:6d:62:38:1d:56:06:c5: 03:47:51:20:19:fc:7b:10:0b:0e:62:ae:76:55:bf: 5f:77:be:3e:49:01:53:3d:98:25:03:76:24:5a:1d: b4:db:89:ea:79:e5:b6:b3:3b:3f:ba:4c:28:41:7f: 06:ac:6a:8e:c1:d0:f6:05:1d:7d:e6:42:86:e3:a5: d5:47 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: C4:79:CA:8E:A1:4E:03:1D:1C:DC:6B:DB:31:5B:94:3E:3F:30:7F:2D Signature Algorithm: sha256WithRSAEncryption 2d:c5:13:cf:56:80:7b:7a:78:bd:9f:ae:2c:99:e7:ef:da:df: 94:5e:09:69:a7:e7:6e:68:8c:bd:72:be:47:a9:0e:97:12:b8: 4a:f1:64:d3:39:df:25:34:d4:c1:cd:4e:81:f0:0f:04:c4:24: b3:34:96:c6:a6:aa:30:df:68:61:73:d7:f9:8e:85:89:ef:0e: 5e:95:28:4a:2a:27:8f:10:8e:2e:7c:86:c4:02:9e:da:0c:77: 65:0e:44:0d:92:fd:fd:b3:16:36:fa:11:0d:1d:8c:0e:07:89: 6a:29:56:f7:72:f4:dd:15:9c:77:35:66:57:ab:13:53:d8:8e: c1:40:c5:d7:13:16:5a:72:c7:b7:69:01:c4:7a:b1:83:01:68: 7d:8d:41:a1:94:18:c1:25:5c:fc:f0:fe:83:02:87:7c:0d:0d: cf:2e:08:5c:4a:40:0d:3e:ec:81:61:e6:24:db:ca:e0:0e:2d: 07:b2:3e:56:dc:8d:f5:41:85:07:48:9b:0c:0b:cb:49:3f:7d: ec:b7:fd:cb:8d:67:89:1a:ab:ed:bb:1e:a3:00:08:08:17:2a: 82:5c:31:5d:46:8a:2d:0f:86:9b:74:d9:45:fb:d4:40:b1:7a: aa:68:2d:86:b2:99:22:e1:c1:2b:c7:9c:f8:f3:5f:a8:82:12: eb:19:11:2d SHA1 Fingerprint=03:9E:ED:B8:0B:E7:A0:3C:69:53:89:3B:20:D2:D9:32:3A:4C:2A:FD -----BEGIN CERTIFICATE----- MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0 BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz +uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn 5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G spki4cErx5z481+oghLrGREt -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 35:fc:26:5c:d9:84:4f:c9:3d:26:3d:57:9b:ae:d7:56 Signature Algorithm: ecdsa-with-SHA384 Issuer: C=US, O=thawte, Inc., OU=(c) 2007 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA - G2 Validity Not Before: Nov 5 00:00:00 2007 GMT Not After : Jan 18 23:59:59 2038 GMT Subject: C=US, O=thawte, Inc., OU=(c) 2007 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA - G2 Subject Public Key Info: Public Key Algorithm: id-ecPublicKey Public-Key: (384 bit) pub: 04:a2:d5:9c:82:7b:95:9d:f1:52:78:87:fe:8a:16: bf:05:e6:df:a3:02:4f:0d:07:c6:00:51:ba:0c:02: 52:2d:22:a4:42:39:c4:fe:8f:ea:c9:c1:be:d4:4d: ff:9f:7a:9e:e2:b1:7c:9a:ad:a7:86:09:73:87:d1: e7:9a:e3:7a:a5:aa:6e:fb:ba:b3:70:c0:67:88:a2: 35:d4:a3:9a:b1:fd:ad:c2:ef:31:fa:a8:b9:f3:fb: 08:c6:91:d1:fb:29:95 ASN1 OID: secp384r1 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 9A:D8:00:30:00:E7:6B:7F:85:18:EE:8B:B6:CE:8A:0C:F8:11:E1:BB Signature Algorithm: ecdsa-with-SHA384 30:66:02:31:00:dd:f8:e0:57:47:5b:a7:e6:0a:c3:bd:f5:80: 8a:97:35:0d:1b:89:3c:54:86:77:28:ca:a1:f4:79:de:b5:e6: 38:b0:f0:65:70:8c:7f:02:54:c2:bf:ff:d8:a1:3e:d9:cf:02: 31:00:c4:8d:94:fc:dc:53:d2:dc:9d:78:16:1f:15:33:23:53: 52:e3:5a:31:5d:9d:ca:ae:bd:13:29:44:0d:27:5b:a8:e7:68: 9c:12:f7:58:3f:2e:72:02:57:a3:8f:a1:14:2e SHA1 Fingerprint=AA:DB:BC:22:23:8F:C4:01:A1:27:BB:38:DD:F4:1D:DB:08:9E:F0:12 -----BEGIN CERTIFICATE----- MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/ BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6 papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3 KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 60:01:97:b7:46:a7:ea:b4:b4:9a:d6:4b:2f:f7:90:fb Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, O=thawte, Inc., OU=Certification Services Division, OU=(c) 2008 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA - G3 Validity Not Before: Apr 2 00:00:00 2008 GMT Not After : Dec 1 23:59:59 2037 GMT Subject: C=US, O=thawte, Inc., OU=Certification Services Division, OU=(c) 2008 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA - G3 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:b2:bf:27:2c:fb:db:d8:5b:dd:78:7b:1b:9e:77: 66:81:cb:3e:bc:7c:ae:f3:a6:27:9a:34:a3:68:31: 71:38:33:62:e4:f3:71:66:79:b1:a9:65:a3:a5:8b: d5:8f:60:2d:3f:42:cc:aa:6b:32:c0:23:cb:2c:41: dd:e4:df:fc:61:9c:e2:73:b2:22:95:11:43:18:5f: c4:b6:1f:57:6c:0a:05:58:22:c8:36:4c:3a:7c:a5: d1:cf:86:af:88:a7:44:02:13:74:71:73:0a:42:59: 02:f8:1b:14:6b:42:df:6f:5f:ba:6b:82:a2:9d:5b: e7:4a:bd:1e:01:72:db:4b:74:e8:3b:7f:7f:7d:1f: 04:b4:26:9b:e0:b4:5a:ac:47:3d:55:b8:d7:b0:26: 52:28:01:31:40:66:d8:d9:24:bd:f6:2a:d8:ec:21: 49:5c:9b:f6:7a:e9:7f:55:35:7e:96:6b:8d:93:93: 27:cb:92:bb:ea:ac:40:c0:9f:c2:f8:80:cf:5d:f4: 5a:dc:ce:74:86:a6:3e:6c:0b:53:ca:bd:92:ce:19: 06:72:e6:0c:5c:38:69:c7:04:d6:bc:6c:ce:5b:f6: f7:68:9c:dc:25:15:48:88:a1:e9:a9:f8:98:9c:e0: f3:d5:31:28:61:11:6c:67:96:8d:39:99:cb:c2:45: 24:39 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: AD:6C:AA:94:60:9C:ED:E4:FF:FA:3E:0A:74:2B:63:03:F7:B6:59:BF Signature Algorithm: sha256WithRSAEncryption 1a:40:d8:95:65:ac:09:92:89:c6:39:f4:10:e5:a9:0e:66:53: 5d:78:de:fa:24:91:bb:e7:44:51:df:c6:16:34:0a:ef:6a:44: 51:ea:2b:07:8a:03:7a:c3:eb:3f:0a:2c:52:16:a0:2b:43:b9: 25:90:3f:70:a9:33:25:6d:45:1a:28:3b:27:cf:aa:c3:29:42: 1b:df:3b:4c:c0:33:34:5b:41:88:bf:6b:2b:65:af:28:ef:b2: f5:c3:aa:66:ce:7b:56:ee:b7:c8:cb:67:c1:c9:9c:1a:18:b8: c4:c3:49:03:f1:60:0e:50:cd:46:c5:f3:77:79:f7:b6:15:e0: 38:db:c7:2f:28:a0:0c:3f:77:26:74:d9:25:12:da:31:da:1a: 1e:dc:29:41:91:22:3c:69:a7:bb:02:f2:b6:5c:27:03:89:f4: 06:ea:9b:e4:72:82:e3:a1:09:c1:e9:00:19:d3:3e:d4:70:6b: ba:71:a6:aa:58:ae:f4:bb:e9:6c:b6:ef:87:cc:9b:bb:ff:39: e6:56:61:d3:0a:a7:c4:5c:4c:60:7b:05:77:26:7a:bf:d8:07: 52:2c:62:f7:70:63:d9:39:bc:6f:1c:c2:79:dc:76:29:af:ce: c5:2c:64:04:5e:88:36:6e:31:d4:40:1a:62:34:36:3f:35:01: ae:ac:63:a0 SHA1 Fingerprint=F1:8B:53:8D:1B:E9:03:B6:A6:F0:56:43:5B:17:15:89:CA:F3:6B:F2 -----BEGIN CERTIFICATE----- MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8 YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9 9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA 2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu MdRAGmI0Nj81Aa6sY6A= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 3c:b2:f4:48:0a:00:e2:fe:eb:24:3b:5e:60:3e:c3:6b Signature Algorithm: ecdsa-with-SHA384 Issuer: C=US, O=GeoTrust Inc., OU=(c) 2007 GeoTrust Inc. - For authorized use only, CN=GeoTrust Primary Certification Authority - G2 Validity Not Before: Nov 5 00:00:00 2007 GMT Not After : Jan 18 23:59:59 2038 GMT Subject: C=US, O=GeoTrust Inc., OU=(c) 2007 GeoTrust Inc. - For authorized use only, CN=GeoTrust Primary Certification Authority - G2 Subject Public Key Info: Public Key Algorithm: id-ecPublicKey Public-Key: (384 bit) pub: 04:15:b1:e8:fd:03:15:43:e5:ac:eb:87:37:11:62: ef:d2:83:36:52:7d:45:57:0b:4a:8d:7b:54:3b:3a: 6e:5f:15:02:c0:50:a6:cf:25:2f:7d:ca:48:b8:c7: 50:63:1c:2a:21:08:7c:9a:36:d8:0b:fe:d1:26:c5: 58:31:30:28:25:f3:5d:5d:a3:b8:b6:a5:b4:92:ed: 6c:2c:9f:eb:dd:43:89:a2:3c:4b:48:91:1d:50:ec: 26:df:d6:60:2e:bd:21 ASN1 OID: secp384r1 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 15:5F:35:57:51:55:FB:25:B2:AD:03:69:FC:01:A3:FA:BE:11:55:D5 Signature Algorithm: ecdsa-with-SHA384 30:64:02:30:64:96:59:a6:e8:09:de:8b:ba:fa:5a:88:88:f0: 1f:91:d3:46:a8:f2:4a:4c:02:63:fb:6c:5f:38:db:2e:41:93: a9:0e:e6:9d:dc:31:1c:b2:a0:a7:18:1c:79:e1:c7:36:02:30: 3a:56:af:9a:74:6c:f6:fb:83:e0:33:d3:08:5f:a1:9c:c2:5b: 9f:46:d6:b6:cb:91:06:63:a2:06:e7:33:ac:3e:a8:81:12:d0: cb:ba:d0:92:0b:b6:9e:96:aa:04:0f:8a SHA1 Fingerprint=8D:17:84:D5:37:F3:03:7D:EC:70:FE:57:8B:51:9A:99:E6:10:D7:B0 -----BEGIN CERTIFICATE----- MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2 MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz rD6ogRLQy7rQkgu2npaqBA+K -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 40:1a:c4:64:21:b3:13:21:03:0e:bb:e4:12:1a:c5:1d Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 2008 VeriSign, Inc. - For authorized use only, CN=VeriSign Universal Root Certification Authority Validity Not Before: Apr 2 00:00:00 2008 GMT Not After : Dec 1 23:59:59 2037 GMT Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 2008 VeriSign, Inc. - For authorized use only, CN=VeriSign Universal Root Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:c7:61:37:5e:b1:01:34:db:62:d7:15:9b:ff:58: 5a:8c:23:23:d6:60:8e:91:d7:90:98:83:7a:e6:58: 19:38:8c:c5:f6:e5:64:85:b4:a2:71:fb:ed:bd:b9: da:cd:4d:00:b4:c8:2d:73:a5:c7:69:71:95:1f:39: 3c:b2:44:07:9c:e8:0e:fa:4d:4a:c4:21:df:29:61: 8f:32:22:61:82:c5:87:1f:6e:8c:7c:5f:16:20:51: 44:d1:70:4f:57:ea:e3:1c:e3:cc:79:ee:58:d8:0e: c2:b3:45:93:c0:2c:e7:9a:17:2b:7b:00:37:7a:41: 33:78:e1:33:e2:f3:10:1a:7f:87:2c:be:f6:f5:f7: 42:e2:e5:bf:87:62:89:5f:00:4b:df:c5:dd:e4:75: 44:32:41:3a:1e:71:6e:69:cb:0b:75:46:08:d1:ca: d2:2b:95:d0:cf:fb:b9:40:6b:64:8c:57:4d:fc:13: 11:79:84:ed:5e:54:f6:34:9f:08:01:f3:10:25:06: 17:4a:da:f1:1d:7a:66:6b:98:60:66:a4:d9:ef:d2: 2e:82:f1:f0:ef:09:ea:44:c9:15:6a:e2:03:6e:33: d3:ac:9f:55:00:c7:f6:08:6a:94:b9:5f:dc:e0:33: f1:84:60:f9:5b:27:11:b4:fc:16:f2:bb:56:6a:80: 25:8d Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign 1.3.6.1.5.5.7.1.12: 0_.].[0Y0W0U..image/gif0!0.0...+..............k...j.H.,{..0%.#http://logo.verisign.com/vslogo.gif X509v3 Subject Key Identifier: B6:77:FA:69:48:47:9F:53:12:D5:C2:EA:07:32:76:07:D1:97:07:19 Signature Algorithm: sha256WithRSAEncryption 4a:f8:f8:b0:03:e6:2c:67:7b:e4:94:77:63:cc:6e:4c:f9:7d: 0e:0d:dc:c8:b9:35:b9:70:4f:63:fa:24:fa:6c:83:8c:47:9d: 3b:63:f3:9a:f9:76:32:95:91:b1:77:bc:ac:9a:be:b1:e4:31: 21:c6:81:95:56:5a:0e:b1:c2:d4:b1:a6:59:ac:f1:63:cb:b8: 4c:1d:59:90:4a:ef:90:16:28:1f:5a:ae:10:fb:81:50:38:0c: 6c:cc:f1:3d:c3:f5:63:e3:b3:e3:21:c9:24:39:e9:fd:15:66: 46:f4:1b:11:d0:4d:73:a3:7d:46:f9:3d:ed:a8:5f:62:d4:f1: 3f:f8:e0:74:57:2b:18:9d:81:b4:c4:28:da:94:97:a5:70:eb: ac:1d:be:07:11:f0:d5:db:dd:e5:8c:f0:d5:32:b0:83:e6:57: e2:8f:bf:be:a1:aa:bf:3d:1d:b5:d4:38:ea:d7:b0:5c:3a:4f: 6a:3f:8f:c0:66:6c:63:aa:e9:d9:a4:16:f4:81:d1:95:14:0e: 7d:cd:95:34:d9:d2:8f:70:73:81:7b:9c:7e:bd:98:61:d8:45: 87:98:90:c5:eb:86:30:c6:35:bf:f0:ff:c3:55:88:83:4b:ef: 05:92:06:71:f2:b8:98:93:b7:ec:cd:82:61:f1:38:e6:4f:97: 98:2a:5a:8d SHA1 Fingerprint=36:79:CA:35:66:87:72:30:4D:30:A5:FB:87:3B:0F:A7:7B:B7:0D:54 -----BEGIN CERTIFICATE----- MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF 9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN /BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4 sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+ seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz 4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+ BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3 7M2CYfE45k+XmCpajQ== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 2f:80:fe:23:8c:0e:22:0f:48:67:12:28:91:87:ac:b3 Signature Algorithm: ecdsa-with-SHA384 Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 2007 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G4 Validity Not Before: Nov 5 00:00:00 2007 GMT Not After : Jan 18 23:59:59 2038 GMT Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 2007 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G4 Subject Public Key Info: Public Key Algorithm: id-ecPublicKey Public-Key: (384 bit) pub: 04:a7:56:7a:7c:52:da:64:9b:0e:2d:5c:d8:5e:ac: 92:3d:fe:01:e6:19:4a:3d:14:03:4b:fa:60:27:20: d9:83:89:69:fa:54:c6:9a:18:5e:55:2a:64:de:06: f6:8d:4a:3b:ad:10:3c:65:3d:90:88:04:89:e0:30: 61:b3:ae:5d:01:a7:7b:de:7c:b2:be:ca:65:61:00: 86:ae:da:8f:7b:d0:89:ad:4d:1d:59:9a:41:b1:bc: 47:80:dc:9e:62:c3:f9 ASN1 OID: secp384r1 X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign 1.3.6.1.5.5.7.1.12: 0_.].[0Y0W0U..image/gif0!0.0...+..............k...j.H.,{..0%.#http://logo.verisign.com/vslogo.gif X509v3 Subject Key Identifier: B3:16:91:FD:EE:A6:6E:E4:B5:2E:49:8F:87:78:81:80:EC:E5:B1:B5 Signature Algorithm: ecdsa-with-SHA384 30:65:02:30:66:21:0c:18:26:60:5a:38:7b:56:42:e0:a7:fc: 36:84:51:91:20:2c:76:4d:43:3d:c4:1d:84:23:d0:ac:d6:7c: 35:06:ce:cd:69:bd:90:0d:db:6c:48:42:1d:0e:aa:42:02:31: 00:9c:3d:48:39:23:39:58:1a:15:12:59:6a:9e:ef:d5:59:b2: 1d:52:2c:99:71:cd:c7:29:df:1b:2a:61:7b:71:d1:de:f3:c0: e5:0d:3a:4a:aa:2d:a7:d8:86:2a:dd:2e:10 SHA1 Fingerprint=22:D5:D8:DF:8F:02:31:D1:8D:F7:9D:B7:CF:8A:2D:64:C9:3F:6C:3A -----BEGIN CERTIFICATE----- MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC 4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 80544274841616 (0x49412ce40010) Signature Algorithm: sha256WithRSAEncryption Issuer: C=HU, L=Budapest, O=NetLock Kft., OU=Tan\xC3\xBAs\xC3\xADtv\xC3\xA1nykiad\xC3\xB3k (Certification Services), CN=NetLock Arany (Class Gold) F\xC5\x91tan\xC3\xBAs\xC3\xADtv\xC3\xA1ny Validity Not Before: Dec 11 15:08:21 2008 GMT Not After : Dec 6 15:08:21 2028 GMT Subject: C=HU, L=Budapest, O=NetLock Kft., OU=Tan\xC3\xBAs\xC3\xADtv\xC3\xA1nykiad\xC3\xB3k (Certification Services), CN=NetLock Arany (Class Gold) F\xC5\x91tan\xC3\xBAs\xC3\xADtv\xC3\xA1ny Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:c4:24:5e:73:be:4b:6d:14:c3:a1:f4:e3:97:90: 6e:d2:30:45:1e:3c:ee:67:d9:64:e0:1a:8a:7f:ca: 30:ca:83:e3:20:c1:e3:f4:3a:d3:94:5f:1a:7c:5b: 6d:bf:30:4f:84:27:f6:9f:1f:49:bc:c6:99:0a:90: f2:0f:f5:7f:43:84:37:63:51:8b:7a:a5:70:fc:7a: 58:cd:8e:9b:ed:c3:46:6c:84:70:5d:da:f3:01:90: 23:fc:4e:30:a9:7e:e1:27:63:e7:ed:64:3c:a0:b8: c9:33:63:fe:16:90:ff:b0:b8:fd:d7:a8:c0:c0:94: 43:0b:b6:d5:59:a6:9e:56:d0:24:1f:70:79:af:db: 39:54:0d:65:75:d9:15:41:94:01:af:5e:ec:f6:8d: f1:ff:ad:64:fe:20:9a:d7:5c:eb:fe:a6:1f:08:64: a3:8b:76:55:ad:1e:3b:28:60:2e:87:25:e8:aa:af: 1f:c6:64:46:20:b7:70:7f:3c:de:48:db:96:53:b7: 39:77:e4:1a:e2:c7:16:84:76:97:5b:2f:bb:19:15: 85:f8:69:85:f5:99:a7:a9:f2:34:a7:a9:b6:a6:03: fc:6f:86:3d:54:7c:76:04:9b:6b:f9:40:5d:00:34: c7:2e:99:75:9d:e5:88:03:aa:4d:f8:03:d2:42:76: c0:1b Exponent: 43147 (0xa88b) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE, pathlen:4 X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: CC:FA:67:93:F0:B6:B8:D0:A5:C0:1E:F3:53:FD:8C:53:DF:83:D7:96 Signature Algorithm: sha256WithRSAEncryption ab:7f:ee:1c:16:a9:9c:3c:51:00:a0:c0:11:08:05:a7:99:e6: 6f:01:88:54:61:6e:f1:b9:18:ad:4a:ad:fe:81:40:23:94:2f: fb:75:7c:2f:28:4b:62:24:81:82:0b:f5:61:f1:1c:6e:b8:61: 38:eb:81:fa:62:a1:3b:5a:62:d3:94:65:c4:e1:e6:6d:82:f8: 2f:25:70:b2:21:26:c1:72:51:1f:8c:2c:c3:84:90:c3:5a:8f: ba:cf:f4:a7:65:a5:eb:98:d1:fb:05:b2:46:75:15:23:6a:6f: 85:63:30:80:f0:d5:9e:1f:29:1c:c2:6c:b0:50:59:5d:90:5b: 3b:a8:0d:30:cf:bf:7d:7f:ce:f1:9d:83:bd:c9:46:6e:20:a6: f9:61:51:ba:21:2f:7b:be:a5:15:63:a1:d4:95:87:f1:9e:b9: f3:89:f3:3d:85:b8:b8:db:be:b5:b9:29:f9:da:37:05:00:49: 94:03:84:44:e7:bf:43:31:cf:75:8b:25:d1:f4:a6:64:f5:92: f6:ab:05:eb:3d:e9:a5:0b:36:62:da:cc:06:5f:36:8b:b6:5e: 31:b8:2a:fb:5e:f6:71:df:44:26:9e:c4:e6:0d:91:b4:2e:75: 95:80:51:6a:4b:30:a6:b0:62:a1:93:f1:9b:d8:ce:c4:63:75: 3f:59:47:b1 SHA1 Fingerprint=06:08:3F:59:3F:15:A1:04:A0:69:A4:6B:A9:03:D0:06:B7:97:09:91 -----BEGIN CERTIFICATE----- MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C +C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 10000012 (0x98968c) Signature Algorithm: sha256WithRSAEncryption Issuer: C=NL, O=Staat der Nederlanden, CN=Staat der Nederlanden Root CA - G2 Validity Not Before: Mar 26 11:18:17 2008 GMT Not After : Mar 25 11:03:10 2020 GMT Subject: C=NL, O=Staat der Nederlanden, CN=Staat der Nederlanden Root CA - G2 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:c5:59:e7:6f:75:aa:3e:4b:9c:b5:b8:ac:9e:0b: e4:f9:d9:ca:ab:5d:8f:b5:39:10:82:d7:af:51:e0: 3b:e1:00:48:6a:cf:da:e1:06:43:11:99:aa:14:25: 12:ad:22:e8:00:6d:43:c4:a9:b8:e5:1f:89:4b:67: bd:61:48:ef:fd:d2:e0:60:88:e5:b9:18:60:28:c3: 77:2b:ad:b0:37:aa:37:de:64:59:2a:46:57:e4:4b: b9:f8:37:7c:d5:36:e7:80:c1:b6:f3:d4:67:9b:96: e8:ce:d7:c6:0a:53:d0:6b:49:96:f3:a3:0b:05:77: 48:f7:25:e5:70:ac:30:14:20:25:e3:7f:75:5a:e5: 48:f8:4e:7b:03:07:04:fa:82:61:87:6e:f0:3b:c4: a4:c7:d0:f5:74:3e:a5:5d:1a:08:f2:9b:25:d2:f6: ac:04:26:3e:55:3a:62:28:a5:7b:b2:30:af:f8:37: c2:d1:ba:d6:38:fd:f4:ef:49:30:37:99:26:21:48: 85:01:a9:e5:16:e7:dc:90:55:df:0f:e8:38:cd:99: 37:21:4f:5d:f5:22:6f:6a:c5:12:16:60:17:55:f2: 65:66:a6:a7:30:91:38:c1:38:1d:86:04:84:ba:1a: 25:78:5e:9d:af:cc:50:60:d6:13:87:52:ed:63:1f: 6d:65:7d:c2:15:18:74:ca:e1:7e:64:29:8c:72:d8: 16:13:7d:0b:49:4a:f1:28:1b:20:74:6b:c5:3d:dd: b0:aa:48:09:3d:2e:82:94:cd:1a:65:d9:2b:88:9a: 99:bc:18:7e:9f:ee:7d:66:7c:3e:bd:94:b8:81:ce: cd:98:30:78:c1:6f:67:d0:be:5f:e0:68:ed:de:e2: b1:c9:2c:59:78:92:aa:df:2b:60:63:f2:e5:5e:b9: e3:ca:fa:7f:50:86:3e:a2:34:18:0c:09:68:28:11: 1c:e4:e1:b9:5c:3e:47:ba:32:3f:18:cc:5b:84:f5: f3:6b:74:c4:72:74:e1:e3:8b:a0:4a:bd:8d:66:2f: ea:ad:35:da:20:d3:88:82:61:f0:12:22:b6:bc:d0: d5:a4:ec:af:54:88:25:24:3c:a7:6d:b1:72:29:3f: 3e:57:a6:7f:55:af:6e:26:c6:fe:e7:cc:40:5c:51: 44:81:0a:78:de:4a:ce:55:bf:1d:d5:d9:b7:56:ef: f0:76:ff:0b:79:b5:af:bd:fb:a9:69:91:46:97:68: 80:14:36:1d:b3:7f:bb:29:98:36:a5:20:fa:82:60: 62:33:a4:ec:d6:ba:07:a7:6e:c5:cf:14:a6:e7:d6: 92:34:d8:81:f5:fc:1d:5d:aa:5c:1e:f6:a3:4d:3b: b8:f7:39 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Certificate Policies: Policy: X509v3 Any Policy CPS: http://www.pkioverheid.nl/policies/root-policy-G2 X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 91:68:32:87:15:1D:89:E2:B5:F1:AC:36:28:34:8D:0B:7C:62:88:EB Signature Algorithm: sha256WithRSAEncryption a8:41:4a:67:2a:92:81:82:50:6e:e1:d7:d8:b3:39:3b:f3:02: 15:09:50:51:ef:2d:bd:24:7b:88:86:3b:f9:b4:bc:92:09:96: b9:f6:c0:ab:23:60:06:79:8c:11:4e:51:d2:79:80:33:fb:9d: 48:be:ec:41:43:81:1f:7e:47:40:1c:e5:7a:08:ca:aa:8b:75: ad:14:c4:c2:e8:66:3c:82:07:a7:e6:27:82:5b:18:e6:0f:6e: d9:50:3e:8a:42:18:29:c6:b4:56:fc:56:10:a0:05:17:bd:0c: 23:7f:f4:93:ed:9c:1a:51:be:dd:45:41:bf:91:24:b4:1f:8c: e9:5f:cf:7b:21:99:9f:95:9f:39:3a:46:1c:6c:f9:cd:7b:9c: 90:cd:28:a9:c7:a9:55:bb:ac:62:34:62:35:13:4b:14:3a:55: 83:b9:86:8d:92:a6:c6:f4:07:25:54:cc:16:57:12:4a:82:78: c8:14:d9:17:82:26:2d:5d:20:1f:79:ae:fe:d4:70:16:16:95: 83:d8:35:39:ff:52:5d:75:1c:16:c5:13:55:cf:47:cc:75:65: 52:4a:de:f0:b0:a7:e4:0a:96:0b:fb:ad:c2:e2:25:84:b2:dd: e4:bd:7e:59:6c:9b:f0:f0:d8:e7:ca:f2:e9:97:38:7e:89:be: cc:fb:39:17:61:3f:72:db:3a:91:d8:65:01:19:1d:ad:50:a4: 57:0a:7c:4b:bc:9c:71:73:2a:45:51:19:85:cc:8e:fd:47:a7: 74:95:1d:a8:d1:af:4e:17:b1:69:26:c2:aa:78:57:5b:c5:4d: a7:e5:9e:05:17:94:ca:b2:5f:a0:49:18:8d:34:e9:26:6c:48: 1e:aa:68:92:05:e1:82:73:5a:9b:dc:07:5b:08:6d:7d:9d:d7: 8d:21:d9:fc:14:20:aa:c2:45:df:3f:e7:00:b2:51:e4:c2:f8: 05:b9:79:1a:8c:34:f3:9e:5b:e4:37:5b:6b:4a:df:2c:57:8a: 40:5a:36:ba:dd:75:44:08:37:42:70:0c:fe:dc:5e:21:a0:a3: 8a:c0:90:9c:68:da:50:e6:45:10:47:78:b6:4e:d2:65:c9:c3: 37:df:e1:42:63:b0:57:37:45:2d:7b:8a:9c:bf:05:ea:65:55: 33:f7:39:10:c5:28:2a:21:7a:1b:8a:c4:24:f9:3f:15:c8:9a: 15:20:f5:55:62:96:ed:6d:93:50:bc:e4:aa:78:ad:d9:cb:0a: 65:87:a6:66:c1:c4:81:a3:77:3a:58:1e:0b:ee:83:8b:9d:1e: d2:52:a4:cc:1d:6f:b0:98:6d:94:31:b5:f8:71:0a:dc:b9:fc: 7d:32:60:e6:eb:af:8a:01 SHA1 Fingerprint=59:AF:82:79:91:86:C7:B4:75:07:CB:CF:03:57:46:EB:04:DD:B7:16 -----BEGIN CERTIFICATE----- MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291 qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp 5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy 5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv 6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6 B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/ BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen 5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897 IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL +63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C=SK, L=Bratislava, O=Disig a.s., CN=CA Disig Validity Not Before: Mar 22 01:39:34 2006 GMT Not After : Mar 22 01:39:34 2016 GMT Subject: C=SK, L=Bratislava, O=Disig a.s., CN=CA Disig Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:92:f6:31:c1:7d:88:fd:99:01:a9:d8:7b:f2:71: 75:f1:31:c6:f3:75:66:fa:51:28:46:84:97:78:34: bc:6c:fc:bc:45:59:88:26:18:4a:c4:37:1f:a1:4a: 44:bd:e3:71:04:f5:44:17:e2:3f:fc:48:58:6f:5c: 9e:7a:09:ba:51:37:22:23:66:43:21:b0:3c:64:a2: f8:6a:15:0e:3f:eb:51:e1:54:a9:dd:06:99:d7:9a: 3c:54:8b:39:03:3f:0f:c5:ce:c6:eb:83:72:02:a8: 1f:71:f3:2d:f8:75:08:db:62:4c:e8:fa:ce:f9:e7: 6a:1f:b6:6b:35:82:ba:e2:8f:16:92:7d:05:0c:6c: 46:03:5d:c0:ed:69:bf:3a:c1:8a:a0:e8:8e:d9:b9: 45:28:87:08:ec:b4:ca:15:be:82:dd:b5:44:8b:2d: ad:86:0c:68:62:6d:85:56:f2:ac:14:63:3a:c6:d1: 99:ac:34:78:56:4b:cf:b6:ad:3f:8c:8a:d7:04:e5: e3:78:4c:f5:86:aa:f5:8f:fa:3d:6c:71:a3:2d:ca: 67:eb:68:7b:6e:33:a9:0c:82:28:a8:4c:6a:21:40: 15:20:0c:26:5b:83:c2:a9:16:15:c0:24:82:5d:2b: 16:ad:ca:63:f6:74:00:b0:df:43:c4:10:60:56:67: 63:45 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 8D:B2:49:68:9D:72:08:25:B9:C0:27:F5:50:93:56:48:46:71:F9:8F X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Alternative Name: email:caoperator@disig.sk, URI:http://www.disig.sk/ca X509v3 CRL Distribution Points: Full Name: URI:http://www.disig.sk/ca/crl/ca_disig.crl Full Name: URI:http://ca.disig.sk/ca/crl/ca_disig.crl X509v3 Certificate Policies: Policy: 1.3.158.35975946.0.0.0.1.1.1 Signature Algorithm: sha1WithRSAEncryption 5d:34:74:61:4c:af:3b:d8:ff:9f:6d:58:36:1c:3d:0b:81:0d: 12:2b:46:10:80:fd:e7:3c:27:d0:7a:c8:a9:b6:7e:74:30:33: a3:3a:8a:7b:74:c0:79:79:42:93:6d:ff:b1:29:14:82:ab:21: 8c:2f:17:f9:3f:26:2f:f5:59:c6:ef:80:06:b7:9a:49:29:ec: ce:7e:71:3c:6a:10:41:c0:f6:d3:9a:b2:7c:5a:91:9c:c0:ac: 5b:c8:4d:5e:f7:e1:53:ff:43:77:fc:9e:4b:67:6c:d7:f3:83: d1:a0:e0:7f:25:df:b8:98:0b:9a:32:38:6c:30:a0:f3:ff:08: 15:33:f7:50:4a:7b:3e:a3:3e:20:a9:dc:2f:56:80:0a:ed:41: 50:b0:c9:f4:ec:b2:e3:26:44:00:0e:6f:9e:06:bc:22:96:53: 70:65:c4:50:0a:46:6b:a4:2f:27:81:12:27:13:5f:10:a1:76: ce:8a:7b:37:ea:c3:39:61:03:95:98:3a:e7:6c:88:25:08:fc: 79:68:0d:87:7d:62:f8:b4:5f:fb:c5:d8:4c:bd:58:bc:3f:43: 5b:d4:1e:01:4d:3c:63:be:23:ef:8c:cd:5a:50:b8:68:54:f9: 0a:99:33:11:00:e1:9e:c2:46:77:82:f5:59:06:8c:21:4c:87: 09:cd:e5:a8 SHA1 Fingerprint=2A:C8:D5:8B:57:CE:BF:2F:49:AF:F2:FC:76:8F:51:14:62:90:7A:41 -----BEGIN CERTIFICATE----- MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzET MBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UE AxMIQ0EgRGlzaWcwHhcNMDYwMzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQsw CQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcg YS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw ggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgmGErE Nx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnX mjxUizkDPw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYD XcDtab86wYqg6I7ZuUUohwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhW S8+2rT+MitcE5eN4TPWGqvWP+j1scaMtymfraHtuM6kMgiioTGohQBUgDCZbg8Kp FhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8wgfwwDwYDVR0TAQH/BAUw AwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0PAQH/BAQD AgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cu ZGlzaWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5z ay9jYS9jcmwvY2FfZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2sv Y2EvY3JsL2NhX2Rpc2lnLmNybDAaBgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEw DQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59tWDYcPQuBDRIrRhCA/ec8J9B6 yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3mkkp7M5+cTxq EEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/ CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeB EicTXxChds6KezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFN PGO+I++MzVpQuGhU+QqZMxEA4Z7CRneC9VkGjCFMhwnN5ag= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 999181308 (0x3b8e4bfc) Signature Algorithm: sha1WithRSAEncryption Issuer: emailAddress=pki@sk.ee, C=EE, O=AS Sertifitseerimiskeskus, CN=Juur-SK Validity Not Before: Aug 30 14:23:01 2001 GMT Not After : Aug 26 14:23:01 2016 GMT Subject: emailAddress=pki@sk.ee, C=EE, O=AS Sertifitseerimiskeskus, CN=Juur-SK Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:81:71:36:3e:33:07:d6:e3:30:8d:13:7e:77:32: 46:cb:cf:19:b2:60:31:46:97:86:f4:98:46:a4:c2: 65:45:cf:d3:40:7c:e3:5a:22:a8:10:78:33:cc:88: b1:d3:81:4a:f6:62:17:7b:5f:4d:0a:2e:d0:cf:8b: 23:ee:4f:02:4e:bb:eb:0e:ca:bd:18:63:e8:80:1c: 8d:e1:1c:8d:3d:e0:ff:5b:5f:ea:64:e5:97:e8:3f: 99:7f:0c:0a:09:33:00:1a:53:a7:21:e1:38:4b:d6: 83:1b:ad:af:64:c2:f9:1c:7a:8c:66:48:4d:66:1f: 18:0a:e2:3e:bb:1f:07:65:93:85:b9:1a:b0:b9:c4: fb:0d:11:f6:f5:d6:f9:1b:c7:2c:2b:b7:18:51:fe: e0:7b:f6:a8:48:af:6c:3b:4f:2f:ef:f8:d1:47:1e: 26:57:f0:51:1d:33:96:ff:ef:59:3d:da:4d:d1:15: 34:c7:ea:3f:16:48:7b:91:1c:80:43:0f:3d:b8:05: 3e:d1:b3:95:cd:d8:ca:0f:c2:43:67:db:b7:93:e0: 22:82:2e:be:f5:68:28:83:b9:c1:3b:69:7b:20:da: 4e:9c:6d:e1:ba:cd:8f:7a:6c:b0:09:22:d7:8b:0b: db:1c:d5:5a:26:5b:0d:c0:ea:e5:60:d0:9f:fe:35: df:3f Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.10015.1.1.1 User Notice: Explicit Text: CPS: http://www.sk.ee/cps/ X509v3 CRL Distribution Points: Full Name: URI:http://www.sk.ee/juur/crl/ X509v3 Subject Key Identifier: 04:AA:7A:47:A3:E4:89:AF:1A:CF:0A:40:A7:18:3F:6F:EF:E9:7D:BE X509v3 Authority Key Identifier: keyid:04:AA:7A:47:A3:E4:89:AF:1A:CF:0A:40:A7:18:3F:6F:EF:E9:7D:BE X509v3 Key Usage: critical Digital Signature, Non Repudiation, Key Encipherment, Certificate Sign, CRL Sign Signature Algorithm: sha1WithRSAEncryption 7b:c1:18:94:53:a2:09:f3:fe:26:67:9a:50:e4:c3:05:2f:2b: 35:78:91:4c:7c:a8:11:11:79:4c:49:59:ac:c8:f7:85:65:5c: 46:bb:3b:10:a0:02:af:cd:4f:b5:cc:36:2a:ec:5d:fe:ef:a0: 91:c9:b6:93:6f:7c:80:54:ec:c7:08:70:0d:8e:fb:82:ec:2a: 60:78:69:36:36:d1:c5:9c:8b:69:b5:40:c8:94:65:77:f2:57: 21:66:3b:ce:85:40:b6:33:63:1a:bf:79:1e:fc:5c:1d:d3:1d: 93:1b:8b:0c:5d:85:bd:99:30:32:18:09:91:52:e9:7c:a1:ba: ff:64:92:9a:ec:fe:35:ee:8c:2f:ae:fc:20:86:ec:4a:de:1b: 78:32:37:a6:81:d2:9d:af:5a:12:16:ca:99:5b:fc:6f:6d:0e: c5:a0:1e:86:c9:91:d0:5c:98:82:5f:63:0c:8a:5a:ab:d8:95: a6:cc:cb:8a:d6:bf:64:4b:8e:ca:8a:b2:b0:e9:21:32:9e:aa: a8:85:98:34:81:39:21:3b:a8:3a:52:32:3d:f6:6b:37:86:06: 5a:15:98:dc:f0:11:66:fe:34:20:b7:03:f4:41:10:7d:39:84: 79:96:72:63:b6:96:02:e5:6b:b9:ad:19:4d:bb:c6:44:db:36: cb:2a:9c:8e SHA1 Fingerprint=40:9D:4B:D9:17:B5:5C:27:B6:9B:64:CB:98:22:44:0D:CD:09:B8:89 -----BEGIN CERTIFICATE----- MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcN AQkBFglwa2lAc2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZp dHNlZXJpbWlza2Vza3VzMRAwDgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMw MVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMQsw CQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEQ MA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB AIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOB SvZiF3tfTQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkz ABpTpyHhOEvWgxutr2TC+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvH LCu3GFH+4Hv2qEivbDtPL+/40UceJlfwUR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMP PbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDaTpxt4brNj3pssAki14sL 2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQFMAMBAf8w ggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwIC MIHDHoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDk AGwAagBhAHMAdABhAHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0 AHMAZQBlAHIAaQBtAGkAcwBrAGUAcwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABz AGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABrAGkAbgBuAGkAdABhAG0AaQBz AGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nwcy8wKwYDVR0f BCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcY P2/v6X2+MA4GA1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOi CfP+JmeaUOTDBS8rNXiRTHyoERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+g kcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyLabVAyJRld/JXIWY7zoVAtjNjGr95 HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678IIbsSt4beDI3poHS na9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkhMp6q qIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0Z TbvGRNs2yyqcjg== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1000 (0x3e8) Signature Algorithm: sha1WithRSAEncryption Issuer: C=HK, O=Hongkong Post, CN=Hongkong Post Root CA 1 Validity Not Before: May 15 05:13:14 2003 GMT Not After : May 15 04:52:29 2023 GMT Subject: C=HK, O=Hongkong Post, CN=Hongkong Post Root CA 1 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:ac:ff:38:b6:e9:66:02:49:e3:a2:b4:e1:90:f9: 40:8f:79:f9:e2:bd:79:fe:02:bd:ee:24:92:1d:22: f6:da:85:72:69:fe:d7:3f:09:d4:dd:91:b5:02:9c: d0:8d:5a:e1:55:c3:50:86:b9:29:26:c2:e3:d9:a0: f1:69:03:28:20:80:45:22:2d:56:a7:3b:54:95:56: 22:59:1f:28:df:1f:20:3d:6d:a2:36:be:23:a0:b1: 6e:b5:b1:27:3f:39:53:09:ea:ab:6a:e8:74:b2:c2: 65:5c:8e:bf:7c:c3:78:84:cd:9e:16:fc:f5:2e:4f: 20:2a:08:9f:77:f3:c5:1e:c4:9a:52:66:1e:48:5e: e3:10:06:8f:22:98:e1:65:8e:1b:5d:23:66:3b:b8: a5:32:51:c8:86:aa:a1:a9:9e:7f:76:94:c2:a6:6c: b7:41:f0:d5:c8:06:38:e6:d4:0c:e2:f3:3b:4c:6d: 50:8c:c4:83:27:c1:13:84:59:3d:9e:75:74:b6:d8: 02:5e:3a:90:7a:c0:42:36:72:ec:6a:4d:dc:ef:c4: 00:df:13:18:57:5f:26:78:c8:d6:0a:79:77:bf:f7: af:b7:76:b9:a5:0b:84:17:5d:10:ea:6f:e1:ab:95: 11:5f:6d:3c:a3:5c:4d:83:5b:f2:b3:19:8a:80:8b: 0b:87 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE, pathlen:3 X509v3 Key Usage: critical Digital Signature, Non Repudiation, Certificate Sign, CRL Sign Signature Algorithm: sha1WithRSAEncryption 0e:46:d5:3c:ae:e2:87:d9:5e:81:8b:02:98:41:08:8c:4c:bc: da:db:ee:27:1b:82:e7:6a:45:ec:16:8b:4f:85:a0:f3:b2:70: bd:5a:96:ba:ca:6e:6d:ee:46:8b:6e:e7:2a:2e:96:b3:19:33: eb:b4:9f:a8:b2:37:ee:98:a8:97:b6:2e:b6:67:27:d4:a6:49: fd:1c:93:65:76:9e:42:2f:dc:22:6c:9a:4f:f2:5a:15:39:b1: 71:d7:2b:51:e8:6d:1c:98:c0:d9:2a:f4:a1:82:7b:d5:c9:41: a2:23:01:74:38:55:8b:0f:b9:2e:67:a2:20:04:37:da:9c:0b: d3:17:21:e0:8f:97:79:34:6f:84:48:02:20:33:1b:e6:34:44: 9f:91:70:f4:80:5e:84:43:c2:29:d2:6c:12:14:e4:61:8d:ac: 10:90:9e:84:50:bb:f0:96:6f:45:9f:8a:f3:ca:6c:4f:fa:11: 3a:15:15:46:c3:cd:1f:83:5b:2d:41:12:ed:50:67:41:13:3d: 21:ab:94:8a:aa:4e:7c:c1:b1:fb:a7:d6:b5:27:2f:97:ab:6e: e0:1d:e2:d1:1c:2c:1f:44:e2:fc:be:91:a1:9c:fb:d6:29:53: 73:86:9f:53:d8:43:0e:5d:d6:63:82:71:1d:80:74:ca:f6:e2: 02:6b:d9:5a SHA1 Fingerprint=D6:DA:A8:20:8D:09:D2:15:4D:24:B5:2F:CB:34:6E:B2:58:B2:8A:58 -----BEGIN CERTIFICATE----- MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9 nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3 7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi AmvZWg== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C=JP, O=Japan Certification Services, Inc., CN=SecureSign RootCA11 Validity Not Before: Apr 8 04:56:47 2009 GMT Not After : Apr 8 04:56:47 2029 GMT Subject: C=JP, O=Japan Certification Services, Inc., CN=SecureSign RootCA11 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:fd:77:aa:a5:1c:90:05:3b:cb:4c:9b:33:8b:5a: 14:45:a4:e7:90:16:d1:df:57:d2:21:10:a4:17:fd: df:ac:d6:1f:a7:e4:db:7c:f7:ec:df:b8:03:da:94: 58:fd:5d:72:7c:8c:3f:5f:01:67:74:15:96:e3:02: 3c:87:db:ae:cb:01:8e:c2:f3:66:c6:85:45:f4:02: c6:3a:b5:62:b2:af:fa:9c:bf:a4:e6:d4:80:30:98: f3:0d:b6:93:8f:a9:d4:d8:36:f2:b0:fc:8a:ca:2c: a1:15:33:95:31:da:c0:1b:f2:ee:62:99:86:63:3f: bf:dd:93:2a:83:a8:76:b9:13:1f:b7:ce:4e:42:85: 8f:22:e7:2e:1a:f2:95:09:b2:05:b5:44:4e:77:a1: 20:bd:a9:f2:4e:0a:7d:50:ad:f5:05:0d:45:4f:46: 71:fd:28:3e:53:fb:04:d8:2d:d7:65:1d:4a:1b:fa: cf:3b:b0:31:9a:35:6e:c8:8b:06:d3:00:91:f2:94: 08:65:4c:b1:34:06:00:7a:89:e2:f0:c7:03:59:cf: d5:d6:e8:a7:32:b3:e6:98:40:86:c5:cd:27:12:8b: cc:7b:ce:b7:11:3c:62:60:07:23:3e:2b:40:6e:94: 80:09:6d:b6:b3:6f:77:6f:35:08:50:fb:02:87:c5: 3e:89 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: 5B:F8:4D:4F:B2:A5:86:D4:3A:D2:F1:63:9A:A0:BE:09:F6:57:B7:DE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: sha1WithRSAEncryption a0:a1:38:16:66:2e:a7:56:1f:21:9c:06:fa:1d:ed:b9:22:c5: 38:26:d8:4e:4f:ec:a3:7f:79:de:46:21:a1:87:77:8f:07:08: 9a:b2:a4:c5:af:0f:32:98:0b:7c:66:29:b6:9b:7d:25:52:49: 43:ab:4c:2e:2b:6e:7a:70:af:16:0e:e3:02:6c:fb:42:e6:18: 9d:45:d8:55:c8:e8:3b:dd:e7:e1:f4:2e:0b:1c:34:5c:6c:58: 4a:fb:8c:88:50:5f:95:1c:bf:ed:ab:22:b5:65:b3:85:ba:9e: 0f:b8:ad:e5:7a:1b:8a:50:3a:1d:bd:0d:bc:7b:54:50:0b:b9: 42:af:55:a0:18:81:ad:65:99:ef:be:e4:9c:bf:c4:85:ab:41: b2:54:6f:dc:25:cd:ed:78:e2:8e:0c:8d:09:49:dd:63:7b:5a: 69:96:02:21:a8:bd:52:59:e9:7d:35:cb:c8:52:ca:7f:81:fe: d9:6b:d3:f7:11:ed:25:df:f8:e7:f9:a4:fa:72:97:84:53:0d: a5:d0:32:18:51:76:59:14:6c:0f:eb:ec:5f:80:8c:75:43:83: c3:85:98:ff:4c:9e:2d:0d:e4:77:83:93:4e:b5:96:07:8b:28: 13:9b:8c:19:8d:41:27:49:40:ee:de:e6:23:44:39:dc:a1:22: d6:ba:03:f2 SHA1 Fingerprint=3B:C4:9F:48:F8:F3:73:A0:9C:1E:BD:F8:5B:B1:C3:65:C7:D8:11:B3 -----BEGIN CERTIFICATE----- MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0 MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8 h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9 UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni 8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5 pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN QSdJQO7e5iNEOdyhIta6A/I= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 7029493972724711941 (0x618dc7863b018205) Signature Algorithm: sha1WithRSAEncryption Issuer: CN=ACEDICOM Root, OU=PKI, O=EDICOM, C=ES Validity Not Before: Apr 18 16:24:22 2008 GMT Not After : Apr 13 16:24:22 2028 GMT Subject: CN=ACEDICOM Root, OU=PKI, O=EDICOM, C=ES Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:ff:92:95:e1:68:06:76:b4:2c:c8:58:48:ca:fd: 80:54:29:55:63:24:ff:90:65:9b:10:75:7b:c3:6a: db:62:02:01:f2:18:86:b5:7c:5a:38:b1:e4:58:b9: fb:d3:d8:2d:9f:bd:32:37:bf:2c:15:6d:be:b5:f4: 21:d2:13:91:d9:07:ad:01:05:d6:f3:bd:77:ce:5f: 42:81:0a:f9:6a:e3:83:00:a8:2b:2e:55:13:63:81: ca:47:1c:7b:5c:16:57:7a:1b:83:60:04:3a:3e:65: c3:cd:01:de:de:a4:d6:0c:ba:8e:de:d9:04:ee:17: 56:22:9b:8f:63:fd:4d:16:0b:b7:7b:77:8c:f9:25: b5:d1:6d:99:12:2e:4f:1a:b8:e6:ea:04:92:ae:3d: 11:b9:51:42:3d:87:b0:31:85:af:79:5a:9c:fe:e7: 4e:5e:92:4f:43:fc:ab:3a:ad:a5:12:26:66:b9:e2: 0c:d7:98:ce:d4:58:a5:95:40:0a:b7:44:9d:13:74: 2b:c2:a5:eb:22:15:98:10:d8:8b:c5:04:9f:1d:8f: 60:e5:06:1b:9b:cf:b9:79:a0:3d:a2:23:3f:42:3f: 6b:fa:1c:03:7b:30:8d:ce:6c:c0:bf:e6:1b:5f:bf: 67:b8:84:19:d5:15:ef:7b:cb:90:36:31:62:c9:bc: 02:ab:46:5f:9b:fe:1a:68:94:34:3d:90:8e:ad:f6: e4:1d:09:7f:4a:88:38:3f:be:67:fd:34:96:f5:1d: bc:30:74:cb:38:ee:d5:6c:ab:d4:fc:f4:00:b7:00: 5b:85:32:16:76:33:e9:d8:a3:99:9d:05:00:aa:16: e6:f3:81:7d:6f:7d:aa:86:6d:ad:15:74:d3:c4:a2: 71:aa:f4:14:7d:e7:32:b8:1f:bc:d5:f1:4e:bd:6f: 17:02:39:d7:0e:95:42:3a:c7:00:3e:e9:26:63:11: ea:0b:d1:4a:ff:18:9d:b2:d7:7b:2f:3a:d9:96:fb: e8:1e:92:ae:13:55:c8:d9:27:f6:dc:48:1b:b0:24: c1:85:e3:77:9d:9a:a4:f3:0c:11:1d:0d:c8:b4:14: ee:b5:82:57:09:bf:20:58:7f:2f:22:23:d8:70:cb: 79:6c:c9:4b:f2:a9:2a:c8:fc:87:2b:d7:1a:50:f8: 27:e8:2f:43:e3:3a:bd:d8:57:71:fd:ce:a6:52:5b: f9:dd:4d:ed:e5:f6:6f:89:ed:bb:93:9c:76:21:75: f0:92:4c:29:f7:2f:9c:01:2e:fe:50:46:9e:64:0c: 14:b3:07:5b:c5:c2:73:6c:f1:07:5c:45:24:14:35: ae:83:f1:6a:4d:89:7a:fa:b3:d8:2d:66:f0:36:87: f5:2b:53 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Authority Key Identifier: keyid:A6:B3:E1:2B:2B:49:B6:D7:73:A1:AA:94:F5:01:E7:73:65:4C:AC:50 X509v3 Key Usage: critical Digital Signature, Certificate Sign, CRL Sign X509v3 Subject Key Identifier: A6:B3:E1:2B:2B:49:B6:D7:73:A1:AA:94:F5:01:E7:73:65:4C:AC:50 X509v3 Certificate Policies: Policy: X509v3 Any Policy CPS: http://acedicom.edicomgroup.com/doc Signature Algorithm: sha1WithRSAEncryption ce:2c:0b:52:51:62:26:7d:0c:27:83:8f:c5:f6:da:a0:68:7b: 4f:92:5e:ea:a4:73:32:11:53:44:b2:44:cb:9d:ec:0f:79:42: b3:10:a6:c7:0d:9d:cb:b6:fa:3f:3a:7c:ea:bf:88:53:1b:3c: f7:82:fa:05:35:33:e1:35:a8:57:c0:e7:fd:8d:4f:3f:93:32: 4f:78:66:03:77:07:58:e9:95:c8:7e:3e:d0:79:00:8c:f2:1b: 51:33:9b:bc:94:e9:3a:7b:6e:52:2d:32:9e:23:a4:45:fb:b6: 2e:13:b0:8b:18:b1:dd:ce:d5:1d:a7:42:7f:55:be:fb:5b:bb: 47:d4:fc:24:cd:04:ae:96:05:15:d6:ac:ce:30:f3:ca:0b:c5: ba:e2:22:e0:a6:ad:22:e4:02:ee:74:11:7f:4c:ff:78:1d:35: da:e6:02:34:eb:18:12:61:77:06:09:16:63:ea:18:ad:a2:87: 1f:f2:c7:80:09:09:75:4e:10:a8:8f:3d:86:b8:75:11:c0:24: 62:8a:96:7b:4a:45:e9:ec:59:c5:be:6b:83:e6:e1:e8:ac:b5: 30:1e:fe:05:07:80:f9:e1:23:0d:50:8f:05:98:ff:2c:5f:e8: 3b:b6:ad:cf:81:b5:21:87:ca:08:2a:23:27:30:20:2b:cf:ed: 94:5b:ac:b2:7a:d2:c7:28:a1:8a:0b:9b:4d:4a:2c:6d:85:3f: 09:72:3c:67:e2:d9:dc:07:ba:eb:65:7b:5a:01:63:d6:90:5b: 4f:17:66:3d:7f:0b:19:a3:93:63:10:52:2a:9f:14:16:58:e2: dc:a5:f4:a1:16:8b:0e:91:8b:81:ca:9b:59:fa:d8:6b:91:07: 65:55:5f:52:1f:af:3a:fb:90:dd:69:a5:5b:9c:6d:0e:2c:b6: fa:ce:ac:a5:7c:32:4a:67:40:dc:30:34:23:dd:d7:04:23:66: f0:fc:55:80:a7:fb:66:19:82:35:67:62:70:39:5e:6f:c7:ea: 90:40:44:08:1e:b8:b2:d6:db:ee:59:a7:0d:18:79:34:bc:54: 18:5e:53:ca:34:51:ed:45:0a:e6:8e:c7:82:36:3e:a7:38:63: a9:30:2c:17:10:60:92:9f:55:87:12:59:10:c2:0f:67:69:11: cc:4e:1e:7e:4a:9a:ad:af:40:a8:75:ac:56:90:74:b8:a0:9c: a5:79:6f:dc:e9:1a:c8:69:05:e9:ba:fa:03:b3:7c:e4:e0:4e: c2:ce:9d:e8:b6:46:0d:6e:7e:57:3a:67:94:c2:cb:1f:9c:77: 4a:67:4e:69:86:43:93:38:fb:b6:db:4f:83:91:d4:60:7e:4b: 3e:2b:38:07:55:98:5e:a4 SHA1 Fingerprint=E0:B4:32:2E:B2:F6:A5:68:B6:54:53:84:48:18:4A:50:36:87:43:84 -----BEGIN CERTIFICATE----- MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UE AwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00x CzAJBgNVBAYTAkVTMB4XDTA4MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEW MBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZF RElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC AgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHkWLn7 09gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7 XBZXehuDYAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5P Grjm6gSSrj0RuVFCPYewMYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAK t0SdE3QrwqXrIhWYENiLxQSfHY9g5QYbm8+5eaA9oiM/Qj9r+hwDezCNzmzAv+Yb X79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbkHQl/Sog4P75n/TSW9R28 MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTTxKJxqvQU fecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI 2Sf23EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyH K9caUPgn6C9D4zq92Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEae ZAwUswdbxcJzbPEHXEUkFDWug/FqTYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAP BgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz4SsrSbbXc6GqlPUB53NlTKxQ MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU9QHnc2VMrFAw RAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWIm fQwng4/F9tqgaHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3 gvoFNTPhNahXwOf9jU8/kzJPeGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKe I6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1PwkzQSulgUV1qzOMPPKC8W64iLgpq0i 5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1ThCojz2GuHURwCRi ipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oIKiMn MCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZ o5NjEFIqnxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6 zqylfDJKZ0DcMDQj3dcEI2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacN GHk0vFQYXlPKNFHtRQrmjseCNj6nOGOpMCwXEGCSn1WHElkQwg9naRHMTh5+Spqt r0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3otkYNbn5XOmeUwssfnHdK Z05phkOTOPu220+DkdRgfks+KzgHVZhepA== -----END CERTIFICATE----- Certificate: Data: Version: 1 (0x0) Serial Number: 3f:69:1e:81:9c:f0:9a:4a:f3:73:ff:b9:48:a2:e4:dd Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority Validity Not Before: Jan 29 00:00:00 1996 GMT Not After : Aug 2 23:59:59 2028 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:e5:19:bf:6d:a3:56:61:2d:99:48:71:f6:67:de: b9:8d:eb:b7:9e:86:80:0a:91:0e:fa:38:25:af:46: 88:82:e5:73:a8:a0:9b:24:5d:0d:1f:cc:65:6e:0c: b0:d0:56:84:18:87:9a:06:9b:10:a1:73:df:b4:58: 39:6b:6e:c1:f6:15:d5:a8:a8:3f:aa:12:06:8d:31: ac:7f:b0:34:d7:8f:34:67:88:09:cd:14:11:e2:4e: 45:56:69:1f:78:02:80:da:dc:47:91:29:bb:36:c9: 63:5c:c5:e0:d7:2d:87:7b:a1:b7:32:b0:7b:30:ba: 2a:2f:31:aa:ee:a3:67:da:db Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 58:15:29:39:3c:77:a3:da:5c:25:03:7c:60:fa:ee:09:99:3c: 27:10:70:c8:0c:09:e6:b3:87:cf:0a:e2:18:96:35:62:cc:bf: 9b:27:79:89:5f:c9:c4:09:f4:ce:b5:1d:df:2a:bd:e5:db:86: 9c:68:25:e5:30:7c:b6:89:15:fe:67:d1:ad:e1:50:ac:3c:7c: 62:4b:8f:ba:84:d7:12:15:1b:1f:ca:5d:0f:c1:52:94:2a:11: 99:da:7b:cf:0c:36:13:d5:35:dc:10:19:59:ea:94:c1:00:bf: 75:8f:d9:fa:fd:76:04:db:62:bb:90:6a:03:d9:46:35:d9:f8: 7c:5b SHA1 Fingerprint=CE:6A:64:A3:09:E4:2F:BB:D9:85:1C:45:3E:64:09:EA:E8:7D:60:F1 -----BEGIN CERTIFICATE----- MIICPDCCAaUCED9pHoGc8JpK83P/uUii5N0wDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz cyAxIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmlt YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0f zGVuDLDQVoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHi TkVWaR94AoDa3EeRKbs2yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0G CSqGSIb3DQEBBQUAA4GBAFgVKTk8d6PaXCUDfGD67gmZPCcQcMgMCeazh88K4hiW NWLMv5sneYlfycQJ9M61Hd8qveXbhpxoJeUwfLaJFf5n0a3hUKw8fGJLj7qE1xIV Gx/KXQ/BUpQqEZnae88MNhPVNdwQGVnqlMEAv3WP2fr9dgTbYruQagPZRjXZ+Hxb -----END CERTIFICATE----- Certificate: Data: Version: 1 (0x0) Serial Number: 3c:91:31:cb:1f:f6:d0:1b:0e:9a:b8:d0:44:bf:12:be Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority Validity Not Before: Jan 29 00:00:00 1996 GMT Not After : Aug 2 23:59:59 2028 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:c9:5c:59:9e:f2:1b:8a:01:14:b4:10:df:04:40: db:e3:57:af:6a:45:40:8f:84:0c:0b:d1:33:d9:d9: 11:cf:ee:02:58:1f:25:f7:2a:a8:44:05:aa:ec:03: 1f:78:7f:9e:93:b9:9a:00:aa:23:7d:d6:ac:85:a2: 63:45:c7:72:27:cc:f4:4c:c6:75:71:d2:39:ef:4f: 42:f0:75:df:0a:90:c6:8e:20:6f:98:0f:f8:ac:23: 5f:70:29:36:a4:c9:86:e7:b1:9a:20:cb:53:a5:85: e7:3d:be:7d:9a:fe:24:45:33:dc:76:15:ed:0f:a2: 71:64:4c:65:2e:81:68:45:a7 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 10:72:52:a9:05:14:19:32:08:41:f0:c5:6b:0a:cc:7e:0f:21: 19:cd:e4:67:dc:5f:a9:1b:e6:ca:e8:73:9d:22:d8:98:6e:73: 03:61:91:c5:7c:b0:45:40:6e:44:9d:8d:b0:b1:96:74:61:2d: 0d:a9:45:d2:a4:92:2a:d6:9a:75:97:6e:3f:53:fd:45:99:60: 1d:a8:2b:4c:f9:5e:a7:09:d8:75:30:d7:d2:65:60:3d:67:d6: 48:55:75:69:3f:91:f5:48:0b:47:69:22:69:82:96:be:c9:c8: 38:86:4a:7a:2c:73:19:48:69:4e:6b:7c:65:bf:0f:fc:70:ce: 88:90 SHA1 Fingerprint=A1:DB:63:93:91:6F:17:E4:18:55:09:40:04:15:C7:02:40:B0:AE:6B -----BEGIN CERTIFICATE----- MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G CSqGSIb3DQEBBQUAA4GBABByUqkFFBkyCEHwxWsKzH4PIRnN5GfcX6kb5sroc50i 2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWXbj9T/UWZYB2oK0z5XqcJ 2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/D/xwzoiQ -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 14014712776195784473 (0xc27e43044e473f19) Signature Algorithm: sha256WithRSAEncryption Issuer: C=HU, L=Budapest, O=Microsec Ltd., CN=Microsec e-Szigno Root CA 2009/emailAddress=info@e-szigno.hu Validity Not Before: Jun 16 11:30:18 2009 GMT Not After : Dec 30 11:30:18 2029 GMT Subject: C=HU, L=Budapest, O=Microsec Ltd., CN=Microsec e-Szigno Root CA 2009/emailAddress=info@e-szigno.hu Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:e9:f8:8f:f3:63:ad:da:86:d8:a7:e0:42:fb:cf: 91:de:a6:26:f8:99:a5:63:70:ad:9b:ae:ca:33:40: 7d:6d:96:6e:a1:0e:44:ee:e1:13:9d:94:42:52:9a: bd:75:85:74:2c:a8:0e:1d:93:b6:18:b7:8c:2c:a8: cf:fb:5c:71:b9:da:ec:fe:e8:7e:8f:e4:2f:1d:b2: a8:75:87:d8:b7:a1:e5:3b:cf:99:4a:46:d0:83:19: 7d:c0:a1:12:1c:95:6d:4a:f4:d8:c7:a5:4d:33:2e: 85:39:40:75:7e:14:7c:80:12:98:50:c7:41:67:b8: a0:80:61:54:a6:6c:4e:1f:e0:9d:0e:07:e9:c9:ba: 33:e7:fe:c0:55:28:2c:02:80:a7:19:f5:9e:dc:55: 53:03:97:7b:07:48:ff:99:fb:37:8a:24:c4:59:cc: 50:10:63:8e:aa:a9:1a:b0:84:1a:86:f9:5f:bb:b1: 50:6e:a4:d1:0a:cc:d5:71:7e:1f:a7:1b:7c:f5:53: 6e:22:5f:cb:2b:e6:d4:7c:5d:ae:d6:c2:c6:4c:e5: 05:01:d9:ed:57:fc:c1:23:79:fc:fa:c8:24:83:95: f3:b5:6a:51:01:d0:77:d6:e9:12:a1:f9:1a:83:fb: 82:1b:b9:b0:97:f4:76:06:33:43:49:a0:ff:0b:b5: fa:b5 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: CB:0F:C6:DF:42:43:CC:3D:CB:B5:48:23:A1:1A:7A:A6:2A:BB:34:68 X509v3 Authority Key Identifier: keyid:CB:0F:C6:DF:42:43:CC:3D:CB:B5:48:23:A1:1A:7A:A6:2A:BB:34:68 X509v3 Subject Alternative Name: email:info@e-szigno.hu Signature Algorithm: sha256WithRSAEncryption c9:d1:0e:5e:2e:d5:cc:b3:7c:3e:cb:fc:3d:ff:0d:28:95:93: 04:c8:bf:da:cd:79:b8:43:90:f0:a4:be:ef:f2:ef:21:98:bc: d4:d4:5d:06:f6:ee:42:ec:30:6c:a0:aa:a9:ca:f1:af:8a:fa: 3f:0b:73:6a:3e:ea:2e:40:7e:1f:ae:54:61:79:eb:2e:08:37: d7:23:f3:8c:9f:be:1d:b1:e1:a4:75:db:a0:e2:54:14:b1:ba: 1c:29:a4:18:f6:12:ba:a2:14:14:e3:31:35:c8:40:ff:b7:e0: 05:76:57:c1:1c:59:f2:f8:bf:e4:ed:25:62:5c:84:f0:7e:7e: 1f:b3:be:f9:b7:21:11:cc:03:01:56:70:a7:10:92:1e:1b:34: 81:1e:ad:9c:1a:c3:04:3c:ed:02:61:d6:1e:06:f3:5f:3a:87: f2:2b:f1:45:87:e5:3d:ac:d1:c7:57:84:bd:6b:ae:dc:d8:f9: b6:1b:62:70:0b:3d:36:c9:42:f2:32:d7:7a:61:e6:d2:db:3d: cf:c8:a9:c9:9b:dc:db:58:44:d7:6f:38:af:7f:78:d3:a3:ad: 1a:75:ba:1c:c1:36:7c:8f:1e:6d:1c:c3:75:46:ae:35:05:a6: f6:5c:3d:21:ee:56:f0:c9:82:22:2d:7a:54:ab:70:c3:7d:22: 65:82:70:96 SHA1 Fingerprint=89:DF:74:FE:5C:F4:0F:4A:80:F9:E3:37:7D:54:DA:91:E1:01:31:8E -----BEGIN CERTIFICATE----- MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 +rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c 2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 44:99:8d:3c:c0:03:27:bd:9c:76:95:b9:ea:db:ac:b5 Signature Algorithm: sha1WithRSAEncryption Issuer: C=TR, O=Elektronik Bilgi Guvenligi A.S., CN=e-Guven Kok Elektronik Sertifika Hizmet Saglayicisi Validity Not Before: Jan 4 11:32:48 2007 GMT Not After : Jan 4 11:32:48 2017 GMT Subject: C=TR, O=Elektronik Bilgi Guvenligi A.S., CN=e-Guven Kok Elektronik Sertifika Hizmet Saglayicisi Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:c3:12:20:9e:b0:5e:00:65:8d:4e:46:bb:80:5c: e9:2c:06:97:d5:f3:72:c9:70:b9:e7:4b:65:80:c1: 4b:be:7e:3c:d7:54:31:94:de:d5:12:ba:53:16:02: ea:58:63:ef:5b:d8:f3:ed:2a:1a:aa:71:48:a3:dc: 10:2d:5f:5f:eb:5c:4b:9c:96:08:42:25:28:11:cc: 8a:5a:62:01:50:d5:eb:09:53:2f:f8:c3:8f:fe:b3: fc:fd:9d:a2:e3:5f:7d:be:ed:0b:e0:60:eb:69:ec: 33:ed:d8:8d:fb:12:49:83:00:c9:8b:97:8c:3b:73: 2a:32:b3:12:f7:b9:4d:f2:f4:4d:6d:c7:e6:d6:26: 37:08:f2:d9:fd:6b:5c:a3:e5:48:5c:58:bc:42:be: 03:5a:81:ba:1c:35:0c:00:d3:f5:23:7e:71:30:08: 26:38:dc:25:11:47:2d:f3:ba:23:10:a5:bf:bc:02: f7:43:5e:c7:fe:b0:37:50:99:7b:0f:93:ce:e6:43: 2c:c3:7e:0d:f2:1c:43:66:60:cb:61:31:47:87:a3: 4f:ae:bd:56:6c:4c:bc:bc:f8:05:ca:64:f4:e9:34: a1:2c:b5:73:e1:c2:3e:e8:c8:c9:34:25:08:5c:f3: ed:a6:c7:94:9f:ad:88:43:25:d7:e1:39:60:fe:ac: 39:59 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 9F:EE:44:B3:94:D5:FA:91:4F:2E:D9:55:9A:04:56:DB:2D:C4:DB:A5 Signature Algorithm: sha1WithRSAEncryption 7f:5f:b9:53:5b:63:3d:75:32:e7:fa:c4:74:1a:cb:46:df:46: 69:1c:52:cf:aa:4f:c2:68:eb:ff:80:a9:51:e8:3d:62:77:89: 3d:0a:75:39:f1:6e:5d:17:87:6f:68:05:c1:94:6c:d9:5d:df: da:b2:59:cb:a5:10:8a:ca:cc:39:cd:9f:eb:4e:de:52:ff:0c: f0:f4:92:a9:f2:6c:53:ab:9b:d2:47:a0:1f:74:f7:9b:9a:f1: 2f:15:9f:7a:64:30:18:07:3c:2a:0f:67:ca:fc:0f:89:61:9d: 65:a5:3c:e5:bc:13:5b:08:db:e3:ff:ed:bb:06:bb:6a:06:b1: 7a:4f:65:c6:82:fd:1e:9c:8b:b5:0d:ee:48:bb:b8:bd:aa:08: b4:fb:a3:7c:cb:9f:cd:90:76:5c:86:96:78:57:0a:66:f9:58: 1a:9d:fd:97:29:60:de:11:a6:90:1c:19:1c:ee:01:96:22:34: 34:2e:91:f9:b7:c4:27:d1:7b:e6:bf:fb:80:44:5a:16:e5:eb: e0:d4:0a:38:bc:e4:91:e3:d5:eb:5c:c1:ac:df:1b:6a:7c:9e: e5:75:d2:b6:97:87:db:cc:87:2b:43:3a:84:08:af:ab:3c:db: f7:3c:66:31:86:b0:9d:53:79:ed:f8:23:de:42:e3:2d:82:f1: 0f:e5:fa:97 SHA1 Fingerprint=DD:E1:D2:A9:01:80:2E:1D:87:5E:84:B3:80:7E:4B:B1:FD:99:41:34 -----BEGIN CERTIFICATE----- MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1 MQswCQYDVQQGEwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxp Z2kgQS5TLjE8MDoGA1UEAxMzZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZp a2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3MDEwNDExMzI0OFoXDTE3MDEwNDEx MzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0cm9uaWsgQmlsZ2kg R3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9uaWsg U2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQAD ggEPADCCAQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdU MZTe1RK6UxYC6lhj71vY8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlT L/jDj/6z/P2douNffb7tC+Bg62nsM+3YjfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H 5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAIJjjcJRFHLfO6IxClv7wC 90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk9Ok0oSy1 c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/ BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoE VtstxNulMA0GCSqGSIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLP qk/CaOv/gKlR6D1id4k9CnU58W5dF4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S /wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwqD2fK/A+JYZ1lpTzlvBNbCNvj /+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4Vwpm+Vganf2X KWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 04:00:00:00:00:01:21:58:53:08:a2 Signature Algorithm: sha256WithRSAEncryption Issuer: OU=GlobalSign Root CA - R3, O=GlobalSign, CN=GlobalSign Validity Not Before: Mar 18 10:00:00 2009 GMT Not After : Mar 18 10:00:00 2029 GMT Subject: OU=GlobalSign Root CA - R3, O=GlobalSign, CN=GlobalSign Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:cc:25:76:90:79:06:78:22:16:f5:c0:83:b6:84: ca:28:9e:fd:05:76:11:c5:ad:88:72:fc:46:02:43: c7:b2:8a:9d:04:5f:24:cb:2e:4b:e1:60:82:46:e1: 52:ab:0c:81:47:70:6c:dd:64:d1:eb:f5:2c:a3:0f: 82:3d:0c:2b:ae:97:d7:b6:14:86:10:79:bb:3b:13: 80:77:8c:08:e1:49:d2:6a:62:2f:1f:5e:fa:96:68: df:89:27:95:38:9f:06:d7:3e:c9:cb:26:59:0d:73: de:b0:c8:e9:26:0e:83:15:c6:ef:5b:8b:d2:04:60: ca:49:a6:28:f6:69:3b:f6:cb:c8:28:91:e5:9d:8a: 61:57:37:ac:74:14:dc:74:e0:3a:ee:72:2f:2e:9c: fb:d0:bb:bf:f5:3d:00:e1:06:33:e8:82:2b:ae:53: a6:3a:16:73:8c:dd:41:0e:20:3a:c0:b4:a7:a1:e9: b2:4f:90:2e:32:60:e9:57:cb:b9:04:92:68:68:e5: 38:26:60:75:b2:9f:77:ff:91:14:ef:ae:20:49:fc: ad:40:15:48:d1:02:31:61:19:5e:b8:97:ef:ad:77: b7:64:9a:7a:bf:5f:c1:13:ef:9b:62:fb:0d:6c:e0: 54:69:16:a9:03:da:6e:e9:83:93:71:76:c6:69:85: 82:17 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 8F:F0:4B:7F:A8:2E:45:24:AE:4D:50:FA:63:9A:8B:DE:E2:DD:1B:BC Signature Algorithm: sha256WithRSAEncryption 4b:40:db:c0:50:aa:fe:c8:0c:ef:f7:96:54:45:49:bb:96:00: 09:41:ac:b3:13:86:86:28:07:33:ca:6b:e6:74:b9:ba:00:2d: ae:a4:0a:d3:f5:f1:f1:0f:8a:bf:73:67:4a:83:c7:44:7b:78: e0:af:6e:6c:6f:03:29:8e:33:39:45:c3:8e:e4:b9:57:6c:aa: fc:12:96:ec:53:c6:2d:e4:24:6c:b9:94:63:fb:dc:53:68:67: 56:3e:83:b8:cf:35:21:c3:c9:68:fe:ce:da:c2:53:aa:cc:90: 8a:e9:f0:5d:46:8c:95:dd:7a:58:28:1a:2f:1d:de:cd:00:37: 41:8f:ed:44:6d:d7:53:28:97:7e:f3:67:04:1e:15:d7:8a:96: b4:d3:de:4c:27:a4:4c:1b:73:73:76:f4:17:99:c2:1f:7a:0e: e3:2d:08:ad:0a:1c:2c:ff:3c:ab:55:0e:0f:91:7e:36:eb:c3: 57:49:be:e1:2e:2d:7c:60:8b:c3:41:51:13:23:9d:ce:f7:32: 6b:94:01:a8:99:e7:2c:33:1f:3a:3b:25:d2:86:40:ce:3b:2c: 86:78:c9:61:2f:14:ba:ee:db:55:6f:df:84:ee:05:09:4d:bd: 28:d8:72:ce:d3:62:50:65:1e:eb:92:97:83:31:d9:b3:b5:ca: 47:58:3f:5f SHA1 Fingerprint=D6:9B:56:11:48:F0:1C:77:C5:45:78:C1:09:26:DF:5B:85:69:76:AD -----BEGIN CERTIFICATE----- MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK 6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH WD9f -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 63:25:00:01:00:02:14:8d:33:15:02:e4:6c:f4 Signature Algorithm: sha1WithRSAEncryption Issuer: C=DE, O=TC TrustCenter GmbH, OU=TC TrustCenter Universal CA, CN=TC TrustCenter Universal CA III Validity Not Before: Sep 9 08:15:27 2009 GMT Not After : Dec 31 23:59:59 2029 GMT Subject: C=DE, O=TC TrustCenter GmbH, OU=TC TrustCenter Universal CA, CN=TC TrustCenter Universal CA III Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:c2:da:9c:62:b0:b9:71:12:b0:0b:c8:1a:57:b2: ae:83:14:99:b3:34:4b:9b:90:a2:c5:e7:e7:2f:02: a0:4d:2d:a4:fa:85:da:9b:25:85:2d:40:28:20:6d: ea:e0:bd:b1:48:83:22:29:44:9f:4e:83:ee:35:51: 13:73:74:d5:bc:f2:30:66:94:53:c0:40:36:2f:0c: 84:65:ce:0f:6e:c2:58:93:e8:2c:0b:3a:e9:c1:8e: fb:f2:6b:ca:3c:e2:9c:4e:8e:e4:f9:7d:d3:27:9f: 1b:d5:67:78:87:2d:7f:0b:47:b3:c7:e8:c9:48:7c: af:2f:cc:0a:d9:41:ef:9f:fe:9a:e1:b2:ae:f9:53: b5:e5:e9:46:9f:60:e3:df:8d:d3:7f:fb:96:7e:b3: b5:72:f8:4b:ad:08:79:cd:69:89:40:27:f5:2a:c1: ad:43:ec:a4:53:c8:61:b6:f7:d2:79:2a:67:18:76: 48:6d:5b:25:01:d1:26:c5:b7:57:69:23:15:5b:61: 8a:ad:f0:1b:2d:d9:af:5c:f1:26:90:69:a9:d5:0c: 40:f5:33:80:43:8f:9c:a3:76:2a:45:b4:af:bf:7f: 3e:87:3f:76:c5:cd:2a:de:20:c5:16:58:cb:f9:1b: f5:0f:cb:0d:11:52:64:b8:d2:76:62:77:83:f1:58: 9f:ff Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Authority Key Identifier: keyid:56:E7:E1:5B:25:43:80:E0:F6:8C:E1:71:BC:8E:E5:80:2F:C4:48:E2 X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 56:E7:E1:5B:25:43:80:E0:F6:8C:E1:71:BC:8E:E5:80:2F:C4:48:E2 Signature Algorithm: sha1WithRSAEncryption 83:c7:af:ea:7f:4d:0a:3c:39:b1:68:be:7b:6d:89:2e:e9:b3: 09:e7:18:57:8d:85:9a:17:f3:76:42:50:13:0f:c7:90:6f:33: ad:c5:49:60:2b:6c:49:58:19:d4:e2:be:b7:bf:ab:49:bc:94: c8:ab:be:28:6c:16:68:e0:c8:97:46:20:a0:68:67:60:88:39: 20:51:d8:68:01:11:ce:a7:f6:11:07:f6:ec:ec:ac:1a:1f:b2: 66:6e:56:67:60:7a:74:5e:c0:6d:97:36:ae:b5:0d:5d:66:73: c0:25:32:45:d8:4a:06:07:8f:c4:b7:07:b1:4d:06:0d:e1:a5: eb:f4:75:ca:ba:9c:d0:bd:b3:d3:32:24:4c:ee:7e:e2:76:04: 4b:49:53:d8:f2:e9:54:33:fc:e5:71:1f:3d:14:5c:96:4b:f1: 3a:f2:00:bb:6c:b4:fa:96:55:08:88:09:c1:cc:91:19:29:b0: 20:2d:ff:cb:38:a4:40:e1:17:be:79:61:80:ff:07:03:86:4c: 4e:7b:06:9f:11:86:8d:89:ee:27:c4:db:e2:bc:19:8e:0b:c3: c3:13:c7:2d:03:63:3b:d3:e8:e4:a2:2a:c2:82:08:94:16:54: f0:ef:1f:27:90:25:b8:0d:0e:28:1b:47:77:47:bd:1c:a8:25: f1:94:b4:66 SHA1 Fingerprint=96:56:CD:7B:57:96:98:95:D0:E1:41:46:68:06:FB:B8:C6:11:06:87 -----BEGIN CERTIFICATE----- MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezEL MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1 c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAeFw0wOTA5MDkwODE1MjdaFw0yOTEy MzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNUQyBUcnVzdENlbnRl ciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0ExKDAm BgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF 5+cvAqBNLaT6hdqbJYUtQCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYv DIRlzg9uwliT6CwLOunBjvvya8o84pxOjuT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8v zArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+EutCHnNaYlAJ/Uqwa1D7KRT yGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1M4BDj5yj dipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBh MB8GA1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMB Af8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI 4jANBgkqhkiG9w0BAQUFAAOCAQEAg8ev6n9NCjw5sWi+e22JLumzCecYV42Fmhfz dkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+KGwWaODIl0YgoGhnYIg5IFHY aAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhKBgePxLcHsU0G DeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPH LQNjO9Po5KIqwoIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 6047274297262753887 (0x53ec3beefbb2485f) Signature Algorithm: sha1WithRSAEncryption Issuer: C=ES, CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 Validity Not Before: May 20 08:38:15 2009 GMT Not After : Dec 31 08:38:15 2030 GMT Subject: C=ES, CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:ca:96:6b:8e:ea:f8:fb:f1:a2:35:e0:7f:4c:da: e0:c3:52:d7:7d:b6:10:c8:02:5e:b3:43:2a:c4:4f: 6a:b2:ca:1c:5d:28:9a:78:11:1a:69:59:57:af:b5: 20:42:e4:8b:0f:e6:df:5b:a6:03:92:2f:f5:11:e4: 62:d7:32:71:38:d9:04:0c:71:ab:3d:51:7e:0f:07: df:63:05:5c:e9:bf:94:6f:c1:29:82:c0:b4:da:51: b0:c1:3c:bb:ad:37:4a:5c:ca:f1:4b:36:0e:24:ab: bf:c3:84:77:fd:a8:50:f4:b1:e7:c6:2f:d2:2d:59: 8d:7a:0a:4e:96:69:52:02:aa:36:98:ec:fc:fa:14: 83:0c:37:1f:c9:92:37:7f:d7:81:2d:e5:c4:b9:e0: 3e:34:fe:67:f4:3e:66:d1:d3:f4:40:cf:5e:62:34: 0f:70:06:3e:20:18:5a:ce:f7:72:1b:25:6c:93:74: 14:93:a3:73:b1:0e:aa:87:10:23:59:5f:20:05:19: 47:ed:68:8e:92:12:ca:5d:fc:d6:2b:b2:92:3c:20: cf:e1:5f:af:20:be:a0:76:7f:76:e5:ec:1a:86:61: 33:3e:e7:7b:b4:3f:a0:0f:8e:a2:b9:6a:6f:b9:87: 26:6f:41:6c:88:a6:50:fd:6a:63:0b:f5:93:16:1b: 19:8f:b2:ed:9b:9b:c9:90:f5:01:0c:df:19:3d:0f: 3e:38:23:c9:2f:8f:0c:d1:02:fe:1b:55:d6:4e:d0: 8d:3c:af:4f:a4:f3:fe:af:2a:d3:05:9d:79:08:a1: cb:57:31:b4:9c:c8:90:b2:67:f4:18:16:93:3a:fc: 47:d8:d1:78:96:31:1f:ba:2b:0c:5f:5d:99:ad:63: 89:5a:24:20:76:d8:df:fd:ab:4e:a6:22:aa:9d:5e: e6:27:8a:7d:68:29:a3:e7:8a:b8:da:11:bb:17:2d: 99:9d:13:24:46:f7:c5:e2:d8:9f:8e:7f:c7:8f:74: 6d:5a:b2:e8:72:f5:ac:ee:24:10:ad:2f:14:da:ff: 2d:9a:46:71:47:be:42:df:bb:01:db:f4:7f:d3:28: 8f:31:59:5b:d3:c9:02:a6:b4:52:ca:6e:97:fb:43: c5:08:26:6f:8a:f4:bb:fd:9f:28:aa:0d:d5:45:f3: 13:3a:1d:d8:c0:78:8f:41:67:3c:1e:94:64:ae:7b: 0b:c5:e8:d9:01:88:39:1a:97:86:64:41:d5:3b:87: 0c:6e:fa:0f:c6:bd:48:14:bf:39:4d:d4:9e:41:b6: 8f:96:1d:63:96:93:d9:95:06:78:31:68:9e:37:06: 3b:80:89:45:61:39:23:c7:1b:44:a3:15:e5:1c:f8: 92:30:bb Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE, pathlen:1 X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 65:CD:EB:AB:35:1E:00:3E:7E:D5:74:C0:1C:B4:73:47:0E:1A:64:2F X509v3 Certificate Policies: Policy: X509v3 Any Policy CPS: http://www.firmaprofesional.com/cps User Notice: Explicit Text: Signature Algorithm: sha1WithRSAEncryption 17:7d:a0:f9:b4:dd:c5:c5:eb:ad:4b:24:b5:a1:02:ab:dd:a5: 88:4a:b2:0f:55:4b:2b:57:8c:3b:e5:31:dd:fe:c4:32:f1:e7: 5b:64:96:36:32:18:ec:a5:32:77:d7:e3:44:b6:c0:11:2a:80: b9:3d:6a:6e:7c:9b:d3:ad:fc:c3:d6:a3:e6:64:29:7c:d1:e1: 38:1e:82:2b:ff:27:65:af:fb:16:15:c4:2e:71:84:e5:b5:ff: fa:a4:47:bd:64:32:bb:f6:25:84:a2:27:42:f5:20:b0:c2:13: 10:11:cd:10:15:ba:42:90:2a:d2:44:e1:96:26:eb:31:48:12: fd:2a:da:c9:06:cf:74:1e:a9:4b:d5:87:28:f9:79:34:92:3e: 2e:44:e8:f6:8f:4f:8f:35:3f:25:b3:39:dc:63:2a:90:6b:20: 5f:c4:52:12:4e:97:2c:2a:ac:9d:97:de:48:f2:a3:66:db:c2: d2:83:95:a6:66:a7:9e:25:0f:e9:0b:33:91:65:0a:5a:c3:d9: 54:12:dd:af:c3:4e:0e:1f:26:5e:0d:dc:b3:8d:ec:d5:81:70: de:d2:4f:24:05:f3:6c:4e:f5:4c:49:66:8d:d1:ff:d2:0b:25: 41:48:fe:51:84:c6:42:af:80:04:cf:d0:7e:64:49:e4:f2:df: a2:ec:b1:4c:c0:2a:1d:e7:b4:b1:65:a2:c4:bc:f1:98:f4:aa: 70:07:63:b4:b8:da:3b:4c:fa:40:22:30:5b:11:a6:f0:05:0e: c6:02:03:48:ab:86:9b:85:dd:db:dd:ea:a2:76:80:73:7d:f5: 9c:04:c4:45:8d:e7:b9:1c:8b:9e:ea:d7:75:d1:72:b1:de:75: 44:e7:42:7d:e2:57:6b:7d:dc:99:bc:3d:83:28:ea:80:93:8d: c5:4c:65:c1:70:81:b8:38:fc:43:31:b2:f6:03:34:47:b2:ac: fb:22:06:cb:1e:dd:17:47:1c:5f:66:b9:d3:1a:a2:da:11:b1: a4:bc:23:c9:e4:be:87:ff:b9:94:b6:f8:5d:20:4a:d4:5f:e7: bd:68:7b:65:f2:15:1e:d2:3a:a9:2d:e9:d8:6b:24:ac:97:58: 44:47:ad:59:18:f1:21:65:70:de:ce:34:60:a8:40:f1:f3:3c: a4:c3:28:23:8c:fe:27:33:43:40:a0:17:3c:eb:ea:3b:b0:72: a6:a3:b9:4a:4b:5e:16:48:f4:b2:bc:c8:8c:92:c5:9d:9f:ac: 72:36:bc:34:80:34:6b:a9:8b:92:c0:b8:17:ed:ec:76:53:f5: 24:01:8c:b3:22:e8:4b:7c:55:c6:9d:fa:a3:14:bb:65:85:6e: 6e:4f:12:7e:0a:3c:9d:95 SHA1 Fingerprint=AE:C5:FB:3F:C8:E1:BF:C4:E5:4F:03:07:5A:9A:E8:00:B7:F7:B6:FA -----BEGIN CERTIFICATE----- MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF 6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF 661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9 am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1 ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481 PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS 3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF 3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: b0:b7:5a:16:48:5f:bf:e1:cb:f5:8b:d7:19:e6:7d Signature Algorithm: sha256WithRSAEncryption Issuer: C=ES, O=IZENPE S.A., CN=Izenpe.com Validity Not Before: Dec 13 13:08:28 2007 GMT Not After : Dec 13 08:27:25 2037 GMT Subject: C=ES, O=IZENPE S.A., CN=Izenpe.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:c9:d3:7a:ca:0f:1e:ac:a7:86:e8:16:65:6a:b1: c2:1b:45:32:71:95:d9:fe:10:5b:cc:af:e7:a5:79: 01:8f:89:c3:ca:f2:55:71:f7:77:be:77:94:f3:72: a4:2c:44:d8:9e:92:9b:14:3a:a1:e7:24:90:0a:0a: 56:8e:c5:d8:26:94:e1:d9:48:e1:2d:3e:da:0a:72: dd:a3:99:15:da:81:a2:87:f4:7b:6e:26:77:89:58: ad:d6:eb:0c:b2:41:7a:73:6e:6d:db:7a:78:41:e9: 08:88:12:7e:87:2e:66:11:63:6c:54:fb:3c:9d:72: c0:bc:2e:ff:c2:b7:dd:0d:76:e3:3a:d7:f7:b4:68: be:a2:f5:e3:81:6e:c1:46:6f:5d:8d:e0:4d:c6:54: 55:89:1a:33:31:0a:b1:57:b9:a3:8a:98:c3:ec:3b: 34:c5:95:41:69:7e:75:c2:3c:20:c5:61:ba:51:47: a0:20:90:93:a1:90:4b:f3:4e:7c:85:45:54:9a:d1: 05:26:41:b0:b5:4d:1d:33:be:c4:03:c8:25:7c:c1: 70:db:3b:f4:09:2d:54:27:48:ac:2f:e1:c4:ac:3e: c8:cb:92:4c:53:39:37:23:ec:d3:01:f9:e0:09:44: 4d:4d:64:c0:e1:0d:5a:87:22:bc:ad:1b:a3:fe:26: b5:15:f3:a7:fc:84:19:e9:ec:a1:88:b4:44:69:84: 83:f3:89:d1:74:06:a9:cc:0b:d6:c2:de:27:85:50: 26:ca:17:b8:c9:7a:87:56:2c:1a:01:1e:6c:be:13: ad:10:ac:b5:24:f5:38:91:a1:d6:4b:da:f1:bb:d2: de:47:b5:f1:bc:81:f6:59:6b:cf:19:53:e9:8d:15: cb:4a:cb:a9:6f:44:e5:1b:41:cf:e1:86:a7:ca:d0: 6a:9f:bc:4c:8d:06:33:5a:a2:85:e5:90:35:a0:62: 5c:16:4e:f0:e3:a2:fa:03:1a:b4:2c:71:b3:58:2c: de:7b:0b:db:1a:0f:eb:de:21:1f:06:77:06:03:b0: c9:ef:99:fc:c0:b9:4f:0b:86:28:fe:d2:b9:ea:e3: da:a5:c3:47:69:12:e0:db:f0:f6:19:8b:ed:7b:70: d7:02:d6:ed:87:18:28:2c:04:24:4c:77:e4:48:8a: 1a:c6:3b:9a:d4:0f:ca:fa:75:d2:01:40:5a:8d:79: bf:8b:cf:4b:cf:aa:16:c1:95:e4:ad:4c:8a:3e:17: 91:d4:b1:62:e5:82:e5:80:04:a4:03:7e:8d:bf:da: 7f:a2:0f:97:4f:0c:d3:0d:fb:d7:d1:e5:72:7e:1c: c8:77:ff:5b:9a:0f:b7:ae:05:46:e5:f1:a8:16:ec: 47:a4:17 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Alternative Name: email:info@izenpe.com, DirName:/O=IZENPE S.A. - CIF A01337260-RMerc.Vitoria-Gasteiz T1055 F62 S8/street=Avda del Mediterraneo Etorbidea 14 - 01010 Vitoria-Gasteiz X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 1D:1C:65:0E:A8:F2:25:7B:B4:91:CF:E4:B1:B1:E6:BD:55:74:6C:05 Signature Algorithm: sha256WithRSAEncryption 78:a6:0c:16:4a:9f:4c:88:3a:c0:cb:0e:a5:16:7d:9f:b9:48: 5f:18:8f:0d:62:36:f6:cd:19:6b:ac:ab:d5:f6:91:7d:ae:71: f3:3f:b3:0e:78:85:9b:95:a4:27:21:47:42:4a:7c:48:3a:f5: 45:7c:b3:0c:8e:51:78:ac:95:13:de:c6:fd:7d:b8:1a:90:4c: ab:92:03:c7:ed:42:01:ce:0f:d8:b1:fa:a2:92:e1:60:6d:ae: 7a:6b:09:aa:c6:29:ee:68:49:67:30:80:24:7a:31:16:39:5b: 7e:f1:1c:2e:dd:6c:09:ad:f2:31:c1:82:4e:b9:bb:f9:be:bf: 2a:85:3f:c0:40:a3:3a:59:fc:59:4b:3c:28:24:db:b4:15:75: ae:0d:88:ba:2e:73:c0:bd:58:87:e5:42:f2:eb:5e:ee:1e:30: 22:99:cb:37:d1:c4:21:6c:81:ec:be:6d:26:e6:1c:e4:42:20: 9e:47:b0:ac:83:59:70:2c:35:d6:af:36:34:b4:cd:3b:f8:32: a8:ef:e3:78:89:fb:8d:45:2c:da:9c:b8:7e:40:1c:61:e7:3e: a2:92:2c:4b:f2:cd:fa:98:b6:29:ff:f3:f2:7b:a9:1f:2e:a0: 93:57:2b:de:85:03:f9:69:37:cb:9e:78:6a:05:b4:c5:31:78: 89:ec:7a:a7:85:e1:b9:7b:3c:de:be:1e:79:84:ce:9f:70:0e: 59:c2:35:2e:90:2a:31:d9:e4:45:7a:41:a4:2e:13:9b:34:0e: 66:7b:49:ab:64:97:d0:46:c3:79:9d:72:50:63:a6:98:5b:06: bd:48:6d:d8:39:83:70:e8:35:f0:05:d1:aa:bc:e3:db:c8:02: ea:7c:fd:82:da:c2:5b:52:35:ae:98:3a:ad:ba:35:93:23:a7: 1f:48:dd:35:46:98:b2:10:68:e4:a5:31:c2:0a:58:2e:19:81: 10:c9:50:75:fc:ea:5a:16:ce:11:d7:ee:ef:50:88:2d:61:ff: 3f:42:73:05:94:43:d5:8e:3c:4e:01:3a:19:a5:1f:46:4e:77: d0:5d:e5:81:22:21:87:fe:94:7d:84:d8:93:ad:d6:68:43:48: b2:db:eb:73:24:e7:91:7f:54:a4:b6:80:3e:9d:a3:3c:4c:72: c2:57:c4:a0:d4:cc:38:27:ce:d5:06:9e:a2:48:d9:e9:9f:ce: 82:70:36:93:9a:3b:df:96:21:e3:59:b7:0c:da:91:37:f0:fd: 59:5a:b3:99:c8:69:6c:43:26:01:35:63:60:55:89:03:3a:75: d8:ba:4a:d9:54:ff:ee:de:80:d8:2d:d1:38:d5:5e:2d:0b:98: 7d:3e:6c:db:fc:26:88:c7 SHA1 Fingerprint=2F:78:3D:25:52:18:A7:4A:65:39:71:B5:2C:A2:9C:45:15:6F:E9:19 -----BEGIN CERTIFICATE----- MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4 MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6 ZW5wZS5jb20wHhcNMDcxMjEzMTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYD VQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5j b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ03rKDx6sp4boFmVq scIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAKClaO xdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6H LmYRY2xU+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFX uaOKmMPsOzTFlUFpfnXCPCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQD yCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxTOTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+ JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbKF7jJeodWLBoBHmy+E60Q rLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK0GqfvEyN BjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8L hij+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIB QFqNeb+Lz0vPqhbBleStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+ HMh3/1uaD7euBUbl8agW7EekFwIDAQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2lu Zm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+SVpFTlBFIFMuQS4gLSBDSUYg QTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBGNjIgUzgxQzBB BgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC AQYwHQYDVR0OBBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUA A4ICAQB4pgwWSp9MiDrAyw6lFn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWb laQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbgakEyrkgPH7UIBzg/YsfqikuFgba56 awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8qhT/AQKM6WfxZSzwo JNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Csg1lw LDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCT VyvehQP5aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGk LhObNA5me0mrZJfQRsN5nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJb UjWumDqtujWTI6cfSN01RpiyEGjkpTHCClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/ QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZoQ0iy2+tzJOeRf1SktoA+ naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1ZWrOZyGls QyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 11806822484801597146 (0xa3da427ea4b1aeda) Signature Algorithm: sha1WithRSAEncryption Issuer: C=EU, L=Madrid (see current address at www.camerfirma.com/address)/serialNumber=A82743287, O=AC Camerfirma S.A., CN=Chambers of Commerce Root - 2008 Validity Not Before: Aug 1 12:29:50 2008 GMT Not After : Jul 31 12:29:50 2038 GMT Subject: C=EU, L=Madrid (see current address at www.camerfirma.com/address)/serialNumber=A82743287, O=AC Camerfirma S.A., CN=Chambers of Commerce Root - 2008 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:af:00:cb:70:37:2b:80:5a:4a:3a:6c:78:94:7d: a3:7f:1a:1f:f6:35:d5:bd:db:cb:0d:44:72:3e:26: b2:90:52:ba:63:3b:28:58:6f:a5:b3:6d:94:a6:f3: dd:64:0c:55:f6:f6:e7:f2:22:22:80:5e:e1:62:c6: b6:29:e1:81:6c:f2:bf:e5:7d:32:6a:54:a0:32:19: 59:fe:1f:8b:d7:3d:60:86:85:24:6f:e3:11:b3:77: 3e:20:96:35:21:6b:b3:08:d9:70:2e:64:f7:84:92: 53:d6:0e:b0:90:8a:8a:e3:87:8d:06:d3:bd:90:0e: e2:99:a1:1b:86:0e:da:9a:0a:bb:0b:61:50:06:52: f1:9e:7f:76:ec:cb:0f:d0:1e:0d:cf:99:30:3d:1c: c4:45:10:58:ac:d6:d3:e8:d7:e5:ea:c5:01:07:77: d6:51:e6:03:7f:8a:48:a5:4d:68:75:b9:e9:bc:9e: 4e:19:71:f5:32:4b:9c:6d:60:19:0b:fb:cc:9d:75: dc:bf:26:cd:8f:93:78:39:79:73:5e:25:0e:ca:5c: eb:77:12:07:cb:64:41:47:72:93:ab:50:c3:eb:09: 76:64:34:d2:39:b7:76:11:09:0d:76:45:c4:a9:ae: 3d:6a:af:b5:7d:65:2f:94:58:10:ec:5c:7c:af:7e: e2:b6:18:d9:d0:9b:4e:5a:49:df:a9:66:0b:cc:3c: c6:78:7c:a7:9c:1d:e3:ce:8e:53:be:05:de:60:0f: 6b:e5:1a:db:3f:e3:e1:21:c9:29:c1:f1:eb:07:9c: 52:1b:01:44:51:3c:7b:25:d7:c4:e5:52:54:5d:25: 07:ca:16:20:b8:ad:e4:41:ee:7a:08:fe:99:6f:83: a6:91:02:b0:6c:36:55:6a:e7:7d:f5:96:e6:ca:81: d6:97:f1:94:83:e9:ed:b0:b1:6b:12:69:1e:ac:fb: 5d:a9:c5:98:e9:b4:5b:58:7a:be:3d:a2:44:3a:63: 59:d4:0b:25:de:1b:4f:bd:e5:01:9e:cd:d2:29:d5: 9f:17:19:0a:6f:bf:0c:90:d3:09:5f:d9:e3:8a:35: cc:79:5a:4d:19:37:92:b7:c4:c1:ad:af:f4:79:24: 9a:b2:01:0b:b1:af:5c:96:f3:80:32:fb:5c:3d:98: f1:a0:3f:4a:de:be:af:94:2e:d9:55:9a:17:6e:60: 9d:63:6c:b8:63:c9:ae:81:5c:18:35:e0:90:bb:be: 3c:4f:37:22:b9:7e:eb:cf:9e:77:21:a6:3d:38:81: fb:48:da:31:3d:2b:e3:89:f5:d0:b5:bd:7e:e0:50: c4:12:89:b3:23:9a:10:31:85:db:ae:6f:ef:38:33: 18:76:11 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE, pathlen:12 X509v3 Subject Key Identifier: F9:24:AC:0F:B2:B5:F8:79:C0:FA:60:88:1B:C4:D9:4D:02:9E:17:19 X509v3 Authority Key Identifier: keyid:F9:24:AC:0F:B2:B5:F8:79:C0:FA:60:88:1B:C4:D9:4D:02:9E:17:19 DirName:/C=EU/L=Madrid (see current address at www.camerfirma.com/address)/serialNumber=A82743287/O=AC Camerfirma S.A./CN=Chambers of Commerce Root - 2008 serial:A3:DA:42:7E:A4:B1:AE:DA X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Certificate Policies: Policy: X509v3 Any Policy CPS: http://policy.camerfirma.com Signature Algorithm: sha1WithRSAEncryption 90:12:af:22:35:c2:a3:39:f0:2e:de:e9:b5:e9:78:7c:48:be: 3f:7d:45:92:5e:e9:da:b1:19:fc:16:3c:9f:b4:5b:66:9e:6a: e7:c3:b9:5d:88:e8:0f:ad:cf:23:0f:de:25:3a:5e:cc:4f:a5: c1:b5:2d:ac:24:d2:58:07:de:a2:cf:69:84:60:33:e8:10:0d: 13:a9:23:d0:85:e5:8e:7b:a6:9e:3d:72:13:72:33:f5:aa:7d: c6:63:1f:08:f4:fe:01:7f:24:cf:2b:2c:54:09:de:e2:2b:6d: 92:c6:39:4f:16:ea:3c:7e:7a:46:d4:45:6a:46:a8:eb:75:82: 56:a7:ab:a0:7c:68:13:33:f6:9d:30:f0:6f:27:39:24:23:2a: 90:fd:90:29:35:f2:93:df:34:a5:c6:f7:f8:ef:8c:0f:62:4a: 7c:ae:d3:f5:54:f8:8d:b6:9a:56:87:16:82:3a:33:ab:5a:22: 08:f7:82:ba:ea:2e:e0:47:9a:b4:b5:45:a3:05:3b:d9:dc:2e: 45:40:3b:ea:dc:7f:e8:3b:eb:d1:ec:26:d8:35:a4:30:c5:3a: ac:57:9e:b3:76:a5:20:7b:f9:1e:4a:05:62:01:a6:28:75:60: 97:92:0d:6e:3e:4d:37:43:0d:92:15:9c:18:22:cd:51:99:a0: 29:1a:3c:5f:8a:32:33:5b:30:c7:89:2f:47:98:0f:a3:03:c6: f6:f1:ac:df:32:f0:d9:81:1a:e4:9c:bd:f6:80:14:f0:d1:2c: b9:85:f5:d8:a3:b1:c8:a5:21:e5:1c:13:97:ee:0e:bd:df:29: a9:ef:34:53:5b:d3:e4:6a:13:84:06:b6:32:02:c4:52:ae:22: d2:dc:b2:21:42:1a:da:40:f0:29:c9:ec:0a:0c:5c:e2:d0:ba: cc:48:d3:37:0a:cc:12:0a:8a:79:b0:3d:03:7f:69:4b:f4:34: 20:7d:b3:34:ea:8e:4b:64:f5:3e:fd:b3:23:67:15:0d:04:b8: f0:2d:c1:09:51:3c:b2:6c:15:f0:a5:23:d7:83:74:e4:e5:2e: c9:fe:98:27:42:c6:ab:c6:9e:b0:d0:5b:38:a5:9b:50:de:7e: 18:98:b5:45:3b:f6:79:b4:e8:f7:1a:7b:06:83:fb:d0:8b:da: bb:c7:bd:18:ab:08:6f:3c:80:6b:40:3f:19:19:ba:65:8a:e6: be:d5:5c:d3:36:d7:ef:40:52:24:60:38:67:04:31:ec:8f:f3: 82:c6:de:b9:55:f3:3b:31:91:5a:dc:b5:08:15:ad:76:25:0a: 0d:7b:2e:87:e2:0c:a6:06:bc:26:10:6d:37:9d:ec:dd:78:8c: 7c:80:c5:f0:d9:77:48:d0 SHA1 Fingerprint=78:6A:74:AC:76:AB:14:7F:9C:6A:30:50:BA:9E:A8:7E:FE:9A:CE:3C -----BEGIN CERTIFICATE----- MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9 28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR 5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s +12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5 Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1 +HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF 5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1 glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2 pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ d0jQ -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 14541511773111788494 (0xc9cdd3e9d57d23ce) Signature Algorithm: sha1WithRSAEncryption Issuer: C=EU, L=Madrid (see current address at www.camerfirma.com/address)/serialNumber=A82743287, O=AC Camerfirma S.A., CN=Global Chambersign Root - 2008 Validity Not Before: Aug 1 12:31:40 2008 GMT Not After : Jul 31 12:31:40 2038 GMT Subject: C=EU, L=Madrid (see current address at www.camerfirma.com/address)/serialNumber=A82743287, O=AC Camerfirma S.A., CN=Global Chambersign Root - 2008 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:c0:df:56:d3:e4:3a:9b:76:45:b4:13:db:ff:c1: b6:19:8b:37:41:18:95:52:47:eb:17:9d:29:88:8e: 35:6c:06:32:2e:47:62:f3:49:04:bf:7d:44:36:b1: 71:cc:bd:5a:09:73:d5:d9:85:44:ff:91:57:25:df: 5e:36:8e:70:d1:5c:71:43:1d:d9:da:ef:5c:d2:fb: 1b:bd:3a:b5:cb:ad:a3:cc:44:a7:0d:ae:21:15:3f: b9:7a:5b:92:75:d8:a4:12:38:89:19:8a:b7:80:d2: e2:32:6f:56:9c:91:d6:88:10:0b:b3:74:64:92:74: 60:f3:f6:cf:18:4f:60:b2:23:d0:c7:3b:ce:61:4b: 99:8f:c2:0c:d0:40:b2:98:dc:0d:a8:4e:a3:b9:0a: ae:60:a0:ad:45:52:63:ba:66:bd:68:e0:f9:be:1a: a8:81:bb:1e:41:78:75:d3:c1:fe:00:55:b0:87:54: e8:27:90:35:1d:4c:33:ad:97:fc:97:2e:98:84:bf: 2c:c9:a3:bf:d1:98:11:14:ed:63:f8:ca:98:88:58: 17:99:ed:45:03:97:7e:3c:86:1e:88:8c:be:f2:91: 84:8f:65:34:d8:00:4c:7d:b7:31:17:5a:29:7a:0a: 18:24:30:a3:37:b5:7a:a9:01:7d:26:d6:f9:0e:8e: 59:f1:fd:1b:33:b5:29:3b:17:3b:41:b6:21:dd:d4: c0:3d:a5:9f:9f:1f:43:50:c9:bb:bc:6c:7a:97:98: ee:cd:8c:1f:fb:9c:51:ae:8b:70:bd:27:9f:71:c0: 6b:ac:7d:90:66:e8:d7:5d:3a:0d:b0:d5:c2:8d:d5: c8:9d:9d:c1:6d:d0:d0:bf:51:e4:e3:f8:c3:38:36: ae:d6:a7:75:e6:af:84:43:5d:93:92:0c:6a:07:de: 3b:1d:98:22:d6:ac:c1:35:db:a3:a0:25:ff:72:b5: 76:1d:de:6d:e9:2c:66:2c:52:84:d0:45:92:ce:1c: e5:e5:33:1d:dc:07:53:54:a3:aa:82:3b:9a:37:2f: dc:dd:a0:64:e9:e6:dd:bd:ae:fc:64:85:1d:3c:a7: c9:06:de:84:ff:6b:e8:6b:1a:3c:c5:a2:b3:42:fb: 8b:09:3e:5f:08:52:c7:62:c4:d4:05:71:bf:c4:64: e4:f8:a1:83:e8:3e:12:9b:a8:1e:d4:36:4d:2f:71: f6:8d:28:f6:83:a9:13:d2:61:c1:91:bb:48:c0:34: 8f:41:8c:4b:4c:db:69:12:ff:50:94:9c:20:83:59: 73:ed:7c:a1:f2:f1:fd:dd:f7:49:d3:43:58:a0:56: 63:ca:3d:3d:e5:35:56:59:e9:0e:ca:20:cc:2b:4b: 93:29:0f Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE, pathlen:12 X509v3 Subject Key Identifier: B9:09:CA:9C:1E:DB:D3:6C:3A:6B:AE:ED:54:F1:5B:93:06:35:2E:5E X509v3 Authority Key Identifier: keyid:B9:09:CA:9C:1E:DB:D3:6C:3A:6B:AE:ED:54:F1:5B:93:06:35:2E:5E DirName:/C=EU/L=Madrid (see current address at www.camerfirma.com/address)/serialNumber=A82743287/O=AC Camerfirma S.A./CN=Global Chambersign Root - 2008 serial:C9:CD:D3:E9:D5:7D:23:CE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Certificate Policies: Policy: X509v3 Any Policy CPS: http://policy.camerfirma.com Signature Algorithm: sha1WithRSAEncryption 80:88:7f:70:de:92:28:d9:05:94:46:ff:90:57:a9:f1:2f:df: 1a:0d:6b:fa:7c:0e:1c:49:24:79:27:d8:46:aa:6f:29:59:52: 88:70:12:ea:dd:3d:f5:9b:53:54:6f:e1:60:a2:a8:09:b9:ec: eb:59:7c:c6:35:f1:dc:18:e9:f1:67:e5:af:ba:45:e0:09:de: ca:44:0f:c2:17:0e:77:91:45:7a:33:5f:5f:96:2c:68:8b:c1: 47:8f:98:9b:3d:c0:ec:cb:f5:d5:82:92:84:35:d1:be:36:38: 56:72:31:5b:47:2d:aa:17:a4:63:51:eb:0a:01:ad:7f:ec:75: 9e:cb:a1:1f:f1:7f:12:b1:b9:e4:64:7f:67:d6:23:2a:f4:b8: 39:5d:98:e8:21:a7:e1:bd:3d:42:1a:74:9a:70:af:68:6c:50: 5d:49:cf:ff:fb:0e:5d:e6:2c:47:d7:81:3a:59:00:b5:73:6b: 63:20:f6:31:45:08:39:0e:f4:70:7e:40:70:5a:3f:d0:6b:42: a9:74:3d:28:2f:02:6d:75:72:95:09:8d:48:63:c6:c6:23:57: 92:93:5e:35:c1:8d:f9:0a:f7:2c:9d:62:1c:f6:ad:7c:dd:a6: 31:1e:b6:b1:c7:7e:85:26:fa:a4:6a:b5:da:63:30:d1:ef:93: 37:b2:66:2f:7d:05:f7:e7:b7:4b:98:94:35:c0:d9:3a:29:c1: 9d:b2:50:33:1d:4a:a9:5a:a6:c9:03:ef:ed:f4:e7:a8:6e:8a: b4:57:84:eb:a4:3f:d0:ee:aa:aa:87:5b:63:e8:93:e2:6b:a8: d4:b8:72:78:6b:1b:ed:39:e4:5d:cb:9b:aa:87:d5:4f:4e:00: fe:d9:6a:9f:3c:31:0f:28:02:01:7d:98:e8:a7:b0:a2:64:9e: 79:f8:48:f2:15:a9:cc:e6:c8:44:eb:3f:78:99:f2:7b:71:3e: 3c:f1:98:a7:c5:18:12:3f:e6:bb:28:33:42:e9:45:0a:7c:6d: f2:86:79:2f:c5:82:19:7d:09:89:7c:b2:54:76:88:ae:de:c1: f3:cc:e1:6e:db:31:d6:93:ae:99:a0:ef:25:6a:73:98:89:5b: 3a:2e:13:88:1e:bf:c0:92:94:34:1b:e3:27:b7:8b:1e:6f:42: ff:e7:e9:37:9b:50:1d:2d:a2:f9:02:ee:cb:58:58:3a:71:bc: 68:e3:aa:c1:af:1c:28:1f:a2:dc:23:65:3f:81:ea:ae:99:d3: d8:30:cf:13:0d:4f:15:c9:84:bc:a7:48:2d:f8:30:23:77:d8: 46:4b:79:6d:f6:8c:ed:3a:7f:60:11:78:f4:e9:9b:ae:d5:54: c0:74:80:d1:0b:42:9f:c1 SHA1 Fingerprint=4A:BD:EE:EC:95:0D:35:9C:89:AE:C7:52:A1:2C:5B:29:F6:D6:AA:0C -----BEGIN CERTIFICATE----- MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7 G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2 zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4 ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2 Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r 6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z 09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 92:39:d5:34:8f:40:d1:69:5a:74:54:70:e1:f2:3f:43 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Hardware Validity Not Before: Mar 15 00:00:00 2011 GMT Not After : Mar 14 23:59:59 2014 GMT Subject: C=US/postalCode=38477, ST=Florida, L=English/street=Sea Village 10, O=Google Ltd., OU=Tech Dept., OU=Hosted by GTI Group Corporation, OU=PlatinumSSL, CN=addons.mozilla.org Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:ab:c6:6d:36:f3:15:73:78:83:73:ce:74:85:d5: ae:ec:b2:f0:e0:24:1f:13:83:b8:20:ac:bb:9a:fe: 88:bb:ab:a1:1d:0b:1f:45:00:aa:49:b7:35:37:0c: 6a:ef:47:4c:b9:d1:be:e3:57:12:04:8d:92:c7:b6: ec:01:bc:b6:da:c7:81:38:20:ad:72:85:e6:0e:fc: 81:6c:07:ad:68:76:38:c5:44:d7:cc:c6:4a:c5:97: 3e:64:f4:51:e6:f0:7e:b2:ec:56:f7:25:82:4d:49: 98:cb:16:98:dd:23:f1:89:91:d1:17:97:40:99:26: d6:e2:a2:2b:5e:df:bd:89:f2:1b:1a:53:2d:cc:50: 41:7a:d0:3d:2a:0c:55:70:14:01:e9:58:49:10:7a: 0b:93:82:8b:e1:1e:ed:3a:80:10:82:ce:96:8a:34: f0:cc:d7:d3:b9:b4:50:87:55:54:09:b8:9d:42:28: 55:00:e5:8c:35:54:bf:dd:25:91:46:b7:0d:e5:5d: 83:a8:e5:8b:fb:84:e4:3c:ae:76:da:c4:43:2b:5b: 74:0b:f8:be:5d:68:f1:78:5b:b5:ce:7d:f1:5d:99: 40:da:ca:ee:38:81:50:be:98:a1:6c:b8:24:ad:f3: af:8c:0f:d7:11:28:2c:84:18:4c:7d:b5:d9:8f:30: b5:1b Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Authority Key Identifier: keyid:A1:72:5F:26:1B:28:98:43:95:5D:07:37:D5:85:96:9D:4B:D2:C3:45 X509v3 Subject Key Identifier: DD:80:D2:54:3D:F7:4C:70:CA:A3:B0:DD:34:7A:32:E4:E8:3B:5A:3B X509v3 Key Usage: critical Digital Signature, Key Encipherment X509v3 Basic Constraints: critical CA:FALSE X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.6449.1.2.1.3.4 CPS: https://secure.comodo.com/CPS X509v3 CRL Distribution Points: Full Name: URI:http://crl.comodoca.com/UTN-USERFirst-Hardware.crl Full Name: URI:http://crl.comodo.net/UTN-USERFirst-Hardware.crl Authority Information Access: CA Issuers - URI:http://crt.comodoca.com/UTNAddTrustServerCA.crt OCSP - URI:http://ocsp.comodoca.com X509v3 Subject Alternative Name: DNS:addons.mozilla.org, DNS:www.addons.mozilla.org Signature Algorithm: sha1WithRSAEncryption 33:3b:63:15:fc:b1:ec:14:2c:93:dd:75:94:de:81:5a:d9:4e: 99:be:fb:4a:a4:39:55:4d:a1:40:7a:de:13:2a:87:a9:37:cf: e8:d5:fb:ad:d1:7b:6d:6f:8c:20:87:82:54:e6:57:49:bc:20: 28:84:cd:d6:01:d9:93:8b:17:6e:23:66:e5:84:c8:80:3f:c6: a1:70:80:e4:ec:4d:1d:f9:fc:91:5a:73:62:29:9a:f7:20:1c: 61:e0:8b:39:9f:ca:bc:7e:8d:dd:bc:d9:b1:e3:9f:9e:df:15: 53:91:21:52:0b:d9:1a:23:0f:66:36:db:ac:93:96:4a:a3:a5: 22:cf:29:f7:a2:99:a8:f6:b6:d9:40:ae:d9:7e:b6:f6:58:2e: 9b:ac:36:ca:64:8f:65:52:dc:86:9c:82:ab:6e:50:4b:da:5f: fa:05:00:88:30:0e:de:8d:56:bf:81:47:8d:3d:06:e2:b2:62: 92:67:8f:9e:c8:9a:b2:e5:06:b8:70:24:b8:77:7c:23:0a:38: c3:79:08:d8:b1:51:9d:ac:95:11:c7:40:17:9e:a3:1c:8f:f2: 11:a7:68:27:da:49:05:84:18:7c:58:2d:01:67:5c:e5:9f:a1: 29:bb:4a:39:45:2f:bf:11:aa:79:a2:ed:b4:d4:b5:65:43:b7: 93:46:8a:d3 SHA1 Fingerprint=30:5F:8B:D1:7A:A2:CB:C4:83:A4:C4:1B:19:A3:9A:0C:75:DA:39:D6 -----BEGIN CERTIFICATE----- MIIF+DCCBOCgAwIBAgIRAJI51TSPQNFpWnRUcOHyP0MwDQYJKoZIhvcNAQEFBQAw gZcxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtl IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMY aHR0cDovL3d3dy51c2VydHJ1c3QuY29tMR8wHQYDVQQDExZVVE4tVVNFUkZpcnN0 LUhhcmR3YXJlMB4XDTExMDMxNTAwMDAwMFoXDTE0MDMxNDIzNTk1OVowgeIxCzAJ BgNVBAYTAlVTMQ4wDAYDVQQREwUzODQ3NzEQMA4GA1UECBMHRmxvcmlkYTEQMA4G A1UEBxMHRW5nbGlzaDEXMBUGA1UECRMOU2VhIFZpbGxhZ2UgMTAxFDASBgNVBAoT C0dvb2dsZSBMdGQuMRMwEQYDVQQLEwpUZWNoIERlcHQuMSgwJgYDVQQLEx9Ib3N0 ZWQgYnkgR1RJIEdyb3VwIENvcnBvcmF0aW9uMRQwEgYDVQQLEwtQbGF0aW51bVNT TDEbMBkGA1UEAxMSYWRkb25zLm1vemlsbGEub3JnMIIBIjANBgkqhkiG9w0BAQEF AAOCAQ8AMIIBCgKCAQEAq8ZtNvMVc3iDc850hdWu7LLw4CQfE4O4IKy7mv6Iu6uh HQsfRQCqSbc1Nwxq70dMudG+41cSBI2Sx7bsAby22seBOCCtcoXmDvyBbAetaHY4 xUTXzMZKxZc+ZPRR5vB+suxW9yWCTUmYyxaY3SPxiZHRF5dAmSbW4qIrXt+9ifIb GlMtzFBBetA9KgxVcBQB6VhJEHoLk4KL4R7tOoAQgs6WijTwzNfTubRQh1VUCbid QihVAOWMNVS/3SWRRrcN5V2DqOWL+4TkPK522sRDK1t0C/i+XWjxeFu1zn3xXZlA 2sruOIFQvpihbLgkrfOvjA/XESgshBhMfbXZjzC1GwIDAQABo4IB8DCCAewwHwYD VR0jBBgwFoAUoXJfJhsomEOVXQc31YWWnUvSw0UwHQYDVR0OBBYEFN2A0lQ990xw yqOw3TR6MuToO1o7MA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1Ud JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBGBgNVHSAEPzA9MDsGDCsGAQQBsjEB AgEDBDArMCkGCCsGAQUFBwIBFh1odHRwczovL3NlY3VyZS5jb21vZG8uY29tL0NQ UzB7BgNVHR8EdDByMDigNqA0hjJodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9VVE4t VVNFUkZpcnN0LUhhcmR3YXJlLmNybDA2oDSgMoYwaHR0cDovL2NybC5jb21vZG8u bmV0L1VUTi1VU0VSRmlyc3QtSGFyZHdhcmUuY3JsMHEGCCsGAQUFBwEBBGUwYzA7 BggrBgEFBQcwAoYvaHR0cDovL2NydC5jb21vZG9jYS5jb20vVVROQWRkVHJ1c3RT ZXJ2ZXJDQS5jcnQwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmNvbW9kb2NhLmNv bTA1BgNVHREELjAsghJhZGRvbnMubW96aWxsYS5vcmeCFnd3dy5hZGRvbnMubW96 aWxsYS5vcmcwDQYJKoZIhvcNAQEFBQADggEBADM7YxX8sewULJPddZTegVrZTpm+ +0qkOVVNoUB63hMqh6k3z+jV+63Re21vjCCHglTmV0m8ICiEzdYB2ZOLF24jZuWE yIA/xqFwgOTsTR35/JFac2IpmvcgHGHgizmfyrx+jd282bHjn57fFVORIVIL2Roj D2Y226yTlkqjpSLPKfeimaj2ttlArtl+tvZYLpusNspkj2VS3IacgqtuUEvaX/oF AIgwDt6NVr+BR409BuKyYpJnj57ImrLlBrhwJLh3fCMKOMN5CNixUZ2slRHHQBee oxyP8hGnaCfaSQWEGHxYLQFnXOWfoSm7SjlFL78Rqnmi7bTUtWVDt5NGitM= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: d8:f3:5f:4e:b7:87:2b:2d:ab:06:92:e3:15:38:2f:b0 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Hardware Validity Not Before: Mar 15 00:00:00 2011 GMT Not After : Mar 14 23:59:59 2014 GMT Subject: C=US/postalCode=38477, ST=Florida, L=Tampa/street=Sea Village 10, O=Global Trustee, OU=Global Trustee, OU=Hosted by GTI Group Corporation, OU=PlatinumSSL, CN=global trustee Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:d9:74:f2:aa:41:1d:df:f5:c2:16:43:49:5c:29: bf:b6:89:74:29:bc:9c:8d:0c:46:4f:59:7e:b2:41: 17:66:34:0c:65:89:e1:6c:25:e3:86:0a:9e:22:45: 22:8c:dd:9d:e6:a3:95:de:dc:88:02:55:5c:e3:5b: 91:75:eb:26:69:63:b9:2e:c6:ca:2e:27:df:88:ba: 02:20:6e:fe:b9:0b:29:d7:a7:d6:d7:48:1a:1c:ce: dd:1f:a9:27:0e:62:4f:a1:96:1e:dd:54:3a:34:63: 4a:76:f5:77:7d:59:67:d8:10:d4:b5:0f:3a:43:22: 98:db:f4:09:c4:0a:70:ce:dd:90:d4:2f:ef:74:13: c3:cd:c2:89:39:62:15:9d:e6:74:a8:e8:9b:f0:63: 6e:9c:89:b6:0e:ad:9b:f7:cc:82:e8:e8:2d:b8:0b: da:22:ec:49:85:07:88:99:98:3f:f4:74:a9:09:f7: 81:7c:97:0b:59:99:18:72:8b:db:94:82:2b:a7:e8: aa:6b:97:bf:88:7e:75:b0:8b:45:45:0c:c7:a8:09: ea:1b:41:58:30:3b:5f:78:65:15:34:d2:e4:3c:34: 0d:1d:d8:64:3c:8a:a5:56:49:99:28:2d:4b:f2:cf: cd:d9:6e:49:64:9b:a9:79:90:77:55:a9:08:1b:ad: 1a:74:9e:e0:03:93:0a:09:b7:ad:a7:b4:5c:ef:83: 6c:b7:9a:b4:c6:68:40:80:1d:42:d1:6e:79:9b:a9: 19:21:9a:9c:f9:86:2d:00:d1:34:fe:e0:b6:f9:55: b6:f5:26:c5:95:16:a5:7c:73:9f:0a:29:89:ac:3a: 98:f7:9b:74:67:b7:90:b7:5d:09:23:6a:6a:ed:2c: 10:ee:53:0a:10:f0:16:1f:57:b3:b1:0d:79:91:19: b0:eb:cd:30:3f:a0:14:5f:b3:c6:fd:5c:33:a7:b0: ff:98:b0:55:8c:b9:a5:f2:6f:47:24:49:21:69:cc: 42:a2:51:00:40:85:8c:82:82:ab:32:a5:cb:9a:dc: d0:d9:18:0d:df:19:f4:af:83:0d:c1:3e:31:db:24: 48:b6:75:80:a1:e1:c9:77:64:1e:a7:e5:8b:7f:15: 4d:4b:a7:c2:d0:ed:79:95:5e:91:31:ec:18:ff:4e: 9f:48:14:ea:75:ba:21:ce:29:76:e9:1f:4e:51:87: 2e:b3:cc:04:60:ba:23:1f:1f:65:b2:0a:b8:d5:6e: 8f:4b:42:89:47:a9:81:90:5b:2b:b2:b6:ae:e6:a0: 70:7b:78:90:0a:7a:c5:e5:e7:c5:fb:0a:f6:2f:69: 8c:8c:1f:57:e0:06:99:ff:11:d5:52:32:20:97:27: 98:ee:65 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Authority Key Identifier: keyid:A1:72:5F:26:1B:28:98:43:95:5D:07:37:D5:85:96:9D:4B:D2:C3:45 X509v3 Subject Key Identifier: B7:C3:DE:1A:43:ED:41:97:A9:8F:29:78:9C:03:B9:AC:40:42:00:AC X509v3 Key Usage: critical Digital Signature, Key Encipherment X509v3 Basic Constraints: critical CA:FALSE X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.6449.1.2.1.3.4 CPS: https://secure.comodo.com/CPS X509v3 CRL Distribution Points: Full Name: URI:http://crl.comodoca.com/UTN-USERFirst-Hardware.crl Full Name: URI:http://crl.comodo.net/UTN-USERFirst-Hardware.crl Authority Information Access: CA Issuers - URI:http://crt.comodoca.com/UTNAddTrustServerCA.crt OCSP - URI:http://ocsp.comodoca.com X509v3 Subject Alternative Name: DNS:global trustee Signature Algorithm: sha1WithRSAEncryption 8f:ba:75:ba:39:d4:26:d3:70:0f:c4:b3:02:a7:c5:12:23:71: c9:fe:63:e9:a3:62:78:24:44:4f:d4:b9:11:3e:1f:c7:28:e7: 55:6b:ee:f4:e1:00:91:86:8a:c9:09:6b:9f:2e:a4:45:39:d1: 61:62:5e:93:a5:05:45:78:9f:60:12:2c:f4:6c:65:65:0d:cc: 46:34:8b:28:ba:a0:c6:f4:99:71:64:f3:22:76:ac:4f:f3:62: c9:a7:33:5a:07:1f:3d:c9:86:80:dc:db:04:2f:87:27:e8:bf: 48:44:81:c0:f0:49:23:6e:1f:e5:e4:03:86:24:13:a2:85:62: 7c:58:04:ca:e6:8d:13:72:0a:ba:56:44:a2:0f:bc:fb:a0:3d: 0d:2a:7f:fb:9e:a9:09:3d:b7:5a:d4:8a:8d:e1:25:e8:a4:09: 84:70:ad:12:44:b9:cf:b9:33:7a:ba:5c:e6:4b:a6:bb:05:06: 98:ff:f2:98:52:7b:77:80:27:4a:d9:e2:fa:b9:52:d4:fb:fb: e6:d6:2d:9e:8f:c1:15:44:8d:9b:74:2f:ee:94:5a:4e:d3:c4: 8b:8a:ac:43:9d:73:f6:ae:0c:87:89:ad:87:c9:c9:c7:dd:ba: 14:60:7a:f8:b5:35:9d:c2:8d:c6:96:81:0d:a9:52:8a:29:40: 04:e9:19:b4 SHA1 Fingerprint=61:79:3F:CB:FA:4F:90:08:30:9B:BA:5F:F1:2D:2C:B2:9C:D4:15:1A -----BEGIN CERTIFICATE----- MIIG3TCCBcWgAwIBAgIRANjzX063hystqwaS4xU4L7AwDQYJKoZIhvcNAQEFBQAw gZcxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtl IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMY aHR0cDovL3d3dy51c2VydHJ1c3QuY29tMR8wHQYDVQQDExZVVE4tVVNFUkZpcnN0 LUhhcmR3YXJlMB4XDTExMDMxNTAwMDAwMFoXDTE0MDMxNDIzNTk1OVowgeMxCzAJ BgNVBAYTAlVTMQ4wDAYDVQQREwUzODQ3NzEQMA4GA1UECBMHRmxvcmlkYTEOMAwG A1UEBxMFVGFtcGExFzAVBgNVBAkTDlNlYSBWaWxsYWdlIDEwMRcwFQYDVQQKEw5H bG9iYWwgVHJ1c3RlZTEXMBUGA1UECxMOR2xvYmFsIFRydXN0ZWUxKDAmBgNVBAsT H0hvc3RlZCBieSBHVEkgR3JvdXAgQ29ycG9yYXRpb24xFDASBgNVBAsTC1BsYXRp bnVtU1NMMRcwFQYDVQQDEw5nbG9iYWwgdHJ1c3RlZTCCAiIwDQYJKoZIhvcNAQEB BQADggIPADCCAgoCggIBANl08qpBHd/1whZDSVwpv7aJdCm8nI0MRk9ZfrJBF2Y0 DGWJ4Wwl44YKniJFIozdneajld7ciAJVXONbkXXrJmljuS7Gyi4n34i6AiBu/rkL Kden1tdIGhzO3R+pJw5iT6GWHt1UOjRjSnb1d31ZZ9gQ1LUPOkMimNv0CcQKcM7d kNQv73QTw83CiTliFZ3mdKjom/BjbpyJtg6tm/fMgujoLbgL2iLsSYUHiJmYP/R0 qQn3gXyXC1mZGHKL25SCK6foqmuXv4h+dbCLRUUMx6gJ6htBWDA7X3hlFTTS5Dw0 DR3YZDyKpVZJmSgtS/LPzdluSWSbqXmQd1WpCButGnSe4AOTCgm3rae0XO+DbLea tMZoQIAdQtFueZupGSGanPmGLQDRNP7gtvlVtvUmxZUWpXxznwopiaw6mPebdGe3 kLddCSNqau0sEO5TChDwFh9Xs7ENeZEZsOvNMD+gFF+zxv1cM6ew/5iwVYy5pfJv RyRJIWnMQqJRAECFjIKCqzKly5rc0NkYDd8Z9K+DDcE+MdskSLZ1gKHhyXdkHqfl i38VTUunwtDteZVekTHsGP9On0gU6nW6Ic4pdukfTlGHLrPMBGC6Ix8fZbIKuNVu j0tCiUepgZBbK7K2ruagcHt4kAp6xeXnxfsK9i9pjIwfV+AGmf8R1VIyIJcnmO5l AgMBAAGjggHUMIIB0DAfBgNVHSMEGDAWgBShcl8mGyiYQ5VdBzfVhZadS9LDRTAd BgNVHQ4EFgQUt8PeGkPtQZepjyl4nAO5rEBCAKwwDgYDVR0PAQH/BAQDAgWgMAwG A1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMEYGA1Ud IAQ/MD0wOwYMKwYBBAGyMQECAQMEMCswKQYIKwYBBQUHAgEWHWh0dHBzOi8vc2Vj dXJlLmNvbW9kby5jb20vQ1BTMHsGA1UdHwR0MHIwOKA2oDSGMmh0dHA6Ly9jcmwu Y29tb2RvY2EuY29tL1VUTi1VU0VSRmlyc3QtSGFyZHdhcmUuY3JsMDagNKAyhjBo dHRwOi8vY3JsLmNvbW9kby5uZXQvVVROLVVTRVJGaXJzdC1IYXJkd2FyZS5jcmww cQYIKwYBBQUHAQEEZTBjMDsGCCsGAQUFBzAChi9odHRwOi8vY3J0LmNvbW9kb2Nh LmNvbS9VVE5BZGRUcnVzdFNlcnZlckNBLmNydDAkBggrBgEFBQcwAYYYaHR0cDov L29jc3AuY29tb2RvY2EuY29tMBkGA1UdEQQSMBCCDmdsb2JhbCB0cnVzdGVlMA0G CSqGSIb3DQEBBQUAA4IBAQCPunW6OdQm03APxLMCp8USI3HJ/mPpo2J4JERP1LkR Ph/HKOdVa+704QCRhorJCWufLqRFOdFhYl6TpQVFeJ9gEiz0bGVlDcxGNIsouqDG 9JlxZPMidqxP82LJpzNaBx89yYaA3NsEL4cn6L9IRIHA8Ekjbh/l5AOGJBOihWJ8 WATK5o0Tcgq6VkSiD7z7oD0NKn/7nqkJPbda1IqN4SXopAmEcK0SRLnPuTN6ulzm S6a7BQaY//KYUnt3gCdK2eL6uVLU+/vm1i2ej8EVRI2bdC/ulFpO08SLiqxDnXP2 rgyHia2HycnH3boUYHr4tTWdwo3GloENqVKKKUAE6Rm0 -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 04:7e:cb:e9:fc:a5:5f:7b:d0:9e:ae:36:e1:0c:ae:1e Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Hardware Validity Not Before: Mar 15 00:00:00 2011 GMT Not After : Mar 14 23:59:59 2014 GMT Subject: C=US/postalCode=38477, ST=Florida, L=English/street=Sea Village 10, O=Google Ltd., OU=Tech Dept., OU=Hosted by GTI Group Corporation, OU=PlatinumSSL, CN=mail.google.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:b0:73:f0:f2:04:ee:c2:a2:46:ca:34:2a:aa:bb: 60:23:d1:11:76:1f:1f:3a:d0:65:83:4e:9a:45:a8: 43:70:85:76:f0:1f:87:00:02:1f:6e:3b:17:17:c4: b5:e9:19:46:a2:92:25:8d:62:2a:b4:63:30:1f:b9: 85:f8:35:e1:16:5a:76:49:cc:50:48:53:39:59:89: d6:84:02:fb:9a:ec:1b:c7:51:d5:76:95:90:d4:3a: 2a:b8:a6:de:02:4d:06:fb:cd:ed:a5:46:41:5f:55: 74:e5:ec:7e:40:dc:50:9c:b5:e4:35:5d:1e:68:20: f8:e9:de:a3:6a:28:bf:41:d2:a1:b3:e2:25:8d:0c: 1b:ca:3d:93:0c:18:ae:df:c5:bc:fd:bc:82:ba:68: 00:d7:16:32:71:9f:65:b5:11:da:68:59:d0:a6:57: 64:1b:c9:fe:98:e5:f5:a5:65:ea:e1:db:ee:f4:b3: 9d:b3:8e:ea:87:ae:16:d2:1e:a0:7c:7c:69:3f:29: 16:85:01:53:a7:6c:f1:60:ab:dd:a2:fc:25:47:d4: 32:d1:12:dd:f7:48:12:e0:fc:9c:a2:77:98:e9:89: 99:b8:f8:38:f1:8c:06:c2:7a:23:36:6d:9b:9d:cd: 30:c8:c7:34:17:1e:bb:7d:42:c8:ab:e7:15:16:f6: 73:b5 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Authority Key Identifier: keyid:A1:72:5F:26:1B:28:98:43:95:5D:07:37:D5:85:96:9D:4B:D2:C3:45 X509v3 Subject Key Identifier: 18:2A:A2:C8:D4:7A:3F:7B:AD:04:8B:BD:6F:9E:10:46:13:78:71:9D X509v3 Key Usage: critical Digital Signature, Key Encipherment X509v3 Basic Constraints: critical CA:FALSE X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.6449.1.2.1.3.4 CPS: https://secure.comodo.com/CPS X509v3 CRL Distribution Points: Full Name: URI:http://crl.comodoca.com/UTN-USERFirst-Hardware.crl Full Name: URI:http://crl.comodo.net/UTN-USERFirst-Hardware.crl Authority Information Access: CA Issuers - URI:http://crt.comodoca.com/UTNAddTrustServerCA.crt OCSP - URI:http://ocsp.comodoca.com X509v3 Subject Alternative Name: DNS:mail.google.com, DNS:www.mail.google.com Signature Algorithm: sha1WithRSAEncryption 67:06:08:0a:27:c5:93:6e:02:f2:de:17:3f:d0:d3:1b:7c:ff: b5:cd:7a:c7:77:c7:be:df:12:ca:19:de:b0:13:57:0c:03:91: c4:79:52:cf:7f:b7:5e:55:20:84:49:dd:f5:d0:29:2f:0e:04: da:59:9e:0e:13:9f:f4:c0:32:9b:ff:a1:11:24:2a:97:a3:f2: 3f:3d:2a:6b:a8:ad:8c:19:75:95:0e:1d:25:fd:4f:c4:7a:15: c3:1d:c7:13:40:c8:0d:be:97:60:72:a6:fe:25:be:8f:ec:d5: a6:86:c3:21:5c:59:52:d9:6a:0b:5c:9f:4b:de:b5:f9:ec:e2: f4:c5:cc:62:53:76:89:65:e4:29:da:b7:bf:96:e0:60:8d:0d: b7:09:55:d6:40:55:1d:c1:f2:96:21:75:af:89:86:1f:5d:81: 97:29:28:1e:29:d7:96:c1:20:03:32:7b:00:3b:6a:37:17:5a: a3:b3:1a:6f:32:3b:6e:f1:a3:5d:ab:ab:cc:2a:cb:30:0c:1f: 35:23:8b:69:44:5c:ea:ac:28:60:ed:ab:6b:63:9e:f6:92:bc: bd:9a:5a:26:4c:c5:98:b8:0e:19:3e:fc:05:31:e3:16:d9:fd: 90:05:03:86:c6:57:01:1f:7f:78:a0:cf:33:6a:aa:66:6b:22: d0:a7:49:23 SHA1 Fingerprint=64:31:72:30:36:FD:26:DE:A5:02:79:2F:A5:95:92:24:93:03:0F:97 -----BEGIN CERTIFICATE----- MIIF7jCCBNagAwIBAgIQBH7L6fylX3vQnq424QyuHjANBgkqhkiG9w0BAQUFADCB lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt SGFyZHdhcmUwHhcNMTEwMzE1MDAwMDAwWhcNMTQwMzE0MjM1OTU5WjCB3zELMAkG A1UEBhMCVVMxDjAMBgNVBBETBTM4NDc3MRAwDgYDVQQIEwdGbG9yaWRhMRAwDgYD VQQHEwdFbmdsaXNoMRcwFQYDVQQJEw5TZWEgVmlsbGFnZSAxMDEUMBIGA1UEChML R29vZ2xlIEx0ZC4xEzARBgNVBAsTClRlY2ggRGVwdC4xKDAmBgNVBAsTH0hvc3Rl ZCBieSBHVEkgR3JvdXAgQ29ycG9yYXRpb24xFDASBgNVBAsTC1BsYXRpbnVtU1NM MRgwFgYDVQQDEw9tYWlsLmdvb2dsZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB DwAwggEKAoIBAQCwc/DyBO7CokbKNCqqu2Aj0RF2Hx860GWDTppFqENwhXbwH4cA Ah9uOxcXxLXpGUaikiWNYiq0YzAfuYX4NeEWWnZJzFBIUzlZidaEAvua7BvHUdV2 lZDUOiq4pt4CTQb7ze2lRkFfVXTl7H5A3FCcteQ1XR5oIPjp3qNqKL9B0qGz4iWN DBvKPZMMGK7fxbz9vIK6aADXFjJxn2W1EdpoWdCmV2Qbyf6Y5fWlZerh2+70s52z juqHrhbSHqB8fGk/KRaFAVOnbPFgq92i/CVH1DLREt33SBLg/Jyid5jpiZm4+Djx jAbCeiM2bZudzTDIxzQXHrt9Qsir5xUW9nO1AgMBAAGjggHqMIIB5jAfBgNVHSME GDAWgBShcl8mGyiYQ5VdBzfVhZadS9LDRTAdBgNVHQ4EFgQUGCqiyNR6P3utBIu9 b54QRhN4cZ0wDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYw FAYIKwYBBQUHAwEGCCsGAQUFBwMCMEYGA1UdIAQ/MD0wOwYMKwYBBAGyMQECAQME MCswKQYIKwYBBQUHAgEWHWh0dHBzOi8vc2VjdXJlLmNvbW9kby5jb20vQ1BTMHsG A1UdHwR0MHIwOKA2oDSGMmh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1VUTi1VU0VS Rmlyc3QtSGFyZHdhcmUuY3JsMDagNKAyhjBodHRwOi8vY3JsLmNvbW9kby5uZXQv VVROLVVTRVJGaXJzdC1IYXJkd2FyZS5jcmwwcQYIKwYBBQUHAQEEZTBjMDsGCCsG AQUFBzAChi9odHRwOi8vY3J0LmNvbW9kb2NhLmNvbS9VVE5BZGRUcnVzdFNlcnZl ckNBLmNydDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2EuY29tMC8G A1UdEQQoMCaCD21haWwuZ29vZ2xlLmNvbYITd3d3Lm1haWwuZ29vZ2xlLmNvbTAN BgkqhkiG9w0BAQUFAAOCAQEAZwYICifFk24C8t4XP9DTG3z/tc16x3fHvt8Syhne sBNXDAORxHlSz3+3XlUghEnd9dApLw4E2lmeDhOf9MAym/+hESQql6PyPz0qa6it jBl1lQ4dJf1PxHoVwx3HE0DIDb6XYHKm/iW+j+zVpobDIVxZUtlqC1yfS961+ezi 9MXMYlN2iWXkKdq3v5bgYI0NtwlV1kBVHcHyliF1r4mGH12BlykoHinXlsEgAzJ7 ADtqNxdao7MabzI7bvGjXaurzCrLMAwfNSOLaURc6qwoYO2ra2Oe9pK8vZpaJkzF mLgOGT78BTHjFtn9kAUDhsZXAR9/eKDPM2qqZmsi0KdJIw== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: f5:c8:6a:f3:61:62:f1:3a:64:f5:4f:6d:c9:58:7c:06 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Hardware Validity Not Before: Mar 15 00:00:00 2011 GMT Not After : Mar 14 23:59:59 2014 GMT Subject: C=US/postalCode=38477, ST=Florida, L=English/street=Sea Village 10, O=Google Ltd., OU=Tech Dept., OU=Hosted by GTI Group Corporation, OU=PlatinumSSL, CN=www.google.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:b0:73:f0:f2:04:ee:c2:a2:46:ca:34:2a:aa:bb: 60:23:d1:11:76:1f:1f:3a:d0:65:83:4e:9a:45:a8: 43:70:85:76:f0:1f:87:00:02:1f:6e:3b:17:17:c4: b5:e9:19:46:a2:92:25:8d:62:2a:b4:63:30:1f:b9: 85:f8:35:e1:16:5a:76:49:cc:50:48:53:39:59:89: d6:84:02:fb:9a:ec:1b:c7:51:d5:76:95:90:d4:3a: 2a:b8:a6:de:02:4d:06:fb:cd:ed:a5:46:41:5f:55: 74:e5:ec:7e:40:dc:50:9c:b5:e4:35:5d:1e:68:20: f8:e9:de:a3:6a:28:bf:41:d2:a1:b3:e2:25:8d:0c: 1b:ca:3d:93:0c:18:ae:df:c5:bc:fd:bc:82:ba:68: 00:d7:16:32:71:9f:65:b5:11:da:68:59:d0:a6:57: 64:1b:c9:fe:98:e5:f5:a5:65:ea:e1:db:ee:f4:b3: 9d:b3:8e:ea:87:ae:16:d2:1e:a0:7c:7c:69:3f:29: 16:85:01:53:a7:6c:f1:60:ab:dd:a2:fc:25:47:d4: 32:d1:12:dd:f7:48:12:e0:fc:9c:a2:77:98:e9:89: 99:b8:f8:38:f1:8c:06:c2:7a:23:36:6d:9b:9d:cd: 30:c8:c7:34:17:1e:bb:7d:42:c8:ab:e7:15:16:f6: 73:b5 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Authority Key Identifier: keyid:A1:72:5F:26:1B:28:98:43:95:5D:07:37:D5:85:96:9D:4B:D2:C3:45 X509v3 Subject Key Identifier: 18:2A:A2:C8:D4:7A:3F:7B:AD:04:8B:BD:6F:9E:10:46:13:78:71:9D X509v3 Key Usage: critical Digital Signature, Key Encipherment X509v3 Basic Constraints: critical CA:FALSE X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.6449.1.2.1.3.4 CPS: https://secure.comodo.com/CPS X509v3 CRL Distribution Points: Full Name: URI:http://crl.comodoca.com/UTN-USERFirst-Hardware.crl Full Name: URI:http://crl.comodo.net/UTN-USERFirst-Hardware.crl Authority Information Access: CA Issuers - URI:http://crt.comodoca.com/UTNAddTrustServerCA.crt OCSP - URI:http://ocsp.comodoca.com X509v3 Subject Alternative Name: DNS:www.google.com, DNS:google.com Signature Algorithm: sha1WithRSAEncryption 71:c0:99:3f:5e:f6:bd:33:ff:9e:16:cb:a8:bf:dd:70:f9:d2: 53:3b:36:ae:c9:17:c8:ae:5e:4d:dd:62:f7:b7:d3:3e:77:a3: fe:c0:7b:32:b5:c9:94:05:52:50:f2:5f:3d:79:84:49:4f:5d: 6c:b0:d7:59:bd:d4:6c:88:fa:fc:c5:65:86:eb:28:52:a2:42: f6:7c:bc:6a:c7:07:2e:25:d1:90:62:20:c6:8d:51:c2:2c:45: 39:4e:03:da:f7:18:e8:cc:0a:3a:d9:45:d8:6c:6e:34:8b:62: 9c:4e:15:f9:43:ee:e5:97:c0:3f:ad:35:13:c5:2b:06:c7:41: fd:e2:f7:7e:45:ad:9b:d1:e1:66:ed:f8:7a:4b:94:39:7a:2f: eb:e8:3f:43:d8:35:d6:56:fa:74:e7:6d:e6:ed:ac:65:84:fe: d0:4d:06:12:de:da:59:00:3c:09:5c:cf:88:4b:e8:3d:b4:15: 21:92:cc:6d:a6:51:e2:8e:97:f1:f4:82:46:cb:c4:53:5e:da: 5c:9d:65:92:01:65:89:00:e5:b6:99:ff:26:40:f1:2f:19:31: 08:1a:b1:67:55:86:0d:ae:35:33:86:bc:97:48:92:d7:96:60: f8:ce:fc:96:eb:87:c4:73:cc:94:9b:58:5b:f3:7a:a4:27:13: d6:4f:f4:69 SHA1 Fingerprint=19:16:A2:AF:34:6D:39:9F:50:31:3C:39:32:00:F1:41:40:45:66:16 -----BEGIN CERTIFICATE----- MIIF5DCCBMygAwIBAgIRAPXIavNhYvE6ZPVPbclYfAYwDQYJKoZIhvcNAQEFBQAw gZcxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtl IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMY aHR0cDovL3d3dy51c2VydHJ1c3QuY29tMR8wHQYDVQQDExZVVE4tVVNFUkZpcnN0 LUhhcmR3YXJlMB4XDTExMDMxNTAwMDAwMFoXDTE0MDMxNDIzNTk1OVowgd4xCzAJ BgNVBAYTAlVTMQ4wDAYDVQQREwUzODQ3NzEQMA4GA1UECBMHRmxvcmlkYTEQMA4G A1UEBxMHRW5nbGlzaDEXMBUGA1UECRMOU2VhIFZpbGxhZ2UgMTAxFDASBgNVBAoT C0dvb2dsZSBMdGQuMRMwEQYDVQQLEwpUZWNoIERlcHQuMSgwJgYDVQQLEx9Ib3N0 ZWQgYnkgR1RJIEdyb3VwIENvcnBvcmF0aW9uMRQwEgYDVQQLEwtQbGF0aW51bVNT TDEXMBUGA1UEAxMOd3d3Lmdvb2dsZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB DwAwggEKAoIBAQCwc/DyBO7CokbKNCqqu2Aj0RF2Hx860GWDTppFqENwhXbwH4cA Ah9uOxcXxLXpGUaikiWNYiq0YzAfuYX4NeEWWnZJzFBIUzlZidaEAvua7BvHUdV2 lZDUOiq4pt4CTQb7ze2lRkFfVXTl7H5A3FCcteQ1XR5oIPjp3qNqKL9B0qGz4iWN DBvKPZMMGK7fxbz9vIK6aADXFjJxn2W1EdpoWdCmV2Qbyf6Y5fWlZerh2+70s52z juqHrhbSHqB8fGk/KRaFAVOnbPFgq92i/CVH1DLREt33SBLg/Jyid5jpiZm4+Djx jAbCeiM2bZudzTDIxzQXHrt9Qsir5xUW9nO1AgMBAAGjggHgMIIB3DAfBgNVHSME GDAWgBShcl8mGyiYQ5VdBzfVhZadS9LDRTAdBgNVHQ4EFgQUGCqiyNR6P3utBIu9 b54QRhN4cZ0wDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYw FAYIKwYBBQUHAwEGCCsGAQUFBwMCMEYGA1UdIAQ/MD0wOwYMKwYBBAGyMQECAQME MCswKQYIKwYBBQUHAgEWHWh0dHBzOi8vc2VjdXJlLmNvbW9kby5jb20vQ1BTMHsG A1UdHwR0MHIwOKA2oDSGMmh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1VUTi1VU0VS Rmlyc3QtSGFyZHdhcmUuY3JsMDagNKAyhjBodHRwOi8vY3JsLmNvbW9kby5uZXQv VVROLVVTRVJGaXJzdC1IYXJkd2FyZS5jcmwwcQYIKwYBBQUHAQEEZTBjMDsGCCsG AQUFBzAChi9odHRwOi8vY3J0LmNvbW9kb2NhLmNvbS9VVE5BZGRUcnVzdFNlcnZl ckNBLmNydDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2EuY29tMCUG A1UdEQQeMByCDnd3dy5nb29nbGUuY29tggpnb29nbGUuY29tMA0GCSqGSIb3DQEB BQUAA4IBAQBxwJk/Xva9M/+eFsuov91w+dJTOzauyRfIrl5N3WL3t9M+d6P+wHsy tcmUBVJQ8l89eYRJT11ssNdZvdRsiPr8xWWG6yhSokL2fLxqxwcuJdGQYiDGjVHC LEU5TgPa9xjozAo62UXYbG40i2KcThX5Q+7ll8A/rTUTxSsGx0H94vd+Ra2b0eFm 7fh6S5Q5ei/r6D9D2DXWVvp0523m7axlhP7QTQYS3tpZADwJXM+IS+g9tBUhksxt plHijpfx9IJGy8RTXtpcnWWSAWWJAOW2mf8mQPEvGTEIGrFnVYYNrjUzhryXSJLX lmD4zvyW64fEc8yUm1hb83qkJxPWT/Rp -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: e9:02:8b:95:78:e4:15:dc:1a:71:0a:2b:88:15:44:47 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Hardware Validity Not Before: Mar 15 00:00:00 2011 GMT Not After : Mar 14 23:59:59 2014 GMT Subject: C=US/postalCode=38477, ST=Florida, L=English/street=Sea Village 10, O=Google Ltd., OU=Tech Dept., OU=Hosted by GTI Group Corporation, OU=PlatinumSSL, CN=login.skype.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:b0:78:99:86:0e:a2:73:23:d4:5a:c3:49:eb:b1: 36:8c:7c:ca:84:ae:3c:af:38:88:28:99:8d:2d:58: 13:b1:97:78:3e:52:20:67:ac:5b:73:98:6c:32:55: c9:70:d1:d9:aa:15:e8:2e:26:85:81:bc:56:e4:bc: 80:63:db:4e:d7:f5:02:be:51:63:1e:3c:db:df:d7: 00:5d:5a:b9:e5:7b:6a:ea:38:20:b2:3b:b6:ee:75: 54:84:f9:a6:ca:38:70:dd:bf:b0:ff:a5:85:5d:b4: 41:fe:dd:3d:d9:2a:e1:30:43:1a:98:79:93:a0:5f: e0:67:6c:95:fa:3e:7a:ae:71:7b:e3:6d:88:42:3f: 25:d4:ee:be:68:68:ac:ad:ac:60:e0:20:a3:39:83: b9:5b:28:a3:93:6d:a1:bd:76:0a:e3:eb:ae:87:27: 0e:54:8f:b4:48:0c:9a:54:f4:5d:8e:37:50:dc:5e: a4:8b:6b:4b:dc:a6:f3:34:be:77:59:22:88:ff:19: 2b:6d:76:64:73:da:0c:87:07:2b:9a:37:3a:d0:e2: 8c:f6:36:32:6b:9a:79:cc:d2:3b:93:6f:1a:4d:6c: e6:c1:9d:40:ac:2d:74:c3:be:ea:5c:73:65:01:29: b1:2a:bf:70:59:c1:ce:c6:c3:a2:c8:45:5f:ba:67: 3d:0f Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Authority Key Identifier: keyid:A1:72:5F:26:1B:28:98:43:95:5D:07:37:D5:85:96:9D:4B:D2:C3:45 X509v3 Subject Key Identifier: D5:8E:5A:51:13:B4:29:0D:31:B6:1C:8D:3E:51:51:31:0A:33:AA:81 X509v3 Key Usage: critical Digital Signature, Key Encipherment X509v3 Basic Constraints: critical CA:FALSE X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.6449.1.2.1.3.4 CPS: https://secure.comodo.com/CPS X509v3 CRL Distribution Points: Full Name: URI:http://crl.comodoca.com/UTN-USERFirst-Hardware.crl Full Name: URI:http://crl.comodo.net/UTN-USERFirst-Hardware.crl Authority Information Access: CA Issuers - URI:http://crt.comodoca.com/UTNAddTrustServerCA.crt OCSP - URI:http://ocsp.comodoca.com X509v3 Subject Alternative Name: DNS:login.skype.com, DNS:www.login.skype.com Signature Algorithm: sha1WithRSAEncryption 08:f2:81:75:91:bb:ce:12:04:18:c2:4d:5a:fb:46:90:0a:54: 44:f4:f2:dd:07:81:f0:1f:a6:7a:6f:9f:cf:b8:0e:2c:4f:9c: c4:9a:f5:a8:f6:ba:a4:c9:7a:5d:b1:e2:5a:ca:3c:fa:60:a8: 68:3e:cb:ba:2d:e2:cd:d6:b6:e4:92:3c:69:ad:57:ea:a8:2f: 38:10:84:72:e5:68:71:ed:be:eb:6e:18:ef:63:7a:be:e7:24: ff:c0:63:fd:58:3b:4c:81:92:d8:29:ab:8e:35:5d:d7:d3:09: 6b:85:d3:d5:73:05:44:e2:e5:bb:83:53:10:cb:f2:cf:b7:6e: e1:69:b7:a1:92:64:c5:cf:cd:82:bb:36:a0:38:ad:d7:24:df: 53:fc:3f:62:b7:b7:d5:c7:57:e3:93:31:70:8e:24:89:86:ca: 63:2b:39:ba:5d:d9:6a:60:ec:a1:4e:8a:fe:53:f8:5e:92:df: 2f:5c:26:17:6d:03:7d:02:0f:0f:aa:43:67:6d:b0:62:bf:7e: 53:dd:cc:ec:78:73:95:e5:a5:f6:00:a3:04:fd:3f:04:2a:b3: 98:c5:b7:03:1c:db:c9:50:ab:b0:05:1d:1e:be:56:b4:cf:3e: 42:13:94:9e:f9:e7:01:81:a5:78:6f:0c:7a:76:ac:05:86:ec: ac:c2:11:ac SHA1 Fingerprint=47:1C:94:9A:81:43:DB:5A:D5:CD:F1:C9:72:86:4A:25:04:FA:23:C9 -----BEGIN CERTIFICATE----- MIIF7zCCBNegAwIBAgIRAOkCi5V45BXcGnEKK4gVREcwDQYJKoZIhvcNAQEFBQAw gZcxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtl IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMY aHR0cDovL3d3dy51c2VydHJ1c3QuY29tMR8wHQYDVQQDExZVVE4tVVNFUkZpcnN0 LUhhcmR3YXJlMB4XDTExMDMxNTAwMDAwMFoXDTE0MDMxNDIzNTk1OVowgd8xCzAJ BgNVBAYTAlVTMQ4wDAYDVQQREwUzODQ3NzEQMA4GA1UECBMHRmxvcmlkYTEQMA4G A1UEBxMHRW5nbGlzaDEXMBUGA1UECRMOU2VhIFZpbGxhZ2UgMTAxFDASBgNVBAoT C0dvb2dsZSBMdGQuMRMwEQYDVQQLEwpUZWNoIERlcHQuMSgwJgYDVQQLEx9Ib3N0 ZWQgYnkgR1RJIEdyb3VwIENvcnBvcmF0aW9uMRQwEgYDVQQLEwtQbGF0aW51bVNT TDEYMBYGA1UEAxMPbG9naW4uc2t5cGUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEAsHiZhg6icyPUWsNJ67E2jHzKhK48rziIKJmNLVgTsZd4PlIg Z6xbc5hsMlXJcNHZqhXoLiaFgbxW5LyAY9tO1/UCvlFjHjzb39cAXVq55Xtq6jgg sju27nVUhPmmyjhw3b+w/6WFXbRB/t092SrhMEMamHmToF/gZ2yV+j56rnF7422I Qj8l1O6+aGisraxg4CCjOYO5Wyijk22hvXYK4+uuhycOVI+0SAyaVPRdjjdQ3F6k i2tL3KbzNL53WSKI/xkrbXZkc9oMhwcrmjc60OKM9jYya5p5zNI7k28aTWzmwZ1A rC10w77qXHNlASmxKr9wWcHOxsOiyEVfumc9DwIDAQABo4IB6jCCAeYwHwYDVR0j BBgwFoAUoXJfJhsomEOVXQc31YWWnUvSw0UwHQYDVR0OBBYEFNWOWlETtCkNMbYc jT5RUTEKM6qBMA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQW MBQGCCsGAQUFBwMBBggrBgEFBQcDAjBGBgNVHSAEPzA9MDsGDCsGAQQBsjEBAgED BDArMCkGCCsGAQUFBwIBFh1odHRwczovL3NlY3VyZS5jb21vZG8uY29tL0NQUzB7 BgNVHR8EdDByMDigNqA0hjJodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9VVE4tVVNF UkZpcnN0LUhhcmR3YXJlLmNybDA2oDSgMoYwaHR0cDovL2NybC5jb21vZG8ubmV0 L1VUTi1VU0VSRmlyc3QtSGFyZHdhcmUuY3JsMHEGCCsGAQUFBwEBBGUwYzA7Bggr BgEFBQcwAoYvaHR0cDovL2NydC5jb21vZG9jYS5jb20vVVROQWRkVHJ1c3RTZXJ2 ZXJDQS5jcnQwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmNvbW9kb2NhLmNvbTAv BgNVHREEKDAmgg9sb2dpbi5za3lwZS5jb22CE3d3dy5sb2dpbi5za3lwZS5jb20w DQYJKoZIhvcNAQEFBQADggEBAAjygXWRu84SBBjCTVr7RpAKVET08t0HgfAfpnpv n8+4DixPnMSa9aj2uqTJel2x4lrKPPpgqGg+y7ot4s3WtuSSPGmtV+qoLzgQhHLl aHHtvutuGO9jer7nJP/AY/1YO0yBktgpq441XdfTCWuF09VzBUTi5buDUxDL8s+3 buFpt6GSZMXPzYK7NqA4rdck31P8P2K3t9XHV+OTMXCOJImGymMrObpd2Wpg7KFO iv5T+F6S3y9cJhdtA30CDw+qQ2dtsGK/flPdzOx4c5XlpfYAowT9PwQqs5jFtwMc 28lQq7AFHR6+VrTPPkITlJ755wGBpXhvDHp2rAWG7KzCEaw= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: d7:55:8f:da:f5:f1:10:5b:b2:13:28:2b:70:77:29:a3 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Hardware Validity Not Before: Mar 15 00:00:00 2011 GMT Not After : Mar 14 23:59:59 2014 GMT Subject: C=US/postalCode=38477, ST=Florida, L=English/street=Sea Village 10, O=Google Ltd., OU=Tech Dept., OU=Hosted by GTI Group Corporation, OU=PlatinumSSL, CN=login.yahoo.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:a1:a4:05:3d:ed:85:45:93:8a:18:4d:c6:03:00: 57:e2:40:77:f0:1c:eb:d0:19:df:22:5d:08:7f:d1: 07:3c:41:89:46:17:a3:09:fa:fc:f8:a9:04:d1:96: 8f:ab:d7:4f:3c:f9:ad:18:a9:74:81:c4:57:0a:3a: 26:16:ce:62:3e:bc:3f:6c:21:ee:93:8d:cb:0d:a0: 1f:9a:96:d0:8f:ad:f5:93:93:82:ee:72:0c:a1:75: 15:a3:7b:84:56:b8:ad:ff:52:11:71:84:bc:3a:30: 0b:7e:98:a8:e1:a8:3f:37:52:d0:f1:7c:6f:90:d8: 45:0a:ac:39:72:6a:61:d5:bb:c3:8c:f9:c2:cc:df: fd:3a:71:b9:af:bc:dc:3a:dc:0c:b6:b1:d2:d1:89: bb:41:b6:f2:de:57:d5:15:df:fc:fd:e2:31:c5:df: ca:c1:d8:8f:2c:bf:f0:0e:5b:71:e0:34:71:c3:c5: 4d:7d:7a:d4:fa:ed:30:4b:2f:ea:b6:2e:9e:93:3c: e2:3a:f8:42:a2:1a:ee:dc:df:cd:0f:a9:f6:79:84: 1a:8e:6c:02:b6:86:e5:bf:51:6a:66:f8:f3:9c:d3: 59:0c:7b:a5:99:78:cd:7c:99:fa:c6:96:47:d8:32: d4:74:76:0e:77:4b:20:74:a4:b7:89:75:92:4a:b4: 5b:55 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Authority Key Identifier: keyid:A1:72:5F:26:1B:28:98:43:95:5D:07:37:D5:85:96:9D:4B:D2:C3:45 X509v3 Subject Key Identifier: 86:49:45:FC:33:19:33:D4:04:ED:27:61:EE:E8:01:C9:0C:7F:2F:7E X509v3 Key Usage: critical Digital Signature, Key Encipherment X509v3 Basic Constraints: critical CA:FALSE X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.6449.1.2.1.3.4 CPS: https://secure.comodo.com/CPS X509v3 CRL Distribution Points: Full Name: URI:http://crl.comodoca.com/UTN-USERFirst-Hardware.crl Full Name: URI:http://crl.comodo.net/UTN-USERFirst-Hardware.crl Authority Information Access: CA Issuers - URI:http://crt.comodoca.com/UTNAddTrustServerCA.crt OCSP - URI:http://ocsp.comodoca.com X509v3 Subject Alternative Name: DNS:login.yahoo.com, DNS:www.login.yahoo.com Signature Algorithm: sha1WithRSAEncryption 3d:57:c9:48:24:5c:ee:64:81:f5:ae:be:55:29:16:ff:2a:2f: 84:ed:d9:f8:a3:03:c8:30:66:bb:c8:d4:81:2d:21:f7:08:f7: ac:96:42:9a:41:75:7a:ba:5d:10:23:cb:92:42:61:fa:8a:da: 6d:65:34:19:e5:a9:d6:2d:13:78:d7:81:44:92:a9:6e:80:63: 15:cb:fe:35:1f:02:d1:8a:14:b0:a8:cc:94:20:3b:a8:1a:f0: 5d:36:50:db:0d:ae:e9:64:e4:f6:8d:69:7d:30:c8:14:17:00: 4a:e5:a6:35:fb:7d:0d:22:9d:79:76:52:2c:bc:97:06:88:9a: 15:f4:73:e6:f1:f5:98:a5:cd:07:44:91:b8:a7:68:67:45:d2: 72:11:60:e2:71:b7:50:55:e2:8a:a9:0d:d6:92:ee:04:2a:8b: 30:a0:a2:05:46:34:6d:92:c6:3b:aa:4d:a0:d0:ab:01:19:0a: 32:b7:e8:e3:cf:f1:d2:97:49:7b:ac:a4:97:f7:f0:57:ae:63: 77:9a:7f:96:da:4d:fd:be:dc:07:36:e3:25:bd:89:79:8e:29: 12:13:8b:88:07:fb:6b:db:a4:cd:b3:2d:27:e9:d4:ca:60:d7: 85:53:fb:74:c6:5c:35:8c:70:1f:f9:b2:b7:92:27:20:c7:94: d5:67:14:30 SHA1 Fingerprint=63:FE:AE:96:0B:AA:91:E3:43:CE:2B:D8:B7:17:98:C7:6B:DB:77:D0 -----BEGIN CERTIFICATE----- MIIF7zCCBNegAwIBAgIRANdVj9r18RBbshMoK3B3KaMwDQYJKoZIhvcNAQEFBQAw gZcxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtl IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMY aHR0cDovL3d3dy51c2VydHJ1c3QuY29tMR8wHQYDVQQDExZVVE4tVVNFUkZpcnN0 LUhhcmR3YXJlMB4XDTExMDMxNTAwMDAwMFoXDTE0MDMxNDIzNTk1OVowgd8xCzAJ BgNVBAYTAlVTMQ4wDAYDVQQREwUzODQ3NzEQMA4GA1UECBMHRmxvcmlkYTEQMA4G A1UEBxMHRW5nbGlzaDEXMBUGA1UECRMOU2VhIFZpbGxhZ2UgMTAxFDASBgNVBAoT C0dvb2dsZSBMdGQuMRMwEQYDVQQLEwpUZWNoIERlcHQuMSgwJgYDVQQLEx9Ib3N0 ZWQgYnkgR1RJIEdyb3VwIENvcnBvcmF0aW9uMRQwEgYDVQQLEwtQbGF0aW51bVNT TDEYMBYGA1UEAxMPbG9naW4ueWFob28uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEAoaQFPe2FRZOKGE3GAwBX4kB38Bzr0BnfIl0If9EHPEGJRhej Cfr8+KkE0ZaPq9dPPPmtGKl0gcRXCjomFs5iPrw/bCHuk43LDaAfmpbQj631k5OC 7nIMoXUVo3uEVrit/1IRcYS8OjALfpio4ag/N1LQ8XxvkNhFCqw5cmph1bvDjPnC zN/9OnG5r7zcOtwMtrHS0Ym7Qbby3lfVFd/8/eIxxd/KwdiPLL/wDltx4DRxw8VN fXrU+u0wSy/qti6ekzziOvhCohru3N/ND6n2eYQajmwCtoblv1FqZvjznNNZDHul mXjNfJn6xpZH2DLUdHYOd0sgdKS3iXWSSrRbVQIDAQABo4IB6jCCAeYwHwYDVR0j BBgwFoAUoXJfJhsomEOVXQc31YWWnUvSw0UwHQYDVR0OBBYEFIZJRfwzGTPUBO0n Ye7oAckMfy9+MA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQW MBQGCCsGAQUFBwMBBggrBgEFBQcDAjBGBgNVHSAEPzA9MDsGDCsGAQQBsjEBAgED BDArMCkGCCsGAQUFBwIBFh1odHRwczovL3NlY3VyZS5jb21vZG8uY29tL0NQUzB7 BgNVHR8EdDByMDigNqA0hjJodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9VVE4tVVNF UkZpcnN0LUhhcmR3YXJlLmNybDA2oDSgMoYwaHR0cDovL2NybC5jb21vZG8ubmV0 L1VUTi1VU0VSRmlyc3QtSGFyZHdhcmUuY3JsMHEGCCsGAQUFBwEBBGUwYzA7Bggr BgEFBQcwAoYvaHR0cDovL2NydC5jb21vZG9jYS5jb20vVVROQWRkVHJ1c3RTZXJ2 ZXJDQS5jcnQwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmNvbW9kb2NhLmNvbTAv BgNVHREEKDAmgg9sb2dpbi55YWhvby5jb22CE3d3dy5sb2dpbi55YWhvby5jb20w DQYJKoZIhvcNAQEFBQADggEBAD1XyUgkXO5kgfWuvlUpFv8qL4Tt2fijA8gwZrvI 1IEtIfcI96yWQppBdXq6XRAjy5JCYfqK2m1lNBnlqdYtE3jXgUSSqW6AYxXL/jUf AtGKFLCozJQgO6ga8F02UNsNrulk5PaNaX0wyBQXAErlpjX7fQ0inXl2Uiy8lwaI mhX0c+bx9ZilzQdEkbinaGdF0nIRYOJxt1BV4oqpDdaS7gQqizCgogVGNG2Sxjuq TaDQqwEZCjK36OPP8dKXSXuspJf38FeuY3eaf5baTf2+3Ac24yW9iXmOKRITi4gH +2vbpM2zLSfp1Mpg14VT+3TGXDWMcB/5sreSJyDHlNVnFDA= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 39:2a:43:4f:0e:07:df:1f:8a:a3:05:de:34:e0:c2:29 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Hardware Validity Not Before: Mar 15 00:00:00 2011 GMT Not After : Mar 14 23:59:59 2014 GMT Subject: C=US/postalCode=38477, ST=Florida, L=English/street=Sea Village 10, O=Google Ltd., OU=Tech Dept., OU=Hosted by GTI Group Corporation, OU=PlatinumSSL, CN=login.yahoo.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:a1:a4:05:3d:ed:85:45:93:8a:18:4d:c6:03:00: 57:e2:40:77:f0:1c:eb:d0:19:df:22:5d:08:7f:d1: 07:3c:41:89:46:17:a3:09:fa:fc:f8:a9:04:d1:96: 8f:ab:d7:4f:3c:f9:ad:18:a9:74:81:c4:57:0a:3a: 26:16:ce:62:3e:bc:3f:6c:21:ee:93:8d:cb:0d:a0: 1f:9a:96:d0:8f:ad:f5:93:93:82:ee:72:0c:a1:75: 15:a3:7b:84:56:b8:ad:ff:52:11:71:84:bc:3a:30: 0b:7e:98:a8:e1:a8:3f:37:52:d0:f1:7c:6f:90:d8: 45:0a:ac:39:72:6a:61:d5:bb:c3:8c:f9:c2:cc:df: fd:3a:71:b9:af:bc:dc:3a:dc:0c:b6:b1:d2:d1:89: bb:41:b6:f2:de:57:d5:15:df:fc:fd:e2:31:c5:df: ca:c1:d8:8f:2c:bf:f0:0e:5b:71:e0:34:71:c3:c5: 4d:7d:7a:d4:fa:ed:30:4b:2f:ea:b6:2e:9e:93:3c: e2:3a:f8:42:a2:1a:ee:dc:df:cd:0f:a9:f6:79:84: 1a:8e:6c:02:b6:86:e5:bf:51:6a:66:f8:f3:9c:d3: 59:0c:7b:a5:99:78:cd:7c:99:fa:c6:96:47:d8:32: d4:74:76:0e:77:4b:20:74:a4:b7:89:75:92:4a:b4: 5b:55 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Authority Key Identifier: keyid:A1:72:5F:26:1B:28:98:43:95:5D:07:37:D5:85:96:9D:4B:D2:C3:45 X509v3 Subject Key Identifier: 86:49:45:FC:33:19:33:D4:04:ED:27:61:EE:E8:01:C9:0C:7F:2F:7E X509v3 Key Usage: critical Digital Signature, Key Encipherment X509v3 Basic Constraints: critical CA:FALSE X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.6449.1.2.1.3.4 CPS: https://secure.comodo.com/CPS X509v3 CRL Distribution Points: Full Name: URI:http://crl.comodoca.com/UTN-USERFirst-Hardware.crl Full Name: URI:http://crl.comodo.net/UTN-USERFirst-Hardware.crl Authority Information Access: CA Issuers - URI:http://crt.comodoca.com/UTNAddTrustServerCA.crt OCSP - URI:http://ocsp.comodoca.com X509v3 Subject Alternative Name: DNS:login.yahoo.com Signature Algorithm: sha1WithRSAEncryption 57:62:e1:77:eb:fc:1f:bf:88:53:af:58:d3:d4:d6:6d:67:30: 17:40:be:e0:1f:64:de:87:15:cc:e0:a4:56:a9:d1:9f:f9:01: fe:02:b1:b1:ea:e2:5f:ee:71:16:31:f9:08:d5:c2:d7:9a:9b: b2:5a:38:d7:a9:7f:e9:87:6b:31:f9:0b:ac:d9:fd:50:71:e0: db:82:92:0f:81:9c:8d:77:e9:eb:2e:ea:d4:23:41:87:ec:2d: b2:78:b3:8e:b1:67:d2:ee:71:03:08:12:99:b3:02:29:6f:de: 8b:de:c1:a9:03:0a:5a:33:1c:3d:11:03:c6:48:0c:98:9c:15: 2e:d9:a6:85:52:e7:05:8a:ae:30:23:eb:ed:28:6c:60:e9:2d: 7f:8f:47:8b:2f:d0:dc:e6:bb:0f:7e:5f:f2:48:81:8e:50:04: 63:b1:51:80:75:9a:a9:b6:10:1c:10:5f:6f:18:6f:e0:0e:96: 45:ce:ee:f1:b5:20:db:ef:da:6e:c8:95:e3:f6:45:fd:ca:fc: a5:5f:49:6d:06:1e:d2:de:61:3d:15:7d:37:e5:1c:35:8e:06: c2:6b:f7:b4:a8:28:2c:31:cb:aa:b4:a7:97:4f:9d:8a:f6:af: 7e:37:b9:7b:3d:df:92:66:8b:8f:4e:9d:c6:36:e7:5c:a6:ab: 12:0f:d6:cf SHA1 Fingerprint=D0:18:B6:2D:C5:18:90:72:47:DF:50:92:5B:B0:9A:CF:4A:5C:B3:AD -----BEGIN CERTIFICATE----- MIIF2TCCBMGgAwIBAgIQOSpDTw4H3x+KowXeNODCKTANBgkqhkiG9w0BAQUFADCB lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt SGFyZHdhcmUwHhcNMTEwMzE1MDAwMDAwWhcNMTQwMzE0MjM1OTU5WjCB3zELMAkG A1UEBhMCVVMxDjAMBgNVBBETBTM4NDc3MRAwDgYDVQQIEwdGbG9yaWRhMRAwDgYD VQQHEwdFbmdsaXNoMRcwFQYDVQQJEw5TZWEgVmlsbGFnZSAxMDEUMBIGA1UEChML R29vZ2xlIEx0ZC4xEzARBgNVBAsTClRlY2ggRGVwdC4xKDAmBgNVBAsTH0hvc3Rl ZCBieSBHVEkgR3JvdXAgQ29ycG9yYXRpb24xFDASBgNVBAsTC1BsYXRpbnVtU1NM MRgwFgYDVQQDEw9sb2dpbi55YWhvby5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB DwAwggEKAoIBAQChpAU97YVFk4oYTcYDAFfiQHfwHOvQGd8iXQh/0Qc8QYlGF6MJ +vz4qQTRlo+r1088+a0YqXSBxFcKOiYWzmI+vD9sIe6TjcsNoB+altCPrfWTk4Lu cgyhdRWje4RWuK3/UhFxhLw6MAt+mKjhqD83UtDxfG+Q2EUKrDlyamHVu8OM+cLM 3/06cbmvvNw63Ay2sdLRibtBtvLeV9UV3/z94jHF38rB2I8sv/AOW3HgNHHDxU19 etT67TBLL+q2Lp6TPOI6+EKiGu7c380PqfZ5hBqObAK2huW/UWpm+POc01kMe6WZ eM18mfrGlkfYMtR0dg53SyB0pLeJdZJKtFtVAgMBAAGjggHVMIIB0TAfBgNVHSME GDAWgBShcl8mGyiYQ5VdBzfVhZadS9LDRTAdBgNVHQ4EFgQUhklF/DMZM9QE7Sdh 7ugByQx/L34wDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYw FAYIKwYBBQUHAwEGCCsGAQUFBwMCMEYGA1UdIAQ/MD0wOwYMKwYBBAGyMQECAQME MCswKQYIKwYBBQUHAgEWHWh0dHBzOi8vc2VjdXJlLmNvbW9kby5jb20vQ1BTMHsG A1UdHwR0MHIwOKA2oDSGMmh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1VUTi1VU0VS Rmlyc3QtSGFyZHdhcmUuY3JsMDagNKAyhjBodHRwOi8vY3JsLmNvbW9kby5uZXQv VVROLVVTRVJGaXJzdC1IYXJkd2FyZS5jcmwwcQYIKwYBBQUHAQEEZTBjMDsGCCsG AQUFBzAChi9odHRwOi8vY3J0LmNvbW9kb2NhLmNvbS9VVE5BZGRUcnVzdFNlcnZl ckNBLmNydDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2EuY29tMBoG A1UdEQQTMBGCD2xvZ2luLnlhaG9vLmNvbTANBgkqhkiG9w0BAQUFAAOCAQEAV2Lh d+v8H7+IU69Y09TWbWcwF0C+4B9k3ocVzOCkVqnRn/kB/gKxseriX+5xFjH5CNXC 15qbslo416l/6YdrMfkLrNn9UHHg24KSD4GcjXfp6y7q1CNBh+wtsnizjrFn0u5x AwgSmbMCKW/ei97BqQMKWjMcPREDxkgMmJwVLtmmhVLnBYquMCPr7ShsYOktf49H iy/Q3Oa7D35f8kiBjlAEY7FRgHWaqbYQHBBfbxhv4A6WRc7u8bUg2+/absiV4/ZF /cr8pV9JbQYe0t5hPRV9N+UcNY4Gwmv3tKgoLDHLqrSnl0+divavfje5ez3fkmaL j06dxjbnXKarEg/Wzw== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 3e:75:ce:d4:6b:69:30:21:21:88:30:ae:86:a8:2a:71 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Hardware Validity Not Before: Mar 15 00:00:00 2011 GMT Not After : Mar 14 23:59:59 2014 GMT Subject: C=US/postalCode=38477, ST=Florida, L=English/street=Sea Village 10, O=Google Ltd., OU=Tech Dept., OU=Hosted by GTI Group Corporation, OU=PlatinumSSL, CN=login.yahoo.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:a1:a4:05:3d:ed:85:45:93:8a:18:4d:c6:03:00: 57:e2:40:77:f0:1c:eb:d0:19:df:22:5d:08:7f:d1: 07:3c:41:89:46:17:a3:09:fa:fc:f8:a9:04:d1:96: 8f:ab:d7:4f:3c:f9:ad:18:a9:74:81:c4:57:0a:3a: 26:16:ce:62:3e:bc:3f:6c:21:ee:93:8d:cb:0d:a0: 1f:9a:96:d0:8f:ad:f5:93:93:82:ee:72:0c:a1:75: 15:a3:7b:84:56:b8:ad:ff:52:11:71:84:bc:3a:30: 0b:7e:98:a8:e1:a8:3f:37:52:d0:f1:7c:6f:90:d8: 45:0a:ac:39:72:6a:61:d5:bb:c3:8c:f9:c2:cc:df: fd:3a:71:b9:af:bc:dc:3a:dc:0c:b6:b1:d2:d1:89: bb:41:b6:f2:de:57:d5:15:df:fc:fd:e2:31:c5:df: ca:c1:d8:8f:2c:bf:f0:0e:5b:71:e0:34:71:c3:c5: 4d:7d:7a:d4:fa:ed:30:4b:2f:ea:b6:2e:9e:93:3c: e2:3a:f8:42:a2:1a:ee:dc:df:cd:0f:a9:f6:79:84: 1a:8e:6c:02:b6:86:e5:bf:51:6a:66:f8:f3:9c:d3: 59:0c:7b:a5:99:78:cd:7c:99:fa:c6:96:47:d8:32: d4:74:76:0e:77:4b:20:74:a4:b7:89:75:92:4a:b4: 5b:55 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Authority Key Identifier: keyid:A1:72:5F:26:1B:28:98:43:95:5D:07:37:D5:85:96:9D:4B:D2:C3:45 X509v3 Subject Key Identifier: 86:49:45:FC:33:19:33:D4:04:ED:27:61:EE:E8:01:C9:0C:7F:2F:7E X509v3 Key Usage: critical Digital Signature, Key Encipherment X509v3 Basic Constraints: critical CA:FALSE X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.6449.1.2.1.3.4 CPS: https://secure.comodo.com/CPS X509v3 CRL Distribution Points: Full Name: URI:http://crl.comodoca.com/UTN-USERFirst-Hardware.crl Full Name: URI:http://crl.comodo.net/UTN-USERFirst-Hardware.crl Authority Information Access: CA Issuers - URI:http://crt.comodoca.com/UTNAddTrustServerCA.crt OCSP - URI:http://ocsp.comodoca.com X509v3 Subject Alternative Name: DNS:login.yahoo.com Signature Algorithm: sha1WithRSAEncryption 53:69:98:8e:28:4e:9c:2b:5b:1d:cc:6b:77:28:3d:bb:fa:a5: 4e:7e:56:29:a4:ea:10:e2:f4:e6:2d:06:d1:84:db:23:ce:97: f3:68:b6:0f:3a:de:15:0b:24:1d:91:e3:6c:2e:30:b7:e9:70: b0:c3:46:80:f0:d3:b1:51:bf:4f:d6:78:a0:fc:ac:c6:cf:31: 04:63:e2:34:55:05:4a:3d:f6:30:ba:f3:33:e5:ba:d2:96:f3: d5:b1:b6:93:89:1a:a4:68:be:7e:ed:63:b4:1a:48:c0:53:e4: a3:f0:39:0c:32:92:c7:43:0d:1a:71:ed:d0:46:93:bf:93:62: 6c:33:4b:cd:36:0d:69:5e:bb:6c:96:99:21:69:c4:4b:67:72: db:6c:6a:b8:f7:68:ed:c5:8f:ad:63:65:95:0a:4c:e0:f9:0f: 7e:37:3d:aa:d4:93:ba:67:09:c3:a5:a4:0d:03:5a:6d:d5:0b: fe:f0:40:14:b4:f6:b8:69:7c:6d:c2:32:4b:9f:b5:1a:e7:46: ae:4c:5a:2b:aa:7a:5e:90:57:95:fa:db:66:02:20:1e:6a:69: 66:15:9c:c2:b6:f5:bc:50:b5:fd:45:c7:1f:68:b4:47:59:ac: c4:1b:28:93:4e:52:53:12:03:58:4b:71:83:9f:66:e6:ac:79: 48:fe:fe:47 SHA1 Fingerprint=80:96:2A:E4:D6:C5:B4:42:89:4E:95:A1:3E:4A:69:9E:07:D6:94:CF -----BEGIN CERTIFICATE----- MIIF2TCCBMGgAwIBAgIQPnXO1GtpMCEhiDCuhqgqcTANBgkqhkiG9w0BAQUFADCB lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt SGFyZHdhcmUwHhcNMTEwMzE1MDAwMDAwWhcNMTQwMzE0MjM1OTU5WjCB3zELMAkG A1UEBhMCVVMxDjAMBgNVBBETBTM4NDc3MRAwDgYDVQQIEwdGbG9yaWRhMRAwDgYD VQQHEwdFbmdsaXNoMRcwFQYDVQQJEw5TZWEgVmlsbGFnZSAxMDEUMBIGA1UEChML R29vZ2xlIEx0ZC4xEzARBgNVBAsTClRlY2ggRGVwdC4xKDAmBgNVBAsTH0hvc3Rl ZCBieSBHVEkgR3JvdXAgQ29ycG9yYXRpb24xFDASBgNVBAsTC1BsYXRpbnVtU1NM MRgwFgYDVQQDEw9sb2dpbi55YWhvby5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB DwAwggEKAoIBAQChpAU97YVFk4oYTcYDAFfiQHfwHOvQGd8iXQh/0Qc8QYlGF6MJ +vz4qQTRlo+r1088+a0YqXSBxFcKOiYWzmI+vD9sIe6TjcsNoB+altCPrfWTk4Lu cgyhdRWje4RWuK3/UhFxhLw6MAt+mKjhqD83UtDxfG+Q2EUKrDlyamHVu8OM+cLM 3/06cbmvvNw63Ay2sdLRibtBtvLeV9UV3/z94jHF38rB2I8sv/AOW3HgNHHDxU19 etT67TBLL+q2Lp6TPOI6+EKiGu7c380PqfZ5hBqObAK2huW/UWpm+POc01kMe6WZ eM18mfrGlkfYMtR0dg53SyB0pLeJdZJKtFtVAgMBAAGjggHVMIIB0TAfBgNVHSME GDAWgBShcl8mGyiYQ5VdBzfVhZadS9LDRTAdBgNVHQ4EFgQUhklF/DMZM9QE7Sdh 7ugByQx/L34wDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYw FAYIKwYBBQUHAwEGCCsGAQUFBwMCMEYGA1UdIAQ/MD0wOwYMKwYBBAGyMQECAQME MCswKQYIKwYBBQUHAgEWHWh0dHBzOi8vc2VjdXJlLmNvbW9kby5jb20vQ1BTMHsG A1UdHwR0MHIwOKA2oDSGMmh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1VUTi1VU0VS Rmlyc3QtSGFyZHdhcmUuY3JsMDagNKAyhjBodHRwOi8vY3JsLmNvbW9kby5uZXQv VVROLVVTRVJGaXJzdC1IYXJkd2FyZS5jcmwwcQYIKwYBBQUHAQEEZTBjMDsGCCsG AQUFBzAChi9odHRwOi8vY3J0LmNvbW9kb2NhLmNvbS9VVE5BZGRUcnVzdFNlcnZl ckNBLmNydDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2EuY29tMBoG A1UdEQQTMBGCD2xvZ2luLnlhaG9vLmNvbTANBgkqhkiG9w0BAQUFAAOCAQEAU2mY jihOnCtbHcxrdyg9u/qlTn5WKaTqEOL05i0G0YTbI86X82i2DzreFQskHZHjbC4w t+lwsMNGgPDTsVG/T9Z4oPysxs8xBGPiNFUFSj32MLrzM+W60pbz1bG2k4kapGi+ fu1jtBpIwFPko/A5DDKSx0MNGnHt0EaTv5NibDNLzTYNaV67bJaZIWnES2dy22xq uPdo7cWPrWNllQpM4PkPfjc9qtSTumcJw6WkDQNabdUL/vBAFLT2uGl8bcIyS5+1 GudGrkxaK6p6XpBXlfrbZgIgHmppZhWcwrb1vFC1/UXHH2i0R1msxBsok05SUxID WEtxg59m5qx5SP7+Rw== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: b0:b7:13:3e:d0:96:f9:b5:6f:ae:91:c8:74:bd:3a:c0 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Hardware Validity Not Before: Mar 15 00:00:00 2011 GMT Not After : Mar 14 23:59:59 2014 GMT Subject: C=US/postalCode=38477, ST=Florida, L=English/street=Sea Village 10, O=Google Ltd., OU=Tech Dept., OU=Hosted by GTI Group Corporation, OU=PlatinumSSL, CN=login.live.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:f3:fc:2b:2f:ef:e1:ad:59:f0:42:3c:c2:f1:82: bf:2c:41:93:d1:f6:98:33:95:4c:bc:62:f1:95:58: 08:b6:e9:7b:77:48:b0:d3:dc:17:3f:bc:6e:e6:ec: 1e:ec:8d:17:fe:1c:24:c6:3e:67:3d:92:95:a2:30: c0:a7:57:20:cf:70:88:97:4a:05:93:79:93:42:97: 2f:3e:ff:c4:14:14:28:a2:13:36:b4:f8:ee:be:1d: bc:78:5d:61:93:5f:eb:88:d7:d1:e4:2b:9a:cd:58: e2:07:45:9f:4f:b8:b9:40:6a:33:2c:5b:21:03:5a: 4a:94:f2:7a:97:59:1b:a8:b5:42:d8:83:00:aa:34: cc:a7:76:d0:47:03:5f:05:af:3b:e1:b9:a1:34:25: b7:6c:5f:9a:30:84:98:c2:c2:d7:f2:b8:42:4a:10: 55:bd:fa:53:81:5d:8d:68:66:45:2c:52:7e:e5:c4: 04:c3:54:e7:c3:39:da:7a:4a:c5:b9:98:82:20:e1: 2c:60:57:bf:ba:f2:46:00:bc:5f:3a:dc:e3:33:97: f8:4a:98:b9:ec:33:4f:2d:60:6c:15:92:a6:81:4a: 0b:e9:ec:76:70:34:31:17:70:e6:70:4b:8e:8b:d3: 75:cb:78:49:ab:66:9b:86:9f:8f:a9:c4:01:e8:ca: 1b:e7 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Authority Key Identifier: keyid:A1:72:5F:26:1B:28:98:43:95:5D:07:37:D5:85:96:9D:4B:D2:C3:45 X509v3 Subject Key Identifier: D4:64:F6:A9:E8:A5:7E:D7:BF:63:52:03:83:53:DB:C5:41:8D:EA:80 X509v3 Key Usage: critical Digital Signature, Key Encipherment X509v3 Basic Constraints: critical CA:FALSE X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.6449.1.2.1.3.4 CPS: https://secure.comodo.com/CPS X509v3 CRL Distribution Points: Full Name: URI:http://crl.comodoca.com/UTN-USERFirst-Hardware.crl Full Name: URI:http://crl.comodo.net/UTN-USERFirst-Hardware.crl Authority Information Access: CA Issuers - URI:http://crt.comodoca.com/UTNAddTrustServerCA.crt OCSP - URI:http://ocsp.comodoca.com X509v3 Subject Alternative Name: DNS:login.live.com, DNS:www.login.live.com Signature Algorithm: sha1WithRSAEncryption 54:e3:a4:9a:24:d2:f3:1d:42:ad:1b:f0:1e:ab:fb:da:d5:aa: e9:cf:5a:b3:1e:57:7b:31:f2:6e:57:4b:31:af:33:bb:b6:0d: 15:c7:5e:59:01:ce:44:b5:b7:bf:09:c9:d5:dc:69:84:e9:c5: 1a:b7:f0:3e:d4:c0:24:bd:29:5f:b4:e9:d6:58:eb:45:11:89: 34:34:d3:11:eb:34:ce:2a:4f:00:3d:f6:72:ef:69:66:c0:9f: 9a:ac:7e:70:50:ac:55:47:da:be:43:5b:ec:8b:c8:c5:23:84: c9:9f:b6:52:08:cf:91:1b:2f:80:69:e6:34:33:e6:b3:9f:a4: e5:0d:9a:15:f9:57:fc:0b:a9:41:0b:f5:ff:58:41:92:22:27: 66:12:06:c7:2a:d8:59:a7:c6:df:44:12:4f:c0:a8:7f:a7:41: c8:c8:69:ff:ba:05:2e:97:ad:3b:d0:eb:f3:15:6d:7e:1b:e5: ba:dd:34:be:22:11:ec:68:98:33:81:02:6a:0b:13:55:79:31: 75:4e:3a:c8:b6:13:bd:97:6f:37:0a:0b:2d:88:0e:de:67:90: c2:b3:ca:20:ca:9a:51:f4:64:3e:db:f4:2e:45:f2:c7:47:17: a8:f4:fa:90:5a:7f:80:a6:82:ac:e4:6c:81:46:bb:52:85:20: 24:f8:80:ea SHA1 Fingerprint=CE:A5:86:B2:CE:59:3E:C7:D9:39:89:83:37:C5:78:14:70:8A:B2:BE -----BEGIN CERTIFICATE----- MIIF7DCCBNSgAwIBAgIRALC3Ez7Qlvm1b66RyHS9OsAwDQYJKoZIhvcNAQEFBQAw gZcxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtl IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMY aHR0cDovL3d3dy51c2VydHJ1c3QuY29tMR8wHQYDVQQDExZVVE4tVVNFUkZpcnN0 LUhhcmR3YXJlMB4XDTExMDMxNTAwMDAwMFoXDTE0MDMxNDIzNTk1OVowgd4xCzAJ BgNVBAYTAlVTMQ4wDAYDVQQREwUzODQ3NzEQMA4GA1UECBMHRmxvcmlkYTEQMA4G A1UEBxMHRW5nbGlzaDEXMBUGA1UECRMOU2VhIFZpbGxhZ2UgMTAxFDASBgNVBAoT C0dvb2dsZSBMdGQuMRMwEQYDVQQLEwpUZWNoIERlcHQuMSgwJgYDVQQLEx9Ib3N0 ZWQgYnkgR1RJIEdyb3VwIENvcnBvcmF0aW9uMRQwEgYDVQQLEwtQbGF0aW51bVNT TDEXMBUGA1UEAxMObG9naW4ubGl2ZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB DwAwggEKAoIBAQDz/Csv7+GtWfBCPMLxgr8sQZPR9pgzlUy8YvGVWAi26Xt3SLDT 3Bc/vG7m7B7sjRf+HCTGPmc9kpWiMMCnVyDPcIiXSgWTeZNCly8+/8QUFCiiEza0 +O6+Hbx4XWGTX+uI19HkK5rNWOIHRZ9PuLlAajMsWyEDWkqU8nqXWRuotULYgwCq NMyndtBHA18FrzvhuaE0JbdsX5owhJjCwtfyuEJKEFW9+lOBXY1oZkUsUn7lxATD VOfDOdp6SsW5mIIg4SxgV7+68kYAvF863OMzl/hKmLnsM08tYGwVkqaBSgvp7HZw NDEXcOZwS46L03XLeEmrZpuGn4+pxAHoyhvnAgMBAAGjggHoMIIB5DAfBgNVHSME GDAWgBShcl8mGyiYQ5VdBzfVhZadS9LDRTAdBgNVHQ4EFgQU1GT2qeilfte/Y1ID g1PbxUGN6oAwDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYw FAYIKwYBBQUHAwEGCCsGAQUFBwMCMEYGA1UdIAQ/MD0wOwYMKwYBBAGyMQECAQME MCswKQYIKwYBBQUHAgEWHWh0dHBzOi8vc2VjdXJlLmNvbW9kby5jb20vQ1BTMHsG A1UdHwR0MHIwOKA2oDSGMmh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1VUTi1VU0VS Rmlyc3QtSGFyZHdhcmUuY3JsMDagNKAyhjBodHRwOi8vY3JsLmNvbW9kby5uZXQv VVROLVVTRVJGaXJzdC1IYXJkd2FyZS5jcmwwcQYIKwYBBQUHAQEEZTBjMDsGCCsG AQUFBzAChi9odHRwOi8vY3J0LmNvbW9kb2NhLmNvbS9VVE5BZGRUcnVzdFNlcnZl ckNBLmNydDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2EuY29tMC0G A1UdEQQmMCSCDmxvZ2luLmxpdmUuY29tghJ3d3cubG9naW4ubGl2ZS5jb20wDQYJ KoZIhvcNAQEFBQADggEBAFTjpJok0vMdQq0b8B6r+9rVqunPWrMeV3sx8m5XSzGv M7u2DRXHXlkBzkS1t78JydXcaYTpxRq38D7UwCS9KV+06dZY60URiTQ00xHrNM4q TwA99nLvaWbAn5qsfnBQrFVH2r5DW+yLyMUjhMmftlIIz5EbL4Bp5jQz5rOfpOUN mhX5V/wLqUEL9f9YQZIiJ2YSBscq2Fmnxt9EEk/AqH+nQcjIaf+6BS6XrTvQ6/MV bX4b5brdNL4iEexomDOBAmoLE1V5MXVOOsi2E72XbzcKCy2IDt5nkMKzyiDKmlH0 ZD7b9C5F8sdHF6j0+pBaf4CmgqzkbIFGu1KFICT4gOo= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 72:03:21:05:c5:0c:08:57:3d:8e:a5:30:4e:fe:e8:b0 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Hardware Validity Not Before: Mar 17 00:00:00 2011 GMT Not After : Apr 16 23:59:59 2011 GMT Subject: C=DE/postalCode=12345, ST=Test State, L=Test City/street=Test Street, O=Kai Engert, OU=For Testing Purposes Only, OU=TEST USE ONLY - NO WARRANTY ATTACHED, OU=Comodo Trial SSL, CN=kuix.de Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:b8:aa:8e:f5:97:47:07:5f:e5:78:76:6e:93:6b: 8e:df:4b:3c:db:99:2f:71:53:29:6e:a5:f3:24:4f: 48:25:23:40:01:ec:0a:15:0b:ec:6e:c8:9e:26:23: 66:fb:e9:db:d8:28:85:21:4f:1e:df:7b:4c:e5:63: c1:0b:b2:62:56:94:53:cb:bf:9c:a1:4d:d9:87:c5: 69:48:3c:b1:bf:a5:68:52:21:1d:7a:dc:94:4f:44: 6e:47:25:1d:9f:9c:92:d2:37:1d:f9:5b:5b:b2:dd: 3e:18:d7:f3:87:66:ad:a3:f4:ce:8f:d1:6f:f0:b9: b4:ef:b1:ea:15:63:0a:ce:81 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Authority Key Identifier: keyid:A1:72:5F:26:1B:28:98:43:95:5D:07:37:D5:85:96:9D:4B:D2:C3:45 X509v3 Subject Key Identifier: 40:8F:39:26:9C:4C:86:23:99:C6:51:09:A6:E6:F2:C1:FE:A7:F6:B7 X509v3 Key Usage: critical Digital Signature, Key Encipherment X509v3 Basic Constraints: critical CA:FALSE X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.6449.1.2.1.3.4 CPS: https://secure.comodo.com/CPS X509v3 CRL Distribution Points: Full Name: URI:http://crl.comodoca.com/UTN-USERFirst-Hardware.crl Full Name: URI:http://crl.comodo.net/UTN-USERFirst-Hardware.crl Authority Information Access: CA Issuers - URI:http://crt.comodoca.com/UTNAddTrustServerCA.crt OCSP - URI:http://ocsp.comodoca.com X509v3 Subject Alternative Name: DNS:kuix.de, DNS:www.kuix.de Signature Algorithm: sha1WithRSAEncryption 8e:61:1e:26:1e:a2:d9:19:d0:f0:d4:bd:89:f9:ea:92:11:79: 6a:5e:7b:7c:9f:7e:39:73:09:56:51:e6:86:54:c7:6d:46:76: 52:ca:6a:a8:34:c0:60:3e:03:ce:b3:c9:48:97:d1:9f:a6:a1: 6a:0f:fe:77:d1:1e:10:b3:57:80:a9:06:26:84:a6:fb:7a:37: 13:ce:84:cc:77:79:09:2e:e2:44:be:1f:ac:77:6e:77:46:41: db:b0:b2:69:91:74:d1:80:96:61:31:0c:2f:0a:cf:b5:d0:dc: 08:2d:eb:f6:75:82:de:8a:2e:ba:3d:07:90:60:39:56:83:e1: 82:ca:23:ac:df:e3:cf:4d:70:57:c1:b8:b7:93:9a:ed:dc:8b: de:4a:a0:55:28:02:ab:43:0c:54:97:68:18:a2:eb:39:e1:b9: fc:bf:73:80:64:33:12:7b:87:60:02:e7:3e:70:c9:87:ca:a9: 36:3c:05:f1:06:5e:71:0a:0e:0a:36:99:b0:87:e7:69:5a:b1: a0:30:4e:7d:61:58:cb:c6:a8:96:80:5e:7d:c1:2a:ff:9b:4a: 4a:eb:29:67:8a:0f:6f:e6:19:ed:82:cf:81:57:e1:24:ad:a2: d1:fa:da:14:97:b0:6c:7c:47:c6:d7:94:11:21:ec:d6:5a:d2: dd:8f:7f:91 SHA1 Fingerprint=82:61:4B:EC:97:48:15:DE:CC:9A:CC:6E:84:21:71:79:B2:64:20:40 -----BEGIN CERTIFICATE----- MIIFbDCCBFSgAwIBAgIQcgMhBcUMCFc9jqUwTv7osDANBgkqhkiG9w0BAQUFADCB lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt SGFyZHdhcmUwHhcNMTEwMzE3MDAwMDAwWhcNMTEwNDE2MjM1OTU5WjCB8TELMAkG A1UEBhMCREUxDjAMBgNVBBETBTEyMzQ1MRMwEQYDVQQIEwpUZXN0IFN0YXRlMRIw EAYDVQQHEwlUZXN0IENpdHkxFDASBgNVBAkTC1Rlc3QgU3RyZWV0MRMwEQYDVQQK EwpLYWkgRW5nZXJ0MSIwIAYDVQQLExlGb3IgVGVzdGluZyBQdXJwb3NlcyBPbmx5 MS0wKwYDVQQLEyRURVNUIFVTRSBPTkxZIC0gTk8gV0FSUkFOVFkgQVRUQUNIRUQx GTAXBgNVBAsTEENvbW9kbyBUcmlhbCBTU0wxEDAOBgNVBAMTB2t1aXguZGUwgZ8w DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALiqjvWXRwdf5Xh2bpNrjt9LPNuZL3FT KW6l8yRPSCUjQAHsChUL7G7IniYjZvvp29gohSFPHt97TOVjwQuyYlaUU8u/nKFN 2YfFaUg8sb+laFIhHXrclE9EbkclHZ+cktI3HflbW7LdPhjX84dmraP0zo/Rb/C5 tO+x6hVjCs6BAgMBAAGjggHaMIIB1jAfBgNVHSMEGDAWgBShcl8mGyiYQ5VdBzfV hZadS9LDRTAdBgNVHQ4EFgQUQI85JpxMhiOZxlEJpubywf6n9rcwDgYDVR0PAQH/ BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUF BwMCMEYGA1UdIAQ/MD0wOwYMKwYBBAGyMQECAQMEMCswKQYIKwYBBQUHAgEWHWh0 dHBzOi8vc2VjdXJlLmNvbW9kby5jb20vQ1BTMHsGA1UdHwR0MHIwOKA2oDSGMmh0 dHA6Ly9jcmwuY29tb2RvY2EuY29tL1VUTi1VU0VSRmlyc3QtSGFyZHdhcmUuY3Js MDagNKAyhjBodHRwOi8vY3JsLmNvbW9kby5uZXQvVVROLVVTRVJGaXJzdC1IYXJk d2FyZS5jcmwwcQYIKwYBBQUHAQEEZTBjMDsGCCsGAQUFBzAChi9odHRwOi8vY3J0 LmNvbW9kb2NhLmNvbS9VVE5BZGRUcnVzdFNlcnZlckNBLmNydDAkBggrBgEFBQcw AYYYaHR0cDovL29jc3AuY29tb2RvY2EuY29tMB8GA1UdEQQYMBaCB2t1aXguZGWC C3d3dy5rdWl4LmRlMA0GCSqGSIb3DQEBBQUAA4IBAQCOYR4mHqLZGdDw1L2J+eqS EXlqXnt8n345cwlWUeaGVMdtRnZSymqoNMBgPgPOs8lIl9GfpqFqD/530R4Qs1eA qQYmhKb7ejcTzoTMd3kJLuJEvh+sd253RkHbsLJpkXTRgJZhMQwvCs+10NwILev2 dYLeii66PQeQYDlWg+GCyiOs3+PPTXBXwbi3k5rt3IveSqBVKAKrQwxUl2gYous5 4bn8v3OAZDMSe4dgAuc+cMmHyqk2PAXxBl5xCg4KNpmwh+dpWrGgME59YVjLxqiW gF59wSr/m0pK6ylnig9v5hntgs+BV+EkraLR+toUl7BsfEfG15QRIezWWtLdj3+R -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., CN=Go Daddy Root Certificate Authority - G2 Validity Not Before: Sep 1 00:00:00 2009 GMT Not After : Dec 31 23:59:59 2037 GMT Subject: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., CN=Go Daddy Root Certificate Authority - G2 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:bf:71:62:08:f1:fa:59:34:f7:1b:c9:18:a3:f7: 80:49:58:e9:22:83:13:a6:c5:20:43:01:3b:84:f1: e6:85:49:9f:27:ea:f6:84:1b:4e:a0:b4:db:70:98: c7:32:01:b1:05:3e:07:4e:ee:f4:fa:4f:2f:59:30: 22:e7:ab:19:56:6b:e2:80:07:fc:f3:16:75:80:39: 51:7b:e5:f9:35:b6:74:4e:a9:8d:82:13:e4:b6:3f: a9:03:83:fa:a2:be:8a:15:6a:7f:de:0b:c3:b6:19: 14:05:ca:ea:c3:a8:04:94:3b:46:7c:32:0d:f3:00: 66:22:c8:8d:69:6d:36:8c:11:18:b7:d3:b2:1c:60: b4:38:fa:02:8c:ce:d3:dd:46:07:de:0a:3e:eb:5d: 7c:c8:7c:fb:b0:2b:53:a4:92:62:69:51:25:05:61: 1a:44:81:8c:2c:a9:43:96:23:df:ac:3a:81:9a:0e: 29:c5:1c:a9:e9:5d:1e:b6:9e:9e:30:0a:39:ce:f1: 88:80:fb:4b:5d:cc:32:ec:85:62:43:25:34:02:56: 27:01:91:b4:3b:70:2a:3f:6e:b1:e8:9c:88:01:7d: 9f:d4:f9:db:53:6d:60:9d:bf:2c:e7:58:ab:b8:5f: 46:fc:ce:c4:1b:03:3c:09:eb:49:31:5c:69:46:b3: e0:47 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 3A:9A:85:07:10:67:28:B6:EF:F6:BD:05:41:6E:20:C1:94:DA:0F:DE Signature Algorithm: sha256WithRSAEncryption 99:db:5d:79:d5:f9:97:59:67:03:61:f1:7e:3b:06:31:75:2d: a1:20:8e:4f:65:87:b4:f7:a6:9c:bc:d8:e9:2f:d0:db:5a:ee: cf:74:8c:73:b4:38:42:da:05:7b:f8:02:75:b8:fd:a5:b1:d7: ae:f6:d7:de:13:cb:53:10:7e:8a:46:d1:97:fa:b7:2e:2b:11: ab:90:b0:27:80:f9:e8:9f:5a:e9:37:9f:ab:e4:df:6c:b3:85: 17:9d:3d:d9:24:4f:79:91:35:d6:5f:04:eb:80:83:ab:9a:02: 2d:b5:10:f4:d8:90:c7:04:73:40:ed:72:25:a0:a9:9f:ec:9e: ab:68:12:99:57:c6:8f:12:3a:09:a4:bd:44:fd:06:15:37:c1: 9b:e4:32:a3:ed:38:e8:d8:64:f3:2c:7e:14:fc:02:ea:9f:cd: ff:07:68:17:db:22:90:38:2d:7a:8d:d1:54:f1:69:e3:5f:33: ca:7a:3d:7b:0a:e3:ca:7f:5f:39:e5:e2:75:ba:c5:76:18:33: ce:2c:f0:2f:4c:ad:f7:b1:e7:ce:4f:a8:c4:9b:4a:54:06:c5: 7f:7d:d5:08:0f:e2:1c:fe:7e:17:b8:ac:5e:f6:d4:16:b2:43: 09:0c:4d:f6:a7:6b:b4:99:84:65:ca:7a:88:e2:e2:44:be:5c: f7:ea:1c:f5 SHA1 Fingerprint=47:BE:AB:C9:22:EA:E8:0E:78:78:34:62:A7:9F:45:C2:54:FD:E6:8B -----BEGIN CERTIFICATE----- MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH /PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu 9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo 2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI 4uJEvlz36hz1 -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=Arizona, L=Scottsdale, O=Starfield Technologies, Inc., CN=Starfield Root Certificate Authority - G2 Validity Not Before: Sep 1 00:00:00 2009 GMT Not After : Dec 31 23:59:59 2037 GMT Subject: C=US, ST=Arizona, L=Scottsdale, O=Starfield Technologies, Inc., CN=Starfield Root Certificate Authority - G2 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:bd:ed:c1:03:fc:f6:8f:fc:02:b1:6f:5b:9f:48: d9:9d:79:e2:a2:b7:03:61:56:18:c3:47:b6:d7:ca: 3d:35:2e:89:43:f7:a1:69:9b:de:8a:1a:fd:13:20: 9c:b4:49:77:32:29:56:fd:b9:ec:8c:dd:22:fa:72: dc:27:61:97:ee:f6:5a:84:ec:6e:19:b9:89:2c:dc: 84:5b:d5:74:fb:6b:5f:c5:89:a5:10:52:89:46:55: f4:b8:75:1c:e6:7f:e4:54:ae:4b:f8:55:72:57:02: 19:f8:17:71:59:eb:1e:28:07:74:c5:9d:48:be:6c: b4:f4:a4:b0:f3:64:37:79:92:c0:ec:46:5e:7f:e1: 6d:53:4c:62:af:cd:1f:0b:63:bb:3a:9d:fb:fc:79: 00:98:61:74:cf:26:82:40:63:f3:b2:72:6a:19:0d: 99:ca:d4:0e:75:cc:37:fb:8b:89:c1:59:f1:62:7f: 5f:b3:5f:65:30:f8:a7:b7:4d:76:5a:1e:76:5e:34: c0:e8:96:56:99:8a:b3:f0:7f:a4:cd:bd:dc:32:31: 7c:91:cf:e0:5f:11:f8:6b:aa:49:5c:d1:99:94:d1: a2:e3:63:5b:09:76:b5:56:62:e1:4b:74:1d:96:d4: 26:d4:08:04:59:d0:98:0e:0e:e6:de:fc:c3:ec:1f: 90:f1 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 7C:0C:32:1F:A7:D9:30:7F:C4:7D:68:A3:62:A8:A1:CE:AB:07:5B:27 Signature Algorithm: sha256WithRSAEncryption 11:59:fa:25:4f:03:6f:94:99:3b:9a:1f:82:85:39:d4:76:05: 94:5e:e1:28:93:6d:62:5d:09:c2:a0:a8:d4:b0:75:38:f1:34: 6a:9d:e4:9f:8a:86:26:51:e6:2c:d1:c6:2d:6e:95:20:4a:92: 01:ec:b8:8a:67:7b:31:e2:67:2e:8c:95:03:26:2e:43:9d:4a: 31:f6:0e:b5:0c:bb:b7:e2:37:7f:22:ba:00:a3:0e:7b:52:fb: 6b:bb:3b:c4:d3:79:51:4e:cd:90:f4:67:07:19:c8:3c:46:7a: 0d:01:7d:c5:58:e7:6d:e6:85:30:17:9a:24:c4:10:e0:04:f7: e0:f2:7f:d4:aa:0a:ff:42:1d:37:ed:94:e5:64:59:12:20:77: 38:d3:32:3e:38:81:75:96:73:fa:68:8f:b1:cb:ce:1f:c5:ec: fa:9c:7e:cf:7e:b1:f1:07:2d:b6:fc:bf:ca:a4:bf:d0:97:05: 4a:bc:ea:18:28:02:90:bd:54:78:09:21:71:d3:d1:7d:1d:d9: 16:b0:a9:61:3d:d0:0a:00:22:fc:c7:7b:cb:09:64:45:0b:3b: 40:81:f7:7d:7c:32:f5:98:ca:58:8e:7d:2a:ee:90:59:73:64: f9:36:74:5e:25:a1:f5:66:05:2e:7f:39:15:a9:2a:fb:50:8b: 8e:85:69:f4 SHA1 Fingerprint=B5:1C:06:7C:EE:2B:0C:3D:F8:55:AB:2D:92:F4:FE:39:D4:E7:0F:0E -----BEGIN CERTIFICATE----- MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg 8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=Arizona, L=Scottsdale, O=Starfield Technologies, Inc., CN=Starfield Services Root Certificate Authority - G2 Validity Not Before: Sep 1 00:00:00 2009 GMT Not After : Dec 31 23:59:59 2037 GMT Subject: C=US, ST=Arizona, L=Scottsdale, O=Starfield Technologies, Inc., CN=Starfield Services Root Certificate Authority - G2 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:d5:0c:3a:c4:2a:f9:4e:e2:f5:be:19:97:5f:8e: 88:53:b1:1f:3f:cb:cf:9f:20:13:6d:29:3a:c8:0f: 7d:3c:f7:6b:76:38:63:d9:36:60:a8:9b:5e:5c:00: 80:b2:2f:59:7f:f6:87:f9:25:43:86:e7:69:1b:52: 9a:90:e1:71:e3:d8:2d:0d:4e:6f:f6:c8:49:d9:b6: f3:1a:56:ae:2b:b6:74:14:eb:cf:fb:26:e3:1a:ba: 1d:96:2e:6a:3b:58:94:89:47:56:ff:25:a0:93:70: 53:83:da:84:74:14:c3:67:9e:04:68:3a:df:8e:40: 5a:1d:4a:4e:cf:43:91:3b:e7:56:d6:00:70:cb:52: ee:7b:7d:ae:3a:e7:bc:31:f9:45:f6:c2:60:cf:13: 59:02:2b:80:cc:34:47:df:b9:de:90:65:6d:02:cf: 2c:91:a6:a6:e7:de:85:18:49:7c:66:4e:a3:3a:6d: a9:b5:ee:34:2e:ba:0d:03:b8:33:df:47:eb:b1:6b: 8d:25:d9:9b:ce:81:d1:45:46:32:96:70:87:de:02: 0e:49:43:85:b6:6c:73:bb:64:ea:61:41:ac:c9:d4: 54:df:87:2f:c7:22:b2:26:cc:9f:59:54:68:9f:fc: be:2a:2f:c4:55:1c:75:40:60:17:85:02:55:39:8b: 7f:05 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 9C:5F:00:DF:AA:01:D7:30:2B:38:88:A2:B8:6D:4A:9C:F2:11:91:83 Signature Algorithm: sha256WithRSAEncryption 4b:36:a6:84:77:69:dd:3b:19:9f:67:23:08:6f:0e:61:c9:fd: 84:dc:5f:d8:36:81:cd:d8:1b:41:2d:9f:60:dd:c7:1a:68:d9: d1:6e:86:e1:88:23:cf:13:de:43:cf:e2:34:b3:04:9d:1f:29: d5:bf:f8:5e:c8:d5:c1:bd:ee:92:6f:32:74:f2:91:82:2f:bd: 82:42:7a:ad:2a:b7:20:7d:4d:bc:7a:55:12:c2:15:ea:bd:f7: 6a:95:2e:6c:74:9f:cf:1c:b4:f2:c5:01:a3:85:d0:72:3e:ad: 73:ab:0b:9b:75:0c:6d:45:b7:8e:94:ac:96:37:b5:a0:d0:8f: 15:47:0e:e3:e8:83:dd:8f:fd:ef:41:01:77:cc:27:a9:62:85: 33:f2:37:08:ef:71:cf:77:06:de:c8:19:1d:88:40:cf:7d:46: 1d:ff:1e:c7:e1:ce:ff:23:db:c6:fa:8d:55:4e:a9:02:e7:47: 11:46:3e:f4:fd:bd:7b:29:26:bb:a9:61:62:37:28:b6:2d:2a: f6:10:86:64:c9:70:a7:d2:ad:b7:29:70:79:ea:3c:da:63:25: 9f:fd:68:b7:30:ec:70:fb:75:8a:b7:6d:60:67:b2:1e:c8:b9: e9:d8:a8:6f:02:8b:67:0d:4d:26:57:71:da:20:fc:c1:4a:50: 8d:b1:28:ba SHA1 Fingerprint=92:5A:8F:8D:2C:6D:04:E0:66:5F:59:6A:FF:22:D8:63:E8:25:6F:3F -----BEGIN CERTIFICATE----- MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk 6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn 0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN sSi6 -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 8608355977964138876 (0x7777062726a9b17c) Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, O=AffirmTrust, CN=AffirmTrust Commercial Validity Not Before: Jan 29 14:06:06 2010 GMT Not After : Dec 31 14:06:06 2030 GMT Subject: C=US, O=AffirmTrust, CN=AffirmTrust Commercial Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:f6:1b:4f:67:07:2b:a1:15:f5:06:22:cb:1f:01: b2:e3:73:45:06:44:49:2c:bb:49:25:14:d6:ce:c3: b7:ab:2c:4f:c6:41:32:94:57:fa:12:a7:5b:0e:e2: 8f:1f:1e:86:19:a7:aa:b5:2d:b9:5f:0d:8a:c2:af: 85:35:79:32:2d:bb:1c:62:37:f2:b1:5b:4a:3d:ca: cd:71:5f:e9:42:be:94:e8:c8:de:f9:22:48:64:c6: e5:ab:c6:2b:6d:ad:05:f0:fa:d5:0b:cf:9a:e5:f0: 50:a4:8b:3b:47:a5:23:5b:7a:7a:f8:33:3f:b8:ef: 99:97:e3:20:c1:d6:28:89:cf:94:fb:b9:45:ed:e3: 40:17:11:d4:74:f0:0b:31:e2:2b:26:6a:9b:4c:57: ae:ac:20:3e:ba:45:7a:05:f3:bd:9b:69:15:ae:7d: 4e:20:63:c4:35:76:3a:07:02:c9:37:fd:c7:47:ee: e8:f1:76:1d:73:15:f2:97:a4:b5:c8:7a:79:d9:42: aa:2b:7f:5c:fe:ce:26:4f:a3:66:81:35:af:44:ba: 54:1e:1c:30:32:65:9d:e6:3c:93:5e:50:4e:7a:e3: 3a:d4:6e:cc:1a:fb:f9:d2:37:ae:24:2a:ab:57:03: 22:28:0d:49:75:7f:b7:28:da:75:bf:8e:e3:dc:0e: 79:31 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: 9D:93:C6:53:8B:5E:CA:AF:3F:9F:1E:0F:E5:99:95:BC:24:F6:94:8F X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign Signature Algorithm: sha256WithRSAEncryption 58:ac:f4:04:0e:cd:c0:0d:ff:0a:fd:d4:ba:16:5f:29:bd:7b: 68:99:58:49:d2:b4:1d:37:4d:7f:27:7d:46:06:5d:43:c6:86: 2e:3e:73:b2:26:7d:4f:93:a9:b6:c4:2a:9a:ab:21:97:14:b1: de:8c:d3:ab:89:15:d8:6b:24:d4:f1:16:ae:d8:a4:5c:d4:7f: 51:8e:ed:18:01:b1:93:63:bd:bc:f8:61:80:9a:9e:b1:ce:42: 70:e2:a9:7d:06:25:7d:27:a1:fe:6f:ec:b3:1e:24:da:e3:4b: 55:1a:00:3b:35:b4:3b:d9:d7:5d:30:fd:81:13:89:f2:c2:06: 2b:ed:67:c4:8e:c9:43:b2:5c:6b:15:89:02:bc:62:fc:4e:f2: b5:33:aa:b2:6f:d3:0a:a2:50:e3:f6:3b:e8:2e:44:c2:db:66: 38:a9:33:56:48:f1:6d:1b:33:8d:0d:8c:3f:60:37:9d:d3:ca: 6d:7e:34:7e:0d:9f:72:76:8b:1b:9f:72:fd:52:35:41:45:02: 96:2f:1c:b2:9a:73:49:21:b1:49:47:45:47:b4:ef:6a:34:11: c9:4d:9a:cc:59:b7:d6:02:9e:5a:4e:65:b5:94:ae:1b:df:29: b0:16:f1:bf:00:9e:07:3a:17:64:b5:04:b5:23:21:99:0a:95: 3b:97:7c:ef SHA1 Fingerprint=F9:B5:B6:32:45:5F:9C:BE:EC:57:5F:80:DC:E9:6E:2C:C7:B2:78:B7 -----BEGIN CERTIFICATE----- MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/ nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 8957382827206547757 (0x7c4f04391cd4992d) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=AffirmTrust, CN=AffirmTrust Networking Validity Not Before: Jan 29 14:08:24 2010 GMT Not After : Dec 31 14:08:24 2030 GMT Subject: C=US, O=AffirmTrust, CN=AffirmTrust Networking Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:b4:84:cc:33:17:2e:6b:94:6c:6b:61:52:a0:eb: a3:cf:79:94:4c:e5:94:80:99:cb:55:64:44:65:8f: 67:64:e2:06:e3:5c:37:49:f6:2f:9b:84:84:1e:2d: f2:60:9d:30:4e:cc:84:85:e2:2c:cf:1e:9e:fe:36: ab:33:77:35:44:d8:35:96:1a:3d:36:e8:7a:0e:d8: d5:47:a1:6a:69:8b:d9:fc:bb:3a:ae:79:5a:d5:f4: d6:71:bb:9a:90:23:6b:9a:b7:88:74:87:0c:1e:5f: b9:9e:2d:fa:ab:53:2b:dc:bb:76:3e:93:4c:08:08: 8c:1e:a2:23:1c:d4:6a:ad:22:ba:99:01:2e:6d:65: cb:be:24:66:55:24:4b:40:44:b1:1b:d7:e1:c2:85: c0:de:10:3f:3d:ed:b8:fc:f1:f1:23:53:dc:bf:65: 97:6f:d9:f9:40:71:8d:7d:bd:95:d4:ce:be:a0:5e: 27:23:de:fd:a6:d0:26:0e:00:29:eb:3c:46:f0:3d: 60:bf:3f:50:d2:dc:26:41:51:9e:14:37:42:04:a3: 70:57:a8:1b:87:ed:2d:fa:7b:ee:8c:0a:e3:a9:66: 89:19:cb:41:f9:dd:44:36:61:cf:e2:77:46:c8:7d: f6:f4:92:81:36:fd:db:34:f1:72:7e:f3:0c:16:bd: b4:15 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: 07:1F:D2:E7:9C:DA:C2:6E:A2:40:B4:B0:7A:50:10:50:74:C4:C8:BD X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign Signature Algorithm: sha1WithRSAEncryption 89:57:b2:16:7a:a8:c2:fd:d6:d9:9b:9b:34:c2:9c:b4:32:14: 4d:a7:a4:df:ec:be:a7:be:f8:43:db:91:37:ce:b4:32:2e:50: 55:1a:35:4e:76:43:71:20:ef:93:77:4e:15:70:2e:87:c3:c1: 1d:6d:dc:cb:b5:27:d4:2c:56:d1:52:53:3a:44:d2:73:c8:c4: 1b:05:65:5a:62:92:9c:ee:41:8d:31:db:e7:34:ea:59:21:d5: 01:7a:d7:64:b8:64:39:cd:c9:ed:af:ed:4b:03:48:a7:a0:99: 01:80:dc:65:a3:36:ae:65:59:48:4f:82:4b:c8:65:f1:57:1d: e5:59:2e:0a:3f:6c:d8:d1:f5:e5:09:b4:6c:54:00:0a:e0:15: 4d:87:75:6d:b7:58:96:5a:dd:6d:d2:00:a0:f4:9b:48:be:c3: 37:a4:ba:36:e0:7c:87:85:97:1a:15:a2:de:2e:a2:5b:bd:af: 18:f9:90:50:cd:70:59:f8:27:67:47:cb:c7:a0:07:3a:7d:d1: 2c:5d:6c:19:3a:66:b5:7d:fd:91:6f:82:b1:be:08:93:db:14: 47:f1:a2:37:c7:45:9e:3c:c7:77:af:64:a8:93:df:f6:69:83: 82:60:f2:49:42:34:ed:5a:00:54:85:1c:16:36:92:0c:5c:fa: a6:ad:bf:db SHA1 Fingerprint=29:36:21:02:8B:20:ED:02:F5:66:C5:32:D1:D6:ED:90:9F:45:00:2F -----BEGIN CERTIFICATE----- MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp 6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48 x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 7893706540734352110 (0x6d8c1446b1a60aee) Signature Algorithm: sha384WithRSAEncryption Issuer: C=US, O=AffirmTrust, CN=AffirmTrust Premium Validity Not Before: Jan 29 14:10:36 2010 GMT Not After : Dec 31 14:10:36 2040 GMT Subject: C=US, O=AffirmTrust, CN=AffirmTrust Premium Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:c4:12:df:a9:5f:fe:41:dd:dd:f5:9f:8a:e3:f6: ac:e1:3c:78:9a:bc:d8:f0:7f:7a:a0:33:2a:dc:8d: 20:5b:ae:2d:6f:e7:93:d9:36:70:6a:68:cf:8e:51: a3:85:5b:67:04:a0:10:24:6f:5d:28:82:c1:97:57: d8:48:29:13:b6:e1:be:91:4d:df:85:0c:53:18:9a: 1e:24:a2:4f:8f:f0:a2:85:0b:cb:f4:29:7f:d2:a4: 58:ee:26:4d:c9:aa:a8:7b:9a:d9:fa:38:de:44:57: 15:e5:f8:8c:c8:d9:48:e2:0d:16:27:1d:1e:c8:83: 85:25:b7:ba:aa:55:41:cc:03:22:4b:2d:91:8d:8b: e6:89:af:66:c7:e9:ff:2b:e9:3c:ac:da:d2:b3:c3: e1:68:9c:89:f8:7a:00:56:de:f4:55:95:6c:fb:ba: 64:dd:62:8b:df:0b:77:32:eb:62:cc:26:9a:9b:bb: aa:62:83:4c:b4:06:7a:30:c8:29:bf:ed:06:4d:97: b9:1c:c4:31:2b:d5:5f:bc:53:12:17:9c:99:57:29: 66:77:61:21:31:07:2e:25:49:9d:18:f2:ee:f3:2b: 71:8c:b5:ba:39:07:49:77:fc:ef:2e:92:90:05:8d: 2d:2f:77:7b:ef:43:bf:35:bb:9a:d8:f9:73:a7:2c: f2:d0:57:ee:28:4e:26:5f:8f:90:68:09:2f:b8:f8: dc:06:e9:2e:9a:3e:51:a7:d1:22:c4:0a:a7:38:48: 6c:b3:f9:ff:7d:ab:86:57:e3:ba:d6:85:78:77:ba: 43:ea:48:7f:f6:d8:be:23:6d:1e:bf:d1:36:6c:58: 5c:f1:ee:a4:19:54:1a:f5:03:d2:76:e6:e1:8c:bd: 3c:b3:d3:48:4b:e2:c8:f8:7f:92:a8:76:46:9c:42: 65:3e:a4:1e:c1:07:03:5a:46:2d:b8:97:f3:b7:d5: b2:55:21:ef:ba:dc:4c:00:97:fb:14:95:27:33:bf: e8:43:47:46:d2:08:99:16:60:3b:9a:7e:d2:e6:ed: 38:ea:ec:01:1e:3c:48:56:49:09:c7:4c:37:00:9e: 88:0e:c0:73:e1:6f:66:e9:72:47:30:3e:10:e5:0b: 03:c9:9a:42:00:6c:c5:94:7e:61:c4:8a:df:7f:82: 1a:0b:59:c4:59:32:77:b3:bc:60:69:56:39:fd:b4: 06:7b:2c:d6:64:36:d9:bd:48:ed:84:1f:7e:a5:22: 8f:2a:b8:42:f4:82:b7:d4:53:90:78:4e:2d:1a:fd: 81:6f:44:d7:3b:01:74:96:42:e0:00:e2:2e:6b:ea: c5:ee:72:ac:bb:bf:fe:ea:aa:a8:f8:dc:f6:b2:79: 8a:b6:67 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: 9D:C0:67:A6:0C:22:D9:26:F5:45:AB:A6:65:52:11:27:D8:45:AC:63 X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign Signature Algorithm: sha384WithRSAEncryption b3:57:4d:10:62:4e:3a:e4:ac:ea:b8:1c:af:32:23:c8:b3:49: 5a:51:9c:76:28:8d:79:aa:57:46:17:d5:f5:52:f6:b7:44:e8: 08:44:bf:18:84:d2:0b:80:cd:c5:12:fd:00:55:05:61:87:41: dc:b5:24:9e:3c:c4:d8:c8:fb:70:9e:2f:78:96:83:20:36:de: 7c:0f:69:13:88:a5:75:36:98:08:a6:c6:df:ac:ce:e3:58:d6: b7:3e:de:ba:f3:eb:34:40:d8:a2:81:f5:78:3f:2f:d5:a5:fc: d9:a2:d4:5e:04:0e:17:ad:fe:41:f0:e5:b2:72:fa:44:82:33: 42:e8:2d:58:f7:56:8c:62:3f:ba:42:b0:9c:0c:5c:7e:2e:65: 26:5c:53:4f:00:b2:78:7e:a1:0d:99:2d:8d:b8:1d:8e:a2:c4: b0:fd:60:d0:30:a4:8e:c8:04:62:a9:c4:ed:35:de:7a:97:ed: 0e:38:5e:92:2f:93:70:a5:a9:9c:6f:a7:7d:13:1d:7e:c6:08: 48:b1:5e:67:eb:51:08:25:e9:e6:25:6b:52:29:91:9c:d2:39: 73:08:57:de:99:06:b4:5b:9d:10:06:e1:c2:00:a8:b8:1c:4a: 02:0a:14:d0:c1:41:ca:fb:8c:35:21:7d:82:38:f2:a9:54:91: 19:35:93:94:6d:6a:3a:c5:b2:d0:bb:89:86:93:e8:9b:c9:0f: 3a:a7:7a:b8:a1:f0:78:46:fa:fc:37:2f:e5:8a:84:f3:df:fe: 04:d9:a1:68:a0:2f:24:e2:09:95:06:d5:95:ca:e1:24:96:eb: 7c:f6:93:05:bb:ed:73:e9:2d:d1:75:39:d7:e7:24:db:d8:4e: 5f:43:8f:9e:d0:14:39:bf:55:70:48:99:57:31:b4:9c:ee:4a: 98:03:96:30:1f:60:06:ee:1b:23:fe:81:60:23:1a:47:62:85: a5:cc:19:34:80:6f:b3:ac:1a:e3:9f:f0:7b:48:ad:d5:01:d9: 67:b6:a9:72:93:ea:2d:66:b5:b2:b8:e4:3d:3c:b2:ef:4c:8c: ea:eb:07:bf:ab:35:9a:55:86:bc:18:a6:b5:a8:5e:b4:83:6c: 6b:69:40:d3:9f:dc:f1:c3:69:6b:b9:e1:6d:09:f4:f1:aa:50: 76:0a:7a:7d:7a:17:a1:55:96:42:99:31:09:dd:60:11:8d:05: 30:7e:e6:8e:46:d1:9d:14:da:c7:17:e4:05:96:8c:c4:24:b5: 1b:cf:14:07:b2:40:f8:a3:9e:41:86:bc:04:d0:6b:96:c8:2a: 80:34:fd:bf:ef:06:a3:dd:58:c5:85:3d:3e:8f:fe:9e:29:e0: b6:b8:09:68:19:1c:18:43 SHA1 Fingerprint=D8:A6:33:2C:E0:03:6F:B1:85:F6:63:4F:7D:6A:06:65:26:32:28:27 -----BEGIN CERTIFICATE----- MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ +jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7 70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S 5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B 8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc 0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8 GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e KeC2uAloGRwYQw== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 8401224907861490260 (0x7497258ac73f7a54) Signature Algorithm: ecdsa-with-SHA384 Issuer: C=US, O=AffirmTrust, CN=AffirmTrust Premium ECC Validity Not Before: Jan 29 14:20:24 2010 GMT Not After : Dec 31 14:20:24 2040 GMT Subject: C=US, O=AffirmTrust, CN=AffirmTrust Premium ECC Subject Public Key Info: Public Key Algorithm: id-ecPublicKey Public-Key: (384 bit) pub: 04:0d:30:5e:1b:15:9d:03:d0:a1:79:35:b7:3a:3c: 92:7a:ca:15:1c:cd:62:f3:9c:26:5c:07:3d:e5:54: fa:a3:d6:cc:12:ea:f4:14:5f:e8:8e:19:ab:2f:2e: 48:e6:ac:18:43:78:ac:d0:37:c3:bd:b2:cd:2c:e6: 47:e2:1a:e6:63:b8:3d:2e:2f:78:c4:4f:db:f4:0f: a4:68:4c:55:72:6b:95:1d:4e:18:42:95:78:cc:37: 3c:91:e2:9b:65:2b:29 ASN1 OID: secp384r1 X509v3 extensions: X509v3 Subject Key Identifier: 9A:AF:29:7A:C0:11:35:35:26:51:30:00:C3:6A:FE:40:D5:AE:D6:3C X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign Signature Algorithm: ecdsa-with-SHA384 30:64:02:30:17:09:f3:87:88:50:5a:af:c8:c0:42:bf:47:5f: f5:6c:6a:86:e0:c4:27:74:e4:38:53:d7:05:7f:1b:34:e3:c6: 2f:b3:ca:09:3c:37:9d:d7:e7:b8:46:f1:fd:a1:e2:71:02:30: 42:59:87:43:d4:51:df:ba:d3:09:32:5a:ce:88:7e:57:3d:9c: 5f:42:6b:f5:07:2d:b5:f0:82:93:f9:59:6f:ae:64:fa:58:e5: 8b:1e:e3:63:be:b5:81:cd:6f:02:8c:79 SHA1 Fingerprint=B8:23:6B:00:2F:1D:16:86:53:01:55:6C:11:A4:37:CA:EB:FF:C3:BB -----BEGIN CERTIFICATE----- MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D 0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9 ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 279744 (0x444c0) Signature Algorithm: sha1WithRSAEncryption Issuer: C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Trusted Network CA Validity Not Before: Oct 22 12:07:37 2008 GMT Not After : Dec 31 12:07:37 2029 GMT Subject: C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Trusted Network CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:e3:fb:7d:a3:72:ba:c2:f0:c9:14:87:f5:6b:01: 4e:e1:6e:40:07:ba:6d:27:5d:7f:f7:5b:2d:b3:5a: c7:51:5f:ab:a4:32:a6:61:87:b6:6e:0f:86:d2:30: 02:97:f8:d7:69:57:a1:18:39:5d:6a:64:79:c6:01: 59:ac:3c:31:4a:38:7c:d2:04:d2:4b:28:e8:20:5f: 3b:07:a2:cc:4d:73:db:f3:ae:4f:c7:56:d5:5a:a7: 96:89:fa:f3:ab:68:d4:23:86:59:27:cf:09:27:bc: ac:6e:72:83:1c:30:72:df:e0:a2:e9:d2:e1:74:75: 19:bd:2a:9e:7b:15:54:04:1b:d7:43:39:ad:55:28: c5:e2:1a:bb:f4:c0:e4:ae:38:49:33:cc:76:85:9f: 39:45:d2:a4:9e:f2:12:8c:51:f8:7c:e4:2d:7f:f5: ac:5f:eb:16:9f:b1:2d:d1:ba:cc:91:42:77:4c:25: c9:90:38:6f:db:f0:cc:fb:8e:1e:97:59:3e:d5:60: 4e:e6:05:28:ed:49:79:13:4b:ba:48:db:2f:f9:72: d3:39:ca:fe:1f:d8:34:72:f5:b4:40:cf:31:01:c3: ec:de:11:2d:17:5d:1f:b8:50:d1:5e:19:a7:69:de: 07:33:28:ca:50:95:f9:a7:54:cb:54:86:50:45:a9: f9:49 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 08:76:CD:CB:07:FF:24:F6:C5:CD:ED:BB:90:BC:E2:84:37:46:75:F7 X509v3 Key Usage: critical Certificate Sign, CRL Sign Signature Algorithm: sha1WithRSAEncryption a6:a8:ad:22:ce:01:3d:a6:a3:ff:62:d0:48:9d:8b:5e:72:b0: 78:44:e3:dc:1c:af:09:fd:23:48:fa:bd:2a:c4:b9:55:04:b5: 10:a3:8d:27:de:0b:82:63:d0:ee:de:0c:37:79:41:5b:22:b2: b0:9a:41:5c:a6:70:e0:d4:d0:77:cb:23:d3:00:e0:6c:56:2f: e1:69:0d:0d:d9:aa:bf:21:81:50:d9:06:a5:a8:ff:95:37:d0: aa:fe:e2:b3:f5:99:2d:45:84:8a:e5:42:09:d7:74:02:2f:f7: 89:d8:99:e9:bc:27:d4:47:8d:ba:0d:46:1c:77:cf:14:a4:1c: b9:a4:31:c4:9c:28:74:03:34:ff:33:19:26:a5:e9:0d:74:b7: 3e:97:c6:76:e8:27:96:a3:66:dd:e1:ae:f2:41:5b:ca:98:56: 83:73:70:e4:86:1a:d2:31:41:ba:2f:be:2d:13:5a:76:6f:4e: e8:4e:81:0e:3f:5b:03:22:a0:12:be:66:58:11:4a:cb:03:c4: b4:2a:2a:2d:96:17:e0:39:54:bc:48:d3:76:27:9d:9a:2d:06: a6:c9:ec:39:d2:ab:db:9f:9a:0b:27:02:35:29:b1:40:95:e7: f9:e8:9c:55:88:19:46:d6:b7:34:f5:7e:ce:39:9a:d9:38:f1: 51:f7:4f:2c SHA1 Fingerprint=07:E0:32:E0:20:B7:2C:3F:19:2F:06:28:A2:59:3A:19:A7:0F:06:9E -----BEGIN CERTIFICATE----- MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI 03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C=FR, O=Certinomis, OU=0002 433998903, CN=Certinomis - Autorit\xC3\xA9 Racine Validity Not Before: Sep 17 08:28:59 2008 GMT Not After : Sep 17 08:28:59 2028 GMT Subject: C=FR, O=Certinomis, OU=0002 433998903, CN=Certinomis - Autorit\xC3\xA9 Racine Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:9d:85:9f:86:d3:e3:af:c7:b2:6b:6e:33:e0:9e: b7:42:34:55:9d:f9:81:be:63:d8:23:76:0e:97:54: cd:99:4c:1a:f1:39:c7:88:d8:17:50:0c:9e:61:da: c0:4e:55:de:e7:5a:b8:7a:4e:77:87:0d:e5:b8:eb: fa:9e:5e:7b:1e:c4:cf:28:74:c7:93:f5:14:c6:22: 28:04:f9:91:c3:ab:27:73:6a:0e:2e:4d:f3:2e:28: 1f:70:df:55:2f:4e:ed:c7:71:6f:09:72:2e:ed:d5: 32:97:d0:f1:58:77:d1:60:bc:4e:5e:db:9a:84:f6: 47:61:45:2b:f6:50:a6:7f:6a:71:27:48:84:35:9e: ac:fe:69:a9:9e:7a:5e:35:25:fa:b4:a7:49:35:77: 96:a7:36:5b:e1:cd:df:23:70:d8:5d:4c:a5:08:83: f1:a6:24:38:13:a8:ec:2f:a8:a1:67:c7:a6:2d:86: 47:ee:8a:fc:ec:9b:0e:74:f4:2b:49:02:7b:90:75: 8c:fc:99:39:01:39:d6:4a:89:e5:9e:76:ab:3e:96: 28:38:26:8b:dd:8d:8c:c0:f6:01:1e:6f:a5:31:12: 38:7d:95:c2:71:ee:ed:74:ae:e4:36:a2:43:75:d5: f1:00:9b:e2:e4:d7:cc:42:03:4b:78:7a:e5:7d:bb: b8:ae:2e:20:93:d3:e4:61:df:71:e1:76:67:97:3f: b6:df:6a:73:5a:64:22:e5:42:db:cf:81:03:93:d8: f4:e3:10:e0:72:f6:00:70:ac:f0:c1:7a:0f:05:7f: cf:34:69:45:b5:93:e4:19:db:52:16:23:05:89:0e: 8d:48:e4:25:6f:b3:78:bf:62:f5:07:fa:95:24:c2: 96:b2:e8:a3:23:c2:5d:03:fc:c3:d3:e5:7c:c9:75: 23:d7:f4:f5:bc:de:e4:df:cd:80:bf:91:88:7d:a7: 13:b4:39:ba:2c:ba:bd:d1:6b:cc:f3:a5:28:ed:44: 9e:7d:52:a3:6f:96:2e:19:7e:1c:f3:5b:c7:16:8e: bb:60:7d:77:66:47:54:82:00:11:60:6c:32:c1:a8: 38:1b:eb:6e:98:13:d6:ee:38:f5:f0:9f:0e:ef:fe: 31:81:c1:d2:24:95:2f:53:7a:69:a2:f0:0f:86:45: 8e:58:82:2b:4c:22:d4:5e:a0:e7:7d:26:27:48:df: 25:46:8d:4a:28:7c:86:9e:f9:9b:1a:59:b9:65:bf: 05:dd:b6:42:5d:3d:e6:00:48:82:5e:20:f7:11:82: de:ca:d8:9f:e6:37:47:26:1e:eb:78:f7:61:c3:41: 64:58:02:41:f9:da:e0:d1:f8:f9:e8:fd:52:38:b6: f5:89:df Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 0D:8C:B6:61:DA:44:B8:D1:14:7D:C3:BE:7D:5E:48:F0:CE:CA:6A:B0 X509v3 Certificate Policies: Policy: 1.2.250.1.86.2.2.0.1.1 Signature Algorithm: sha1WithRSAEncryption 24:3e:60:06:7e:1d:ef:3a:3e:db:ea:af:1c:9a:2c:01:0b:f4: c5:b5:d9:49:31:f4:5d:41:8d:89:0c:4e:ff:6c:a2:fd:ff:e2: 06:c8:39:9f:f1:5a:a9:dd:22:58:15:a8:8a:d3:b1:e6:32:09: 82:03:6c:d7:3f:08:c7:f8:b9:ba:00:6d:b9:d6:fc:52:32:5d: a4:7f:a4:31:94:bb:b6:4c:38:7f:28:30:35:ff:9f:23:53:b7: b6:ee:14:70:00:40:2b:da:47:ab:34:7e:5e:a7:56:30:61:2b: 8b:43:ac:fd:b6:88:28:f5:6b:b6:3e:60:4a:ba:42:90:34:67: 8d:ea:eb:5f:45:54:3b:17:ac:8b:e4:c6:65:0f:ee:d0:8c:5d: 66:39:ce:32:a7:d8:10:97:c0:7e:34:9c:9f:94:f3:f6:86:1f: cf:1b:73:ad:94:79:87:68:70:c3:33:a5:70:e7:d8:d5:38:94: 6f:63:79:eb:bf:0a:0e:08:e7:c5:2f:0f:42:a0:2b:14:40:ff: 21:e0:05:c5:27:e1:84:11:13:ba:d6:86:1d:41:0b:13:23:89: d3:c9:0b:e8:8a:ba:7a:a3:a3:73:37:35:80:7d:12:b8:33:77: 40:38:c0:fa:5e:30:d2:f2:b6:a3:b1:d6:a2:95:97:81:9b:52: ed:69:4c:ff:80:e4:53:db:54:5b:03:6d:54:5f:b1:b8:ef:24: bd:6f:9f:11:c3:c7:64:c2:0f:28:62:85:66:5e:1a:7b:b2:b7: ef:ae:35:c9:19:33:a8:b8:27:db:33:55:bf:68:e1:75:48:44: 56:fb:cd:d3:48:bb:47:89:3a:ac:69:f5:80:c6:e4:44:50:2f: 54:c4:aa:43:c5:31:31:58:bd:96:c5:ea:75:6c:9a:75:b1:4d: f8:f7:97:ff:96:16:f2:97:4d:e8:f6:f3:11:f9:3a:7d:8a:38: 6e:04:cb:e1:d3:45:15:aa:a5:d1:1d:9d:5d:63:e8:24:e6:36: 14:e2:87:ad:1b:59:f5:44:9b:fb:d7:77:7c:1f:01:70:62:a1: 20:1a:a2:c5:1a:28:f4:21:03:ee:2e:d9:c1:80:ea:b9:d9:82: d6:5b:76:c2:cb:3b:b5:d2:00:f0:a3:0e:e1:ad:6e:40:f7:db: a0:b4:d0:46:ae:15:d7:44:c2:4d:35:f9:d2:0b:f2:17:f6:ac: 66:d5:24:b2:4f:d1:1c:99:c0:6e:f5:7d:eb:74:04:b8:f9:4d: 77:09:d7:b4:cf:07:30:09:f1:b8:00:56:d9:17:16:16:0a:2b: 86:df:8f:01:19:1a:e5:bb:82:63:ff:be:0b:76:16:5e:37:37: e6:d8:74:97:a2:99:45:79 SHA1 Fingerprint=2E:14:DA:EC:28:F0:FA:1E:8E:38:9A:4E:AB:EB:26:C0:0A:D3:83:C3 -----BEGIN CERTIFICATE----- MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjET MBEGA1UEChMKQ2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAk BgNVBAMMHUNlcnRpbm9taXMgLSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4 Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkGA1UEBhMCRlIxEzARBgNVBAoTCkNl cnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYwJAYDVQQDDB1DZXJ0 aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQADggIP ADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jY F1AMnmHawE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N 8y4oH3DfVS9O7cdxbwlyLu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWe rP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K /OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92NjMD2AR5vpTESOH2VwnHu 7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9qc1pkIuVC 28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6 lSTClrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1E nn1So2+WLhl+HPNbxxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB 0iSVL1N6aaLwD4ZFjliCK0wi1F6g530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql09 5gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna4NH4+ej9Uji29YnfAgMBAAGj WzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBQN jLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9s ov3/4gbIOZ/xWqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZM OH8oMDX/nyNTt7buFHAAQCvaR6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q 619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40nJ+U8/aGH88bc62UeYdocMMzpXDn 2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1BCxMjidPJC+iKunqj o3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjvJL1v nxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG 5ERQL1TEqkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWq pdEdnV1j6CTmNhTih60bWfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZb dsLLO7XSAPCjDuGtbkD326C00EauFddEwk01+dIL8hf2rGbVJLJP0RyZwG71fet0 BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/vgt2Fl43N+bYdJeimUV5 -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 994436456 (0x3b45e568) Signature Algorithm: sha1WithRSAEncryption Issuer: C=ES, O=Generalitat Valenciana, OU=PKIGVA, CN=Root CA Generalitat Valenciana Validity Not Before: Jul 6 16:22:47 2001 GMT Not After : Jul 1 15:22:47 2021 GMT Subject: C=ES, O=Generalitat Valenciana, OU=PKIGVA, CN=Root CA Generalitat Valenciana Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:c6:2a:ab:57:11:37:2f:22:8a:ca:03:74:1d:ca: ed:2d:a2:0b:bc:33:52:40:26:47:be:5a:69:a6:3b: 72:36:17:4c:e8:df:b8:bb:2f:76:e1:40:46:74:65: 02:90:52:08:b4:ff:a8:8c:c1:e0:c7:89:56:10:39: 33:ef:68:b4:5f:5f:da:6d:23:a1:89:5e:22:a3:4a: 06:f0:27:f0:57:b9:f8:e9:4e:32:77:0a:3f:41:64: f3:eb:65:ee:76:fe:54:aa:7d:1d:20:ae:f3:d7:74: c2:0a:5f:f5:08:28:52:08:cc:55:5d:d2:0f:db:9a: 81:a5:bb:a1:b3:c1:94:cd:54:e0:32:75:31:91:1a: 62:b2:de:75:e2:cf:4f:89:d9:91:90:0f:41:1b:b4: 5a:4a:77:bd:67:83:e0:93:e7:5e:a7:0c:e7:81:d3: f4:52:ac:53:b2:03:c7:44:26:fb:79:e5:cb:34:60: 50:10:7b:1b:db:6b:d7:47:ab:5f:7c:68:ca:6e:9d: 41:03:10:ee:6b:99:7b:5e:25:a8:c2:ab:e4:c0:f3: 5c:9c:e3:be:ce:31:4c:64:1e:5e:80:a2:f5:83:7e: 0c:d6:ca:8c:55:8e:be:e0:be:49:07:0f:a3:24:41: 7a:58:1d:84:ea:58:12:c8:e1:b7:ed:ef:93:de:94: 08:31 Exponent: 65537 (0x10001) X509v3 extensions: Authority Information Access: OCSP - URI:http://ocsp.pki.gva.es X509v3 Basic Constraints: critical CA:TRUE, pathlen:2 X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.8149.2.1.0 User Notice: Explicit Text: CPS: http://www.pki.gva.es/cps X509v3 Subject Key Identifier: 7B:35:D3:40:D2:1C:78:19:66:EF:74:10:28:DC:3E:4F:B2:78:04:FC X509v3 Authority Key Identifier: keyid:7B:35:D3:40:D2:1C:78:19:66:EF:74:10:28:DC:3E:4F:B2:78:04:FC DirName:/C=ES/O=Generalitat Valenciana/OU=PKIGVA/CN=Root CA Generalitat Valenciana serial:3B:45:E5:68 Signature Algorithm: sha1WithRSAEncryption 24:61:4e:f5:b5:c8:42:02:2a:b3:5c:75:ad:c5:6d:ca:e7:94: 3f:a5:68:95:88:c1:54:c0:10:69:a2:12:2f:18:3f:25:50:a8: 7c:4a:ea:c6:09:d9:f4:75:c6:40:da:af:50:9d:3d:a5:16:bb: 6d:31:c6:c7:73:0a:48:fe:20:72:ed:6f:cc:e8:83:61:16:46: 90:01:95:4b:7d:8e:9a:52:09:2f:f6:6f:1c:e4:a1:71:cf:8c: 2a:5a:17:73:83:47:4d:0f:36:fb:04:4d:49:51:e2:14:c9:64: 61:fb:d4:14:e0:f4:9e:b7:34:8f:0a:26:bd:97:5c:f4:79:3a: 4a:30:19:cc:ad:4f:a0:98:8a:b4:31:97:2a:e2:73:6d:7e:78: b8:f8:88:89:4f:b1:22:91:64:4b:f5:50:de:03:db:e5:c5:76: e7:13:66:75:7e:65:fb:01:9f:93:87:88:9d:f9:46:57:7c:4d: 60:af:98:73:13:23:a4:20:91:81:fa:d0:61:66:b8:7d:d1:af: d6:6f:1e:6c:3d:e9:11:fd:a9:f9:82:22:86:99:33:71:5a:ea: 19:57:3d:91:cd:a9:c0:a3:6e:07:13:a6:c9:ed:f8:68:a3:9e: c3:5a:72:09:87:28:d1:c4:73:c4:73:18:5f:50:75:16:31:9f: b7:e8:7c:c3 SHA1 Fingerprint=A0:73:E5:C5:BD:43:61:0D:86:4C:21:13:0A:85:58:57:CC:9C:EA:46 -----BEGIN CERTIFICATE----- MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJF UzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJ R1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcN MDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3WjBoMQswCQYDVQQGEwJFUzEfMB0G A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScw JQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+ WmmmO3I2F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKj SgbwJ/BXufjpTjJ3Cj9BZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGl u6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQD0EbtFpKd71ng+CT516nDOeB0/RSrFOy A8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXteJajCq+TA81yc477OMUxk Hl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMBAAGjggM7 MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBr aS5ndmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIIC IwYKKwYBBAG/VQIBADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8A cgBpAGQAYQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIA YQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIAYQBsAGkAdABhAHQAIABWAGEA bABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQByAGEAYwBpAPMA bgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMA aQBvAG4AYQBtAGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQA ZQAgAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEA YwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBuAHQAcgBhACAAZQBuACAAbABhACAA ZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAAOgAvAC8AdwB3AHcA LgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0dHA6 Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+y eAT8MIGVBgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQsw CQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0G A1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVu Y2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRhTvW1yEICKrNcda3Fbcrn lD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdzCkj+IHLt b8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg 9J63NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XF ducTZnV+ZfsBn5OHiJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmC IoaZM3Fa6hlXPZHNqcCjbgcTpsnt+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 93214 (0x16c1e) Signature Algorithm: sha1WithRSAEncryption Issuer: C=AT, O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH, OU=A-Trust-nQual-03, CN=A-Trust-nQual-03 Validity Not Before: Aug 17 22:00:00 2005 GMT Not After : Aug 17 22:00:00 2015 GMT Subject: C=AT, O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH, OU=A-Trust-nQual-03, CN=A-Trust-nQual-03 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:ad:3d:61:6e:03:f3:90:3b:c0:41:0b:84:80:cd: ec:2a:a3:9d:6b:bb:6e:c2:42:84:f7:51:14:e1:a0: a8:2d:51:a3:51:f2:de:23:f0:34:44:ff:94:eb:cc: 05:23:95:40:b9:07:78:a5:25:f6:0a:bd:45:86:e8: d9:bd:c0:04:8e:85:44:61:ef:7f:a7:c9:fa:c1:25: cc:85:2c:63:3f:05:60:73:49:05:e0:60:78:95:10: 4b:dc:f9:11:59:ce:71:7f:40:9b:8a:aa:24:df:0b: 42:e2:db:56:bc:4a:d2:a5:0c:9b:b7:43:3e:dd:83: d3:26:10:02:cf:ea:23:c4:49:4e:e5:d3:e9:b4:88: ab:0c:ae:62:92:d4:65:87:d9:6a:d7:f4:85:9f:e4: 33:22:25:a5:e5:c8:33:ba:c3:c7:41:dc:5f:c6:6a: cc:00:0e:6d:32:a8:b6:87:36:00:62:77:9b:1e:1f: 34:cb:90:3c:78:88:74:05:eb:79:f5:93:71:65:ca: 9d:c7:6b:18:2d:3d:5c:4e:e7:d5:f8:3f:31:7d:8f: 87:ec:0a:22:2f:23:e9:fe:bb:7d:c9:e0:f4:ec:eb: 7c:c4:b0:c3:2d:62:b5:9a:71:d6:b1:6a:e8:ec:d9: ed:d5:72:ec:be:57:01:ce:05:55:9f:de:d1:60:88: 10:b3 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 44:6A:95:67:55:79:11:4F X509v3 Key Usage: critical Certificate Sign, CRL Sign Signature Algorithm: sha1WithRSAEncryption 55:d4:54:d1:59:48:5c:b3:93:85:aa:bf:63:2f:e4:80:ce:34: a3:34:62:3e:f6:d8:ee:67:88:31:04:03:6f:0b:d4:07:fb:4e: 75:0f:d3:2e:d3:c0:17:c7:c6:28:ec:06:0d:11:24:0e:0e:a5: 5d:bf:8c:b2:13:96:71:dc:d4:ce:0e:0d:0a:68:32:6c:b9:41: 31:19:ab:b1:07:7b:4d:98:d3:5c:b0:d1:f0:a7:42:a0:b5:c4: 8e:af:fe:f1:3f:f4:ef:4f:46:00:76:eb:02:fb:f9:9d:d2:40: 96:c7:88:3a:b8:9f:11:79:f3:80:65:a8:bd:1f:d3:78:81:a0: 51:4c:37:b4:a6:5d:25:70:d1:66:c9:68:f9:2e:11:14:68:f1: 54:98:08:ac:26:92:0f:de:89:9e:d4:fa:b3:79:2b:d2:a3:79: d4:ec:8b:ac:87:53:68:42:4c:51:51:74:1e:1b:27:2e:e3:f5: 1f:29:74:4d:ed:af:f7:e1:92:99:81:e8:be:3a:c7:17:50:f6: b7:c6:fc:9b:b0:8a:6b:d6:88:03:91:8f:06:77:3a:85:02:dd: 98:d5:43:78:3f:c6:30:15:ac:9b:6b:cb:57:b7:89:51:8b:3a: e8:c9:84:0c:db:b1:50:20:0a:1a:4a:ba:6a:1a:bd:ec:1b:c8: c5:84:9a:cd SHA1 Fingerprint=D3:C0:63:F2:19:ED:07:3E:34:AD:5D:75:0B:32:76:29:FF:D5:9A:F2 -----BEGIN CERTIFICATE----- MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJB VDFIMEYGA1UECgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBp bSBlbGVrdHIuIERhdGVudmVya2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5R dWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5RdWFsLTAzMB4XDTA1MDgxNzIyMDAw MFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgwRgYDVQQKDD9BLVRy dXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0ZW52 ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMM EEEtVHJ1c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB AQCtPWFuA/OQO8BBC4SAzewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUj lUC5B3ilJfYKvUWG6Nm9wASOhURh73+nyfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZ znF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPESU7l0+m0iKsMrmKS1GWH 2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4iHQF63n1 k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs 2e3Vcuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYD VR0OBAoECERqlWdVeRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC AQEAVdRU0VlIXLOThaq/Yy/kgM40ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fG KOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmrsQd7TZjTXLDR8KdCoLXEjq/+ 8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZdJXDRZslo+S4R FGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmE DNuxUCAKGkq6ahq97BvIxYSazQ== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C=TW, O=TAIWAN-CA, OU=Root CA, CN=TWCA Root Certification Authority Validity Not Before: Aug 28 07:24:33 2008 GMT Not After : Dec 31 15:59:59 2030 GMT Subject: C=TW, O=TAIWAN-CA, OU=Root CA, CN=TWCA Root Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:b0:7e:72:b8:a4:03:94:e6:a7:de:09:38:91:4a: 11:40:87:a7:7c:59:64:14:7b:b5:11:10:dd:fe:bf: d5:c0:bb:56:e2:85:25:f4:35:72:0f:f8:53:d0:41: e1:44:01:c2:b4:1c:c3:31:42:16:47:85:33:22:76: b2:0a:6f:0f:e5:25:50:4f:85:86:be:bf:98:2e:10: 67:1e:be:11:05:86:05:90:c4:59:d0:7c:78:10:b0: 80:5c:b7:e1:c7:2b:75:cb:7c:9f:ae:b5:d1:9d:23: 37:63:a7:dc:42:a2:2d:92:04:1b:50:c1:7b:b8:3e: 1b:c9:56:04:8b:2f:52:9b:ad:a9:56:e9:c1:ff:ad: a9:58:87:30:b6:81:f7:97:45:fc:19:57:3b:2b:6f: e4:47:f4:99:45:fe:1d:f1:f8:97:a3:88:1d:37:1c: 5c:8f:e0:76:25:9a:50:f8:a0:54:ff:44:90:76:23: d2:32:c6:c3:ab:06:bf:fc:fb:bf:f3:ad:7d:92:62: 02:5b:29:d3:35:a3:93:9a:43:64:60:5d:b2:fa:32: ff:3b:04:af:4d:40:6a:f9:c7:e3:ef:23:fd:6b:cb: e5:0f:8b:38:0d:ee:0a:fc:fe:0f:98:9f:30:31:dd: 6c:52:65:f9:8b:81:be:22:e1:1c:58:03:ba:91:1b: 89:07 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 6A:38:5B:26:8D:DE:8B:5A:F2:4F:7A:54:83:19:18:E3:08:35:A6:BA Signature Algorithm: sha1WithRSAEncryption 3c:d5:77:3d:da:df:89:ba:87:0c:08:54:6a:20:50:92:be:b0: 41:3d:b9:26:64:83:0a:2f:e8:40:c0:97:28:27:82:30:4a:c9: 93:ff:6a:e7:a6:00:7f:89:42:9a:d6:11:e5:53:ce:2f:cc:f2: da:05:c4:fe:e2:50:c4:3a:86:7d:cc:da:7e:10:09:3b:92:35: 2a:53:b2:fe:eb:2b:05:d9:6c:5d:e6:d0:ef:d3:6a:66:9e:15: 28:85:7a:e8:82:00:ac:1e:a7:09:69:56:42:d3:68:51:18:be: 54:9a:bf:44:41:ba:49:be:20:ba:69:5c:ee:b8:77:cd:ce:6c: 1f:ad:83:96:18:7d:0e:b5:14:39:84:f1:28:e9:2d:a3:9e:7b: 1e:7a:72:5a:83:b3:79:6f:ef:b4:fc:d0:0a:a5:58:4f:46:df: fb:6d:79:59:f2:84:22:52:ae:0f:cc:fb:7c:3b:e7:6a:ca:47: 61:c3:7a:f8:d3:92:04:1f:b8:20:84:e1:36:54:16:c7:40:de: 3b:8a:73:dc:df:c6:09:4c:df:ec:da:ff:d4:53:42:a1:c9:f2: 62:1d:22:83:3c:97:c5:f9:19:62:27:ac:65:22:d7:d3:3c:c6: e5:8e:b2:53:cc:49:ce:bc:30:fe:7b:0e:33:90:fb:ed:d2:14: 91:1f:07:af SHA1 Fingerprint=CF:9E:87:6D:D3:EB:FC:42:26:97:A3:B5:A3:7A:A0:76:A9:06:23:48 -----BEGIN CERTIFICATE----- MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx 3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 0f:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff Signature Algorithm: sha1WithRSAEncryption Issuer: C=NL, O=DigiNotar, CN=DigiNotar Root CA/emailAddress=info@diginotar.nl Validity Not Before: Jul 27 17:19:37 2007 GMT Not After : Mar 31 18:19:22 2025 GMT Subject: C=NL, O=DigiNotar, CN=DigiNotar Root CA/emailAddress=info@diginotar.nl Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:ac:b0:58:c1:00:bd:d8:21:08:0b:2b:9a:fe:6e: 56:30:05:9f:1b:77:90:10:41:5c:c3:0d:87:11:77: 8e:81:f1:ca:7c:e9:8c:6a:ed:38:74:35:bb:da:df: f9:bb:c0:09:37:b4:96:73:81:7d:33:1a:98:39:f7: 93:6f:95:7f:3d:b9:b1:75:87:ba:51:48:e8:8b:70: 3e:95:04:c5:d8:b6:c3:16:d9:88:b0:b1:87:1d:70: da:86:b4:0f:14:8b:7a:cf:10:d1:74:36:a2:12:7b: 77:86:4a:79:e6:7b:df:02:11:68:a5:4e:86:ae:34: 58:9b:24:13:78:56:22:25:1e:01:8b:4b:51:71:fb: 82:cc:59:96:69:88:5a:68:53:c5:b9:0d:02:37:cb: 4b:bc:66:4a:90:7e:2a:0b:05:07:ed:16:5f:55:90: 75:d8:46:c9:1b:83:e2:08:be:f1:23:cc:99:1d:d6: 2a:0f:83:20:15:58:27:82:2e:fa:e2:22:c2:49:b1: b9:01:81:6a:9d:6d:9d:40:77:68:76:4e:21:2a:6d: 84:40:85:4e:76:99:7c:82:f3:f3:b7:02:59:d4:26: 01:1b:8e:df:ad:53:06:d1:ae:18:dd:e2:b2:3a:cb: d7:88:38:8e:ac:5b:29:b9:19:d3:98:f9:18:03:cf: 48:82:86:66:0b:1b:69:0f:c9:eb:38:88:7a:26:1a: 05:4c:92:d7:24:d4:96:f2:ac:52:2d:a3:47:d5:52: f6:3f:fe:ce:84:06:70:a6:aa:3e:a2:f2:b6:56:34: 18:57:a2:e4:81:6d:e7:ca:f0:6a:d3:c7:91:6b:02: 83:41:7c:15:ef:6b:9a:64:5e:e3:d0:3c:e5:b1:eb: 7b:5d:86:fb:cb:e6:77:49:cd:a3:65:dc:f7:b9:9c: b8:e4:0b:5f:93:cf:cc:30:1a:32:1c:ce:1c:63:95: a5:f9:ea:e1:74:8b:9e:e9:2b:a9:30:7b:a0:18:1f: 0e:18:0b:e5:5b:a9:d3:d1:6c:1e:07:67:8f:91:4b: a9:8a:bc:d2:66:aa:93:01:88:b2:91:fa:31:5c:d5: a6:c1:52:08:09:cd:0a:63:a2:d3:22:a6:e8:a1:d9: 39:06:97:f5:6e:8d:02:90:8c:14:7b:3f:80:cd:1b: 9c:ba:c4:58:72:23:af:b6:56:9f:c6:7a:42:33:29: 07:3f:82:c9:e6:1f:05:0d:cd:4c:28:36:8b:d3:c8: 3e:1c:c6:88:ef:5e:ee:89:64:e9:1d:eb:da:89:7e: 32:a6:69:d1:dd:cc:88:9f:d1:d0:c9:66:21:dc:06: 67:c5:94:7a:9a:6d:62:4c:7d:cc:e0:64:80:b2:9e: 47:8e:a3 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 88:68:BF:E0:8E:35:C4:3B:38:6B:62:F7:28:3B:84:81:C8:0C:D7:4D Signature Algorithm: sha1WithRSAEncryption 3b:02:8d:cb:3c:30:e8:6e:a0:ad:f2:73:b3:5f:9e:25:13:04: 05:d3:f6:e3:8b:bb:0b:79:ce:53:de:e4:96:c5:d1:af:73:bc: d5:c3:d0:40:55:7c:40:7f:cd:1b:5f:09:d5:f2:7c:9f:68:1d: bb:5d:ce:7a:39:c2:8c:d6:98:7b:c5:83:55:a8:d5:7d:40:ca: e0:1e:f7:89:5e:63:5d:a1:13:c2:5d:8a:b6:8a:7c:00:f3:23: c3:ed:85:5f:71:76:f0:68:63:aa:45:21:39:48:61:78:36:dc: f1:43:93:d4:25:c7:f2:80:65:e1:53:02:75:51:fc:7a:3a:ef: 37:ab:84:28:57:0c:d8:d4:d4:99:56:6c:e3:a2:fe:59:84:b4: 31:e8:33:f8:64:94:94:51:97:ab:39:c5:4b:ed:da:dd:80:0b: 6f:7c:29:0d:c4:8e:8a:72:0d:e7:53:14:b2:60:41:3d:84:91: 31:68:3d:27:44:db:e5:de:f4:fa:63:45:c8:4c:3e:98:f5:3f: 41:ba:4e:cb:37:0d:ba:66:98:f1:dd:cb:9f:5c:f7:54:36:82: 6b:2c:bc:13:61:97:42:f8:78:bb:cc:c8:a2:9f:ca:f0:68:bd: 6b:1d:b2:df:8d:6f:07:9d:da:8e:67:c7:47:1e:ca:b9:bf:2a: 42:91:b7:63:53:66:f1:42:a3:e1:f4:5a:4d:58:6b:b5:e4:a4: 33:ad:5c:70:1d:dc:e0:f2:eb:73:14:91:9a:03:c1:ea:00:65: bc:07:fc:cf:12:11:22:2c:ae:a0:bd:3a:e0:a2:2a:d8:59:e9: 29:d3:18:35:a4:ac:11:5f:19:b5:b5:1b:ff:22:4a:5c:c6:7a: e4:17:ef:20:a9:a7:f4:3f:ad:8a:a7:9a:04:25:9d:0e:ca:37: e6:50:fd:8c:42:29:04:9a:ec:b9:cf:4b:72:bd:e2:08:36:af: 23:2f:62:e5:ca:01:d3:70:db:7c:82:23:2c:16:31:0c:c6:36: 07:90:7a:b1:1f:67:58:c4:3b:58:59:89:b0:8c:8c:50:b3:d8: 86:cb:68:a3:c4:0a:e7:69:4b:20:ce:c1:1e:56:4b:95:a9:23: 68:d8:30:d8:c3:eb:b0:55:51:cd:e5:fd:2b:b8:f5:bb:11:9f: 53:54:f6:34:19:8c:79:09:36:ca:61:17:25:17:0b:82:98:73: 0c:77:74:c3:d5:0d:c7:a8:12:4c:c7:a7:54:71:47:2e:2c:1a: 7d:c9:e3:2b:3b:48:de:27:84:a7:63:36:b3:7d:8f:a0:64:39: 24:0d:3d:7b:87:af:66:5c:74:1b:4b:73:b2:e5:8c:f0:86:99: b8:e5:c5:df:84:c1:b7:eb SHA1 Fingerprint=C1:77:CB:4B:E0:B4:26:8E:F5:C7:CF:45:99:22:B9:B0:CE:BA:21:2F -----BEGIN CERTIFICATE----- MIIFijCCA3KgAwIBAgIQD////////////////////zANBgkqhkiG9w0BAQUFADBf MQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdp Tm90YXIgUm9vdCBDQTEgMB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmww HhcNMDcwNzI3MTcxOTM3WhcNMjUwMzMxMTgxOTIyWjBfMQswCQYDVQQGEwJOTDES MBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdpTm90YXIgUm9vdCBDQTEg MB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmwwggIiMA0GCSqGSIb3DQEB AQUAA4ICDwAwggIKAoICAQCssFjBAL3YIQgLK5r+blYwBZ8bd5AQQVzDDYcRd46B 8cp86Yxq7Th0Nbva3/m7wAk3tJZzgX0zGpg595NvlX89ubF1h7pRSOiLcD6VBMXY tsMW2YiwsYcdcNqGtA8Ui3rPENF0NqISe3eGSnnme98CEWilToauNFibJBN4ViIl HgGLS1Fx+4LMWZZpiFpoU8W5DQI3y0u8ZkqQfioLBQftFl9VkHXYRskbg+IIvvEj zJkd1ioPgyAVWCeCLvriIsJJsbkBgWqdbZ1Ad2h2TiEqbYRAhU52mXyC8/O3AlnU JgEbjt+tUwbRrhjd4rI6y9eIOI6sWym5GdOY+RgDz0iChmYLG2kPyes4iHomGgVM ktck1JbyrFIto0fVUvY//s6EBnCmqj6i8rZWNBhXouSBbefK8GrTx5FrAoNBfBXv a5pkXuPQPOWx63tdhvvL5ndJzaNl3Pe5nLjkC1+Tz8wwGjIczhxjlaX56uF0i57p K6kwe6AYHw4YC+VbqdPRbB4HZ4+RS6mKvNJmqpMBiLKR+jFc1abBUggJzQpjotMi puih2TkGl/VujQKQjBR7P4DNG5y6xFhyI6+2Vp/GekIzKQc/gsnmHwUNzUwoNovT yD4cxojvXu6JZOkd69qJfjKmadHdzIif0dDJZiHcBmfFlHqabWJMfczgZICynkeO owIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV HQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wDQYJKoZIhvcNAQEFBQADggIBADsC jcs8MOhuoK3yc7NfniUTBAXT9uOLuwt5zlPe5JbF0a9zvNXD0EBVfEB/zRtfCdXy fJ9oHbtdzno5wozWmHvFg1Wo1X1AyuAe94leY12hE8JdiraKfADzI8PthV9xdvBo Y6pFITlIYXg23PFDk9Qlx/KAZeFTAnVR/Ho67zerhChXDNjU1JlWbOOi/lmEtDHo M/hklJRRl6s5xUvt2t2AC298KQ3EjopyDedTFLJgQT2EkTFoPSdE2+Xe9PpjRchM Ppj1P0G6Tss3DbpmmPHdy59c91Q2gmssvBNhl0L4eLvMyKKfyvBovWsdst+Nbwed 2o5nx0ceyrm/KkKRt2NTZvFCo+H0Wk1Ya7XkpDOtXHAd3ODy63MUkZoDweoAZbwH /M8SESIsrqC9OuCiKthZ6SnTGDWkrBFfGbW1G/8iSlzGeuQX7yCpp/Q/rYqnmgQl nQ7KN+ZQ/YxCKQSa7LnPS3K94gg2ryMvYuXKAdNw23yCIywWMQzGNgeQerEfZ1jE O1hZibCMjFCz2IbLaKPECudpSyDOwR5WS5WpI2jYMNjD67BVUc3l/Su49bsRn1NU 9jQZjHkJNsphFyUXC4KYcwx3dMPVDceoEkzHp1RxRy4sGn3J4ys7SN4nhKdjNrN9 j6BkOSQNPXuHr2ZcdBtLc7LljPCGmbjlxd+Ewbfr -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 268435455 (0xfffffff) Signature Algorithm: sha1WithRSAEncryption Issuer: C=NL, O=DigiNotar, CN=DigiNotar Services 1024 CA/emailAddress=info@diginotar.nl Validity Not Before: Jul 26 15:59:01 2007 GMT Not After : Aug 26 16:29:01 2013 GMT Subject: C=NL, O=DigiNotar, CN=DigiNotar Services 1024 CA/emailAddress=info@diginotar.nl Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:da:9b:4d:5d:3c:f9:d1:e2:8b:c6:c6:08:20:c5: d9:1e:48:ec:66:58:67:79:62:2b:41:63:f4:89:8d: 68:da:af:b8:94:36:8b:19:24:a4:a0:93:d2:99:0f: b2:ad:2d:35:4d:cd:2f:6a:e1:f9:9b:19:2b:bc:04: 1a:7e:2d:3d:52:64:cd:f1:3e:67:0f:89:2e:e8:f2: 4f:ae:a6:08:a1:85:fe:a1:a9:09:e6:c6:ab:3e:43: fc:af:7a:03:91:da:a6:39:a6:61:ee:98:4f:18:a8: d3:b3:af:66:82:e9:9f:bc:dd:72:f9:06:04:bd:12: d9:18:24:e7:ab:93:53:8b:59 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE, pathlen:0 X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication, E-mail Protection X509v3 Certificate Policies: Policy: X509v3 Any Policy Authority Information Access: OCSP - URI:http://ocsp.entrust.net X509v3 CRL Distribution Points: Full Name: URI:http://crl.entrust.net/server1.crl X509v3 Subject Key Identifier: FE:DC:94:49:0C:6F:EF:5C:7F:C6:F1:12:99:4F:16:49:AD:FB:82:65 X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:F0:17:62:13:55:3D:B3:FF:0A:00:6B:FB:50:84:97:F3:ED:62:D0:1A 1.2.840.113533.7.65.0: 0 ..V7.1.... Signature Algorithm: sha1WithRSAEncryption 63:74:6a:37:a9:3f:96:9c:66:c8:58:ac:09:c9:ef:f5:65:94: 7f:a3:02:c4:38:31:bd:5d:23:87:ec:d4:56:b2:c9:b2:6e:e4: 05:06:fc:ec:f5:fa:88:70:59:d4:ee:e6:dd:b5:7a:a0:a3:60: 2f:02:0c:ab:de:12:5d:af:f0:35:4b:aa:8a:47:91:1a:f5:85: 2c:42:c7:1d:ef:95:43:b3:5e:b8:95:93:a5:da:c5:28:aa:ad: 72:2d:31:ad:99:6b:6c:ff:8c:21:27:af:ad:9a:91:2b:c7:dd: 58:c3:6e:07:c5:9f:79:d2:c7:8c:55:bf:4c:c7:27:5e:51:16: 2b:3e SHA1 Fingerprint=12:3B:EA:CA:66:67:77:61:E0:EB:68:F2:FE:ED:A2:0F:20:05:55:70 -----BEGIN CERTIFICATE----- MIIDcTCCAtqgAwIBAgIED////zANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJO TDESMBAGA1UEChMJRGlnaU5vdGFyMSMwIQYDVQQDExpEaWdpTm90YXIgU2Vydmlj ZXMgMTAyNCBDQTEgMB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmwwHhcN MDcwNzI2MTU1OTAxWhcNMTMwODI2MTYyOTAxWjBoMQswCQYDVQQGEwJOTDESMBAG A1UEChMJRGlnaU5vdGFyMSMwIQYDVQQDExpEaWdpTm90YXIgU2VydmljZXMgMTAy NCBDQTEgMB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmwwgZ8wDQYJKoZI hvcNAQEBBQADgY0AMIGJAoGBANqbTV08+dHii8bGCCDF2R5I7GZYZ3liK0Fj9ImN aNqvuJQ2ixkkpKCT0pkPsq0tNU3NL2rh+ZsZK7wEGn4tPVJkzfE+Zw+JLujyT66m CKGF/qGpCebGqz5D/K96A5HapjmmYe6YTxio07OvZoLpn7zdcvkGBL0S2Rgk56uT U4tZAgMBAAGjggEmMIIBIjASBgNVHRMBAf8ECDAGAQH/AgEAMCcGA1UdJQQgMB4G CCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwQwEQYDVR0gBAowCDAGBgRVHSAA MDMGCCsGAQUFBwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVz dC5uZXQwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbnRydXN0Lm5ldC9z ZXJ2ZXIxLmNybDAdBgNVHQ4EFgQU/tyUSQxv71x/xvESmU8WSa37gmUwCwYDVR0P BAQDAgEGMB8GA1UdIwQYMBaAFPAXYhNVPbP/CgBr+1CEl/PtYtAaMBkGCSqGSIb2 fQdBAAQMMAobBFY3LjEDAgCBMA0GCSqGSIb3DQEBBQUAA4GBAGN0ajepP5acZshY rAnJ7/VllH+jAsQ4Mb1dI4fs1FayybJu5AUG/Oz1+ohwWdTu5t21eqCjYC8CDKve El2v8DVLqopHkRr1hSxCxx3vlUOzXriVk6XaxSiqrXItMa2Za2z/jCEnr62akSvH 3VjDbgfFn3nSx4xVv0zHJ15RFis+ -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 268435455 (0xfffffff) Signature Algorithm: sha1WithRSAEncryption Issuer: C=NL, O=DigiNotar, CN=DigiNotar Cyber CA/emailAddress=info@diginotar.nl Validity Not Before: Oct 4 10:54:12 2006 GMT Not After : Oct 4 10:53:12 2011 GMT Subject: C=NL, O=DigiNotar, CN=DigiNotar Cyber CA/emailAddress=info@diginotar.nl Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:d2:ce:15:0a:2d:a8:5e:84:67:ad:fd:be:ef:46: c7:c8:b9:cf:73:fc:f4:34:b9:f9:2c:43:e7:60:13: 3d:7a:e3:b2:cf:3b:67:6c:90:ad:c0:b9:3f:84:52: f0:35:42:dc:74:dc:28:3b:bd:52:b4:a7:ac:72:45: 17:c6:f0:89:eb:b4:aa:25:f2:5d:4b:5e:d1:d9:87: ba:d6:7d:7c:f5:ce:32:9f:10:33:c5:b1:4a:bb:5e: 91:31:c2:d0:e9:41:c2:91:64:7e:09:41:3b:db:8b: 08:37:6a:aa:ca:52:de:b5:39:1e:c0:88:03:a5:3f: 8b:99:13:61:43:b5:9b:82:b3:ee:20:6f:cf:a1:44: a2:ea:2f:6b:40:9f:8f:2b:57:ad:a1:53:c2:85:22: 69:9d:a0:3f:51:df:0b:41:91:0d:a5:e1:a8:aa:5c: 49:08:5d:bd:de:70:41:b1:0f:c9:63:6b:d3:7f:34: 74:02:2f:34:5a:78:75:1c:68:7a:81:67:8a:f3:da: 40:f0:60:63:f4:92:20:d7:03:a6:3d:a3:1e:67:c4: 84:1b:41:a5:c9:8c:e6:bd:ea:48:b6:05:16:08:b3: 37:12:5a:f7:61:3c:f7:38:6f:2e:97:e0:6f:56:38: 54:d3:28:b5:ad:14:6e:2e:4b:64:b5:27:65:b7:75: 25:09:b6:07:3d:95:56:02:0a:82:60:b2:73:45:e0: 33:26:51:74:9a:b9:d4:50:1c:f6:4d:5b:5b:52:52: 13:5a:a6:7f:a7:0e:e1:e8:41:54:67:98:8c:87:d5: c9:d3:6c:cb:d3:54:92:06:09:34:41:f7:81:6f:3f: 9e:c9:7c:75:55:b0:e7:c1:b3:77:e8:c3:c4:00:35: 95:40:70:10:4a:05:de:25:bb:9f:59:a5:64:bc:47: 60:bf:60:e3:76:8b:13:55:dd:e1:74:7a:b9:cf:24: a6:6a:7f:de:64:22:44:58:68:82:6a:10:f9:3d:e5: 3e:1b:b9:bd:fc:22:f4:60:04:89:bb:55:6d:28:55: fa:de:8e:8d:1b:21:14:d7:37:8b:34:7b:4d:f6:b2: b2:10:cf:33:b1:7d:1c:62:99:48:cb:2b:6c:76:96: 55:bf:19:0d:1d:1f:bb:65:aa:1b:8e:99:b5:c6:28: 90:e5:82:2d:78:50:20:9a:fd:79:2f:24:7f:f0:89: 29:69:f4:7d:cd:73:be:b3:ed:4e:c1:d1:ed:52:5e: 8f:f7:b8:d7:8d:87:ad:b2:d9:1b:51:12:ff:56:b3: e1:af:34:7d:5c:a4:78:88:10:9e:9d:03:c6:a5:aa: a2:24:51:f7:49:14:c5:b1:ee:59:43:95:df:ab:68: 28:30:3f Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE, pathlen:1 X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.6334.1.0 CPS: http://www.public-trust.com/CPS/OmniRoot.html X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:A6:0C:1D:9F:61:FF:07:17:B5:BF:38:46:DB:43:30:D5:8E:B0:52:06 DirName:/C=US/O=GTE Corporation/OU=GTE CyberTrust Solutions, Inc./CN=GTE CyberTrust Global Root serial:01:A5 X509v3 CRL Distribution Points: Full Name: URI:http://www.public-trust.com/cgi-bin/CRL/2018/cdp.crl X509v3 Subject Key Identifier: AB:F9:68:DF:CF:4A:37:D7:7B:45:8C:5F:72:DE:40:44:C3:65:BB:C2 Signature Algorithm: sha1WithRSAEncryption 8f:68:6b:a5:5b:07:ba:44:66:0e:1c:a8:5c:30:7b:33:e4:0a: 26:04:fc:ef:9e:1a:38:d6:2e:a1:1f:d0:99:47:c2:75:64:24: fd:9e:3b:28:76:b9:26:28:61:91:0c:6d:2c:f8:04:9f:7c:50: 01:d5:e3:69:af:ef:15:d2:45:9b:24:09:2a:66:05:4f:25:81: ca:5d:be:aa:c1:59:27:ae:33:8e:82:f7:df:74:b0:55:b3:8e: f8:e7:37:c8:6e:aa:56:44:f6:bd:53:81:23:96:3d:b4:fa:32: 8a:53:66:44:25:a2:25:c6:a6:3c:25:8c:f0:e0:28:06:22:b7: 26:41 SHA1 Fingerprint=A5:8E:A0:EC:F6:44:56:35:19:1D:68:5B:C7:A0:E4:1C:B0:4D:79:2E -----BEGIN CERTIFICATE----- MIIFRTCCBK6gAwIBAgIED////zANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJO TDESMBAGA1UEChMJRGlnaU5vdGFyMRswGQYDVQQDExJEaWdpTm90YXIgQ3liZXIg Q0ExIDAeBgkqhkiG9w0BCQEWEWluZm9AZGlnaW5vdGFyLm5sMB4XDTA2MTAwNDEw NTQxMloXDTExMTAwNDEwNTMxMlowYDELMAkGA1UEBhMCTkwxEjAQBgNVBAoTCURp Z2lOb3RhcjEbMBkGA1UEAxMSRGlnaU5vdGFyIEN5YmVyIENBMSAwHgYJKoZIhvcN AQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC AgoCggIBANLOFQotqF6EZ639vu9Gx8i5z3P89DS5+SxD52ATPXrjss87Z2yQrcC5 P4RS8DVC3HTcKDu9UrSnrHJFF8bwieu0qiXyXUte0dmHutZ9fPXOMp8QM8WxSrte kTHC0OlBwpFkfglBO9uLCDdqqspS3rU5HsCIA6U/i5kTYUO1m4Kz7iBvz6FEouov a0CfjytXraFTwoUiaZ2gP1HfC0GRDaXhqKpcSQhdvd5wQbEPyWNr0380dAIvNFp4 dRxoeoFnivPaQPBgY/SSINcDpj2jHmfEhBtBpcmM5r3qSLYFFgizNxJa92E89zhv Lpfgb1Y4VNMota0Ubi5LZLUnZbd1JQm2Bz2VVgIKgmCyc0XgMyZRdJq51FAc9k1b W1JSE1qmf6cO4ehBVGeYjIfVydNsy9NUkgYJNEH3gW8/nsl8dVWw58Gzd+jDxAA1 lUBwEEoF3iW7n1mlZLxHYL9g43aLE1Xd4XR6uc8kpmp/3mQiRFhogmoQ+T3lPhu5 vfwi9GAEibtVbShV+t6OjRshFNc3izR7TfayshDPM7F9HGKZSMsrbHaWVb8ZDR0f u2WqG46ZtcYokOWCLXhQIJr9eS8kf/CJKWn0fc1zvrPtTsHR7VJej/e4142HrbLZ G1ES/1az4a80fVykeIgQnp0DxqWqoiRR90kUxbHuWUOV36toKDA/AgMBAAGjggGG MIIBgjASBgNVHRMBAf8ECDAGAQH/AgEBMFMGA1UdIARMMEowSAYJKwYBBAGxPgEA MDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93d3cucHVibGljLXRydXN0LmNvbS9DUFMv T21uaVJvb3QuaHRtbDAOBgNVHQ8BAf8EBAMCAQYwgaAGA1UdIwSBmDCBlYAUpgwd n2H/Bxe1vzhG20Mw1Y6wUgaheaR3MHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9H VEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9u cywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3SCAgGl MEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly93d3cucHVibGljLXRydXN0LmNvbS9j Z2ktYmluL0NSTC8yMDE4L2NkcC5jcmwwHQYDVR0OBBYEFKv5aN/PSjfXe0WMX3Le QETDZbvCMA0GCSqGSIb3DQEBBQUAA4GBAI9oa6VbB7pEZg4cqFwwezPkCiYE/O+e GjjWLqEf0JlHwnVkJP2eOyh2uSYoYZEMbSz4BJ98UAHV42mv7xXSRZskCSpmBU8l gcpdvqrBWSeuM46C9990sFWzjvjnN8huqlZE9r1TgSOWPbT6MopTZkQloiXGpjwl jPDgKAYityZB -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 268435455 (0xfffffff) Signature Algorithm: sha1WithRSAEncryption Issuer: C=NL, O=DigiNotar, CN=DigiNotar Cyber CA Validity Not Before: Sep 27 10:53:53 2006 GMT Not After : Sep 20 09:44:07 2013 GMT Subject: C=NL, O=DigiNotar, CN=DigiNotar Cyber CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:d2:ce:15:0a:2d:a8:5e:84:67:ad:fd:be:ef:46: c7:c8:b9:cf:73:fc:f4:34:b9:f9:2c:43:e7:60:13: 3d:7a:e3:b2:cf:3b:67:6c:90:ad:c0:b9:3f:84:52: f0:35:42:dc:74:dc:28:3b:bd:52:b4:a7:ac:72:45: 17:c6:f0:89:eb:b4:aa:25:f2:5d:4b:5e:d1:d9:87: ba:d6:7d:7c:f5:ce:32:9f:10:33:c5:b1:4a:bb:5e: 91:31:c2:d0:e9:41:c2:91:64:7e:09:41:3b:db:8b: 08:37:6a:aa:ca:52:de:b5:39:1e:c0:88:03:a5:3f: 8b:99:13:61:43:b5:9b:82:b3:ee:20:6f:cf:a1:44: a2:ea:2f:6b:40:9f:8f:2b:57:ad:a1:53:c2:85:22: 69:9d:a0:3f:51:df:0b:41:91:0d:a5:e1:a8:aa:5c: 49:08:5d:bd:de:70:41:b1:0f:c9:63:6b:d3:7f:34: 74:02:2f:34:5a:78:75:1c:68:7a:81:67:8a:f3:da: 40:f0:60:63:f4:92:20:d7:03:a6:3d:a3:1e:67:c4: 84:1b:41:a5:c9:8c:e6:bd:ea:48:b6:05:16:08:b3: 37:12:5a:f7:61:3c:f7:38:6f:2e:97:e0:6f:56:38: 54:d3:28:b5:ad:14:6e:2e:4b:64:b5:27:65:b7:75: 25:09:b6:07:3d:95:56:02:0a:82:60:b2:73:45:e0: 33:26:51:74:9a:b9:d4:50:1c:f6:4d:5b:5b:52:52: 13:5a:a6:7f:a7:0e:e1:e8:41:54:67:98:8c:87:d5: c9:d3:6c:cb:d3:54:92:06:09:34:41:f7:81:6f:3f: 9e:c9:7c:75:55:b0:e7:c1:b3:77:e8:c3:c4:00:35: 95:40:70:10:4a:05:de:25:bb:9f:59:a5:64:bc:47: 60:bf:60:e3:76:8b:13:55:dd:e1:74:7a:b9:cf:24: a6:6a:7f:de:64:22:44:58:68:82:6a:10:f9:3d:e5: 3e:1b:b9:bd:fc:22:f4:60:04:89:bb:55:6d:28:55: fa:de:8e:8d:1b:21:14:d7:37:8b:34:7b:4d:f6:b2: b2:10:cf:33:b1:7d:1c:62:99:48:cb:2b:6c:76:96: 55:bf:19:0d:1d:1f:bb:65:aa:1b:8e:99:b5:c6:28: 90:e5:82:2d:78:50:20:9a:fd:79:2f:24:7f:f0:89: 29:69:f4:7d:cd:73:be:b3:ed:4e:c1:d1:ed:52:5e: 8f:f7:b8:d7:8d:87:ad:b2:d9:1b:51:12:ff:56:b3: e1:af:34:7d:5c:a4:78:88:10:9e:9d:03:c6:a5:aa: a2:24:51:f7:49:14:c5:b1:ee:59:43:95:df:ab:68: 28:30:3f Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE, pathlen:1 X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.6334.1.0 CPS: http://www.public-trust.com/CPS/OmniRoot.html X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:A6:0C:1D:9F:61:FF:07:17:B5:BF:38:46:DB:43:30:D5:8E:B0:52:06 DirName:/C=US/O=GTE Corporation/OU=GTE CyberTrust Solutions, Inc./CN=GTE CyberTrust Global Root serial:01:A5 X509v3 CRL Distribution Points: Full Name: URI:http://www.public-trust.com/cgi-bin/CRL/2018/cdp.crl X509v3 Subject Key Identifier: AB:F9:68:DF:CF:4A:37:D7:7B:45:8C:5F:72:DE:40:44:C3:65:BB:C2 Signature Algorithm: sha1WithRSAEncryption 09:ca:62:0f:8d:bb:4a:e0:d4:7a:35:2b:06:2d:d1:28:61:b6: ac:01:fb:83:49:bc:ae:d4:2f:2d:86:ae:19:83:a5:d6:1d:13: e2:17:be:fe:32:74:e9:7a:14:38:ca:94:5e:f7:29:01:69:71: 1b:91:1a:fd:a3:bb:aa:1d:ca:7b:e2:16:fd:a1:a3:0e:f3:0c: 5f:b2:e1:20:31:94:2b:5e:92:76:ed:fa:e9:b5:23:a6:bf:0a: 3b:03:a9:6f:52:60:54:cd:5f:e9:b7:2f:7c:a2:27:fd:41:83: 75:b6:0d:fb:78:26:f3:b1:45:e9:32:95:2a:1a:35:21:95:c5: a2:75 SHA1 Fingerprint=88:1E:45:05:0F:98:D9:59:FB:0A:35:F9:4C:0E:28:97:55:16:29:B3 -----BEGIN CERTIFICATE----- MIIFATCCBGqgAwIBAgIED////zANBgkqhkiG9w0BAQUFADA+MQswCQYDVQQGEwJO TDESMBAGA1UEChMJRGlnaU5vdGFyMRswGQYDVQQDExJEaWdpTm90YXIgQ3liZXIg Q0EwHhcNMDYwOTI3MTA1MzUzWhcNMTMwOTIwMDk0NDA3WjA+MQswCQYDVQQGEwJO TDESMBAGA1UEChMJRGlnaU5vdGFyMRswGQYDVQQDExJEaWdpTm90YXIgQ3liZXIg Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDSzhUKLahehGet/b7v RsfIuc9z/PQ0ufksQ+dgEz1647LPO2dskK3AuT+EUvA1Qtx03Cg7vVK0p6xyRRfG 8InrtKol8l1LXtHZh7rWfXz1zjKfEDPFsUq7XpExwtDpQcKRZH4JQTvbiwg3aqrK Ut61OR7AiAOlP4uZE2FDtZuCs+4gb8+hRKLqL2tAn48rV62hU8KFImmdoD9R3wtB kQ2l4aiqXEkIXb3ecEGxD8lja9N/NHQCLzRaeHUcaHqBZ4rz2kDwYGP0kiDXA6Y9 ox5nxIQbQaXJjOa96ki2BRYIszcSWvdhPPc4by6X4G9WOFTTKLWtFG4uS2S1J2W3 dSUJtgc9lVYCCoJgsnNF4DMmUXSaudRQHPZNW1tSUhNapn+nDuHoQVRnmIyH1cnT bMvTVJIGCTRB94FvP57JfHVVsOfBs3fow8QANZVAcBBKBd4lu59ZpWS8R2C/YON2 ixNV3eF0ernPJKZqf95kIkRYaIJqEPk95T4bub38IvRgBIm7VW0oVfrejo0bIRTX N4s0e032srIQzzOxfRximUjLK2x2llW/GQ0dH7tlqhuOmbXGKJDlgi14UCCa/Xkv JH/wiSlp9H3Nc76z7U7B0e1SXo/3uNeNh62y2RtREv9Ws+GvNH1cpHiIEJ6dA8al qqIkUfdJFMWx7llDld+raCgwPwIDAQABo4IBhjCCAYIwEgYDVR0TAQH/BAgwBgEB /wIBATBTBgNVHSAETDBKMEgGCSsGAQQBsT4BADA7MDkGCCsGAQUFBwIBFi1odHRw Oi8vd3d3LnB1YmxpYy10cnVzdC5jb20vQ1BTL09tbmlSb290Lmh0bWwwDgYDVR0P AQH/BAQDAgEGMIGgBgNVHSMEgZgwgZWAFKYMHZ9h/wcXtb84RttDMNWOsFIGoXmk dzB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYD VQQLEx5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdU RSBDeWJlclRydXN0IEdsb2JhbCBSb290ggIBpTBFBgNVHR8EPjA8MDqgOKA2hjRo dHRwOi8vd3d3LnB1YmxpYy10cnVzdC5jb20vY2dpLWJpbi9DUkwvMjAxOC9jZHAu Y3JsMB0GA1UdDgQWBBSr+Wjfz0o313tFjF9y3kBEw2W7wjANBgkqhkiG9w0BAQUF AAOBgQAJymIPjbtK4NR6NSsGLdEoYbasAfuDSbyu1C8thq4Zg6XWHRPiF77+MnTp ehQ4ypRe9ykBaXEbkRr9o7uqHcp74hb9oaMO8wxfsuEgMZQrXpJ27frptSOmvwo7 A6lvUmBUzV/pty98oif9QYN1tg37eCbzsUXpMpUqGjUhlcWidQ== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 268435455 (0xfffffff) Signature Algorithm: sha1WithRSAEncryption Issuer: C=NL, O=DigiNotar B.V., CN=DigiNotar PKIoverheid CA Overheid en Bedrijven Validity Not Before: Jul 5 08:42:08 2007 GMT Not After : Jul 27 08:39:47 2015 GMT Subject: C=NL, O=DigiNotar B.V., CN=DigiNotar PKIoverheid CA Overheid en Bedrijven Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:dc:bd:d2:a7:4e:6a:0a:bb:3b:a2:85:e1:7f:00: ad:be:b4:30:68:98:07:cd:a0:7a:c4:94:cf:71:f9: 8a:37:e4:53:eb:57:76:cc:8b:e6:6c:fe:ee:87:55: c8:3e:bb:04:39:00:a7:80:78:ac:5b:4f:7e:f4:bd: b8:54:b8:71:3b:07:31:49:39:93:54:7c:20:3b:79: 2b:8f:bb:61:90:7d:b1:ac:e6:1f:90:2e:9d:45:01: a9:64:2d:4d:c3:2f:b9:e7:50:d5:4e:2a:5c:ab:76: 76:37:46:d7:79:ec:42:99:f7:a2:ec:a4:89:70:dc: 38:2b:87:a6:aa:24:e6:9d:92:24:1b:be:f6:fd:d4: 2f:19:17:7a:e6:32:07:94:54:05:53:43:e9:6c:bc: af:47:cb:bc:cb:fd:bd:3b:44:12:81:f1:6b:4b:bb: ed:b4:cf:ab:25:4f:18:d2:cc:02:fc:a3:4f:b5:42: 33:cb:59:cd:09:dc:d3:50:fd:a0:76:8c:ac:7e:66: 8a:42:f6:ad:1c:92:f3:b6:fb:14:46:eb:4d:d7:2f: 30:e0:6d:ee:5b:36:be:44:74:b7:20:05:57:85:4d: e8:00:19:a2:f6:0c:e6:ae:a1:c0:42:df:a7:ac:82: 5d:c7:68:b7:18:e6:89:4b:9a:6b:fa:ce:79:f9:f3: 2c:a7 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Certificate Policies: Policy: X509v3 Any Policy CPS: http://www.diginotar.nl/cps/pkioverheid X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:0B:86:D6:0F:77:A3:68:B1:FB:64:09:C3:88:6E:5C:04:1C:57:E9:3D DirName:/C=NL/O=Staat der Nederlanden/CN=Staat der Nederlanden Root CA serial:98:9A:79 X509v3 CRL Distribution Points: Full Name: URI:http://crl.pkioverheid.nl/DomOvLatestCRL.crl X509v3 Subject Key Identifier: 4C:08:C9:8D:76:F1:98:C7:3E:DF:3C:D7:2F:75:0D:B1:76:79:97:CC Signature Algorithm: sha1WithRSAEncryption 0c:94:87:1a:bf:4d:e3:85:e2:ee:d7:d8:63:79:0e:50:df:c6: 84:5b:d2:bb:d9:f5:31:0a:1a:35:97:74:df:14:fa:2a:0f:3e: ed:a0:e3:08:f6:d5:4e:5b:af:a6:ae:25:e2:45:6b:22:0f:b7: 54:28:7e:92:de:8d:14:6c:d1:1c:e5:6e:74:04:9c:b7:ef:34: 44:45:df:c9:83:1d:19:1f:c0:29:69:df:89:d5:3f:c2:b0:53: 6d:e5:4e:17:e4:73:61:23:13:26:71:43:fd:4c:59:cb:c3:df: 22:aa:21:2b:d9:bf:95:11:1a:8a:a4:e2:ab:a7:5d:4b:6f:29: f5:52:d1:e4:d2:15:b1:8b:fe:f0:03:cf:a7:7d:e9:99:87:38: b3:0d:73:14:e4:72:2c:e1:ce:f5:ad:06:48:64:fa:d3:29:b9: a2:d8:bb:f4:d5:0b:a5:40:44:43:8e:a0:bf:ce:5a:a5:52:4c: 64:d3:17:31:61:cc:e8:a4:8a:e8:e4:88:fb:e9:e5:2f:06:33: 33:9b:94:66:66:b1:ab:50:3a:a1:09:81:74:53:5a:27:b9:a6: d2:25:cf:d3:c3:a7:ff:96:d0:2f:ea:e0:1e:8d:52:e9:18:1c: 20:0a:47:a0:96:56:0e:40:90:51:44:ac:1a:fd:f1:ee:85:1f: f7:42:5a:65 SHA1 Fingerprint=A7:A8:C9:AC:F4:5F:90:92:76:86:B8:C0:A2:0E:93:58:7D:DE:30:E4 -----BEGIN CERTIFICATE----- MIIEjjCCA3agAwIBAgIED////zANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJO TDEXMBUGA1UEChMORGlnaU5vdGFyIEIuVi4xNzA1BgNVBAMTLkRpZ2lOb3RhciBQ S0lvdmVyaGVpZCBDQSBPdmVyaGVpZCBlbiBCZWRyaWp2ZW4wHhcNMDcwNzA1MDg0 MjA4WhcNMTUwNzI3MDgzOTQ3WjBfMQswCQYDVQQGEwJOTDEXMBUGA1UEChMORGln aU5vdGFyIEIuVi4xNzA1BgNVBAMTLkRpZ2lOb3RhciBQS0lvdmVyaGVpZCBDQSBP dmVyaGVpZCBlbiBCZWRyaWp2ZW4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQDcvdKnTmoKuzuiheF/AK2+tDBomAfNoHrElM9x+Yo35FPrV3bMi+Zs/u6H Vcg+uwQ5AKeAeKxbT370vbhUuHE7BzFJOZNUfCA7eSuPu2GQfbGs5h+QLp1FAalk LU3DL7nnUNVOKlyrdnY3Rtd57EKZ96LspIlw3Dgrh6aqJOadkiQbvvb91C8ZF3rm MgeUVAVTQ+lsvK9Hy7zL/b07RBKB8WtLu+20z6slTxjSzAL8o0+1QjPLWc0J3NNQ /aB2jKx+ZopC9q0ckvO2+xRG603XLzDgbe5bNr5EdLcgBVeFTegAGaL2DOauocBC 36esgl3HaLcY5olLmmv6znn58yynAgMBAAGjggFQMIIBTDBIBgNVHSAEQTA/MD0G BFUdIAAwNTAzBggrBgEFBQcCARYnaHR0cDovL3d3dy5kaWdpbm90YXIubmwvY3Bz L3BraW92ZXJoZWlkMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMIGA BgNVHSMEeTB3gBQLhtYPd6NosftkCcOIblwEHFfpPaFZpFcwVTELMAkGA1UEBhMC TkwxHjAcBgNVBAoTFVN0YWF0IGRlciBOZWRlcmxhbmRlbjEmMCQGA1UEAxMdU3Rh YXQgZGVyIE5lZGVybGFuZGVuIFJvb3QgQ0GCBACYmnkwPQYDVR0fBDYwNDAyoDCg LoYsaHR0cDovL2NybC5wa2lvdmVyaGVpZC5ubC9Eb21PdkxhdGVzdENSTC5jcmww HQYDVR0OBBYEFEwIyY128ZjHPt881y91DbF2eZfMMA0GCSqGSIb3DQEBBQUAA4IB AQAMlIcav03jheLu19hjeQ5Q38aEW9K72fUxCho1l3TfFPoqDz7toOMI9tVOW6+m riXiRWsiD7dUKH6S3o0UbNEc5W50BJy37zRERd/Jgx0ZH8Apad+J1T/CsFNt5U4X 5HNhIxMmcUP9TFnLw98iqiEr2b+VERqKpOKrp11Lbyn1UtHk0hWxi/7wA8+nfemZ hzizDXMU5HIs4c71rQZIZPrTKbmi2Lv01QulQERDjqC/zlqlUkxk0xcxYczopIro 5Ij76eUvBjMzm5RmZrGrUDqhCYF0U1onuabSJc/Tw6f/ltAv6uAejVLpGBwgCkeg llYOQJBRRKwa/fHuhR/3Qlpl -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 268435455 (0xfffffff) Signature Algorithm: sha256WithRSAEncryption Issuer: C=NL, O=DigiNotar B.V., CN=DigiNotar PKIoverheid CA Organisatie - G2 Validity Not Before: May 12 08:51:39 2010 GMT Not After : Mar 23 09:50:05 2020 GMT Subject: C=NL, O=DigiNotar B.V., CN=DigiNotar PKIoverheid CA Organisatie - G2 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:b1:13:19:0f:27:e6:6c:d4:55:86:4b:d0:ec:89: 8a:45:91:78:ac:47:bd:47:2b:e4:fc:45:eb:4f:b4: 26:73:5b:37:d3:c3:7f:f6:e3:de:d7:a3:f8:2d:68: c5:08:3e:4b:94:d6:e4:87:25:36:6b:84:b5:18:74: f3:28:58:73:2f:9b:6a:cf:bc:04:1e:f6:de:dd:af: fc:4b:aa:f5:db:66:62:25:01:25:82:de:f2:97:5a: 10:6e:dd:5d:a9:22:b1:04:a9:23:73:3a:f8:71:ad: 1d:cf:84:44:eb:47:d1:af:6d:c8:7c:28:ab:c7:f2: 37:7a:74:5f:5f:c5:02:14:8a:a3:5a:e3:1b:6c:01: e3:5d:8e:d9:68:d6:f4:09:1b:32:dc:91:b5:2c:f5: 20:eb:8c:03:6d:26:49:b8:93:c4:85:5d:d8:d2:9b: af:56:6a:cc:05:33:cc:a0:42:9e:34:55:44:9c:6b: a0:d4:12:d0:2b:54:cd:b7:89:0d:e5:f6:eb:e8:fb: 85:01:33:4f:7a:6b:f1:9d:72:33:96:0e:f7:b2:84: a5:a5:27:c4:27:f1:51:73:29:77:ba:67:6e:fe:4c: dc:b4:e2:a1:a1:81:2f:39:49:8d:43:38:13:ce:d0: a5:5c:c2:87:3a:00:67:65:42:23:f1:36:59:0a:1d: a3:51:c8:bc:a3:94:2a:31:df:e3:3c:f2:9d:1a:3c: 04:b0:ef:b1:0a:30:13:73:b6:d7:f3:a3:4c:01:75: 14:85:78:c0:d7:8a:39:58:85:50:fa:2e:e6:c5:be: cf:8b:3f:af:8f:36:d4:25:09:2d:d2:0f:ac:72:93: f2:bf:8b:d4:50:b3:f9:15:50:9b:99:f5:14:d9:fb: 8b:91:a3:32:26:26:a0:f8:df:3b:60:81:86:83:79: 5b:2b:eb:13:3d:29:3a:c1:6d:dd:bd:9e:8e:87:d6: 4a:ae:34:97:05:ee:14:a6:f6:dc:38:7e:4a:e9:24: 54:07:3d:97:68:37:46:6b:0d:c7:a8:21:af:13:54: e4:09:6a:f1:4d:46:0a:c9:5d:fb:9b:4f:bd:de:fb: b7:54:cb:b8:38:9c:a7:39:fb:6a:2d:c0:7b:8d:ab: a5:a7:57:ec:4a:92:8a:33:c5:e1:20:5c:73:d8:90: 92:2b:80:d5:0f:86:18:69:7c:39:4f:84:86:bc:f7: 4c:5b:f3:d5:b4:ca:a0:c2:f0:37:22:ca:79:52:1f: 53:e6:aa:f3:90:b0:3b:dd:f2:28:fd:ac:eb:c5:06: 24:a0:c9:d4:2f:0f:58:fd:b5:9e:ec:0f:cf:b2:59: d0:a2:04:7a:38:6a:ae:72:fb:bd:f0:25:62:94:09: a7:05:0b Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Certificate Policies: Policy: X509v3 Any Policy CPS: http://www.diginotar.nl/cps/pkioverheid X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:39:10:8B:49:92:5C:DB:61:12:20:CD:49:9D:1A:8E:DA:9C:67:40:B9 DirName:/C=NL/O=Staat der Nederlanden/CN=Staat der Nederlanden Root CA - G2 serial:98:96:F4 X509v3 CRL Distribution Points: Full Name: URI:http://crl.pkioverheid.nl/DomOrganisatieLatestCRL-G2.crl X509v3 Subject Key Identifier: BC:5D:94:3B:D9:AB:7B:03:25:73:61:C2:DB:2D:EE:FC:AB:8F:65:A1 Signature Algorithm: sha256WithRSAEncryption 8f:fc:2d:4c:b7:d9:2d:d5:1f:bd:ef:cb:f4:b7:68:17:75:9d: 4e:d5:f7:dd:9c:f1:2a:26:ed:9f:a2:b6:1c:03:d5:53:b3:ec: 08:cf:34:e2:e3:c3:f4:b5:16:2f:c8:c3:be:d7:d3:73:ab:00: 36:f9:1a:4a:7e:d6:63:e9:5e:46:ba:a5:b6:8e:15:b7:a3:2a: d8:43:1d:ef:5d:c8:1f:81:85:b3:8b:f7:ff:3c:f4:d9:f4:46: 08:3f:9c:bc:1d:a0:d9:a8:4c:cd:25:52:4e:0a:b1:20:f7:1f: e9:43:d9:54:46:81:13:9a:c0:5e:74:6c:2a:98:32:ea:fc:77: bb:0d:a5:a2:31:98:22:7e:7c:7c:e7:da:a4:ad:ec:b7:2e:1a: 19:71:f8:48:50:da:43:8f:2c:84:dd:c1:40:27:e3:b5:f0:15: 4e:96:d4:f8:5c:e3:86:29:46:2b:d7:3b:07:eb:38:7f:c8:86: 57:97:d3:ef:2a:33:c4:17:50:d5:64:69:6b:2b:6b:45:5e:5d: 2f:17:ca:5a:4e:cf:c3:d7:39:3c:f5:3b:9f:46:b9:9b:e7:0e: 49:97:9d:d6:d5:e3:1b:0f:ea:8f:01:4e:9a:13:94:59:0a:02: 07:48:4b:1a:60:ab:7f:4f:ed:0b:d8:55:0d:68:6f:55:9c:69: 65:15:42:ec:c0:dc:dd:6c:ac:c3:16:ce:0b:1d:56:9b:a4:c4: c4:d2:2e:e0:0f:e2:44:27:2b:50:69:a4:dc:62:e8:8a:21:29: 42:6c:cc:00:3a:96:76:9b:ef:40:c0:a4:5e:77:84:32:6c:26: 2a:39:66:ae:5d:e3:b9:b9:b2:2c:68:1f:1e:9a:90:03:39:f0: aa:b3:a4:cc:49:8b:18:34:e9:37:c9:7b:29:c7:84:7c:6f:44: 15:2f:ec:61:59:04:c9:45:cb:a2:d6:52:a2:7c:7f:29:92:d6: 4a:c5:8b:42:a8:d4:fe:ea:d8:c7:87:23:18:e4:9d:7a:7d:73: 40:52:98:a0:ae:6e:e3:05:3f:05:0f:e0:a5:c6:6d:4d:ed:83: 37:88:9c:c7:f3:dc:42:9a:6a:b6:d7:21:49:36:77:f2:ef:18: 4f:c5:70:d9:9e:e9:de:b7:2b:8b:f4:bc:7e:28:df:0d:40:c9: 85:5c:ae:9d:c5:31:ff:d0:5c:0e:b5:a8:7e:f0:e9:2f:ba:af: 88:ae:e5:b5:d1:58:a5:af:9c:71:a7:29:01:90:83:69:37:82: 05:ba:fc:09:c1:08:6e:8c:78:3b:c3:33:02:80:3f:44:85:08: 1d:df:55:56:08:ad:2c:85:2d:5d:b1:03:e1:ae:aa:74:c5:a4: f3:4e:ba:37:98:7b:82:b9 SHA1 Fingerprint=D5:F2:57:A9:BF:2D:D0:3F:8B:46:57:F9:2B:C9:A4:C6:92:E1:42:42 -----BEGIN CERTIFICATE----- MIIGlTCCBH2gAwIBAgIED////zANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO TDEXMBUGA1UECgwORGlnaU5vdGFyIEIuVi4xMjAwBgNVBAMMKURpZ2lOb3RhciBQ S0lvdmVyaGVpZCBDQSBPcmdhbmlzYXRpZSAtIEcyMB4XDTEwMDUxMjA4NTEzOVoX DTIwMDMyMzA5NTAwNVowWjELMAkGA1UEBhMCTkwxFzAVBgNVBAoMDkRpZ2lOb3Rh ciBCLlYuMTIwMAYDVQQDDClEaWdpTm90YXIgUEtJb3ZlcmhlaWQgQ0EgT3JnYW5p c2F0aWUgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALETGQ8n 5mzUVYZL0OyJikWReKxHvUcr5PxF60+0JnNbN9PDf/bj3tej+C1oxQg+S5TW5Icl NmuEtRh08yhYcy+bas+8BB723t2v/Euq9dtmYiUBJYLe8pdaEG7dXakisQSpI3M6 +HGtHc+EROtH0a9tyHwoq8fyN3p0X1/FAhSKo1rjG2wB412O2WjW9AkbMtyRtSz1 IOuMA20mSbiTxIVd2NKbr1ZqzAUzzKBCnjRVRJxroNQS0CtUzbeJDeX26+j7hQEz T3pr8Z1yM5YO97KEpaUnxCfxUXMpd7pnbv5M3LTioaGBLzlJjUM4E87QpVzChzoA Z2VCI/E2WQodo1HIvKOUKjHf4zzynRo8BLDvsQowE3O21/OjTAF1FIV4wNeKOViF UPou5sW+z4s/r4821CUJLdIPrHKT8r+L1FCz+RVQm5n1FNn7i5GjMiYmoPjfO2CB hoN5WyvrEz0pOsFt3b2ejofWSq40lwXuFKb23Dh+SukkVAc9l2g3RmsNx6ghrxNU 5Alq8U1GCsld+5tPvd77t1TLuDicpzn7ai3Ae42rpadX7EqSijPF4SBcc9iQkiuA 1Q+GGGl8OU+Ehrz3TFvz1bTKoMLwNyLKeVIfU+aq85CwO93yKP2s68UGJKDJ1C8P WP21nuwPz7JZ0KIEejhqrnL7vfAlYpQJpwULAgMBAAGjggFhMIIBXTBIBgNVHSAE QTA/MD0GBFUdIAAwNTAzBggrBgEFBQcCARYnaHR0cDovL3d3dy5kaWdpbm90YXIu bmwvY3BzL3BraW92ZXJoZWlkMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD AgEGMIGFBgNVHSMEfjB8gBQ5EItJklzbYRIgzUmdGo7anGdAuaFepFwwWjELMAkG A1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UE AwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJvb3QgQ0EgLSBHMoIEAJiW9DBJBgNV HR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLnBraW92ZXJoZWlkLm5sL0RvbU9yZ2Fu aXNhdGllTGF0ZXN0Q1JMLUcyLmNybDAdBgNVHQ4EFgQUvF2UO9mrewMlc2HC2y3u /KuPZaEwDQYJKoZIhvcNAQELBQADggIBAI/8LUy32S3VH73vy/S3aBd1nU7V992c 8Som7Z+ithwD1VOz7AjPNOLjw/S1Fi/Iw77X03OrADb5Gkp+1mPpXka6pbaOFbej KthDHe9dyB+BhbOL9/889Nn0Rgg/nLwdoNmoTM0lUk4KsSD3H+lD2VRGgROawF50 bCqYMur8d7sNpaIxmCJ+fHzn2qSt7LcuGhlx+EhQ2kOPLITdwUAn47XwFU6W1Phc 44YpRivXOwfrOH/IhleX0+8qM8QXUNVkaWsra0VeXS8XylpOz8PXOTz1O59GuZvn DkmXndbV4xsP6o8BTpoTlFkKAgdISxpgq39P7QvYVQ1ob1WcaWUVQuzA3N1srMMW zgsdVpukxMTSLuAP4kQnK1BppNxi6IohKUJszAA6lnab70DApF53hDJsJio5Zq5d 47m5sixoHx6akAM58KqzpMxJixg06TfJeynHhHxvRBUv7GFZBMlFy6LWUqJ8fymS 1krFi0Ko1P7q2MeHIxjknXp9c0BSmKCubuMFPwUP4KXGbU3tgzeInMfz3EKaarbX IUk2d/LvGE/FcNme6d63K4v0vH4o3w1AyYVcrp3FMf/QXA61qH7w6S+6r4iu5bXR WKWvnHGnKQGQg2k3ggW6/AnBCG6MeDvDMwKAP0SFCB3fVVYIrSyFLV2xA+GuqnTF pPNOujeYe4K5 -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 8796093022207 (0x7ffffffffff) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Global Root Validity Not Before: Jul 17 15:17:49 2007 GMT Not After : Jul 17 15:16:55 2012 GMT Subject: C=MY, O=Digicert Sdn. Bhd., OU=457608-K, CN=Digisign Server ID (Enrich) Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:ad:a8:64:4b:4d:87:c7:84:59:b9:fb:90:46:a0: a6:89:c0:f1:fe:d5:da:54:82:37:0d:99:2b:45:26: 0a:e8:56:b0:7f:ca:a8:f4:8e:47:84:01:82:29:e3: b3:6a:b5:91:f3:fb:95:85:bc:72:a8:64:e8:0a:40: 9c:c5:f4:71:ae:7b:7b:6a:07:ea:90:14:4f:8d:89: af:94:ab:b2:06:d4:02:6a:7b:98:1f:59:b9:3a:cd: 54:fa:20:df:b2:2a:0a:e9:b8:dd:69:90:c0:29:d3: 4e:d0:97:ed:66:cc:c5:19:49:06:7f:fa:5e:2c:7c: 7b:85:1b:32:42:df:7b:95:25 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE, pathlen:0 X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.6334.1.0 CPS: http://cybertrust.omniroot.com/repository.cfm Policy: 2.16.458.1.1 X509v3 Key Usage: critical Digital Signature, Non Repudiation, Key Encipherment, Certificate Sign, CRL Sign X509v3 Authority Key Identifier: DirName:/C=US/O=GTE Corporation/OU=GTE CyberTrust Solutions, Inc./CN=GTE CyberTrust Global Root serial:01:A5 X509v3 CRL Distribution Points: Full Name: URI:http://www.public-trust.com/cgi-bin/CRL/2018/cdp.crl X509v3 Subject Key Identifier: C6:16:93:4E:16:17:EC:16:AE:8C:94:76:F3:86:6D:C5:74:6E:84:77 Signature Algorithm: sha1WithRSAEncryption 76:00:7b:a6:78:2b:66:1d:8e:5e:36:c6:a4:8e:05:f2:23:92: 7c:93:67:d3:f4:c0:0a:7d:8b:2d:d9:ea:d5:6f:1a:f3:e1:4a: 29:5a:22:84:4d:50:2f:4b:0c:f2:ff:85:c2:7b:55:d4:44:82: be:6d:ac:67:8e:bc:b4:1f:92:9c:51:80:1a:14:f6:6e:ab:61: 88:0b:ad:1c:7f:f7:4b:50:51:d6:65:1b:a6:47:71:15:5e:b0: 71:f3:35:14:f2:37:bd:63:c8:d5:f0:93:5a:34:5f:d8:3d:e8: 5d:f7:c5:1e:c0:e5:cf:1f:86:24:a9:3c:07:66:cd:c1:d2:36: 63:59 SHA1 Fingerprint=55:50:AF:EC:BF:E8:C3:AD:C4:0B:E3:AD:0C:A7:E4:15:8C:39:59:4F -----BEGIN CERTIFICATE----- MIIDzTCCAzagAwIBAgIGB///////MA0GCSqGSIb3DQEBBQUAMHUxCzAJBgNVBAYT AlVTMRgwFgYDVQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJl clRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3Qg R2xvYmFsIFJvb3QwHhcNMDcwNzE3MTUxNzQ5WhcNMTIwNzE3MTUxNjU1WjBjMQsw CQYDVQQGEwJNWTEbMBkGA1UEChMSRGlnaWNlcnQgU2RuLiBCaGQuMREwDwYDVQQL Ewg0NTc2MDgtSzEkMCIGA1UEAxMbRGlnaXNpZ24gU2VydmVyIElEIChFbnJpY2gp MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtqGRLTYfHhFm5+5BGoKaJwPH+ 1dpUgjcNmStFJgroVrB/yqj0jkeEAYIp47NqtZHz+5WFvHKoZOgKQJzF9HGue3tq B+qQFE+Nia+Uq7IG1AJqe5gfWbk6zVT6IN+yKgrpuN1pkMAp007Ql+1mzMUZSQZ/ +l4sfHuFGzJC33uVJQIDAQABo4IBeDCCAXQwEgYDVR0TAQH/BAgwBgEB/wIBADBc BgNVHSAEVTBTMEgGCSsGAQQBsT4BADA7MDkGCCsGAQUFBwIBFi1odHRwOi8vY3li ZXJ0cnVzdC5vbW5pcm9vdC5jb20vcmVwb3NpdG9yeS5jZm0wBwYFYINKAQEwDgYD VR0PAQH/BAQDAgHmMIGJBgNVHSMEgYEwf6F5pHcwdTELMAkGA1UEBhMCVVMxGDAW BgNVBAoTD0dURSBDb3Jwb3JhdGlvbjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3Qg U29sdXRpb25zLCBJbmMuMSMwIQYDVQQDExpHVEUgQ3liZXJUcnVzdCBHbG9iYWwg Um9vdIICAaUwRQYDVR0fBD4wPDA6oDigNoY0aHR0cDovL3d3dy5wdWJsaWMtdHJ1 c3QuY29tL2NnaS1iaW4vQ1JMLzIwMTgvY2RwLmNybDAdBgNVHQ4EFgQUxhaTThYX 7BaujJR284ZtxXRuhHcwDQYJKoZIhvcNAQEFBQADgYEAdgB7pngrZh2OXjbGpI4F 8iOSfJNn0/TACn2LLdnq1W8a8+FKKVoihE1QL0sM8v+FwntV1ESCvm2sZ468tB+S nFGAGhT2bqthiAutHH/3S1BR1mUbpkdxFV6wcfM1FPI3vWPI1fCTWjRf2D3oXffF HsDlzx+GJKk8B2bNwdI2Y1k= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 8796093022207 (0x7ffffffffff) Signature Algorithm: sha1WithRSAEncryption Issuer: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048) Validity Not Before: Jul 16 17:23:38 2010 GMT Not After : Jul 16 17:53:38 2015 GMT Subject: C=MY, O=Digicert Sdn. Bhd., OU=457608-K, CN=Digisign Server ID - (Enrich) Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:c5:89:e4:f4:0d:06:40:92:59:c7:1a:b3:35:d1: 0e:4c:2a:33:f9:f8:af:ca:9e:7f:ee:b9:a7:6d:60: f4:54:e8:6f:d5:9b:f3:1b:63:31:04:68:72:d1:34: 16:8c:b4:17:2c:97:de:73:c5:d8:90:15:a0:1a:2b: f5:cb:b3:48:86:44:f0:1d:88:4c:ce:41:42:1a:ef: f5:0c:de:fe:40:da:39:20:f7:06:55:3a:6a:9d:46: c1:d2:6f:a5:b2:c8:57:3e:29:a3:9c:e0:e9:85:77: 66:e8:98:a7:24:7e:be:c0:59:20:e5:44:6f:b6:57: d8:be:ce:c2:65:77:58:c6:61:41:d1:74:04:c8:7f: 49:42:c5:72:a9:72:16:ee:8c:dd:12:5d:b4:4a:d4: d1:af:50:b7:d8:aa:75:76:68:ad:3e:5d:aa:30:6d: 61:a8:ab:10:5b:3e:13:bf:33:e0:af:44:9d:38:22: 5b:ef:4c:2f:a6:71:26:15:26:ca:28:8c:d9:fa:8e: 8e:a9:a2:14:35:e2:9b:24:88:b4:f4:7f:85:9d:83: 4f:07:a1:b6:14:90:36:c4:34:1c:8d:26:61:6d:13: 6f:78:be:e8:8f:27:c7:4b:84:96:a3:86:68:0c:23: be:0b:ec:8c:94:00:a9:04:8a:13:90:f7:df:85:6c: 0c:b1 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE, pathlen:0 X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication, E-mail Protection Authority Information Access: OCSP - URI:http://ocsp.entrust.net X509v3 Certificate Policies: Policy: 2.16.458.1.1 CPS: http://www.digicert.com.my/cps.htm X509v3 CRL Distribution Points: Full Name: URI:http://crl.entrust.net/2048ca.crl X509v3 Subject Key Identifier: 4C:4E:CC:25:28:03:29:81 X509v3 Authority Key Identifier: keyid:55:E4:81:D1:11:80:BE:D8:89:B9:08:A3:31:F9:A1:24:09:16:B9:70 Signature Algorithm: sha1WithRSAEncryption 97:4c:ef:4a:3a:49:ac:72:fc:30:20:6b:b4:29:5b:a7:c5:95: 04:90:f9:32:d5:c2:85:6a:de:03:a1:37:f9:89:00:b0:5a:ac: 55:7e:db:43:35:ff:c9:01:f8:51:be:cc:26:ca:c8:6a:a4:c4: 54:3e:26:1e:e7:0c:a3:cd:97:67:94:dd:a6:42:eb:5c:cd:8f: 39:79:6b:33:79:21:06:79:fa:82:44:15:99:cc:c1:b7:39:d3: 46:62:7c:b2:70:eb:6f:ce:20:aa:3e:19:b7:e9:74:82:9c:b4: a5:4b:4d:61:00:37:e4:87:d2:f2:14:3a:64:7c:b8:a9:7b:61: e0:93:22:e7:d5:9f:3e:47:e6:36:76:a0:53:d8:00:03:3a:0f: b5:33:fe:96:ca:d3:d2:82:3a:2e:dd:d7:48:e1:e4:a7:69:cc: 1c:e9:99:4a:e7:ca:70:45:d7:0b:07:0e:9a:75:1b:d0:2f:92: 6f:f6:a4:07:c3:bd:1c:4b:a6:84:b6:7d:a8:9a:a9:d2:a7:29: f1:0b:57:69:1e:97:57:26:ec:2b:43:ac:d4:45:83:05:00:e9: e3:f0:46:40:07:fa:ea:b1:51:73:93:1c:a5:dd:53:11:37:c8: 2a:a7:15:27:1d:b4:aa:cc:7f:aa:31:30:fc:b8:45:9f:48:09: ed:10:e2:c5 SHA1 Fingerprint=6B:3C:3B:80:AD:CA:A6:BA:8A:9F:54:A6:7A:ED:12:69:05:6D:31:26 -----BEGIN CERTIFICATE----- MIIE0DCCA7igAwIBAgIGB///////MA0GCSqGSIb3DQEBBQUAMIG0MRQwEgYDVQQK EwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4 IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5 OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQgQ2Vy dGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMB4XDTEwMDcxNjE3MjMzOFoXDTE1 MDcxNjE3NTMzOFowZTELMAkGA1UEBhMCTVkxGzAZBgNVBAoTEkRpZ2ljZXJ0IFNk bi4gQmhkLjERMA8GA1UECxMINDU3NjA4LUsxJjAkBgNVBAMTHURpZ2lzaWduIFNl cnZlciBJRCAtIChFbnJpY2gpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEAxYnk9A0GQJJZxxqzNdEOTCoz+fivyp5/7rmnbWD0VOhv1ZvzG2MxBGhy0TQW jLQXLJfec8XYkBWgGiv1y7NIhkTwHYhMzkFCGu/1DN7+QNo5IPcGVTpqnUbB0m+l sshXPimjnODphXdm6JinJH6+wFkg5URvtlfYvs7CZXdYxmFB0XQEyH9JQsVyqXIW 7ozdEl20StTRr1C32Kp1dmitPl2qMG1hqKsQWz4TvzPgr0SdOCJb70wvpnEmFSbK KIzZ+o6OqaIUNeKbJIi09H+FnYNPB6G2FJA2xDQcjSZhbRNveL7ojyfHS4SWo4Zo DCO+C+yMlACpBIoTkPffhWwMsQIDAQABo4IBNDCCATAwDgYDVR0PAQH/BAQDAgEG MBIGA1UdEwEB/wQIMAYBAf8CAQAwJwYDVR0lBCAwHgYIKwYBBQUHAwEGCCsGAQUF BwMCBggrBgEFBQcDBDAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 Ly9vY3NwLmVudHJ1c3QubmV0MEQGA1UdIAQ9MDswOQYFYINKAQEwMDAuBggrBgEF BQcCARYiaHR0cDovL3d3dy5kaWdpY2VydC5jb20ubXkvY3BzLmh0bTAyBgNVHR8E KzApMCegJaAjhiFodHRwOi8vY3JsLmVudHJ1c3QubmV0LzIwNDhjYS5jcmwwEQYD VR0OBAoECExOzCUoAymBMB8GA1UdIwQYMBaAFFXkgdERgL7YibkIozH5oSQJFrlw MA0GCSqGSIb3DQEBBQUAA4IBAQCXTO9KOkmscvwwIGu0KVunxZUEkPky1cKFat4D oTf5iQCwWqxVfttDNf/JAfhRvswmyshqpMRUPiYe5wyjzZdnlN2mQutczY85eWsz eSEGefqCRBWZzMG3OdNGYnyycOtvziCqPhm36XSCnLSlS01hADfkh9LyFDpkfLip e2HgkyLn1Z8+R+Y2dqBT2AADOg+1M/6WytPSgjou3ddI4eSnacwc6ZlK58pwRdcL Bw6adRvQL5Jv9qQHw70cS6aEtn2omqnSpynxC1dpHpdXJuwrQ6zURYMFAOnj8EZA B/rqsVFzkxyl3VMRN8gqpxUnHbSqzH+qMTD8uEWfSAntEOLF -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: sha256WithRSAEncryption Issuer: C=JP, O=SECOM Trust Systems CO.,LTD., OU=Security Communication RootCA2 Validity Not Before: May 29 05:00:39 2009 GMT Not After : May 29 05:00:39 2029 GMT Subject: C=JP, O=SECOM Trust Systems CO.,LTD., OU=Security Communication RootCA2 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:d0:15:39:52:b1:52:b3:ba:c5:59:82:c4:5d:52: ae:3a:43:65:80:4b:c7:f2:96:bc:db:36:97:d6:a6: 64:8c:a8:5e:f0:e3:0a:1c:f7:df:97:3d:4b:ae:f6: 5d:ec:21:b5:41:ab:cd:b9:7e:76:9f:be:f9:3e:36: 34:a0:3b:c1:f6:31:11:45:74:93:3d:57:80:c5:f9: 89:99:ca:e5:ab:6a:d4:b5:da:41:90:10:c1:d6:d6: 42:89:c2:bf:f4:38:12:95:4c:54:05:f7:36:e4:45: 83:7b:14:65:d6:dc:0c:4d:d1:de:7e:0c:ab:3b:c4: 15:be:3a:56:a6:5a:6f:76:69:52:a9:7a:b9:c8:eb: 6a:9a:5d:52:d0:2d:0a:6b:35:16:09:10:84:d0:6a: ca:3a:06:00:37:47:e4:7e:57:4f:3f:8b:eb:67:b8: 88:aa:c5:be:53:55:b2:91:c4:7d:b9:b0:85:19:06: 78:2e:db:61:1a:fa:85:f5:4a:91:a1:e7:16:d5:8e: a2:39:df:94:b8:70:1f:28:3f:8b:fc:40:5e:63:83: 3c:83:2a:1a:99:6b:cf:de:59:6a:3b:fc:6f:16:d7: 1f:fd:4a:10:eb:4e:82:16:3a:ac:27:0c:53:f1:ad: d5:24:b0:6b:03:50:c1:2d:3c:16:dd:44:34:27:1a: 75:fb Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: 0A:85:A9:77:65:05:98:7C:40:81:F8:0F:97:2C:38:F1:0A:EC:3C:CF X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: sha256WithRSAEncryption 4c:3a:a3:44:ac:b9:45:b1:c7:93:7e:c8:0b:0a:42:df:64:ea: 1c:ee:59:6c:08:ba:89:5f:6a:ca:4a:95:9e:7a:8f:07:c5:da: 45:72:82:71:0e:3a:d2:cc:6f:a7:b4:a1:23:bb:f6:24:9f:cb: 17:fe:8c:a6:ce:c2:d2:db:cc:8d:fc:71:fc:03:29:c1:6c:5d: 33:5f:64:b6:65:3b:89:6f:18:76:78:f5:dc:a2:48:1f:19:3f: 8e:93:eb:f1:fa:17:ee:cd:4e:e3:04:12:55:d6:e5:e4:dd:fb: 3e:05:7c:e2:1d:5e:c6:a7:bc:97:4f:68:3a:f5:e9:2e:0a:43: b6:af:57:5c:62:68:7c:b7:fd:a3:8a:84:a0:ac:62:be:2b:09: 87:34:f0:6a:01:bb:9b:29:56:3c:fe:00:37:cf:23:6c:f1:4e: aa:b6:74:46:12:6c:91:ee:34:d5:ec:9a:91:e7:44:be:90:31: 72:d5:49:02:f6:02:e5:f4:1f:eb:7c:d9:96:55:a9:ff:ec:8a: f9:99:47:ff:35:5a:02:aa:04:cb:8a:5b:87:71:29:91:bd:a4: b4:7a:0d:bd:9a:f5:57:23:00:07:21:17:3f:4a:39:d1:05:49: 0b:a7:b6:37:81:a5:5d:8c:aa:33:5e:81:28:7c:a7:7d:27:eb: 00:ae:8d:37 SHA1 Fingerprint=5F:3B:8C:F2:F8:10:B3:7D:78:B4:CE:EC:19:19:C3:73:34:B9:C7:74 -----BEGIN CERTIFICATE----- MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8 t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy 1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: (Negative)11:d4:c2:14:2b:de:21:eb:57:9d:53:fb:0c:22:3b:ff Signature Algorithm: sha1WithRSAEncryption Issuer: C=ES, O=Agencia Catalana de Certificacio (NIF Q-0801176-I), OU=Serveis Publics de Certificacio, OU=Vegeu https://www.catcert.net/verarrel (c)03, OU=Jerarquia Entitats de Certificacio Catalanes, CN=EC-ACC Validity Not Before: Jan 7 23:00:00 2003 GMT Not After : Jan 7 22:59:59 2031 GMT Subject: C=ES, O=Agencia Catalana de Certificacio (NIF Q-0801176-I), OU=Serveis Publics de Certificacio, OU=Vegeu https://www.catcert.net/verarrel (c)03, OU=Jerarquia Entitats de Certificacio Catalanes, CN=EC-ACC Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:b3:22:c7:4f:e2:97:42:95:88:47:83:40:f6:1d: 17:f3:83:73:24:1e:51:f3:98:8a:c3:92:b8:ff:40: 90:05:70:87:60:c9:00:a9:b5:94:65:19:22:15:17: c2:43:6c:66:44:9a:0d:04:3e:39:6f:a5:4b:7a:aa: 63:b7:8a:44:9d:d9:63:91:84:66:e0:28:0f:ba:42: e3:6e:8e:f7:14:27:93:69:ee:91:0e:a3:5f:0e:b1: eb:66:a2:72:4f:12:13:86:65:7a:3e:db:4f:07:f4: a7:09:60:da:3a:42:99:c7:b2:7f:b3:16:95:1c:c7: f9:34:b5:94:85:d5:99:5e:a0:48:a0:7e:e7:17:65: b8:a2:75:b8:1e:f3:e5:42:7d:af:ed:f3:8a:48:64: 5d:82:14:93:d8:c0:e4:ff:b3:50:72:f2:76:f6:b3: 5d:42:50:79:d0:94:3e:6b:0c:00:be:d8:6b:0e:4e: 2a:ec:3e:d2:cc:82:a2:18:65:33:13:77:9e:9a:5d: 1a:13:d8:c3:db:3d:c8:97:7a:ee:70:ed:a7:e6:7c: db:71:cf:2d:94:62:df:6d:d6:f5:38:be:3f:a5:85: 0a:19:b8:a8:d8:09:75:42:70:c4:ea:ef:cb:0e:c8: 34:a8:12:22:98:0c:b8:13:94:b6:4b:ec:f0:d0:90: e7:27 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Alternative Name: email:ec_acc@catcert.net X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: A0:C3:8B:44:AA:37:A5:45:BF:97:80:5A:D1:F1:78:A2:9B:E9:5D:8D X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.15096.1.3.1.10 CPS: https://www.catcert.net/verarrel User Notice: Explicit Text: Vegeu https://www.catcert.net/verarrel Signature Algorithm: sha1WithRSAEncryption a0:48:5b:82:01:f6:4d:48:b8:39:55:35:9c:80:7a:53:99:d5: 5a:ff:b1:71:3b:cc:39:09:94:5e:d6:da:ef:be:01:5b:5d:d3: 1e:d8:fd:7d:4f:cd:a0:41:e0:34:93:bf:cb:e2:86:9c:37:92: 90:56:1c:dc:eb:29:05:e5:c4:9e:c7:35:df:8a:0c:cd:c5:21: 43:e9:aa:88:e5:35:c0:19:42:63:5a:02:5e:a4:48:18:3a:85: 6f:dc:9d:bc:3f:9d:9c:c1:87:b8:7a:61:08:e9:77:0b:7f:70: ab:7a:dd:d9:97:2c:64:1e:85:bf:bc:74:96:a1:c3:7a:12:ec: 0c:1a:6e:83:0c:3c:e8:72:46:9f:fb:48:d5:5e:97:e6:b1:a1: f8:e4:ef:46:25:94:9c:89:db:69:38:be:ec:5c:0e:56:c7:65: 51:e5:50:88:88:bf:42:d5:2b:3d:e5:f9:ba:9e:2e:b3:ca:f4: 73:92:02:0b:be:4c:66:eb:20:fe:b9:cb:b5:99:7f:e6:b6:13: fa:ca:4b:4d:d9:ee:53:46:06:3b:c6:4e:ad:93:5a:81:7e:6c: 2a:4b:6a:05:45:8c:f2:21:a4:31:90:87:6c:65:9c:9d:a5:60: 95:3a:52:7f:f5:d1:ab:08:6e:f3:ee:5b:f9:88:3d:7e:b8:6f: 6e:03:e4:42 SHA1 Fingerprint=28:90:3A:63:5B:52:80:FA:E6:77:4C:0B:6D:A7:D6:BA:A6:4A:F2:E8 -----BEGIN CERTIFICATE----- MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB 8zELMAkGA1UEBhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2Vy dGlmaWNhY2lvIChOSUYgUS0wODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1 YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYDVQQLEyxWZWdldSBodHRwczovL3d3 dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UECxMsSmVyYXJxdWlh IEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMTBkVD LUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQG EwJFUzE7MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8g KE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBD ZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQu bmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJhcnF1aWEgRW50aXRhdHMg ZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUNDMIIBIjAN BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R 85iKw5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm 4CgPukLjbo73FCeTae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaV HMf5NLWUhdWZXqBIoH7nF2W4onW4HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNd QlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0aE9jD2z3Il3rucO2n5nzbcc8t lGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw0JDnJwIDAQAB o4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4 opvpXY0wfwYDVR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBo dHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidW ZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAwDQYJKoZIhvcN AQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJlF7W2u++AVtd0x7Y /X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNaAl6k SBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhy Rp/7SNVel+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOS Agu+TGbrIP65y7WZf+a2E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xl nJ2lYJU6Un/10asIbvPuW/mIPX64b24D5EI= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: sha1WithRSAEncryption Issuer: C=GR, O=Hellenic Academic and Research Institutions Cert. Authority, CN=Hellenic Academic and Research Institutions RootCA 2011 Validity Not Before: Dec 6 13:49:52 2011 GMT Not After : Dec 1 13:49:52 2031 GMT Subject: C=GR, O=Hellenic Academic and Research Institutions Cert. Authority, CN=Hellenic Academic and Research Institutions RootCA 2011 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:a9:53:00:e3:2e:a6:f6:8e:fa:60:d8:2d:95:3e: f8:2c:2a:54:4e:cd:b9:84:61:94:58:4f:8f:3d:8b: e4:43:f3:75:89:8d:51:e4:c3:37:d2:8a:88:4d:79: 1e:b7:12:dd:43:78:4a:8a:92:e6:d7:48:d5:0f:a4: 3a:29:44:35:b8:07:f6:68:1d:55:cd:38:51:f0:8c: 24:31:85:af:83:c9:7d:e9:77:af:ed:1a:7b:9d:17: f9:b3:9d:38:50:0f:a6:5a:79:91:80:af:37:ae:a6: d3:31:fb:b5:26:09:9d:3c:5a:ef:51:c5:2b:df:96: 5d:eb:32:1e:02:da:70:49:ec:6e:0c:c8:9a:37:8d: f7:f1:36:60:4b:26:2c:82:9e:d0:78:f3:0d:0f:63: a4:51:30:e1:f9:2b:27:12:07:d8:ea:bd:18:62:98: b0:59:37:7d:be:ee:f3:20:51:42:5a:83:ef:93:ba: 69:15:f1:62:9d:9f:99:39:82:a1:b7:74:2e:8b:d4: c5:0b:7b:2f:f0:c8:0a:da:3d:79:0a:9a:93:1c:a5: 28:72:73:91:43:9a:a7:d1:4d:85:84:b9:a9:74:8f: 14:40:c7:dc:de:ac:41:64:6c:b4:19:9b:02:63:6d: 24:64:8f:44:b2:25:ea:ce:5d:74:0c:63:32:5c:8d: 87:e5 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Subject Key Identifier: A6:91:42:FD:13:61:4A:23:9E:08:A4:29:E5:D8:13:04:23:EE:41:25 X509v3 Name Constraints: Permitted: DNS:.gr DNS:.eu DNS:.edu DNS:.org email:.gr email:.eu email:.edu email:.org Signature Algorithm: sha1WithRSAEncryption 1f:ef:79:41:e1:7b:6e:3f:b2:8c:86:37:42:4a:4e:1c:37:1e: 8d:66:ba:24:81:c9:4f:12:0f:21:c0:03:97:86:25:6d:5d:d3: 22:29:a8:6c:a2:0d:a9:eb:3d:06:5b:99:3a:c7:cc:c3:9a:34: 7f:ab:0e:c8:4e:1c:e1:fa:e4:dc:cd:0d:be:bf:24:fe:6c:e7: 6b:c2:0d:c8:06:9e:4e:8d:61:28:a6:6a:fd:e5:f6:62:ea:18: 3c:4e:a0:53:9d:b2:3a:9c:eb:a5:9c:91:16:b6:4d:82:e0:0c: 05:48:a9:6c:f5:cc:f8:cb:9d:49:b4:f0:02:a5:fd:70:03:ed: 8a:21:a5:ae:13:86:49:c3:33:73:be:87:3b:74:8b:17:45:26: 4c:16:91:83:fe:67:7d:cd:4d:63:67:fa:f3:03:12:96:78:06: 8d:b1:67:ed:8e:3f:be:9f:4f:02:f5:b3:09:2f:f3:4c:87:df: 2a:cb:95:7c:01:cc:ac:36:7a:bf:a2:73:7a:f7:8f:c1:b5:9a: a1:14:b2:8f:33:9f:0d:ef:22:dc:66:7b:84:bd:45:17:06:3d: 3c:ca:b9:77:34:8f:ca:ea:cf:3f:31:3e:e3:88:e3:80:49:25: c8:97:b5:9d:9a:99:4d:b0:3c:f8:4a:00:9b:64:dd:9f:39:4b: d1:27:d7:b8 SHA1 Fingerprint=FE:45:65:9B:79:03:5B:98:A1:61:B5:51:2E:AC:DA:58:09:48:22:4D -----BEGIN CERTIFICATE----- MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix RDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p YyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw NjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK EztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl cnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl c2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB BQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ fel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns bgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD 75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP FEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp 5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu b3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA A4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p 6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7 dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys Nnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI l7WdmplNsDz4SgCbZN2fOUvRJ9e4 -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 6271844772424770508 (0x570a119742c4e3cc) Signature Algorithm: sha256WithRSAEncryption Issuer: C=IT, L=Milan, O=Actalis S.p.A./03358520967, CN=Actalis Authentication Root CA Validity Not Before: Sep 22 11:22:02 2011 GMT Not After : Sep 22 11:22:02 2030 GMT Subject: C=IT, L=Milan, O=Actalis S.p.A./03358520967, CN=Actalis Authentication Root CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:a7:c6:c4:a5:29:a4:2c:ef:e5:18:c5:b0:50:a3: 6f:51:3b:9f:0a:5a:c9:c2:48:38:0a:c2:1c:a0:18: 7f:91:b5:87:b9:40:3f:dd:1d:68:1f:08:83:d5:2d: 1e:88:a0:f8:8f:56:8f:6d:99:02:92:90:16:d5:5f: 08:6c:89:d7:e1:ac:bc:20:c2:b1:e0:83:51:8a:69: 4d:00:96:5a:6f:2f:c0:44:7e:a3:0e:e4:91:cd:58: ee:dc:fb:c7:1e:45:47:dd:27:b9:08:01:9f:a6:21: 1d:f5:41:2d:2f:4c:fd:28:ad:e0:8a:ad:22:b4:56: 65:8e:86:54:8f:93:43:29:de:39:46:78:a3:30:23: ba:cd:f0:7d:13:57:c0:5d:d2:83:6b:48:4c:c4:ab: 9f:80:5a:5b:3a:bd:c9:a7:22:3f:80:27:33:5b:0e: b7:8a:0c:5d:07:37:08:cb:6c:d2:7a:47:22:44:35: c5:cc:cc:2e:8e:dd:2a:ed:b7:7d:66:0d:5f:61:51: 22:55:1b:e3:46:e3:e3:3d:d0:35:62:9a:db:af:14: c8:5b:a1:cc:89:1b:e1:30:26:fc:a0:9b:1f:81:a7: 47:1f:04:eb:a3:39:92:06:9f:99:d3:bf:d3:ea:4f: 50:9c:19:fe:96:87:1e:3c:65:f6:a3:18:24:83:86: 10:e7:54:3e:a8:3a:76:24:4f:81:21:c5:e3:0f:02: f8:93:94:47:20:bb:fe:d4:0e:d3:68:b9:dd:c4:7a: 84:82:e3:53:54:79:dd:db:9c:d2:f2:07:9b:2e:b6: bc:3e:ed:85:6d:ef:25:11:f2:97:1a:42:61:f7:4a: 97:e8:8b:b1:10:07:fa:65:81:b2:a2:39:cf:f7:3c: ff:18:fb:c6:f1:5a:8b:59:e2:02:ac:7b:92:d0:4e: 14:4f:59:45:f6:0c:5e:28:5f:b0:e8:3f:45:cf:cf: af:9b:6f:fb:84:d3:77:5a:95:6f:ac:94:84:9e:ee: bc:c0:4a:8f:4a:93:f8:44:21:e2:31:45:61:50:4e: 10:d8:e3:35:7c:4c:19:b4:de:05:bf:a3:06:9f:c8: b5:cd:e4:1f:d7:17:06:0d:7a:95:74:55:0d:68:1a: fc:10:1b:62:64:9d:6d:e0:95:a0:c3:94:07:57:0d: 14:e6:bd:05:fb:b8:9f:e6:df:8b:e2:c6:e7:7e:96: f6:53:c5:80:34:50:28:58:f0:12:50:71:17:30:ba: e6:78:63:bc:f4:b2:ad:9b:2b:b2:fe:e1:39:8c:5e: ba:0b:20:94:de:7b:83:b8:ff:e3:56:8d:b7:11:e9: 3b:8c:f2:b1:c1:5d:9d:a4:0b:4c:2b:d9:b2:18:f5: b5:9f:4b Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: 52:D8:88:3A:C8:9F:78:66:ED:89:F3:7B:38:70:94:C9:02:02:36:D0 X509v3 Basic Constraints: critical CA:TRUE X509v3 Authority Key Identifier: keyid:52:D8:88:3A:C8:9F:78:66:ED:89:F3:7B:38:70:94:C9:02:02:36:D0 X509v3 Key Usage: critical Certificate Sign, CRL Sign Signature Algorithm: sha256WithRSAEncryption 0b:7b:72:87:c0:60:a6:49:4c:88:58:e6:1d:88:f7:14:64:48: a6:d8:58:0a:0e:4f:13:35:df:35:1d:d4:ed:06:31:c8:81:3e: 6a:d5:dd:3b:1a:32:ee:90:3d:11:d2:2e:f4:8e:c3:63:2e:23: 66:b0:67:be:6f:b6:c0:13:39:60:aa:a2:34:25:93:75:52:de: a7:9d:ad:0e:87:89:52:71:6a:16:3c:19:1d:83:f8:9a:29:65: be:f4:3f:9a:d9:f0:f3:5a:87:21:71:80:4d:cb:e0:38:9b:3f: bb:fa:e0:30:4d:cf:86:d3:65:10:19:18:d1:97:02:b1:2b:72: 42:68:ac:a0:bd:4e:5a:da:18:bf:6b:98:81:d0:fd:9a:be:5e: 15:48:cd:11:15:b9:c0:29:5c:b4:e8:88:f7:3e:36:ae:b7:62: fd:1e:62:de:70:78:10:1c:48:5b:da:bc:a4:38:ba:67:ed:55: 3e:5e:57:df:d4:03:40:4c:81:a4:d2:4f:63:a7:09:42:09:14: fc:00:a9:c2:80:73:4f:2e:c0:40:d9:11:7b:48:ea:7a:02:c0: d3:eb:28:01:26:58:74:c1:c0:73:22:6d:93:95:fd:39:7d:bb: 2a:e3:f6:82:e3:2c:97:5f:4e:1f:91:94:fa:fe:2c:a3:d8:76: 1a:b8:4d:b2:38:4f:9b:fa:1d:48:60:79:26:e2:f3:fd:a9:d0: 9a:e8:70:8f:49:7a:d6:e5:bd:0a:0e:db:2d:f3:8d:bf:eb:e3: a4:7d:cb:c7:95:71:e8:da:a3:7c:c5:c2:f8:74:92:04:1b:86: ac:a4:22:53:40:b6:ac:fe:4c:76:cf:fb:94:32:c0:35:9f:76: 3f:6e:e5:90:6e:a0:a6:26:a2:b8:2c:be:d1:2b:85:fd:a7:68: c8:ba:01:2b:b1:6c:74:1d:b8:73:95:e7:ee:b7:c7:25:f0:00: 4c:00:b2:7e:b6:0b:8b:1c:f3:c0:50:9e:25:b9:e0:08:de:36: 66:ff:37:a5:d1:bb:54:64:2c:c9:27:b5:4b:92:7e:65:ff:d3: 2d:e1:b9:4e:bc:7f:a4:41:21:90:41:77:a6:39:1f:ea:9e:e3: 9f:d0:66:6f:05:ec:aa:76:7e:bf:6b:16:a0:eb:b5:c7:fc:92: 54:2f:2b:11:27:25:37:78:4c:51:6a:b0:f3:cc:58:5d:14:f1: 6a:48:15:ff:c2:07:b6:b1:8d:0f:8e:5c:50:46:b3:3d:bf:01: 98:4f:b2:59:54:47:3e:34:7b:78:6d:56:93:2e:73:ea:66:28: 78:cd:1d:14:bf:a0:8f:2f:2e:b8:2e:8e:f2:14:8a:cc:e9:b5: 7c:fb:6c:9d:0c:a5:e1:96 SHA1 Fingerprint=F3:73:B3:87:06:5A:28:84:8A:F2:F3:4A:CE:19:2B:DD:C7:8E:9C:AC -----BEGIN CERTIFICATE----- MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1 ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX 4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/ gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ 51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7 jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70 jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1b:1f:ad:b6:20:f9:24:d3:36:6b:f7:c7:f1:8c:a0:59 Signature Algorithm: sha1WithRSAEncryption Issuer: C=GB, O=Trustis Limited, OU=Trustis FPS Root CA Validity Not Before: Dec 23 12:14:06 2003 GMT Not After : Jan 21 11:36:54 2024 GMT Subject: C=GB, O=Trustis Limited, OU=Trustis FPS Root CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:c5:50:7b:9e:3b:35:d0:df:c4:8c:cd:8e:9b:ed: a3:c0:36:99:f4:42:ea:a7:3e:80:83:0f:a6:a7:59: 87:c9:90:45:43:7e:00:ea:86:79:2a:03:bd:3d:37: 99:89:66:b7:e5:8a:56:86:93:9c:68:4b:68:04:8c: 93:93:02:3e:30:d2:37:3a:22:61:89:1c:85:4e:7d: 8f:d5:af:7b:35:f6:7e:28:47:89:31:dc:0e:79:64: 1f:99:d2:5b:ba:fe:7f:60:bf:ad:eb:e7:3c:38:29: 6a:2f:e5:91:0b:55:ff:ec:6f:58:d5:2d:c9:de:4c: 66:71:8f:0c:d7:04:da:07:e6:1e:18:e3:bd:29:02: a8:fa:1c:e1:5b:b9:83:a8:41:48:bc:1a:71:8d:e7: 62:e5:2d:b2:eb:df:7c:cf:db:ab:5a:ca:31:f1:4c: 22:f3:05:13:f7:82:f9:73:79:0c:be:d7:4b:1c:c0: d1:15:3c:93:41:64:d1:e6:be:23:17:22:00:89:5e: 1f:6b:a5:ac:6e:a7:4b:8c:ed:a3:72:e6:af:63:4d: 2f:85:d2:14:35:9a:2e:4e:8c:ea:32:98:28:86:a1: 91:09:41:3a:b4:e1:e3:f2:fa:f0:c9:0a:a2:41:dd: a9:e3:03:c7:88:15:3b:1c:d4:1a:94:d7:9f:64:59: 12:6d Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Authority Key Identifier: keyid:BA:FA:71:25:79:8B:57:41:25:21:86:0B:71:EB:B2:64:0E:8B:21:67 X509v3 Subject Key Identifier: BA:FA:71:25:79:8B:57:41:25:21:86:0B:71:EB:B2:64:0E:8B:21:67 Signature Algorithm: sha1WithRSAEncryption 7e:58:ff:fd:35:19:7d:9c:18:4f:9e:b0:2b:bc:8e:8c:14:ff: 2c:a0:da:47:5b:c3:ef:81:2d:af:05:ea:74:48:5b:f3:3e:4e: 07:c7:6d:c5:b3:93:cf:22:35:5c:b6:3f:75:27:5f:09:96:cd: a0:fe:be:40:0c:5c:12:55:f8:93:82:ca:29:e9:5e:3f:56:57: 8b:38:36:f7:45:1a:4c:28:cd:9e:41:b8:ed:56:4c:84:a4:40: c8:b8:b0:a5:2b:69:70:04:6a:c3:f8:d4:12:32:f9:0e:c3:b1: dc:32:84:44:2c:6f:cb:46:0f:ea:66:41:0f:4f:f1:58:a5:a6: 0d:0d:0f:61:de:a5:9e:5d:7d:65:a1:3c:17:e7:a8:55:4e:ef: a0:c7:ed:c6:44:7f:54:f5:a3:e0:8f:f0:7c:55:22:8f:29:b6: 81:a3:e1:6d:4e:2c:1b:80:67:ec:ad:20:9f:0c:62:61:d5:97: ff:43:ed:2d:c1:da:5d:29:2a:85:3f:ac:65:ee:86:0f:05:8d: 90:5f:df:ee:9f:f4:bf:ee:1d:fb:98:e4:7f:90:2b:84:78:10: 0e:6c:49:53:ef:15:5b:65:46:4a:5d:af:ba:fb:3a:72:1d:cd: f6:25:88:1e:97:cc:21:9c:29:01:0d:65:eb:57:d9:f3:57:96: bb:48:cd:81 SHA1 Fingerprint=3B:C0:38:0B:33:C3:F6:A6:0C:86:15:22:93:D9:DF:F5:4B:81:C0:04 -----BEGIN CERTIFICATE----- MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+ AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA 0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/ BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01 GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4 1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN ZetX2fNXlrtIzYE= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 45 (0x2d) Signature Algorithm: sha256WithRSAEncryption Issuer: C=IL, O=StartCom Ltd., OU=Secure Digital Certificate Signing, CN=StartCom Certification Authority Validity Not Before: Sep 17 19:46:37 2006 GMT Not After : Sep 17 19:46:36 2036 GMT Subject: C=IL, O=StartCom Ltd., OU=Secure Digital Certificate Signing, CN=StartCom Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:c1:88:db:09:bc:6c:46:7c:78:9f:95:7b:b5:33: 90:f2:72:62:d6:c1:36:20:22:24:5e:ce:e9:77:f2: 43:0a:a2:06:64:a4:cc:8e:36:f8:38:e6:23:f0:6e: 6d:b1:3c:dd:72:a3:85:1c:a1:d3:3d:b4:33:2b:d3: 2f:af:fe:ea:b0:41:59:67:b6:c4:06:7d:0a:9e:74: 85:d6:79:4c:80:37:7a:df:39:05:52:59:f7:f4:1b: 46:43:a4:d2:85:85:d2:c3:71:f3:75:62:34:ba:2c: 8a:7f:1e:8f:ee:ed:34:d0:11:c7:96:cd:52:3d:ba: 33:d6:dd:4d:de:0b:3b:4a:4b:9f:c2:26:2f:fa:b5: 16:1c:72:35:77:ca:3c:5d:e6:ca:e1:26:8b:1a:36: 76:5c:01:db:74:14:25:fe:ed:b5:a0:88:0f:dd:78: ca:2d:1f:07:97:30:01:2d:72:79:fa:46:d6:13:2a: a8:b9:a6:ab:83:49:1d:e5:f2:ef:dd:e4:01:8e:18: 0a:8f:63:53:16:85:62:a9:0e:19:3a:cc:b5:66:a6: c2:6b:74:07:e4:2b:e1:76:3e:b4:6d:d8:f6:44:e1: 73:62:1f:3b:c4:be:a0:53:56:25:6c:51:09:f7:aa: ab:ca:bf:76:fd:6d:9b:f3:9d:db:bf:3d:66:bc:0c: 56:aa:af:98:48:95:3a:4b:df:a7:58:50:d9:38:75: a9:5b:ea:43:0c:02:ff:99:eb:e8:6c:4d:70:5b:29: 65:9c:dd:aa:5d:cc:af:01:31:ec:0c:eb:d2:8d:e8: ea:9c:7b:e6:6e:f7:27:66:0c:1a:48:d7:6e:42:e3: 3f:de:21:3e:7b:e1:0d:70:fb:63:aa:a8:6c:1a:54: b4:5c:25:7a:c9:a2:c9:8b:16:a6:bb:2c:7e:17:5e: 05:4d:58:6e:12:1d:01:ee:12:10:0d:c6:32:7f:18: ff:fc:f4:fa:cd:6e:91:e8:36:49:be:1a:48:69:8b: c2:96:4d:1a:12:b2:69:17:c1:0a:90:d6:fa:79:22: 48:bf:ba:7b:69:f8:70:c7:fa:7a:37:d8:d8:0d:d2: 76:4f:57:ff:90:b7:e3:91:d2:dd:ef:c2:60:b7:67: 3a:dd:fe:aa:9c:f0:d4:8b:7f:72:22:ce:c6:9f:97: b6:f8:af:8a:a0:10:a8:d9:fb:18:c6:b6:b5:5c:52: 3c:89:b6:19:2a:73:01:0a:0f:03:b3:12:60:f2:7a: 2f:81:db:a3:6e:ff:26:30:97:f5:8b:dd:89:57:b6: ad:3d:b3:af:2b:c5:b7:76:02:f0:a5:d6:2b:9a:86: 14:2a:72:f6:e3:33:8c:5d:09:4b:13:df:bb:8c:74: 13:52:4b Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 4E:0B:EF:1A:A4:40:5B:A5:17:69:87:30:CA:34:68:43:D0:41:AE:F2 X509v3 Authority Key Identifier: keyid:4E:0B:EF:1A:A4:40:5B:A5:17:69:87:30:CA:34:68:43:D0:41:AE:F2 X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.23223.1.1.1 CPS: http://www.startssl.com/policy.pdf CPS: http://www.startssl.com/intermediate.pdf User Notice: Organization: Start Commercial (StartCom) Ltd. Number: 1 Explicit Text: Limited Liability, read the section *Legal Limitations* of the StartCom Certification Authority Policy available at http://www.startssl.com/policy.pdf Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA Netscape Comment: StartCom Free SSL Certification Authority Signature Algorithm: sha256WithRSAEncryption 8e:8f:e7:dc:94:79:7c:f1:85:7f:9f:49:6f:6b:ca:5d:fb:8c: fe:04:c5:c1:62:d1:7d:42:8a:bc:53:b7:94:03:66:30:3f:b1: e7:0a:a7:50:20:55:25:7f:76:7a:14:0d:eb:04:0e:40:e6:3e: d8:88:ab:07:27:83:a9:75:a6:37:73:c7:fd:4b:d2:4d:ad:17: 40:c8:46:be:3b:7f:51:fc:c3:b6:05:31:dc:cd:85:22:4e:71: b7:f2:71:5e:b0:1a:c6:ba:93:8b:78:92:4a:85:f8:78:0f:83: fe:2f:ad:2c:f7:e4:a4:bb:2d:d0:e7:0d:3a:b8:3e:ce:f6:78: f6:ae:47:24:ca:a3:35:36:ce:c7:c6:87:98:da:ec:fb:e9:b2: ce:27:9b:88:c3:04:a1:f6:0b:59:68:af:c9:db:10:0f:4d:f6: 64:63:5c:a5:12:6f:92:b2:93:94:c7:88:17:0e:93:b6:7e:62: 8b:90:7f:ab:4e:9f:fc:e3:75:14:4f:2a:32:df:5b:0d:e0:f5: 7b:93:0d:ab:a1:cf:87:e1:a5:04:45:e8:3c:12:a5:09:c5:b0: d1:b7:53:f3:60:14:ba:85:69:6a:21:7c:1f:75:61:17:20:17: 7b:6c:3b:41:29:5c:e1:ac:5a:d1:cd:8c:9b:eb:60:1d:19:ec: f7:e5:b0:da:f9:79:18:a5:45:3f:49:43:57:d2:dd:24:d5:2c: a3:fd:91:8d:27:b5:e5:eb:14:06:9a:4c:7b:21:bb:3a:ad:30: 06:18:c0:d8:c1:6b:2c:7f:59:5c:5d:91:b1:70:22:57:eb:8a: 6b:48:4a:d5:0f:29:ec:c6:40:c0:2f:88:4c:68:01:17:77:f4: 24:19:4f:bd:fa:e1:b2:20:21:4b:dd:1a:d8:29:7d:aa:b8:de: 54:ec:21:55:80:6c:1e:f5:30:c8:a3:10:e5:b2:e6:2a:14:31: c3:85:2d:8c:98:b1:86:5a:4f:89:59:2d:b9:c7:f7:1c:c8:8a: 7f:c0:9d:05:4a:e6:42:4f:62:a3:6d:29:a4:1f:85:ab:db:e5: 81:c8:ad:2a:3d:4c:5d:5b:84:26:71:c4:85:5e:71:24:ca:a5: 1b:6c:d8:61:d3:1a:e0:54:db:ce:ba:a9:32:b5:22:f6:73:41: 09:5d:b8:17:5d:0e:0f:99:90:d6:47:da:6f:0a:3a:62:28:14: 67:82:d9:f1:d0:80:59:9b:cb:31:d8:9b:0f:8c:77:4e:b5:68: 8a:f2:6c:f6:24:0e:2d:6c:70:c5:73:d1:de:14:d0:71:8f:b6: d3:7b:02:f6:e3:b8:d4:09:6e:6b:9e:75:84:39:e6:7f:25:a5: f2:48:00:c0:a4:01:da:3f SHA1 Fingerprint=A3:F1:33:3F:E2:42:BF:CF:C5:D1:4E:8F:39:42:98:40:68:10:D1:A0 -----BEGIN CERTIFICATE----- MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEW MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM3WhcNMzYwOTE3MTk0NjM2WjB9 MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w +2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+ Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3 Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B 26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID AQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFul F2mHMMo0aEPQQa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCC ATgwLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5w ZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL2ludGVybWVk aWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENvbW1lcmNpYWwgKFN0 YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0aGUg c2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0 aWZpY2F0aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93 d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgG CWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1 dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5fPGFf59Jb2vKXfuM/gTF wWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWmN3PH/UvS Ta0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst 0OcNOrg+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNc pRJvkrKTlMeIFw6Ttn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKl CcWw0bdT82AUuoVpaiF8H3VhFyAXe2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVF P0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA2MFrLH9ZXF2RsXAiV+uKa0hK 1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBsHvUwyKMQ5bLm KhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ 8dCAWZvLMdibD4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnm fyWl8kgAwKQB2j8= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 59 (0x3b) Signature Algorithm: sha256WithRSAEncryption Issuer: C=IL, O=StartCom Ltd., CN=StartCom Certification Authority G2 Validity Not Before: Jan 1 01:00:01 2010 GMT Not After : Dec 31 23:59:01 2039 GMT Subject: C=IL, O=StartCom Ltd., CN=StartCom Certification Authority G2 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:b6:89:36:5b:07:b7:20:36:bd:82:bb:e1:16:20: 03:95:7a:af:0e:a3:55:c9:25:99:4a:c5:d0:56:41: 87:90:4d:21:60:a4:14:87:3b:cd:fd:b2:3e:b4:67: 03:6a:ed:e1:0f:4b:c0:91:85:70:45:e0:42:9e:de: 29:23:d4:01:0d:a0:10:79:b8:db:03:bd:f3:a9:2f: d1:c6:e0:0f:cb:9e:8a:14:0a:b8:bd:f6:56:62:f1: c5:72:b6:32:25:d9:b2:f3:bd:65:c5:0d:2c:6e:d5: 92:6f:18:8b:00:41:14:82:6f:40:20:26:7a:28:0f: f5:1e:7f:27:f7:94:b1:37:3d:b7:c7:91:f7:e2:01: ec:fd:94:89:e1:cc:6e:d3:36:d6:0a:19:79:ae:d7: 34:82:65:ff:7c:42:bb:b6:dd:0b:a6:34:af:4b:60: fe:7f:43:49:06:8b:8c:43:b8:56:f2:d9:7f:21:43: 17:ea:a7:48:95:01:75:75:ea:2b:a5:43:95:ea:15: 84:9d:08:8d:26:6e:55:9b:ab:dc:d2:39:d2:31:1d: 60:e2:ac:cc:56:45:24:f5:1c:54:ab:ee:86:dd:96: 32:85:f8:4c:4f:e8:95:76:b6:05:dd:36:23:67:bc: ff:15:e2:ca:3b:e6:a6:ec:3b:ec:26:11:34:48:8d: f6:80:2b:1a:23:02:eb:8a:1c:3a:76:2a:7b:56:16: 1c:72:2a:b3:aa:e3:60:a5:00:9f:04:9b:e2:6f:1e: 14:58:5b:a5:6c:8b:58:3c:c3:ba:4e:3a:5c:f7:e1: 96:2b:3e:ef:07:bc:a4:e5:5d:cc:4d:9f:0d:e1:dc: aa:bb:e1:6e:1a:ec:8f:e1:b6:4c:4d:79:72:5d:17: 35:0b:1d:d7:c1:47:da:96:24:e0:d0:72:a8:5a:5f: 66:2d:10:dc:2f:2a:13:ae:26:fe:0a:1c:19:cc:d0: 3e:0b:9c:c8:09:2e:f9:5b:96:7a:47:9c:e9:7a:f3: 05:50:74:95:73:9e:30:09:f3:97:82:5e:e6:8f:39: 08:1e:59:e5:35:14:42:13:ff:00:9c:f7:be:aa:50: cf:e2:51:48:d7:b8:6f:af:f8:4e:7e:33:98:92:14: 62:3a:75:63:cf:7b:fa:de:82:3b:a9:bb:39:e2:c4: bd:2c:00:0e:c8:17:ac:13:ef:4d:25:8e:d8:b3:90: 2f:a9:da:29:7d:1d:af:74:3a:b2:27:c0:c1:1e:3e: 75:a3:16:a9:af:7a:22:5d:9f:13:1a:cf:a7:a0:eb: e3:86:0a:d3:fd:e6:96:95:d7:23:c8:37:dd:c4:7c: aa:36:ac:98:1a:12:b1:e0:4e:e8:b1:3b:f5:d6:6f: f1:30:d7 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 4B:C5:B4:40:6B:AD:1C:B3:A5:1C:65:6E:46:36:89:87:05:0C:0E:B6 Signature Algorithm: sha256WithRSAEncryption 73:57:3f:2c:d5:95:32:7e:37:db:96:92:eb:19:5e:7e:53:e7: 41:ec:11:b6:47:ef:b5:de:ed:74:5c:c5:f1:8e:49:e0:fc:6e: 99:13:cd:9f:8a:da:cd:3a:0a:d8:3a:5a:09:3f:5f:34:d0:2f: 03:d2:66:1d:1a:bd:9c:90:37:c8:0c:8e:07:5a:94:45:46:2a: e6:be:7a:da:a1:a9:a4:69:12:92:b0:7d:36:d4:44:87:d7:51: f1:29:63:d6:75:cd:16:e4:27:89:1d:f8:c2:32:48:fd:db:99: d0:8f:5f:54:74:cc:ac:67:34:11:62:d9:0c:0a:37:87:d1:a3: 17:48:8e:d2:17:1d:f6:d7:fd:db:65:eb:fd:a8:d4:f5:d6:4f: a4:5b:75:e8:c5:d2:60:b2:db:09:7e:25:8b:7b:ba:52:92:9e: 3e:e8:c5:77:a1:3c:e0:4a:73:6b:61:cf:86:dc:43:ff:ff:21: fe:23:5d:24:4a:f5:d3:6d:0f:62:04:05:57:82:da:6e:a4:33: 25:79:4b:2e:54:19:8b:cc:2c:3d:30:e9:d1:06:ff:e8:32:46: be:b5:33:76:77:a8:01:5d:96:c1:c1:d5:be:ae:25:c0:c9:1e: 0a:09:20:88:a1:0e:c9:f3:6f:4d:82:54:00:20:a7:d2:8f:e4: 39:54:17:2e:8d:1e:b8:1b:bb:1b:bd:9a:4e:3b:10:34:dc:9c: 88:53:ef:a2:31:5b:58:4f:91:62:c8:c2:9a:9a:cd:15:5d:38: a9:d6:be:f8:13:b5:9f:12:69:f2:50:62:ac:fb:17:37:f4:ee: b8:75:67:60:10:fb:83:50:f9:44:b5:75:9c:40:17:b2:fe:fd: 79:5d:6e:58:58:5f:30:fc:00:ae:af:33:c1:0e:4e:6c:ba:a7: a6:a1:7f:32:db:38:e0:b1:72:17:0a:2b:91:ec:6a:63:26:ed: 89:d4:78:cc:74:1e:05:f8:6b:fe:8c:6a:76:39:29:ae:65:23: 12:95:08:22:1c:97:ce:5b:06:ee:0c:e2:bb:bc:1f:44:93:f6: d8:38:45:05:21:ed:e4:ad:ab:12:b6:03:a4:42:2e:2d:c4:09: 3a:03:67:69:84:9a:e1:59:90:8a:28:85:d5:5d:74:b1:d1:0e: 20:58:9b:13:a5:b0:63:a6:ed:7b:47:fd:45:55:30:a4:ee:9a: d4:e6:e2:87:ef:98:c9:32:82:11:29:22:bc:00:0a:31:5e:2d: 0f:c0:8e:e9:6b:b2:8f:2e:06:d8:d1:91:c7:c6:12:f4:4c:fd: 30:17:c3:c1:da:38:5b:e3:a9:ea:e6:a1:ba:79:ef:73:d8:b6: 53:57:2d:f6:d0:e1:d7:48 SHA1 Fingerprint=31:F1:FD:68:22:63:20:EE:C6:3B:3F:9D:EA:4A:3E:53:7C:7C:39:17 -----BEGIN CERTIFICATE----- MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEW MBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlm aWNhdGlvbiBBdXRob3JpdHkgRzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1 OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoG A1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRzIwggIiMA0G CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8Oo1XJ JZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsD vfOpL9HG4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnoo D/Uefyf3lLE3PbfHkffiAez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/ Q0kGi4xDuFby2X8hQxfqp0iVAXV16iulQ5XqFYSdCI0mblWbq9zSOdIxHWDirMxW RST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbsO+wmETRIjfaAKxojAuuK HDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8HvKTlXcxN nw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM 0D4LnMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/i UUjXuG+v+E5+M5iSFGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9 Ha90OrInwMEePnWjFqmveiJdnxMaz6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHg TuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE AwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJKoZIhvcNAQEL BQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K 2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfX UfEpY9Z1zRbkJ4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl 6/2o1PXWT6RbdejF0mCy2wl+JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK 9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG/+gyRr61M3Z3qAFdlsHB1b6uJcDJ HgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTcnIhT76IxW1hPkWLI wpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/XldblhY XzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5l IxKVCCIcl85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoo hdVddLHRDiBYmxOlsGOm7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulr so8uBtjRkcfGEvRM/TAXw8HaOFvjqermobp573PYtlNXLfbQ4ddI -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 2 (0x2) Signature Algorithm: sha256WithRSAEncryption Issuer: C=NO, O=Buypass AS-983163327, CN=Buypass Class 2 Root CA Validity Not Before: Oct 26 08:38:03 2010 GMT Not After : Oct 26 08:38:03 2040 GMT Subject: C=NO, O=Buypass AS-983163327, CN=Buypass Class 2 Root CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:d7:c7:5e:f7:c1:07:d4:77:fb:43:21:f4:f4:f5: 69:e4:ee:32:01:db:a3:86:1f:e4:59:0d:ba:e7:75: 83:52:eb:ea:1c:61:15:48:bb:1d:07:ca:8c:ae:b0: dc:96:9d:ea:c3:60:92:86:82:28:73:9c:56:06:ff: 4b:64:f0:0c:2a:37:49:b5:e5:cf:0c:7c:ee:f1:4a: bb:73:30:65:f3:d5:2f:83:b6:7e:e3:e7:f5:9e:ab: 60:f9:d3:f1:9d:92:74:8a:e4:1c:96:ac:5b:80:e9: b5:f4:31:87:a3:51:fc:c7:7e:a1:6f:8e:53:77:d4: 97:c1:55:33:92:3e:18:2f:75:d4:ad:86:49:cb:95: af:54:06:6c:d8:06:13:8d:5b:ff:e1:26:19:59:c0: 24:ba:81:71:79:90:44:50:68:24:94:5f:b8:b3:11: f1:29:41:61:a3:41:cb:23:36:d5:c1:f1:32:50:10: 4e:7f:f4:86:93:ec:84:d3:8e:bc:4b:bf:5c:01:4e: 07:3d:dc:14:8a:94:0a:a4:ea:73:fb:0b:51:e8:13: 07:18:fa:0e:f1:2b:d1:54:15:7d:3c:e1:f7:b4:19: 42:67:62:5e:77:e0:a2:55:ec:b6:d9:69:17:d5:3a: af:44:ed:4a:c5:9e:e4:7a:27:7c:e5:75:d7:aa:cb: 25:e7:df:6b:0a:db:0f:4d:93:4e:a8:a0:cd:7b:2e: f2:59:01:6a:b7:0d:b8:07:81:7e:8b:38:1b:38:e6: 0a:57:99:3d:ee:21:e8:a3:f5:0c:16:dd:8b:ec:34: 8e:9c:2a:1c:00:15:17:8d:68:83:d2:70:9f:18:08: cd:11:68:d5:c9:6b:52:cd:c4:46:8f:dc:b5:f3:d8: 57:73:1e:e9:94:39:04:bf:d3:de:38:de:b4:53:ec: 69:1c:a2:7e:c4:8f:e4:1b:70:ad:f2:a2:f9:fb:f7: 16:64:66:69:9f:49:51:a2:e2:15:18:67:06:4a:7f: d5:6c:b5:4d:b3:33:e0:61:eb:5d:be:e9:98:0f:32: d7:1d:4b:3c:2e:5a:01:52:91:09:f2:df:ea:8d:d8: 06:40:63:aa:11:e4:fe:c3:37:9e:14:52:3f:f4:e2: cc:f2:61:93:d1:fd:67:6b:d7:52:ae:bf:68:ab:40: 43:a0:57:35:53:78:f0:53:f8:61:42:07:64:c6:d7: 6f:9b:4c:38:0d:63:ac:62:af:36:8b:a2:73:0a:0d: f5:21:bd:74:aa:4d:ea:72:03:49:db:c7:5f:1d:62: 63:c7:fd:dd:91:ec:33:ee:f5:6d:b4:6e:30:68:de: c8:d6:26:b0:75:5e:7b:b4:07:20:98:a1:76:32:b8: 4d:6c:4f Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: C9:80:77:E0:62:92:82:F5:46:9C:F3:BA:F7:4C:C3:DE:B8:A3:AD:39 X509v3 Key Usage: critical Certificate Sign, CRL Sign Signature Algorithm: sha256WithRSAEncryption 53:5f:21:f5:ba:b0:3a:52:39:2c:92:b0:6c:00:c9:ef:ce:20: ef:06:f2:96:9e:e9:a4:74:7f:7a:16:fc:b7:f5:b6:fb:15:1b: 3f:ab:a6:c0:72:5d:10:b1:71:ee:bc:4f:e3:ad:ac:03:6d:2e: 71:2e:af:c4:e3:ad:a3:bd:0c:11:a7:b4:ff:4a:b2:7b:10:10: 1f:a7:57:41:b2:c0:ae:f4:2c:59:d6:47:10:88:f3:21:51:29: 30:ca:60:86:af:46:ab:1d:ed:3a:5b:b0:94:de:44:e3:41:08: a2:c1:ec:1d:d6:fd:4f:b6:d6:47:d0:14:0b:ca:e6:ca:b5:7b: 77:7e:41:1f:5e:83:c7:b6:8c:39:96:b0:3f:96:81:41:6f:60: 90:e2:e8:f9:fb:22:71:d9:7d:b3:3d:46:bf:b4:84:af:90:1c: 0f:8f:12:6a:af:ef:ee:1e:7a:ae:02:4a:8a:17:2b:76:fe:ac: 54:89:24:2c:4f:3f:b6:b2:a7:4e:8c:a8:91:97:fb:29:c6:7b: 5c:2d:b9:cb:66:b6:b7:a8:5b:12:51:85:b5:09:7e:62:78:70: fe:a9:6a:60:b6:1d:0e:79:0c:fd:ca:ea:24:80:72:c3:97:3f: f2:77:ab:43:22:0a:c7:eb:b6:0c:84:82:2c:80:6b:41:8a:08: c0:eb:a5:6b:df:99:12:cb:8a:d5:5e:80:0c:91:e0:26:08:36: 48:c5:fa:38:11:35:ff:25:83:2d:f2:7a:bf:da:fd:8e:fe:a5: cb:45:2c:1f:c4:88:53:ae:77:0e:d9:9a:76:c5:8e:2c:1d:a3: ba:d5:ec:32:ae:c0:aa:ac:f7:d1:7a:4d:eb:d4:07:e2:48:f7: 22:8e:b0:a4:9f:6a:ce:8e:b2:b2:60:f4:a3:22:d0:23:eb:94: 5a:7a:69:dd:0f:bf:40:57:ac:6b:59:50:d9:a3:99:e1:6e:fe: 8d:01:79:27:23:15:de:92:9d:7b:09:4d:5a:e7:4b:48:30:5a: 18:e6:0a:6d:e6:8f:e0:d2:bb:e6:df:7c:6e:21:82:c1:68:39: 4d:b4:98:58:66:62:cc:4a:90:5e:c3:fa:27:04:b1:79:15:74: 99:cc:be:ad:20:de:26:60:1c:eb:56:51:a6:a3:ea:e4:a3:3f: a7:ff:61:dc:f1:5a:4d:6c:32:23:43:ee:ac:a8:ee:ee:4a:12: 09:3c:5d:71:c2:be:79:fa:c2:87:68:1d:0b:fd:5c:69:cc:06: d0:9a:7d:54:99:2a:c9:39:1a:19:af:4b:2a:43:f3:63:5d:5a: 58:e2:2f:e3:1d:e4:a9:d6:d0:0a:d0:9e:bf:d7:81:09:f1:c9: c7:26:0d:ac:98:16:56:a0 SHA1 Fingerprint=49:0A:75:74:DE:87:0A:47:FE:58:EE:F6:C7:6B:EB:C6:0B:12:40:99 -----BEGIN CERTIFICATE----- MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr 6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91 1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN 9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h 9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo +fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7 KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2 DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7 5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h 3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 2 (0x2) Signature Algorithm: sha256WithRSAEncryption Issuer: C=NO, O=Buypass AS-983163327, CN=Buypass Class 3 Root CA Validity Not Before: Oct 26 08:28:58 2010 GMT Not After : Oct 26 08:28:58 2040 GMT Subject: C=NO, O=Buypass AS-983163327, CN=Buypass Class 3 Root CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:a5:da:0a:95:16:50:e3:95:f2:5e:9d:76:31:06: 32:7a:9b:f1:10:76:b8:00:9a:b5:52:36:cd:24:47: b0:9f:18:64:bc:9a:f6:fa:d5:79:d8:90:62:4c:22: 2f:de:38:3d:d6:e0:a8:e9:1c:2c:db:78:11:e9:8e: 68:51:15:72:c7:f3:33:87:e4:a0:5d:0b:5c:e0:57: 07:2a:30:f5:cd:c4:37:77:28:4d:18:91:e6:bf:d5: 52:fd:71:2d:70:3e:e7:c6:c4:8a:e3:f0:28:0b:f4: 76:98:a1:8b:87:55:b2:3a:13:fc:b7:3e:27:37:8e: 22:e3:a8:4f:2a:ef:60:bb:3d:b7:39:c3:0e:01:47: 99:5d:12:4f:db:43:fa:57:a1:ed:f9:9d:be:11:47: 26:5b:13:98:ab:5d:16:8a:b0:37:1c:57:9d:45:ff: 88:96:36:bf:bb:ca:07:7b:6f:87:63:d7:d0:32:6a: d6:5d:6c:0c:f1:b3:6e:39:e2:6b:31:2e:39:00:27: 14:de:38:c0:ec:19:66:86:12:e8:9d:72:16:13:64: 52:c7:a9:37:1c:fd:82:30:ed:84:18:1d:f4:ae:5c: ff:70:13:00:eb:b1:f5:33:7a:4b:d6:55:f8:05:8d: 4b:69:b0:f5:b3:28:36:5c:14:c4:51:73:4d:6b:0b: f1:34:07:db:17:39:d7:dc:28:7b:6b:f5:9f:f3:2e: c1:4f:17:2a:10:f3:cc:ca:e8:eb:fd:6b:ab:2e:9a: 9f:2d:82:6e:04:d4:52:01:93:2d:3d:86:fc:7e:fc: df:ef:42:1d:a6:6b:ef:b9:20:c6:f7:bd:a0:a7:95: fd:a7:e6:89:24:d8:cc:8c:34:6c:e2:23:2f:d9:12: 1a:21:b9:55:91:6f:0b:91:79:19:0c:ad:40:88:0b: 70:e2:7a:d2:0e:d8:68:48:bb:82:13:39:10:58:e9: d8:2a:07:c6:12:db:58:db:d2:3b:55:10:47:05:15: 67:62:7e:18:63:a6:46:3f:09:0e:54:32:5e:bf:0d: 62:7a:27:ef:80:e8:db:d9:4b:06:5a:37:5a:25:d0: 08:12:77:d4:6f:09:50:97:3d:c8:1d:c3:df:8c:45: 30:56:c6:d3:64:ab:66:f3:c0:5e:96:9c:c3:c4:ef: c3:7c:6b:8b:3a:79:7f:b3:49:cf:3d:e2:89:9f:a0: 30:4b:85:b9:9c:94:24:79:8f:7d:6b:a9:45:68:0f: 2b:d0:f1:da:1c:cb:69:b8:ca:49:62:6d:c8:d0:63: 62:dd:60:0f:58:aa:8f:a1:bc:05:a5:66:a2:cf:1b: 76:b2:84:64:b1:4c:39:52:c0:30:ba:f0:8c:4b:02: b0:b6:b7 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 47:B8:CD:FF:E5:6F:EE:F8:B2:EC:2F:4E:0E:F9:25:B0:8E:3C:6B:C3 X509v3 Key Usage: critical Certificate Sign, CRL Sign Signature Algorithm: sha256WithRSAEncryption 00:20:23:41:35:04:90:c2:40:62:60:ef:e2:35:4c:d7:3f:ac: e2:34:90:b8:a1:6f:76:fa:16:16:a4:48:37:2c:e9:90:c2:f2: 3c:f8:0a:9f:d8:81:e5:bb:5b:da:25:2c:a4:a7:55:71:24:32: f6:c8:0b:f2:bc:6a:f8:93:ac:b2:07:c2:5f:9f:db:cc:c8:8a: aa:be:6a:6f:e1:49:10:cc:31:d7:80:bb:bb:c8:d8:a2:0e:64: 57:ea:a2:f5:c2:a9:31:15:d2:20:6a:ec:fc:22:01:28:cf:86: b8:80:1e:a9:cc:11:a5:3c:f2:16:b3:47:9d:fc:d2:80:21:c4: cb:d0:47:70:41:a1:ca:83:19:08:2c:6d:f2:5d:77:9c:8a:14: 13:d4:36:1c:92:f0:e5:06:37:dc:a6:e6:90:9b:38:8f:5c:6b: 1b:46:86:43:42:5f:3e:01:07:53:54:5d:65:7d:f7:8a:73:a1: 9a:54:5a:1f:29:43:14:27:c2:85:0f:b5:88:7b:1a:3b:94:b7: 1d:60:a7:b5:9c:e7:29:69:57:5a:9b:93:7a:43:30:1b:03:d7: 62:c8:40:a6:aa:fc:64:e4:4a:d7:91:53:01:a8:20:88:6e:9c: 5f:44:b9:cb:60:81:34:ec:6f:d3:7d:da:48:5f:eb:b4:90:bc: 2d:a9:1c:0b:ac:1c:d5:a2:68:20:80:04:d6:fc:b1:8f:2f:bb: 4a:31:0d:4a:86:1c:eb:e2:36:29:26:f5:da:d8:c4:f2:75:61: cf:7e:ae:76:63:4a:7a:40:65:93:87:f8:1e:80:8c:86:e5:86: d6:8f:0e:fc:53:2c:60:e8:16:61:1a:a2:3e:43:7b:cd:39:60: 54:6a:f5:f2:89:26:01:68:83:48:a2:33:e8:c9:04:91:b2:11: 34:11:3e:ea:d0:43:19:1f:03:93:90:0c:ff:51:3d:57:f4:41: 6e:e1:cb:a0:be:eb:c9:63:cd:6d:cc:e4:f8:36:aa:68:9d:ed: bd:5d:97:70:44:0d:b6:0e:35:dc:e1:0c:5d:bb:a0:51:94:cb: 7e:16:eb:11:2f:a3:92:45:c8:4c:71:d9:bc:c9:99:52:57:46: 2f:50:cf:bd:35:69:f4:3d:15:ce:06:a5:2c:0f:3e:f6:81:ba: 94:bb:c3:bb:bf:65:78:d2:86:79:ff:49:3b:1a:83:0c:f0:de: 78:ec:c8:f2:4d:4c:1a:de:82:29:f8:c1:5a:da:ed:ee:e6:27: 5e:e8:45:d0:9d:1c:51:a8:68:ab:44:e3:d0:8b:6a:e3:f8:3b: bb:dc:4d:d7:64:f2:51:be:e6:aa:ab:5a:e9:31:ee:06:bc:73: bf:13:62:0a:9f:c7:b9:97 SHA1 Fingerprint=DA:FA:F7:FA:66:84:EC:06:8F:14:50:BD:C7:C2:81:A5:BC:A9:64:57 -----BEGIN CERTIFICATE----- MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9 tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX 0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c /3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D 34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3 AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2 HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv 033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41 3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq 4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha256WithRSAEncryption Issuer: C=DE, O=T-Systems Enterprise Services GmbH, OU=T-Systems Trust Center, CN=T-TeleSec GlobalRoot Class 3 Validity Not Before: Oct 1 10:29:56 2008 GMT Not After : Oct 1 23:59:59 2033 GMT Subject: C=DE, O=T-Systems Enterprise Services GmbH, OU=T-Systems Trust Center, CN=T-TeleSec GlobalRoot Class 3 Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:bd:75:93:f0:62:22:6f:24:ae:e0:7a:76:ac:7d: bd:d9:24:d5:b8:b7:fc:cd:f0:42:e0:eb:78:88:56: 5e:9b:9a:54:1d:4d:0c:8a:f6:d3:cf:70:f4:52:b5: d8:93:04:e3:46:86:71:41:4a:2b:f0:2a:2c:55:03: d6:48:c3:e0:39:38:ed:f2:5c:3c:3f:44:bc:93:3d: 61:ab:4e:cd:0d:be:f0:20:27:58:0e:44:7f:04:1a: 87:a5:d7:96:14:36:90:d0:49:7b:a1:75:fb:1a:6b: 73:b1:f8:ce:a9:09:2c:f2:53:d5:c3:14:44:b8:86: a5:f6:8b:2b:39:da:a3:33:54:d9:fa:72:1a:f7:22: 15:1c:88:91:6b:7f:66:e5:c3:6a:80:b0:24:f3:df: 86:45:88:fd:19:7f:75:87:1f:1f:b1:1b:0a:73:24: 5b:b9:65:e0:2c:54:c8:60:d3:66:17:3f:e1:cc:54: 33:73:91:02:3a:a6:7f:7b:76:39:a2:1f:96:b6:38: ae:b5:c8:93:74:1d:9e:b9:b4:e5:60:9d:2f:56:d1: e0:eb:5e:5b:4c:12:70:0c:6c:44:20:ab:11:d8:f4: 19:f6:d2:9c:52:37:e7:fa:b6:c2:31:3b:4a:d4:14: 99:ad:c7:1a:f5:5d:5f:fa:07:b8:7c:0d:1f:d6:83: 1e:b3 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: B5:03:F7:76:3B:61:82:6A:12:AA:18:53:EB:03:21:94:BF:FE:CE:CA Signature Algorithm: sha256WithRSAEncryption 56:3d:ef:94:d5:bd:da:73:b2:58:be:ae:90:ad:98:27:97:fe: 01:b1:b0:52:00:b8:4d:e4:1b:21:74:1b:7e:c0:ee:5e:69:2a: 25:af:5c:d6:1d:da:d2:79:c9:f3:97:29:e0:86:87:de:04:59: 0f:f1:59:d4:64:85:4b:99:af:25:04:1e:c9:46:a9:97:de:82: b2:1b:70:9f:9c:f6:af:71:31:dd:7b:05:a5:2c:d3:b9:ca:47: f6:ca:f2:f6:e7:ad:b9:48:3f:bc:16:b7:c1:6d:f4:ea:09:af: ec:f3:b5:e7:05:9e:a6:1e:8a:53:51:d6:93:81:cc:74:93:f6: b9:da:a6:25:05:74:79:5a:7e:40:3e:82:4b:26:11:30:6e:e1: 3f:41:c7:47:00:35:d5:f5:d3:f7:54:3e:81:3d:da:49:6a:9a: b3:ef:10:3d:e6:eb:6f:d1:c8:22:47:cb:cc:cf:01:31:92:d9: 18:e3:22:be:09:1e:1a:3e:5a:b2:e4:6b:0c:54:7a:7d:43:4e: b8:89:a5:7b:d7:a2:3d:96:86:cc:f2:26:34:2d:6a:92:9d:9a: 1a:d0:30:e2:5d:4e:04:b0:5f:8b:20:7e:77:c1:3d:95:82:d1: 46:9a:3b:3c:78:b8:6f:a1:d0:0d:64:a2:78:1e:29:4e:93:c3: a4:54:14:5b SHA1 Fingerprint=55:A6:72:3E:CB:F2:EC:CD:C3:23:74:70:19:9D:2A:BE:11:E3:81:D1 -----BEGIN CERTIFICATE----- MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN 8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ 1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT 91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p TpPDpFQUWw== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 54:80:f9:a0:73:ed:3f:00:4c:ca:89:d8:e3:71:e6:4a Signature Algorithm: sha1WithRSAEncryption Issuer: C=EE, O=AS Sertifitseerimiskeskus, CN=EE Certification Centre Root CA/emailAddress=pki@sk.ee Validity Not Before: Oct 30 10:10:30 2010 GMT Not After : Dec 17 23:59:59 2030 GMT Subject: C=EE, O=AS Sertifitseerimiskeskus, CN=EE Certification Centre Root CA/emailAddress=pki@sk.ee Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:c8:20:c0:ec:e0:c5:4b:ab:07:78:95:f3:44:ee: fb:0b:0c:ff:74:8e:61:bb:b1:62:ea:23:d8:ab:a1: 65:32:7a:eb:8e:17:4f:96:d8:0a:7b:91:a2:63:6c: c7:8c:4c:2e:79:bf:a9:05:fc:69:5c:95:8d:62:f9: b9:70:ed:c3:51:7d:d0:93:e6:6c:eb:30:4b:e1:bc: 7d:bf:52:9b:ce:6e:7b:65:f2:38:b1:c0:a2:32:ef: 62:b2:68:e0:61:53:c1:36:95:ff:ec:94:ba:36:ae: 9c:1c:a7:32:0f:e5:7c:b4:c6:6f:74:fd:7b:18:e8: ac:57:ed:06:20:4b:32:30:58:5b:fd:cd:a8:e6:a1: fc:70:bc:8e:92:73:db:97:a7:7c:21:ae:3d:c1:f5: 48:87:6c:27:bd:9f:25:74:81:55:b0:f7:75:f6:3d: a4:64:6b:d6:4f:e7:ce:40:ad:0f:dd:32:d3:bc:8a: 12:53:98:c9:89:fb:10:1d:4d:7e:cd:7e:1f:56:0d: 21:70:85:f6:20:83:1f:f6:ba:1f:04:8f:ea:77:88: 35:c4:ff:ea:4e:a1:8b:4d:3f:63:1b:44:c3:44:d4: 25:76:ca:b7:8d:d7:1e:4a:66:64:cd:5c:c5:9c:83: e1:c2:08:88:9a:ec:4e:a3:f1:3e:1c:2c:d9:6c:1d: a1:4b Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 12:F2:5A:3E:EA:56:1C:BF:CD:06:AC:F1:F1:25:C9:A9:4B:D4:14:99 X509v3 Extended Key Usage: TLS Web Client Authentication, TLS Web Server Authentication, Code Signing, E-mail Protection, Time Stamping, OCSP Signing Signature Algorithm: sha1WithRSAEncryption 7b:f6:e4:c0:0d:aa:19:47:b7:4d:57:a3:fe:ad:bb:b1:6a:d5: 0f:9e:db:e4:63:c5:8e:a1:50:56:93:96:b8:38:c0:24:22:66: bc:53:14:61:95:bf:d0:c7:2a:96:39:3f:7d:28:b3:10:40:21: 6a:c4:af:b0:52:77:18:e1:96:d8:56:5d:e3:dd:36:5e:1d:a7: 50:54:a0:c5:2a:e4:aa:8c:94:8a:4f:9d:35:ff:76:a4:06:13: 91:a2:a2:7d:00:44:3f:55:d3:82:3c:1a:d5:5b:bc:56:4c:22: 2e:46:43:8a:24:40:2d:f3:12:b8:3b:70:1a:a4:96:b9:1a:af: 87:41:1a:6a:18:0d:06:4f:c7:3e:6e:b9:29:4d:0d:49:89:11: 87:32:5b:e6:4b:04:c8:e4:5c:e6:74:73:94:5d:16:98:13:95: fe:fb:db:b1:44:e5:3a:70:ac:37:6b:e6:b3:33:72:28:c9:b3: 57:a0:f6:02:16:88:06:0b:b6:a6:4b:20:28:d4:de:3d:8b:ad: 37:05:53:74:fe:6e:cc:bc:43:17:71:5e:f9:c5:cc:1a:a9:61: ee:f7:76:0c:f3:72:f4:72:ad:cf:72:02:36:07:47:cf:ef:19: 50:89:60:cc:e9:24:95:0f:c2:cb:1d:f2:6f:76:90:c7:cc:75: c1:96:c5:9d SHA1 Fingerprint=C9:A8:B9:E7:55:80:5E:58:E3:53:77:A7:25:EB:AF:C3:7B:27:CC:D7 -----BEGIN CERTIFICATE----- MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1 MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1 czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE 1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/ zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0= -----END CERTIFICATE----- gwenhywfar-4.15.2beta/data/Makefile.am0000644000175000017500000000007412364015347014514 00000000000000 certdir=$(datadir)/gwenhywfar dist_cert_DATA=ca-bundle.crt gwenhywfar-4.15.2beta/i18nsources0000644000175000017500000000657012406365337013670 00000000000000src/binreloc.c src/gwenhywfar.c src/base/args.c src/base/buffer.c src/base/debug.c src/base/error.c src/base/gwensignal.c src/base/i18n.c src/base/idlist.c src/base/idlist64.c src/base/inherit.c src/base/list.c src/base/list1.c src/base/logger.c src/base/memory.c src/base/pathmanager.c src/base/plugin.c src/base/plugindescr.c src/base/refptr.c src/base/ringbuffer.c src/base/stringlist.c src/base/stringlist2.c src/base/idmap.c src/base/fastbuffer.c src/base/memcache.c src/base/tree.c src/base/pointerlist.c src/base/multicache.c src/base/param.c src/sio/syncio.c src/sio/syncio_socket.c src/sio/syncio_memory.c src/sio/syncio_buffered.c src/sio/syncio_tls.c src/sio/syncio_http.c src/sio/ssl_cert_descr.c src/sio/httpsession.c src/os/directory_all.c src/os/gwentime_all.c src/os/gwendate.c src/os/posix/directory.c src/os/posix/fslock.c src/os/posix/gwentime.c src/os/posix/inetaddr.c src/os/posix/inetsocket.c src/os/posix/init.c src/os/posix/libloader.c src/os/posix/process.c src/os/posix/mutex.c src/os/posix/semaphore.c src/os/posix/syncio_file.c src/parser/base64.c src/parser/configmgr.c src/parser/db.c src/parser/dbio.c src/parser/msgengine.c src/parser/path.c src/parser/tag16.c src/parser/text.c src/parser/tlv.c src/parser/url.c src/parser/urlfns.c src/parser/xml.c src/parser/xmlctx.c src/parser/xsdnode.c src/crypt3/cryptalgo.c src/crypt3/cryptdefs.c src/crypt3/hashalgo.c src/crypt3/paddalgo.c src/crypt3/cryptkey.c src/crypt3/cryptkeyrsa.c src/crypt3/cryptkeysym.c src/crypt3/mdigest.c src/crypt3/mdigestgc.c src/crypt3/padd.c src/crypt3/smalltresor.c src/crypttoken/ct.c src/crypttoken/ct_context.c src/crypttoken/ctf_context.c src/crypttoken/ctfile.c src/crypttoken/ct_keyinfo.c src/crypttoken/ctplugin.c src/gui/cgui.c src/gui/cprogress.c src/gui/dialog.c src/gui/gui.c src/gui/widget.c src/gui/progressdata.c src/gui/dlg_progress.c src/gui/dlg_input.c src/gui/dlg_message.c src/gui/dlg_showbox.c src/gui/passwdstore.c src/cryptmsg/sighead.c src/cryptmsg/sigtail.c src/cryptmsg/crypthead.c src/cryptmsg/cryptmgr.c src/cryptmsg/cryptmgrkeys.c src/gparser/gwen_parser_element.c src/gparser/parser_xml.c src/gparser/gwen_parser.c plugins/dbio/csv/csv.c plugins/dbio/olddb/olddb.c plugins/dbio/xmldb/xmldb.c plugins/ct/ohbci/ohbci.c plugins/configmgr/dir/cfgdir.c tools/xmlmerge/args.c tools/xmlmerge/main.c tools/typemaker/args.c tools/typemaker/main.c tools/typemaker/phc.c tools/typemaker/lhc.c tools/typemaker/ahc.c tools/typemaker/code_c.c tools/typemaker2/tm_type.c tools/typemaker2/tm_member.c tools/typemaker2/tm_header.c tools/typemaker2/tm_util.c tools/typemaker2/tm_typemanager.c tools/typemaker2/tm_builder.c tools/typemaker2/tm_builder_c.c tools/typemaker2/tm_item.c tools/typemaker2/tm_enum.c tools/typemaker2/tm_define.c tools/typemaker2/tm_code.c tools/typemaker2/tm_inline.c tools/typemaker2/tm_virtualfn.c tools/typemaker2/tm_signal.c tools/typemaker2/tm_slot.c tools/typemaker2/build.c tools/typemaker2/builddefs.c tools/typemaker2/main.c tools/gcttool/activatekey.c tools/gcttool/changepin.c tools/gcttool/create.c tools/gcttool/genkey.c tools/gcttool/showkey.c tools/gcttool/showuser.c tools/gcttool/update.c tools/gcttool/setsignseq.c tools/gcttool/setkey.c tools/gcttool/hashtree.c tools/gcttool/checktree.c tools/gcttool/main.c tools/gsa/add.c tools/gsa/create.c tools/gsa/check.c tools/gsa/extract.c tools/gsa/list.c tools/gsa/mkkey.c tools/gsa/rfi.c tools/gsa/sign.c tools/gsa/verify.c tools/gsa/main.c gwenhywfar-4.15.2beta/checks/0000755000175000017500000000000012643267243013072 500000000000000gwenhywfar-4.15.2beta/checks/syncio_http.c0000644000175000017500000001005112364015347015512 00000000000000 #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #include #include #include static int check_syncio_http1() { GWEN_SYNCIO *sio; GWEN_SYNCIO *baseLayer; int rv; GWEN_DB_NODE *db; int j; /* create socket layer */ sio=GWEN_SyncIo_Socket_new(GWEN_SocketTypeTCP, GWEN_AddressFamilyIP); if (sio==NULL) { fprintf(stderr, "ERROR in check_syncio_http1: Could not create socket io layer.\n"); return 2; } GWEN_SyncIo_Socket_SetAddress(sio, "devel.aqbanking.de"); GWEN_SyncIo_Socket_SetPort(sio, 80); baseLayer=sio; sio=GWEN_SyncIo_Buffered_new(baseLayer); if (sio==NULL) { fprintf(stderr, "ERROR in check_syncio_http1: Could not create Buffered io layer.\n"); return 2; } baseLayer=sio; sio=GWEN_SyncIo_Http_new(baseLayer); if (sio==NULL) { fprintf(stderr, "ERROR in check_io_tls1: Could not create HTTP io layer.\n"); return 2; } for (j=0; j<2; j++) { int firstRead=1; int bodySize=-1; int bytesRead=0; GWEN_BUFFER *tbuf; rv=GWEN_SyncIo_Connect(sio); if (rv<0) { fprintf(stderr, "ERROR in check_syncio_http1: Could not connect (%d)\n", rv); return 2; } db=GWEN_SyncIo_Http_GetDbCommandOut(sio); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "command", "GET"); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "protocol", "HTTP/1.0"); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "url", "/index.html"); db=GWEN_SyncIo_Http_GetDbHeaderOut(sio); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Host", "devel.aqbanking.de"); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Content-length", 0); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Connection", "close"); rv=GWEN_SyncIo_Write(sio, (uint8_t*)"", 0); if (rv<0) { fprintf(stderr, "ERROR in check_syncio_http1: Could not write (%d)\n", rv); return 2; } tbuf=GWEN_Buffer_new(0, 1024, 0, 1); for (;;) { uint8_t *p; uint32_t l; rv=GWEN_Buffer_AllocRoom(tbuf, 1024); if (rv<0) { fprintf(stderr, "ERROR in check_syncio_http1: Could not allocRoom (%d)\n", rv); return 2; } p=(uint8_t*) GWEN_Buffer_GetPosPointer(tbuf); l=GWEN_Buffer_GetMaxUnsegmentedWrite(tbuf); do { rv=GWEN_SyncIo_Read(sio, p, l-1); } while(rv==GWEN_ERROR_INTERRUPTED); if (rv==0) break; else if (rv<0) { if (rv==GWEN_ERROR_EOF) { if (bodySize!=-1 && bytesRead=bodySize) { break; } firstRead=0; } #if 0 fprintf(stderr, "Received:\n"); GWEN_Buffer_Dump(tbuf, stderr, 2); #endif GWEN_Buffer_free(tbuf); rv=GWEN_SyncIo_Disconnect(sio); if (rv<0) { fprintf(stderr, "ERROR in check_syncio_http1: Could not disconnect (%d)\n", rv); return 2; } } return 0; } int check_syncio_http() { int errs=0; int chks=0; fprintf(stderr, "SyncIO http checks... "); chks++; if (check_syncio_http1()) errs++; if (chks) { if (chks==errs) { fprintf(stderr, "SyncIO http checks: all failed.\n"); } else if (errs) { fprintf(stderr, "SyncIO http checks: some failed.\n"); } else { fprintf(stderr, "passed.\n"); } } return errs; } gwenhywfar-4.15.2beta/checks/checks.h0000644000175000017500000000021212364015347014412 00000000000000 #ifndef CHECKS_H #define CHECKS_H int check_db(); int check_syncio_tls(); int check_syncio_http(); int check_syncio_https(); #endif gwenhywfar-4.15.2beta/checks/main.c0000644000175000017500000000175512364015347014106 00000000000000 #ifdef HAVE_CONFIG_H # include #endif #include "checks.h" #include #include int GWENHYWFAR_CB checkCert(GWEN_GUI *gui, const GWEN_SSLCERTDESCR *cert, GWEN_SYNCIO *sio, uint32_t guiid) { /* automatically accept any cert for non-interactive checks */ return 0; } int main(int argc, char **argv) { int errs=0; GWEN_GUI *gui; gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetCheckCertFn(gui, checkCert); GWEN_Gui_SetGui(gui); if (check_db()) errs++; #ifdef GWENHYWFAR_SKIP_NETWORK_CHECKS fprintf(stderr, "Skipping all checks that assume available network connectivity\n" "Run ./configure without --disable-network-checks to enable the skipped checks\n"); #else if (check_syncio_tls()) errs++; if (check_syncio_http()) errs++; if (check_syncio_https()) errs++; #endif if (errs) return 2; return 0; } gwenhywfar-4.15.2beta/checks/check_urlfns.c0000644000175000017500000001147312364015347015626 00000000000000// This is a unittest for the function, notably // GWEN_Url_fromString #include #include #include #include #include // Global variable for storing the test result int g_testSuccess = 0; // Macro to test for one assertion #define test_assert(expr) if (!(expr)) { printf("%s: Failed test in line %d\n", __FILE__, (int)__LINE__); g_testSuccess = -1; } // Macro to test for string equality. Since this is C, we also check // for NULL pointers already here. #define test_strcmp(str1, str2) if (!(str1) || !(str2) || strcmp((str1), (str2)) != 0) { printf("%s: Failed strcmp test in line %d, \"%s\" != \"%s\"\n", __FILE__, (int)__LINE__, (str1) ? (str1) : "NULL", (str2) ? (str2) : "NULL"); g_testSuccess = -1; } // Convenience function to check the interesting fields in one single // GWEN_URL, which is also free'd here in this function already. int verify_url(GWEN_URL *url, const char* path, int port, const char* protocol, const char* server) { int prev_g_testSuccess = g_testSuccess; g_testSuccess = 0; if (path) { test_strcmp(GWEN_Url_GetPath(url), path); } else { test_assert(GWEN_Url_GetPath(url) == NULL); } test_assert(GWEN_Url_GetPort(url) == port); if (protocol) { test_strcmp(GWEN_Url_GetProtocol(url), protocol); } else { test_assert(GWEN_Url_GetProtocol(url) == NULL); } if (server) { test_strcmp(GWEN_Url_GetServer(url), server); } else { test_assert(GWEN_Url_GetServer(url) == NULL); } GWEN_Url_free(url); { int result = !g_testSuccess; g_testSuccess = g_testSuccess || prev_g_testSuccess; return result; } } int main(int argc, char** argv) { GWEN_URL *url = GWEN_Url_fromString("http://www.aqbanking.de/foo/bar"); test_assert(GWEN_Url_GetPassword(url) == NULL); test_strcmp(GWEN_Url_GetPath(url), "/foo/bar"); test_assert(GWEN_Url_GetPort(url) == 80); test_strcmp(GWEN_Url_GetProtocol(url), "http"); test_strcmp(GWEN_Url_GetServer(url), "www.aqbanking.de"); test_assert(GWEN_Url_GetUserName(url) == NULL); GWEN_Url_free(url); // Check some error conditions: No Server, should return NULL test_assert(GWEN_Url_fromString("http://") == NULL); // No server after user, should return NULL test_assert(GWEN_Url_fromString("http://cs@") == NULL); // No numerical port number, should return NULL test_assert(GWEN_Url_fromString("http://a.b.c:aa/foo") == NULL); DBG_WARN(GWEN_LOGDOMAIN, "The 3 error messages above are just fine - all works as expected."); // And some very weird URL url = GWEN_Url_fromString("rsync://foo:bar@a.b.c.d.e.f:4711/some space /in here"); test_strcmp(GWEN_Url_GetProtocol(url), "rsync"); test_strcmp(GWEN_Url_GetUserName(url), "foo"); test_strcmp(GWEN_Url_GetPassword(url), "bar"); test_strcmp(GWEN_Url_GetServer(url), "a.b.c.d.e.f"); test_assert(GWEN_Url_GetPort(url) == 4711); test_strcmp(GWEN_Url_GetPath(url), "/some space /in here"); GWEN_Url_free(url); url = GWEN_Url_fromString("file:/home/aquamaniac"); test_strcmp(GWEN_Url_GetPath(url), "/home/aquamaniac"); test_assert(GWEN_Url_GetPort(url) == 0); test_assert(GWEN_Url_GetProtocol(url) == NULL); // no "file" here? Probably correct because of missing extra slashes. test_strcmp(GWEN_Url_GetServer(url), "file"); GWEN_Url_free(url); test_assert((verify_url(GWEN_Url_fromString("file:///home/aquamaniac"), /*GetPath*/ "/home/aquamaniac", /*GetPort*/ 0, /*GetProtocol*/ "file", // now the protocol it is here /*GetServer*/ NULL))); test_assert((verify_url(GWEN_Url_fromString("/home/aquamaniac"), /*GetPath*/ "/home/aquamaniac", /*GetPort*/ 0, /*GetProtocol*/ NULL, /*GetServer*/ NULL))); test_assert((verify_url(GWEN_Url_fromString("dir:///home/aquamaniac/.aqbanking/settings"), /*GetPath*/ "/home/aquamaniac/.aqbanking/settings", /*GetPort*/ 0, /*GetProtocol*/ "dir", /*GetServer*/ NULL))); // Also some windows paths test_assert((verify_url(GWEN_Url_fromString("c:/home/aquamaniac"), /*GetPath*/ "c:/home/aquamaniac", /*GetPort*/ 0, /*GetProtocol*/ NULL, /*GetServer*/ NULL))); test_assert((verify_url(GWEN_Url_fromString("c:\\home\\aquamaniac"), /*GetPath*/ "c:\\home\\aquamaniac", /*GetPort*/ 0, /*GetProtocol*/ NULL, /*GetServer*/ NULL))); // This path caused the crash in the windows gnucash binary; is // fixed now. test_assert((verify_url(GWEN_Url_fromString("dir://c:\\home\\aquamaniac"), /*GetPath*/ "c:\\home\\aquamaniac", /*GetPort*/ 0, /*GetProtocol*/ "dir", /*GetServer*/ NULL))); test_assert((verify_url(GWEN_Url_fromString("file://c:\\home\\aquamaniac"), /*GetPath*/ "c:\\home\\aquamaniac", /*GetPort*/ 0, /*GetProtocol*/ "file", /*GetServer*/ NULL))); return g_testSuccess; } gwenhywfar-4.15.2beta/checks/syncio_tls.c0000644000175000017500000000463112364015347015344 00000000000000 #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #include #include #define TEST_PATTERN1 \ "GET / HTTP/1.1\r\n" \ "host: sourceforge.net\r\n" \ "Connection: close\r\n" \ "\r\n" static int check_syncio_tls1() { GWEN_SYNCIO *sio; GWEN_SYNCIO *baseLayer; int rv; char buffer[2048]; /* create socket layer */ sio=GWEN_SyncIo_Socket_new(GWEN_SocketTypeTCP, GWEN_AddressFamilyIP); if (sio==NULL) { fprintf(stderr, "ERROR in check_io_tls1: Could not create socket io layer.\n"); return 2; } GWEN_SyncIo_Socket_SetAddress(sio, "sourceforge.net"); GWEN_SyncIo_Socket_SetPort(sio, 443); baseLayer=sio; sio=GWEN_SyncIo_Tls_new(baseLayer); if (sio==NULL) { fprintf(stderr, "ERROR in check_io_tls1: Could not create TLS io layer.\n"); return 2; } GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_TLS_FLAGS_FORCE_SSL_V3); //GWEN_SyncIo_Tls_SetLocalTrustFile(sio, "test.crt"); rv=GWEN_SyncIo_Connect(sio); if (rv) { fprintf(stderr, "ERROR in check_io_tls1: Could not connect (%d)\n", rv); return 2; } rv=GWEN_SyncIo_WriteForced(sio, (const uint8_t*)TEST_PATTERN1, strlen(TEST_PATTERN1)); if (rv<1) { fprintf(stderr, "ERROR in check_io_tls1: Could not write (%d)\n", rv); return 2; } for (;;) { rv=GWEN_SyncIo_Read(sio, (uint8_t*)buffer, sizeof(buffer)-1); if (rv==0) break; else if (rv<1) { if (rv==GWEN_ERROR_TIMEOUT || rv==GWEN_ERROR_EOF) break; fprintf(stderr, "ERROR in check_io_tls1: Could not read (%d)\n", rv); return 2; } else { buffer[rv]=0; fprintf(stderr, "Data received: %s\n", buffer); } } rv=GWEN_SyncIo_Disconnect(sio); if (rv) { fprintf(stderr, "WARNING in check_io_tls1: Could not disconnect (%d)\n", rv); } return 0; } int check_syncio_tls() { int errs=0; int chks=0; fprintf(stderr, "IO tls checks... "); chks++; if (check_syncio_tls1()) errs++; if (chks) { if (chks==errs) { fprintf(stderr, "IO tls checks: all failed.\n"); } else if (errs) { fprintf(stderr, "IO tls checks: some failed.\n"); } else { fprintf(stderr, "passed.\n"); } } return errs; } gwenhywfar-4.15.2beta/checks/Makefile.in0000644000175000017500000011154212634022412015046 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = checks$(EXEEXT) check_urlfns$(EXEEXT) TESTS = checks$(EXEEXT) check_urlfns$(EXEEXT) subdir = checks DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(noinst_HEADERS) \ $(top_srcdir)/test-driver ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_check_urlfns_OBJECTS = check_urlfns.$(OBJEXT) check_urlfns_OBJECTS = $(am_check_urlfns_OBJECTS) check_urlfns_DEPENDENCIES = $(top_builddir)/src/libgwenhywfar.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_checks_OBJECTS = main.$(OBJEXT) db.$(OBJEXT) syncio_tls.$(OBJEXT) \ syncio_http.$(OBJEXT) syncio_https.$(OBJEXT) checks_OBJECTS = $(am_checks_OBJECTS) checks_DEPENDENCIES = $(top_builddir)/src/libgwenhywfar.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(check_urlfns_SOURCES) $(checks_SOURCES) DIST_SOURCES = $(check_urlfns_SOURCES) $(checks_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/parser @all_includes@ checks_SOURCES = \ main.c \ db.c \ syncio_tls.c \ syncio_http.c \ syncio_https.c check_urlfns_SOURCES = check_urlfns.c noinst_HEADERS = checks.h checks_LDADD = $(top_builddir)/src/libgwenhywfar.la check_urlfns_LDADD = $(top_builddir)/src/libgwenhywfar.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu checks/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu checks/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list check_urlfns$(EXEEXT): $(check_urlfns_OBJECTS) $(check_urlfns_DEPENDENCIES) $(EXTRA_check_urlfns_DEPENDENCIES) @rm -f check_urlfns$(EXEEXT) $(AM_V_CCLD)$(LINK) $(check_urlfns_OBJECTS) $(check_urlfns_LDADD) $(LIBS) checks$(EXEEXT): $(checks_OBJECTS) $(checks_DEPENDENCIES) $(EXTRA_checks_DEPENDENCIES) @rm -f checks$(EXEEXT) $(AM_V_CCLD)$(LINK) $(checks_OBJECTS) $(checks_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_urlfns.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/db.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/syncio_http.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/syncio_https.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/syncio_tls.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ else \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? checks.log: checks$(EXEEXT) @p='checks$(EXEEXT)'; \ b='checks'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) check_urlfns.log: check_urlfns$(EXEEXT) @p='check_urlfns$(EXEEXT)'; \ b='check_urlfns'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(PROGRAMS) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am sources: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/checks/Makefile.am0000644000175000017500000000111012364015347015033 00000000000000INCLUDES= -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/parser @all_includes@ noinst_PROGRAMS=checks check_urlfns checks_SOURCES=\ main.c \ db.c \ syncio_tls.c \ syncio_http.c \ syncio_https.c check_urlfns_SOURCES = check_urlfns.c noinst_HEADERS = checks.h checks_LDADD=$(top_builddir)/src/libgwenhywfar.la check_urlfns_LDADD = $(top_builddir)/src/libgwenhywfar.la TESTS = checks check_urlfns sources: gwenhywfar-4.15.2beta/checks/syncio_https.c0000644000175000017500000001041412364015347015700 00000000000000 #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #include #include #include #include static int check_syncio_https1() { GWEN_SYNCIO *sio; GWEN_SYNCIO *baseLayer; int rv; GWEN_DB_NODE *db; int j; /* create socket layer */ sio=GWEN_SyncIo_Socket_new(GWEN_SocketTypeTCP, GWEN_AddressFamilyIP); if (sio==NULL) { fprintf(stderr, "ERROR in check_syncio_http1: Could not create socket io layer.\n"); return 2; } GWEN_SyncIo_Socket_SetAddress(sio, "devel.aqbanking.de"); GWEN_SyncIo_Socket_SetPort(sio, 443); baseLayer=sio; sio=GWEN_SyncIo_Tls_new(baseLayer); if (sio==NULL) { fprintf(stderr, "ERROR in check_syncio_http1: Could not create TLS io layer.\n"); return 2; } baseLayer=sio; sio=GWEN_SyncIo_Buffered_new(baseLayer); if (sio==NULL) { fprintf(stderr, "ERROR in check_syncio_http1: Could not create Buffered io layer.\n"); return 2; } baseLayer=sio; sio=GWEN_SyncIo_Http_new(baseLayer); if (sio==NULL) { fprintf(stderr, "ERROR in check_io_tls1: Could not create HTTP io layer.\n"); return 2; } for (j=0; j<2; j++) { int firstRead=1; int bodySize=-1; int bytesRead=0; GWEN_BUFFER *tbuf; rv=GWEN_SyncIo_Connect(sio); if (rv<0) { fprintf(stderr, "ERROR in check_syncio_http1: Could not connect (%d)\n", rv); return 2; } db=GWEN_SyncIo_Http_GetDbCommandOut(sio); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "command", "GET"); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "protocol", "HTTP/1.0"); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "url", "/index.html"); db=GWEN_SyncIo_Http_GetDbHeaderOut(sio); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Host", "devel.aqbanking.de"); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Content-length", 0); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Connection", "close"); rv=GWEN_SyncIo_Write(sio, (uint8_t*)"", 0); if (rv<0) { fprintf(stderr, "ERROR in check_syncio_http1: Could not write (%d)\n", rv); return 2; } tbuf=GWEN_Buffer_new(0, 1024, 0, 1); for (;;) { uint8_t *p; uint32_t l; rv=GWEN_Buffer_AllocRoom(tbuf, 1024); if (rv<0) { fprintf(stderr, "ERROR in check_syncio_http1: Could not allocRoom (%d)\n", rv); return 2; } p=(uint8_t*) GWEN_Buffer_GetPosPointer(tbuf); l=GWEN_Buffer_GetMaxUnsegmentedWrite(tbuf); do { rv=GWEN_SyncIo_Read(sio, p, l-1); } while(rv==GWEN_ERROR_INTERRUPTED); if (rv==0) break; else if (rv<0) { if (rv==GWEN_ERROR_EOF) { if (bodySize!=-1 && bytesRead=bodySize) { break; } firstRead=0; } #if 0 fprintf(stderr, "Received:\n"); GWEN_Buffer_Dump(tbuf, stderr, 2); #endif GWEN_Buffer_free(tbuf); rv=GWEN_SyncIo_Disconnect(sio); if (rv<0) { fprintf(stderr, "ERROR in check_syncio_http1: Could not disconnect (%d)\n", rv); return 2; } } return 0; } int check_syncio_https() { int errs=0; int chks=0; fprintf(stderr, "SyncIO https checks... "); chks++; if (check_syncio_https1()) errs++; if (chks) { if (chks==errs) { fprintf(stderr, "SyncIO https checks: all failed.\n"); } else if (errs) { fprintf(stderr, "SyncIO https checks: some failed.\n"); } else { fprintf(stderr, "passed.\n"); } } return errs; } gwenhywfar-4.15.2beta/checks/db.c0000644000175000017500000002555712364015347013555 00000000000000 #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include int check_db1() { GWEN_DB_NODE *cfg; cfg=GWEN_DB_Group_new("config"); if (cfg==NULL) { fprintf(stderr, "ERROR in db1: Could not create group.\n"); return 2; } GWEN_DB_Group_free(cfg); return 0; } int check_db2() { GWEN_DB_NODE *cfg; GWEN_DB_NODE *db1; cfg=GWEN_DB_Group_new("config"); if (cfg==NULL) { fprintf(stderr, "ERROR in db2: Could not create group.\n"); return 2; } db1=GWEN_DB_GetGroup(cfg, 0, "test1"); if (db1==NULL) { fprintf(stderr, "ERROR in db2: Could not create group [test1].\n"); return 2; } GWEN_DB_Group_free(cfg); return 0; } int check_db3() { GWEN_DB_NODE *cfg; GWEN_DB_NODE *db1; GWEN_DB_NODE *db2; cfg=GWEN_DB_Group_new("config"); if (cfg==NULL) { fprintf(stderr, "ERROR in db3: Could not create group.\n"); return 2; } db1=GWEN_DB_GetGroup(cfg, 0, "test1"); if (db1==NULL) { fprintf(stderr, "ERROR in db3: Could not create group [test1].\n"); return 2; } db2=GWEN_DB_GetGroup(cfg, 0, "test1/test11"); if (db2==NULL) { fprintf(stderr, "ERROR in db3: Could not create group [test1/test11].\n"); return 2; } GWEN_DB_Group_free(cfg); return 0; } int check_db4() { GWEN_DB_NODE *cfg; GWEN_DB_NODE *db1; GWEN_DB_NODE *db2; const char *v1; cfg=GWEN_DB_Group_new("config"); if (cfg==NULL) { fprintf(stderr, "ERROR in db4: Could not create group.\n"); return 2; } db1=GWEN_DB_GetGroup(cfg, 0, "test1"); if (db1==NULL) { fprintf(stderr, "ERROR in db2: Could not create group [test1].\n"); return 2; } db2=GWEN_DB_GetGroup(cfg, 0, "test1/test11"); if (db2==NULL) { fprintf(stderr, "ERROR in db2: Could not create group [test1/test11].\n"); return 2; } GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "test1/test11/var111", "value1111"); v1=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 0, NULL); if (v1==NULL) { fprintf(stderr, "ERROR in db4: Could not get var [test1/test11/var111].\n"); return 2; } if (strcmp(v1, "value1111")!=0) { fprintf(stderr, "ERROR in db4: Value for var [test1/test11/var111] does not " "match [%s]!=[%s].\n", v1, "value1111"); return 2; } GWEN_DB_Group_free(cfg); return 0; } int check_db5() { GWEN_DB_NODE *cfg; GWEN_DB_NODE *db1; GWEN_DB_NODE *db2; const char *v1; const char *v2; cfg=GWEN_DB_Group_new("config"); if (cfg==NULL) { fprintf(stderr, "ERROR in db5: Could not create group.\n"); return 2; } db1=GWEN_DB_GetGroup(cfg, 0, "test1"); if (db1==NULL) { fprintf(stderr, "ERROR in db2: Could not create group [test1].\n"); return 2; } db2=GWEN_DB_GetGroup(cfg, 0, "test1/test11"); if (db2==NULL) { fprintf(stderr, "ERROR in db2: Could not create group [test1/test11].\n"); return 2; } GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "test1/test11/var111", "value1111"); v1=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 0, NULL); if (v1==NULL) { fprintf(stderr, "ERROR in db5: Could not get var [test1/test11/var111].\n"); return 2; } if (strcmp(v1, "value1111")!=0) { fprintf(stderr, "ERROR in db5: Value for var [test1/test11/var111] does not " "match [%s]!=[%s].\n", v1, "value1111"); return 2; } GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "test1/test11/var111", "value1112"); v1=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 0, NULL); if (v1==NULL) { fprintf(stderr, "ERROR in db5: Could not get var [test1/test11/var111].\n"); return 2; } if (strcmp(v1, "value1111")!=0) { fprintf(stderr, "ERROR in db5: Value for var [test1/test11/var111] does not " "match [%s]!=[%s].\n", v1, "value1111"); return 2; } v2=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 1, NULL); if (v2==NULL) { fprintf(stderr, "ERROR in db5: Could not get var [test1/test11/var111].\n"); return 2; } if (strcmp(v2, "value1112")!=0) { fprintf(stderr, "ERROR in db5: Value for var [test1/test11/var111] does not " "match [%s]!=[%s].\n", v2, "value1112"); return 2; } GWEN_DB_Group_free(cfg); return 0; } int check_db6() { GWEN_DB_NODE *cfg; GWEN_DB_NODE *db1; GWEN_DB_NODE *db2; const char *v1; const char *v2; cfg=GWEN_DB_Group_new("config"); if (cfg==NULL) { fprintf(stderr, "ERROR in db6: Could not create group.\n"); return 2; } db1=GWEN_DB_GetGroup(cfg, 0, "test1"); if (db1==NULL) { fprintf(stderr, "ERROR in db2: Could not create group [test1].\n"); return 2; } db2=GWEN_DB_GetGroup(cfg, 0, "test1/test11"); if (db2==NULL) { fprintf(stderr, "ERROR in db2: Could not create group [test1/test11].\n"); return 2; } GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "test1/test11/var111", "value1111"); v1=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 0, NULL); if (v1==NULL) { fprintf(stderr, "ERROR in db6: Could not get var [test1/test11/var111].\n"); return 2; } if (strcmp(v1, "value1111")!=0) { fprintf(stderr, "ERROR in db6: Value for var [test1/test11/var111] does not " "match [%s]!=[%s].\n", v1, "value1111"); return 2; } GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "test1/test11/var111", "value1112"); v1=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 0, NULL); if (v1==NULL) { fprintf(stderr, "ERROR in db6: Could not get var [test1/test11/var111].\n"); return 2; } if (strcmp(v1, "value1111")!=0) { fprintf(stderr, "ERROR in db6: Value for var [test1/test11/var111] does not " "match [%s]!=[%s].\n", v1, "value1111"); return 2; } v2=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 1, NULL); if (v2==NULL) { fprintf(stderr, "ERROR in db6: Could not get var [test1/test11/var111].\n"); return 2; } if (strcmp(v2, "value1112")!=0) { fprintf(stderr, "ERROR in db6: Value for var [test1/test11/var111] does not " "match [%s]!=[%s].\n", v2, "value1112"); return 2; } GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_OVERWRITE_VARS, "test1/test11/var111", "value1113"); v1=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 0, NULL); if (v1==NULL) { fprintf(stderr, "ERROR in db6: Could not get var [test1/test11/var111].\n"); return 2; } if (strcmp(v1, "value1113")!=0) { fprintf(stderr, "ERROR in db6: Value for var [test1/test11/var111] does not " "match [%s]!=[%s].\n", v1, "value1113"); return 2; } v2=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 1, NULL); if (v2!=NULL) { fprintf(stderr, "ERROR in db6: Var [test1/test11/var111] should not exist.\n"); return 2; } GWEN_DB_Group_free(cfg); return 0; } int check_db7() { GWEN_DB_NODE *cfg; GWEN_DB_NODE *db1; GWEN_DB_NODE *db2; const char *v1; const char *v2; const char *v3; int rv; cfg=GWEN_DB_Group_new("config"); if (cfg==NULL) { fprintf(stderr, "ERROR in db7: Could not create group.\n"); return 2; } db1=GWEN_DB_GetGroup(cfg, 0, "test1"); if (db1==NULL) { fprintf(stderr, "ERROR in db2: Could not create group [test1].\n"); return 2; } db2=GWEN_DB_GetGroup(cfg, 0, "test1/test11"); if (db2==NULL) { fprintf(stderr, "ERROR in db2: Could not create group [test1/test11].\n"); return 2; } GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "test1/test11/var111", "value1111"); v1=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 0, NULL); if (v1==NULL) { fprintf(stderr, "ERROR in db7: Could not get var [test1/test11/var111].\n"); return 2; } if (strcmp(v1, "value1111")!=0) { fprintf(stderr, "ERROR in db7: Value for var [test1/test11/var111] does not " "match [%s]!=[%s].\n", v1, "value1111"); return 2; } GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "test1/test11/var111", "value1112"); v1=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 0, NULL); if (v1==NULL) { fprintf(stderr, "ERROR in db7: Could not get var [test1/test11/var111].\n"); return 2; } if (strcmp(v1, "value1111")!=0) { fprintf(stderr, "ERROR in db7: Value for var [test1/test11/var111] does not " "match [%s]!=[%s].\n", v1, "value1111"); return 2; } v2=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 1, NULL); if (v2==NULL) { fprintf(stderr, "ERROR in db7: Could not get var [test1/test11/var111].\n"); return 2; } if (strcmp(v2, "value1112")!=0) { fprintf(stderr, "ERROR in db7: Value for var [test1/test11/var111] does not " "match [%s]!=[%s].\n", v2, "value1112"); return 2; } { #ifndef MAX_PATH # define MAX_PATH 200 #endif char tmpfile[MAX_PATH]; GWEN_Directory_GetTmpDirectory(tmpfile, MAX_PATH); strncat(tmpfile, #ifdef OS_WIN32 "\\" #else "/" #endif "db1.conf", MAX_PATH - strlen(tmpfile)); rv=GWEN_DB_WriteFile(cfg, tmpfile, GWEN_DB_FLAGS_DEFAULT); if (rv) { fprintf(stderr, "ERROR in db7: Could not write DB file (%d)\n", rv); return 2; } GWEN_DB_ClearGroup(cfg, NULL); rv=GWEN_DB_ReadFile(cfg, tmpfile, GWEN_DB_FLAGS_DEFAULT); if (rv) { fprintf(stderr, "ERROR in db7: Could not read DB file (%d)\n", rv); return 2; } } v1=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 0, NULL); if (v1==NULL) { fprintf(stderr, "ERROR in db7: Could not get var [test1/test11/var111].\n"); return 2; } if (strcmp(v1, "value1111")!=0) { fprintf(stderr, "ERROR in db7: Value for var [test1/test11/var111] does not " "match [%s]!=[%s].\n", v1, "value1111"); return 2; } v2=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 1, NULL); if (v2==NULL) { fprintf(stderr, "ERROR in db7: Could not get var [test1/test11/var111].\n"); return 2; } if (strcmp(v2, "value1112")!=0) { fprintf(stderr, "ERROR in db7: Value for var [test1/test11/var111] does not " "match [%s]!=[%s].\n", v2, "value1112"); return 2; } v3=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 2, NULL); if (v3!=NULL) { fprintf(stderr, "ERROR in db7: Var [test1/test11/var111:2] not empty.\n"); return 2; } GWEN_DB_Group_free(cfg); return 0; } int check_db() { int errs=0; int chks=0; fprintf(stderr, "DB-checks... "); chks++; if (check_db1()) errs++; chks++; if (check_db2()) errs++; chks++; if (check_db3()) errs++; chks++; if (check_db4()) errs++; chks++; if (check_db5()) errs++; chks++; if (check_db6()) errs++; chks++; if (check_db7()) errs++; if (chks) { if (chks==errs) { fprintf(stderr, "DB-checks: all failed.\n"); } else if (errs) { fprintf(stderr, "DB-checks: some failed.\n"); } else { fprintf(stderr, "passed.\n"); } } return errs; } gwenhywfar-4.15.2beta/NEWS0000644000175000017500000004127312364015347012254 00000000000000 =========================================================================== gwenhywfar-3.7.0 (2009/01/22) =========================================================================== This release adds HTTP proxy support. Some bugs have been fixed and a tree template module (similar to GWEN_LIST but for trees) has been added. =========================================================================== gwenhywfar-3.5.2 (2008/11/08) =========================================================================== This release fixes a bug. It features improved error message (now indicating whether "Force SSLv3" should be enabled) and FreeBSD build fixes. =========================================================================== gwenhywfar-3.4.1 (2008/08/16) =========================================================================== This release fixes some problems with HTTP(s) connections and adds the command "setkey" to gct-tool (allowing to set number and version of a key). =========================================================================== gwenhywfar-3.4.0 (2008/08/11) =========================================================================== This release fixes some problems with AqHBCI, features improved handling of TLS-connections, implements basic thread sync mechanisms (MUTEX, SEMAPHORE) and provides improved support for WIN32 platforms. Work on a configuration manager framework (as will be needed by AqBanking soon) has begun. =========================================================================== gwenhywfar-3.3.5 (2008/07/08) =========================================================================== This release introduce a configure option for the buffer size default hard limit. =========================================================================== gwenhywfar-3.3.4 (2008/06/11) =========================================================================== This release fixes a bug in the CSV exporter. It also adds the gct-tool command "changepin". =========================================================================== gwenhywfar-3.3.3 (2008/06/06) =========================================================================== This release fixes some bugs. Support for non-interactive use of GWEN_GUI has been improved. =========================================================================== gwenhywfar-3.3.2 (2008/05/27) =========================================================================== This release fixes a bug in HTTP chunked download mode. =========================================================================== gwenhywfar-3.3.1 (2008/04/25) =========================================================================== This is a bugfix release. =========================================================================== gwenhywfar-3.3.0 (2008/04/22) =========================================================================== This release fixes some build system bugs and improves support for static linking =========================================================================== gwenhywfar-3.2.0 (2008/03/16) =========================================================================== This release fixes some important bugs and adds some crypto functions. Pin caching and SSL certificate handling is now available in cgui.{c,h}. =========================================================================== gwenhywfar-3.1.1 (2008/02/10) =========================================================================== This release fixes a bug in the OpenHBCI keyfile plugin and decreases the verbosity of the message engine. =========================================================================== gwenhywfar-3.1.0 (2008/01/25) =========================================================================== This release fixes some important bugs. =========================================================================== gwenhywfar-3.0.1 (2007/12/07) =========================================================================== This release fixes a bug in GWEN_Buffer_ReplaceBytes(). =========================================================================== gwenhywfar-3.0.0 (2007/11/22) =========================================================================== This is the first stable release of Gwenhywfar which no longer links against OpenSSL. OpenSSL is still used for one of the tools, but the library does not link against it. =========================================================================== gwenhywfar-2.9.15rc6 (2007/11/17) =========================================================================== This release simplifies WIN32 installations. =========================================================================== gwenhywfar-2.9.14rc5 (2007/11/16) =========================================================================== This release improves the TLS server code. It now allows Libchipcard4 to be used in slave mode. =========================================================================== gwenhywfar-2.9.13rc4 (2007/11/14) =========================================================================== This release improves the build system and adds German translations for formerly untranslated strings. =========================================================================== gwenhywfar-2.9.12rc3 (2007/11/13) =========================================================================== This release fixes a problem with some TLS servers. =========================================================================== gwenhywfar-2.9.11rc2 (2007/11/11) =========================================================================== This version fixes some bugs and problems. =========================================================================== gwenhywfar-2.9.10rc1 (2007/11/10) =========================================================================== This release fixes a bug in GWEN_InetSocket_Select(). =========================================================================== gwenhywfar-2.9.9beta (2007/11/07) =========================================================================== This is chiefly a bugfix release. =========================================================================== gwenhywfar-2.9.8beta (2007/11/03) =========================================================================== This release fixes some bugs. It also adds the command "setsignseq" to the gct-tool. =========================================================================== gwenhywfar-2.9.7beta (2007/10/31) =========================================================================== This release fixes some bugs with the OpenHBCI keyfile module. =========================================================================== gwenhywfar-2.9.6beta (2007/10/30) =========================================================================== This release fixes a few bugs. The gct-tool is now able to generate keys. =========================================================================== gwenhywfar-2.9.5beta (2007/10/28) =========================================================================== This release adds the command "update" to the gct-tool. This allows to convert ancient OpenHBCI keyfiles to a new format which can be used by AqHBCI without the help of OpenSSL. Gwen still DOES NOT link against OpenSSL, it's only the gct-tool which does. =========================================================================== gwenhywfar-2.9.4beta (2007/10/27) =========================================================================== This release very much improves handling of TLS connections, fixes some bugs and adds a local installation mode. Some modules which are no longer needed have been removed. =========================================================================== gwenhywfar-2.9.3beta (2007/10/24) =========================================================================== This is the first release which no longer requires OpenSSL. The project now uses Libgcrypt and GnuTLS for cryptographic functions. This is also the first version of the new generation which works on WIN32 platforms. It no longer requires to make assumptions about where it has been installed on WIN32, it finds all plugins relative to the location of the calling executable. =========================================================================== gwenhywfar-2.9.2beta (2007/09/11) =========================================================================== This release introduces a new request based io layer which replaces the former netlayer and buffered io modules. This release uses Libgcrypt and GNU-TLS instead of OpenSSL for new rewritten cryptographic module. The now deprecated netlayer and the old crypto modules are still shipped with this release because currently AqBanking still needs them. However, the next stable release wil not. =========================================================================== gwenhywfar-2.9.1beta (2007/05/14) =========================================================================== This release fixes a major bug in the console GUI code and a minor one in GWEN_Logger. =========================================================================== gwenhywfar-2.9.0beta (2007/04/03) =========================================================================== This is the first release of Gwenhywfar3. The main changes concern the new module GWEN_GUI. This is used by Gwenhywfar itself and depending projects for user interaction. The GWEN_DB code has been partly rewritten for speed optimisation. The names of types, macros and functions has been cleaned up to comply to the STYLES document. Some bugs have been fixed in the process. =========================================================================== gwenhywfar-2.5.0 (2006/12/25) =========================================================================== This release decreases the verbosity and makes gwenhywfar completely relocatable using binreloc. =========================================================================== gwenhywfar-2.4.1 (2006/09/26) =========================================================================== This release fixes some bugs, removes debugging messages and cleans up the API (longtime deprecated functions have been removed). Callbacks functions used widely in Gwenhywfar have been adapted to work on Windows as well. =========================================================================== gwenhywfar-2.4.0 (2006/08/25) =========================================================================== This version adds a simple signal/slot framework and fixes some bugs. =========================================================================== gwenhywfar-2.3.1 (2006/07/13) =========================================================================== This release adds GWEN_DBIO plugin which writes GWEN_DB's as XML files. =========================================================================== gwenhywfar-2.3.0 (2006/06/15) =========================================================================== This release fixes some bugs and introduces a new module for fast lookup of objects via integer ids. It also provides a storage module to be used by my next projects. =========================================================================== gwenhywfar-2.2.0 (2006/04/12) =========================================================================== This release includes a fix for SSL problems on MacOSX, introduces user and password fields to GWEN_URL, adds a GWEN_DBIO plugin for RFC822 headers (as used by AqMail) and adds some signedness fixes. =========================================================================== gwenhywfar-2.1.1 (2006/03/26) =========================================================================== This is just a maintenance release which fixes some minor bugs and compiles on sparc-solaris and amd64 with less warnings. =========================================================================== gwenhywfar-2.1.0 (2006/03/20) =========================================================================== This release fixes some bugs and very much improves the internal list code which results in speedup of XML file reading by factor 5-6. =========================================================================== gwenhywfar-2.0.0 (2006/02/27) =========================================================================== This release fixes the spurious signature error encountered with AqHBCI and improves the API documentation. =========================================================================== gwenhywfar-1.99.7 (2006/02/06) =========================================================================== The CryptToken framework now handles up to six keys per user, some memory leaks and some minor bugs have been fixed. =========================================================================== gwenhywfar-1.99.6 (2006/01/30) =========================================================================== The OpenHBCI CryptToken now reports a bad pin to the application (i.e. AqBanking is now able to intercept bad pins from these CryptTokens as well). =========================================================================== gwenhywfar-1.99.5 (2006/01/26) =========================================================================== This release fixes some bugs in HTTP code and working with crypt tokens is now safer. =========================================================================== gwenhywfar-1.99.4 (2006/01/17) =========================================================================== This release fixes some bugs in the build system (especially regarding GCC's new visibility feature). =========================================================================== gwenhywfar-1.99.3 (2006/01/11) =========================================================================== This release fixes some minor bugs and makes use of GCCs visibility features (thus removing about 700 symbols from the shared library). =========================================================================== gwenhywfar-1.99.2 (2005/12/15) =========================================================================== This release fixes some problems with the network code and Gnucash. =========================================================================== gwenhywfar-1.99.1 (2005/12/01) =========================================================================== This release chiefly fixes some bugs in network and XML code. It also prepares Gwenhywfar to be used in 64 bit environments. =========================================================================== gwenhywfar-1.99.0beta (2005/11/22) =========================================================================== This is the first release of the gwen2 series. It features a complete rewrite of the network code which fixes problems with some HBCI servers. Only the latest version of AqBanking works with this version of gwen. =========================================================================== gwenhywfar-1.19.0 (2005/10/22) =========================================================================== The changes in this release are as follows: Some problems in GWEN_CryptToken when keys smaller than 96 bytes are used were fixed (this allows AqBanking/AqHBCI to work with some banks again!). This version also fixes some bugs thus making network-timeout problems less likely to occurr. A request wrapper around existing IPC code was added. =========================================================================== gwenhywfar-1.15.0 (2005/08/11) =========================================================================== This release fixes some important bugs, enables the crypttoken code (used by AqHBCI), adds the tool gct-tool for admimistration of crypttoken, adds blowfish encryption, improves the waitcallback code and compiles warningless with gcc4. gwenhywfar-4.15.2beta/COPYING0000644000175000017500000006024112364015347012604 00000000000000 Gwenhywfar is licensed under the GNU LGPL (see below) with this exception: As the copyright holder of Gwenhywfar, Martin Preuss grants the following license exception: Martin Preuss explicitly allows the compilation and distribution of Gwenhywfar with the OpenSSL Toolkit. No developer is required to provide this exception in a derived work. GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS gwenhywfar-4.15.2beta/Doxyfile.in0000644000175000017500000017474112364015347013677 00000000000000# Doxyfile 1.6.1 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = gwenhywfar # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @VERSION@ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = YES # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = "The $name class " \ "The $name widget " \ "The $name file " \ is \ provides \ specifies \ contains \ represents \ a \ an \ the # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = YES # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = YES # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it parses. # With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this tag. # The format is ext=language, where ext is a file extension, and language is one of # the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, # Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat # .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will rougly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 4 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = YES # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = YES # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = YES # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = YES # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = yes # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by # doxygen. The layout file controls the global structure of the generated output files # in an output format independent way. The create the layout file that represents # doxygen's defaults, run doxygen with the -l option. You can optionally specify a # file name after the option, if omitted DoxygenLayout.xml will be used as the name # of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = doc/apidoc.h doc/widgets.h doc/widgets_be.h @DOXYGEN_INPUT@ # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = src/os/windows \ src/os/posix # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = *moc* \ *_p.h # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = doc # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = doc # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 4 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = GWEN_ #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = apidoc # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER # are set, an additional index file will be generated that can be used as input for # Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated # HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. # For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's # filter section matches. # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # When the SEARCHENGINE tag is enable doxygen will generate a search box for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP) or Qt help (GENERATE_QHP) # there is already a search function so this one should typically # be disabled. SEARCHENGINE = NO #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = YES # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = DOXYGEN \ @DOXYGEN_DEFINE@ \ __cplusplus # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = @DOXYGEN_TAGFILES@ # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = gwenhywfar.tag # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = NO # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = @USE_DOT@ # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = YES # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = YES # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 1000 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES gwenhywfar-4.15.2beta/config.guess0000755000175000017500000013036112201675101014060 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2013 Free Software Foundation, Inc. timestamp='2013-06-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches with a ChangeLog entry to config-patches@gnu.org. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; or1k:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gwenhywfar-4.15.2beta/missing0000755000175000017500000001533012261335263013145 00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2013-10-28.13; # UTC # Copyright (C) 1996-2013 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gwenhywfar-4.15.2beta/README.W320000644000175000017500000000501312364015347012777 00000000000000 1. Using Gwenhywfar =================== 1.1. Needed Components ---------------------- 1.1.1. GNU TLS We use the precompiled packages from the wireshark project (gnutls 1.6.0) which also contain all needed libraries such as libgcrypt and libgpg-error. 2. Compiling Gwenhywfar ======================= 2.1. Needed Components ---------------------- 2.1.1. MinGW32 Gwenhywfar uses MinGW32 on Windows platforms. MinGW32 is a project with the goal to provide a free compiler system and a nearly complete shell environment which allows to execute the configure script. The resulting DLLs and EXEs only link against Windows libraries, so there are no licence issues when releasing binary packages. These EXEs and DLLs don't need MinGW32 to be installed on the target system. The compiler itself is the very well known GCC. One configure command line that used to work is the following: ./configure CPPFLAGS="$REGEX_INCLUDES $GNUTLS_INCLUDES $INTL_INCLUDES" \ LDFLAGS="$REGEX_LDFLAGS -lregex $GNUTLS_LDFLAGS $INTL_LDFLAGS -lintl -liconv" which just means you have to manually supply the -I/some/dir flags and -L/some/dir/lib flags for libregex, libintl, libiconv, and gnutls. 2.1.2. GnuTLS We use the precompiled packages from the wireshark project (gnutls 1.6.0) which also contain all needed libraries such as libgcrypt and libgpg-error. To compile gwenhywfar you will also need the developer files (ending in *.dll.a and *.h). 3.2. Cross-compiling on Linux ----------------------------- 3.2.1. Compiling Gwenhywfar can be cross-compiled. The author uses Debian and its mingw package. To compile Gwenhywfar in that environment just use the following commands: >$ make -fMakefile.cvs mp-w32 >$ make >$ make install DESTDIR=/tmp/gwen 3.2.2. Preparing Files for Shipping You must then take the DLLs and executables (EXE) from the folder /tmp/gwen and copy them into a folder for shipping. When preparing the application shipping folder you should have the expected file hierarchy (see above) in mind so that the application will find all DLLs and data. 3.2.3. Installing to the Cross-Compiler Environment If you want to compile other projects which depend on Gwenhywfar you will have to install some files to the cross-compilers environment. On Debian this is /usr/i586-mingw32/. Header files go to /usr/i586-mingw32/include and libraries must be installed to /usr/i586-mingw32/lib. Please don't install the DLLs, only the *.dll.a files, because those are the ones needed to compile depending projects (like AqBanking and Libchipcard). gwenhywfar-4.15.2beta/plugins/0000755000175000017500000000000012643267237013316 500000000000000gwenhywfar-4.15.2beta/plugins/ct/0000755000175000017500000000000012643267237013724 500000000000000gwenhywfar-4.15.2beta/plugins/ct/ohbci/0000755000175000017500000000000012643267237015010 500000000000000gwenhywfar-4.15.2beta/plugins/ct/ohbci/ohbci.c0000644000175000017500000022223412364015347016156 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /*#define DEBUG_OHBCI_MODULE*/ #include "ohbci_p.h" #include "i18n_l.h" #include #include #include #include #include #include #include #include /* DEBUG */ #include #include #include #include #include #include #include #include #include #include #include #ifdef OS_WIN32 # define ftruncate chsize #endif GWEN_INHERIT(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_OHBCI) GWEN_PLUGIN *ct_ohbci_factory(GWEN_PLUGIN_MANAGER *pm, const char *modName, const char *fileName) { GWEN_PLUGIN *pl; pl=GWEN_Crypt_TokenOHBCI_Plugin_new(pm, modName, fileName); assert(pl); return pl; } GWEN_PLUGIN *GWEN_Crypt_TokenOHBCI_Plugin_new(GWEN_PLUGIN_MANAGER *pm, const char *modName, const char *fileName) { GWEN_PLUGIN *pl; pl=GWEN_Crypt_Token_Plugin_new(pm, GWEN_Crypt_Token_Device_File, modName, fileName); /* set virtual functions */ GWEN_Crypt_Token_Plugin_SetCreateTokenFn(pl, GWEN_Crypt_TokenOHBCI_Plugin_CreateToken); GWEN_Crypt_Token_Plugin_SetCheckTokenFn(pl, GWEN_Crypt_TokenOHBCI_Plugin_CheckToken); return pl; } GWEN_CRYPT_TOKEN* GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_Plugin_CreateToken(GWEN_PLUGIN *pl, const char *name) { GWEN_PLUGIN_MANAGER *pm; GWEN_CRYPT_TOKEN *ct; assert(pl); pm=GWEN_Plugin_GetManager(pl); assert(pm); ct=GWEN_Crypt_TokenOHBCI_new(pm, name); assert(ct); return ct; } int GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_Plugin_CheckToken(GWEN_PLUGIN *pl, GWEN_BUFFER *name) { FILE *f; const char *p; char buffer[16]; int rv; if (GWEN_Buffer_GetUsedBytes(name)==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Empty name"); return GWEN_ERROR_BAD_NAME; } p=GWEN_Buffer_GetStart(name); if (access(p, F_OK)) { DBG_ERROR(GWEN_LOGDOMAIN, "File [%s] does not exist", p); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Info, "File does not exist"); return GWEN_ERROR_BAD_NAME; } if (access(p, R_OK | W_OK)) { DBG_ERROR(GWEN_LOGDOMAIN, "File exists but I have no writes on it"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Info, "File exists but I have no writes on it"); return GWEN_ERROR_IO; } f=fopen(p, "rb"); if (!f) { DBG_ERROR(GWEN_LOGDOMAIN, "File exists, I have all rights but still can't open it"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, "File exists, I have all rights but " "still can't open it"); return GWEN_ERROR_IO; } rv=fread(buffer, sizeof(buffer), 1, f); fclose(f); if (rv!=1) { DBG_INFO(GWEN_LOGDOMAIN, "This seems not to be an OpenHBCI keyfile"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Info, "This seems not to be an OpenHBCI keyfile"); return GWEN_ERROR_NOT_SUPPORTED; } if (rv!=1) { DBG_INFO(GWEN_LOGDOMAIN, "This seems not to be an OpenHBCI keyfile (bad size)"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, "This seems not to be an OpenHBCI keyfile " "(bad size)"); return GWEN_ERROR_NOT_SUPPORTED; } if ((unsigned char)(buffer[0])==GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM1) { DBG_INFO(GWEN_LOGDOMAIN, "Old OpenHBCI file detected"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, "Old OpenHBCI file detected"); return 0; } else if ((unsigned char)(buffer[0])==GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM2) { DBG_INFO(GWEN_LOGDOMAIN, "OpenHBCI file (<1.6) detected"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, "OpenHBCI file (<1.6) detected"); return 0; } else if ((unsigned char)(buffer[0])==GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM3) { if ((unsigned char)(buffer[3])==GWEN_CRYPT_TOKEN_OHBCI_TAG_HEADER && strncmp(buffer+6, GWEN_CRYPT_TOKEN_OHBCI_NAME, strlen(GWEN_CRYPT_TOKEN_OHBCI_NAME))==0) { DBG_INFO(GWEN_LOGDOMAIN, "New OpenHBCI file (>=1.6) detected"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, "New OpenHBCI file (>=1.6) detected"); return 0; } } DBG_INFO(GWEN_LOGDOMAIN, "This seems not to be an OpenHBCI keyfile"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, "This seems not to be an OpenHBCI keyfile"); return GWEN_ERROR_NOT_SUPPORTED; } GWEN_CRYPT_TOKEN *GWEN_Crypt_TokenOHBCI_new(GWEN_PLUGIN_MANAGER *pm, const char *name){ GWEN_CRYPT_TOKEN *ct; GWEN_CRYPT_TOKEN_OHBCI *lct; ct=GWEN_Crypt_TokenFile_new("ohbci", name); GWEN_NEW_OBJECT(GWEN_CRYPT_TOKEN_OHBCI, lct); GWEN_INHERIT_SETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_OHBCI, ct, lct, GWEN_Crypt_TokenOHBCI_FreeData); lct->mediumTag=GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM3; lct->vminor=GWEN_CRYPT_TOKEN_OHBCI_VMINOR; lct->cryptoTag=GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_BF; /* set virtual functions */ lct->openFn=GWEN_Crypt_Token_SetOpenFn(ct, GWEN_Crypt_TokenOHBCI_Open); lct->closeFn=GWEN_Crypt_Token_SetCloseFn(ct, GWEN_Crypt_TokenOHBCI_Close); lct->createFn=GWEN_Crypt_Token_SetCreateFn(ct, GWEN_Crypt_TokenOHBCI_Create); GWEN_Crypt_Token_SetChangePinFn(ct, GWEN_Crypt_TokenOHBCI_ChangePin); GWEN_Crypt_TokenFile_SetReadFn(ct, GWEN_Crypt_TokenOHBCI_Read); GWEN_Crypt_TokenFile_SetWriteFn(ct, GWEN_Crypt_TokenOHBCI_Write); return ct; } void GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_FreeData(void *bp, void *p) { GWEN_CRYPT_TOKEN_OHBCI *lct; lct=(GWEN_CRYPT_TOKEN_OHBCI*) p; memset(lct->password, 0, sizeof(lct->password)); GWEN_FREE_OBJECT(lct); } int GWEN_Crypt_TokenOHBCI__EnsurePassword(GWEN_CRYPT_TOKEN *ct, int trynum, int confirm, uint32_t gid){ GWEN_CRYPT_TOKEN_OHBCI *lct; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_OHBCI, ct); assert(lct); if (lct->passWordIsSet==0) { char password[64]; int rv; unsigned int pinLength=0; uint32_t flags; /* create key from password */ memset(lct->password, 0, sizeof(lct->password)); flags=0; if (trynum) flags|=GWEN_GUI_INPUT_FLAGS_RETRY; if (confirm) flags|=GWEN_GUI_INPUT_FLAGS_CONFIRM; rv=GWEN_Crypt_Token_GetPin(ct, GWEN_Crypt_PinType_Access, GWEN_Crypt_PinEncoding_Ascii, flags, (unsigned char*)password, GWEN_CRYPT_TOKEN_OHBCI_PINMINLENGTH, sizeof(password)-1, &pinLength, gid); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Error asking for PIN, aborting (%d)", rv); return rv; } if (strlen(password)cryptoTag==GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT) { DBG_NOTICE(GWEN_LOGDOMAIN, "New OpenHBCI file detected"); rv=GWEN_Crypt_KeyDataFromText(password, (unsigned char*)lct->password, 24); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not create key data from password (%d)", rv); return GWEN_ERROR_GENERIC; } } else if (lct->cryptoTag==GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_OLD) { DBG_NOTICE(GWEN_LOGDOMAIN, "Old OpenHBCI file detected"); rv=GWEN_Gui_KeyDataFromText_OpenSSL(password, (unsigned char*)lct->password, 16); if (rv) { if (rv==GWEN_ERROR_NOT_IMPLEMENTED) { DBG_ERROR(GWEN_LOGDOMAIN, "OpenSSL-style password creation not supported with Libgcrypt!"); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Could not create key data from password (%d)", rv); } return GWEN_ERROR_GENERIC; } } else if (lct->cryptoTag==GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_BF) { DBG_NOTICE(GWEN_LOGDOMAIN, "New OpenHBCI (1.6+) file detected"); /* same as above but for different key type */ rv=GWEN_Crypt_KeyDataFromText(password, (unsigned char*)lct->password, 16); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not create key data from password (%d)", rv); return GWEN_ERROR_GENERIC; } } else if (lct->cryptoTag==GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_TRESOR) { DBG_NOTICE(GWEN_LOGDOMAIN, "New OpenHBCI (1.8+) file detected"); strncpy(lct->password, password, sizeof(lct->password)-1); lct->password[sizeof(lct->password)-1]=0; } else { DBG_ERROR(GWEN_LOGDOMAIN, "Unexpected crypto tag %d", lct->cryptoTag); abort(); } lct->passWordIsSet=1; } return 0; } int GWEN_Crypt_TokenOHBCI__DecryptFile(GWEN_CRYPT_TOKEN *ct, GWEN_BUFFER *fbuf, int trynum, uint32_t gid){ GWEN_CRYPT_TOKEN_OHBCI *lct; GWEN_CRYPT_KEY *key; int err; char password[64]; GWEN_BUFFER *rawbuf; uint32_t size; int rv; unsigned int pinLength=0; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_OHBCI, ct); assert(lct); rv=GWEN_Crypt_TokenOHBCI__EnsurePassword(ct, trynum, 0, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } if (lct->cryptoTag==GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT) { key=GWEN_Crypt_KeyDes3K_fromData(GWEN_Crypt_CryptMode_Cbc, 24, (const uint8_t*)lct->password, 24); } else if (lct->cryptoTag==GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_OLD) { key=GWEN_Crypt_KeyDes3K_fromData(GWEN_Crypt_CryptMode_Cbc, 16, (const uint8_t*)lct->password, 16); } else if (lct->cryptoTag==GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_BF) { key=GWEN_Crypt_KeyBlowFish_fromData(GWEN_Crypt_CryptMode_Cbc, 16, (const uint8_t*)lct->password, 16); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Unknown crypt tag, should not occur"); abort(); } /* decrypt file */ DBG_INFO(GWEN_LOGDOMAIN, "Decrypting file"); size=GWEN_Buffer_GetUsedBytes(fbuf); rawbuf=GWEN_Buffer_new(0, size, 0, 1); GWEN_Buffer_Rewind(fbuf); err=GWEN_Crypt_Key_Decipher(key, (const uint8_t*)GWEN_Buffer_GetStart(fbuf), size, (uint8_t*)GWEN_Buffer_GetStart(rawbuf), &size); if (err) { DBG_INFO_ERR(GWEN_LOGDOMAIN, err); GWEN_Buffer_free(rawbuf); GWEN_Crypt_Key_free(key); if (pinLength) GWEN_Crypt_Token_SetPinStatus(ct, GWEN_Crypt_PinType_Access, GWEN_Crypt_PinEncoding_Ascii, (trynum ?GWEN_GUI_INPUT_FLAGS_RETRY:0), (unsigned char*)password, pinLength, 0, gid); memset(password, 0, sizeof(password)); lct->passWordIsSet=0; return GWEN_ERROR_BAD_PIN; } /* advance buffer pointers since we wrote directly to the buffer */ GWEN_Buffer_IncrementPos(rawbuf, size); GWEN_Buffer_AdjustUsedBytes(rawbuf); /* unpadd raw data */ DBG_INFO(GWEN_LOGDOMAIN, "Unpadding file"); if (GWEN_Padd_UnpaddWithAnsiX9_23(rawbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not unpadd keyfile, i.e. wrong PIN"); GWEN_Buffer_free(rawbuf); GWEN_Crypt_Key_free(key); /* TODO: Set Pin status */ lct->passWordIsSet=0; if (pinLength) GWEN_Crypt_Token_SetPinStatus(ct, GWEN_Crypt_PinType_Access, GWEN_Crypt_PinEncoding_Ascii, (trynum?GWEN_GUI_INPUT_FLAGS_RETRY:0), (unsigned char*)password, pinLength, 0, gid); memset(password, 0, sizeof(password)); return GWEN_ERROR_BAD_PIN; } GWEN_Crypt_Key_free(key); /* parse raw data */ DBG_INFO(GWEN_LOGDOMAIN, "Parsing file"); GWEN_Buffer_Rewind(rawbuf); rv=GWEN_Crypt_TokenOHBCI__Decode(ct, rawbuf); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(rawbuf); /* Set Pin status */ if (pinLength) GWEN_Crypt_Token_SetPinStatus(ct, GWEN_Crypt_PinType_Access, GWEN_Crypt_PinEncoding_Ascii, (trynum ?GWEN_GUI_INPUT_FLAGS_RETRY:0), (unsigned char*)password, pinLength, 0, gid); memset(password, 0, sizeof(password)); lct->passWordIsSet=0; return GWEN_ERROR_BAD_PIN; } GWEN_Buffer_free(rawbuf); /* Set Pin status */ if (pinLength) GWEN_Crypt_Token_SetPinStatus(ct, GWEN_Crypt_PinType_Access, GWEN_Crypt_PinEncoding_Ascii, (trynum?GWEN_GUI_INPUT_FLAGS_RETRY:0), (unsigned char*)password, pinLength, 1, gid); memset(password, 0, sizeof(password)); return 0; } int GWEN_Crypt_TokenOHBCI__DecryptTresor(GWEN_CRYPT_TOKEN *ct, GWEN_BUFFER *fbuf, int trynum, uint32_t gid){ GWEN_CRYPT_TOKEN_OHBCI *lct; GWEN_BUFFER *rawbuf; uint32_t size; int rv; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_OHBCI, ct); assert(lct); rv=GWEN_Crypt_TokenOHBCI__EnsurePassword(ct, trynum, 0, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } size=GWEN_Buffer_GetUsedBytes(fbuf); rawbuf=GWEN_Buffer_new(0, size, 0, 1); GWEN_Buffer_Rewind(fbuf); rv=GWEN_SmallTresor_Decrypt((const uint8_t*) GWEN_Buffer_GetStart(fbuf), size, lct->password, rawbuf, GWEN_CRYPT_TOKEN_OHBCI_TRESOR_PWD_ITERATIONS, GWEN_CRYPT_TOKEN_OHBCI_TRESOR_CRYPT_ITERATIONS); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(rawbuf); if (lct->password[0]) GWEN_Crypt_Token_SetPinStatus(ct, GWEN_Crypt_PinType_Access, GWEN_Crypt_PinEncoding_Ascii, (trynum?GWEN_GUI_INPUT_FLAGS_RETRY:0), (unsigned char*)lct->password, strlen(lct->password), 0, gid); memset(lct->password, 0, sizeof(lct->password)); lct->passWordIsSet=0; return GWEN_ERROR_BAD_PIN; } /* parse raw data */ DBG_INFO(GWEN_LOGDOMAIN, "Parsing file"); GWEN_Buffer_Rewind(rawbuf); rv=GWEN_Crypt_TokenOHBCI__Decode(ct, rawbuf); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(rawbuf); /* Set Pin status */ if (lct->password[0]) GWEN_Crypt_Token_SetPinStatus(ct, GWEN_Crypt_PinType_Access, GWEN_Crypt_PinEncoding_Ascii, (trynum?GWEN_GUI_INPUT_FLAGS_RETRY:0), (unsigned char*)lct->password, strlen(lct->password), 0, gid); memset(lct->password, 0, sizeof(lct->password)); lct->passWordIsSet=0; return GWEN_ERROR_BAD_PIN; } GWEN_Buffer_free(rawbuf); /* Set Pin status */ if (lct->password[0]) GWEN_Crypt_Token_SetPinStatus(ct, GWEN_Crypt_PinType_Access, GWEN_Crypt_PinEncoding_Ascii, (trynum?GWEN_GUI_INPUT_FLAGS_RETRY:0), (unsigned char*)lct->password, strlen(lct->password), 1, gid); return 0; } int GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_Read(GWEN_CRYPT_TOKEN *ct, int fd, uint32_t gid){ GWEN_CRYPT_TOKEN_OHBCI *lct; GWEN_BUFFER *rbuf; GWEN_BUFFER *fbuf; unsigned char c; GWEN_TAG16 *tlv; int i; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_OHBCI, ct); assert(lct); rbuf=GWEN_Buffer_new(0, 1024, 0, 1); /* read file into rbuf */ while(1) { char buffer[256]; int rv; rv=read(fd, buffer, sizeof(buffer)); if (rv==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "read: %s", strerror(errno)); return -1; } if (rv==0) break; GWEN_Buffer_AppendBytes(rbuf, buffer, rv); } if (GWEN_Buffer_GetUsedBytes(rbuf)<3) { DBG_ERROR(GWEN_LOGDOMAIN, "This seems not to be an OpenHBCI key file"); GWEN_Buffer_free(rbuf); return -1; } /* check whether this is a known OpenHBCI(2) keyfile */ GWEN_Buffer_Rewind(rbuf); c=*GWEN_Buffer_GetStart(rbuf); if (c!=GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM1 && c!=GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM2 && c!=GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM3) { DBG_ERROR(GWEN_LOGDOMAIN, "This seems not to be an OpenHBCI key file"); GWEN_Buffer_free(rbuf); return -1; } lct->mediumTag=c; lct->cryptoTag=0; tlv=GWEN_Tag16_fromBuffer(rbuf, 0); if (!tlv) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad file data"); GWEN_Buffer_free(rbuf); return -1; } fbuf=GWEN_Buffer_new(0, GWEN_Tag16_GetTagLength(tlv), 0, 1); GWEN_Buffer_AppendBytes(fbuf, GWEN_Tag16_GetTagData(tlv), GWEN_Tag16_GetTagLength(tlv)); GWEN_Buffer_Rewind(fbuf); GWEN_Buffer_free(rbuf); GWEN_Tag16_free(tlv); /* now fbuf contains the data from the crypt TLV */ for (i=0;;i++) { int rv; if (i>GWEN_CRYPT_TOKEN_OHBCI_MAX_PIN_TRY) { DBG_ERROR(GWEN_LOGDOMAIN, "No valid PIN within %d tries, giving up", i); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Critical, I18N("No valid PIN (tried too often), " "aborting.")); GWEN_Buffer_free(fbuf); return GWEN_ERROR_ABORTED; } switch(lct->mediumTag) { case GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM1: lct->cryptoTag=GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_OLD; rv=GWEN_Crypt_TokenOHBCI__DecryptFile(ct, fbuf, i, gid); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM2: lct->cryptoTag=GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT; rv=GWEN_Crypt_TokenOHBCI__DecryptFile(ct, fbuf, i, gid); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM3: lct->cryptoTag=0; rv=GWEN_Crypt_TokenOHBCI__DecryptFile16(ct, fbuf, i, gid); break; default: rv = GWEN_ERROR_NOT_SUPPORTED; /* otherwise 'rv' might be uninitialized */ } if (rv==0) break; else { switch(rv) { case GWEN_ERROR_USER_ABORTED: DBG_INFO(GWEN_LOGDOMAIN, "Aborted by user"); GWEN_Buffer_free(fbuf); return rv; case GWEN_ERROR_BAD_PIN: DBG_ERROR(GWEN_LOGDOMAIN, "Bad pin."); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Critical, I18N("Bad PIN, will try again")); break; default: DBG_INFO(GWEN_LOGDOMAIN, "Other error, giving up"); GWEN_Buffer_free(fbuf); return rv; } } } /* for */ GWEN_Buffer_free(fbuf); lct->justCreated=0; return 0; } void GWEN_Crypt_TokenOHBCI__DecodeKey(GWEN_CRYPT_TOKEN *ct, GWEN_TAG16 *keyTlv, GWEN_DB_NODE *dbKeys, const char *keyName) { GWEN_BUFFER *dbuf; const char *p; int size; GWEN_DB_NODE *node; uint32_t flags; const char defaultExpo[3]={0x01, 0x00, 0x01}; p=GWEN_Tag16_GetTagData(keyTlv); size=GWEN_Tag16_GetTagLength(keyTlv); if (size<2) { DBG_ERROR(GWEN_LOGDOMAIN, "Tag too small to contain any subtag"); return; } /* create static buffer */ dbuf=GWEN_Buffer_new((char*)p, size, size, 0); GWEN_Buffer_SubMode(dbuf, GWEN_BUFFER_MODE_DYNAMIC); node=GWEN_DB_GetGroup(dbKeys, GWEN_DB_FLAGS_DEFAULT, keyName); assert(node); /* preset */ GWEN_DB_SetCharValue(node, GWEN_DB_FLAGS_OVERWRITE_VARS, "cryptAlgoId", "rsa"); GWEN_DB_SetIntValue(node, GWEN_DB_FLAGS_OVERWRITE_VARS, "keySize", 96); GWEN_DB_SetBinValue(node, GWEN_DB_FLAGS_OVERWRITE_VARS, "rsa/e", defaultExpo, sizeof(defaultExpo)); flags=0; GWEN_DB_SetIntValue(node, GWEN_DB_FLAGS_OVERWRITE_VARS, "flags", flags); while(GWEN_Buffer_GetBytesLeft(dbuf)) { const char *pp; char *p; GWEN_TAG16 *tlv; unsigned int l; tlv=GWEN_Tag16_fromBuffer(dbuf, 0); if (!tlv) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad file (no TLV)"); return; } p=0; pp=(const char*)GWEN_Tag16_GetTagData(tlv); l=GWEN_Tag16_GetTagLength(tlv); if (pp && l) { p=(char*)malloc(l+1); assert(p); memmove(p, pp, l); p[l]=0; } switch(GWEN_Tag16_GetTagType(tlv)) { case GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_ISPUBLIC: /* ignore this tag, since it is buggy in OpenHBCI(2) */ break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_ISCRYPT: /* no longer supported since 1.8*/ break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_OWNER: GWEN_DB_SetCharValue(node, GWEN_DB_FLAGS_OVERWRITE_VARS, "keyOwner", p); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_VERSION: assert(p); GWEN_DB_SetIntValue(node, GWEN_DB_FLAGS_OVERWRITE_VARS, "keyVersion", atoi(p)); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_NUMBER: assert(p); GWEN_DB_SetIntValue(node, GWEN_DB_FLAGS_OVERWRITE_VARS, "keyNumber", atoi(p)); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_MODULUS: if (p && l) GWEN_DB_SetBinValue(node, GWEN_DB_FLAGS_OVERWRITE_VARS, "rsa/n", p, l); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_EXP_OLD: DBG_INFO(GWEN_LOGDOMAIN, "Ignoring old exponent (%d), keeping default", l); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_EXP: if (p && l) GWEN_DB_SetBinValue(node, GWEN_DB_FLAGS_OVERWRITE_VARS, "rsa/e", p, l); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_N: if (p && l) GWEN_DB_SetBinValue(node, GWEN_DB_FLAGS_OVERWRITE_VARS, "rsa/n", p, l); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_P: if (p && l) GWEN_DB_SetBinValue(node, GWEN_DB_FLAGS_OVERWRITE_VARS, "rsa/p", p, l); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_Q: if (p && l) GWEN_DB_SetBinValue(node, GWEN_DB_FLAGS_OVERWRITE_VARS, "rsa/q", p, l); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_D: if (p && l) GWEN_DB_SetBinValue(node, GWEN_DB_FLAGS_OVERWRITE_VARS, "rsa/d", p, l); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_LEN: if (p && l) { int i; /* fix for some versions which stored keysize*8 */ i=atoi(p); if (i>512) i/=8; GWEN_DB_SetIntValue(node, GWEN_DB_FLAGS_OVERWRITE_VARS, "keySize", i); } break; default: DBG_WARN(GWEN_LOGDOMAIN, "Unknown tag %02x", GWEN_Tag16_GetTagType(tlv)); break; } /* switch */ GWEN_Tag16_free(tlv); free(p); } /* while */ GWEN_Buffer_free(dbuf); } int GWEN_Crypt_TokenOHBCI__Decode(GWEN_CRYPT_TOKEN *ct, GWEN_BUFFER *dbuf) { GWEN_CRYPT_TOKEN_OHBCI *lct; GWEN_TAG16 *tlv; int rv; GWEN_DB_NODE *dbKeys; GWEN_DB_NODE *dbKey; GWEN_CRYPT_TOKEN_CONTEXT *fct; const char *peerId=0; uint32_t localSignSeq=0; uint32_t remoteSignSeq=0; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_OHBCI, ct); assert(lct); tlv=GWEN_Tag16_fromBuffer(dbuf, 0); GWEN_Buffer_Rewind(dbuf); if (!tlv) { DBG_ERROR(GWEN_LOGDOMAIN, "File doesn't contain a TLV: Either bad pin or bad file"); return -1; } if (GWEN_Tag16_GetTagType(tlv)!=GWEN_CRYPT_TOKEN_OHBCI_TAG_HEADER && GWEN_Tag16_GetTagType(tlv)!=GWEN_CRYPT_TOKEN_OHBCI_TAG_VERSION_MAJOR) { DBG_ERROR(GWEN_LOGDOMAIN, "File doesn't start with version info or header."); GWEN_Tag16_free(tlv); return -1; } GWEN_Tag16_free(tlv); fct=GWEN_CTF_Context_new(); /* now parse it */ dbKeys=GWEN_DB_Group_new("keys"); while(GWEN_Buffer_GetBytesLeft(dbuf)) { int i; const char *pp; char *p; unsigned int l; tlv=GWEN_Tag16_fromBuffer(dbuf, 0); if (!tlv) { DBG_ERROR(GWEN_LOGDOMAIN, "File doesn't contain a TLV: Either bad pin or bad file"); GWEN_Crypt_Token_Context_free(fct); return GWEN_ERROR_BAD_PIN; } p=0; pp=(const char*)GWEN_Tag16_GetTagData(tlv); l=GWEN_Tag16_GetTagLength(tlv); if (pp && l) { p=(char*)malloc(l+1); assert(p); memmove(p, pp, l); p[l]=0; } switch(GWEN_Tag16_GetTagType(tlv)) { case GWEN_CRYPT_TOKEN_OHBCI_TAG_VERSION_MAJOR: assert(p); i=atoi(p); DBG_INFO(GWEN_LOGDOMAIN, "OHBCI: Major version: %d", i); if (i!=GWEN_CRYPT_TOKEN_OHBCI_VMAJOR) { DBG_ERROR(GWEN_LOGDOMAIN, "Unsupported keyfile version (%d)", i); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Warning, "Basically this file type is supported.\n" "However, the major versions do not match,\n" "so this particular version is not supported"); free(p); GWEN_Tag16_free(tlv); GWEN_Crypt_Token_Context_free(fct); return -1; } break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_VERSION_MINOR: assert(p); i=atoi(p); DBG_INFO(GWEN_LOGDOMAIN, "OHBCI: Minor version: %d", i); if (i>GWEN_CRYPT_TOKEN_OHBCI_VMINOR) { DBG_ERROR(GWEN_LOGDOMAIN, "Keyfile version is higher than mine (%d).\n", i); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Warning, "This key file file has been created with a " "newer library version.\n"); free(p); GWEN_Tag16_free(tlv); GWEN_Crypt_Token_Context_free(fct); return GWEN_ERROR_NOT_SUPPORTED; } else if (ivminor=i; break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_SEQ: assert(p); localSignSeq=atoi(p); if (localSignSeq==0) localSignSeq=1; break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_ID: GWEN_Crypt_Token_Context_SetUserId(fct, p); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_COUNTRY: /* ignore */ break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_CODE: GWEN_Crypt_Token_Context_SetServiceId(fct, p); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_SYSTEMID: GWEN_Crypt_Token_Context_SetSystemId(fct, p); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_SERVER_ADDR: /* new in 1.4 */ GWEN_Crypt_Token_Context_SetAddress(fct, p); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_SERVER_PORT: /* new in 1.4 */ GWEN_Crypt_Token_Context_SetPort(fct, atoi(p)); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_REMOTE_SEQ: /* new in 1.4 */ remoteSignSeq=atoi(p); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PUBSIGNKEY: case GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PRIVSIGNKEY: GWEN_Crypt_TokenOHBCI__DecodeKey(ct, tlv, dbKeys, "localSignKey"); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PUBCRYPTKEY: case GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PRIVCRYPTKEY: GWEN_Crypt_TokenOHBCI__DecodeKey(ct, tlv, dbKeys, "localCryptKey"); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_PUBSIGNKEY: GWEN_Crypt_TokenOHBCI__DecodeKey(ct, tlv, dbKeys, "remoteSignKey"); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_PUBCRYPTKEY: GWEN_Crypt_TokenOHBCI__DecodeKey(ct, tlv, dbKeys, "remoteCryptKey"); break; /* handled again since 1.8 */ case GWEN_CRYPT_TOKEN_OHBCI_TAG_TEMP_PUBSIGNKEY: case GWEN_CRYPT_TOKEN_OHBCI_TAG_TEMP_PRIVSIGNKEY: GWEN_Crypt_TokenOHBCI__DecodeKey(ct, tlv, dbKeys, "tempLocalSignKey"); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_TEMP_PUBCRYPTKEY: case GWEN_CRYPT_TOKEN_OHBCI_TAG_TEMP_PRIVCRYPTKEY: DBG_INFO(GWEN_LOGDOMAIN, "Ignoring temporary crypt keys"); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PRIVAUTHKEY: GWEN_Crypt_TokenOHBCI__DecodeKey(ct, tlv, dbKeys, "localAuthKey"); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_PUBAUTHKEY: GWEN_Crypt_TokenOHBCI__DecodeKey(ct, tlv, dbKeys, "remoteAuthKey"); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_HEADER: /* ignore header here */ break; default: DBG_WARN(GWEN_LOGDOMAIN, "Unknown tag %02x", GWEN_Tag16_GetTagType(tlv)); break; } /* switch */ GWEN_Tag16_free(tlv); free(p); } /* while */ /* now check for keys */ rv=0; /* local sign key */ dbKey=GWEN_DB_GetGroup(dbKeys, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "localSignKey"); if (dbKey) { GWEN_CRYPT_KEY *key; GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "rsa/isPublic", 0); key=GWEN_Crypt_KeyRsa_fromDb(dbKey); if (!key) { rv=-1; DBG_ERROR(GWEN_LOGDOMAIN, "Bad key format"); } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; uint8_t kbuf[GWEN_CRYPT_KEYRSA_MAX_KEYLENGTH]; uint32_t klen; /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0001, /* local sign key */ GWEN_Crypt_Key_GetCryptAlgoId(key), GWEN_Crypt_Key_GetKeySize(key)); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Local Sign Key")); /* get modulus */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetModulus(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No modulus for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetModulus(ki, kbuf, klen); /* get exponent */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetExponent(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No exponent for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetExponent(ki, kbuf, klen); GWEN_Crypt_Token_KeyInfo_SetSignCounter(ki, localSignSeq); GWEN_Crypt_Token_KeyInfo_SetKeyNumber(ki, GWEN_Crypt_Key_GetKeyNumber(key)); GWEN_Crypt_Token_KeyInfo_SetKeyVersion(ki, GWEN_Crypt_Key_GetKeyVersion(key)); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASSIGNCOUNTER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY | GWEN_CRYPT_TOKEN_KEYFLAGS_CANSIGN); GWEN_CTF_Context_SetLocalSignKeyInfo(fct, ki); /* set key */ if (GWEN_Crypt_Token_GetModes(ct) & GWEN_CRYPT_TOKEN_MODE_DIRECT_SIGN){ DBG_INFO(GWEN_LOGDOMAIN, "Adding mode \"direct sign\" to key"); GWEN_Crypt_KeyRsa_AddFlags(key, GWEN_CRYPT_KEYRSA_FLAGS_DIRECTSIGN); } GWEN_CTF_Context_SetLocalSignKey(fct, key); } } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0001, /* local sign key */ GWEN_Crypt_CryptAlgoId_Rsa, 96); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Local Sign Key")); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY | GWEN_CRYPT_TOKEN_KEYFLAGS_CANSIGN); GWEN_CTF_Context_SetLocalSignKeyInfo(fct, ki); } /* local crypt key */ dbKey=GWEN_DB_GetGroup(dbKeys, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "localCryptKey"); if (dbKey) { GWEN_CRYPT_KEY *key; GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "rsa/isPublic", 0); key=GWEN_Crypt_KeyRsa_fromDb(dbKey); if (!key) { rv=-1; DBG_ERROR(GWEN_LOGDOMAIN, "Bad key format"); } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; uint8_t kbuf[GWEN_CRYPT_KEYRSA_MAX_KEYLENGTH]; uint32_t klen; /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0002, /* local crypt key */ GWEN_Crypt_Key_GetCryptAlgoId(key), GWEN_Crypt_Key_GetKeySize(key)); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Local Crypt Key")); /* get modulus */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetModulus(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No modulus for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetModulus(ki, kbuf, klen); /* get exponent */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetExponent(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No exponent for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetExponent(ki, kbuf, klen); GWEN_Crypt_Token_KeyInfo_SetKeyNumber(ki, GWEN_Crypt_Key_GetKeyNumber(key)); GWEN_Crypt_Token_KeyInfo_SetKeyVersion(ki, GWEN_Crypt_Key_GetKeyVersion(key)); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANENCIPHER | GWEN_CRYPT_TOKEN_KEYFLAGS_CANDECIPHER); GWEN_CTF_Context_SetLocalCryptKeyInfo(fct, ki); /* set key */ GWEN_CTF_Context_SetLocalCryptKey(fct, key); } } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0002, /* local crypt key */ GWEN_Crypt_CryptAlgoId_Rsa, 96); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Local Crypt Key")); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANENCIPHER | GWEN_CRYPT_TOKEN_KEYFLAGS_CANDECIPHER); GWEN_CTF_Context_SetLocalCryptKeyInfo(fct, ki); } /* remote sign key */ dbKey=GWEN_DB_GetGroup(dbKeys, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "remoteSignKey"); if (dbKey) { GWEN_CRYPT_KEY *key; GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "rsa/isPublic", 1); key=GWEN_Crypt_KeyRsa_fromDb(dbKey); if (!key) { rv=-1; DBG_ERROR(GWEN_LOGDOMAIN, "Bad key format"); } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; uint8_t kbuf[GWEN_CRYPT_KEYRSA_MAX_KEYLENGTH]; uint32_t klen; /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0003, /* remote sign key */ GWEN_Crypt_Key_GetCryptAlgoId(key), GWEN_Crypt_Key_GetKeySize(key)); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Remote Sign Key")); /* get modulus */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetModulus(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No modulus for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetModulus(ki, kbuf, klen); /* get exponent */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetExponent(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No exponent for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetExponent(ki, kbuf, klen); GWEN_Crypt_Token_KeyInfo_SetSignCounter(ki, remoteSignSeq); GWEN_Crypt_Token_KeyInfo_SetKeyNumber(ki, GWEN_Crypt_Key_GetKeyNumber(key)); GWEN_Crypt_Token_KeyInfo_SetKeyVersion(ki, GWEN_Crypt_Key_GetKeyVersion(key)); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASSIGNCOUNTER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY); GWEN_CTF_Context_SetRemoteSignKeyInfo(fct, ki); /* set key */ if (GWEN_Crypt_Token_GetModes(ct) & GWEN_CRYPT_TOKEN_MODE_DIRECT_SIGN) GWEN_Crypt_KeyRsa_AddFlags(key, GWEN_CRYPT_KEYRSA_FLAGS_DIRECTSIGN); GWEN_CTF_Context_SetRemoteSignKey(fct, key); } } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0003, /* remote sign key */ GWEN_Crypt_CryptAlgoId_Rsa, 96); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Remote Sign Key")); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY); GWEN_CTF_Context_SetRemoteSignKeyInfo(fct, ki); } /* remote crypt key */ dbKey=GWEN_DB_GetGroup(dbKeys, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "remoteCryptKey"); if (dbKey) { GWEN_CRYPT_KEY *key; peerId=GWEN_DB_GetCharValue(dbKey, "keyOwner", 0, NULL); if (peerId) { DBG_INFO(0, "Got Peer Id [%s]", peerId); } GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "rsa/isPublic", 1); key=GWEN_Crypt_KeyRsa_fromDb(dbKey); if (!key) { rv=-1; DBG_ERROR(GWEN_LOGDOMAIN, "Bad key format"); } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; uint8_t kbuf[GWEN_CRYPT_KEYRSA_MAX_KEYLENGTH]; uint32_t klen; /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0004, /* remote crypt key */ GWEN_Crypt_Key_GetCryptAlgoId(key), GWEN_Crypt_Key_GetKeySize(key)); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Remote Crypt Key")); /* get modulus */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetModulus(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No modulus for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetModulus(ki, kbuf, klen); /* get exponent */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetExponent(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No exponent for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetExponent(ki, kbuf, klen); GWEN_Crypt_Token_KeyInfo_SetKeyNumber(ki, GWEN_Crypt_Key_GetKeyNumber(key)); GWEN_Crypt_Token_KeyInfo_SetKeyVersion(ki, GWEN_Crypt_Key_GetKeyVersion(key)); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANENCIPHER); GWEN_CTF_Context_SetRemoteCryptKeyInfo(fct, ki); /* set key */ GWEN_CTF_Context_SetRemoteCryptKey(fct, key); } } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0004, /* remote crypt key */ GWEN_Crypt_CryptAlgoId_Rsa, 96); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Remote Crypt Key")); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANENCIPHER); GWEN_CTF_Context_SetRemoteCryptKeyInfo(fct, ki); } /* local auth key */ dbKey=GWEN_DB_GetGroup(dbKeys, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "localAuthKey"); if (dbKey) { GWEN_CRYPT_KEY *key; GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "rsa/isPublic", 0); key=GWEN_Crypt_KeyRsa_fromDb(dbKey); if (!key) { rv=-1; DBG_ERROR(GWEN_LOGDOMAIN, "Bad key format"); } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; uint8_t kbuf[GWEN_CRYPT_KEYRSA_MAX_KEYLENGTH]; uint32_t klen; /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0005, /* local auth key */ GWEN_Crypt_Key_GetCryptAlgoId(key), GWEN_Crypt_Key_GetKeySize(key)); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Local Auth Key")); /* get modulus */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetModulus(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No modulus for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetModulus(ki, kbuf, klen); /* get exponent */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetExponent(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No exponent for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetExponent(ki, kbuf, klen); GWEN_Crypt_Token_KeyInfo_SetKeyNumber(ki, GWEN_Crypt_Key_GetKeyNumber(key)); GWEN_Crypt_Token_KeyInfo_SetKeyVersion(ki, GWEN_Crypt_Key_GetKeyVersion(key)); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANSIGN | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY); GWEN_CTF_Context_SetLocalAuthKeyInfo(fct, ki); /* set key */ if (GWEN_Crypt_Token_GetModes(ct) & GWEN_CRYPT_TOKEN_MODE_DIRECT_SIGN){ DBG_INFO(GWEN_LOGDOMAIN, "Adding mode \"direct sign\" to key"); GWEN_Crypt_KeyRsa_AddFlags(key, GWEN_CRYPT_KEYRSA_FLAGS_DIRECTSIGN); } GWEN_CTF_Context_SetLocalAuthKey(fct, key); } } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0005, /* local auth key */ GWEN_Crypt_CryptAlgoId_Rsa, 96); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Local Auth Key")); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANSIGN | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY); GWEN_CTF_Context_SetLocalAuthKeyInfo(fct, ki); } /* remote auth key */ dbKey=GWEN_DB_GetGroup(dbKeys, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "remoteAuthKey"); if (dbKey) { GWEN_CRYPT_KEY *key; GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "rsa/isPublic", 1); key=GWEN_Crypt_KeyRsa_fromDb(dbKey); if (!key) { rv=-1; DBG_ERROR(GWEN_LOGDOMAIN, "Bad key format"); } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; uint8_t kbuf[GWEN_CRYPT_KEYRSA_MAX_KEYLENGTH]; uint32_t klen; /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0006, /* remote auth key */ GWEN_Crypt_Key_GetCryptAlgoId(key), GWEN_Crypt_Key_GetKeySize(key)); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Remote Auth Key")); /* get modulus */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetModulus(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No modulus for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetModulus(ki, kbuf, klen); /* get exponent */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetExponent(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No exponent for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetExponent(ki, kbuf, klen); GWEN_Crypt_Token_KeyInfo_SetKeyNumber(ki, GWEN_Crypt_Key_GetKeyNumber(key)); GWEN_Crypt_Token_KeyInfo_SetKeyVersion(ki, GWEN_Crypt_Key_GetKeyVersion(key)); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY); GWEN_CTF_Context_SetRemoteAuthKeyInfo(fct, ki); /* set key */ if (GWEN_Crypt_Token_GetModes(ct) & GWEN_CRYPT_TOKEN_MODE_DIRECT_SIGN){ DBG_INFO(GWEN_LOGDOMAIN, "Adding mode \"direct sign\" to key"); GWEN_Crypt_KeyRsa_AddFlags(key, GWEN_CRYPT_KEYRSA_FLAGS_DIRECTSIGN); } GWEN_CTF_Context_SetRemoteAuthKey(fct, key); } } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0006, /* remote auth key */ GWEN_Crypt_CryptAlgoId_Rsa, 96); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Remote Auth Key")); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY); GWEN_CTF_Context_SetRemoteAuthKeyInfo(fct, ki); } /* temp local sign key */ dbKey=GWEN_DB_GetGroup(dbKeys, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "tempLocalSignKey"); if (dbKey) { GWEN_CRYPT_KEY *key; GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "rsa/isPublic", 0); key=GWEN_Crypt_KeyRsa_fromDb(dbKey); if (!key) { rv=-1; DBG_ERROR(GWEN_LOGDOMAIN, "Bad key format"); } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; uint8_t kbuf[GWEN_CRYPT_KEYRSA_MAX_KEYLENGTH]; uint32_t klen; /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0007, /* temp local sign key */ GWEN_Crypt_Key_GetCryptAlgoId(key), GWEN_Crypt_Key_GetKeySize(key)); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Temporary Local Sign Key")); /* get modulus */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetModulus(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No modulus for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetModulus(ki, kbuf, klen); /* get exponent */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetExponent(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No exponent for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetExponent(ki, kbuf, klen); GWEN_Crypt_Token_KeyInfo_SetKeyNumber(ki, GWEN_Crypt_Key_GetKeyNumber(key)); GWEN_Crypt_Token_KeyInfo_SetKeyVersion(ki, GWEN_Crypt_Key_GetKeyVersion(key)); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASSIGNCOUNTER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY | GWEN_CRYPT_TOKEN_KEYFLAGS_CANSIGN); GWEN_CTF_Context_SetTempLocalSignKeyInfo(fct, ki); /* set key */ if (GWEN_Crypt_Token_GetModes(ct) & GWEN_CRYPT_TOKEN_MODE_DIRECT_SIGN){ DBG_INFO(GWEN_LOGDOMAIN, "Adding mode \"direct sign\" to key"); GWEN_Crypt_KeyRsa_AddFlags(key, GWEN_CRYPT_KEYRSA_FLAGS_DIRECTSIGN); } GWEN_CTF_Context_SetTempLocalSignKey(fct, key); } } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0007, /* temp local sign key */ GWEN_Crypt_CryptAlgoId_Rsa, 96); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Temporary Local Sign Key")); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY | GWEN_CRYPT_TOKEN_KEYFLAGS_CANSIGN); GWEN_CTF_Context_SetTempLocalSignKeyInfo(fct, ki); } /* finalize user and file context */ GWEN_Crypt_Token_Context_SetId(fct, 1); /* only one user */ GWEN_Crypt_Token_Context_SetPeerId(fct, peerId); /* only one user */ GWEN_Crypt_Token_Context_SetSignKeyId(fct, 0x01); GWEN_Crypt_Token_Context_SetDecipherKeyId(fct, 0x02); GWEN_Crypt_Token_Context_SetVerifyKeyId(fct, 0x03); GWEN_Crypt_Token_Context_SetEncipherKeyId(fct, 0x04); GWEN_Crypt_Token_Context_SetAuthSignKeyId(fct, 0x05); GWEN_Crypt_Token_Context_SetAuthVerifyKeyId(fct, 0x06); GWEN_Crypt_Token_Context_SetTempSignKeyId(fct, 0x07); /* clear context list, add new context */ GWEN_Crypt_TokenFile_AddContext(ct, fct); GWEN_DB_Group_free(dbKeys); return rv; } int GWEN_Crypt_TokenOHBCI__DecryptFile16(GWEN_CRYPT_TOKEN *ct, GWEN_BUFFER *dbuf, int tryNum, uint32_t gid) { GWEN_CRYPT_TOKEN_OHBCI *lct; GWEN_TAG16 *tlv; int rv; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_OHBCI, ct); assert(lct); tlv=GWEN_Tag16_fromBuffer(dbuf, 0); GWEN_Buffer_Rewind(dbuf); if (!tlv) { DBG_ERROR(GWEN_LOGDOMAIN, "File doesn't contain a TLV: Either bad pin or bad file"); return GWEN_ERROR_BAD_PIN; } if (GWEN_Tag16_GetTagType(tlv)!=GWEN_CRYPT_TOKEN_OHBCI_TAG_HEADER) { DBG_ERROR(GWEN_LOGDOMAIN, "File doesn't start with header tag."); GWEN_Tag16_free(tlv); return GWEN_ERROR_GENERIC; } GWEN_Tag16_free(tlv); /* now parse it */ while(GWEN_Buffer_GetBytesLeft(dbuf)) { int i; const char *pp; char *p; unsigned int l; tlv=GWEN_Tag16_fromBuffer(dbuf, 0); if (!tlv) { DBG_ERROR(GWEN_LOGDOMAIN, "File doesn't contain a TLV: Either bad pin or bad file"); return GWEN_ERROR_BAD_PIN; } p=0; pp=(const char*)GWEN_Tag16_GetTagData(tlv); l=GWEN_Tag16_GetTagLength(tlv); if (pp && l) { p=(char*)malloc(l+1); assert(p); memmove(p, pp, l); p[l]=0; } switch(GWEN_Tag16_GetTagType(tlv)) { case GWEN_CRYPT_TOKEN_OHBCI_TAG_HEADER: if (strcasecmp(p, GWEN_CRYPT_TOKEN_OHBCI_NAME)!=0) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad header (%s)", p); free(p); GWEN_Tag16_free(tlv); return -1; } break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_VERSION_MAJOR: i=atoi(p); if (i!=GWEN_CRYPT_TOKEN_OHBCI_VMAJOR) { DBG_ERROR(GWEN_LOGDOMAIN, "Unsupported keyfile version (%d)", i); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Warning, "Basically this file type is supported.\n" "However, the major versions do not match,\n" "so this particular version is not supported"); free(p); GWEN_Tag16_free(tlv); return -1; } break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_VERSION_MINOR: i=atoi(p); if (i>GWEN_CRYPT_TOKEN_OHBCI_VMINOR) { DBG_WARN(GWEN_LOGDOMAIN, "Keyfile version is higher than mine (%d).\n", i); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Warning, "This key file file has been created with a " "newer library version.\n"); free(p); GWEN_Tag16_free(tlv); return -1; } else if (ivminor=i; break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_OLD: case GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT: case GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_BF: { GWEN_BUFFER *fbuf; lct->cryptoTag=GWEN_Tag16_GetTagType(tlv); fbuf=GWEN_Buffer_new(0, GWEN_Tag16_GetTagLength(tlv), 0, 1); GWEN_Buffer_AppendBytes(fbuf, GWEN_Tag16_GetTagData(tlv), GWEN_Tag16_GetTagLength(tlv)); GWEN_Buffer_Rewind(fbuf); rv=GWEN_Crypt_TokenOHBCI__DecryptFile(ct, fbuf, tryNum, gid); GWEN_Buffer_free(fbuf); if (rv) { free(p); GWEN_Tag16_free(tlv); return rv; } break; } case GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_TRESOR: { GWEN_BUFFER *fbuf; lct->cryptoTag=GWEN_Tag16_GetTagType(tlv); fbuf=GWEN_Buffer_new(0, GWEN_Tag16_GetTagLength(tlv), 0, 1); GWEN_Buffer_AppendBytes(fbuf, GWEN_Tag16_GetTagData(tlv), GWEN_Tag16_GetTagLength(tlv)); GWEN_Buffer_Rewind(fbuf); rv=GWEN_Crypt_TokenOHBCI__DecryptTresor(ct, fbuf, tryNum, gid); GWEN_Buffer_free(fbuf); if (rv) { free(p); GWEN_Tag16_free(tlv); return rv; } break; } default: DBG_WARN(GWEN_LOGDOMAIN, "Unknown tag %02x", GWEN_Tag16_GetTagType(tlv)); break; } /* switch */ GWEN_Tag16_free(tlv); free(p); } /* while */ return 0; } int GWEN_Crypt_TokenOHBCI__EncodeKey(const GWEN_CRYPT_KEY *key, GWEN_CRYPT_TOKEN_CONTEXT *fct, unsigned int tagType, int wantPublic, int isCrypt, GWEN_BUFFER *dbuf) { GWEN_DB_NODE *dbKey; int err; const void *p; unsigned int bs; char *pp; uint32_t pos; char numbuf[16]; if (!key) { DBG_INFO(GWEN_LOGDOMAIN, "No key"); return 0; } dbKey=GWEN_DB_Group_new("key"); err=GWEN_Crypt_KeyRsa_toDb(key, dbKey, wantPublic); if (err) { DBG_ERROR_ERR(GWEN_LOGDOMAIN, err); GWEN_DB_Group_free(dbKey); return err; } GWEN_Buffer_AppendByte(dbuf, tagType & 0xff); /* remember pos to insert size later */ pos=GWEN_Buffer_GetPos(dbuf); GWEN_Buffer_AppendBytes(dbuf, "00", 2); /* always write "NO" for "isPublic", since OpenHBCI always writes "NO" * due to a bug */ GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_ISPUBLIC, "NO", -1, dbuf); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_ISCRYPT, isCrypt?"YES":"NO", -1, dbuf); snprintf(numbuf, sizeof(numbuf), "%d", GWEN_Crypt_Key_GetKeyNumber(key)); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_NUMBER, numbuf, -1, dbuf); snprintf(numbuf, sizeof(numbuf), "%d", GWEN_Crypt_Key_GetKeyVersion(key)); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_VERSION, numbuf, -1, dbuf); snprintf(numbuf, sizeof(numbuf), "%d", GWEN_Crypt_Key_GetKeySize(key)); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_LEN, numbuf, -1, dbuf); /* write key owner again */ if (tagType==GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_PUBCRYPTKEY) { const char *s; s=GWEN_Crypt_Token_Context_GetPeerId(fct); if (s) GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_OWNER, s, -1, dbuf); } p=GWEN_DB_GetBinValue(dbKey, "rsa/e", 0, 0, 0, &bs); if (p && bs) GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_EXP, p, bs, dbuf); p=GWEN_DB_GetBinValue(dbKey, "rsa/n", 0, 0, 0, &bs); if (p && bs) { GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_MODULUS, p, bs, dbuf); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_N, p, bs, dbuf); } else { DBG_WARN(GWEN_LOGDOMAIN, "No modulus !"); } p=GWEN_DB_GetBinValue(dbKey, "rsa/p", 0, 0, 0, &bs); if (p && bs) GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_P, p, bs, dbuf); p=GWEN_DB_GetBinValue(dbKey, "rsa/q", 0, 0, 0, &bs); if (p && bs) GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_Q, p, bs, dbuf); p=GWEN_DB_GetBinValue(dbKey, "rsa/d", 0, 0, 0, &bs); if (p && bs) GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_D, p, bs, dbuf); GWEN_DB_Group_free(dbKey); bs=(GWEN_Buffer_GetPos(dbuf)-pos)-2; pp=GWEN_Buffer_GetStart(dbuf)+pos; pp[0]=bs & 0xff; pp[1]=(bs>>8) & 0xff; return 0; } int GWEN_Crypt_TokenOHBCI_Encode(GWEN_CRYPT_TOKEN *ct, GWEN_BUFFER *dbuf) { GWEN_CRYPT_TOKEN_OHBCI *lct; char numbuf[16]; const char *p; GWEN_CRYPT_TOKEN_CONTEXT *fct; GWEN_CRYPT_KEY *key; GWEN_CRYPT_TOKEN_KEYINFO *ki; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_OHBCI, ct); assert(lct); /* get the only context */ fct=GWEN_Crypt_TokenFile_GetContext(ct, 0); if (!fct) { DBG_ERROR(GWEN_LOGDOMAIN, "Crypt token does not contain a file context"); return GWEN_ERROR_INVALID; } /* write header again */ GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_HEADER, GWEN_CRYPT_TOKEN_OHBCI_NAME, -1, dbuf); if (lct->mediumTag!=GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM3) { /* do not include version info here for ohbci files after 1.5 */ snprintf(numbuf, sizeof(numbuf), "%d", GWEN_CRYPT_TOKEN_OHBCI_VMAJOR); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_VERSION_MAJOR, numbuf, -1, dbuf); snprintf(numbuf, sizeof(numbuf), "%d", GWEN_CRYPT_TOKEN_OHBCI_VMINOR); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_VERSION_MINOR, numbuf, -1, dbuf); } ki=GWEN_CTF_Context_GetLocalSignKeyInfo(fct); if (ki) { snprintf(numbuf, sizeof(numbuf), "%d", GWEN_Crypt_Token_KeyInfo_GetSignCounter(ki)); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_SEQ, numbuf, -1, dbuf); } key=GWEN_CTF_Context_GetLocalSignKey(fct); if (GWEN_Crypt_TokenOHBCI__EncodeKey(key, fct, GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PUBSIGNKEY, 1, 0, dbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not encode key"); return -1; } if (GWEN_Crypt_TokenOHBCI__EncodeKey(key, fct, GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PRIVSIGNKEY, 0, 0, dbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not encode key"); return -1; } key=GWEN_CTF_Context_GetLocalCryptKey(fct); if (GWEN_Crypt_TokenOHBCI__EncodeKey(key, fct, GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PUBCRYPTKEY, 1, 1, dbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not encode key"); return -1; } if (GWEN_Crypt_TokenOHBCI__EncodeKey(key, fct, GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PRIVCRYPTKEY, 0, 1, dbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not encode key"); return -1; } p=GWEN_Crypt_Token_Context_GetUserId(fct); if (p && *p) GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_ID, p, -1, dbuf); key=GWEN_CTF_Context_GetRemoteSignKey(fct); if (GWEN_Crypt_TokenOHBCI__EncodeKey(key, fct, GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_PUBSIGNKEY, 1, 0, dbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not encode key"); return -1; } key=GWEN_CTF_Context_GetRemoteCryptKey(fct); if (GWEN_Crypt_TokenOHBCI__EncodeKey(key, fct, GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_PUBCRYPTKEY, 1, 1, dbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not encode key"); return -1; } snprintf(numbuf, sizeof(numbuf), "%d", 280); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_COUNTRY, numbuf, -1, dbuf); p=GWEN_Crypt_Token_Context_GetServiceId(fct); if (p && *p) GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_CODE, p, -1, dbuf); p=GWEN_Crypt_Token_Context_GetSystemId(fct); if (p && *p) GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_SYSTEMID, p, -1, dbuf); /* new in 1.4 */ p=GWEN_Crypt_Token_Context_GetAddress(fct); if (p && *p) { GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_SERVER_ADDR, p, -1, dbuf); snprintf(numbuf, sizeof(numbuf), "%d", GWEN_Crypt_Token_Context_GetPort(fct)); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_SERVER_PORT, numbuf, -1, dbuf); } /* new in 1.4 */ ki=GWEN_CTF_Context_GetRemoteSignKeyInfo(fct); if (ki) { snprintf(numbuf, sizeof(numbuf), "%d", GWEN_Crypt_Token_KeyInfo_GetSignCounter(ki)); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_REMOTE_SEQ, numbuf, -1, dbuf); } /* new in 1.7 */ key=GWEN_CTF_Context_GetLocalAuthKey(fct); if (GWEN_Crypt_TokenOHBCI__EncodeKey(key, fct, GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PRIVAUTHKEY, 0, 0, dbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not encode key"); return -1; } key=GWEN_CTF_Context_GetRemoteAuthKey(fct); if (GWEN_Crypt_TokenOHBCI__EncodeKey(key, fct, GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_PUBAUTHKEY, 1, 0, dbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not encode key"); return -1; } /* new in 1.8 */ ki=GWEN_CTF_Context_GetTempLocalSignKeyInfo(fct); key=GWEN_CTF_Context_GetTempLocalSignKey(fct); if (GWEN_Crypt_TokenOHBCI__EncodeKey(key, fct, GWEN_CRYPT_TOKEN_OHBCI_TAG_TEMP_PUBSIGNKEY, 1, 0, dbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not encode key"); return -1; } if (GWEN_Crypt_TokenOHBCI__EncodeKey(key, fct, GWEN_CRYPT_TOKEN_OHBCI_TAG_TEMP_PRIVSIGNKEY, 0, 0, dbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not encode key"); return -1; } return 0; } int GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_Write(GWEN_CRYPT_TOKEN *ct, int fd, int cre, uint32_t gid){ GWEN_CRYPT_TOKEN_OHBCI *lct; int rv; GWEN_BUFFER *fbuf; GWEN_BUFFER *rawbuf; char *p; unsigned int bs; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_OHBCI, ct); assert(lct); if (!GWEN_Crypt_Token_GetTokenName(ct)) { DBG_ERROR(GWEN_LOGDOMAIN, "No medium name given"); return -1; } /* maybe update key file */ if ((GWEN_Crypt_Token_GetModes(ct) & GWEN_CRYPT_TOKEN_MODE_ALLOW_UPDATE) && ((lct->mediumTag!=GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM3) || (lct->cryptoTag!=GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_TRESOR))) { DBG_WARN(GWEN_LOGDOMAIN, "Updating ancient key file to new one"); GWEN_Gui_ProgressLog(gid, GWEN_LoggerLevel_Warning, I18N("Updating ancient key file to new one")); lct->passWordIsSet=0; lct->mediumTag=GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM3; lct->cryptoTag=GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_TRESOR; } /* create raw data */ rawbuf=GWEN_Buffer_new(0, 1024, 0, 1); rv=GWEN_Crypt_TokenOHBCI_Encode(ct, rawbuf); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not encode key file (%d)", rv); return -1; } #ifdef DEBUG_OHBCI_MODULE if (1) { FILE *f; f=fopen("encoded.medium", "w+b"); if (f) { if (1!=fwrite(GWEN_Buffer_GetStart(rawbuf), GWEN_Buffer_GetUsedBytes(rawbuf), 1, f)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not save encoded file."); } if (fclose(f)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not close encoded file."); } } else { DBG_ERROR(GWEN_LOGDOMAIN, "Could not open encoded file."); } } #endif /* create key from password */ rv=GWEN_Crypt_TokenOHBCI__EnsurePassword(ct, 0, 1 /* always let user confirm new password on write */, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(rawbuf); return rv; } if (lct->cryptoTag==GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_TRESOR) { /* encrypt file */ bs=GWEN_Buffer_GetUsedBytes(rawbuf); GWEN_Buffer_Rewind(rawbuf); fbuf=GWEN_Buffer_new(0, bs+128, 0, 1); GWEN_Buffer_ReserveBytes(fbuf, 4); rv=GWEN_SmallTresor_Encrypt((const uint8_t*)GWEN_Buffer_GetStart(rawbuf), bs, lct->password, fbuf, GWEN_CRYPT_TOKEN_OHBCI_TRESOR_PWD_ITERATIONS, GWEN_CRYPT_TOKEN_OHBCI_TRESOR_CRYPT_ITERATIONS); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not encode keyfile"); GWEN_Buffer_free(fbuf); GWEN_Buffer_free(rawbuf); return GWEN_ERROR_GENERIC; } GWEN_Buffer_free(rawbuf); } else { GWEN_CRYPT_KEY *key; if (lct->cryptoTag==GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT) { key=GWEN_Crypt_KeyDes3K_fromData(GWEN_Crypt_CryptMode_Cbc, 24, (const uint8_t*)lct->password, 24); } else if (lct->cryptoTag==GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_OLD) { key=GWEN_Crypt_KeyDes3K_fromData(GWEN_Crypt_CryptMode_Cbc, 16, (const uint8_t*)lct->password, 16); } else if (lct->cryptoTag==GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_BF) { key=GWEN_Crypt_KeyBlowFish_fromData(GWEN_Crypt_CryptMode_Cbc, 16, (const uint8_t*)lct->password, 16); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Unknown crypt tag, should not occur"); abort(); } if (!key) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not create key"); GWEN_Buffer_free(rawbuf); return GWEN_ERROR_GENERIC; } /* padd raw data */ if (GWEN_Padd_PaddWithAnsiX9_23(rawbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not padd keyfile"); GWEN_Crypt_Key_free(key); GWEN_Buffer_free(rawbuf); return GWEN_ERROR_GENERIC; } /* encrypt file */ bs=GWEN_Buffer_GetUsedBytes(rawbuf); GWEN_Buffer_Rewind(rawbuf); fbuf=GWEN_Buffer_new(0, bs+128, 0, 1); GWEN_Buffer_ReserveBytes(fbuf, 4); rv=GWEN_Crypt_Key_Encipher(key, (const uint8_t*)GWEN_Buffer_GetStart(rawbuf), bs, (uint8_t*)GWEN_Buffer_GetStart(fbuf), &bs); GWEN_Buffer_free(rawbuf); GWEN_Crypt_Key_free(key); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(fbuf); return rv; } GWEN_Buffer_IncrementPos(fbuf, bs); GWEN_Buffer_AdjustUsedBytes(fbuf); } /* insert crypto tag and make it own the content of fbuf */ GWEN_Buffer_Rewind(fbuf); bs=GWEN_Buffer_GetUsedBytes(fbuf); GWEN_Buffer_InsertBytes(fbuf, "000", 3); p=GWEN_Buffer_GetStart(fbuf); p[0]=(unsigned char)(lct->cryptoTag); p[1]=(unsigned char)(bs & 0xff); p[2]=(unsigned char)((bs>>8) & 0xff); /* for new-typ media create envelope */ if (lct->mediumTag==GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM3) { char numbuf[16]; GWEN_BUFFER *dbuf; /* this is a new medium type, create envelope */ dbuf=GWEN_Buffer_new(0, 2048, 0, 1); /* prepare container tag */ GWEN_Buffer_AppendBytes(dbuf, "000", 3); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_HEADER, GWEN_CRYPT_TOKEN_OHBCI_NAME, -1, dbuf); snprintf(numbuf, sizeof(numbuf), "%d", GWEN_CRYPT_TOKEN_OHBCI_VMAJOR); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_VERSION_MAJOR, numbuf, -1, dbuf); snprintf(numbuf, sizeof(numbuf), "%d", GWEN_CRYPT_TOKEN_OHBCI_VMINOR); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_VERSION_MINOR, numbuf, -1, dbuf); /* write complete medium into new tag */ GWEN_Buffer_AppendBytes(dbuf, GWEN_Buffer_GetStart(fbuf), GWEN_Buffer_GetUsedBytes(fbuf)); p=GWEN_Buffer_GetStart(dbuf); bs=GWEN_Buffer_GetUsedBytes(dbuf)-3; /* subtract medium tag bytes */ p[0]=(unsigned char)(lct->mediumTag); p[1]=(unsigned char)(bs & 0xff); p[2]=(unsigned char)((bs>>8) & 0xff); /* swap buffers */ GWEN_Buffer_free(fbuf); fbuf=dbuf; GWEN_Buffer_Rewind(fbuf); } if (ftruncate(fd, 0)==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "ftruncate(%s): %s", GWEN_Crypt_Token_GetTokenName(ct), strerror(errno)); GWEN_Buffer_free(fbuf); return GWEN_ERROR_GENERIC; } p=GWEN_Buffer_GetStart(fbuf); bs=GWEN_Buffer_GetUsedBytes(fbuf); while(bs) { ssize_t rv; rv=write(fd, p, bs); if (rv==-1) { if (errno!=EINTR) { DBG_ERROR(GWEN_LOGDOMAIN, "write(%s): %s", GWEN_Crypt_Token_GetTokenName(ct), strerror(errno)); GWEN_Buffer_free(fbuf); return GWEN_ERROR_GENERIC; } } else if (rv==0) break; else { p+=rv; bs-=rv; } } /* while */ GWEN_Buffer_free(fbuf); lct->justCreated=0; return 0; } int GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_ChangePin(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid) { GWEN_CRYPT_TOKEN_OHBCI *lct; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_OHBCI, ct); assert(lct); /* just reset the password so it will be asked for upon write */ lct->passWordIsSet=0; memset(lct->password, 0, sizeof(lct->password)); return 0; } int GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_Create(GWEN_CRYPT_TOKEN *ct, uint32_t gid){ GWEN_CRYPT_TOKEN_OHBCI *lct; GWEN_CRYPT_TOKEN_CONTEXT *fct; GWEN_CRYPT_TOKEN_KEYINFO *ki; int rv; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_OHBCI, ct); assert(lct); lct->justCreated=1; fct=GWEN_CTF_Context_new(); /* create user and file context */ GWEN_Crypt_Token_Context_SetId(fct, 1); /* only one user */ GWEN_Crypt_Token_Context_SetSignKeyId(fct, 0x01); GWEN_Crypt_Token_Context_SetDecipherKeyId(fct, 0x02); GWEN_Crypt_Token_Context_SetVerifyKeyId(fct, 0x03); GWEN_Crypt_Token_Context_SetEncipherKeyId(fct, 0x04); GWEN_Crypt_Token_Context_SetAuthSignKeyId(fct, 0x05); GWEN_Crypt_Token_Context_SetAuthVerifyKeyId(fct, 0x06); /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0001, /* local sign key */ GWEN_Crypt_CryptAlgoId_Rsa, 96); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Local Sign Key")); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASSIGNCOUNTER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY | GWEN_CRYPT_TOKEN_KEYFLAGS_CANSIGN | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER); GWEN_CTF_Context_SetLocalSignKeyInfo(fct, ki); /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0002, /* local crypt key */ GWEN_Crypt_CryptAlgoId_Rsa, 96); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Local Crypt Key")); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANENCIPHER | GWEN_CRYPT_TOKEN_KEYFLAGS_CANDECIPHER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER); GWEN_CTF_Context_SetLocalCryptKeyInfo(fct, ki); /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0003, /* remote sign key */ GWEN_Crypt_CryptAlgoId_Rsa, 96); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Remote Sign Key")); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASSIGNCOUNTER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER); GWEN_CTF_Context_SetRemoteSignKeyInfo(fct, ki); /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0004, /* remote crypt key */ GWEN_Crypt_CryptAlgoId_Rsa, 96); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Remote Crypt Key")); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANENCIPHER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER); GWEN_CTF_Context_SetRemoteCryptKeyInfo(fct, ki); /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0005, /* local auth key */ GWEN_Crypt_CryptAlgoId_Rsa, 96); assert(ki); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANSIGN | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER); GWEN_CTF_Context_SetLocalAuthKeyInfo(fct, ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Local Auth Key")); /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0006, /* remote auth key */ GWEN_Crypt_CryptAlgoId_Rsa, 96); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Remote Auth Key")); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER); GWEN_CTF_Context_SetRemoteAuthKeyInfo(fct, ki); /* add context */ GWEN_Crypt_TokenFile_AddContext(ct, fct); assert(lct->createFn); rv=lct->createFn(ct, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_Open(GWEN_CRYPT_TOKEN *ct, int manage, uint32_t gid){ GWEN_CRYPT_TOKEN_OHBCI *lct; int rv; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_OHBCI, ct); assert(lct); assert(lct->openFn); rv=lct->openFn(ct, manage, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return rv; } return 0; } int GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_Close(GWEN_CRYPT_TOKEN *ct, int abandon, uint32_t gid){ GWEN_CRYPT_TOKEN_OHBCI *lct; int rv; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_OHBCI, ct); assert(lct); assert(lct->closeFn); rv=lct->closeFn(ct, abandon, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return rv; } memset(lct->password, 0, sizeof(lct->password)); lct->passWordIsSet=0; return 0; } gwenhywfar-4.15.2beta/plugins/ct/ohbci/ressource.rc.in0000644000175000017500000000661712364015347017700 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: ressource.rc.in 822 2005-08-04 08:11:04Z cstim $ begin : Wed Mar 27 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /* Changes */ #include // Language: 407=DE, 409=US, 809=UK // German resources LANGUAGE LANG_GERMAN, SUBLANG_GERMAN #pragma code_page(1252) // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA // Version VS_VERSION_INFO VERSIONINFO FILEVERSION @GWENHYWFAR_VERSION_MAJOR@, @GWENHYWFAR_VERSION_MINOR@, @GWENHYWFAR_VERSION_PATCHLEVEL@, @GWENHYWFAR_VERSION_BUILD@ PRODUCTVERSION @GWENHYWFAR_VERSION_MAJOR@, @GWENHYWFAR_VERSION_MINOR@, @GWENHYWFAR_VERSION_PATCHLEVEL@, @GWENHYWFAR_VERSION_BUILD@ FILEFLAGSMASK 0x3fL FILEFLAGS 0x0L FILEOS 0x40004L // Windows NT FILETYPE 0x2L // DLL FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040704b0" BEGIN //VALUE "Comments", "\0" VALUE "CompanyName", " Aquamaniac\0" VALUE "FileDescription", "Home banking library\0" VALUE "FileVersion", "v@GWENHYWFAR_VERSION_RELEASE_STRING@\0" VALUE "InternalName", "Gwenhywfar\0" VALUE "LegalCopyright", "Copyright Š 2004 by Martin Preuss\0" VALUE "LegalTrademarks", "Aquamaniac\0" VALUE "OriginalFilename", "dbio.dll\0" //VALUE "PrivateBuild", "\0" VALUE "ProductName", "Gwenhywfar\0" VALUE "ProductVersion", "v@GWENHYWFAR_VERSION_FULL_STRING@\0" VALUE "Author", "Martin Preuss\0" VALUE "Email", "martin@libchipcard.de\0" VALUE "Homepage", "http://www.sf.net/projects/gwenhywfar\0" VALUE "Description", "Online banking\0" VALUE "License", "GPL\0" //VALUE "SpecialBuild", "\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x407, 1200 END END gwenhywfar-4.15.2beta/plugins/ct/ohbci/Makefile.in0000644000175000017500000006573212634022414016774 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = plugins/ct/ohbci DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(srcdir)/ohbci.xml.in $(srcdir)/ressource.rc.in \ $(top_srcdir)/depcomp $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = ohbci.xml ressource.rc CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(crypttokenplugindir)" \ "$(DESTDIR)$(crypttokenplugindir)" LTLIBRARIES = $(crypttokenplugin_LTLIBRARIES) ohbci_la_DEPENDENCIES = $(top_builddir)/src/libgwenhywfar.la am_ohbci_la_OBJECTS = ohbci.lo ohbci_la_OBJECTS = $(am_ohbci_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = ohbci_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(ohbci_la_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(ohbci_la_SOURCES) DIST_SOURCES = $(ohbci_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(crypttokenplugin_DATA) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ EXTRA_DIST = ressource.rc.in INCLUDES = -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/parser AM_CFLAGS = @PROFILING_CFLAGS@ crypttokenplugindir = $(gwenhywfar_plugindir)/ct noinst_HEADERS = ohbci_l.h ohbci_p.h crypttokenplugin_LTLIBRARIES = ohbci.la crypttokenplugin_DATA = ohbci.xml ohbci_la_SOURCES = ohbci.c ohbci_la_LIBADD = $(top_builddir)/src/libgwenhywfar.la ohbci_la_LDFLAGS = -no-undefined $(STRIPALL) -module -avoid-version all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu plugins/ct/ohbci/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu plugins/ct/ohbci/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): ohbci.xml: $(top_builddir)/config.status $(srcdir)/ohbci.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ ressource.rc: $(top_builddir)/config.status $(srcdir)/ressource.rc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-crypttokenpluginLTLIBRARIES: $(crypttokenplugin_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(crypttokenplugin_LTLIBRARIES)'; test -n "$(crypttokenplugindir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(crypttokenplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(crypttokenplugindir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(crypttokenplugindir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(crypttokenplugindir)"; \ } uninstall-crypttokenpluginLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(crypttokenplugin_LTLIBRARIES)'; test -n "$(crypttokenplugindir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(crypttokenplugindir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(crypttokenplugindir)/$$f"; \ done clean-crypttokenpluginLTLIBRARIES: -test -z "$(crypttokenplugin_LTLIBRARIES)" || rm -f $(crypttokenplugin_LTLIBRARIES) @list='$(crypttokenplugin_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } ohbci.la: $(ohbci_la_OBJECTS) $(ohbci_la_DEPENDENCIES) $(EXTRA_ohbci_la_DEPENDENCIES) $(AM_V_CCLD)$(ohbci_la_LINK) -rpath $(crypttokenplugindir) $(ohbci_la_OBJECTS) $(ohbci_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ohbci.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-crypttokenpluginDATA: $(crypttokenplugin_DATA) @$(NORMAL_INSTALL) @list='$(crypttokenplugin_DATA)'; test -n "$(crypttokenplugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(crypttokenplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(crypttokenplugindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(crypttokenplugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(crypttokenplugindir)" || exit $$?; \ done uninstall-crypttokenpluginDATA: @$(NORMAL_UNINSTALL) @list='$(crypttokenplugin_DATA)'; test -n "$(crypttokenplugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(crypttokenplugindir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(crypttokenplugindir)" "$(DESTDIR)$(crypttokenplugindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-crypttokenpluginLTLIBRARIES clean-generic \ clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-crypttokenpluginDATA \ install-crypttokenpluginLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-crypttokenpluginDATA \ uninstall-crypttokenpluginLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-crypttokenpluginLTLIBRARIES clean-generic clean-libtool \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-crypttokenpluginDATA \ install-crypttokenpluginLTLIBRARIES install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am \ uninstall-crypttokenpluginDATA \ uninstall-crypttokenpluginLTLIBRARIES sources: for f in $(ohbci_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(crypttokenplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done ressource.o: ressource.rc $(RC) -o $@ $< # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/plugins/ct/ohbci/ohbci_p.h0000644000175000017500000001707212364015347016504 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_MEDIUM_OHBCI_P_H #define AH_MEDIUM_OHBCI_P_H #define GWEN_CRYPT_TOKEN_OHBCI_NAME "OHBCI" #define GWEN_CRYPT_TOKEN_OHBCI_VMAJOR 1 #define GWEN_CRYPT_TOKEN_OHBCI_VMINOR 8 #define GWEN_CRYPT_TOKEN_OHBCI_PINMINLENGTH 4 /* temporary, should be 5 or more */ #define GWEN_CRYPT_TOKEN_OHBCI_MAX_PIN_TRY 10 #define GWEN_CRYPT_TOKEN_OHBCI_TRESOR_PWD_ITERATIONS 1469 #define GWEN_CRYPT_TOKEN_OHBCI_TRESOR_CRYPT_ITERATIONS 365 /* new in 1.6 */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM1 (unsigned char)0xc1 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM2 (unsigned char)0xc2 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM3 (unsigned char)0xc3 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_OLD GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM1 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM2 /* new in 1.6 */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_BF GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM3 /* new in 1.8 */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_TRESOR (unsigned char)0xc4 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_VERSION_MAJOR (unsigned char)0x02 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_VERSION_MINOR (unsigned char)0x03 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_SEQ (unsigned char)0x04 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PUBSIGNKEY (unsigned char)0xc5 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PRIVSIGNKEY (unsigned char)0xc6 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PUBCRYPTKEY (unsigned char)0xc7 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PRIVCRYPTKEY (unsigned char)0xc8 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_ID (unsigned char)0x09 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_PUBSIGNKEY (unsigned char)0xca #define GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_PUBCRYPTKEY (unsigned char)0xcb #define GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_COUNTRY (unsigned char)0x0c #define GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_CODE (unsigned char)0x0d #define GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_SYSTEMID (unsigned char)0x0e /* temporary keys (reintroduced in version 1.8) */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_TEMP_PUBSIGNKEY (unsigned char)0xcf #define GWEN_CRYPT_TOKEN_OHBCI_TAG_TEMP_PRIVSIGNKEY (unsigned char)0xd0 /* temporary keys (new in version 1.1, ignored in later versions) */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_TEMP_PUBCRYPTKEY (unsigned char)0xd1 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_TEMP_PRIVCRYPTKEY (unsigned char)0xd2 /* new in version 1.4 */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_SERVER_ADDR (unsigned char)0xd3 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_SERVER_PORT (unsigned char)0xd4 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_REMOTE_SEQ (unsigned char)0xd5 /* new in version 1.6 */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_HEADER (unsigned char)0x16 /* new in version 1.7 */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PRIVAUTHKEY (unsigned char)0xd6 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_PUBAUTHKEY (unsigned char)0xd7 /* keydata */ /* ignored */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_ISPUBLIC (unsigned char) 0x01 /* ignored since 1.8 */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_ISCRYPT (unsigned char) 0x02 /* fixed in 1.5: fixes a bug in old OpenHBCI which included escape chars */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_OWNER (unsigned char) 0x03 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_VERSION (unsigned char) 0x04 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_NUMBER (unsigned char) 0x05 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_MODULUS (unsigned char) 0x06 /* ignored */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_EXP_OLD (unsigned char) 0x07 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_N (unsigned char) 0x08 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_P (unsigned char) 0x09 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_Q (unsigned char) 0x0a /* ignored since 1.8 */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_DMP1 (unsigned char) 0x0b /* ignored since 1.8 */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_DMQ1 (unsigned char) 0x0c /* ignored since 1.8 */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_IQMP (unsigned char) 0x0d #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_D (unsigned char) 0x0e /* new in version 1.3 */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_EXP (unsigned char) 0x0f /* new in version 1.7 */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_LEN (unsigned char) 0x10 #include "ohbci_l.h" #include #include #include #include #include #include #include GWENHYWFAR_EXPORT GWEN_PLUGIN *ct_ohbci_factory(GWEN_PLUGIN_MANAGER *pm, const char *modName, const char *fileName); GWEN_PLUGIN *GWEN_Crypt_TokenOHBCI_Plugin_new(GWEN_PLUGIN_MANAGER *pm, const char *modName, const char *fileName); GWEN_CRYPT_TOKEN* GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_Plugin_CreateToken(GWEN_PLUGIN *pl, const char *name); int GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_Plugin_CheckToken(GWEN_PLUGIN *pl, GWEN_BUFFER *name); typedef struct GWEN_CRYPT_TOKEN_OHBCI GWEN_CRYPT_TOKEN_OHBCI; struct GWEN_CRYPT_TOKEN_OHBCI { GWEN_CRYPT_TOKEN_OPEN_FN openFn; GWEN_CRYPT_TOKEN_CREATE_FN createFn; GWEN_CRYPT_TOKEN_CLOSE_FN closeFn; unsigned int mediumTag; unsigned int cryptoTag; unsigned int vminor; char password[64]; int passWordIsSet; int justCreated; }; void GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_FreeData(void *bp, void *p); int GWEN_Crypt_TokenOHBCI__DecryptFile(GWEN_CRYPT_TOKEN *ct, GWEN_BUFFER *fbuf, int trynum, uint32_t gid); int GWEN_Crypt_TokenOHBCI__DecryptFile16(GWEN_CRYPT_TOKEN *ct, GWEN_BUFFER *fbuf, int trynum, uint32_t gid); int GWEN_Crypt_TokenOHBCI__DecryptTresor(GWEN_CRYPT_TOKEN *ct, GWEN_BUFFER *fbuf, int trynum, uint32_t gid); void GWEN_Crypt_TokenOHBCI__DecodeKey(GWEN_CRYPT_TOKEN *ct, GWEN_TAG16 *keyTlv, GWEN_DB_NODE *dbKeys, const char *keyName); int GWEN_Crypt_TokenOHBCI__Decode(GWEN_CRYPT_TOKEN *ct, GWEN_BUFFER *dbuf); int GWEN_Crypt_TokenOHBCI__EncodeKey(const GWEN_CRYPT_KEY *key, GWEN_CRYPT_TOKEN_CONTEXT *fct, unsigned int tagType, int wantPublic, int isCrypt, GWEN_BUFFER *dbuf); int GWEN_Crypt_TokenOHBCI_Encode(GWEN_CRYPT_TOKEN *ct, GWEN_BUFFER *dbuf); int GWEN_Crypt_TokenOHBCI__EnsurePassword(GWEN_CRYPT_TOKEN *ct, int trynum, int twice, uint32_t gid); int GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_Create(GWEN_CRYPT_TOKEN *ct, uint32_t gid); int GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_Open(GWEN_CRYPT_TOKEN *ct, int manage, uint32_t gid); int GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_Close(GWEN_CRYPT_TOKEN *ct, int abandon, uint32_t gid); int GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_Write(GWEN_CRYPT_TOKEN *ct, int fd, int cre, uint32_t gid); int GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_Read(GWEN_CRYPT_TOKEN *ct, int fd, uint32_t gid); int GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_ChangePin(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid); #endif /* GWEN_CRYPT_TOKEN_OHBCI_P_H */ gwenhywfar-4.15.2beta/plugins/ct/ohbci/Makefile.am0000644000175000017500000000160712364015347016761 00000000000000EXTRA_DIST = ressource.rc.in INCLUDES= -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/parser AM_CFLAGS=@PROFILING_CFLAGS@ crypttokenplugindir = $(gwenhywfar_plugindir)/ct noinst_HEADERS=ohbci_l.h ohbci_p.h crypttokenplugin_LTLIBRARIES=ohbci.la crypttokenplugin_DATA=ohbci.xml ohbci_la_SOURCES=ohbci.c ohbci_la_LIBADD=$(top_builddir)/src/libgwenhywfar.la ohbci_la_LDFLAGS = -no-undefined $(STRIPALL) -module -avoid-version sources: for f in $(ohbci_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(crypttokenplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done ressource.o: ressource.rc $(RC) -o $@ $< gwenhywfar-4.15.2beta/plugins/ct/ohbci/ohbci.xml.in0000644000175000017500000000075712364015347017145 00000000000000 @OHBCI_VERSION_STRING@ Martin Preuss (martin@libchipcard.de) OpenHBCI Keyfile Medium This plugins provides support for keyfiles created with OpenHBCI1 and OpenHBCI2. The file is encrypted with a password using the 3DES algorithm and it stores the private and public RSA keys. gwenhywfar-4.15.2beta/plugins/ct/ohbci/ohbci_l.h0000644000175000017500000000160212364015347016470 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: ohbci_l.h 794 2005-07-26 16:13:16Z aquamaniac $ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPTTOKEN_OHBCI_L_H #define GWEN_CRYPTTOKEN_OHBCI_L_H #include #include /** @name Constructor And Destructor * */ /*@{*/ GWEN_CRYPT_TOKEN *GWEN_Crypt_TokenOHBCI_new(GWEN_PLUGIN_MANAGER *pm, const char *name); /*@}*/ #endif /* GWEN_CRYPTTOKEN_OHBCI_L_H */ gwenhywfar-4.15.2beta/plugins/ct/Makefile.in0000644000175000017500000005533412634022413015704 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = plugins/ct DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ DIST_SUBDIRS = ohbci SUBDIRS = @gwenhywfar_plugins_ct_dirs@ all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu plugins/ct/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu plugins/ct/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am sources: for d in $(SUBDIRS); do \ make -C $$d sources; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/plugins/ct/Makefile.am0000644000175000017500000000017712364015347015676 00000000000000DIST_SUBDIRS=ohbci SUBDIRS=@gwenhywfar_plugins_ct_dirs@ sources: for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-4.15.2beta/plugins/configmgr/0000755000175000017500000000000012643267237015271 500000000000000gwenhywfar-4.15.2beta/plugins/configmgr/Makefile.in0000644000175000017500000005536312634022413017253 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = plugins/configmgr DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ DIST_SUBDIRS = dir SUBDIRS = @gwenhywfar_plugins_cfgmgr_dirs@ all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu plugins/configmgr/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu plugins/configmgr/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am sources: for d in $(SUBDIRS); do \ make -C $$d sources; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/plugins/configmgr/Makefile.am0000644000175000017500000000020112364015347017227 00000000000000DIST_SUBDIRS=dir SUBDIRS=@gwenhywfar_plugins_cfgmgr_dirs@ sources: for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-4.15.2beta/plugins/configmgr/dir/0000755000175000017500000000000012643267240016041 500000000000000gwenhywfar-4.15.2beta/plugins/configmgr/dir/cfgdir.c0000644000175000017500000004306012364015347017365 00000000000000/*************************************************************************** begin : Sat Sep 27 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "cfgdir_p.h" #include #include #include #include #include #include #include #include #include GWEN_INHERIT(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR) GWEN_CONFIGMGR *GWEN_ConfigMgrDir_Factory(GWEN_UNUSED GWEN_PLUGIN *pl, const char *url) { GWEN_CONFIGMGR *cfg; cfg=GWEN_ConfigMgrDir_new(url); GWEN_ConfigMgr_SetGetGroupFn(cfg, GWEN_ConfigMgrDir_GetGroup); GWEN_ConfigMgr_SetSetGroupFn(cfg, GWEN_ConfigMgrDir_SetGroup); GWEN_ConfigMgr_SetLockGroupFn(cfg, GWEN_ConfigMgrDir_LockGroup); GWEN_ConfigMgr_SetUnlockGroupFn(cfg, GWEN_ConfigMgrDir_UnlockGroup); GWEN_ConfigMgr_SetGetUniqueIdFn(cfg, GWEN_ConfigMgrDir_GetUniqueId); GWEN_ConfigMgr_SetDeleteGroupFn(cfg, GWEN_ConfigMgrDir_DeleteGroup); GWEN_ConfigMgr_SetListGroupsFn(cfg, GWEN_ConfigMgrDir_ListGroups); GWEN_ConfigMgr_SetListSubGroupsFn(cfg, GWEN_ConfigMgrDir_ListSubGroups); return cfg; } GWEN_PLUGIN *configmgr_dir_factory(GWEN_PLUGIN_MANAGER *pm, const char *modName, const char *fileName) { GWEN_PLUGIN *pl; pl=GWEN_ConfigMgr_Plugin_new(pm, modName, fileName); assert(pl); GWEN_ConfigMgr_Plugin_SetFactoryFn(pl, GWEN_ConfigMgrDir_Factory); return pl; } GWEN_CONFIGMGR *GWEN_ConfigMgrDir_new(const char *url) { GWEN_CONFIGMGR *cfg; GWEN_CONFIGMGR_DIR *xcfg; GWEN_URL *gurl; cfg=GWEN_ConfigMgr_new(url); GWEN_NEW_OBJECT(GWEN_CONFIGMGR_DIR, xcfg); GWEN_INHERIT_SETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg, xcfg, GWEN_ConfigMgrDir_FreeData); xcfg->fileLocks=GWEN_FSLock_List_new(); gurl=GWEN_Url_fromString(url); if (gurl) { const char *s; GWEN_BUFFER *nbuf; nbuf=GWEN_Buffer_new(0, 256, 0, 1); s=GWEN_Url_GetServer(gurl); if (s) GWEN_Buffer_AppendString(nbuf, s); s=GWEN_Url_GetPath(gurl); if (s) { /* Does this begin with a slash? If not, we add one, but only if this isn't a drive letter (for windows!) */ if (*s!='/' && *s!='\\' && !(isalpha(s[0]) && s[1] == ':' && (s[2] == '/' || s[2] == '\\'))) { GWEN_Buffer_AppendString(nbuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(nbuf, s); } xcfg->folder=strdup(GWEN_Buffer_GetStart(nbuf)); GWEN_Url_free(gurl); GWEN_Buffer_free(nbuf); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Bad URL [%s]", url); GWEN_ConfigMgr_free(cfg); return NULL; } return cfg; } GWENHYWFAR_CB void GWEN_ConfigMgrDir_FreeData(GWEN_UNUSED void *bp, void *p) { GWEN_CONFIGMGR_DIR *xcfg; xcfg=(GWEN_CONFIGMGR_DIR*) p; if (GWEN_FSLock_List_GetCount(xcfg->fileLocks)) { GWEN_FSLOCK *lck; DBG_WARN(GWEN_LOGDOMAIN, "Some groups are still locked, unlocking"); lck=GWEN_FSLock_List_First(xcfg->fileLocks); while(lck) { GWEN_FSLOCK_RESULT res; res=GWEN_FSLock_Unlock(lck); if (res!=GWEN_FSLock_ResultOk) { DBG_INFO(GWEN_LOGDOMAIN, "Unable to unlock file [%s]: %d", GWEN_FSLock_GetName(lck), res); } lck=GWEN_FSLock_List_Next(lck); } } GWEN_FSLock_List_free(xcfg->fileLocks); free(xcfg->folder); GWEN_FREE_OBJECT(xcfg); } int GWEN_ConfigMgrDir__GetUniqueId(GWEN_CONFIGMGR *cfg, const char *groupName, uint32_t *pUniqueId){ GWEN_CONFIGMGR_DIR *xcfg; GWEN_BUFFER *nbuf; uint32_t uniqueId=0; GWEN_FSLOCK *lck; GWEN_FSLOCK_RESULT res; FILE *f; int rv; assert(cfg); xcfg=GWEN_INHERIT_GETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg); assert(xcfg); assert(xcfg->folder); assert(groupName); nbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(nbuf, xcfg->folder); GWEN_Buffer_AppendString(nbuf, GWEN_DIR_SEPARATOR_S); GWEN_Text_EscapeToBuffer(groupName, nbuf); GWEN_Buffer_AppendString(nbuf, GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendString(nbuf, "uniqueid"); rv=GWEN_Directory_GetPath(GWEN_Buffer_GetStart(nbuf), GWEN_PATH_FLAGS_CHECKROOT | GWEN_PATH_FLAGS_VARIABLE); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } lck=GWEN_FSLock_new(GWEN_Buffer_GetStart(nbuf), GWEN_FSLock_TypeFile); res=GWEN_FSLock_Lock(lck, 60000, 0); if (res!=GWEN_FSLock_ResultOk) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not lock group [%s]: %d", groupName, res); GWEN_FSLock_free(lck); GWEN_Buffer_free(nbuf); return GWEN_ERROR_LOCK; } /* read last id */ f=fopen(GWEN_Buffer_GetStart(nbuf), "r"); if (f) { int i; if (1!=fscanf(f, "%d", &i)) i=0; uniqueId=i; fclose(f); } uniqueId++; f=fopen(GWEN_Buffer_GetStart(nbuf), "w"); if (f==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s, \"w\"): %s", GWEN_Buffer_GetStart(nbuf), strerror(errno)); GWEN_FSLock_Unlock(lck); GWEN_FSLock_free(lck); GWEN_Buffer_free(nbuf); return GWEN_ERROR_LOCK; } fprintf(f, "%d", (int)uniqueId); if (fclose(f)) { DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s, \"w\"): %s", GWEN_Buffer_GetStart(nbuf), strerror(errno)); GWEN_FSLock_Unlock(lck); GWEN_FSLock_free(lck); GWEN_Buffer_free(nbuf); return GWEN_ERROR_LOCK; } GWEN_FSLock_Unlock(lck); GWEN_FSLock_free(lck); GWEN_Buffer_free(nbuf); *pUniqueId=uniqueId; return 0; } void GWEN_ConfigMgrDir_AddGroupDirName(GWEN_CONFIGMGR *cfg, const char *groupName, GWEN_BUFFER *nbuf) { GWEN_CONFIGMGR_DIR *xcfg; uint32_t pos; char *p; assert(cfg); xcfg=GWEN_INHERIT_GETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg); assert(xcfg); assert(xcfg->folder); assert(groupName); GWEN_Buffer_AppendString(nbuf, xcfg->folder); GWEN_Buffer_AppendString(nbuf, GWEN_DIR_SEPARATOR_S); pos=GWEN_Buffer_GetPos(nbuf); GWEN_Text_EscapeToBuffer(groupName, nbuf); p=GWEN_Buffer_GetStart(nbuf)+pos; while(*p) { *p=tolower(*p); p++; } } void GWEN_ConfigMgrDir_AddGroupFileName(GWEN_CONFIGMGR *cfg, const char *groupName, const char *subGroupName, GWEN_BUFFER *nbuf) { GWEN_CONFIGMGR_DIR *xcfg; uint32_t pos; char *p; assert(cfg); xcfg=GWEN_INHERIT_GETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg); assert(xcfg); assert(xcfg->folder); assert(groupName); assert(subGroupName); GWEN_Buffer_AppendString(nbuf, xcfg->folder); pos=GWEN_Buffer_GetPos(nbuf); GWEN_Buffer_AppendString(nbuf, GWEN_DIR_SEPARATOR_S); GWEN_Text_EscapeToBuffer(groupName, nbuf); GWEN_Buffer_AppendString(nbuf, GWEN_DIR_SEPARATOR_S); GWEN_Text_EscapeToBuffer(subGroupName, nbuf); GWEN_Buffer_AppendString(nbuf, ".conf"); p=GWEN_Buffer_GetStart(nbuf)+pos; while(*p) { *p=tolower(*p); p++; } } GWEN_FSLOCK *GWEN_ConfigMgrDir_FindLock(GWEN_CONFIGMGR *cfg, const char *fname) { GWEN_CONFIGMGR_DIR *xcfg; assert(cfg); xcfg=GWEN_INHERIT_GETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg); assert(xcfg); if (GWEN_FSLock_List_GetCount(xcfg->fileLocks)) { GWEN_FSLOCK *lck; lck=GWEN_FSLock_List_First(xcfg->fileLocks); while(lck) { if (strcasecmp(GWEN_FSLock_GetName(lck), fname)==0) return lck; lck=GWEN_FSLock_List_Next(lck); } } return NULL; } int GWEN_ConfigMgrDir_GetGroup(GWEN_CONFIGMGR *cfg, const char *groupName, const char *subGroupName, GWEN_DB_NODE **pDb) { GWEN_BUFFER *nbuf; GWEN_CONFIGMGR_DIR *xcfg; int rv; GWEN_DB_NODE *db; assert(cfg); xcfg=GWEN_INHERIT_GETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg); assert(xcfg); nbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_ConfigMgrDir_AddGroupFileName(cfg, groupName, subGroupName, nbuf); rv=GWEN_Directory_GetPath(GWEN_Buffer_GetStart(nbuf), GWEN_PATH_FLAGS_CHECKROOT | GWEN_PATH_FLAGS_VARIABLE); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Could not access [%s]: %d", GWEN_Buffer_GetStart(nbuf), rv); GWEN_Buffer_free(nbuf); return rv; } db=GWEN_DB_Group_new(subGroupName); rv=GWEN_DB_ReadFile(db, GWEN_Buffer_GetStart(nbuf), GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP | GWEN_DB_FLAGS_ALLOW_EMPTY_STREAM); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Could not read [%s]: %d", GWEN_Buffer_GetStart(nbuf), rv); GWEN_DB_Group_free(db); GWEN_Buffer_free(nbuf); return rv; } GWEN_Buffer_free(nbuf); *pDb=db; return 0; } int GWEN_ConfigMgrDir_SetGroup(GWEN_CONFIGMGR *cfg, const char *groupName, const char *subGroupName, GWEN_DB_NODE *db) { GWEN_BUFFER *nbuf; GWEN_CONFIGMGR_DIR *xcfg; int rv; GWEN_FSLOCK *lck; assert(cfg); xcfg=GWEN_INHERIT_GETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg); assert(xcfg); nbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_ConfigMgrDir_AddGroupFileName(cfg, groupName, subGroupName, nbuf); rv=GWEN_Directory_GetPath(GWEN_Buffer_GetStart(nbuf), GWEN_PATH_FLAGS_CHECKROOT | GWEN_PATH_FLAGS_VARIABLE); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Could not access [%s]: %d", GWEN_Buffer_GetStart(nbuf), rv); GWEN_Buffer_free(nbuf); return rv; } lck=GWEN_ConfigMgrDir_FindLock(cfg, GWEN_Buffer_GetStart(nbuf)); if (lck==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Group [%s/%s] is not locked", groupName, subGroupName); GWEN_Buffer_free(nbuf); return GWEN_ERROR_LOCK; } rv=GWEN_DB_WriteFile(db, GWEN_Buffer_GetStart(nbuf), GWEN_DB_FLAGS_DEFAULT); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Could not write [%s]: %d", GWEN_Buffer_GetStart(nbuf), rv); GWEN_Buffer_free(nbuf); return rv; } GWEN_Buffer_free(nbuf); return 0; } int GWEN_ConfigMgrDir_LockGroup(GWEN_CONFIGMGR *cfg, const char *groupName, const char *subGroupName) { GWEN_BUFFER *nbuf; GWEN_CONFIGMGR_DIR *xcfg; int rv; GWEN_FSLOCK *lck; GWEN_FSLOCK_RESULT res; assert(cfg); xcfg=GWEN_INHERIT_GETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg); assert(xcfg); nbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_ConfigMgrDir_AddGroupFileName(cfg, groupName, subGroupName, nbuf); rv=GWEN_Directory_GetPath(GWEN_Buffer_GetStart(nbuf), GWEN_PATH_FLAGS_CHECKROOT | GWEN_PATH_FLAGS_VARIABLE); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Could not access [%s]: %d", GWEN_Buffer_GetStart(nbuf), rv); GWEN_Buffer_free(nbuf); return rv; } lck=GWEN_ConfigMgrDir_FindLock(cfg, GWEN_Buffer_GetStart(nbuf)); if (lck) { DBG_ERROR(GWEN_LOGDOMAIN, "Group [%s/%s] is already locked", groupName, subGroupName); GWEN_Buffer_free(nbuf); return GWEN_ERROR_LOCK; } lck=GWEN_FSLock_new(GWEN_Buffer_GetStart(nbuf), GWEN_FSLock_TypeFile); res=GWEN_FSLock_Lock(lck, 60000, 0); if (res!=GWEN_FSLock_ResultOk) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not lock group [%s/%s]: %d", groupName, subGroupName, res); GWEN_FSLock_free(lck); GWEN_Buffer_free(nbuf); return GWEN_ERROR_LOCK; } GWEN_FSLock_List_Add(lck, xcfg->fileLocks); GWEN_Buffer_free(nbuf); return 0; } int GWEN_ConfigMgrDir_UnlockGroup(GWEN_CONFIGMGR *cfg, const char *groupName, const char *subGroupName) { GWEN_BUFFER *nbuf; GWEN_CONFIGMGR_DIR *xcfg; GWEN_FSLOCK *lck; GWEN_FSLOCK_RESULT res; assert(cfg); xcfg=GWEN_INHERIT_GETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg); assert(xcfg); nbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_ConfigMgrDir_AddGroupFileName(cfg, groupName, subGroupName, nbuf); lck=GWEN_ConfigMgrDir_FindLock(cfg, GWEN_Buffer_GetStart(nbuf)); if (lck==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Group [%s/%s] is not locked", groupName, subGroupName); GWEN_Buffer_free(nbuf); return GWEN_ERROR_LOCK; } res=GWEN_FSLock_Unlock(lck); if (res!=GWEN_FSLock_ResultOk) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not unlock group [%s/%s]: %d", groupName, subGroupName, res); GWEN_FSLock_List_Del(lck); GWEN_FSLock_free(lck); GWEN_Buffer_free(nbuf); return GWEN_ERROR_LOCK; } GWEN_FSLock_List_Del(lck); GWEN_FSLock_free(lck); GWEN_Buffer_free(nbuf); return 0; } int GWEN_ConfigMgrDir_GetUniqueId(GWEN_CONFIGMGR *cfg, const char *groupName, char *buffer, uint32_t bufferLen) { GWEN_CONFIGMGR_DIR *xcfg; int rv; uint32_t uid; char ubuf[64]; assert(cfg); xcfg=GWEN_INHERIT_GETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg); assert(xcfg); rv=GWEN_ConfigMgrDir__GetUniqueId(cfg, groupName, &uid); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Could not create unique id (%d)", rv); return rv; } snprintf(ubuf, sizeof(ubuf)-1, "uid::%08x", uid); ubuf[sizeof(ubuf)-1]=0; /* return new id */ strncpy(buffer, ubuf, bufferLen-1); buffer[bufferLen-1]=0; return 0; } int GWEN_ConfigMgrDir_DeleteGroup(GWEN_CONFIGMGR *cfg, const char *groupName, const char *subGroupName) { GWEN_BUFFER *nbuf; GWEN_CONFIGMGR_DIR *xcfg; int rv; GWEN_FSLOCK *lck; GWEN_FSLOCK_RESULT res; assert(cfg); xcfg=GWEN_INHERIT_GETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg); assert(xcfg); nbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_ConfigMgrDir_AddGroupFileName(cfg, groupName, subGroupName, nbuf); rv=GWEN_Directory_GetPath(GWEN_Buffer_GetStart(nbuf), GWEN_PATH_FLAGS_CHECKROOT | GWEN_PATH_FLAGS_VARIABLE); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Could not access [%s]: %d", GWEN_Buffer_GetStart(nbuf), rv); GWEN_Buffer_free(nbuf); return rv; } lck=GWEN_ConfigMgrDir_FindLock(cfg, GWEN_Buffer_GetStart(nbuf)); if (lck) { DBG_ERROR(GWEN_LOGDOMAIN, "Group [%s/%s] is still locked", groupName, subGroupName); GWEN_Buffer_free(nbuf); return GWEN_ERROR_LOCK; } lck=GWEN_FSLock_new(GWEN_Buffer_GetStart(nbuf), GWEN_FSLock_TypeFile); res=GWEN_FSLock_Lock(lck, 60000, 0); if (res!=GWEN_FSLock_ResultOk) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not lock group [%s/%s]: %d", groupName, subGroupName, res); GWEN_FSLock_free(lck); GWEN_Buffer_free(nbuf); return GWEN_ERROR_LOCK; } unlink(GWEN_Buffer_GetStart(nbuf)); GWEN_FSLock_Unlock(lck); GWEN_FSLock_free(lck); GWEN_Buffer_free(nbuf); return 0; } int GWEN_ConfigMgrDir_ListGroups(GWEN_CONFIGMGR *cfg, GWEN_STRINGLIST *sl) { GWEN_CONFIGMGR_DIR *xcfg; int rv; assert(cfg); xcfg=GWEN_INHERIT_GETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg); assert(xcfg); assert(xcfg->folder); rv=GWEN_Directory_GetDirEntries(xcfg->folder, sl, NULL); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int GWEN_ConfigMgrDir_ListSubGroups(GWEN_CONFIGMGR *cfg, const char *groupName, GWEN_STRINGLIST *sl) { GWEN_BUFFER *nbuf; GWEN_CONFIGMGR_DIR *xcfg; int rv; GWEN_STRINGLIST *rawsl; assert(cfg); xcfg=GWEN_INHERIT_GETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg); assert(xcfg); nbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_ConfigMgrDir_AddGroupDirName(cfg, groupName, nbuf); rv=GWEN_Directory_GetPath(GWEN_Buffer_GetStart(nbuf), GWEN_PATH_FLAGS_CHECKROOT | GWEN_PATH_FLAGS_PATHMUSTEXIST | GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Path not found (%d)", rv); GWEN_Buffer_free(nbuf); return 0; } rawsl=GWEN_StringList_new(); rv=GWEN_Directory_GetFileEntries(GWEN_Buffer_GetStart(nbuf), rawsl, "*.conf"); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_StringList_free(rawsl); GWEN_Buffer_free(nbuf); return rv; } else { GWEN_STRINGLISTENTRY *se; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); se=GWEN_StringList_FirstEntry(rawsl); while(se) { char buffer[256]; char *p; strncpy(buffer, GWEN_StringListEntry_Data(se), sizeof(buffer)-1); buffer[sizeof(buffer)-1]=0; p=strrchr(buffer, '.'); if (p) { *p=0; GWEN_Text_UnescapeToBuffer(buffer, tbuf); GWEN_StringList_AppendString(sl, GWEN_Buffer_GetStart(tbuf), 0, 1); GWEN_Buffer_Reset(tbuf); } se=GWEN_StringListEntry_Next(se); } GWEN_Buffer_free(tbuf); GWEN_StringList_free(rawsl); GWEN_Buffer_free(nbuf); return 0; } } gwenhywfar-4.15.2beta/plugins/configmgr/dir/cfgdir_p.h0000644000175000017500000000711712364015347017714 00000000000000/*************************************************************************** begin : Sat Sep 27 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_CFGMGR_CFGDIR_P_H #define GWENHYWFAR_CFGMGR_CFGDIR_P_H #include #include typedef struct GWEN_CONFIGMGR_DIR GWEN_CONFIGMGR_DIR; struct GWEN_CONFIGMGR_DIR { char *folder; GWEN_FSLOCK_LIST *fileLocks; }; GWEN_CONFIGMGR *GWEN_ConfigMgrDir_Factory(GWEN_PLUGIN *pl, const char *url); GWENHYWFAR_EXPORT GWEN_PLUGIN *configmgr_dir_factory(GWEN_PLUGIN_MANAGER *pm, const char *modName, const char *fileName); GWEN_CONFIGMGR *GWEN_ConfigMgrDir_new(const char *url); GWENHYWFAR_CB void GWEN_ConfigMgrDir_FreeData(void *bp, void *p); int GWEN_ConfigMgrDir_GetGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName, GWEN_DB_NODE **pDb); int GWEN_ConfigMgrDir_SetGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName, GWEN_DB_NODE *db); int GWEN_ConfigMgrDir_LockGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName); int GWEN_ConfigMgrDir_UnlockGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName); int GWEN_ConfigMgrDir_GetUniqueId(GWEN_CONFIGMGR *mgr, const char *groupName, char *buffer, uint32_t bufferLen); int GWEN_ConfigMgrDir_DeleteGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName); int GWEN_ConfigMgrDir_ListGroups(GWEN_CONFIGMGR *mgr, GWEN_STRINGLIST *sl); int GWEN_ConfigMgrDir_ListSubGroups(GWEN_CONFIGMGR *mgr, const char *groupName, GWEN_STRINGLIST *sl); void GWEN_ConfigMgrDir_AddGroupDirName(GWEN_CONFIGMGR *cfg, const char *groupName, GWEN_BUFFER *nbuf); void GWEN_ConfigMgrDir_AddGroupFileName(GWEN_CONFIGMGR *cfg, const char *groupName, const char *subGroupName, GWEN_BUFFER *nbuf); GWEN_FSLOCK *GWEN_ConfigMgrDir_FindLock(GWEN_CONFIGMGR *cfg, const char *fname); int GWEN_ConfigMgrDir__GetUniqueId(GWEN_CONFIGMGR *cfg, const char *groupName, uint32_t *pUniqueId); #endif gwenhywfar-4.15.2beta/plugins/configmgr/dir/dir.xml.in0000644000175000017500000000061712364015347017671 00000000000000 @GWENHYWFAR_VERSION_STRING@ Martin Preuss(martin@libchipcard.de) ConfigManager implementation using files ConfigManager implementation using files. gwenhywfar-4.15.2beta/plugins/configmgr/dir/Makefile.in0000644000175000017500000006510412634022413020023 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = plugins/configmgr/dir DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(srcdir)/dir.xml.in $(top_srcdir)/depcomp $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = dir.xml CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(cfgmgrplugindir)" \ "$(DESTDIR)$(cfgmgrplugindir)" LTLIBRARIES = $(cfgmgrplugin_LTLIBRARIES) dir_la_DEPENDENCIES = $(top_builddir)/src/libgwenhywfar.la am_dir_la_OBJECTS = cfgdir.lo dir_la_OBJECTS = $(am_dir_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = dir_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(dir_la_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(dir_la_SOURCES) DIST_SOURCES = $(dir_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(cfgmgrplugin_DATA) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ EXTRA_DIST = dir.xml.in INCLUDES = -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/parser @all_includes@ cfgmgrplugindir = $(gwenhywfar_plugindir)/configmgr noinst_HEADERS = cfgdir_p.h cfgmgrplugin_LTLIBRARIES = dir.la cfgmgrplugin_DATA = dir.xml dir_la_SOURCES = cfgdir.c dir_la_LIBADD = $(top_builddir)/src/libgwenhywfar.la dir_la_LDFLAGS = -no-undefined $(STRIPALL) $(ressource_ldflags) \ -module -avoid-version all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu plugins/configmgr/dir/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu plugins/configmgr/dir/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): dir.xml: $(top_builddir)/config.status $(srcdir)/dir.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-cfgmgrpluginLTLIBRARIES: $(cfgmgrplugin_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(cfgmgrplugin_LTLIBRARIES)'; test -n "$(cfgmgrplugindir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(cfgmgrplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(cfgmgrplugindir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(cfgmgrplugindir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(cfgmgrplugindir)"; \ } uninstall-cfgmgrpluginLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(cfgmgrplugin_LTLIBRARIES)'; test -n "$(cfgmgrplugindir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(cfgmgrplugindir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(cfgmgrplugindir)/$$f"; \ done clean-cfgmgrpluginLTLIBRARIES: -test -z "$(cfgmgrplugin_LTLIBRARIES)" || rm -f $(cfgmgrplugin_LTLIBRARIES) @list='$(cfgmgrplugin_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } dir.la: $(dir_la_OBJECTS) $(dir_la_DEPENDENCIES) $(EXTRA_dir_la_DEPENDENCIES) $(AM_V_CCLD)$(dir_la_LINK) -rpath $(cfgmgrplugindir) $(dir_la_OBJECTS) $(dir_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cfgdir.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-cfgmgrpluginDATA: $(cfgmgrplugin_DATA) @$(NORMAL_INSTALL) @list='$(cfgmgrplugin_DATA)'; test -n "$(cfgmgrplugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(cfgmgrplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(cfgmgrplugindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(cfgmgrplugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(cfgmgrplugindir)" || exit $$?; \ done uninstall-cfgmgrpluginDATA: @$(NORMAL_UNINSTALL) @list='$(cfgmgrplugin_DATA)'; test -n "$(cfgmgrplugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(cfgmgrplugindir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(cfgmgrplugindir)" "$(DESTDIR)$(cfgmgrplugindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-cfgmgrpluginLTLIBRARIES clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-cfgmgrpluginDATA \ install-cfgmgrpluginLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-cfgmgrpluginDATA \ uninstall-cfgmgrpluginLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-cfgmgrpluginLTLIBRARIES clean-generic clean-libtool \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-cfgmgrpluginDATA install-cfgmgrpluginLTLIBRARIES \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-cfgmgrpluginDATA \ uninstall-cfgmgrpluginLTLIBRARIES sources: for f in $(dir_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(cfgmgrplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done ressource.o: ressource.rc $(RC) -o $@ $< # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/plugins/configmgr/dir/Makefile.am0000644000175000017500000000155712364015347020024 00000000000000EXTRA_DIST=dir.xml.in INCLUDES= -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/parser @all_includes@ cfgmgrplugindir = $(gwenhywfar_plugindir)/configmgr noinst_HEADERS=cfgdir_p.h cfgmgrplugin_LTLIBRARIES=dir.la cfgmgrplugin_DATA=dir.xml dir_la_SOURCES=cfgdir.c dir_la_LIBADD=$(top_builddir)/src/libgwenhywfar.la dir_la_LDFLAGS = -no-undefined $(STRIPALL) $(ressource_ldflags) \ -module -avoid-version sources: for f in $(dir_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(cfgmgrplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done ressource.o: ressource.rc $(RC) -o $@ $< gwenhywfar-4.15.2beta/plugins/Makefile.in0000644000175000017500000005536612634022413015303 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = plugins DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ SUBDIRS = dbio ct configmgr INCLUDES = -I$(top_builddir)/gwenhywfar3 all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu plugins/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu plugins/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am sources: for d in $(SUBDIRS); do \ make -C $$d sources; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/plugins/Makefile.am0000644000175000017500000000021112364015347015255 00000000000000SUBDIRS=dbio ct configmgr INCLUDES= -I$(top_builddir)/gwenhywfar3 sources: for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-4.15.2beta/plugins/dbio/0000755000175000017500000000000012643267237014233 500000000000000gwenhywfar-4.15.2beta/plugins/dbio/csv/0000755000175000017500000000000012643267237015026 500000000000000gwenhywfar-4.15.2beta/plugins/dbio/csv/csv_p.h0000644000175000017500000000466312364015347016233 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Thu Oct 30 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_PLUGIN_CSV_H #define GWENHYWFAR_PLUGIN_CSV_H #include #include #include #include GWENHYWFAR_EXPORT GWEN_PLUGIN *dbio_csv_factory(GWEN_PLUGIN_MANAGER *pm, const char *modName, const char *fileName); static GWEN_DBIO *GWEN_DBIO_CSV_Factory(GWEN_PLUGIN *pl); static int GWEN_DBIO_CSV_Export(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, uint32_t flags); static int GWEN_DBIO_CSV_Import(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, uint32_t flags); static GWEN_DBIO_CHECKFILE_RESULT GWEN_DBIO_CSV_CheckFile(GWEN_DBIO *dbio, const char *fname); static int GWEN_DBIO_CSV__ReadLine(GWEN_FAST_BUFFER *fb, GWEN_STRINGLIST *sl); #endif gwenhywfar-4.15.2beta/plugins/dbio/csv/ressource.rc.in0000644000175000017500000000647312364015347017716 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Wed Mar 27 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #include // Language: 407=DE, 409=US, 809=UK // German resources LANGUAGE LANG_GERMAN, SUBLANG_GERMAN #pragma code_page(1252) // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA // Version VS_VERSION_INFO VERSIONINFO FILEVERSION @GWENHYWFAR_VERSION_MAJOR@, @GWENHYWFAR_VERSION_MINOR@, @GWENHYWFAR_VERSION_PATCHLEVEL@, @GWENHYWFAR_VERSION_BUILD@ PRODUCTVERSION @GWENHYWFAR_VERSION_MAJOR@, @GWENHYWFAR_VERSION_MINOR@, @GWENHYWFAR_VERSION_PATCHLEVEL@, @GWENHYWFAR_VERSION_BUILD@ FILEFLAGSMASK 0x3fL FILEFLAGS 0x0L FILEOS 0x40004L // Windows NT FILETYPE 0x2L // DLL FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040704b0" BEGIN //VALUE "Comments", "\0" VALUE "CompanyName", " Aquamaniac\0" VALUE "FileDescription", "Multi purpose library\0" VALUE "FileVersion", "v@GWENHYWFAR_VERSION_RELEASE_STRING@\0" VALUE "InternalName", "Gwenhywfar\0" VALUE "LegalCopyright", "Copyright Š 2003 by Martin Preuss\0" VALUE "LegalTrademarks", "Aquamaniac\0" VALUE "OriginalFilename", "CSV.DLL\0" //VALUE "PrivateBuild", "\0" VALUE "ProductName", "Gwenhywfar\0" VALUE "ProductVersion", "v@GWENHYWFAR_VERSION_FULL_STRING@\0" VALUE "Author", "Martin Preuss\0" VALUE "Email", "martin@libchipcard.de\0" VALUE "Homepage", "http://gwenhywfar.sf.net/\0" VALUE "Description", "CSV Plugin\0" VALUE "License", "LGPL\0" //VALUE "SpecialBuild", "\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x407, 1200 END END gwenhywfar-4.15.2beta/plugins/dbio/csv/Makefile.in0000644000175000017500000006515212634022414017006 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = plugins/dbio/csv DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(srcdir)/csv.xml.in $(srcdir)/ressource.rc.in \ $(top_srcdir)/depcomp $(noinst_HEADERS) README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = csv.xml ressource.rc CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(dbioplugindir)" \ "$(DESTDIR)$(dbioplugindir)" LTLIBRARIES = $(dbioplugin_LTLIBRARIES) csv_la_DEPENDENCIES = $(top_builddir)/src/libgwenhywfar.la am_csv_la_OBJECTS = csv.lo csv_la_OBJECTS = $(am_csv_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = csv_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(csv_la_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(csv_la_SOURCES) DIST_SOURCES = $(csv_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(dbioplugin_DATA) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ EXTRA_DIST = README ressource.rc.in INCLUDES = -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/parser @all_includes@ dbioplugindir = $(gwenhywfar_plugindir)/dbio noinst_HEADERS = csv_p.h dbioplugin_LTLIBRARIES = csv.la dbioplugin_DATA = csv.xml csv_la_SOURCES = csv.c csv_la_LIBADD = $(top_builddir)/src/libgwenhywfar.la csv_la_LDFLAGS = -no-undefined $(STRIPALL) \ -module -version-info 0:1:0 all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu plugins/dbio/csv/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu plugins/dbio/csv/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): csv.xml: $(top_builddir)/config.status $(srcdir)/csv.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ ressource.rc: $(top_builddir)/config.status $(srcdir)/ressource.rc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-dbiopluginLTLIBRARIES: $(dbioplugin_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(dbioplugin_LTLIBRARIES)'; test -n "$(dbioplugindir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(dbioplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dbioplugindir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(dbioplugindir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(dbioplugindir)"; \ } uninstall-dbiopluginLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(dbioplugin_LTLIBRARIES)'; test -n "$(dbioplugindir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(dbioplugindir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(dbioplugindir)/$$f"; \ done clean-dbiopluginLTLIBRARIES: -test -z "$(dbioplugin_LTLIBRARIES)" || rm -f $(dbioplugin_LTLIBRARIES) @list='$(dbioplugin_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } csv.la: $(csv_la_OBJECTS) $(csv_la_DEPENDENCIES) $(EXTRA_csv_la_DEPENDENCIES) $(AM_V_CCLD)$(csv_la_LINK) -rpath $(dbioplugindir) $(csv_la_OBJECTS) $(csv_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/csv.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dbiopluginDATA: $(dbioplugin_DATA) @$(NORMAL_INSTALL) @list='$(dbioplugin_DATA)'; test -n "$(dbioplugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dbioplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dbioplugindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dbioplugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dbioplugindir)" || exit $$?; \ done uninstall-dbiopluginDATA: @$(NORMAL_UNINSTALL) @list='$(dbioplugin_DATA)'; test -n "$(dbioplugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(dbioplugindir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(dbioplugindir)" "$(DESTDIR)$(dbioplugindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-dbiopluginLTLIBRARIES clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dbiopluginDATA install-dbiopluginLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dbiopluginDATA uninstall-dbiopluginLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-dbiopluginLTLIBRARIES clean-generic clean-libtool \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dbiopluginDATA \ install-dbiopluginLTLIBRARIES install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-dbiopluginDATA \ uninstall-dbiopluginLTLIBRARIES sources: for f in $(csv_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dbioplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done ressource.o: ressource.rc $(RC) -o $@ $< # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/plugins/dbio/csv/csv.xml.in0000644000175000017500000000062212364015347016661 00000000000000 @GWENHYWFAR_VERSION_STRING@ Martin Preuss(martin@libchipcard.de) Exporter for CSV This plugin exports data to a CSV file according to a given configuration. gwenhywfar-4.15.2beta/plugins/dbio/csv/Makefile.am0000644000175000017500000000153212364015347016774 00000000000000EXTRA_DIST=README ressource.rc.in INCLUDES= -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/parser @all_includes@ dbioplugindir = $(gwenhywfar_plugindir)/dbio noinst_HEADERS=csv_p.h dbioplugin_LTLIBRARIES=csv.la dbioplugin_DATA=csv.xml csv_la_SOURCES=csv.c csv_la_LIBADD=$(top_builddir)/src/libgwenhywfar.la csv_la_LDFLAGS = -no-undefined $(STRIPALL) \ -module -version-info 0:1:0 sources: for f in $(csv_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dbioplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done ressource.o: ressource.rc $(RC) -o $@ $< gwenhywfar-4.15.2beta/plugins/dbio/csv/csv.c0000644000175000017500000004174312364015347015707 00000000000000/*************************************************************************** begin : Thu Oct 30 2003 copyright : (C) 2003-2013 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /* disable DBG_DEBUG() and DBG_VERBOUS() */ #define DISABLE_DEBUGLOG #include "csv_p.h" #include #include #include #include #include #include #include #include #include #include #include #include #include int GWEN_CSV_GetNameAndIndex(const char *name, char *buffer, unsigned int size) { unsigned int i; int rv; i=0; rv=0; /* read and copy name */ while(name[i] && name[i]!='[' && i=size) { DBG_INFO(0, "Name too long (%d>=%d)", i, size); return -1; } buffer[i]=0; /* read and copy index, if any */ if (name[i]=='[') { char numbuffer[16]; unsigned int j; j=0; i++; while(name[i] && name[i]!=']' && j=sizeof(numbuffer)) { DBG_INFO(0, "Index number too long (%u>=%d)", j, (int)(sizeof(numbuffer))); return -1; } numbuffer[j]=0; rv=atoi(numbuffer); } return rv; } int GWEN_DBIO_CSV_Export(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, uint32_t flags) { GWEN_DB_NODE *colgr; GWEN_DB_NODE *n; int delimiter; int quote; const char *p; const char *groupName; int err; unsigned int column; int title; GWEN_FAST_BUFFER *fb; assert(dbio); assert(sio); assert(cfg); assert(data); fb=GWEN_FastBuffer_new(512, sio); /* get general configuration */ colgr=GWEN_DB_GetGroup(cfg, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "columns"); if (!colgr) { DBG_ERROR(0, "Error in configuration: No columns specified"); GWEN_FastBuffer_free(fb); return GWEN_ERROR_INVALID; } p=GWEN_DB_GetCharValue(cfg, "delimiter", 0, ";"); if (strcasecmp(p, "TAB")==0) delimiter=9; else if (strcasecmp(p, "SPACE")==0) delimiter=32; else delimiter=p[0]; quote=GWEN_DB_GetIntValue(cfg, "quote", 0, 1); groupName=GWEN_DB_GetCharValue(cfg, "group", 0, ""); title=GWEN_DB_GetIntValue(cfg, "title", 0, 1); if (title) { /* write title */ for (column=1; ; column++) { int idx; char namebuffer[64]; char numbuffer[16]; char *np; /* create name for column */ GWEN_Text_NumToString(column, numbuffer, sizeof(numbuffer), 0); p=GWEN_DB_GetCharValue(colgr, numbuffer, 0, 0); if (!p) { /* no value. finished */ GWEN_FASTBUFFER_WRITELINE(fb, err, ""); if (err<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", err); GWEN_FastBuffer_free(fb); return err; } DBG_VERBOUS(GWEN_LOGDOMAIN, "No colums left, line finished"); break; } /* break down to name and index */ idx=GWEN_CSV_GetNameAndIndex(p, namebuffer, sizeof(namebuffer)); if (idx==-1) { DBG_INFO(0, "Error in configuration: Bad name for column %d", column); GWEN_FastBuffer_free(fb); return GWEN_ERROR_GENERIC; } /* add idx to name, if not 0 */ if (idx) { GWEN_Text_NumToString(idx, numbuffer, sizeof(numbuffer), 0); if (strlen(namebuffer)+strlen(numbuffer)+1>=sizeof(namebuffer)) { DBG_ERROR(0, "Internal: namebuffer too small"); GWEN_FastBuffer_free(fb); return -1; } strcat(namebuffer, numbuffer); } /* convert slashes to underscores */ np=namebuffer; while(*np) { if (*np=='/') *np='_'; np++; } if (column!=1) { /* write delimiter */ GWEN_FASTBUFFER_WRITEBYTE(fb, err, delimiter); if (err<0) { DBG_INFO(0, "Called from here"); GWEN_FastBuffer_free(fb); return err; } } /* if not first column */ if (quote) { /* write quotation mark */ GWEN_FASTBUFFER_WRITEBYTE(fb, err, '\"'); if (err<0) { DBG_INFO(0, "Called from here"); GWEN_FastBuffer_free(fb); return err; } } /* if quote */ /* write value */ GWEN_FASTBUFFER_WRITEFORCED(fb, err, namebuffer, -1); if (err<0) { DBG_INFO(0, "Called from here"); GWEN_FastBuffer_free(fb); return err; } if (quote) { /* write quotation mark */ GWEN_FASTBUFFER_WRITEBYTE(fb, err, '\"'); if (err<0) { DBG_INFO(0, "Called from here"); GWEN_FastBuffer_free(fb); return err; } } /* if quote */ } /* for */ } /* if title */ n=GWEN_DB_GetFirstGroup(data); while (n) { if (*groupName==0 || strcasecmp(groupName, GWEN_DB_GroupName(n))==0) { for (column=1; ; column++) { int idx; char namebuffer[64]; char numbuffer[16]; GWEN_DB_NODE_TYPE vt; char valbuffer[64]; int iv; /* create name for column */ GWEN_Text_NumToString(column, numbuffer, sizeof(numbuffer), 0); p=GWEN_DB_GetCharValue(colgr, numbuffer, 0, 0); if (!p) { /* no value. finished */ GWEN_FASTBUFFER_WRITELINE(fb, err, ""); if (err<0) { DBG_INFO(0, "Called from here"); GWEN_FastBuffer_free(fb); return err; } DBG_VERBOUS(GWEN_LOGDOMAIN, "No colums left, line finished"); break; } /* break down to name and index */ idx=GWEN_CSV_GetNameAndIndex(p, namebuffer, sizeof(namebuffer)); if (idx==-1) { DBG_INFO(GWEN_LOGDOMAIN, "Error in configuration: Bad name for column %d", column); GWEN_FastBuffer_free(fb); return GWEN_ERROR_GENERIC; } /* get data */ DBG_VERBOUS(GWEN_LOGDOMAIN, "Checking value of %s[%d]", namebuffer, idx); if (GWEN_DB_VariableExists(n, namebuffer)) { vt=GWEN_DB_GetValueTypeByPath(n, namebuffer, idx); switch(vt) { case GWEN_DB_NodeType_ValueChar: p=GWEN_DB_GetCharValue(n, namebuffer, idx, ""); break; case GWEN_DB_NodeType_ValueInt: iv=GWEN_DB_GetIntValue(n, namebuffer, idx, 0); snprintf(valbuffer, sizeof(valbuffer), "%d", iv); p=valbuffer; break; default: DBG_DEBUG(GWEN_LOGDOMAIN, "Unhandled value type %d", vt); p=""; } } else p=""; if (column!=1) { /* write delimiter */ GWEN_FASTBUFFER_WRITEBYTE(fb, err, delimiter); if (err<0) { DBG_INFO(0, "Called from here"); GWEN_FastBuffer_free(fb); return err; } } /* if not first column */ if (quote) { /* write quotation mark */ GWEN_FASTBUFFER_WRITEBYTE(fb, err, '\"'); if (err<0) { DBG_INFO(0, "Called from here"); GWEN_FastBuffer_free(fb); return err; } } /* if quote */ /* write value */ GWEN_FASTBUFFER_WRITEFORCED(fb, err, p, -1); if (err<0) { DBG_INFO(0, "Called from here"); GWEN_FastBuffer_free(fb); return err; } if (quote) { /* write quotation mark */ GWEN_FASTBUFFER_WRITEBYTE(fb, err, '\"'); if (err<0) { DBG_INFO(0, "Called from here"); GWEN_FastBuffer_free(fb); return err; } } /* if quote */ } /* for */ } /* if group name matches */ n=GWEN_DB_GetNextGroup(n); } /* while n */ /* flush */ GWEN_FASTBUFFER_FLUSH(fb, err); if (err<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", err); GWEN_FastBuffer_free(fb); return err; } GWEN_FastBuffer_free(fb); return 0; } int GWEN_DBIO_CSV_Import(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, uint32_t flags) { GWEN_DB_NODE *colgr; int delimiter; int quote; const char *p; const char *groupName; int err; int title; GWEN_STRINGLIST *sl; GWEN_BUFFER *lbuffer; char delimiters[2]; int lines; int ignoreLines; int fixedWidth; int condense; GWEN_FAST_BUFFER *fb; assert(dbio); assert(sio); assert(cfg); assert(data); fb=GWEN_FastBuffer_new(512, sio); /* get general configuration */ colgr=GWEN_DB_GetGroup(cfg, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "columns"); if (!colgr) { DBG_ERROR(0, "Error in configuration: No columns specified"); GWEN_FastBuffer_free(fb); return GWEN_ERROR_INVALID; } p=GWEN_DB_GetCharValue(cfg, "delimiter", 0, ";"); if (strcasecmp(p, "TAB")==0) delimiter=9; else if (strcasecmp(p, "SPACE")==0) delimiter=32; else delimiter=p[0]; delimiters[0]=delimiter; delimiters[1]=0; quote=GWEN_DB_GetIntValue(cfg, "quote", 0, 1); fixedWidth=GWEN_DB_GetIntValue(cfg, "fixedWidth", 0, 0); condense=GWEN_DB_GetIntValue(cfg, "condense", 0, 0); groupName=GWEN_DB_GetCharValue(cfg, "group", 0, "line"); title=GWEN_DB_GetIntValue(cfg, "title", 0, 1); ignoreLines=GWEN_DB_GetIntValue(cfg, "ignoreLines", 0, 0); if (title) ignoreLines++; sl=GWEN_StringList_new(); lbuffer=GWEN_Buffer_new(0, 256, 0, 1); lines=0; for (;;) { GWEN_BUFFER *wbuffer; int rv; const char *s; GWEN_STRINGLISTENTRY *se; int col; GWEN_DB_NODE *n; /* read line */ DBG_DEBUG(GWEN_LOGDOMAIN, "Reading line %d", lines); GWEN_Buffer_Reset(lbuffer); err=GWEN_FastBuffer_ReadLineToBuffer(fb, lbuffer); if (err<0) { if (err==GWEN_ERROR_EOF) { DBG_VERBOUS(GWEN_LOGDOMAIN, "EOF met"); break; } else { DBG_ERROR_ERR(GWEN_LOGDOMAIN, err); GWEN_Buffer_free(lbuffer); GWEN_StringList_free(sl); GWEN_FastBuffer_free(fb); return err; } } if (linesleft) w=left; if (w<1) break; t=(char*)malloc(w+1); memmove(t, s, w); t[w]=0; if (condense) { int j; for(j=w-1; j>=0; j--) { if ((unsigned char)(t[j])>32) { break; } t[j]=0; } } /* take over new string */ GWEN_StringList_AppendString(sl, t, 1, 0); s+=w; lpos+=w; } } else { while(*s) { rv=GWEN_Text_GetWordToBuffer(s, delimiters, wbuffer, GWEN_TEXT_FLAGS_DEL_LEADING_BLANKS | GWEN_TEXT_FLAGS_DEL_TRAILING_BLANKS | GWEN_TEXT_FLAGS_NULL_IS_DELIMITER | GWEN_TEXT_FLAGS_DEL_QUOTES, &s); if (rv) { DBG_DEBUG(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(wbuffer); GWEN_Buffer_free(lbuffer); GWEN_StringList_free(sl); GWEN_FastBuffer_free(fb); return rv; } GWEN_StringList_AppendString(sl, GWEN_Buffer_GetStart(wbuffer), 0, 0); GWEN_Buffer_Reset(wbuffer); if (*s) { if (strchr(delimiters, *s)) s++; } } /* while */ } GWEN_Buffer_free(wbuffer); /* store columns to db */ n=GWEN_DB_Group_new(groupName); se=GWEN_StringList_FirstEntry(sl); col=1; while(se) { char nbuff[16]; const char *vcol; DBG_DEBUG(0, "Handling column %d", col); nbuff[0]=0; snprintf(nbuff, sizeof(nbuff)-1, "%i", col); nbuff[sizeof(nbuff)-1]=0; vcol=GWEN_DB_GetCharValue(colgr, nbuff, 0, 0); if (vcol) { const char *bracket; GWEN_BUFFER *vname; bracket=strchr(vcol, '['); if (bracket) { /* copy column name without index */ vname=GWEN_Buffer_new(0, bracket-vcol+1, 0, 1); GWEN_Buffer_AppendBytes(vname, vcol, bracket-vcol); vcol=GWEN_Buffer_GetStart(vname); } else vname=0; GWEN_DB_SetCharValue(n, GWEN_DB_FLAGS_DEFAULT, vcol, GWEN_StringListEntry_Data(se)); GWEN_Buffer_free(vname); } se=GWEN_StringListEntry_Next(se); col++; } /* while */ /* add db to data */ GWEN_DB_AddGroup(data, n); } /* if this is not the title line */ GWEN_StringList_Clear(sl); lines++; } /* while */ GWEN_Buffer_free(lbuffer); GWEN_StringList_free(sl); GWEN_FastBuffer_free(fb); return 0; } int GWEN_DBIO_CSV__ReadLine(GWEN_FAST_BUFFER *fb, GWEN_STRINGLIST *sl) { int err; const char *delimiters=";\t,"; GWEN_BUFFER *lbuffer; GWEN_BUFFER *wbuffer; int rv; const char *s; assert(fb); /* read line */ lbuffer=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_Reset(lbuffer); err=GWEN_FastBuffer_ReadLineToBuffer(fb, lbuffer); if (err<0) { DBG_ERROR_ERR(GWEN_LOGDOMAIN, err); GWEN_Buffer_free(lbuffer); return err; } /* read columns */ wbuffer=GWEN_Buffer_new(0, 256, 0, 1); s=GWEN_Buffer_GetStart(lbuffer); while(*s) { rv=GWEN_Text_GetWordToBuffer(s, delimiters, wbuffer, GWEN_TEXT_FLAGS_DEL_LEADING_BLANKS | GWEN_TEXT_FLAGS_DEL_TRAILING_BLANKS | GWEN_TEXT_FLAGS_NULL_IS_DELIMITER | GWEN_TEXT_FLAGS_DEL_QUOTES, &s); if (rv) { GWEN_Buffer_free(wbuffer); GWEN_Buffer_free(lbuffer); return rv; } GWEN_StringList_AppendString(sl, GWEN_Buffer_GetStart(wbuffer), 0, 0); GWEN_Buffer_Reset(wbuffer); if (*s) { if (strchr(delimiters, *s)) s++; } } /* while */ GWEN_Buffer_free(wbuffer); GWEN_Buffer_free(lbuffer); return 0; } GWEN_DBIO_CHECKFILE_RESULT GWEN_DBIO_CSV_CheckFile(GWEN_DBIO *dbio, const char *fname){ int i; int rv; GWEN_SYNCIO *sio; GWEN_STRINGLIST *sl; GWEN_FAST_BUFFER *fb; sio=GWEN_SyncIo_File_new(fname, GWEN_SyncIo_File_CreationMode_OpenExisting); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); return rv; } fb=GWEN_FastBuffer_new(512, sio); /* read line into string list */ sl=GWEN_StringList_new(); if (GWEN_DBIO_CSV__ReadLine(fb, sl)) { DBG_INFO(GWEN_LOGDOMAIN, "Error reading a line"); GWEN_FastBuffer_free(fb); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return GWEN_DBIO_CheckFileResultNotOk; } /* first column: number */ i=GWEN_StringList_Count(sl); GWEN_StringList_free(sl); if (i) { DBG_INFO(GWEN_LOGDOMAIN, "Found %d columns, file might be supported", i); GWEN_FastBuffer_free(fb); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); /*return GWEN_DBIO_CheckFileResultOk; */ return GWEN_DBIO_CheckFileResultUnknown; } else { DBG_INFO(GWEN_LOGDOMAIN, "Found no columns, file might not be supported"); GWEN_FastBuffer_free(fb); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return GWEN_DBIO_CheckFileResultUnknown; } } GWEN_DBIO *GWEN_DBIO_CSV_Factory(GWEN_PLUGIN *pl) { GWEN_DBIO *dbio; dbio=GWEN_DBIO_new("csv", "Imports and exports CSV data"); GWEN_DBIO_SetImportFn(dbio, GWEN_DBIO_CSV_Import); GWEN_DBIO_SetExportFn(dbio, GWEN_DBIO_CSV_Export); GWEN_DBIO_SetCheckFileFn(dbio, GWEN_DBIO_CSV_CheckFile); return dbio; } GWEN_PLUGIN *dbio_csv_factory(GWEN_PLUGIN_MANAGER *pm, const char *modName, const char *fileName) { GWEN_PLUGIN *pl; pl=GWEN_DBIO_Plugin_new(pm, modName, fileName); assert(pl); GWEN_DBIO_Plugin_SetFactoryFn(pl, GWEN_DBIO_CSV_Factory); return pl; } gwenhywfar-4.15.2beta/plugins/dbio/csv/README0000644000175000017500000000307512364015347015624 00000000000000 CSV Plugin ========== This plugin can be used to export a GWEN_DB to a CSV stream. CSV is a very old format which allows to transfer data between data base programs. This plugin uses a special configuration GWEN_DB which tells it which column of a line is to contain which variable from the DB. That configuation is most likely loaded from a configuration file. Below is an example of such a file (taken from AqMoney2): -----------------------------------------------------------------------X8 # this file contains the description of a CSV format when exporting # transactions # if 1 then values are quoted quote="1" # if 1 then a title line will be written containing the names of each # column title="1" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_DBIO_Export # if not given then all groups match #group="transaction" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_DBIO_Export columns { 1="jobid" 2="ouraccount/bankCode" 3="ouraccount/accountId" 4="otheraccount/bankCode" 5="otheraccount/accountId" 6="date" 7="valutadate" 8="value/value" 9="value/currency" 10="othername[0]" 11="othername[1]" 12="purpose[0]" 13="purpose[1]" 14="purpose[2]" 15="purpose[3]" } # columns -----------------------------------------------------------------------X8 gwenhywfar-4.15.2beta/plugins/dbio/olddb/0000755000175000017500000000000012643267237015317 500000000000000gwenhywfar-4.15.2beta/plugins/dbio/olddb/olddb.xml.in0000644000175000017500000000061012364015347017440 00000000000000 @GWENHYWFAR_VERSION_STRING@ Martin Preuss(martin@libchipcard.de) Importer for OpenHBCI1 This plugin imports data from an old OpenHBCI1-style file. gwenhywfar-4.15.2beta/plugins/dbio/olddb/ressource.rc.in0000644000175000017500000000647712364015347020213 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Wed Mar 27 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #include // Language: 407=DE, 409=US, 809=UK // German resources LANGUAGE LANG_GERMAN, SUBLANG_GERMAN #pragma code_page(1252) // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA // Version VS_VERSION_INFO VERSIONINFO FILEVERSION @GWENHYWFAR_VERSION_MAJOR@, @GWENHYWFAR_VERSION_MINOR@, @GWENHYWFAR_VERSION_PATCHLEVEL@, @GWENHYWFAR_VERSION_BUILD@ PRODUCTVERSION @GWENHYWFAR_VERSION_MAJOR@, @GWENHYWFAR_VERSION_MINOR@, @GWENHYWFAR_VERSION_PATCHLEVEL@, @GWENHYWFAR_VERSION_BUILD@ FILEFLAGSMASK 0x3fL FILEFLAGS 0x0L FILEOS 0x40004L // Windows NT FILETYPE 0x2L // DLL FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040704b0" BEGIN //VALUE "Comments", "\0" VALUE "CompanyName", " Aquamaniac\0" VALUE "FileDescription", "Multi purpose library\0" VALUE "FileVersion", "v@GWENHYWFAR_VERSION_RELEASE_STRING@\0" VALUE "InternalName", "Gwenhywfar\0" VALUE "LegalCopyright", "Copyright Š 2003 by Martin Preuss\0" VALUE "LegalTrademarks", "Aquamaniac\0" VALUE "OriginalFilename", "olddb.DLL\0" //VALUE "PrivateBuild", "\0" VALUE "ProductName", "Gwenhywfar\0" VALUE "ProductVersion", "v@GWENHYWFAR_VERSION_FULL_STRING@\0" VALUE "Author", "Martin Preuss\0" VALUE "Email", "martin@libchipcard.de\0" VALUE "Homepage", "http://gwenhywfar.sf.net/\0" VALUE "Description", "OldDB Plugin\0" VALUE "License", "LGPL\0" //VALUE "SpecialBuild", "\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x407, 1200 END END gwenhywfar-4.15.2beta/plugins/dbio/olddb/Makefile.in0000644000175000017500000006523412634022414017300 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = plugins/dbio/olddb DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(srcdir)/olddb.xml.in $(srcdir)/ressource.rc.in \ $(top_srcdir)/depcomp $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = olddb.xml ressource.rc CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(dbioplugindir)" \ "$(DESTDIR)$(dbioplugindir)" LTLIBRARIES = $(dbioplugin_LTLIBRARIES) olddb_la_DEPENDENCIES = $(top_builddir)/src/libgwenhywfar.la am_olddb_la_OBJECTS = olddb.lo olddb_la_OBJECTS = $(am_olddb_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = olddb_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(olddb_la_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(olddb_la_SOURCES) DIST_SOURCES = $(olddb_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(dbioplugin_DATA) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ EXTRA_DIST = ressource.rc.in INCLUDES = -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/parser @all_includes@ dbioplugindir = $(gwenhywfar_plugindir)/dbio noinst_HEADERS = olddb_p.h dbioplugin_LTLIBRARIES = olddb.la dbioplugin_DATA = olddb.xml olddb_la_SOURCES = olddb.c olddb_la_LIBADD = $(top_builddir)/src/libgwenhywfar.la olddb_la_LDFLAGS = -no-undefined $(STRIPALL) \ -module -version-info 0:1:0 all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu plugins/dbio/olddb/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu plugins/dbio/olddb/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): olddb.xml: $(top_builddir)/config.status $(srcdir)/olddb.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ ressource.rc: $(top_builddir)/config.status $(srcdir)/ressource.rc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-dbiopluginLTLIBRARIES: $(dbioplugin_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(dbioplugin_LTLIBRARIES)'; test -n "$(dbioplugindir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(dbioplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dbioplugindir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(dbioplugindir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(dbioplugindir)"; \ } uninstall-dbiopluginLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(dbioplugin_LTLIBRARIES)'; test -n "$(dbioplugindir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(dbioplugindir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(dbioplugindir)/$$f"; \ done clean-dbiopluginLTLIBRARIES: -test -z "$(dbioplugin_LTLIBRARIES)" || rm -f $(dbioplugin_LTLIBRARIES) @list='$(dbioplugin_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } olddb.la: $(olddb_la_OBJECTS) $(olddb_la_DEPENDENCIES) $(EXTRA_olddb_la_DEPENDENCIES) $(AM_V_CCLD)$(olddb_la_LINK) -rpath $(dbioplugindir) $(olddb_la_OBJECTS) $(olddb_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/olddb.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dbiopluginDATA: $(dbioplugin_DATA) @$(NORMAL_INSTALL) @list='$(dbioplugin_DATA)'; test -n "$(dbioplugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dbioplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dbioplugindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dbioplugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dbioplugindir)" || exit $$?; \ done uninstall-dbiopluginDATA: @$(NORMAL_UNINSTALL) @list='$(dbioplugin_DATA)'; test -n "$(dbioplugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(dbioplugindir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(dbioplugindir)" "$(DESTDIR)$(dbioplugindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-dbiopluginLTLIBRARIES clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dbiopluginDATA install-dbiopluginLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dbiopluginDATA uninstall-dbiopluginLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-dbiopluginLTLIBRARIES clean-generic clean-libtool \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dbiopluginDATA \ install-dbiopluginLTLIBRARIES install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-dbiopluginDATA \ uninstall-dbiopluginLTLIBRARIES sources: for f in $(olddb_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dbioplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done ressource.o: ressource.rc $(RC) -o $@ $< # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/plugins/dbio/olddb/olddb.c0000644000175000017500000002134312364015347016463 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Thu Oct 30 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "olddb_p.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include GWEN_DB_NODE *GWEN_DBIO_OldDb__ParseLine(GWEN_DB_NODE *root, GWEN_DB_NODE *group, const char *s, uint32_t mode) { char name[256]; char *np; char *p; const char *g; int i; int quotes; int esc; int firstval; GWEN_BUFFER *vbuf=NULL; assert(s); name[0]=0; /* check for group definition */ g=s; while(*g && (unsigned char)(*g)<33) g++; if (*g=='[') { /* ok, parse group name */ GWEN_DB_NODE *grp; s=g; s++; while(*s && (unsigned char)(*s)<33) s++; p=name; i=sizeof(name)-1; while ((unsigned char)(*s)>31 && i && *s!=']' && *s!='#') { *p=*s; p++; s++; } /* while */ if (!i) { DBG_ERROR(0, "Groupname is too long (limit is %zd chars)", sizeof(name)-1); return 0; } if (*s!=']') { DBG_ERROR(0, "\"]\" expected"); return 0; } *p=0; DBG_VERBOUS(0, "Selecting group \"%s\"",name); grp=GWEN_DB_GetGroup(root, mode, name); if (!grp) { DBG_DEBUG(0, "Group \"%s\" is not available", name); return 0; } return grp; } /* get name */ while(*s && (unsigned char)(*s)<33) s++; i=sizeof(name)-1; p=name; while ((unsigned char)(*s)>31 && i-- && *s!='=' && *s!='#') { *p=*s; p++; s++; } /* while */ if (!i) { DBG_ERROR(0, "Name is too long (limit is %zd chars)", sizeof(name)-1); return 0; } *p=0; np=name; /* post process name */ i=strlen(name)-1; while (i>=0) { if ((unsigned char)(name[i])<33) name[i]=0; else break; i--; } i=strlen(name); if (i>1) { if (name[i-1]=='"' && name[0]=='"') { name[i-1]=0; np++; } } if ((unsigned char)(*s)<31 || *s=='#') { DBG_VERBOUS(0, "Empty line"); return group; } /* get equation mark */ if (*s!='=') { DBG_ERROR(0, "\"=\" expected"); return 0; } s++; if (strlen(np)==0) { DBG_ERROR(0, "Variable name must not be empty"); return 0; } DBG_VERBOUS(0, "Creating variable \"%s\"",np); firstval=1; /* read komma separated values */ vbuf=GWEN_Buffer_new(0, 64, 0, 1); while ((unsigned char)(*s)>31) { char *vp; /* skip komma that may occur */ while(*s && (unsigned char)(*s)<33) s++; if (*s==0) { break; } if (*s==',') { if (firstval) { DBG_ERROR(0, "Unexpected comma"); GWEN_Buffer_free(vbuf); return 0; } s++; } else { if (!firstval) { DBG_ERROR(0, "Comma expected"); GWEN_Buffer_free(vbuf); return 0; } } /* get value */ while(*s && (unsigned char)(*s)<33) s++; /* copy value */ quotes=0; esc=0; i=GWEN_DBIO_OLDDB_MAXVALUE_LEN-1; while ((unsigned char)(*s)>31 && i) { if (esc) { GWEN_Buffer_AppendByte(vbuf, *s); i--; esc=0; } else { if (*s=='\\') esc=1; else if (*s=='"') { quotes++; if (quotes==2) { s++; break; } } else if (*s=='#' && !(quotes&1)) break; else if (*s==',' && !(quotes&1)) break; else { GWEN_Buffer_AppendByte(vbuf, *s); i--; } } s++; } /* while */ if (!i) { DBG_ERROR(0, "Value is too long (limit is %d chars)", GWEN_DBIO_OLDDB_MAXVALUE_LEN-1); GWEN_Buffer_free(vbuf); return 0; } if (quotes&1) { DBG_ERROR(0, "Unbalanced quotation marks"); GWEN_Buffer_free(vbuf); return 0; } if (esc) DBG_WARN(0, "Backslash at the end of the line"); *p=0; vp=GWEN_Buffer_GetStart(vbuf); /* post process value */ if (quotes==0) { i=GWEN_Buffer_GetUsedBytes(vbuf); if (i) { i--; while (i>=0) { if ((unsigned char)(vp[i])<33) vp[i]=0; else break; i--; } } i=strlen(vp); if (i>1) { if (vp[i-1]=='"' && vp[0]=='"') { vp[i-1]=0; vp++; } } } /* create value, append it */ DBG_VERBOUS(0, " Creating value \"%s\"", vp); GWEN_DB_SetCharValue(group, mode, np, vp); GWEN_Buffer_Reset(vbuf); if (*s=='#') break; firstval=0; } /* while (reading values) */ GWEN_Buffer_free(vbuf); return group; } int GWEN_DBIO_OldDb_Import(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, uint32_t flags) { GWEN_DB_NODE *curr; int ln; int gerr; GWEN_BUFFER *lbuffer; GWEN_FAST_BUFFER *fb; assert(data); fb=GWEN_FastBuffer_new(512, sio); lbuffer=GWEN_Buffer_new(0, 256, 0, 1); curr=data; ln=1; for (;;) { GWEN_Buffer_Reset(lbuffer); gerr=GWEN_FastBuffer_ReadLineToBuffer(fb, lbuffer); if (gerr) { GWEN_Buffer_free(lbuffer); if (gerr==GWEN_ERROR_EOF && ln) { GWEN_FastBuffer_free(fb); return 0; } else { DBG_ERROR_ERR(0, gerr); return gerr; } } curr=GWEN_DBIO_OldDb__ParseLine(data, curr, GWEN_Buffer_GetStart(lbuffer), flags); if (!curr) { DBG_ERROR(0, "Error in input stream (line %d)", ln); GWEN_Buffer_free(lbuffer); GWEN_FastBuffer_free(fb); return GWEN_ERROR_BAD_DATA; } ln++; } /* while */ } int GWEN_DBIO_OldDb_Export(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, uint32_t flags) { DBG_ERROR(GWEN_LOGDOMAIN, "Export function not supported"); return GWEN_ERROR_GENERIC; } GWEN_DBIO_CHECKFILE_RESULT GWEN_DBIO_OldDb_CheckFile(GWEN_DBIO *dbio, const char *fname){ int rv; GWEN_SYNCIO *sio; GWEN_DB_NODE *dbTmp; GWEN_DB_NODE *dbCfg; sio=GWEN_SyncIo_File_new(fname, GWEN_SyncIo_File_CreationMode_OpenExisting); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); return GWEN_DBIO_CheckFileResultNotOk; } dbTmp=GWEN_DB_Group_new("tmp"); dbCfg=GWEN_DB_Group_new("cfg"); rv=GWEN_DBIO_OldDb_Import(dbio, sio, dbTmp, dbCfg ,GWEN_DB_FLAGS_DEFAULT); GWEN_DB_Group_free(dbCfg); GWEN_DB_Group_free(dbTmp); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); if (rv) { return GWEN_DBIO_CheckFileResultNotOk; } return GWEN_DBIO_CheckFileResultUnknown; } GWEN_DBIO *GWEN_DBIO_OldDb_Factory(GWEN_PLUGIN *pl) { GWEN_DBIO *dbio; dbio=GWEN_DBIO_new("OldDb", "Imports and exports Old OpenHBCI data"); GWEN_DBIO_SetImportFn(dbio, GWEN_DBIO_OldDb_Import); GWEN_DBIO_SetExportFn(dbio, GWEN_DBIO_OldDb_Export); GWEN_DBIO_SetCheckFileFn(dbio, GWEN_DBIO_OldDb_CheckFile); return dbio; } GWEN_PLUGIN *dbio_olddb_factory(GWEN_PLUGIN_MANAGER *pm, const char *modName, const char *fileName) { GWEN_PLUGIN *pl; pl=GWEN_DBIO_Plugin_new(pm, modName, fileName); assert(pl); GWEN_DBIO_Plugin_SetFactoryFn(pl, GWEN_DBIO_OldDb_Factory); return pl; } gwenhywfar-4.15.2beta/plugins/dbio/olddb/Makefile.am0000644000175000017500000000154212364015347017266 00000000000000EXTRA_DIST=ressource.rc.in INCLUDES= -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/parser @all_includes@ dbioplugindir = $(gwenhywfar_plugindir)/dbio noinst_HEADERS=olddb_p.h dbioplugin_LTLIBRARIES=olddb.la dbioplugin_DATA=olddb.xml olddb_la_SOURCES=olddb.c olddb_la_LIBADD=$(top_builddir)/src/libgwenhywfar.la olddb_la_LDFLAGS = -no-undefined $(STRIPALL) \ -module -version-info 0:1:0 sources: for f in $(olddb_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dbioplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done ressource.o: ressource.rc $(RC) -o $@ $< gwenhywfar-4.15.2beta/plugins/dbio/olddb/olddb_p.h0000644000175000017500000000451412364015347017010 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Thu Oct 30 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_PLUGIN_OLDDB_H #define GWENHYWFAR_PLUGIN_OLDDB_H #include #include #include #define GWEN_DBIO_OLDDB_MAXVALUE_LEN (16*1024) GWENHYWFAR_EXPORT GWEN_PLUGIN *dbio_olddb_factory(GWEN_PLUGIN_MANAGER *pm, const char *modName, const char *fileName); static int GWEN_DBIO_OldDb_Export(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, uint32_t flags); static int GWEN_DBIO_OldDb_Import(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, uint32_t flags); static GWEN_DBIO_CHECKFILE_RESULT GWEN_DBIO_OldDb_CheckFile(GWEN_DBIO *dbio, const char *fname); #endif gwenhywfar-4.15.2beta/plugins/dbio/xmldb/0000755000175000017500000000000012643267237015341 500000000000000gwenhywfar-4.15.2beta/plugins/dbio/xmldb/xmldb.xml.in0000644000175000017500000000056112364015347017511 00000000000000 @GWENHYWFAR_VERSION_STRING@ Martin Preuss(martin@libchipcard.de) Importer for XML This plugin imports data from an XML file. gwenhywfar-4.15.2beta/plugins/dbio/xmldb/ressource.rc.in0000644000175000017500000000656512364015347020233 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: ressource.rc.in 691 2005-02-15 02:13:06Z aquamaniac $ begin : Wed Mar 27 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #include // Language: 407=DE, 409=US, 809=UK // German resources LANGUAGE LANG_GERMAN, SUBLANG_GERMAN #pragma code_page(1252) // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA // Version VS_VERSION_INFO VERSIONINFO FILEVERSION @GWENHYWFAR_VERSION_MAJOR@, @GWENHYWFAR_VERSION_MINOR@, @GWENHYWFAR_VERSION_PATCHLEVEL@, @GWENHYWFAR_VERSION_BUILD@ PRODUCTVERSION @GWENHYWFAR_VERSION_MAJOR@, @GWENHYWFAR_VERSION_MINOR@, @GWENHYWFAR_VERSION_PATCHLEVEL@, @GWENHYWFAR_VERSION_BUILD@ FILEFLAGSMASK 0x3fL FILEFLAGS 0x0L FILEOS 0x40004L // Windows NT FILETYPE 0x2L // DLL FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040704b0" BEGIN //VALUE "Comments", "\0" VALUE "CompanyName", " Aquamaniac\0" VALUE "FileDescription", "Multi purpose library\0" VALUE "FileVersion", "v@GWENHYWFAR_VERSION_RELEASE_STRING@\0" VALUE "InternalName", "Gwenhywfar\0" VALUE "LegalCopyright", "Copyright Š 2003 by Martin Preuss\0" VALUE "LegalTrademarks", "Aquamaniac\0" VALUE "OriginalFilename", "xmldb.DLL\0" //VALUE "PrivateBuild", "\0" VALUE "ProductName", "Gwenhywfar\0" VALUE "ProductVersion", "v@GWENHYWFAR_VERSION_FULL_STRING@\0" VALUE "Author", "Martin Preuss\0" VALUE "Email", "martin@libchipcard.de\0" VALUE "Homepage", "http://gwenhywfar.sf.net/\0" VALUE "Description", "OldDB Plugin\0" VALUE "License", "LGPL\0" //VALUE "SpecialBuild", "\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x407, 1200 END END gwenhywfar-4.15.2beta/plugins/dbio/xmldb/Makefile.in0000644000175000017500000006525212634022414017322 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = plugins/dbio/xmldb DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(srcdir)/xmldb.xml.in $(srcdir)/ressource.rc.in \ $(top_srcdir)/depcomp $(noinst_HEADERS) README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = xmldb.xml ressource.rc CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(dbioplugindir)" \ "$(DESTDIR)$(dbioplugindir)" LTLIBRARIES = $(dbioplugin_LTLIBRARIES) xmldb_la_DEPENDENCIES = $(top_builddir)/src/libgwenhywfar.la am_xmldb_la_OBJECTS = xmldb.lo xmldb_la_OBJECTS = $(am_xmldb_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = xmldb_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(xmldb_la_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(xmldb_la_SOURCES) DIST_SOURCES = $(xmldb_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(dbioplugin_DATA) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ EXTRA_DIST = ressource.rc.in README INCLUDES = -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/parser @all_includes@ dbioplugindir = $(gwenhywfar_plugindir)/dbio noinst_HEADERS = xmldb_p.h dbioplugin_LTLIBRARIES = xmldb.la dbioplugin_DATA = xmldb.xml xmldb_la_SOURCES = xmldb.c xmldb_la_LIBADD = $(top_builddir)/src/libgwenhywfar.la xmldb_la_LDFLAGS = -no-undefined $(STRIPALL) \ -module -version-info 0:1:0 all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu plugins/dbio/xmldb/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu plugins/dbio/xmldb/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): xmldb.xml: $(top_builddir)/config.status $(srcdir)/xmldb.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ ressource.rc: $(top_builddir)/config.status $(srcdir)/ressource.rc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-dbiopluginLTLIBRARIES: $(dbioplugin_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(dbioplugin_LTLIBRARIES)'; test -n "$(dbioplugindir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(dbioplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dbioplugindir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(dbioplugindir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(dbioplugindir)"; \ } uninstall-dbiopluginLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(dbioplugin_LTLIBRARIES)'; test -n "$(dbioplugindir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(dbioplugindir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(dbioplugindir)/$$f"; \ done clean-dbiopluginLTLIBRARIES: -test -z "$(dbioplugin_LTLIBRARIES)" || rm -f $(dbioplugin_LTLIBRARIES) @list='$(dbioplugin_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } xmldb.la: $(xmldb_la_OBJECTS) $(xmldb_la_DEPENDENCIES) $(EXTRA_xmldb_la_DEPENDENCIES) $(AM_V_CCLD)$(xmldb_la_LINK) -rpath $(dbioplugindir) $(xmldb_la_OBJECTS) $(xmldb_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmldb.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dbiopluginDATA: $(dbioplugin_DATA) @$(NORMAL_INSTALL) @list='$(dbioplugin_DATA)'; test -n "$(dbioplugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dbioplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dbioplugindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dbioplugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dbioplugindir)" || exit $$?; \ done uninstall-dbiopluginDATA: @$(NORMAL_UNINSTALL) @list='$(dbioplugin_DATA)'; test -n "$(dbioplugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(dbioplugindir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(dbioplugindir)" "$(DESTDIR)$(dbioplugindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-dbiopluginLTLIBRARIES clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dbiopluginDATA install-dbiopluginLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dbiopluginDATA uninstall-dbiopluginLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-dbiopluginLTLIBRARIES clean-generic clean-libtool \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dbiopluginDATA \ install-dbiopluginLTLIBRARIES install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-dbiopluginDATA \ uninstall-dbiopluginLTLIBRARIES sources: for f in $(xmldb_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dbioplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done ressource.o: ressource.rc $(RC) -o $@ $< # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/plugins/dbio/xmldb/xmldb.c0000644000175000017500000003353712364015347016537 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: xmldb.c 1020 2006-03-26 17:16:05Z aquamaniac $ begin : Thu Oct 30 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "xmldb_p.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include int GWEN_DBIO__XmlDb_ImportGroup(GWEN_DBIO *dbio, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, GWEN_XMLNODE *node) { GWEN_XMLNODE *n; assert(node); n=GWEN_XMLNode_GetFirstTag(node); while(n) { const char *tname; const char *s; tname=GWEN_XMLNode_GetData(n); assert(tname && *tname); s=GWEN_XMLNode_GetProperty(n, "type", 0); if (s) { if (strcasecmp(s, "group")==0) { GWEN_DB_NODE *db; int rv; db=GWEN_DB_GetGroup(data, flags, tname); if (db==0) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return GWEN_ERROR_INVALID; } rv=GWEN_DBIO__XmlDb_ImportGroup(dbio, flags, db, cfg, n); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } else if (strcasecmp(s, "var")==0) { int rv; rv=GWEN_DBIO__XmlDb_ImportVar(dbio, flags, data, cfg, n); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } else { DBG_ERROR(GWEN_LOGDOMAIN, "Unexpected type \"%s\"", s); return GWEN_ERROR_INVALID; } } n=GWEN_XMLNode_GetNextTag(n); } return 0; } void GWEN_DBIO__XmlDb_ReadDataTags(GWEN_XMLNODE *node, GWEN_BUFFER *buf) { GWEN_XMLNODE *ndata; GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, 256, 0, 1); ndata=GWEN_XMLNode_GetFirstData(node); while(ndata) { const char *s; s=GWEN_XMLNode_GetData(ndata); if (s) { if (GWEN_Buffer_GetUsedBytes(tbuf)) GWEN_Buffer_AppendByte(tbuf, ' '); GWEN_Buffer_AppendString(tbuf, s); } ndata=GWEN_XMLNode_GetNextData(node); } rv=GWEN_Text_UnescapeXmlToBuffer(GWEN_Buffer_GetStart(tbuf), buf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); } GWEN_Buffer_free(tbuf); } int GWEN_DBIO__XmlDb_ImportVar(GWEN_DBIO *dbio, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, GWEN_XMLNODE *node) { GWEN_XMLNODE *n; const char *vname; GWEN_BUFFER *tbuf; assert(node); vname=GWEN_XMLNode_GetData(node); assert(vname && *vname); tbuf=GWEN_Buffer_new(0, 256, 0, 1); n=GWEN_XMLNode_FindFirstTag(node, "value", 0, 0); while(n) { const char *s; const char *d; int rv; GWEN_DBIO__XmlDb_ReadDataTags(n, tbuf); d=GWEN_Buffer_GetStart(tbuf); if (*d) { s=GWEN_XMLNode_GetData(n); assert(s && *s); s=GWEN_XMLNode_GetProperty(n, "type", 0); if (s) { if (strcasecmp(s, "char")==0) { rv=GWEN_DB_SetCharValue(data, flags, vname, d); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } } else if (strcasecmp(s, "int")==0) { int val; if (1!=sscanf(d, "%i", &val)) { DBG_INFO(GWEN_LOGDOMAIN, "Non-integer value [%s]", d); GWEN_Buffer_free(tbuf); return GWEN_ERROR_INVALID; } rv=GWEN_DB_SetIntValue(data, flags, vname, val); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } } else if (strcasecmp(s, "bin")==0) { GWEN_BUFFER *xbuf; xbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Text_FromHexBuffer(d, xbuf); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(xbuf); GWEN_Buffer_free(tbuf); return rv; } rv=GWEN_DB_SetBinValue(data, flags, vname, GWEN_Buffer_GetStart(xbuf), GWEN_Buffer_GetUsedBytes(xbuf)); GWEN_Buffer_free(xbuf); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } } else { DBG_ERROR(GWEN_LOGDOMAIN, "Unhandled value type \"%s\"", s); GWEN_Buffer_free(tbuf); return GWEN_ERROR_INVALID; } } } else { DBG_DEBUG(GWEN_LOGDOMAIN, "Empty value"); } GWEN_Buffer_Reset(tbuf); n=GWEN_XMLNode_FindNextTag(n, "value", 0, 0); } GWEN_Buffer_free(tbuf); return 0; } int GWEN_DBIO_XmlDb_Import(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, uint32_t flags) { int rv; GWEN_XMLNODE *root; GWEN_XMLNODE *n; const char *rootName=0; GWEN_XML_CONTEXT *ctx; assert(data); if (cfg) rootName=GWEN_DB_GetCharValue(cfg, "rootElement", 0, 0); root=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); ctx=GWEN_XmlCtxStore_new(root, GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_HANDLE_HEADERS); rv=GWEN_XMLContext_ReadFromIo(ctx, sio); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_XmlCtx_free(ctx); GWEN_XMLNode_free(root); return rv; } GWEN_XmlCtx_free(ctx); if (rootName) { n=GWEN_XMLNode_FindFirstTag(root, rootName, 0, 0); if (!n) { DBG_ERROR(GWEN_LOGDOMAIN, "Root node in XML file is not \"%s\"", rootName); GWEN_XMLNode_free(root); return GWEN_ERROR_BAD_DATA; } } else { n=GWEN_XMLNode_GetFirstTag(root); if (!n) { DBG_ERROR(GWEN_LOGDOMAIN, "No root node in XML file"); GWEN_XMLNode_free(root); return GWEN_ERROR_BAD_DATA; } } rv=GWEN_DBIO__XmlDb_ImportGroup(dbio, flags, data, cfg, n); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_XMLNode_free(root); return rv; } GWEN_XMLNode_free(root); return 0; } int GWEN_DBIO_XmlDb__ExportGroup(GWEN_DBIO *dbio, GWEN_DB_NODE *data, GWEN_XMLNODE *node, const char *newName) { const char *s; GWEN_XMLNODE *n; GWEN_DB_NODE *dbT; int rv; if (newName) s=newName; else s=GWEN_DB_GroupName(data); assert(s && *s); n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, s); GWEN_XMLNode_SetProperty(n, "type", "group"); GWEN_XMLNode_AddChild(node, n); /* store variables */ dbT=GWEN_DB_GetFirstVar(data); while(dbT) { if (!(GWEN_DB_GetNodeFlags(dbT) & GWEN_DB_NODE_FLAGS_VOLATILE)) { rv=GWEN_DBIO_XmlDb__ExportVar(dbio, dbT, n); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } dbT=GWEN_DB_GetNextVar(dbT); } /* store groups */ dbT=GWEN_DB_GetFirstGroup(data); while(dbT) { if (!(GWEN_DB_GetNodeFlags(dbT) & GWEN_DB_NODE_FLAGS_VOLATILE)) { rv=GWEN_DBIO_XmlDb__ExportGroup(dbio, dbT, n, 0); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } dbT=GWEN_DB_GetNextGroup(dbT); } return 0; } int GWEN_DBIO_XmlDb__ExportVar(GWEN_DBIO *dbio, GWEN_DB_NODE *data, GWEN_XMLNODE *node) { const char *s; GWEN_XMLNODE *n; GWEN_DB_NODE *dbT; int rv; s=GWEN_DB_VariableName(data); assert(s && *s); n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, s); GWEN_XMLNode_SetProperty(n, "type", "var"); GWEN_XMLNode_AddChild(node, n); /* store variables */ dbT=GWEN_DB_GetFirstValue(data); while(dbT) { if (!(GWEN_DB_GetNodeFlags(dbT) & GWEN_DB_NODE_FLAGS_VOLATILE)) { GWEN_DB_NODE_TYPE vt; GWEN_XMLNODE *vn; vt=GWEN_DB_GetValueType(dbT); switch(vt) { case GWEN_DB_NodeType_ValueChar: s=GWEN_DB_GetCharValueFromNode(dbT); if (s && *s) { GWEN_XMLNODE *dn; GWEN_BUFFER *tbuf; vn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "value"); GWEN_XMLNode_SetProperty(vn, "type", "char"); GWEN_XMLNode_AddChild(n, vn); tbuf=GWEN_Buffer_new(0, 64, 0, 1); rv=GWEN_Text_EscapeXmlToBuffer(s, tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } dn=GWEN_XMLNode_new(GWEN_XMLNodeTypeData, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); GWEN_XMLNode_AddChild(vn, dn); } break; case GWEN_DB_NodeType_ValueInt: { char nbuf[32]; GWEN_XMLNODE *dn; snprintf(nbuf, sizeof(nbuf), "%i", GWEN_DB_GetIntValueFromNode(dbT)); vn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "value"); GWEN_XMLNode_SetProperty(vn, "type", "int"); GWEN_XMLNode_AddChild(n, vn); dn=GWEN_XMLNode_new(GWEN_XMLNodeTypeData, nbuf); GWEN_XMLNode_AddChild(vn, dn); break; } case GWEN_DB_NodeType_ValueBin: { const void *vp; unsigned int vsize; vp=GWEN_DB_GetBinValueFromNode(dbT, &vsize); if (vp && vsize) { GWEN_BUFFER *bbuf; GWEN_XMLNODE *dn; bbuf=GWEN_Buffer_new(0, vsize*2, 0, 1); rv=GWEN_Text_ToHexBuffer((const char*)vp, vsize, bbuf, 0, 0, 0); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bbuf); return rv; } vn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "value"); GWEN_XMLNode_SetProperty(vn, "type", "bin"); GWEN_XMLNode_AddChild(n, vn); dn=GWEN_XMLNode_new(GWEN_XMLNodeTypeData, GWEN_Buffer_GetStart(bbuf)); GWEN_Buffer_free(bbuf); GWEN_XMLNode_AddChild(vn, dn); } break; } case GWEN_DB_NodeType_ValuePtr: DBG_DEBUG(GWEN_LOGDOMAIN, "Not storing pointer value"); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Unsupported variable type %d", vt); return GWEN_ERROR_INVALID; } } /* if non-volatile */ dbT=GWEN_DB_GetNextValue(dbT); } return 0; } int GWEN_DBIO_XmlDb_Export(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, uint32_t flags) { GWEN_XMLNODE *root; GWEN_XMLNODE *nh; int rv; const char *rootName=0; GWEN_XML_CONTEXT *ctx; if (cfg) rootName=GWEN_DB_GetCharValue(cfg, "rootElement", 0, 0); root=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); nh=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "?xml"); GWEN_XMLNode_SetProperty(nh, "version", "1.0"); GWEN_XMLNode_SetProperty(nh, "encoding", "utf-8"); GWEN_XMLNode_AddHeader(root, nh); rv=GWEN_DBIO_XmlDb__ExportGroup(dbio, data, root, rootName); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_XMLNode_free(root); return rv; } ctx=GWEN_XmlCtxStore_new(root, GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_SIMPLE | GWEN_XML_FLAGS_HANDLE_HEADERS); rv=GWEN_XMLNode_WriteToStream(root, ctx, sio); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_XmlCtx_free(ctx); GWEN_XMLNode_free(root); return rv; } GWEN_XmlCtx_free(ctx); GWEN_XMLNode_free(root); return 0; } GWEN_DBIO_CHECKFILE_RESULT GWEN_DBIO_XmlDb_CheckFile(GWEN_DBIO *dbio, const char *fname){ GWEN_SYNCIO *sio; int rv; uint8_t tbuf[256]; assert(dbio); assert(fname); sio=GWEN_SyncIo_File_new(fname, GWEN_SyncIo_File_CreationMode_OpenExisting); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); return GWEN_DBIO_CheckFileResultNotOk; } rv=GWEN_SyncIo_Read(sio, tbuf, sizeof(tbuf)-1); if (rv<1) { DBG_INFO(GWEN_LOGDOMAIN, "File \"%s\" is not supported by this plugin", fname); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return GWEN_DBIO_CheckFileResultNotOk; } tbuf[rv-1]=0; if (-1!=GWEN_Text_ComparePattern((const char*) tbuf, "*>$(top_srcdir)/i18nsources; \ done for f in $(dbioplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done ressource.o: ressource.rc $(RC) -o $@ $< gwenhywfar-4.15.2beta/plugins/dbio/xmldb/xmldb_p.h0000644000175000017500000000575212364015347017061 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: olddb_p.h 609 2004-11-26 20:39:52Z aquamaniac $ begin : Thu Oct 30 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_PLUGIN_XMLDB_H #define GWENHYWFAR_PLUGIN_XMLDB_H #include #include #include GWENHYWFAR_EXPORT GWEN_PLUGIN *dbio_xmldb_factory(GWEN_PLUGIN_MANAGER *pm, const char *modName, const char *fileName); static int GWEN_DBIO_XmlDb_Export(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, uint32_t flags); static int GWEN_DBIO_XmlDb_Import(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, uint32_t flags); static GWEN_DBIO_CHECKFILE_RESULT GWEN_DBIO_XmlDb_CheckFile(GWEN_DBIO *dbio, const char *fname); static int GWEN_DBIO__XmlDb_ImportGroup(GWEN_DBIO *dbio, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, GWEN_XMLNODE *node); static void GWEN_DBIO__XmlDb_ReadDataTags(GWEN_XMLNODE *node, GWEN_BUFFER *buf); static int GWEN_DBIO__XmlDb_ImportVar(GWEN_DBIO *dbio, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, GWEN_XMLNODE *node); static int GWEN_DBIO_XmlDb__ExportVar(GWEN_DBIO *dbio, GWEN_DB_NODE *data, GWEN_XMLNODE *node); static int GWEN_DBIO_XmlDb__ExportGroup(GWEN_DBIO *dbio, GWEN_DB_NODE *data, GWEN_XMLNODE *node, const char *newName); #endif gwenhywfar-4.15.2beta/plugins/dbio/xmldb/README0000644000175000017500000000075312364015347016137 00000000000000 This plugin reads/writes GWEN_DBs as XML files. It knows the following parameters: char rootElement ---------------- When exporting: This is the name of the root XML element when saving a GWEN_DB. If omitted then the name of the GWEN_DB group is used. When importing: This is the name of the expected root element of the XML file. When omitted then the root element may have any name, otherwise an error is returned when then name of the root node does not match the value given here. gwenhywfar-4.15.2beta/plugins/dbio/Makefile.in0000644000175000017500000005541112634022414016210 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = plugins/dbio DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ DIST_SUBDIRS = csv olddb xmldb SUBDIRS = @gwenhywfar_plugins_dbio_dirs@ EXTRA_DIST = README all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu plugins/dbio/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu plugins/dbio/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am sources: for d in $(SUBDIRS); do \ make -C $$d sources; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/plugins/dbio/Makefile.am0000644000175000017500000000023612364015347016201 00000000000000DIST_SUBDIRS=csv olddb xmldb SUBDIRS=@gwenhywfar_plugins_dbio_dirs@ EXTRA_DIST=README sources: for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-4.15.2beta/plugins/dbio/README0000644000175000017500000000016712364015347015030 00000000000000 This folder contains DBIO plugins. These are plugins that import data into a GWEN_DB or exports them from a GWEN_DB. gwenhywfar-4.15.2beta/test/0000755000175000017500000000000012643267242012610 500000000000000gwenhywfar-4.15.2beta/test/gwentest.vcproj0000644000175000017500000000355612364015347015623 00000000000000 gwenhywfar-4.15.2beta/test/Makefile.in0000644000175000017500000005441012634022416014571 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = gwentest$(EXEEXT) subdir = test DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_gwentest_OBJECTS = gwentest.$(OBJEXT) gwentest_OBJECTS = $(am_gwentest_OBJECTS) am__DEPENDENCIES_1 = gwentest_DEPENDENCIES = $(top_builddir)/src/libgwenhywfar.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(gwentest_SOURCES) DIST_SOURCES = $(gwentest_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = -I$(gwenhywfar_symlinkdir) \ $(LIBGNUTLS_CFLAGS) $(GPG_ERROR_CFLAGS) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/parser @all_includes@ gwentest_SOURCES = gwentest.c gwentest_LDADD = $(top_builddir)/src/libgwenhywfar.la \ $(LIBGCRYPT_LIBS) $(LIBGNUTLS_LIBS) $(GPG_ERROR_LIBS) EXTRA_DIST = README.MSVC gwentest.vcproj testdialog.xml all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu test/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list gwentest$(EXEEXT): $(gwentest_OBJECTS) $(gwentest_DEPENDENCIES) $(EXTRA_gwentest_DEPENDENCIES) @rm -f gwentest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(gwentest_OBJECTS) $(gwentest_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gwentest.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am sources: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/test/README.MSVC0000644000175000017500000000417412364015347014162 00000000000000This README file contains instructions to compile the test program "gwentest.c" with the Microsoft Visual Studio compiler. It is possible to compile gwenhywfar by some other compiler (e.g. the mingw/gcc system) but still use the resulting DLL with some other compiler, e.gg. the Microsoft Visual Studio C compiler (MSVC). We will describe how to setup your MSVC project in order to use a MSVC-compiled executable together with a gcc-compiled gwenhywfar32.dll In order to test this possibility, according to http://www.mingw.org/mingwfaq.shtml#faq-msvcdll you need the gwenhywfar DLL and DEF files. These are already generated automatically when you run "make" under a Mingw system. Now, quoting from that mingw website, "MSVC cannot use the MinGW library, but since you have already the DEF file you may easily produce one by the Microsoft LIB tool". With the new libtool, there is no DEF file anymore. Nevertheless the required LIB file can be created by the following: In the directory gwenhywfar/src/.libs, do the following: dlltool --export-all-symbols -l libgwenhywfar.lib libgwenhywfar-38.dll and this will create the libgwenhywfar.lib file needed by MSVC. (Historical note: Previously, this was achieved by the followint: In the directory gwenhywfar/src you have to do "lib /machine:i386 /def:gwenhywfar32.def" and there you have the gwenhywfar32.lib file that is needed in MSVC.) Now you need to compile gwentest.c by MSVC. We have provided a MSVC project file in test/gwentest.vcproj. The include and library paths should already be set up correctly, except maybe for the library path to your mingw library directory (c:\msys\1.0\mingw\lib for me). This might need to be adapted by right-clicking on the "gwentest" project, then "Properties"-> "Linker"-> "General" -> "Additional library directories", and you have to insert the directory where mingw's library "libmingwex.a" can be found. After that, MSVC should be able to compile and link the gwentest program. If you run it, you don't see anything, because the program expects some command line arguments. Therefore you have to run the program from the command line, e.g. "gwentest.exe db" Enjoy! gwenhywfar-4.15.2beta/test/Makefile.am0000644000175000017500000000101012364015347014551 00000000000000INCLUDES= -I$(gwenhywfar_symlinkdir) \ $(LIBGNUTLS_CFLAGS) $(GPG_ERROR_CFLAGS) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/parser @all_includes@ noinst_PROGRAMS=gwentest gwentest_SOURCES=gwentest.c gwentest_LDADD=$(top_builddir)/src/libgwenhywfar.la \ $(LIBGCRYPT_LIBS) $(LIBGNUTLS_LIBS) $(GPG_ERROR_LIBS) EXTRA_DIST = README.MSVC gwentest.vcproj testdialog.xml sources: gwenhywfar-4.15.2beta/test/gwentest.c0000644000175000017500000044122312560445316014540 00000000000000 #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #ifndef OS_WIN32 # include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef OS_WIN32 # include # define sleep(x) Sleep(x*1000) # define strcasecmp(a, b) strcmp(a, b) #else # include # include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef WITH_ZIP_TEST # include #endif #ifdef USE_LIBXML2 # include # include #endif #include #include #include #if 0 #include #include #include #endif #include #ifdef HAVE_ARPA_INET_H # include #endif //#define TEST_GPARSER static int readFile(const char *fname, GWEN_BUFFER *dbuf) { FILE *f; f=fopen(fname, "rb"); if (f) { while(!feof(f)) { uint32_t l; ssize_t s; char *p; GWEN_Buffer_AllocRoom(dbuf, 1024); l=GWEN_Buffer_GetMaxUnsegmentedWrite(dbuf); p=GWEN_Buffer_GetPosPointer(dbuf); s=fread(p, 1, l, f); if (s==0) break; if (s==(ssize_t)-1) { DBG_ERROR(0, "fread(%s): %s", fname, strerror(errno)); fclose(f); return GWEN_ERROR_IO; } GWEN_Buffer_IncrementPos(dbuf, s); GWEN_Buffer_AdjustUsedBytes(dbuf); } fclose(f); return 0; } else { DBG_ERROR(0, "fopen(%s): %s", fname, strerror(errno)); return GWEN_ERROR_IO; } } static int removeCTRL(GWEN_BUFFER *dbuf) { char *p1; char *p2; p1=GWEN_Buffer_GetStart(dbuf); p2=p1; while(*p1) { if ((*p1)>31) *(p2++)=*p1; p1++; } GWEN_Buffer_Crop(dbuf, 0, p2-GWEN_Buffer_GetStart(dbuf)); return 0; } static int writeToFile(FILE *f, const char *p, int len) { while(len>0) { ssize_t l; ssize_t s; l=1024; if (l>len) l=len; s=fwrite(p, 1, l, f); if (s==(ssize_t)-1 || s==0) { DBG_ERROR(0, "fwrite: %s", strerror(errno)); return GWEN_ERROR_IO; } p+=s; len-=s; } return 0; } static int writeFile(const char *fname, const char *p, int len) { FILE *f; f=fopen(fname, "wb"); if (f) { int rv; rv=writeToFile(f, p, len); if (rv<0) { DBG_ERROR(0, "here (%d)", rv); fclose(f); return rv; } if (fclose(f)) { DBG_ERROR(0, "here (%d)", rv); return rv; } } else { DBG_ERROR(0, "fopen(%s): %s", fname, strerror(errno)); return GWEN_ERROR_IO; } return 0; } static int zip_inflate(const char *ptr, unsigned int size, GWEN_BUFFER *buf) { #ifdef WITH_ZIP_TEST z_stream z; char outbuf[512]; int rv; int mode; z.next_in=(unsigned char*)ptr; z.avail_in=size; z.next_out=(unsigned char*)outbuf; z.avail_out=sizeof(outbuf); z.zalloc=Z_NULL; z.zfree=Z_NULL; rv=inflateInit(&z); if (rv!=Z_OK) { DBG_ERROR(0, "Error on deflateInit (%d)", rv); return -1; } mode=Z_NO_FLUSH; for(;;) { rv=inflate(&z, mode); if (z.avail_out!=sizeof(outbuf)) { GWEN_Buffer_AppendBytes(buf, outbuf, sizeof(outbuf)-z.avail_out); z.next_out=(unsigned char*)outbuf; z.avail_out=sizeof(outbuf); } if (rv==Z_STREAM_END) break; if (rv!=Z_OK) { DBG_ERROR(0, "Error on inflate (%d) [%d, %d]", rv, z.avail_out, z.avail_in); deflateEnd(&z); return -1; } if (z.avail_in==0) mode=Z_FINISH; if (z.avail_out==0) { GWEN_Buffer_AppendBytes(buf, outbuf, sizeof(outbuf)); z.next_out=(unsigned char*)outbuf; z.avail_out=sizeof(outbuf); } } if (z.avail_out!=sizeof(outbuf)) { GWEN_Buffer_AppendBytes(buf, outbuf, sizeof(outbuf)-z.avail_out); z.next_out=(unsigned char*)outbuf; z.avail_out=sizeof(outbuf); } inflateEnd(&z); #endif return 0; } int testDB(int argc, char **argv) { GWEN_DB_NODE *cfg; int rv; const char *p; GWEN_DB_NODE *dbT; fprintf(stderr,"Creating DB\n"); cfg=GWEN_DB_Group_new("Config"); /* test var 1 */ fprintf(stderr, "Setting char values\n"); rv=GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_OVERWRITE_VARS, "testgroup/charvar", "charvalue1"); if (rv) { fprintf(stderr, "ERROR: Could not set value1.\n"); return 2; } dbT=GWEN_DB_GetGroup(cfg, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "testgroup"); if (!dbT) { fprintf(stderr, "ERROR: Could not get group \"testgroup\".\n"); return 2; } p=GWEN_DB_GetCharValue(dbT, "charvar", 0, NULL); if (p==NULL) { fprintf(stderr, "ERROR: Could not get charvar.\n"); return 2; } if (strcmp(p, "charvalue1")!=0) { fprintf(stderr, "ERROR: Value for charvar does not equal.\n"); return 2; } p=GWEN_DB_GetCharValue(cfg, "testgroup/charvar", 0, NULL); if (p==NULL) { fprintf(stderr, "ERROR: Could not get charvar with path.\n"); return 2; } if (strcmp(p, "charvalue1")!=0) { fprintf(stderr, "ERROR: Value for charvar from path does not equal.\n"); return 2; } /* test var 2 */ fprintf(stderr, "Setting char values 2\n"); rv=GWEN_DB_SetCharValue(cfg, 0, "testgroup/charvar", "charvalue2"); if (rv) { fprintf(stderr, "ERROR: Could not set value2.\n"); return 2; } /* test whether charvar1 has changed (it should not) */ dbT=GWEN_DB_GetGroup(cfg, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "testgroup"); if (!dbT) { fprintf(stderr, "ERROR: Could not get group \"testgroup\".\n"); return 2; } p=GWEN_DB_GetCharValue(dbT, "charvar", 0, NULL); if (p==NULL) { fprintf(stderr, "ERROR: Could not get charvar.\n"); return 2; } if (strcmp(p, "charvalue1")!=0) { fprintf(stderr, "ERROR: Value 1 for charvar does not equal [%s]!=[%s].\n", p, "charvalue1"); return 2; } p=GWEN_DB_GetCharValue(cfg, "testgroup/charvar", 0, NULL); if (p==NULL) { fprintf(stderr, "ERROR: Could not get charvar with path.\n"); return 2; } if (strcmp(p, "charvalue1")!=0) { fprintf(stderr, "ERROR: Value for charvar from path does not equal.\n"); return 2; } /* test whether charvar value 2 exists (it should) */ p=GWEN_DB_GetCharValue(dbT, "charvar", 1, NULL); if (p==NULL) { fprintf(stderr, "ERROR: Could not get charvar 2.\n"); return 2; } if (strcmp(p, "charvalue2")!=0) { fprintf(stderr, "ERROR: Value 2 for charvar does not equal.\n"); return 2; } p=GWEN_DB_GetCharValue(cfg, "testgroup/charvar", 1, NULL); if (p==NULL) { fprintf(stderr, "ERROR: Could not get charvar with path.\n"); return 2; } if (strcmp(p, "charvalue2")!=0) { fprintf(stderr, "ERROR: Value for charvar 2 from path does not equal.\n"); return 2; } /* test var 2 again, this time overwrite*/ fprintf(stderr, "Setting char values 2 (overwrite)\n"); rv=GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_OVERWRITE_VARS, "testgroup/charvar", "charvalue2"); if (rv) { fprintf(stderr, "ERROR: Could not overwrite value2.\n"); return 2; } /* test whether charvar1 has changed (it should have) */ dbT=GWEN_DB_GetGroup(cfg, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "testgroup"); if (!dbT) { fprintf(stderr, "ERROR: Could not get group \"testgroup\".\n"); return 2; } p=GWEN_DB_GetCharValue(dbT, "charvar", 0, NULL); if (p==NULL) { fprintf(stderr, "ERROR: Could not get charvar.\n"); return 2; } if (strcmp(p, "charvalue2")!=0) { fprintf(stderr, "ERROR: Value 2 (overwrite) for charvar does not " "equal [%s]!=[%s].\n", p, "charvalue2"); return 2; } p=GWEN_DB_GetCharValue(cfg, "testgroup/charvar", 0, NULL); if (p==NULL) { fprintf(stderr, "ERROR: Could not get charvar with path.\n"); return 2; } if (strcmp(p, "charvalue2")!=0) { fprintf(stderr, "ERROR: Value for overwritten charvar from " "path does not equal.\n"); return 2; } /* test whether charvar value 2 exists (it should not) */ p=GWEN_DB_GetCharValue(dbT, "charvar", 1, NULL); if (p!=NULL) { fprintf(stderr, "ERROR: charvar 2 should have been overwritten.\n"); return 2; } p=GWEN_DB_GetCharValue(cfg, "testgroup/charvar", 1, NULL); if (p!=NULL) { fprintf(stderr, "ERROR: Could not get charvar with path.\n"); return 2; } /* test int values */ fprintf(stderr, "Setting int values\n"); rv=GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_OVERWRITE_VARS, "testgroup/intvar", 11); rv=GWEN_DB_SetIntValue(cfg, 0, "testgroup/intvar", 22); fprintf(stderr, "Retrieving int values\n"); rv=GWEN_DB_GetIntValue(cfg, "testgroup/intvar", 0, -1); if (rv!=11) { fprintf(stderr,"ERROR: int value 1 is not 11: %d\n", rv); return 2; } rv=GWEN_DB_GetIntValue(cfg, "testgroup/intvar", 1, -1); if (rv!=22) { fprintf(stderr,"ERROR: int value 1 is not 22: %d\n", rv); return 2; } GWEN_DB_Dump(cfg, 2); fprintf(stderr,"Releasing DB\n"); GWEN_DB_Group_free(cfg); return 0; } int testDB2(int argc, char **argv) { GWEN_DB_NODE *cfg; int rv; const char *p; fprintf(stderr,"Creating DB\n"); cfg=GWEN_DB_Group_new("Config"); fprintf(stderr, "Setting char values\n"); GWEN_DB_GetGroup(cfg, GWEN_PATH_FLAGS_CREATE_GROUP, "testgroup"); GWEN_DB_GetGroup(cfg, GWEN_PATH_FLAGS_CREATE_GROUP, "testgroup"); rv=GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_OVERWRITE_VARS, "testgroup[1]/charvar", "charvalue1"); rv=GWEN_DB_SetCharValue(cfg, 0, "testgroup[1]/charvar", "charvalue2"); fprintf(stderr, "Retrieving char values\n"); p=GWEN_DB_GetCharValue(cfg, "testgroup[1]/charvar", 0, "defaultValue"); fprintf(stderr," Retrieved value 1 is: %s\n", p); p=GWEN_DB_GetCharValue(cfg, "testgroup[1]/charvar", 1, "defaultValue"); fprintf(stderr," Retrieved value 2 is: %s\n", p); fprintf(stderr, "Setting int values\n"); rv=GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_OVERWRITE_VARS, "testgroup[1]/intvar", 11); rv=GWEN_DB_SetIntValue(cfg, 0, "testgroup[1]/intvar", 22); fprintf(stderr, "Retrieving int values\n"); rv=GWEN_DB_GetIntValue(cfg, "testgroup[1]/intvar", 0, -1); fprintf(stderr," Retrieved int value 1 is: %d\n", rv); rv=GWEN_DB_GetIntValue(cfg, "testgroup[1]/intvar", 1, -1); fprintf(stderr," Retrieved int value 2 is: %d\n", rv); GWEN_DB_Dump(cfg, 2); fprintf(stderr,"Releasing DB\n"); GWEN_DB_Group_free(cfg); return 0; } int testDBfile(int argc, char **argv) { GWEN_DB_NODE *db; fprintf(stderr,"Creating DB\n"); db=GWEN_DB_Group_new("Config"); fprintf(stderr,"Reading file\n"); if (GWEN_DB_ReadFile(db, "test.db", GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP)) { fprintf(stderr,"Error reading file.\n"); return 1; } fprintf(stderr, "DB is:\n"); GWEN_DB_Dump(db, 2); fprintf(stderr,"Releasing DB\n"); GWEN_DB_Group_free(db); return 0; } int testDBfile2(int argc, char **argv) { GWEN_DB_NODE *db; if (argc<4) { fprintf(stderr, "%s dbfile2 src dest\n", argv[0]); return 1; } fprintf(stderr,"Creating DB\n"); db=GWEN_DB_Group_new("Config"); fprintf(stderr,"Reading file\n"); if (GWEN_DB_ReadFile(db, argv[2], GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP)) { fprintf(stderr,"Error reading file.\n"); return 1; } if (GWEN_DB_WriteFile(db, argv[3], GWEN_DB_FLAGS_DEFAULT &~GWEN_DB_FLAGS_ESCAPE_CHARVALUES)) { fprintf(stderr,"Error writing file.\n"); return 1; } fprintf(stderr,"Releasing DB\n"); GWEN_DB_Group_free(db); return 0; } int testDBfile3(int argc, char **argv) { GWEN_DB_NODE *db; if (argc<4) { fprintf(stderr, "%s dbfile3 src dest\n", argv[0]); return 1; } fprintf(stderr,"Creating DB\n"); db=GWEN_DB_Group_new("Config"); fprintf(stderr,"Reading file\n"); if (GWEN_DB_ReadFile(db, argv[2], GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP)) { fprintf(stderr,"Error reading file.\n"); return 1; } if (GWEN_DB_WriteFile(db, argv[3], GWEN_DB_FLAGS_DEFAULT &~GWEN_DB_FLAGS_ESCAPE_CHARVALUES)) { fprintf(stderr,"Error writing file.\n"); return 1; } fprintf(stderr,"Releasing DB\n"); GWEN_DB_Group_free(db); return 0; } int testDBfile4(int argc, char **argv) { GWEN_DB_NODE *db; fprintf(stderr,"Creating DB\n"); db=GWEN_DB_Group_new("Config"); fprintf(stderr,"Reading file\n"); if (GWEN_DB_ReadFile(db, "test.db", GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP)) { fprintf(stderr,"Error reading file.\n"); return 1; } fprintf(stderr,"Releasing DB\n"); GWEN_DB_Group_free(db); return 0; } int testXML(int argc, char **argv) { GWEN_XMLNODE *n; if (argc<3) { fprintf(stderr, "Name of testfile needed.\n"); return 1; } n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag,"root"); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Debug); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); if (GWEN_XML_ReadFile(n, argv[2], GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_HANDLE_HEADERS | GWEN_XML_FLAGS_TOLERANT_ENDTAGS | GWEN_XML_FLAGS_HANDLE_OPEN_HTMLTAGS)) { fprintf(stderr, "Error reading XML file.\n"); return 1; } fprintf(stderr, "XML file:\n"); GWEN_XMLNode_Dump(n, 2); GWEN_XMLNode_free(n); fprintf(stderr, "Memory before collection:\n"); GWEN_Memory_Dump(); GWEN_Memory_Collect(); fprintf(stderr, "Memory after collection:\n"); GWEN_Memory_Dump(); return 0; } int testXML2(int argc, char **argv) { GWEN_XMLNODE *n; if (argc<3) { fprintf(stderr, "Name of testfile needed.\n"); return 1; } n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag,"root"); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Debug); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); if (GWEN_XML_ReadFile(n, argv[2], GWEN_XML_FLAGS_TOLERANT_ENDTAGS | GWEN_XML_FLAGS_HANDLE_OPEN_HTMLTAGS | GWEN_XML_FLAGS_DEFAULT)) { fprintf(stderr, "Error reading XML file.\n"); return 1; } fprintf(stderr, "XML file:\n"); GWEN_XMLNode_Dump(n, 2); if (GWEN_XMLNode_WriteFile(n, "xml.out", GWEN_XML_FLAGS_DEFAULT)){ fprintf(stderr, "Could not write file xml.out\n"); return 2; } GWEN_XMLNode_free(n); return 0; } int testXML3(int argc, char **argv) { GWEN_XMLNODE *n; GWEN_XMLNODE *nXml; int rv; GWEN_XMLNODE_NAMESPACE_LIST *l; if (argc<3) { fprintf(stderr, "Name of testfile needed.\n"); return 1; } n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag,"root"); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Debug); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); if (GWEN_XML_ReadFile(n, argv[2], GWEN_XML_FLAGS_TOLERANT_ENDTAGS | GWEN_XML_FLAGS_HANDLE_OPEN_HTMLTAGS | GWEN_XML_FLAGS_HANDLE_NAMESPACES | GWEN_XML_FLAGS_DEFAULT)) { fprintf(stderr, "Error reading XML file.\n"); return 1; } nXml=GWEN_XMLNode_GetFirstTag(n); assert(nXml); l=GWEN_XMLNode_GetNameSpaces(nXml); if (l) { GWEN_XMLNODE_NAMESPACE *ns; ns=GWEN_XMLNode_NameSpace_List_First(l); while(ns) { fprintf(stderr, "- [%s] = [%s]\n", GWEN_XMLNode_NameSpace_GetName(ns), GWEN_XMLNode_NameSpace_GetUrl(ns)); ns=GWEN_XMLNode_NameSpace_List_Next(ns); } } rv=GWEN_XMLNode_Globalize(nXml); if (rv) { fprintf(stderr, "Could not globalize (%d)\n", rv); return 2; } if (GWEN_XMLNode_WriteFile(n, "xml.out", GWEN_XML_FLAGS_HANDLE_NAMESPACES | GWEN_XML_FLAGS_SIMPLE | GWEN_XML_FLAGS_DEFAULT)){ fprintf(stderr, "Could not write file xml.out\n"); return 2; } GWEN_XMLNode_free(n); return 0; } int testXML4(int argc, char **argv) { GWEN_XMLNODE *n; time_t startTime; time_t stopTime; if (argc<3) { fprintf(stderr, "Name of testfile needed.\n"); return 1; } n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag,"root"); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Debug); startTime=time(0); if (GWEN_XML_ReadFile(n, argv[2], GWEN_XML_FLAGS_DEFAULT)) { fprintf(stderr, "Error reading XML file.\n"); return 1; } stopTime=time(0); GWEN_XMLNode_free(n); fprintf(stderr, "Time for loading: %d secs\n", (int)(difftime(stopTime, startTime))); return 0; } int testXML5(int argc, char **argv) { #ifdef USE_LIBXML2 xmlDocPtr doc; time_t startTime; time_t stopTime; if (argc<3) { fprintf(stderr, "Name of testfile needed.\n"); return 1; } startTime=time(0); doc=xmlParseFile(argv[2]); stopTime=time(0); if (doc==0) { fprintf(stderr, "Error loading file \"%s\"", argv[2]); return -1; } fprintf(stderr, "Time for loading: %d secs\n", (int)(difftime(stopTime, startTime))); #else fprintf(stderr, "Compiled without support for LibXML\n"); #endif return 0; } int testXML6(int argc, char **argv) { GWEN_XMLNODE *n; if (argc<3) { fprintf(stderr, "Name of testfile needed.\n"); return 1; } n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag,"root"); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Debug); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); if (GWEN_XML_ReadFile(n, argv[2], GWEN_XML_FLAGS_TOLERANT_ENDTAGS | GWEN_XML_FLAGS_HANDLE_OPEN_HTMLTAGS | GWEN_XML_FLAGS_HANDLE_NAMESPACES | GWEN_XML_FLAGS_DEFAULT)) { fprintf(stderr, "Error reading XML file.\n"); return 1; } if (GWEN_XMLNode_WriteFile(n, "xml.out", GWEN_XML_FLAGS_HANDLE_NAMESPACES | GWEN_XML_FLAGS_SIMPLE)){ fprintf(stderr, "Could not write file xml.out\n"); return 2; } GWEN_XMLNode_free(n); return 0; } int testMsg(int argc, char **argv) { GWEN_XMLNODE *n; GWEN_MSGENGINE *e; GWEN_XMLNODE *sn; GWEN_DB_NODE *da; GWEN_DB_NODE *din; GWEN_BUFFER *gbuf; e=GWEN_MsgEngine_new(); n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag,"root"); da=GWEN_DB_Group_new("Data"); din=GWEN_DB_Group_new("ParsedData"); gbuf=GWEN_Buffer_new(0, 1024,0,1); if (GWEN_XML_ReadFile(n, "test.xml", GWEN_XML_FLAGS_DEFAULT)) { fprintf(stderr, "Error reading XML file.\n"); return 1; } GWEN_MsgEngine_SetDefinitions(e, n, 1); sn=GWEN_MsgEngine_FindNodeByProperty(e, "SEG", "code", 3, "HKTAN"); if (!sn) { fprintf(stderr, "Segment not found.\n"); return 2; } fprintf(stderr, "Node:\n"); GWEN_XMLNode_Dump(sn, 2); GWEN_DB_SetIntValue(da, GWEN_DB_FLAGS_OVERWRITE_VARS, "head/seq", 77); GWEN_DB_SetIntValue(da, GWEN_DB_FLAGS_OVERWRITE_VARS, "process", 4); GWEN_DB_SetCharValue(da, GWEN_DB_FLAGS_OVERWRITE_VARS, "tanMediumId", "TESTMEDIUM"); if (GWEN_MsgEngine_CreateMessageFromNode(e, sn, gbuf, da)) { fprintf(stderr, "Error creating message.\n"); return 3; } GWEN_Text_DumpString(GWEN_Buffer_GetStart(gbuf), GWEN_Buffer_GetUsedBytes(gbuf), 1); GWEN_Buffer_SetPos(gbuf, 0); if (GWEN_MsgEngine_ParseMessage(e, sn, gbuf, din, GWEN_MSGENGINE_READ_FLAGS_TRUSTINFO)) { fprintf(stderr, "Error parsing message.\n"); return 3; } GWEN_Buffer_free(gbuf); GWEN_MsgEngine_free(e); GWEN_DB_Group_free(da); GWEN_DB_Group_free(din); return 0; } int testListMsg(int argc, char **argv) { GWEN_XMLNODE *n; GWEN_MSGENGINE *e; GWEN_XMLNODE *sn; const char *segname; if (argc<3) { fprintf(stderr, "Segment name needed.\n"); return 1; } segname=argv[2]; e=GWEN_MsgEngine_new(); n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag,"root"); if (GWEN_XML_ReadFile(n, "test.xml", GWEN_XML_FLAGS_DEFAULT)) { fprintf(stderr, "Error reading XML file.\n"); return 1; } GWEN_MsgEngine_SetDefinitions(e, n, 1); sn=GWEN_MsgEngine_ListMessage(e, "SEG", segname, 0, /*GWEN_MSGENGINE_SHOW_FLAGS_NOSET*/ 0); if (!sn) { fprintf(stderr, "Error listing message.\n"); return 3; } fprintf(stderr, "Node:\n"); GWEN_XMLNode_Dump(sn, 2); GWEN_MsgEngine_free(e); return 0; } int testSnprintf(int argc, char **argv) { unsigned int i; char buffer[256]; unsigned int p; p=0xdeadbeef; i=GWEN_Debug_Snprintf(buffer, sizeof(buffer), "Test %010x %s [%s]\n", p, "Some crazy cow", 0); buffer[sizeof(buffer)-1]=0; fprintf(stderr, "Result: \"%s\" (%d)\n", buffer, i); return 0; } int testProcess(int argc, char **argv) { GWEN_Logger_Open(0, "test", "gwentest.log", GWEN_LoggerType_File, GWEN_LoggerFacility_User); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Verbous); if (argc<3) { fprintf(stderr, "%s process client|server\n", argv[0]); return 1; } fprintf(stderr, "Ping...\n"); fprintf(stderr, "argv2 is \"%s\"\n", argv[2]); if (strcasecmp(argv[2], "server")==0) { GWEN_PROCESS *pr; GWEN_PROCESS_STATE pst; GWEN_SYNCIO *sio; GWEN_BUFFER *tbuf; int err; fprintf(stderr, "Creating process\n"); pr=GWEN_Process_new(); fprintf(stderr, "Creating process: done\n"); fprintf(stderr, "Setting flags\n"); GWEN_Process_AddFlags(pr, GWEN_PROCESS_FLAGS_REDIR_STDOUT); fprintf(stderr, "Setting flags: done\n"); fprintf(stderr, "Starting process\n"); pst=GWEN_Process_Start(pr, argv[0], "process client"); //pst=GWEN_ProcessStateNotStarted; if (pst!=GWEN_ProcessStateRunning) { fprintf(stderr, "Bad process state \"%d\"", pst); return 2; } fprintf(stderr, "Started process\n"); //Sleep(15000); //return 0; sio=GWEN_Process_GetStdout(pr); assert(sio); sio=GWEN_SyncIo_Buffered_new(sio); assert(sio); tbuf=GWEN_Buffer_new(0, 512, 0, 1); do { fprintf(stderr, "Will read from client\n"); err=GWEN_SyncIo_Buffered_ReadLineToBuffer(sio, tbuf); if (err<0) { fprintf(stderr, "ERROR: Reading from clients output (%d)\n", err); return 2; } fprintf(stderr, "DATA: %s\n", GWEN_Buffer_GetStart(tbuf)); } while(err>=0); err=GWEN_SyncIo_Disconnect(sio); if (err<0) { fprintf(stderr, "ERROR: Closing clients output stream (%d)\n", err); return 2; } fprintf(stderr, "INFO: Client disconnected.\n"); return 0; } /* if server */ else { fprintf(stderr, "Hello, I'm the client...\n"); if (fprintf(stdout, "Hello, I'm the client...\n")<1) { fprintf(stderr, "ERROR: Client could not write.\n"); } sleep(10); fprintf(stderr, "Client exiting\n"); return 0; } } int testOptions(int argc, char **argv) { int rv; GWEN_DB_NODE *db; GWEN_BUFFER *ubuf; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "charOption", /* name */ 1, /* minnum */ 0, /* maxnum */ "c", /* short option */ "char", /* long option */ "char option", /* short description */ "this is a char option" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "boolOption", /* name */ 0, /* minnum */ 0, /* maxnum */ "b", /* short option */ "bool", /* long option */ "bool option", /* short description */ "This is a bool option.\n" /* long description */ "It is used to show how the mere existence of an option is interpreted\n" "by the command line argument parser" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "intOption", /* name */ 0, /* minnum */ 0, /* maxnum */ "i", /* short option */ "int", /* long option */ "int option", /* short description */ "this is an int option" /* long description */ } }; db=GWEN_DB_Group_new("arguments"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv<1) { fprintf(stderr, "ERROR: Could not parse (%d)\n", rv); } else { GWEN_DB_Dump(db, 2); } GWEN_DB_Group_free(db); ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); return 0; } int testBase64(int argc, char **argv) { GWEN_BUFFER *dst; GWEN_BUFFER *src; GWEN_BUFFER *tmp; FILE *f; char buffer[1024]; int i; if (argc<2) { fprintf(stderr, "Name of a file needed\n"); return 1; } dst=GWEN_Buffer_new(0, 600000, 0, 1); src=GWEN_Buffer_new(0, 600000, 0, 1); f=fopen(argv[2], "r"); if (!f) { perror(argv[2]); return 1; } while(!feof(f)) { i=fread(buffer, 1, sizeof(buffer), f); if (i<1) { perror("fread"); return 2; } GWEN_Buffer_AppendBytes(src, buffer, i); } /* while */ fclose(f); if (GWEN_Base64_Encode(/* GCC4 pointer-signedness fix: */ (unsigned char*)GWEN_Buffer_GetStart(src), GWEN_Buffer_GetUsedBytes(src), dst, 76)) { fprintf(stderr, "Error encoding file.\n"); return 3; } f=fopen("base64.out", "w+"); if (!f) { perror(argv[2]); return 1; } if (fwrite(GWEN_Buffer_GetStart(dst), GWEN_Buffer_GetUsedBytes(dst), 1, f)!=1) { perror("fwrite"); return 4; } if (fclose(f)) { perror("fclose"); return 4; } tmp=GWEN_Buffer_new(0, GWEN_Buffer_GetUsedBytes(src), 0, 1); if (GWEN_Base64_Decode(/* GCC4 pointer-signedness fix: */ (unsigned char*)GWEN_Buffer_GetStart(dst), GWEN_Buffer_GetUsedBytes(src), tmp)) { fprintf(stderr, "Error decoding file.\n"); return 3; } f=fopen("base64.out.bin", "w+"); if (!f) { perror(argv[2]); return 1; } if (fwrite(GWEN_Buffer_GetStart(tmp), GWEN_Buffer_GetUsedBytes(tmp), 1, f)!=1) { perror("fwrite"); return 4; } if (fclose(f)) { perror("fclose"); return 4; } return 0; } int testBase64_2(int argc, char **argv) { GWEN_BUFFER *dst; GWEN_BUFFER *src; FILE *f; char buffer[1024]; int i; if (argc<2) { fprintf(stderr, "Name of a file needed\n"); return 1; } dst=GWEN_Buffer_new(0, 600000, 0, 1); src=GWEN_Buffer_new(0, 600000, 0, 1); f=fopen(argv[2], "r"); if (!f) { perror(argv[2]); return 1; } while(!feof(f)) { i=fread(buffer, 1, sizeof(buffer), f); if (i<1) { perror("fread"); return 2; } GWEN_Buffer_AppendBytes(src, buffer, i); } /* while */ fclose(f); DBG_ERROR(0, "Size of src data: %d bytes", GWEN_Buffer_GetUsedBytes(src)); removeCTRL(src); DBG_ERROR(0, "Size of raw data: %d bytes", GWEN_Buffer_GetUsedBytes(src)); if (GWEN_Base64_Decode(/* GCC4 pointer-signedness fix: */ (unsigned char*)GWEN_Buffer_GetStart(src), 0, dst)) { fprintf(stderr, "Error decoding file.\n"); return 3; } f=fopen("base64.out.bin", "w+"); if (!f) { perror(argv[2]); return 1; } if (fwrite(GWEN_Buffer_GetStart(dst), GWEN_Buffer_GetUsedBytes(dst), 1, f)!=1) { perror("fwrite"); return 4; } if (fclose(f)) { perror("fclose"); return 4; } return 0; } int testTime(int argc, char **argv) { GWEN_TIME *ti1; GWEN_TIME *ti2; GWEN_DB_NODE *db1; GWEN_DB_NODE *db2; ti1=GWEN_CurrentTime(); assert(ti1); db1=GWEN_DB_Group_new("time"); if (GWEN_Time_toDb(ti1, db1)) { fprintf(stderr, "Error saving time.\n"); return 1; } DBG_NOTICE(0, "Time 1:"); GWEN_DB_Dump(db1, 2); ti2=GWEN_Time_fromDb(db1); db2=GWEN_DB_Group_new("time"); if (GWEN_Time_toDb(ti2, db2)) { fprintf(stderr, "Error saving time.\n"); return 1; } DBG_NOTICE(0, "Time 2:"); GWEN_DB_Dump(db2, 2); return 0; } int testTimeToString(int argc, char **argv) { GWEN_TIME *t; GWEN_BUFFER *tbuf; const char *tmpl; if (argc<3) tmpl="YYYY/MM/DD hh:mm:ss"; else tmpl=argv[2]; t=GWEN_CurrentTime(); assert(t); tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (GWEN_Time_toString(t, tmpl, tbuf)) { fprintf(stderr, "Could not convert time to string.\n"); return 2; } fprintf(stdout, "Current date/time: %s\n", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); if (GWEN_Time_toUtcString(t, tmpl, tbuf)) { fprintf(stderr, "Could not convert time to string.\n"); return 2; } fprintf(stdout, "Current UTC date/time: %s\n", GWEN_Buffer_GetStart(tbuf)); return 0; } int testTimeFromString(int argc, char **argv) { GWEN_TIME *t; const char *s; const char *tmpl; GWEN_BUFFER *tbuf; if (argc!=4) { fprintf(stderr, "Arguments needed: %s %s TEMPLATE DATA\n", argv[0], argv[1]); return 1; } tmpl=argv[2]; s=argv[3]; t=GWEN_Time_fromUtcString(s, tmpl); if (!t) { fprintf(stderr, "Could not convert string to time.\n"); return 2; } tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (GWEN_Time_toUtcString(t, "YYYY/MM/DD-hh:mm:ss", tbuf)) { fprintf(stderr, "Could not convert time to string.\n"); return 2; } fprintf(stdout, "UTC date/time \"%s\": %s\n", s, GWEN_Buffer_GetStart(tbuf)); return 0; } int testOldDbImport(int argc, char **argv) { GWEN_DB_NODE *db; GWEN_DB_NODE *dbParams; db=GWEN_DB_Group_new("test"); dbParams=GWEN_DB_Group_new("params"); if (GWEN_DB_ReadFileAs(db, "test.olddb", "olddb", dbParams, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP)) { DBG_ERROR(0, "Could not read test file"); return 2; } if (GWEN_DB_WriteFile(db, "test.out", GWEN_DB_FLAGS_DEFAULT)) { DBG_ERROR(0, "Could not write outfile"); } return 0; } int testRfc822Import(int argc, char **argv) { GWEN_DB_NODE *db; GWEN_DB_NODE *dbParams; db=GWEN_DB_Group_new("test"); dbParams=GWEN_DB_Group_new("params"); if (GWEN_DB_ReadFileAs(db, "test.822", "rfc822", dbParams, GWEN_PATH_FLAGS_CREATE_GROUP | GWEN_DB_FLAGS_UNTIL_EMPTY_LINE)) { GWEN_DB_Dump(db, 2); DBG_ERROR(0, "Could not read test file"); return 2; } if (GWEN_DB_WriteFile(db, "test.out", GWEN_DB_FLAGS_DEFAULT)) { DBG_ERROR(0, "Could not write outfile"); } return 0; } int testRfc822Export(int argc, char **argv) { GWEN_DB_NODE *db; GWEN_DB_NODE *dbParams; GWEN_GUI *gui; fprintf(stderr, "Creating gui.\n"); gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); db=GWEN_DB_Group_new("test"); dbParams=GWEN_DB_Group_new("params"); if (GWEN_DB_ReadFileAs(db, "test.822", "rfc822", dbParams, GWEN_PATH_FLAGS_CREATE_GROUP | GWEN_DB_FLAGS_UNTIL_EMPTY_LINE)) { DBG_ERROR(0, "Could not read test file"); return 2; } //GWEN_DB_Dump(db, stderr, 2); if (GWEN_DB_WriteFileAs(db, "test.822.out", "rfc822", dbParams, GWEN_DB_FLAGS_DEFAULT)) { DBG_ERROR(0, "Could not write outfile"); } return 0; } int testFsLock(int argc, char **argv) { GWEN_FSLOCK *fl; GWEN_FSLOCK_RESULT res; if (argc<3) { fprintf(stderr, "Usage: %s fslock FILENAME\n", argv[0]); return 1; } fl=GWEN_FSLock_new(argv[2], GWEN_FSLock_TypeFile); fprintf(stderr, "Locking %s\n", argv[2]); res=GWEN_FSLock_Lock(fl, 30000, 0); if (res!=GWEN_FSLock_ResultOk) { fprintf(stderr, "Error locking %s: %d\n", argv[2], res); return 2; } fprintf(stderr, "Holding lock on %s ...\n", argv[2]); sleep(10); fprintf(stderr, "Unlocking %s\n", argv[2]); res=GWEN_FSLock_Unlock(fl); if (res!=GWEN_FSLock_ResultOk) { fprintf(stderr, "Error unlocking %s: %d\n", argv[2], res); return 3; } fprintf(stderr, "Success.\n"); return 0; } int testFsLock2(int argc, char **argv) { GWEN_FSLOCK *fl; GWEN_FSLOCK_RESULT res; if (argc<3) { fprintf(stderr, "Usage: %s fslock2 FOLDERNAME\n", argv[0]); return 1; } fl=GWEN_FSLock_new(argv[2], GWEN_FSLock_TypeDir); fprintf(stderr, "Locking %s\n", argv[2]); res=GWEN_FSLock_Lock(fl, 3000, 0); if (res!=GWEN_FSLock_ResultOk) { fprintf(stderr, "Error locking %s: %d\n", argv[2], res); return 2; } fprintf(stderr, "Holding lock on %s ...\n", argv[2]); sleep(10); fprintf(stderr, "Unlocking %s\n", argv[2]); res=GWEN_FSLock_Unlock(fl); if (res!=GWEN_FSLock_ResultOk) { fprintf(stderr, "Error unlocking %s: %d\n", argv[2], res); return 3; } fprintf(stderr, "Success.\n"); return 0; } int testPtr(int argc, char **argv) { GWEN_REFPTR *rp; GWEN_REFPTR *rp2; char *dp1; char *dp2; dp1=strdup("Hello, World"); dp2=strdup("Goodbye ;-)"); rp=GWEN_RefPtr_new(dp1, 0); fprintf(stderr, "Data is: %s\n", (char*)GWEN_RefPtr_GetData(rp)); GWEN_RefPtr_SetData(rp, dp2, 0); fprintf(stderr, "Data is now: %s\n", (char*)GWEN_RefPtr_GetData(rp)); rp2=GWEN_RefPtr_dup(rp); fprintf(stderr, "Data2 is: %s\n", (char*)GWEN_RefPtr_GetData(rp2)); GWEN_RefPtr_SetData(rp2, dp2, 0); fprintf(stderr, "Data2 is now: %s\n", (char*)GWEN_RefPtr_GetData(rp2)); GWEN_RefPtr_free(rp); return 0; } int testStringList2(int argc, char **argv) { GWEN_STRINGLIST2 *sl2; GWEN_STRINGLIST2 *sl2copy; GWEN_STRINGLIST2_ITERATOR *it; GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Info); sl2=GWEN_StringList2_new(); GWEN_StringList2_AppendString(sl2, "1:First string", 0, GWEN_StringList2_IntertMode_NoDouble); GWEN_StringList2_AppendString(sl2, "2:Second string", 0, GWEN_StringList2_IntertMode_NoDouble); GWEN_StringList2_AppendString(sl2, "3:Third string", 0, GWEN_StringList2_IntertMode_NoDouble); GWEN_StringList2_AppendString(sl2, "4:Fourth string", 0, GWEN_StringList2_IntertMode_NoDouble); fprintf(stderr, "List:\n"); it=GWEN_StringList2_First(sl2); if (it) { const char *t; int i; t=GWEN_StringList2Iterator_Data(it); i=0; while(t) { fprintf(stderr, "String %d: %s [%d]\n", i, t, GWEN_StringList2Iterator_GetLinkCount(it)); t=GWEN_StringList2Iterator_Next(it); } GWEN_StringList2Iterator_free(it); } GWEN_StringList2_AppendString(sl2, strdup("3:Third string"), 1, GWEN_StringList2_IntertMode_NoDouble); fprintf(stderr, "List:\n"); it=GWEN_StringList2_First(sl2); if (it) { const char *t; int i; t=GWEN_StringList2Iterator_Data(it); i=0; while(t) { fprintf(stderr, "String %d: %s [%d]\n", i, t, GWEN_StringList2Iterator_GetLinkCount(it)); t=GWEN_StringList2Iterator_Next(it); } GWEN_StringList2Iterator_free(it); } GWEN_StringList2_AppendString(sl2, "3:Third string", 0, GWEN_StringList2_IntertMode_Reuse); fprintf(stderr, "List:\n"); it=GWEN_StringList2_First(sl2); if (it) { const char *t; int i; t=GWEN_StringList2Iterator_Data(it); i=0; while(t) { fprintf(stderr, "String %d: %s [%d]\n", i, t, GWEN_StringList2Iterator_GetLinkCount(it)); t=GWEN_StringList2Iterator_Next(it); } GWEN_StringList2Iterator_free(it); } GWEN_StringList2_RemoveString(sl2, "3:Third string"); fprintf(stderr, "List:\n"); it=GWEN_StringList2_First(sl2); if (it) { const char *t; int i; t=GWEN_StringList2Iterator_Data(it); i=0; while(t) { fprintf(stderr, "String %d: %s [%d]\n", i, t, GWEN_StringList2Iterator_GetLinkCount(it)); t=GWEN_StringList2Iterator_Next(it); } GWEN_StringList2Iterator_free(it); } sl2copy=GWEN_StringList2_dup(sl2); fprintf(stderr, "CopyList:\n"); it=GWEN_StringList2_First(sl2copy); if (it) { const char *t; int i; t=GWEN_StringList2Iterator_Data(it); i=0; while(t) { fprintf(stderr, "String %d: %s [%d]\n", i, t, GWEN_StringList2Iterator_GetLinkCount(it)); t=GWEN_StringList2Iterator_Next(it); } GWEN_StringList2Iterator_free(it); } GWEN_StringList2_RemoveString(sl2, "3:Third string"); fprintf(stderr, "List:\n"); it=GWEN_StringList2_First(sl2); if (it) { const char *t; int i; t=GWEN_StringList2Iterator_Data(it); i=0; while(t) { fprintf(stderr, "String %d: %s [%d]\n", i, t, GWEN_StringList2Iterator_GetLinkCount(it)); t=GWEN_StringList2Iterator_Next(it); } GWEN_StringList2Iterator_free(it); } fprintf(stderr, "CopyList:\n"); it=GWEN_StringList2_First(sl2copy); if (it) { const char *t; int i; t=GWEN_StringList2Iterator_Data(it); i=0; while(t) { fprintf(stderr, "String %d: %s [%d]\n", i, t, GWEN_StringList2Iterator_GetLinkCount(it)); t=GWEN_StringList2Iterator_Next(it); } GWEN_StringList2Iterator_free(it); } GWEN_StringList2_RemoveString(sl2copy, "2:Second string"); fprintf(stderr, "List:\n"); it=GWEN_StringList2_First(sl2); if (it) { const char *t; int i; t=GWEN_StringList2Iterator_Data(it); i=0; while(t) { fprintf(stderr, "String %d: %s [%d]\n", i, t, GWEN_StringList2Iterator_GetLinkCount(it)); t=GWEN_StringList2Iterator_Next(it); } GWEN_StringList2Iterator_free(it); } fprintf(stderr, "CopyList:\n"); it=GWEN_StringList2_First(sl2copy); if (it) { const char *t; int i; t=GWEN_StringList2Iterator_Data(it); i=0; while(t) { fprintf(stderr, "String %d: %s [%d]\n", i, t, GWEN_StringList2Iterator_GetLinkCount(it)); t=GWEN_StringList2Iterator_Next(it); } GWEN_StringList2Iterator_free(it); } GWEN_StringList2_free(sl2); return 0; } int testSort(int argc, char **argv) { GWEN_STRINGLIST *sl; GWEN_STRINGLISTENTRY *se; unsigned int j; char *x; if (argc<3) { fprintf(stderr, "At least one argument for stringlist needed.\n"); return 1; } sl=GWEN_StringList_new(); GWEN_StringList_SetSenseCase(sl, 1); for (j=2; jsin_family=PF_INET; #else aptr->sin_family=AF_INET; #endif DBG_ERROR(0, "ping"); aptr->sin_addr.s_addr=inet_addr("85.10.225.70"); aptr->sin_port=htons(443); DBG_ERROR(0, "ping"); sd=socket(PF_INET, SOCK_STREAM,0); if (sd==-1) { DBG_ERROR(0, "socket: %s", strerror(errno)); return 2; } DBG_ERROR(0, "ping"); rv=connect(sd, address, size); DBG_ERROR(0, "ping"); if (rv) { DBG_ERROR(0, "connect: %s", strerror(errno)); return 2; } DBG_ERROR(0, "ping"); rv=gnutls_init(&session, GNUTLS_CLIENT); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "gnutls_init: %d (%s)", rv, gnutls_strerror(rv)); return GWEN_ERROR_GENERIC; } rv=gnutls_set_default_priority(session); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "gnutls_set_default_priority: %d (%s)", rv, gnutls_strerror(rv)); return GWEN_ERROR_GENERIC; } rv=gnutls_certificate_allocate_credentials(&credentials); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "gnutls_certificate_allocate_credentials: %d (%s)", rv, gnutls_strerror(rv)); return GWEN_ERROR_GENERIC; } rv=gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, credentials); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "gnutls_credentials_set: %d (%s)", rv, gnutls_strerror(rv)); gnutls_certificate_free_credentials(credentials); gnutls_deinit(session); return GWEN_ERROR_GENERIC; } gnutls_transport_set_ptr(session, (gnutls_transport_ptr_t)sd); DBG_ERROR(0, "ping"); rv=gnutls_handshake(session); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "gnutls_handshake: %d (%s)", rv, gnutls_strerror(rv)); return GWEN_ERROR_GENERIC; } DBG_ERROR(0, "Ok."); return 0; } static void print_mpi (const char *text, gcry_mpi_t a) { char *buf; void *bufaddr = &buf; gcry_error_t rc; rc = gcry_mpi_aprint (GCRYMPI_FMT_HEX, bufaddr, NULL, a); if (rc) fprintf (stderr, "%s=[error printing number: %s]\n", text, gpg_strerror (rc)); else { fprintf (stderr, "%s=0x%s\n", text, buf); gcry_free (buf); } } static void check_generated_rsa_key (gcry_sexp_t key, unsigned long expected_e){ gcry_sexp_t skey, pkey, list; pkey = gcry_sexp_find_token (key, "public-key", 0); if (!pkey) { DBG_ERROR(0, "public part missing in return value"); exit(2); } else { gcry_mpi_t e = NULL; list = gcry_sexp_find_token (pkey, "e", 0); if (!list || !(e=gcry_sexp_nth_mpi (list, 1, 0)) ) { DBG_ERROR(0, "public exponent not found"); exit(2); } else if (!expected_e) { print_mpi ("e", e); } else { if ( gcry_mpi_cmp_ui (e, expected_e)){ print_mpi ("e", e); fprintf(stderr, "public exponent is not %lu\n", expected_e); exit(2); } else { fprintf(stderr, "public exponent is as expected\n"); print_mpi ("e", e); } } gcry_sexp_release (list); gcry_mpi_release (e); gcry_sexp_release (pkey); } skey = gcry_sexp_find_token (key, "private-key", 0); if (!skey) { DBG_ERROR(0, "private part missing in return value"); exit(2); } else { int rc = gcry_pk_testkey (skey); if (rc) { DBG_ERROR(0, "gcry_pk_testkey failed: %s", gpg_strerror (rc)); exit(2); } gcry_sexp_release (skey); } } static void check_rsa_keys (void){ gcry_sexp_t keyparm, key; int rc; fprintf (stderr, "creating 1024 bit RSA key using old interface\n"); rc = gcry_sexp_new (&keyparm, "(genkey\n" " (rsa\n" " (nbits 4:1024)\n" " ))", 0, 1); if (rc) { DBG_ERROR(0, "error creating S-expression: %s", gpg_strerror (rc)); exit(2); } rc = gcry_pk_genkey (&key, keyparm); gcry_sexp_release (keyparm); if (rc) { DBG_ERROR(0, "error generating RSA key: %s", gpg_strerror (rc)); exit(2); } check_generated_rsa_key (key, 65537); gcry_sexp_release (key); fprintf (stderr, "creating 512 bit RSA key with e=257\n"); rc = gcry_sexp_new (&keyparm, "(genkey\n" " (rsa\n" " (nbits 3:512)\n" " (rsa-use-e 3:257)\n" " ))", 0, 1); if (rc) { DBG_ERROR(0, "error creating S-expression: %s", gpg_strerror (rc)); exit(2); } rc = gcry_pk_genkey (&key, keyparm); gcry_sexp_release (keyparm); if (rc) { DBG_ERROR(0, "error generating RSA key: %s", gpg_strerror (rc)); exit(2); } check_generated_rsa_key (key, 257); gcry_sexp_release (key); fprintf (stderr, "creating 512 bit RSA key with default e\n"); rc = gcry_sexp_new (&keyparm, "(genkey\n" " (rsa\n" " (nbits 3:512)\n" " (rsa-use-e 1:0)\n" " ))", 0, 1); if (rc) { DBG_ERROR(0, "error creating S-expression: %s", gpg_strerror (rc)); exit(2); } rc = gcry_pk_genkey (&key, keyparm); gcry_sexp_release (keyparm); if (rc) { DBG_ERROR(0, "error generating RSA key: %s", gpg_strerror (rc)); exit(2); } check_generated_rsa_key (key, 0); /* We don't expect a constant exponent. */ gcry_sexp_release (key); fprintf (stderr, "creating 768 bit RSA key with e=65537\n"); rc = gcry_sexp_new (&keyparm, "(genkey\n" " (rsa\n" " (nbits 3:768)\n" " (rsa-use-e 5:65537)\n" " ))", 0, 1); if (rc) { DBG_ERROR(0, "error creating S-expression: %s", gpg_strerror (rc)); exit(2); } rc = gcry_pk_genkey (&key, keyparm); gcry_sexp_release (keyparm); if (rc) { DBG_ERROR(0, "error generating RSA key: %s", gpg_strerror (rc)); exit(2); } check_generated_rsa_key (key, 65537); gcry_sexp_release (key); } int testHttpSession(int argc, char **argv) { GWEN_GUI *gui; const char *urlString; GWEN_HTTP_SESSION *sess; int rv; GWEN_BUFFER *buf; if (argc<3) { fprintf(stderr, "%s %s URL\n", argv[0], argv[1]); return 1; } urlString=argv[2]; fprintf(stderr, "Creating gui.\n"); gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); sess=GWEN_HttpSession_new(urlString, "http", 80); rv=GWEN_HttpSession_Init(sess); if (rv<0) { fprintf(stderr, "ERROR: Could not init http session.\n"); return 3; } rv=GWEN_HttpSession_SendPacket(sess, "GET", NULL, 0); if (rv<0) { fprintf(stderr, "ERROR: Could not send request.\n"); return 3; } buf=GWEN_Buffer_new(0, 1024, 0, 1); rv=GWEN_HttpSession_RecvPacket(sess, buf); if (rv<0) { fprintf(stderr, "ERROR: Could not receive response.\n"); return 3; } GWEN_Buffer_Dump(buf, 2); return 0; } int testDES(int argc, char **argv) { GWEN_CRYPT_KEY *skey; GWEN_BUFFER *buf1; GWEN_BUFFER *buf2; GWEN_BUFFER *buf3; uint32_t l; int rv; const char testString[]={ 0x90, 0x80, 0x70, 0x60, 0x50, 0x40, 0x30, 0x20, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x18, 0x27, 0x36, 0x45, 0x54, 0x63, 0x72, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88 }; skey=GWEN_Crypt_KeyDes3K_Generate(GWEN_Crypt_CryptMode_Cbc, 24, 2); if (skey==NULL) { DBG_ERROR(0, "Unable to generate DES key"); return 2; } buf1=GWEN_Buffer_new(0, sizeof(testString), 0, 1); buf2=GWEN_Buffer_new(0, sizeof(testString), 0, 1); buf3=GWEN_Buffer_new(0, sizeof(testString), 0, 1); GWEN_Buffer_AppendBytes(buf1, testString, sizeof(testString)); /* encrypt buf1 */ l=GWEN_Buffer_GetMaxUnsegmentedWrite(buf2); rv=GWEN_Crypt_Key_Encipher(skey, (uint8_t*)GWEN_Buffer_GetStart(buf1), GWEN_Buffer_GetUsedBytes(buf1), (uint8_t*)GWEN_Buffer_GetPosPointer(buf2), &l); if (rv<0) { DBG_ERROR(0, "Unable to encipher"); return 2; } GWEN_Buffer_IncrementPos(buf2, l); GWEN_Buffer_AdjustUsedBytes(buf2); /* decrypt buf2 */ l=GWEN_Buffer_GetMaxUnsegmentedWrite(buf3); rv=GWEN_Crypt_Key_Decipher(skey, (uint8_t*)GWEN_Buffer_GetStart(buf2), GWEN_Buffer_GetUsedBytes(buf2), (uint8_t*)GWEN_Buffer_GetPosPointer(buf3), &l); if (rv<0) { DBG_ERROR(0, "Unable to decipher"); return 2; } GWEN_Buffer_IncrementPos(buf3, l); GWEN_Buffer_AdjustUsedBytes(buf3); if (GWEN_Buffer_GetUsedBytes(buf1)!= GWEN_Buffer_GetUsedBytes(buf3)) { DBG_ERROR(0, "Buffer size does not match"); return 2; } if (memcmp(GWEN_Buffer_GetStart(buf1), GWEN_Buffer_GetStart(buf3), GWEN_Buffer_GetUsedBytes(buf1))!=0) { DBG_ERROR(0, "Buffers do not match"); DBG_ERROR(0, "Expected:"); GWEN_Buffer_Dump(buf1, 2); DBG_ERROR(0, "Found:"); GWEN_Buffer_Dump(buf3, 2); DBG_ERROR(0, "Encrypted:"); GWEN_Buffer_Dump(buf2, 2); return 2; } GWEN_Buffer_free(buf3); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); GWEN_Crypt_Key_free(skey); return 0; } int testDES2(int argc, char **argv) { GWEN_CRYPT_KEY *skey; GWEN_BUFFER *buf1; GWEN_BUFFER *buf2; GWEN_BUFFER *buf3; uint32_t l; int rv; uint8_t kd[24]; const char testString[]={ 0x90, 0x80, 0x70, 0x60, 0x50, 0x40, 0x30, 0x20, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x18, 0x27, 0x36, 0x45, 0x54, 0x63, 0x72, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88 }; GWEN_Crypt_Random(2, kd, 16); memmove(kd+16, kd, 8); skey=GWEN_Crypt_KeyDes3K_fromData(GWEN_Crypt_CryptMode_Cbc, 24, kd, 24); if (skey==NULL) { DBG_ERROR(0, "Unable to generate DES key"); return 2; } buf1=GWEN_Buffer_new(0, sizeof(testString), 0, 1); buf2=GWEN_Buffer_new(0, sizeof(testString), 0, 1); buf3=GWEN_Buffer_new(0, sizeof(testString), 0, 1); GWEN_Buffer_AppendBytes(buf1, testString, sizeof(testString)); /* encrypt buf1 */ l=GWEN_Buffer_GetMaxUnsegmentedWrite(buf2); rv=GWEN_Crypt_Key_Encipher(skey, (uint8_t*)GWEN_Buffer_GetStart(buf1), GWEN_Buffer_GetUsedBytes(buf1), (uint8_t*)GWEN_Buffer_GetPosPointer(buf2), &l); if (rv<0) { DBG_ERROR(0, "Unable to encipher"); return 2; } GWEN_Buffer_IncrementPos(buf2, l); GWEN_Buffer_AdjustUsedBytes(buf2); /* decrypt buf2 */ l=GWEN_Buffer_GetMaxUnsegmentedWrite(buf3); rv=GWEN_Crypt_Key_Decipher(skey, (uint8_t*)GWEN_Buffer_GetStart(buf2), GWEN_Buffer_GetUsedBytes(buf2), (uint8_t*)GWEN_Buffer_GetPosPointer(buf3), &l); if (rv<0) { DBG_ERROR(0, "Unable to decipher"); return 2; } GWEN_Buffer_IncrementPos(buf3, l); GWEN_Buffer_AdjustUsedBytes(buf3); if (GWEN_Buffer_GetUsedBytes(buf1)!= GWEN_Buffer_GetUsedBytes(buf3)) { DBG_ERROR(0, "Buffer size does not match"); return 2; } if (memcmp(GWEN_Buffer_GetStart(buf1), GWEN_Buffer_GetStart(buf3), GWEN_Buffer_GetUsedBytes(buf1))!=0) { DBG_ERROR(0, "Buffers do not match"); DBG_ERROR(0, "Expected:"); GWEN_Buffer_Dump(buf1, 2); DBG_ERROR(0, "Found:"); GWEN_Buffer_Dump(buf3, 2); DBG_ERROR(0, "Encrypted:"); GWEN_Buffer_Dump(buf2, 2); return 2; } GWEN_Buffer_free(buf3); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); GWEN_Crypt_Key_free(skey); return 0; } int testDES3(int argc, char **argv) { GWEN_CRYPT_KEY *skey; uint32_t l2; uint32_t l3; int rv; const uint8_t iv[8]={ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const uint8_t testString[]={ 0x90, 0x80, 0x70, 0x60, 0x50, 0x40, 0x30, 0x20, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x18, 0x27, 0x36, 0x45, 0x54, 0x63, 0x72, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88 }; uint8_t buf2[sizeof(testString)]; uint8_t buf3[sizeof(testString)]; skey=GWEN_Crypt_KeyDes3K_Generate(GWEN_Crypt_CryptMode_Cbc, 24, 2); if (skey==NULL) { DBG_ERROR(0, "Unable to generate DES key"); return 2; } /* encrypt buf1 */ l2=sizeof(buf2); rv=GWEN_Crypt_Key_Encipher(skey, testString, sizeof(testString), buf2, &l2); if (rv<0) { DBG_ERROR(0, "Unable to encipher"); return 2; } GWEN_Crypt_KeyDes3K_SetIV(skey, iv, sizeof(iv)); /* decrypt buf2 */ l3=sizeof(buf3); rv=GWEN_Crypt_Key_Decipher(skey, buf2, l2, buf3, &l3); if (rv<0) { DBG_ERROR(0, "Unable to decipher"); return 2; } if (l2!=l3) { DBG_ERROR(0, "Buffer size does not match"); return 2; } if (l2!=sizeof(testString)) { DBG_ERROR(0, "Buffer size does not match size of testString"); return 2; } if (memcmp(testString, buf3, l3)!=0) { DBG_ERROR(0, "Buffers do not match"); DBG_ERROR(0, "Expected:"); GWEN_Text_DumpString((const char*)testString, sizeof(testString), 2); DBG_ERROR(0, "Found:"); GWEN_Text_DumpString((const char*)buf3, l3, 2); DBG_ERROR(0, "Encrypted:"); GWEN_Text_DumpString((const char*)buf2, l2, 2); return 2; } GWEN_Crypt_Key_free(skey); return 0; } int testDES4(int argc, char **argv) { GWEN_CRYPT_KEY *skey; GWEN_BUFFER *buf1; GWEN_BUFFER *buf2; GWEN_BUFFER *buf3; uint32_t l; int rv; const char *fname; #ifdef NEU1 const uint8_t keyData[]={ 0x2a, 0x79, 0xc4, 0x45, 0xbc, 0x13, 0x5d, 0x13, 0xe0, 0xec, 0xe6, 0x43, 0x6d, 0x73, 0x91, 0x0b }; #else const uint8_t keyData[]={ 0x01, 0x3e, 0x1f, 0xf1, 0xab, 0xbf, 0x13, 0x79, 0x5b, 0x68, 0x9d, 0x26, 0x31, 0xdc, 0xe0, 0x52 }; #endif if (argc<3) { DBG_ERROR(0, "Missing filename"); return 1; } fname=argv[2]; skey=GWEN_Crypt_KeyDes3K_fromData(GWEN_Crypt_CryptMode_Cbc, 16, keyData, 16); if (skey==NULL) { DBG_ERROR(0, "Unable to create DES key"); return 2; } buf1=GWEN_Buffer_new(0, 256, 0, 1); rv=readFile(fname, buf1); if (rv<0) { DBG_ERROR(0, "Unable to read file [%s]: %d", fname, rv); return 2; } #ifdef NEU1 GWEN_Buffer_FillWithBytes(buf1, 0, 7); #endif buf2=GWEN_Buffer_new(0, GWEN_Buffer_GetUsedBytes(buf1)+16, 0, 1); /* decrypt buf1 */ fprintf(stderr, "Decrypting %d bytes", GWEN_Buffer_GetUsedBytes(buf1)); l=GWEN_Buffer_GetMaxUnsegmentedWrite(buf2); GWEN_Crypt_KeyDes3K_SetIV(skey, NULL, 0); rv=GWEN_Crypt_Key_Decipher(skey, (uint8_t*)GWEN_Buffer_GetStart(buf1), GWEN_Buffer_GetUsedBytes(buf1), (uint8_t*)GWEN_Buffer_GetPosPointer(buf2), &l); if (rv<0) { DBG_ERROR(0, "Unable to decipher"); return 2; } fprintf(stderr, "Decrypted %d bytes", l); GWEN_Buffer_IncrementPos(buf2, l); GWEN_Buffer_AdjustUsedBytes(buf2); writeFile("des4.out1", GWEN_Buffer_GetStart(buf2), GWEN_Buffer_GetUsedBytes(buf2)); buf3=GWEN_Buffer_new(0, 256, 0, 1); rv=zip_inflate(GWEN_Buffer_GetStart(buf2), GWEN_Buffer_GetUsedBytes(buf2), buf3); writeFile("des4.out2", GWEN_Buffer_GetStart(buf3), GWEN_Buffer_GetUsedBytes(buf3)); if (rv<0) { DBG_ERROR(0, "Unable to unzip"); return 2; } GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); GWEN_Crypt_Key_free(skey); return 0; } int testCryptMgr1(int argc, char **argv) { int rv; GWEN_CRYPT_KEY *pubKey; GWEN_CRYPT_KEY *secretKey; GWEN_CRYPTMGR *cm; uint8_t testData[]= "This is the test data " "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"; GWEN_BUFFER *tbuf1; GWEN_BUFFER *tbuf2; fprintf(stderr, "Generating key pair...\n"); rv=GWEN_Crypt_KeyRsa_GeneratePair(2048/8, 1, &pubKey, &secretKey); if (rv) { fprintf(stderr, "ERROR: Could not generate key pair (%d).\n", rv); return 2; } fprintf(stderr, "Generating key pair... done.\n"); GWEN_Crypt_KeyRsa_AddFlags(pubKey, GWEN_CRYPT_KEYRSA_FLAGS_DIRECTSIGN); GWEN_Crypt_KeyRsa_AddFlags(secretKey, GWEN_CRYPT_KEYRSA_FLAGS_DIRECTSIGN); cm=GWEN_CryptMgrKeys_new("local", secretKey, "local", pubKey, 1); assert(cm); fprintf(stderr, "Signing message...\n"); tbuf1=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_CryptMgr_Sign(cm, testData, sizeof(testData)-1, tbuf1); if (rv) { fprintf(stderr, "ERROR: Could not sign (%d).\n", rv); GWEN_Buffer_Dump(tbuf1, 2); return 2; } fprintf(stderr, "Signing message... done\n"); fprintf(stderr, "Verifying message...\n"); tbuf2=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_CryptMgr_Verify(cm, (const uint8_t*)GWEN_Buffer_GetStart(tbuf1), GWEN_Buffer_GetUsedBytes(tbuf1), tbuf2); if (rv) { fprintf(stderr, "ERROR: Could not verify (%d).\n", rv); GWEN_Buffer_Dump(tbuf2, 2); return 2; } fprintf(stderr, "Verifying message... done\n"); fprintf(stderr, "Signature is valid.\n"); return 0; } int testCryptMgr2(int argc, char **argv) { int rv; GWEN_CRYPT_KEY *pubKey; GWEN_CRYPT_KEY *secretKey; GWEN_CRYPTMGR *cm; uint8_t testData[]= "This is the test data " "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"; GWEN_BUFFER *tbuf1; GWEN_BUFFER *tbuf2; fprintf(stderr, "Generating key pair...\n"); rv=GWEN_Crypt_KeyRsa_GeneratePair(2048/8, 1, &pubKey, &secretKey); if (rv) { fprintf(stderr, "ERROR: Could not generate key pair (%d).\n", rv); return 2; } fprintf(stderr, "Generating key pair... done.\n"); GWEN_Crypt_KeyRsa_AddFlags(pubKey, GWEN_CRYPT_KEYRSA_FLAGS_DIRECTSIGN); GWEN_Crypt_KeyRsa_AddFlags(secretKey, GWEN_CRYPT_KEYRSA_FLAGS_DIRECTSIGN); cm=GWEN_CryptMgrKeys_new("local", secretKey, "local", pubKey, 1); assert(cm); fprintf(stderr, "Encrypting message...\n"); tbuf1=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_CryptMgr_Encrypt(cm, testData, sizeof(testData)-1, tbuf1); if (rv) { fprintf(stderr, "ERROR: Could not encrypt (%d).\n", rv); GWEN_Buffer_Dump(tbuf1, 2); return 2; } fprintf(stderr, "Encrypting message... done\n"); fprintf(stderr, "Decrypting message...\n"); tbuf2=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_CryptMgr_Decrypt(cm, (const uint8_t*)GWEN_Buffer_GetStart(tbuf1), GWEN_Buffer_GetUsedBytes(tbuf1), tbuf2); if (rv) { fprintf(stderr, "ERROR: Could not verify (%d).\n", rv); GWEN_Buffer_Dump(tbuf2, 2); return 2; } fprintf(stderr, "Decrypting message... done\n"); if (sizeof(testData)-1!=GWEN_Buffer_GetUsedBytes(tbuf2)) { fprintf(stderr, "Crypto-Error (size):\n"); GWEN_Buffer_Dump(tbuf1, 2); GWEN_Buffer_Dump(tbuf2, 2); return 2; } if (memcmp(testData, GWEN_Buffer_GetStart(tbuf2), GWEN_Buffer_GetUsedBytes(tbuf2))!=0) { fprintf(stderr, "Crypto-Error (content):\n"); GWEN_Buffer_Dump(tbuf1, 2); GWEN_Buffer_Dump(tbuf2, 2); return 2; } fprintf(stderr, "Crypto-stuff ok.\n"); return 0; } int testCryptMgr3(int argc, char **argv) { int rv; GWEN_CRYPT_KEY *pubKey; GWEN_CRYPT_KEY *secretKey; GWEN_CRYPTMGR *cm; uint8_t testData[]= "This is the test data " "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"; GWEN_BUFFER *tbuf1; GWEN_BUFFER *tbuf2; fprintf(stderr, "Generating key pair...\n"); rv=GWEN_Crypt_KeyRsa_GeneratePair(2048/8, 1, &pubKey, &secretKey); if (rv) { fprintf(stderr, "ERROR: Could not generate key pair (%d).\n", rv); return 2; } fprintf(stderr, "Generating key pair... done.\n"); GWEN_Crypt_KeyRsa_AddFlags(pubKey, GWEN_CRYPT_KEYRSA_FLAGS_DIRECTSIGN); GWEN_Crypt_KeyRsa_AddFlags(secretKey, GWEN_CRYPT_KEYRSA_FLAGS_DIRECTSIGN); cm=GWEN_CryptMgrKeys_new("local", secretKey, "local", pubKey, 1); assert(cm); fprintf(stderr, "Encoding message...\n"); tbuf1=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_CryptMgr_Encode(cm, testData, sizeof(testData)-1, tbuf1); if (rv) { fprintf(stderr, "ERROR: Could not encrypt (%d).\n", rv); GWEN_Buffer_Dump(tbuf1, 2); return 2; } fprintf(stderr, "Encoding message... done\n"); fprintf(stderr, "Decoding message...\n"); tbuf2=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_CryptMgr_Decode(cm, (const uint8_t*)GWEN_Buffer_GetStart(tbuf1), GWEN_Buffer_GetUsedBytes(tbuf1), tbuf2); if (rv) { fprintf(stderr, "ERROR: Could not verify (%d).\n", rv); GWEN_Buffer_Dump(tbuf2, 2); return 2; } fprintf(stderr, "Decoding message... done\n"); if (sizeof(testData)-1!=GWEN_Buffer_GetUsedBytes(tbuf2)) { fprintf(stderr, "Crypto-Error (size):\n"); GWEN_Buffer_Dump(tbuf1, 2); GWEN_Buffer_Dump(tbuf2, 2); return 2; } if (memcmp(testData, GWEN_Buffer_GetStart(tbuf2), GWEN_Buffer_GetUsedBytes(tbuf2))!=0) { fprintf(stderr, "Crypto-Error (content):\n"); GWEN_Buffer_Dump(tbuf1, 2); GWEN_Buffer_Dump(tbuf2, 2); return 2; } fprintf(stderr, "Crypto-stuff ok.\n"); return 0; } int testPss1(int argc, char **argv) { uint8_t em[]={ 0x57, 0xa4, 0x11, 0xc3, 0x48, 0x99, 0xf6, 0x8e, 0xb8, 0x93, 0x83, 0x6a, 0xe5, 0xc6, 0xe1, 0xc3, 0x11, 0x45, 0xea, 0x6e, 0x8c, 0xf7, 0xd3, 0xb1, 0xc6, 0x17, 0xb6, 0x55, 0xf9, 0xc6, 0x64, 0x7a, 0xa8, 0xe1, 0x07, 0x1b, 0xa0, 0xc6, 0x08, 0xfa, 0x70, 0xfd, 0xbb, 0xa4, 0x52, 0xb6, 0xa9, 0xcb, 0x42, 0x31, 0xb0, 0x5a, 0x70, 0xe4, 0xa7, 0x09, 0xb0, 0x37, 0x15, 0xe4, 0xc5, 0x89, 0xd1, 0xc1, 0x24, 0x0f, 0x65, 0xa9, 0x7a, 0x1a, 0x20, 0xe0, 0x2a, 0xd8, 0x91, 0x00, 0xb2, 0x8a, 0xf7, 0x93, 0x5b, 0x86, 0x4e, 0x40, 0xb8, 0x20, 0x15, 0xb5, 0x34, 0x0a, 0xe5, 0x4c, 0xf2, 0x29, 0x02, 0x1d, 0x8c, 0x15, 0xcf, 0x1e, 0x81, 0x6a, 0x7d, 0x33, 0x12, 0xc6, 0x39, 0xe6, 0xa4, 0x1e, 0x2d, 0x95, 0x07, 0xe4, 0x2d, 0x23, 0xb5, 0x8a, 0xd6, 0xb2, 0xef, 0x1c, 0xed, 0x92, 0x5a, 0x7c, 0xa9, 0x1f, 0xb0, 0xce, 0xb9, 0x2b, 0x1c, 0xa8, 0x73, 0x25, 0xa2, 0x82, 0xed, 0x13, 0x50, 0x47, 0x58, 0xd5, 0xdf, 0xd9, 0x94, 0x5f, 0x3a, 0x7e, 0x73, 0xbe, 0xd0, 0x09, 0xa8, 0xcf, 0xdf, 0xd8, 0x71, 0x77, 0x0c, 0x70, 0xe6, 0xb3, 0xc0, 0x10, 0x96, 0x70, 0x27, 0x31, 0x4d, 0x8b, 0x17, 0x5b, 0x30, 0x92, 0xdb, 0xac, 0x62, 0x41, 0x90, 0x8e, 0x6b, 0xac, 0xcf, 0x7b, 0x42, 0x63, 0x66, 0xe7, 0xb3, 0xee, 0xd4, 0x32, 0xab, 0x2d, 0xa4, 0xf0, 0x5d, 0x71, 0x25, 0x4a, 0x6f, 0x8c, 0x0d, 0xda, 0x43, 0xf0, 0x53, 0xb5, 0x80, 0xc3, 0xd6, 0x77, 0xed, 0x5f, 0xe6, 0x1b, 0x3c, 0x5a, 0xa7, 0x23, 0xd7, 0x0b, 0xa6, 0x0c, 0xdc, 0xbd, 0xd6, 0x59, 0x12, 0xfa, 0x37, 0x9b, 0xcd, 0xa1, 0x78, 0x06, 0x07, 0x2e, 0x35, 0xa7, 0x7d, 0x11, 0xf5, 0xa7, 0xac, 0xbc }; uint8_t hash[]={ 0x00, 0x6d, 0x9d, 0x67, 0x58, 0xa9, 0x23, 0xf5, 0x46, 0xdc, 0x6d, 0x2b, 0xd7, 0xea, 0x78, 0xab, 0x1d, 0xcf, 0x6d, 0x47, 0x37, 0x35, 0xae, 0x93, 0xa9, 0x3b, 0x69, 0x17, 0xcc, 0xe1, 0xf5, 0x05 }; GWEN_MDIGEST *md; int rv; md=GWEN_MDigest_Sha256_new(); rv=GWEN_Padd_VerifyPkcs1Pss(em, sizeof(em), 1984, hash, sizeof(hash), 32, md); if (rv<0) { fprintf(stderr, "Error decoding em\n"); return 2; } fprintf(stderr, "Success\n"); return 0; } int testPss2(int argc, char **argv) { uint8_t m[]={"This is the test message"}; uint8_t em[1024]; uint8_t hash[32]; GWEN_MDIGEST *md; int rv; md=GWEN_MDigest_Sha256_new(); /* hash message */ rv=GWEN_MDigest_Begin(md); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=GWEN_MDigest_Update(md, m, sizeof(m)); if (rv<0) { fprintf(stderr, "Error hashing m (update: %d)\n", rv); return 2; } rv=GWEN_MDigest_End(md); if (rv<0) { fprintf(stderr, "Error hashing m (end: %d)\n", rv); return 2; } memmove(hash, GWEN_MDigest_GetDigestPtr(md), GWEN_MDigest_GetDigestSize(md)); fprintf(stderr, "Message encoded.\n"); GWEN_MDigest_free(md); md=GWEN_MDigest_Sha256_new(); rv=GWEN_Padd_AddPkcs1Pss(em, sizeof(em), 1984, hash, sizeof(hash), 32, md); if (rv<0) { fprintf(stderr, "Error decoding em\n"); return 2; } rv=GWEN_Padd_VerifyPkcs1Pss(em, rv, 1984, hash, sizeof(hash), 32, md); if (rv<0) { fprintf(stderr, "Error decoding em\n"); return 2; } fprintf(stderr, "Success\n"); return 0; } int testDialog(int argc, char **argv) { GWEN_XMLNODE *n; GWEN_XMLNODE *nDialog; GWEN_DIALOG *dlg; int rv; if (argc<3) { fprintf(stderr, "Name of testfile needed.\n"); return 1; } n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag,"root"); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Debug); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); if (GWEN_XML_ReadFile(n, argv[2], GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_HANDLE_HEADERS)) { fprintf(stderr, "Error reading XML file.\n"); return 1; } fprintf(stderr, "XML file:\n"); GWEN_XMLNode_Dump(n, 2); nDialog=GWEN_XMLNode_FindFirstTag(n, "dialog", NULL, NULL); if (nDialog==NULL) { fprintf(stderr, "Dialog not found in XML file\n"); return 2; } dlg=GWEN_Dialog_new("testdialog"); rv=GWEN_Dialog_ReadXml(dlg, nDialog); if (rv) { fprintf(stderr, "Error reading widgets from XML node: %d\n", rv); return 2; } GWEN_XMLNode_free(n); return 0; } int testSyncIo1(int argc, char **argv) { int rv; const char *fname; GWEN_SYNCIO *sio; GWEN_BUFFER *tbuf; if (argc<3) { fprintf(stderr, "Name of testfile needed.\n"); return 1; } fname=argv[2]; sio=GWEN_SyncIo_File_new(fname, GWEN_SyncIo_File_CreationMode_OpenExisting); fprintf(stderr, "Opening file\n"); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { fprintf(stderr, "Error opening file: %d\n", rv); return 2; } tbuf=GWEN_Buffer_new(0, 256, 0, 1); do { uint8_t *p; GWEN_Buffer_AllocRoom(tbuf, 1024); p=(uint8_t*) GWEN_Buffer_GetPosPointer(tbuf); rv=GWEN_SyncIo_Read(sio, p, 1024); if (rv<0) { fprintf(stderr, "Error reading file: %d\n", rv); GWEN_Buffer_Dump(tbuf, 2); return 2; } else if (rv>0) { fprintf(stderr, "Received %d bytes\n", rv); GWEN_Buffer_IncrementPos(tbuf, rv); GWEN_Buffer_AdjustUsedBytes(tbuf); } else if (rv==0) { fprintf(stderr, "EOF met.\n"); } } while(rv>0); fprintf(stderr, "File received.\n"); GWEN_Buffer_Dump(tbuf, 2); rv=GWEN_SyncIo_Disconnect(sio); if (rv<0) { fprintf(stderr, "Error closing file: %d\n", rv); return 2; } fprintf(stderr, "Finished.\n"); return 0; } int testSyncIo2(int argc, char **argv) { int rv; const char *fname; GWEN_SYNCIO *baseIo; GWEN_SYNCIO *sio; GWEN_BUFFER *tbuf; if (argc<3) { fprintf(stderr, "Name of testfile needed.\n"); return 1; } fname=argv[2]; baseIo=GWEN_SyncIo_File_new(fname, GWEN_SyncIo_File_CreationMode_OpenExisting); sio=GWEN_SyncIo_Buffered_new(baseIo); fprintf(stderr, "Opening file\n"); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { fprintf(stderr, "Error opening file: %d\n", rv); return 2; } tbuf=GWEN_Buffer_new(0, 256, 0, 1); do { uint8_t *p; GWEN_Buffer_AllocRoom(tbuf, 1024); p=(uint8_t*) GWEN_Buffer_GetPosPointer(tbuf); rv=GWEN_SyncIo_Read(sio, p, 1024); if (rv<0) { fprintf(stderr, "Error reading file: %d\n", rv); GWEN_Buffer_Dump(tbuf, 2); return 2; } else if (rv>0) { fprintf(stderr, "Received %d bytes\n", rv); GWEN_Buffer_IncrementPos(tbuf, rv); GWEN_Buffer_AdjustUsedBytes(tbuf); if (p[rv-1]==10) { fprintf(stderr, "Received line:\n"); GWEN_Buffer_Dump(tbuf, 2); GWEN_Buffer_Reset(tbuf); getchar(); } } else if (rv==0) { fprintf(stderr, "EOF met.\n"); } } while(rv>0); rv=GWEN_SyncIo_Disconnect(sio); if (rv<0) { fprintf(stderr, "Error closing file: %d\n", rv); return 2; } fprintf(stderr, "Finished.\n"); return 0; } int testSyncIo3(int argc, char **argv) { int rv; const char *fname; GWEN_SYNCIO *baseIo; GWEN_SYNCIO *sio; GWEN_BUFFER *tbuf; if (argc<3) { fprintf(stderr, "Name of testfile needed.\n"); return 1; } fname=argv[2]; baseIo=GWEN_SyncIo_File_new(fname, GWEN_SyncIo_File_CreationMode_OpenExisting); sio=GWEN_SyncIo_Buffered_new(baseIo); fprintf(stderr, "Opening file\n"); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { fprintf(stderr, "Error opening file: %d\n", rv); return 2; } tbuf=GWEN_Buffer_new(0, 256, 0, 1); do { uint8_t *p; GWEN_Buffer_AllocRoom(tbuf, 1024); p=(uint8_t*) GWEN_Buffer_GetPosPointer(tbuf); rv=GWEN_SyncIo_Read(sio, p, 1024); if (rv<0) { fprintf(stderr, "Error reading file: %d\n", rv); GWEN_Buffer_Dump(tbuf, 2); return 2; } else if (rv>0) { fprintf(stderr, "Received %d bytes\n", rv); GWEN_Buffer_IncrementPos(tbuf, rv); GWEN_Buffer_AdjustUsedBytes(tbuf); if (p[rv-1]==10) { fprintf(stderr, "Received line:\n"); GWEN_Buffer_Dump(tbuf, 2); getchar(); } } else if (rv==0) { fprintf(stderr, "EOF met.\n"); } GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FLAGS_TRANSPARENT); } while(rv>0); fprintf(stderr, "File received.\n"); GWEN_Buffer_Dump(tbuf, 2); rv=GWEN_SyncIo_Disconnect(sio); if (rv<0) { fprintf(stderr, "Error closing file: %d\n", rv); return 2; } fprintf(stderr, "Finished.\n"); return 0; } int testHttp1(int argc, char **argv) { int rv; const char *fname; GWEN_SYNCIO *sio=NULL; GWEN_SYNCIO *sioTls; int firstRead=1; int bodySize=-1; int bytesRead=0; GWEN_BUFFER *tbuf; GWEN_GUI *gui; GWEN_DB_NODE *db; if (argc<3) { fprintf(stderr, "Name of testfile needed.\n"); return 1; } fprintf(stderr, "Creating gui.\n"); gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); fname=argv[2]; rv=GWEN_Gui_GetSyncIo(fname, "http", 80, &sio); if (rv<0) { fprintf(stderr, "ERROR: Could not get SyncIO (%d)\n", rv); return 2; } sioTls=GWEN_SyncIo_GetBaseIoByTypeName(sio, GWEN_SYNCIO_TLS_TYPE); if (sioTls) { GWEN_SyncIo_SubFlags(sioTls, GWEN_SYNCIO_TLS_FLAGS_FORCE_SSL_V3); GWEN_SyncIo_AddFlags(sioTls, GWEN_SYNCIO_TLS_FLAGS_ALLOW_V1_CA_CRT); GWEN_SyncIo_AddFlags(sioTls, GWEN_SYNCIO_TLS_FLAGS_ADD_TRUSTED_CAS); fprintf(stderr, "Remote host: %s\n", GWEN_SyncIo_Tls_GetRemoteHostName(sioTls)); } rv=GWEN_SyncIo_Connect(sio); if (rv<0) { fprintf(stderr, "ERROR: Could not connect (%d)\n", rv); return 2; } /* send request */ db=GWEN_SyncIo_Http_GetDbHeaderOut(sio); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Content-length", 0); rv=GWEN_SyncIo_Write(sio, (uint8_t*)"", 0); if (rv<0) { fprintf(stderr, "ERROR: Could not write (%d)\n", rv); return 2; } /* get response */ tbuf=GWEN_Buffer_new(0, 1024, 0, 1); for (;;) { uint8_t *p; uint32_t l; rv=GWEN_Buffer_AllocRoom(tbuf, 1024); if (rv<0) { fprintf(stderr, "ERROR in check_syncio_http1: Could not allocRoom (%d)\n", rv); return 2; } p=(uint8_t*) GWEN_Buffer_GetPosPointer(tbuf); l=GWEN_Buffer_GetMaxUnsegmentedWrite(tbuf); do { rv=GWEN_SyncIo_Read(sio, p, l-1); } while(rv==GWEN_ERROR_INTERRUPTED); if (rv==0) break; else if (rv<0) { if (rv==GWEN_ERROR_EOF) { if (bodySize!=-1 && bytesRead=bodySize) { break; } firstRead=0; } #if 1 fprintf(stderr, "Received:\n"); GWEN_Buffer_Dump(tbuf, 2); #endif GWEN_Buffer_free(tbuf); rv=GWEN_SyncIo_Disconnect(sio); if (rv<0) { fprintf(stderr, "ERROR in check_syncio_http1: Could not disconnect (%d)\n", rv); return 2; } fprintf(stderr, "Finished.\n"); return 0; } int testHttp2(int argc, char **argv) { int rv; const char *foutName; const char *finName; const char *url; GWEN_SYNCIO *sio=NULL; GWEN_SYNCIO *sioTls; int firstRead=1; int bodySize=-1; int bytesRead=0; GWEN_BUFFER *ibuf; GWEN_BUFFER *tbuf; GWEN_GUI *gui; GWEN_DB_NODE *db; if (argc<5) { fprintf(stderr, "Usage: %s url sendfile recvfile\n", argv[0]); return 1; } fprintf(stderr, "Creating gui.\n"); gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); url=argv[2]; foutName=argv[3]; finName=argv[4]; ibuf=GWEN_Buffer_new(0, 256, 0, 1); rv=readFile(foutName, ibuf); if (rv<0) { fprintf(stderr, "ERROR: Could not read file (%d)\n", rv); return 2; } rv=GWEN_Gui_GetSyncIo(url, "http", 80, &sio); if (rv<0) { fprintf(stderr, "ERROR: Could not get SyncIO (%d)\n", rv); return 2; } sioTls=GWEN_SyncIo_GetBaseIoByTypeName(sio, GWEN_SYNCIO_TLS_TYPE); if (sioTls) { GWEN_SyncIo_SubFlags(sioTls, GWEN_SYNCIO_TLS_FLAGS_FORCE_SSL_V3); GWEN_SyncIo_AddFlags(sioTls, GWEN_SYNCIO_TLS_FLAGS_ALLOW_V1_CA_CRT); GWEN_SyncIo_AddFlags(sioTls, GWEN_SYNCIO_TLS_FLAGS_ADD_TRUSTED_CAS); fprintf(stderr, "Remote host: %s\n", GWEN_SyncIo_Tls_GetRemoteHostName(sioTls)); } rv=GWEN_SyncIo_Connect(sio); if (rv<0) { fprintf(stderr, "ERROR: Could not connect (%d)\n", rv); return 2; } /* send request */ db=GWEN_SyncIo_Http_GetDbCommandOut(sio); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Command", "POST"); db=GWEN_SyncIo_Http_GetDbHeaderOut(sio); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Content-Type", "application/x-www-form-urlencoded"); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Content-length", GWEN_Buffer_GetUsedBytes(ibuf)); rv=GWEN_SyncIo_WriteForced(sio, (uint8_t*) GWEN_Buffer_GetStart(ibuf), GWEN_Buffer_GetUsedBytes(ibuf)); if (rv<0) { fprintf(stderr, "ERROR: Could not write (%d)\n", rv); return 2; } /* get response */ tbuf=GWEN_Buffer_new(0, 1024, 0, 1); for (;;) { uint8_t *p; uint32_t l; rv=GWEN_Buffer_AllocRoom(tbuf, 1024); if (rv<0) { fprintf(stderr, "ERROR in check_syncio_http1: Could not allocRoom (%d)\n", rv); return 2; } p=(uint8_t*) GWEN_Buffer_GetPosPointer(tbuf); l=GWEN_Buffer_GetMaxUnsegmentedWrite(tbuf); do { rv=GWEN_SyncIo_Read(sio, p, l-1); } while(rv==GWEN_ERROR_INTERRUPTED); if (rv==0) break; else if (rv<0) { if (rv==GWEN_ERROR_EOF) { if (bodySize!=-1 && bytesRead=bodySize) { break; } firstRead=0; } rv=writeFile(finName, GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf)); if (rv<0) { fprintf(stderr, "ERROR in writeFile (%d)\n", rv); return 2; } #if 1 fprintf(stderr, "Received:\n"); GWEN_Buffer_Dump(tbuf, 2); #endif GWEN_Buffer_free(tbuf); rv=GWEN_SyncIo_Disconnect(sio); if (rv<0) { fprintf(stderr, "ERROR in check_syncio_http1: Could not disconnect (%d)\n", rv); return 2; } fprintf(stderr, "Finished.\n"); return 0; } int testTresor1(int argc, char **argv) { int rv; const char *testData="This is the actual test data"; GWEN_BUFFER *buf1; GWEN_BUFFER *buf2; int l; buf1=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_SmallTresor_Encrypt((const uint8_t*) testData, strlen(testData), "TESTPASSWORD", buf1, 1546, 1937); if (rv<0) { fprintf(stderr, "ERROR in checkTresor1: Could not encrypt (%d)\n", rv); return 2; } buf2=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_SmallTresor_Decrypt((const uint8_t*) GWEN_Buffer_GetStart(buf1), GWEN_Buffer_GetUsedBytes(buf1), "TESTPASSWORD", buf2, 1546, 1937); if (rv<0) { fprintf(stderr, "ERROR in checkTresor1: Could not decrypt (%d)\n", rv); return 2; } l=strlen(testData); if (l!=GWEN_Buffer_GetUsedBytes(buf2)) { fprintf(stderr, "Bad result (len):\n"); GWEN_Buffer_Dump(buf2, 2); return 2; } if (strcmp(testData, GWEN_Buffer_GetStart(buf2))!=0) { fprintf(stderr, "Bad result (content):\n"); GWEN_Buffer_Dump(buf2, 2); return 2; } fprintf(stderr, "Finished.\n"); return 0; } int testTresor2(int argc, char **argv) { int i; for (i=0; i<100; i++) { int rv; const char *testData="This is the actual test data"; GWEN_BUFFER *buf1; GWEN_BUFFER *buf2; int l; fprintf(stderr, "Round %d...\n", i); buf1=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_SmallTresor_Encrypt((const uint8_t*) testData, strlen(testData), "TESTPASSWORD", buf1, 1546, 1937); if (rv<0) { fprintf(stderr, "ERROR in checkTresor1: Could not encrypt (%d)\n", rv); return 2; } buf2=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_SmallTresor_Decrypt((const uint8_t*) GWEN_Buffer_GetStart(buf1), GWEN_Buffer_GetUsedBytes(buf1), "TESTPASSWORD", buf2, 1546, 1937); if (rv<0) { fprintf(stderr, "ERROR in checkTresor1: Could not decrypt (%d)\n", rv); return 2; } l=strlen(testData); if (l!=GWEN_Buffer_GetUsedBytes(buf2)) { fprintf(stderr, "Bad result (len):\n"); GWEN_Buffer_Dump(buf2, 2); return 2; } if (strcmp(testData, GWEN_Buffer_GetStart(buf2))!=0) { fprintf(stderr, "Bad result (content):\n"); GWEN_Buffer_Dump(buf2, 2); return 2; } fprintf(stderr, "Round %d... Ok.\n", i); } fprintf(stderr, "Finished.\n"); return 0; } int testHashTree(int argc, char **argv) { int rv; GWEN_MDIGEST *md; GWEN_STRINGLIST *sl; GWEN_STRINGLISTENTRY *se; if (argc<3) { fprintf(stderr, "Folder needed\n"); return 1; } sl=GWEN_StringList_new(); md=GWEN_MDigest_Rmd160_new(); rv=GWEN_MDigest_HashFileTree(md, argv[2], NULL, sl); if (rv<0) { fprintf(stderr, "ERROR on HASHTREE (%d)\n", rv); return 2; } se=GWEN_StringList_FirstEntry(sl); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) fprintf(stderr, " %s\n", s); se=GWEN_StringListEntry_Next(se); } return 0; } int testDate1(int argc, char **argv) { GWEN_DATE *ti1; int j; int i; ti1=GWEN_Date_CurrentDate(); assert(ti1); j=GWEN_Date_GetJulian(ti1); DBG_NOTICE(0, "Current Julian date: %d (%s)", j, GWEN_Date_GetString(ti1)); for (i=1; i<20; i++) { GWEN_DATE *ti2; ti2=GWEN_Date_fromJulian(j+i); if (ti2==NULL) { DBG_ERROR(0, "Bad julian date value %d", j+i); } else { DBG_NOTICE(0, " - Julian date %2d: %s (%d)", j+i, GWEN_Date_GetString(ti2), GWEN_Date_WeekDay(ti1)); GWEN_Date_free(ti2); } } for (i=1; i<4; i++) { GWEN_DATE *ti2; ti2=GWEN_Date_fromJulian(j+(i*7)); if (ti2==NULL) { DBG_ERROR(0, "Bad julian date value %d", j+(i*7)); } else { DBG_NOTICE(0, " + Julian date %2d: %s (%d)", j+(i*7), GWEN_Date_GetString(ti2), GWEN_Date_WeekDay(ti2)); GWEN_Date_free(ti2); } } return 0; } int testDate2(int argc, char **argv) { GWEN_DATE *ti1; GWEN_BUFFER *dbuf; ti1=GWEN_Date_CurrentDate(); assert(ti1); dbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Date_toStringWithTemplate(ti1, "w*, DDDD.MM.YYYY", dbuf); DBG_NOTICE(0, "Current date: %s", GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_Reset(dbuf); GWEN_Date_toStringWithTemplate(ti1, "www, DD.M*.YYYY (W)", dbuf); DBG_NOTICE(0, "or like this: %s", GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_Reset(dbuf); GWEN_Date_toStringWithTemplate(ti1, "w*, D.M.YYYY (W)", dbuf); DBG_NOTICE(0, "or like this: %s", GWEN_Buffer_GetStart(dbuf)); return 0; } int testSar1(int argc, char **argv) { GWEN_SAR *sr; const char *aname; const char *fname; int rv; if (argc<4) { fprintf(stderr, "%s sar1 archive file\n", argv[0]); return 1; } aname=argv[2]; fname=argv[3]; sr=GWEN_Sar_new(); rv=GWEN_Sar_CreateArchive(sr, aname); if (rv<0) { fprintf(stderr, "Error creating archive (%d)\n", rv); return 2; } fprintf(stderr, "Adding file \"%s\"\n", fname); rv=GWEN_Sar_AddFile(sr, fname); if (rv<0) { fprintf(stderr, "Error adding file \"%s\" to archive \"%s\" (%d)\n", fname, aname, rv); return 2; } rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { fprintf(stderr, "Error closing archive (%d)\n", rv); return 2; } return 0; } int testSar2(int argc, char **argv) { GWEN_SAR *sr; const char *aname; int rv; const GWEN_SAR_FILEHEADER_LIST *fhl; if (argc<3) { fprintf(stderr, "%s sar2 archive\n", argv[0]); return 1; } aname=argv[2]; sr=GWEN_Sar_new(); rv=GWEN_Sar_OpenArchive(sr, aname, GWEN_SyncIo_File_CreationMode_OpenExisting, GWEN_SYNCIO_FILE_FLAGS_READ); if (rv<0) { fprintf(stderr, "Error opening archive (%d)\n", rv); return 2; } fhl=GWEN_Sar_GetHeaders(sr); if (fhl) { const GWEN_SAR_FILEHEADER *fh; fh=GWEN_SarFileHeader_List_First(fhl); while(fh) { const char *s; s=GWEN_SarFileHeader_GetPath(fh); rv=GWEN_Sar_CheckFile(sr, fh); if (rv<0) { fprintf(stderr, "%s: CRC error\n", s?s:"(noname)"); } else { fprintf(stderr, "%s: Ok\n", s?s:"(noname)"); } fh=GWEN_SarFileHeader_List_Next(fh); } } rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { fprintf(stderr, "Error closing archive (%d)\n", rv); return 2; } return 0; } int testSar3(int argc, char **argv) { GWEN_SAR *sr; const char *aname; int rv; const GWEN_SAR_FILEHEADER_LIST *fhl; if (argc<3) { fprintf(stderr, "%s sar2 archive\n", argv[0]); return 1; } aname=argv[2]; sr=GWEN_Sar_new(); rv=GWEN_Sar_OpenArchive(sr, aname, GWEN_SyncIo_File_CreationMode_OpenExisting, GWEN_SYNCIO_FILE_FLAGS_READ); if (rv<0) { fprintf(stderr, "Error opening archive (%d)\n", rv); return 2; } fhl=GWEN_Sar_GetHeaders(sr); if (fhl) { const GWEN_SAR_FILEHEADER *fh; fh=GWEN_SarFileHeader_List_First(fhl); while(fh) { const char *s; s=GWEN_SarFileHeader_GetPath(fh); rv=GWEN_Sar_ExtractFile(sr, fh); if (rv<0) { fprintf(stderr, "%s: CRC error\n", s?s:"(noname)"); } else { fprintf(stderr, "%s: Ok\n", s?s:"(noname)"); } fh=GWEN_SarFileHeader_List_Next(fh); } } rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { fprintf(stderr, "Error closing archive (%d)\n", rv); return 2; } return 0; } int testSar4(int argc, char **argv) { GWEN_SAR *sr; const char *aname; const char *fname; int rv; if (argc<4) { fprintf(stderr, "%s sar1 archive file\n", argv[0]); return 1; } aname=argv[2]; fname=argv[3]; sr=GWEN_Sar_new(); rv=GWEN_Sar_OpenArchive(sr, aname, GWEN_SyncIo_File_CreationMode_OpenExisting, GWEN_SYNCIO_FILE_FLAGS_READ| GWEN_SYNCIO_FILE_FLAGS_WRITE); if (rv<0) { fprintf(stderr, "Error opening archive (%d)\n", rv); return 2; } fprintf(stderr, "Adding file \"%s\"\n", fname); rv=GWEN_Sar_AddFile(sr, fname); if (rv<0) { fprintf(stderr, "Error adding file \"%s\" to archive \"%s\" (%d)\n", fname, aname, rv); return 2; } rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { fprintf(stderr, "Error closing archive (%d)\n", rv); return 2; } return 0; } int testStringListFromString(int argc, char **argv) { GWEN_STRINGLIST *sl; #if 1 const char delims[]="\n"; const char td[]="test1\ntest2\ntest3"; #else const char delims[]=","; const char td[]="test1,test2,test3"; #endif sl=GWEN_StringList_fromString(td, delims, 1); if (sl) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(sl); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); fprintf(stderr, "Got this: [%s]\n", s?s:"(empty)"); se=GWEN_StringListEntry_Next(se); } } return 0; } int testPasswordStore1(int argc, char **argv) { GWEN_PASSWD_STORE *sto; const char *pw1="Secret1"; char pw[256]; int rv; GWEN_GUI *gui; fprintf(stderr, "Creating gui.\n"); gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); sto=GWEN_PasswordStore_new("/tmp/pwstore.pw"); rv=GWEN_PasswordStore_SetPassword(sto, "TestVar1", pw1); if (rv<0) { DBG_ERROR(0, "Error setting password: %d", rv); return 2; } rv=GWEN_PasswordStore_GetPassword(sto, "TestVar1", pw, 4, sizeof(pw)-1); if (rv<0) { DBG_ERROR(0, "Error getting password: %d", rv); return 2; } if (strcmp(pw1, pw)!=0) { DBG_ERROR(0, "Bad password, expected [%s], got [%s].", pw1, pw); return 2; } GWEN_PasswordStore_free(sto); return 0; } int testPasswordStore2(int argc, char **argv) { GWEN_PASSWD_STORE *sto; const char *pw1="Secret1"; char pw[256]; int rv; GWEN_GUI *gui; fprintf(stderr, "Creating gui.\n"); gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); sto=GWEN_PasswordStore_new("/tmp/pwstore.pw"); rv=GWEN_PasswordStore_GetPassword(sto, "TestVar1", pw, 4, sizeof(pw)-1); if (rv<0) { DBG_ERROR(0, "Error getting password: %d", rv); return 2; } if (strcmp(pw1, pw)!=0) { DBG_ERROR(0, "Bad password, expected [%s], got [%s].", pw1, pw); return 2; } GWEN_PasswordStore_free(sto); return 0; } int testPasswordStore3(int argc, char **argv) { GWEN_PASSWD_STORE *sto; GWEN_DB_NODE *dbPasswords; const char *pw1="Secret1"; char pw[256]; int rv; GWEN_GUI *gui; fprintf(stderr, "Creating gui.\n"); gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); sto=GWEN_PasswordStore_new("/tmp/pwstore.pw"); dbPasswords=GWEN_DB_Group_new("TempPasswords"); GWEN_Gui_SetPasswdStore(gui, sto); GWEN_Gui_SetPasswordDb(gui, dbPasswords, 0); rv=GWEN_Gui_GetPassword(0, "TestVar1", "Get Password 1", "Please enter password 1", pw, 4, sizeof(pw)-1, 0); if (rv<0) { DBG_ERROR(0, "Error getting password: %d", rv); return 2; } if (strcmp(pw1, pw)!=0) { DBG_ERROR(0, "Bad password, expected [%s], got [%s].", pw1, pw); return 2; } return 0; } int testPasswordStore4(int argc, char **argv) { GWEN_PASSWD_STORE *sto; GWEN_DB_NODE *dbPasswords; const char *token; const char *epw; char pw[256]; int rv; GWEN_GUI *gui; if (argc<4) { DBG_ERROR(0, "Expected token and secret"); return 1; } token=argv[2]; epw=argv[3]; gui=GWEN_Gui_CGui_new(); GWEN_Gui_AddFlags(gui, GWEN_CGUI_FLAGS_PERMPASSWORDS); GWEN_Gui_SetGui(gui); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); sto=GWEN_PasswordStore_new("/tmp/pwstore.pw"); dbPasswords=GWEN_DB_Group_new("TempPasswords"); GWEN_Gui_SetPasswdStore(gui, sto); GWEN_Gui_SetPasswordDb(gui, dbPasswords, 0); rv=GWEN_Gui_GetPassword(0, token, "Get Password", "Please enter password 1", pw, 4, sizeof(pw)-1, 0); if (rv<0) { DBG_ERROR(0, "Error getting password: %d", rv); return 2; } if (strcmp(epw, pw)!=0) { DBG_ERROR(0, "Bad password for token [%s], expected [%s], got [%s].", token, epw, pw); return 2; } return 0; } int testPasswordStore5(int argc, char **argv) { GWEN_PASSWD_STORE *sto; GWEN_DB_NODE *dbPasswords; const char *token; const char *epw; char pw[256]; int rv; GWEN_GUI *gui; if (argc<4) { DBG_ERROR(0, "Expected token and secret"); return 1; } token=argv[2]; epw=argv[3]; gui=GWEN_Gui_CGui_new(); GWEN_Gui_AddFlags(gui, GWEN_CGUI_FLAGS_PERMPASSWORDS); GWEN_Gui_SetGui(gui); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); sto=GWEN_PasswordStore_new("/tmp/pwstore.pw"); dbPasswords=GWEN_DB_Group_new("TempPasswords"); GWEN_Gui_SetPasswdStore(gui, sto); GWEN_Gui_SetPasswordDb(gui, dbPasswords, 0); rv=GWEN_Gui_GetPassword(0, token, "Get Password", "Please enter password 1", pw, 4, sizeof(pw)-1, 0); if (rv<0) { DBG_ERROR(0, "Error getting password: %d", rv); return 2; } if (strcmp(epw, pw)!=0) { DBG_ERROR(0, "Bad password for token [%s], expected [%s], got [%s].", token, epw, pw); return 2; } /* 2nd time: Should read password from temporary storage */ memset(pw, 0, sizeof(pw)-1); rv=GWEN_Gui_GetPassword(0, token, "Get Password", "Please enter password 1", pw, 4, sizeof(pw)-1, 0); if (rv<0) { DBG_ERROR(0, "Error getting password: %d", rv); return 2; } if (strcmp(epw, pw)!=0) { DBG_ERROR(0, "Bad password for token [%s], expected [%s], got [%s].", token, epw, pw); return 2; } return 0; } int testCSV(int argc, char **argv) { GWEN_DB_NODE *dbData; GWEN_DB_NODE *dbParams; GWEN_DBIO *dbio; GWEN_SYNCIO *sio; int rv; GWEN_GUI *gui; const char params[]={ "quote=\"1\"\n" "title=\"1\"\n" "delimiter=\";\n" "columns {\n" " 1=\"column-1\"\n" " 2=\"column-2\"\n" " 3=\"column-3\"\n" "}\n" }; const char data[]={ "\"col1\";\"col2\";\"col3\"\n" "\"1-1\";\"1-2\";\"1-3\"\n" "\"2-1\";\"2-2\";\"2-3\"\n" "\"3-1\";\"3-2\";\"3-3\"" }; gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); dbParams=GWEN_DB_Group_new("params"); rv=GWEN_DB_ReadFromString(dbParams, params, strlen(params), GWEN_DB_FLAGS_DEFAULT); if (rv<0) { DBG_ERROR(0, "here (%d)", rv); return rv; } dbData=GWEN_DB_Group_new("transactions"); dbio=GWEN_DBIO_GetPlugin("csv"); if (!dbio) { DBG_ERROR(0, "GWEN DBIO plugin \"CSV\" not available"); return 0; } sio=GWEN_SyncIo_Memory_fromBuffer((const uint8_t*) data, strlen(data)); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_ERROR(0, "here (%d)", rv); return rv; } rv=GWEN_DBIO_Import(dbio, sio, dbData, dbParams, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP); if (rv) { DBG_ERROR(0, "Error importing data (%d)", rv); return GWEN_ERROR_GENERIC; } fprintf(stderr, "Imported this:\n"); GWEN_DB_Dump(dbData, 2); return 0; } #ifdef TEST_GPARSER int testParser1(int argc, char **argv) { int rv; GWEN_GUI *gui; GWEN_PARSER_ELEMENT_TREE *et; gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); //GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Info); et=GWEN_ParserElement_Tree_new(); rv=GWEN_ParserElement_Tree_ReadXmlFile(et, "test-def.xml"); if (rv<0) { DBG_ERROR(0, "Error reading element definition file (%d)", rv); return rv; } GWEN_ParserElement_Tree_Dump(et, 2); return 0; } int testParser2(int argc, char **argv) { int rv; GWEN_GUI *gui; GWEN_PARSER_ELEMENT_TREE *et; gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); //GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Info); et=GWEN_ParserElement_Tree_new(); rv=GWEN_ParserXml_ReadFile(et, "test-element.xml"); if (rv<0) { DBG_ERROR(0, "Error reading element definition file (%d)", rv); return rv; } GWEN_ParserElement_Tree_Dump(et, 2); return 0; } int testParser3(int argc, char **argv) { int rv; GWEN_GUI *gui; GWEN_PARSER_ELEMENT_TREE *dt; GWEN_PARSER_ELEMENT_TREE *et; gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); //GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Info); dt=GWEN_ParserElement_Tree_new(); rv=GWEN_ParserElement_Tree_ReadXmlFile(dt, "test-def.xml"); if (rv<0) { DBG_ERROR(0, "Error reading element definition file (%d)", rv); return rv; } fprintf(stderr, "============== Definitions tree: =================\n"); GWEN_ParserElement_Tree_Dump(dt, 2); et=GWEN_ParserElement_Tree_new(); rv=GWEN_ParserXml_ReadFile(et, "test-element.xml"); if (rv<0) { DBG_ERROR(0, "Error reading element definition file (%d)", rv); return rv; } fprintf(stderr, "================== Data tree: ====================\n"); GWEN_ParserElement_Tree_Dump(et, 2); rv=GWEN_Parser_CheckTree(dt, et); if (rv<0) { DBG_ERROR(0, "Error checking tree (%d)", rv); return rv; } fprintf(stderr, "Tree is ok.\n"); return 0; } int testParser4(int argc, char **argv) { int rv; GWEN_GUI *gui; GWEN_PARSER_ELEMENT_TREE *dt; GWEN_PARSER_ELEMENT_TREE *et; gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); //GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Info); dt=GWEN_ParserElement_Tree_new(); rv=GWEN_ParserElement_Tree_ReadXmlFile(dt, "test-def.xml"); if (rv<0) { DBG_ERROR(0, "Error reading element definition file (%d)", rv); return rv; } fprintf(stderr, "============== Definitions tree: =================\n"); GWEN_ParserElement_Tree_Dump(dt, 2); et=GWEN_ParserElement_Tree_new(); rv=GWEN_ParserXml_ReadFile(et, "test-element.xml"); if (rv<0) { DBG_ERROR(0, "Error reading element definition file (%d)", rv); return rv; } fprintf(stderr, "================== Data tree: ====================\n"); GWEN_ParserElement_Tree_Dump(et, 2); rv=GWEN_Parser_UpdateTree(dt, et); if (rv<0) { DBG_ERROR(0, "Error checking tree (%d)", rv); return rv; } fprintf(stderr, "================ Data tree now: ==================\n"); GWEN_ParserElement_Tree_Dump(et, 2); fprintf(stderr, "Tree is ok.\n"); return 0; } #endif int testParams1(int argc, char **argv) { int rv; GWEN_GUI *gui; GWEN_PARAM_LIST *pl; GWEN_PARAM_LIST *pl2; GWEN_PARAM *prm; GWEN_BUFFER *tbuf; GWEN_XMLNODE *xn; GWEN_XMLNODE *xn2; int vInt; double vDouble; int errors=0; gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); //GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Info); /* setup params */ pl=GWEN_Param_List_new(); /* var 1: int */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "intVar1"); GWEN_Param_SetType(prm, GWEN_Param_DataType_Int); GWEN_Param_SetCurrentValueAsInt(prm, 1); GWEN_Param_List_Add(prm, pl); /* var 2: int */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "intVar2"); GWEN_Param_SetType(prm, GWEN_Param_DataType_Int); GWEN_Param_SetCurrentValueAsInt(prm, 2); GWEN_Param_List_Add(prm, pl); /* var 3: float */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "doubleVar1"); GWEN_Param_SetType(prm, GWEN_Param_DataType_Float); GWEN_Param_SetCurrentValueAsDouble(prm, 101.7); GWEN_Param_List_Add(prm, pl); /* var 4: float */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "doubleVar2"); GWEN_Param_SetType(prm, GWEN_Param_DataType_Float); GWEN_Param_SetCurrentValueAsDouble(prm, 102.4); GWEN_Param_List_Add(prm, pl); /* var 5: string */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "stringVar1"); GWEN_Param_SetType(prm, GWEN_Param_DataType_String); GWEN_Param_SetCurrentValue(prm, "first string"); GWEN_Param_List_Add(prm, pl); /* to XML */ xn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "params"); GWEN_Param_List_WriteXml(pl, xn); tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_XMLNode_toBuffer(xn, tbuf, GWEN_XML_FLAGS_DEFAULT); if (rv<0) { fprintf(stderr, "Error on GWEN_XMLNode_toBuffer(): %d\n", rv); return 2; } fprintf(stdout, "Buffer:\n%s\n", GWEN_Buffer_GetStart(tbuf)); /* read into second list */ pl2=GWEN_Param_List_new(); xn2=GWEN_XMLNode_fromString(GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf), GWEN_XML_FLAGS_DEFAULT); if (xn2==NULL) { fprintf(stderr, "Error on GWEN_XMLNode_fromString(): %d\n", rv); return 2; } GWEN_Param_List_ReadXml(pl2, xn2); /* check values */ vInt=GWEN_Param_List_GetCurrentValueAsInt(pl2, "intVar1", -1); if (vInt!=1) { fprintf(stderr, "intVar1: Bad value (%d)\n", vInt); errors++; } vInt=GWEN_Param_List_GetCurrentValueAsInt(pl2, "intVar2", -1); if (vInt!=2) { fprintf(stderr, "intVar2: Bad value (%d)\n", vInt); errors++; } vDouble=GWEN_Param_List_GetCurrentValueAsDouble(pl2, "doubleVar1", -1.0); if (vDouble!=101.7) { fprintf(stderr, "intDouble1: Bad value (%f)\n", vDouble); errors++; } vDouble=GWEN_Param_List_GetCurrentValueAsDouble(pl2, "doubleVar2", -1.0); if (vDouble!=102.4) { fprintf(stderr, "intDouble2: Bad value (%f)\n", vDouble); errors++; } if (errors) { fprintf(stderr, "%d errors occurred\n", errors); return 2; } else { fprintf(stdout, "no errors.\n"); } return 0; } int testParams2(int argc, char **argv) { GWEN_GUI *gui; GWEN_PARAM_LIST *pl; GWEN_PARAM *prm; int vInt; double vDouble; int errors=0; gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); //GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Info); /* setup params */ pl=GWEN_Param_List_new(); /* var 1: int */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "intVar1"); GWEN_Param_SetType(prm, GWEN_Param_DataType_Int); GWEN_Param_SetCurrentValueAsInt(prm, 99); GWEN_Param_List_Add(prm, pl); /* var 2: int */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "intVar2"); GWEN_Param_SetType(prm, GWEN_Param_DataType_Int); GWEN_Param_SetCurrentValueAsInt(prm, 88); GWEN_Param_List_Add(prm, pl); /* var 3: float */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "doubleVar1"); GWEN_Param_SetType(prm, GWEN_Param_DataType_Float); GWEN_Param_SetCurrentValueAsDouble(prm, 77.5); GWEN_Param_List_Add(prm, pl); /* var 4: float */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "doubleVar2"); GWEN_Param_SetType(prm, GWEN_Param_DataType_Float); GWEN_Param_SetCurrentValueAsDouble(prm, 99.3); GWEN_Param_List_Add(prm, pl); /* var 5: string */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "stringVar1"); GWEN_Param_SetType(prm, GWEN_Param_DataType_String); GWEN_Param_SetCurrentValue(prm, "first real string"); GWEN_Param_List_Add(prm, pl); GWEN_Param_List_SetCurrentValueAsInt(pl, "intVar1", 1); GWEN_Param_List_SetCurrentValueAsInt(pl, "intVar2", 2); GWEN_Param_List_SetCurrentValueAsDouble(pl, "doubleVar1", 101.7); GWEN_Param_List_SetCurrentValueAsDouble(pl, "doubleVar2", 102.4); /* check values */ vInt=GWEN_Param_List_GetCurrentValueAsInt(pl, "intVar1", -1); if (vInt!=1) { fprintf(stderr, "intVar1: Bad value (%d)\n", vInt); errors++; } vInt=GWEN_Param_List_GetCurrentValueAsInt(pl, "intVar2", -1); if (vInt!=2) { fprintf(stderr, "intVar2: Bad value (%d)\n", vInt); errors++; } vDouble=GWEN_Param_List_GetCurrentValueAsDouble(pl, "doubleVar1", -1.0); if (vDouble!=101.7) { fprintf(stderr, "intDouble1: Bad value (%f)\n", vDouble); errors++; } vDouble=GWEN_Param_List_GetCurrentValueAsDouble(pl, "doubleVar2", -1.0); if (vDouble!=102.4) { fprintf(stderr, "intDouble2: Bad value (%f)\n", vDouble); errors++; } if (errors) { fprintf(stderr, "%d errors occurred\n", errors); return 2; } else { fprintf(stdout, "no errors.\n"); } return 0; } int testParams3(int argc, char **argv) { int rv; GWEN_GUI *gui; GWEN_PARAM_LIST *pl; GWEN_PARAM *prm; GWEN_BUFFER *tbuf; GWEN_XMLNODE *xn; GWEN_XMLNODE *xn2; int vInt; double vDouble; int errors=0; gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); //GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Info); /* setup params */ pl=GWEN_Param_List_new(); /* var 1: int */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "intVar1"); GWEN_Param_SetType(prm, GWEN_Param_DataType_Int); GWEN_Param_SetCurrentValueAsInt(prm, 1); GWEN_Param_List_Add(prm, pl); /* var 2: int */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "intVar2"); GWEN_Param_SetType(prm, GWEN_Param_DataType_Int); GWEN_Param_SetCurrentValueAsInt(prm, 2); GWEN_Param_List_Add(prm, pl); /* var 3: float */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "doubleVar1"); GWEN_Param_SetType(prm, GWEN_Param_DataType_Float); GWEN_Param_SetCurrentValueAsDouble(prm, 101.7); GWEN_Param_List_Add(prm, pl); /* var 4: float */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "doubleVar2"); GWEN_Param_SetType(prm, GWEN_Param_DataType_Float); GWEN_Param_SetCurrentValueAsDouble(prm, 102.4); GWEN_Param_List_Add(prm, pl); /* var 5: string */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "stringVar1"); GWEN_Param_SetType(prm, GWEN_Param_DataType_String); GWEN_Param_SetCurrentValue(prm, "first string"); GWEN_Param_List_Add(prm, pl); /* to XML */ xn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "params"); GWEN_Param_List_WriteValuesToXml(pl, xn); tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_XMLNode_toBuffer(xn, tbuf, GWEN_XML_FLAGS_DEFAULT); if (rv<0) { fprintf(stderr, "Error on GWEN_XMLNode_toBuffer(): %d\n", rv); return 2; } fprintf(stdout, "Buffer:\n%s\n", GWEN_Buffer_GetStart(tbuf)); /* overwrite values */ GWEN_Param_List_SetCurrentValueAsInt(pl, "intVar1", 77); GWEN_Param_List_SetCurrentValueAsInt(pl, "intVar2", 88); GWEN_Param_List_SetCurrentValueAsDouble(pl, "doubleVar1", 77.7); GWEN_Param_List_SetCurrentValueAsDouble(pl, "doubleVar2", 99.9); /* read into second list */ xn2=GWEN_XMLNode_fromString(GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf), GWEN_XML_FLAGS_DEFAULT); if (xn2==NULL) { fprintf(stderr, "Error on GWEN_XMLNode_fromString(): %d\n", rv); return 2; } GWEN_Param_List_ReadValuesFromXml(pl, xn2); /* check values */ vInt=GWEN_Param_List_GetCurrentValueAsInt(pl, "intVar1", -1); if (vInt!=1) { fprintf(stderr, "intVar1: Bad value (%d)\n", vInt); errors++; } vInt=GWEN_Param_List_GetCurrentValueAsInt(pl, "intVar2", -1); if (vInt!=2) { fprintf(stderr, "intVar2: Bad value (%d)\n", vInt); errors++; } vDouble=GWEN_Param_List_GetCurrentValueAsDouble(pl, "doubleVar1", -1.0); if (vDouble!=101.7) { fprintf(stderr, "intDouble1: Bad value (%f)\n", vDouble); errors++; } vDouble=GWEN_Param_List_GetCurrentValueAsDouble(pl, "doubleVar2", -1.0); if (vDouble!=102.4) { fprintf(stderr, "intDouble2: Bad value (%f)\n", vDouble); errors++; } if (errors) { fprintf(stderr, "%d errors occurred\n", errors); return 2; } else { fprintf(stdout, "no errors.\n"); } return 0; } int main(int argc, char **argv) { int rv; GWEN_Init(); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Debug); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Info); if (argc<2) { fprintf(stderr, "Usage: %s \n where is one of db, dbfile, dbfile2, list, key, mkkey, cpkey, xml, xml2, sn, ssl, accept, connect\n", argv[0]); GWEN_Fini(); return 1; } if (strcasecmp(argv[1], "dbfile")==0) rv=testDBfile(argc, argv); else if (strcasecmp(argv[1], "des")==0) rv=testDES(argc, argv); else if (strcasecmp(argv[1], "des2")==0) rv=testDES2(argc, argv); else if (strcasecmp(argv[1], "des3")==0) rv=testDES3(argc, argv); else if (strcasecmp(argv[1], "des4")==0) rv=testDES4(argc, argv); else if (strcasecmp(argv[1], "db")==0) rv=testDB(argc, argv); else if (strcasecmp(argv[1], "db2")==0) rv=testDB2(argc, argv); else if (strcasecmp(argv[1], "dbfile2")==0) rv=testDBfile2(argc, argv); else if (strcasecmp(argv[1], "dbfile3")==0) rv=testDBfile3(argc, argv); else if (strcasecmp(argv[1], "dbfile4")==0) rv=testDBfile4(argc, argv); else if (strcasecmp(argv[1], "msg")==0) rv=testMsg(argc, argv); else if (strcasecmp(argv[1], "list")==0) rv=testListMsg(argc, argv); else if (strcasecmp(argv[1], "xml")==0) rv=testXML(argc, argv); else if (strcasecmp(argv[1], "xml2")==0) rv=testXML2(argc, argv); else if (strcasecmp(argv[1], "xml3")==0) rv=testXML3(argc, argv); else if (strcasecmp(argv[1], "xml4")==0) rv=testXML4(argc, argv); else if (strcasecmp(argv[1], "xml5")==0) rv=testXML5(argc, argv); else if (strcasecmp(argv[1], "xml6")==0) rv=testXML6(argc, argv); else if (strcasecmp(argv[1], "sn")==0) rv=testSnprintf(argc, argv); else if (strcasecmp(argv[1], "process")==0) rv=testProcess(argc, argv); else if (strcasecmp(argv[1], "option")==0) rv=testOptions(argc, argv); else if (strcasecmp(argv[1], "base64")==0) rv=testBase64(argc, argv); else if (strcasecmp(argv[1], "base64_2")==0) rv=testBase64_2(argc, argv); else if (strcasecmp(argv[1], "time")==0) rv=testTime(argc, argv); else if (strcasecmp(argv[1], "time2")==0) rv=testTimeFromString(argc, argv); else if (strcasecmp(argv[1], "time1")==0) rv=testTimeToString(argc, argv); else if (strcasecmp(argv[1], "olddb")==0) rv=testOldDbImport(argc, argv); else if (strcasecmp(argv[1], "822")==0) rv=testRfc822Import(argc, argv); else if (strcasecmp(argv[1], "822x")==0) rv=testRfc822Export(argc, argv); else if (strcasecmp(argv[1], "xmldb1")==0) rv=testXmlDbExport(argc, argv); else if (strcasecmp(argv[1], "xmldb2")==0) rv=testXmlDbImport(argc, argv); else if (strcasecmp(argv[1], "fslock")==0) rv=testFsLock(argc, argv); else if (strcasecmp(argv[1], "fslock2")==0) rv=testFsLock2(argc, argv); else if (strcasecmp(argv[1], "ptr")==0) rv=testPtr(argc, argv); else if (strcasecmp(argv[1], "sl2")==0) rv=testStringList2(argc, argv); else if (strcasecmp(argv[1], "sort")==0) rv=testSort(argc, argv); else if (strcasecmp(argv[1], "buf2")==0) rv=testBuffer2(argc, argv); else if (strcasecmp(argv[1], "mem")==0) rv=testMem(argc, argv); else if (strcasecmp(argv[1], "floatdouble")==0) rv=testFloatDouble(argc, argv); else if (strcasecmp(argv[1], "map")==0) rv=testMap(argc, argv); else if (strcasecmp(argv[1], "map2")==0) rv=testMap2(argc, argv); else if (strcasecmp(argv[1], "map3")==0) rv=testMap3(argc, argv); else if (strcasecmp(argv[1], "map4")==0) rv=testMap4(argc, argv); else if (strcasecmp(argv[1], "idlist")==0) rv=testIdList(argc, argv); else if (strcasecmp(argv[1], "signals1")==0) rv=testSignals1(argc, argv); else if (strcasecmp(argv[1], "signals2")==0) rv=testSignals2(argc, argv); else if (strcasecmp(argv[1], "signals3")==0) rv=testSignals3(argc, argv); else if (strcasecmp(argv[1], "url")==0) rv=testUrl(argc, argv); else if (strcasecmp(argv[1], "newxml")==0) rv=testNewXML(argc, argv); else if (strcasecmp(argv[1], "3rsa")==0) rv=testCrypt3Rsa(argc, argv); else if (strcasecmp(argv[1], "3rsa2")==0) rv=testCrypt3Rsa2(argc, argv); else if (strcasecmp(argv[1], "3rsa3")==0) rv=testCrypt3Rsa3(argc, argv); else if (strcasecmp(argv[1], "3rsa4")==0) rv=testCrypt3Rsa4(argc, argv); else if (strcasecmp(argv[1], "gtls")==0) rv=testGnutls(argc, argv); else if (strcasecmp(argv[1], "httpsession")==0) rv=testHttpSession(argc, argv); else if (strcasecmp(argv[1], "rsa")==0) { check_rsa_keys(); rv=0; } else if (strcasecmp(argv[1], "cryptmgr1")==0) { rv=testCryptMgr1(argc, argv); } else if (strcasecmp(argv[1], "cryptmgr2")==0) { rv=testCryptMgr2(argc, argv); } else if (strcasecmp(argv[1], "cryptmgr3")==0) { rv=testCryptMgr3(argc, argv); } else if (strcasecmp(argv[1], "pss1")==0) { rv=testPss1(argc, argv); } else if (strcasecmp(argv[1], "pss2")==0) { rv=testPss2(argc, argv); } else if (strcasecmp(argv[1], "dlg")==0) { rv=testDialog(argc, argv); } else if (strcasecmp(argv[1], "sio1")==0) { rv=testSyncIo1(argc, argv); } else if (strcasecmp(argv[1], "sio2")==0) { rv=testSyncIo2(argc, argv); } else if (strcasecmp(argv[1], "sio3")==0) { rv=testSyncIo3(argc, argv); } else if (strcasecmp(argv[1], "http1")==0) { rv=testHttp1(argc, argv); } else if (strcasecmp(argv[1], "http2")==0) { rv=testHttp2(argc, argv); } else if (strcasecmp(argv[1], "tresor1")==0) { rv=testTresor1(argc, argv); } else if (strcasecmp(argv[1], "tresor2")==0) { rv=testTresor2(argc, argv); } else if (strcasecmp(argv[1], "hashtree")==0) { rv=testHashTree(argc, argv); } else if (strcasecmp(argv[1], "date1")==0) { rv=testDate1(argc, argv); } else if (strcasecmp(argv[1], "date2")==0) { rv=testDate2(argc, argv); } else if (strcasecmp(argv[1], "sar1")==0) { rv=testSar1(argc, argv); } else if (strcasecmp(argv[1], "sar2")==0) { rv=testSar2(argc, argv); } else if (strcasecmp(argv[1], "sar3")==0) { rv=testSar3(argc, argv); } else if (strcasecmp(argv[1], "sar4")==0) { rv=testSar4(argc, argv); } else if (strcasecmp(argv[1], "sl")==0) { rv=testStringListFromString(argc, argv); } else if (strcasecmp(argv[1], "pw1")==0) { rv=testPasswordStore1(argc, argv); } else if (strcasecmp(argv[1], "pw2")==0) { rv=testPasswordStore2(argc, argv); } else if (strcasecmp(argv[1], "pw3")==0) { rv=testPasswordStore3(argc, argv); } else if (strcasecmp(argv[1], "pw4")==0) { rv=testPasswordStore4(argc, argv); } else if (strcasecmp(argv[1], "csv")==0) { rv=testCSV(argc, argv); } else if (strcasecmp(argv[1], "params1")==0) { rv=testParams1(argc, argv); } else if (strcasecmp(argv[1], "params2")==0) { rv=testParams2(argc, argv); } else if (strcasecmp(argv[1], "params3")==0) { rv=testParams3(argc, argv); } #ifdef TEST_GPARSER else if (strcasecmp(argv[1], "parser1")==0) { rv=testParser1(argc, argv); } else if (strcasecmp(argv[1], "parser2")==0) { rv=testParser2(argc, argv); } else if (strcasecmp(argv[1], "parser3")==0) { rv=testParser3(argc, argv); } else if (strcasecmp(argv[1], "parser4")==0) { rv=testParser4(argc, argv); } #endif else { fprintf(stderr, "Unknown command \"%s\"\n", argv[1]); GWEN_Fini(); return 1; } GWEN_Fini(); return rv; } gwenhywfar-4.15.2beta/test/testdialog.xml0000644000175000017500000000133412364015347015407 00000000000000 gwenhywfar-4.15.2beta/gwenhywfar-config.in.in0000644000175000017500000000475412364015347016141 00000000000000# $Id$ # Author of this file: Martin Preuss prefix=@prefix@ exec_prefix=@exec_prefix@ includedir=@includedir@ bindir=@bindir@ libdir=@libdir@ result="" for d in $*; do case $d in --includes) result="$result -I@gwenhywfar_headerdir@" ;; --libraries) result="$result @gwenhywfar_ldflags@ @gwenhywfar_libs@" ;; --bindir) result="$result @gwenhywfar_bindir@" ;; --headers) result="$result @gwenhywfar_headerdir@/gwenhywfar" ;; --plugins) result="$result @gwenhywfar_plugindir@" ;; --vmajor) result="$result @GWENHYWFAR_VERSION_MAJOR@" ;; --vminor) result="$result @GWENHYWFAR_VERSION_MINOR@" ;; --vpatchlevel) result="$result @GWENHYWFAR_VERSION_PATCHLEVEL@" ;; --vbuild) result="$result @GWENHYWFAR_VERSION_BUILD@" ;; --vtag) result="$result @GWENHYWFAR_VERSION_TAG@" ;; --vstring) result="$result @GWENHYWFAR_VERSION_MAJOR@.@GWENHYWFAR_VERSION_MINOR@.@GWENHYWFAR_VERSION_PATCHLEVEL@" ;; --has-crypt) # Keep this argument in order not to completely break # the old gwenhywfar.m4 macro. result="This argument is obsolete. See $0 --help for current arguments." ;; --has-ui) # Keep this argument in order not to completely break # the old gwenhywfar.m4 macro. result="This argument is obsolete. See $0 --help for current arguments." ;; --libraries++) # Keep this argument in order not to completely break # the old gwenhywfar.m4 macro. result="This argument is obsolete. See $0 --help for current arguments." ;; --libraries-ui) # Keep this argument in order not to completely break # the old gwenhywfar.m4 macro. result="This argument is obsolete. See $0 --help for current arguments." ;; *) echo "Usage:" echo "$0 --includes gives you the include flags" echo "$0 --libraries gives you the library flags" echo "$0 --bindir returns the folder for binary tools" echo "$0 --headers gives you the location of the header files" echo "$0 --vmajor gives the major version of LibGwenhywfar" echo "$0 --vminor gives the minor version of LibGwenhywfar" echo "$0 --vpatchlevel gives the patchlevel of LibGwenhywfar" echo "$0 --vbuild gives the build number of LibGwenhywfar" echo "$0 --vtag gives the tag of LibGwenhywfar (cvs, beta or stable)" echo "$0 --vstring returns a version string" exit 1 ;; esac done echo $result gwenhywfar-4.15.2beta/Makefile.in0000644000175000017500000013651712634022411013616 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @IF_MAKE_I18N_FILES_TRUE@am__append_1 = $(I18NCATALOGS) subdir = . DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/configure $(am__configure_deps) \ $(srcdir)/config.h.in $(srcdir)/Doxyfile.in \ $(srcdir)/gwenhywfar-config.in.in $(srcdir)/gwenhywfar.pc.in \ $(srcdir)/gwenhywfar-config.cmake.in \ $(srcdir)/gwenhywfar-config-version.cmake.in \ $(srcdir)/gwenhywfar.spec.in $(srcdir)/gwenhywfar.iss.in \ $(dist_M4_DATA) AUTHORS COPYING ChangeLog INSTALL NEWS README \ TODO compile config.guess config.rpath config.sub depcomp \ install-sh missing ltmain.sh ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = Doxyfile gwenhywfar-config.in gwenhywfar.pc \ gwenhywfar-config.cmake gwenhywfar-config-version.cmake \ gwenhywfar.spec gwenhywfar.iss CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(cmakeconfigdir)" \ "$(DESTDIR)$(M4dir)" "$(DESTDIR)$(pkgconfigdir)" SCRIPTS = $(bin_SCRIPTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(cmakeconfig_DATA) $(dist_M4_DATA) $(pkgconfig_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ SUBDIRS = admin data m4 src plugins tools gui test po doc checks DIST_SUBDIRS = admin data m4 src plugins tools gui test doc po checks AUTOMAKE_OPTIONS = foreign EXTRA_DIST = config.rpath \ ChangeLog \ README.W32 \ README.DARWIN \ README.SOLARIS \ RELEASES \ gwenhywfar.spec \ Makefile.cvs \ i18nsources bin_SCRIPTS = gwenhywfar-config M4dir = $(datadir)/aclocal dist_M4_DATA = gwenhywfar.m4 ACLOCAL_AMFLAGS = -I m4 BUILT_SOURCES = $(gwenhywfar_symlinkdir)/gwenhywfar/version.h $(gwenhywfar_symlinkdir)/gwenhywfar/types.h $(gwenhywfar_symlinkdir)/gwenhywfar/system.h pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = gwenhywfar.pc cmakeconfigdir = $(libdir)/cmake/gwenhywfar-@GWENHYWFAR_VERSION_MAJOR@.@GWENHYWFAR_VERSION_MINOR@ cmakeconfig_DATA = gwenhywfar-config.cmake gwenhywfar-config-version.cmake CLEANFILES = gwenhywfar-config $(PACKAGE).tag listdoc.h \ $(am__append_1) DISTCLEANFILES = gwenhywfar-config.in # Rule for using the Inno Setup compiler. The path to iscc.exe is # set manually here for now and can be overridden if you set an # env variable with the same name. ISCC = "C:\Program Files\Inno Setup 5\iscc.exe" wintmpdir = distribution # We directly read that file list. For old make programs, you would # set this to an empty variable, because they are only needed by the # developers and release technicians. @IF_MAKE_I18N_FILES_TRUE@I18NFILES = $(shell cat $(srcdir)/i18nsources) @IF_MAKE_I18N_FILES_TRUE@DLGFILES = $(shell cat $(srcdir)/dlgsources) @IF_MAKE_I18N_FILES_TRUE@PDFILES = $(shell cat $(srcdir)/pdsources) # Could also be solved this way: Read the I18NFILES variable from file #include $(srcdir)/i18nsources # (Needs the following build rule:) #sources: # rm -f $(srcdir)/i18nsources # make -C $(top_srcdir)/src sources # mv $(srcdir)/i18nsources $(srcdir)/i18nsources.tmp # echo "I18NFILES = \\" > $(srcdir)/i18nsources # $(SED) 's!\(^.*$$\)!$$(top_srcdir)/\1 \\!' \ # $(srcdir)/i18nsources.tmp >> $(srcdir)/i18nsources # echo '$$(top_srcdir)/config.h' >> $(srcdir)/i18nsources # rm -f $(srcdir)/i18nsources.tmp # make Makefile # The list of available languages (makes file name transformations much easier) @IF_MAKE_I18N_FILES_TRUE@ALL_LINGUAS = $(basename $(notdir $(shell ls $(srcdir)/po/*.po))) # For old make programs, the locales would directly be written here: #ALL_LINGUAS = de # List of po files. Only necessary in the dependency of the catalogs # rule. For old make programs, you would simpy set this to an empty # variable. @IF_MAKE_I18N_FILES_TRUE@I18NLINGUAS = $(foreach lang,$(ALL_LINGUAS),$(srcdir)/po/$(lang).po) # List of mo files. Only necessary for cleanup. For old make programs, # you would simply set this to an empty variable. @IF_MAKE_I18N_FILES_TRUE@I18NCATALOGS = $(foreach lang,$(ALL_LINGUAS),$(top_builddir)/po/$(lang).mo) all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 Doxyfile: $(top_builddir)/config.status $(srcdir)/Doxyfile.in cd $(top_builddir) && $(SHELL) ./config.status $@ gwenhywfar-config.in: $(top_builddir)/config.status $(srcdir)/gwenhywfar-config.in.in cd $(top_builddir) && $(SHELL) ./config.status $@ gwenhywfar.pc: $(top_builddir)/config.status $(srcdir)/gwenhywfar.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ gwenhywfar-config.cmake: $(top_builddir)/config.status $(srcdir)/gwenhywfar-config.cmake.in cd $(top_builddir) && $(SHELL) ./config.status $@ gwenhywfar-config-version.cmake: $(top_builddir)/config.status $(srcdir)/gwenhywfar-config-version.cmake.in cd $(top_builddir) && $(SHELL) ./config.status $@ gwenhywfar.spec: $(top_builddir)/config.status $(srcdir)/gwenhywfar.spec.in cd $(top_builddir) && $(SHELL) ./config.status $@ gwenhywfar.iss: $(top_builddir)/config.status $(srcdir)/gwenhywfar.iss.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt install-cmakeconfigDATA: $(cmakeconfig_DATA) @$(NORMAL_INSTALL) @list='$(cmakeconfig_DATA)'; test -n "$(cmakeconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(cmakeconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(cmakeconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(cmakeconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(cmakeconfigdir)" || exit $$?; \ done uninstall-cmakeconfigDATA: @$(NORMAL_UNINSTALL) @list='$(cmakeconfig_DATA)'; test -n "$(cmakeconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(cmakeconfigdir)'; $(am__uninstall_files_from_dir) install-dist_M4DATA: $(dist_M4_DATA) @$(NORMAL_INSTALL) @list='$(dist_M4_DATA)'; test -n "$(M4dir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(M4dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(M4dir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(M4dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(M4dir)" || exit $$?; \ done uninstall-dist_M4DATA: @$(NORMAL_UNINSTALL) @list='$(dist_M4_DATA)'; test -n "$(M4dir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(M4dir)'; $(am__uninstall_files_from_dir) install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(SCRIPTS) $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(cmakeconfigdir)" "$(DESTDIR)$(M4dir)" "$(DESTDIR)$(pkgconfigdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) @IF_MAKE_I18N_FILES_FALSE@uninstall-local: @IF_MAKE_I18N_FILES_FALSE@install-data-local: clean: clean-recursive clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr \ distclean-libtool distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-cmakeconfigDATA install-data-local \ install-dist_M4DATA install-pkgconfigDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binSCRIPTS install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binSCRIPTS uninstall-cmakeconfigDATA \ uninstall-dist_M4DATA uninstall-local uninstall-pkgconfigDATA .MAKE: $(am__recursive_targets) all check install install-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool clean-local cscope cscopelist-am ctags ctags-am \ dist dist-all dist-bzip2 dist-gzip dist-hook dist-lzip \ dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ distclean-generic distclean-hdr distclean-libtool \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-binSCRIPTS install-cmakeconfigDATA install-data \ install-data-am install-data-local install-dist_M4DATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-pkgconfigDATA \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binSCRIPTS uninstall-cmakeconfigDATA \ uninstall-dist_M4DATA uninstall-local uninstall-pkgconfigDATA $(gwenhywfar_symlinkdir)/gwenhywfar/version.h: $(top_builddir)/src/version.h make -C ` dirname $< ` ` basename $< ` ( cd $(gwenhywfar_symlinkdir)/gwenhywfar && $(LN_S) -f ../../$< ` basename $@ ` ) $(gwenhywfar_symlinkdir)/gwenhywfar/types.h: $(top_builddir)/src/types.h make -C ` dirname $< ` ` basename $< ` ( cd $(gwenhywfar_symlinkdir)/gwenhywfar && $(LN_S) -f ../../$< ` basename $@ ` ) $(gwenhywfar_symlinkdir)/gwenhywfar/system.h: $(top_builddir)/src/os/$(OS_TYPE)/system.h make -C ` dirname $< ` ` basename $< ` ( cd $(gwenhywfar_symlinkdir)/gwenhywfar && $(LN_S) -f ../../$< ` basename $@ ` ) gwenhywfar-config: gwenhywfar-config.in echo "#! /bin/sh" >gwenhywfar-config && \ echo 'dir="@prefix@"' >>gwenhywfar-config && \ cat gwenhywfar-config.in >>gwenhywfar-config && \ chmod a+x gwenhywfar-config clean-local: clean-local-check .PHONY: clean-local clean-local-check: rm -rf apidoc gwenhywfar4 listdoc.h: $(top_builddir)/admin/mklistdoc admin/mklistdoc -v -I $(top_srcdir)/src/base `find "$(top_builddir)/gwenhywfar4/gwenhywfar" -name "*.h" | LC_ALL=C sort` >listdoc.h $(top_builddir)/admin/mklistdoc: $(MAKE) -C "$(top_builddir)/admin" mklistdoc srcdoc: Doxyfile listdoc.h doxygen $(PACKAGE).tag: Doxyfile listdoc.h doxygen install-srcdoc: $(PACKAGE).tag test -d "$(DESTDIR)@docpath@/$(PACKAGE)" || \ mkdir -p "$(DESTDIR)@docpath@/$(PACKAGE)" for f in apidoc/*; do \ cp $$f "$(DESTDIR)@docpath@/$(PACKAGE)/"; \ done cp "$(PACKAGE).tag" "$(DESTDIR)@docpath@/" if test -x "$(DESTDIR)@docpath@/$(PACKAGE)/installdox"; then \ cd "$(DESTDIR)@docpath@/$(PACKAGE)" && \ ID_OPT="-q" ; \ for ff in ${DOXYGEN_TAGFILES}; do \ ID_OPT="$$ID_OPT -l `basename $$ff`@../`basename $$ff | $(SED) -e s/.tag//`";\ done ;\ ( cd "$(DESTDIR)@docpath@/$(PACKAGE)" && \ ./installdox -q $$ID_OPT \ ); \ fi rpm: $(PACKAGE).spec dist rpmbuild="rpm" && \ if [ `rpm --version | awk '{ print $$3 }'` > /dev/null ]; then rpmbuild="rpmbuild"; fi && \ $$rpmbuild -ta $(PACKAGE)-$(VERSION).tar.gz setup: gwenhywfar.iss mkdir -p $(wintmpdir) make prefix="`pwd`/$(wintmpdir)/usr" \ WIN_PATH_WINDOWS_MINGW="`pwd`/$(wintmpdir)/usr/windows" \ install \ && $(ISCC) gwenhywfar.iss \ && rm -rf $(wintmpdir) # Rule for only building the source rpm srpm: $(PACKAGE).spec dist rpmbuild="rpm" && \ if [ `rpm --version | awk '{ print $$3 }'` > /dev/null ]; then rpmbuild="rpmbuild"; fi && \ $$rpmbuild --nodeps -ts $(PACKAGE)-$(VERSION).tar.gz # Current build rule: @IF_MAKE_I18N_FILES_TRUE@sources: @IF_MAKE_I18N_FILES_TRUE@ rm -f $(srcdir)/i18nsources $(srcdir)/dlgsources @IF_MAKE_I18N_FILES_TRUE@ for d in $(SUBDIRS); do \ @IF_MAKE_I18N_FILES_TRUE@ $(MAKE) -C $$d sources; \ @IF_MAKE_I18N_FILES_TRUE@ done @IF_MAKE_I18N_FILES_TRUE@static-sources: @IF_MAKE_I18N_FILES_TRUE@ rm -f $(srcdir)/i18nsources $(srcdir)/dlgsources $(srcdir)/pdsources @IF_MAKE_I18N_FILES_TRUE@ for d in src plugins; do \ @IF_MAKE_I18N_FILES_TRUE@ $(MAKE) -C $$d sources; \ @IF_MAKE_I18N_FILES_TRUE@ done @IF_MAKE_I18N_FILES_TRUE@$(srcdir)/i18nsources $(srcdir)/dlgsources $(srcdir)/pdsources: @IF_MAKE_I18N_FILES_TRUE@ $(MAKE) sources @IF_MAKE_I18N_FILES_TRUE@po/$(PACKAGE).pot: i18nsources dlgsources pdsources $(I18NFILES) @IF_MAKE_I18N_FILES_TRUE@ rm -f po/tmp* @IF_MAKE_I18N_FILES_TRUE@ if test -n "$(I18NFILES)"; then \ @IF_MAKE_I18N_FILES_TRUE@ $(XGETTEXT) -C -c -ki18n -ktr2i18n -kI18N -kI18S\ @IF_MAKE_I18N_FILES_TRUE@ -kI18N_NOOP -ktranslate -kaliasLocale \ @IF_MAKE_I18N_FILES_TRUE@ -ktr -ktrUtf8 \ @IF_MAKE_I18N_FILES_TRUE@ '--msgid-bugs-address=aqbanking-user@lists.aqbanking.de' \ @IF_MAKE_I18N_FILES_TRUE@ -o po/tmppot \ @IF_MAKE_I18N_FILES_TRUE@ $(I18NFILES) ; \ @IF_MAKE_I18N_FILES_TRUE@ fi @IF_MAKE_I18N_FILES_TRUE@ for i in $(DLGFILES); do \ @IF_MAKE_I18N_FILES_TRUE@ po4a-gettextize -f xml -m $$i -p po/tmppot1 -o attributes=text && \ @IF_MAKE_I18N_FILES_TRUE@ msghack -o po/tmppot2 --append po/tmppot po/tmppot1 && \ @IF_MAKE_I18N_FILES_TRUE@ mv po/tmppot2 po/tmppot; \ @IF_MAKE_I18N_FILES_TRUE@ done @IF_MAKE_I18N_FILES_TRUE@ for i in $(PDFILES); do \ @IF_MAKE_I18N_FILES_TRUE@ po4a-gettextize -f xml -m $$i -p po/tmppot1 -o wrap \ @IF_MAKE_I18N_FILES_TRUE@ -o translated=" " \ @IF_MAKE_I18N_FILES_TRUE@ -o untranslated=" " \ @IF_MAKE_I18N_FILES_TRUE@ && \ @IF_MAKE_I18N_FILES_TRUE@ msghack -o po/tmppot2 --append po/tmppot po/tmppot1 && \ @IF_MAKE_I18N_FILES_TRUE@ mv po/tmppot2 po/tmppot; \ @IF_MAKE_I18N_FILES_TRUE@ done @IF_MAKE_I18N_FILES_TRUE@ mv po/tmppot po/$(PACKAGE).pot @IF_MAKE_I18N_FILES_TRUE@ rm -f po/tmppot1 # This rule is called automatically at install time. However, it is # necessary only for the translators, so maybe it shouldn't be called # at install time. @IF_MAKE_I18N_FILES_TRUE@merge: po/$(PACKAGE).pot @IF_MAKE_I18N_FILES_TRUE@ @catalogs=$(I18NLINGUAS); \ @IF_MAKE_I18N_FILES_TRUE@ for cat in $$catalogs; do \ @IF_MAKE_I18N_FILES_TRUE@ echo msgmerge -o $$cat.new $$cat ./po/$(PACKAGE).pot ; \ @IF_MAKE_I18N_FILES_TRUE@ msgmerge -o $$cat.new $$cat ./po/$(PACKAGE).pot ; \ @IF_MAKE_I18N_FILES_TRUE@ if test -s $$cat.new; then \ @IF_MAKE_I18N_FILES_TRUE@ grep -v "\"POT-Creation" $$cat.new > $$cat.new.2 ; \ @IF_MAKE_I18N_FILES_TRUE@ grep -v "\"POT-Creation" $$cat >> $$cat.new.1; \ @IF_MAKE_I18N_FILES_TRUE@ if diff $$cat.new.1 $$cat.new.2; then \ @IF_MAKE_I18N_FILES_TRUE@ echo " $$cat unchanged; leaving existing po file untouched."; \ @IF_MAKE_I18N_FILES_TRUE@ rm $$cat.new; \ @IF_MAKE_I18N_FILES_TRUE@ else \ @IF_MAKE_I18N_FILES_TRUE@ mv $$cat.new $$cat ; \ @IF_MAKE_I18N_FILES_TRUE@ fi; \ @IF_MAKE_I18N_FILES_TRUE@ rm -f $$cat.new.1 $$cat.new.2 ;\ @IF_MAKE_I18N_FILES_TRUE@ fi ;\ @IF_MAKE_I18N_FILES_TRUE@ done @IF_MAKE_I18N_FILES_TRUE@catalogs: $(I18NLINGUAS) @IF_MAKE_I18N_FILES_TRUE@ @for i in $(ALL_LINGUAS); do \ @IF_MAKE_I18N_FILES_TRUE@ filelingua=$(srcdir)/po/$$i.po; \ @IF_MAKE_I18N_FILES_TRUE@ filecat=$(top_builddir)/po/$$i.mo; \ @IF_MAKE_I18N_FILES_TRUE@ echo "Creating translation catalogs for language \"$$i\""; \ @IF_MAKE_I18N_FILES_TRUE@ echo $(MSGFMT) -o $${filecat} $${filelingua} ; \ @IF_MAKE_I18N_FILES_TRUE@ $(MSGFMT) -o $${filecat} $${filelingua} || touch $${filelingua}; \ @IF_MAKE_I18N_FILES_TRUE@ done @IF_MAKE_I18N_FILES_TRUE@install-mo-catalogs: catalogs @IF_MAKE_I18N_FILES_TRUE@ @for i in $(ALL_LINGUAS); do \ @IF_MAKE_I18N_FILES_TRUE@ filecat=$(top_builddir)/po/$$i.mo; \ @IF_MAKE_I18N_FILES_TRUE@ echo "Installing translation catalog for language \"$$i\""; \ @IF_MAKE_I18N_FILES_TRUE@ $(mkinstalldirs) "$(DESTDIR)$(localedir)/$$i/LC_MESSAGES"; \ @IF_MAKE_I18N_FILES_TRUE@ echo $(INSTALL_DATA) $${filecat} $(DESTDIR)$(localedir)/$$i/LC_MESSAGES/$(PACKAGE).mo; \ @IF_MAKE_I18N_FILES_TRUE@ $(INSTALL_DATA) $${filecat} $(DESTDIR)$(localedir)/$$i/LC_MESSAGES/$(PACKAGE).mo; \ @IF_MAKE_I18N_FILES_TRUE@ done @IF_MAKE_I18N_FILES_TRUE@uninstall-mo-catalogs: @IF_MAKE_I18N_FILES_TRUE@ @$(NORMAL_UNINSTALL) @IF_MAKE_I18N_FILES_TRUE@ @for i in $(ALL_LINGUAS); do \ @IF_MAKE_I18N_FILES_TRUE@ echo " rm -f '$(DESTDIR)$(localedir)/$$i/LC_MESSAGES/$(PACKAGE).mo'"; \ @IF_MAKE_I18N_FILES_TRUE@ rm -f "$(DESTDIR)$(localedir)/$$i/LC_MESSAGES/$(PACKAGE).mo"; \ @IF_MAKE_I18N_FILES_TRUE@ done @IF_MAKE_I18N_FILES_TRUE@install-data-local: install-mo-catalogs @IF_MAKE_I18N_FILES_TRUE@uninstall-local: uninstall-mo-catalogs cppcheck: for f in `find . -name \*.c -o -name \*.cpp`; do cppcheck $$f; done ChangeLog: git log --pretty="format:------------------------------------------------------------------%n%ai %an%n%s%n%b" -n 100 >ChangeLog dist-hook: rm -f ChangeLog 2>/dev/null $(MAKE) ChangeLog # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/gwenhywfar.spec.in0000644000175000017500000000422312364015347015211 00000000000000# norootforbuild # neededforbuild gettext gettext-devel gcc openssl-devel openssl %define name @PACKAGE@ %define version @VERSION@ %define rpm_cxxflags \"-O2 -march=i486 -mcpu=i586\" %define rpm_cflags \"-O2 -march=i486 -mcpu=i586\" %define dist @aq_distrib_name@ %define disttag @aq_distrib_tag@ %define distver @aq_distrib_version@ # Note: There is not yet a special symbol for the rpm release # version. We set it to one here. %define release 1.%{disttag}%{distver} Summary: A multi-platform helper library for other libraries Name: %{name} Version: %{version} Release: %{release} Source: http://download.sourceforge.net/gwenhywfar/%{name}-%{version}.tar.gz Group: System Environment/Libraries License: LGPL Packager: Martin Preuss URL: http://sourceforge.net/projects/gwenhywfar BuildRoot: %{_tmppath}/%{name}-%{version}-root BuildRequires: openssl-devel gettext Prereq: /sbin/ldconfig %description This is Gwenhywfar, a multi-platform helper library for networking and security applications and libraries. It is heavily used by libchipcard www.libchipcard.de and AqBanking/AqHBCI, the German online banking libraries. %package devel Summary: Gwenhywfar development kit Group: Development/Libraries Requires: %{name} = %{version}-%{release} %description devel This package contains gwenhywfar-config and header files for writing and compiling programs using Gwenhywfar. %prep %setup -q %build %configure --disable-static --with-openssl-libs=%{_libdir} make %install [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT make DESTDIR=$RPM_BUILD_ROOT install %clean [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT %post /sbin/ldconfig %postun /sbin/ldconfig %files %defattr(-,root,root) %doc AUTHORS README COPYING ChangeLog %{_libdir}/*.so.* %{_libdir}/%{name} %{_datadir}/locale/*/LC_MESSAGES/gwenhywfar.mo %{_bindir}/gct-tool %{_datadir}/gwenhywfar/*.crt %files devel %defattr(-,root,root) %{_bindir}/gwenhywfar-config %{_bindir}/xmlmerge %{_bindir}/mklistdoc %{_bindir}/typemaker %{_includedir}/gwenhywfar3 %{_libdir}/*.so %{_libdir}/*.la #%{_libdir}/*.a %{_datadir}/aclocal/gwenhywfar.m4 %{_libdir}/pkgconfig/gwenhywfar.pc %changelog gwenhywfar-4.15.2beta/config.sub0000755000175000017500000010535412201675101013527 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2013 Free Software Foundation, Inc. timestamp='2013-08-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches with a ChangeLog entry to config-patches@gnu.org. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 \ | or1k | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or1k-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gwenhywfar-4.15.2beta/ltmain.sh0000644000175000017500000105204412276417211013372 00000000000000 # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1.7ubuntu1 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION="2.4.2 Debian-2.4.2-1.7ubuntu1" TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append newlib_search_path " $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; *) func_fatal_configuration "$modename: unknown library version type \`$version_type'" ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 gwenhywfar-4.15.2beta/test-driver0000755000175000017500000001027712261335263013751 00000000000000#! /bin/sh # test-driver - basic testsuite driver script. scriptversion=2013-07-13.22; # UTC # Copyright (C) 2011-2013 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u usage_error () { echo "$0: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <$log_file 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then estatus=1 fi case $estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac # Report outcome to console. echo "${col}${res}${std}: $test_name" # Register the test result, and other relevant metadata. echo ":test-result: $res" > $trs_file echo ":global-test-result: $res" >> $trs_file echo ":recheck: $recheck" >> $trs_file echo ":copy-in-global-log: $gcopy" >> $trs_file # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gwenhywfar-4.15.2beta/aclocal.m40000644000175000017500000015615312634022410013406 00000000000000# generated automatically by aclocal 1.14.1 -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # gpg-error.m4 - autoconf macro to detect libgpg-error. # Copyright (C) 2002, 2003, 2004, 2011 g10 Code GmbH # # This file is free software; as a special exception the author gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # This file is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. dnl AM_PATH_GPG_ERROR([MINIMUM-VERSION, dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]]) dnl Test for libgpg-error and define GPG_ERROR_CFLAGS and GPG_ERROR_LIBS dnl AC_DEFUN([AM_PATH_GPG_ERROR], [ AC_REQUIRE([AC_CANONICAL_HOST]) gpg_error_config_prefix="" dnl --with-libgpg-error-prefix=PFX is the preferred name for this option, dnl since that is consistent with how our three siblings use the directory/ dnl package name in --with-$dir_name-prefix=PFX. AC_ARG_WITH(libgpg-error-prefix, AC_HELP_STRING([--with-libgpg-error-prefix=PFX], [prefix where GPG Error is installed (optional)]), [gpg_error_config_prefix="$withval"]) dnl Accept --with-gpg-error-prefix and make it work the same as dnl --with-libgpg-error-prefix above, for backwards compatibility, dnl but do not document this old, inconsistently-named option. AC_ARG_WITH(gpg-error-prefix,, [gpg_error_config_prefix="$withval"]) if test x$gpg_error_config_prefix != x ; then if test x${GPG_ERROR_CONFIG+set} != xset ; then GPG_ERROR_CONFIG=$gpg_error_config_prefix/bin/gpg-error-config fi fi AC_PATH_TOOL(GPG_ERROR_CONFIG, gpg-error-config, no) min_gpg_error_version=ifelse([$1], ,0.0,$1) AC_MSG_CHECKING(for GPG Error - version >= $min_gpg_error_version) ok=no if test "$GPG_ERROR_CONFIG" != "no" \ && test -f "$GPG_ERROR_CONFIG" ; then req_major=`echo $min_gpg_error_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)/\1/'` req_minor=`echo $min_gpg_error_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)/\2/'` gpg_error_config_version=`$GPG_ERROR_CONFIG $gpg_error_config_args --version` major=`echo $gpg_error_config_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'` minor=`echo $gpg_error_config_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'` if test "$major" -gt "$req_major"; then ok=yes else if test "$major" -eq "$req_major"; then if test "$minor" -ge "$req_minor"; then ok=yes fi fi fi fi if test $ok = yes; then GPG_ERROR_CFLAGS=`$GPG_ERROR_CONFIG $gpg_error_config_args --cflags` GPG_ERROR_LIBS=`$GPG_ERROR_CONFIG $gpg_error_config_args --libs` AC_MSG_RESULT([yes ($gpg_error_config_version)]) ifelse([$2], , :, [$2]) gpg_error_config_host=`$GPG_ERROR_CONFIG $gpg_error_config_args --host 2>/dev/null || echo none` if test x"$gpg_error_config_host" != xnone ; then if test x"$gpg_error_config_host" != x"$host" ; then AC_MSG_WARN([[ *** *** The config script $GPG_ERROR_CONFIG was *** built for $gpg_error_config_host and thus may not match the *** used host $host. *** You may want to use the configure option --with-gpg-error-prefix *** to specify a matching config script. ***]]) fi fi else GPG_ERROR_CFLAGS="" GPG_ERROR_LIBS="" AC_MSG_RESULT(no) ifelse([$3], , :, [$3]) fi AC_SUBST(GPG_ERROR_CFLAGS) AC_SUBST(GPG_ERROR_LIBS) ]) dnl Autoconf macros for libgcrypt dnl Copyright (C) 2002, 2004 Free Software Foundation, Inc. dnl dnl This file is free software; as a special exception the author gives dnl unlimited permission to copy and/or distribute it, with or without dnl modifications, as long as this notice is preserved. dnl dnl This file is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY, to the extent permitted by law; without even the dnl implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. dnl AM_PATH_LIBGCRYPT([MINIMUM-VERSION, dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]]) dnl Test for libgcrypt and define LIBGCRYPT_CFLAGS and LIBGCRYPT_LIBS. dnl MINIMUN-VERSION is a string with the version number optionalliy prefixed dnl with the API version to also check the API compatibility. Example: dnl a MINIMUN-VERSION of 1:1.2.5 won't pass the test unless the installed dnl version of libgcrypt is at least 1.2.5 *and* the API number is 1. Using dnl this features allows to prevent build against newer versions of libgcrypt dnl with a changed API. dnl AC_DEFUN([AM_PATH_LIBGCRYPT], [ AC_ARG_WITH(libgcrypt-prefix, AC_HELP_STRING([--with-libgcrypt-prefix=PFX], [prefix where LIBGCRYPT is installed (optional)]), libgcrypt_config_prefix="$withval", libgcrypt_config_prefix="") if test x$libgcrypt_config_prefix != x ; then if test x${LIBGCRYPT_CONFIG+set} != xset ; then LIBGCRYPT_CONFIG=$libgcrypt_config_prefix/bin/libgcrypt-config fi fi AC_PATH_TOOL(LIBGCRYPT_CONFIG, libgcrypt-config, no) tmp=ifelse([$1], ,1:1.2.0,$1) if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then req_libgcrypt_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'` min_libgcrypt_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'` else req_libgcrypt_api=0 min_libgcrypt_version="$tmp" fi AC_MSG_CHECKING(for LIBGCRYPT - version >= $min_libgcrypt_version) ok=no if test "$LIBGCRYPT_CONFIG" != "no" ; then req_major=`echo $min_libgcrypt_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'` req_minor=`echo $min_libgcrypt_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'` req_micro=`echo $min_libgcrypt_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'` libgcrypt_config_version=`$LIBGCRYPT_CONFIG --version` major=`echo $libgcrypt_config_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'` minor=`echo $libgcrypt_config_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'` micro=`echo $libgcrypt_config_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'` if test "$major" -gt "$req_major"; then ok=yes else if test "$major" -eq "$req_major"; then if test "$minor" -gt "$req_minor"; then ok=yes else if test "$minor" -eq "$req_minor"; then if test "$micro" -ge "$req_micro"; then ok=yes fi fi fi fi fi fi if test $ok = yes; then AC_MSG_RESULT([yes ($libgcrypt_config_version)]) else AC_MSG_RESULT(no) fi if test $ok = yes; then # If we have a recent libgcrypt, we should also check that the # API is compatible if test "$req_libgcrypt_api" -gt 0 ; then tmp=`$LIBGCRYPT_CONFIG --api-version 2>/dev/null || echo 0` if test "$tmp" -gt 0 ; then AC_MSG_CHECKING([LIBGCRYPT API version]) if test "$req_libgcrypt_api" -eq "$tmp" ; then AC_MSG_RESULT([okay]) else ok=no AC_MSG_RESULT([does not match. want=$req_libgcrypt_api got=$tmp]) fi fi fi fi if test $ok = yes; then LIBGCRYPT_CFLAGS=`$LIBGCRYPT_CONFIG --cflags` LIBGCRYPT_LIBS=`$LIBGCRYPT_CONFIG --libs` ifelse([$2], , :, [$2]) if test x"$host" != x ; then libgcrypt_config_host=`$LIBGCRYPT_CONFIG --host 2>/dev/null || echo none` if test x"$libgcrypt_config_host" != xnone ; then if test x"$libgcrypt_config_host" != x"$host" ; then AC_MSG_WARN([[ *** *** The config script $LIBGCRYPT_CONFIG was *** built for $libgcrypt_config_host and thus may not match the *** used host $host. *** You may want to use the configure option --with-libgcrypt-prefix *** to specify a matching config script. ***]]) fi fi fi else LIBGCRYPT_CFLAGS="" LIBGCRYPT_LIBS="" ifelse([$3], , :, [$3]) fi AC_SUBST(LIBGCRYPT_CFLAGS) AC_SUBST(LIBGCRYPT_LIBS) ]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 1 (pkg-config-0.24) # # Copyright Š 2004 Scott James Remnant . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) # only at the first occurence in configure.ac, so if the first place # it's called might be skipped (such as if it is within an "if", you # have to call PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])# PKG_CHECK_MODULES # Copyright (C) 2002-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.14' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.14.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.14.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/acx_compile_warn.m4]) m4_include([m4/as-scrub-include.m4]) m4_include([m4/binreloc.m4]) m4_include([m4/distri.m4]) m4_include([m4/fox.m4]) m4_include([m4/iconv.m4]) m4_include([m4/lib-ld.m4]) m4_include([m4/lib-link.m4]) m4_include([m4/lib-prefix.m4]) m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) m4_include([m4/os.m4]) m4_include([m4/qt4.m4]) m4_include([m4/searchfiles.m4]) m4_include([m4/ssl.m4]) gwenhywfar-4.15.2beta/po/0000755000175000017500000000000012643267243012250 500000000000000gwenhywfar-4.15.2beta/po/Makefile.in0000644000175000017500000004062712634022414014233 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = po DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ChangeLog ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ EXTRA_DIST = de.po all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu po/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu po/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am sources: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/po/de.po0000644000175000017500000011145412364015347013122 00000000000000# translation of de.po to deutsch # Translations for Gwenhywfar. # This file is distributed under the same license as the Gwenhywfar package. # Copyright (C) 2005 Martin Preuss. # # Martin Preuss , 2004, 2005, 2007. # Martin Preuss , 2010. msgid "" msgstr "" "Project-Id-Version: gwenhywfar\n" "Report-Msgid-Bugs-To: aqbanking-user@lists.aqbanking.de\n" "POT-Creation-Date: 2013-03-03 22:12+0100\n" "PO-Revision-Date: 2013-03-09 10:39+0100\n" "Last-Translator: Christian Stimming \n" "Language-Team: Deutsch \n" "Language: de_DE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 1.0\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Poedit-Basepath: /home/martin/projekte/c/gwenhywfar/git\n" #: src/base/error.c:97 msgid "Ok" msgstr "Ok" #: src/base/error.c:99 msgid "Generic error" msgstr "Allgemeiner Fehler" #: src/base/error.c:101 msgid "Aborted" msgstr "Abgebrochen" #: src/base/error.c:103 msgid "Not available" msgstr "Nicht verfĂźgbar" #: src/base/error.c:105 msgid "Bad socket type" msgstr "Falscher Socket-Typ" #: src/base/error.c:107 msgid "Not open" msgstr "Nicht offen" #: src/base/error.c:109 msgid "Timeout" msgstr "Zeit abgelaufen" #: src/base/error.c:111 msgid "In Progress" msgstr "In Bearbeitung" #: src/base/error.c:113 msgid "Startup error" msgstr "Initialisierungsfehler" #: src/base/error.c:115 msgid "Interrupted system call" msgstr "Unterbrochener System-Aufruf" #: src/base/error.c:117 msgid "Not supported" msgstr "Nicht unterstĂźtzt" #: src/base/error.c:119 msgid "Broken pipe" msgstr "Leitung unterbrochen" #: src/base/error.c:121 msgid "Memory full" msgstr "Speicher voll" #: src/base/error.c:123 msgid "Bad address" msgstr "Fehlerhafte Adresse" #: src/base/error.c:125 msgid "Buffer overflow" msgstr "PufferĂźberlauf" #: src/base/error.c:127 msgid "Host not found" msgstr "Host nicht gefunden" #: src/base/error.c:129 msgid "No address" msgstr "Fehlende Adresse" #: src/base/error.c:131 msgid "No recovery" msgstr "Keine Wiederherstellung" #: src/base/error.c:133 msgid "Try again" msgstr "Erneut versuchen" #: src/base/error.c:135 msgid "Unknown DNS error" msgstr "Unbekannter DNS-Fehler" #: src/base/error.c:137 msgid "Bad address family" msgstr "Fehlerhafte Adress-Familie" #: src/base/error.c:139 msgid "Could not load" msgstr "Fehler beim Laden" #: src/base/error.c:141 msgid "Could not resolve a symbol" msgstr "Symbol konnte nicht aufgelĂśst werden" #: src/base/error.c:143 msgid "Not found" msgstr "Nicht gefunden" #: src/base/error.c:145 msgid "Could not read" msgstr "Fehler beim Lesen" #: src/base/error.c:147 msgid "Could not write" msgstr "Fehler beim Schreiben" #: src/base/error.c:149 msgid "Could not close" msgstr "Fehler beim Schließen" #: src/base/error.c:151 msgid "No data" msgstr "Keine Daten" #: src/base/error.c:153 msgid "Partial data" msgstr "Teildaten" #: src/base/error.c:155 msgid "EOF met" msgstr "Dateiende erreicht" #: src/base/error.c:157 msgid "Already registered" msgstr "Bereits registriert" #: src/base/error.c:159 msgid "Not registered" msgstr "Nicht registriert" #: src/base/error.c:161 msgid "Bad size" msgstr "Fehlerhafte Größe" #: src/base/error.c:163 msgid "Could not encrypt" msgstr "Fehler beim VerschlĂźsseln" #: src/base/error.c:165 msgid "Could not decrypt" msgstr "Fehler beim EntschlĂźsseln" #: src/base/error.c:167 msgid "Could not sign" msgstr "Fehler beim Signieren" #: src/base/error.c:169 msgid "Could not verify" msgstr "Fehler bei der SignaturĂźberprĂźfung" #: src/base/error.c:171 msgid "Generic SSL error" msgstr "Allgemeiner SSL Fehler" #: src/sio/syncio_socket.c:184 #, c-format msgid "Error setting up socket: %d" msgstr "Fehler beim Starten des Socket: %d" #: src/sio/syncio_socket.c:195 #, c-format msgid "Resolving hostname \"%s\" ..." msgstr "Hostname \"%s\" wird aufgelĂśst..." #: src/sio/syncio_socket.c:201 #, c-format msgid "Unknown hostname \"%s\"" msgstr "Unbekannter Hostname \"%s\"" #: src/sio/syncio_socket.c:218 #, c-format msgid "IP address is \"%s\"" msgstr "IP-Adresse ist \"%s\"" #: src/sio/syncio_socket.c:227 #, c-format msgid "Connecting to \"%s\"" msgstr "Verbindung zu \"%s\" wird aufgebaut" #: src/sio/syncio_socket.c:233 #, c-format msgid "Error connecting to \"%s\": %s" msgstr "Fehler beim Verbinden mit \"%s\": %s" #: src/sio/syncio_socket.c:247 #, c-format msgid "Connected to \"%s\"" msgstr "Verbunden mit \"%s\"" #: src/sio/syncio_tls.c:558 src/sio/syncio_tls.c:777 msgid "Signer not found" msgstr "Unterzeichner des Zertifikats wurde nicht gefunden" #: src/sio/syncio_tls.c:565 src/sio/syncio_tls.c:783 msgid "Certificate is not trusted" msgstr "Dem Zertifikat wird nicht vertraut" #: src/sio/syncio_tls.c:572 src/sio/syncio_tls.c:789 msgid "Certificate has been revoked" msgstr "Das Zertifikat wurde zurĂźckgerufen (revoked)" #: src/sio/syncio_tls.c:667 msgid "Certificate was not issued for this host" msgstr "Zertifikat ist nicht fĂźr diesen Host erstellt worden" #: src/sio/syncio_tls.c:678 msgid "No hostname to verify the sender!" msgstr "Kein Hostname vorhanden, mit dem der Absender verifiziert werden kann!" #: src/sio/syncio_tls.c:795 msgid "Certificate has expired" msgstr "Zertifikat ist nicht mehr gĂźltig" #: src/sio/syncio_tls.c:801 msgid "Certificate is not active yet" msgstr "Zertifikat ist noch nicht gĂźltig" #: src/sio/syncio_tls.c:807 msgid "Certificate owner does not match hostname" msgstr "Zertifikat-Besitzer passt nicht zum Hostnamen" #: src/sio/syncio_tls.c:813 msgid "Certificate contains invalid information" msgstr "Zertifikat enthält ungĂźltige Informationen" #: src/sio/syncio_tls.c:819 msgid "A system error occurred while checking the certificate" msgstr "Es gab einen Fehler im Betriebssystem beim PrĂźfen des Zertifikates" #: src/sio/syncio_tls.c:825 msgid "The certificate is valid" msgstr "Zertifikat ist gĂźltig" #: src/sio/syncio_tls.c:966 msgid "" "A TLS handshake error occurred. If you are using AqBanking you should " "consider enabling the option \"force SSLv3\" in the user settings dialog." msgstr "" "Ein Fehler beim TLS-Handshake ist aufgetreten. Wenn Sie Online-Banking " "benutzen, sollten Sie einmal die Option \"SSLv3 erzwingen\" in den " "Einstellungen ausprobieren." #: src/sio/syncio_tls.c:975 #, c-format msgid "TLS Handshake Error: %d (%s)" msgstr "TLS-Handshake-Fehler: %d (%s)" #: src/sio/syncio_tls.c:1051 #, c-format msgid "Error on gnutls_bye: %d (%s)" msgstr "Fehler beim Schritt \"gnutls_bye\": %d (%s)" #: src/sio/syncio_tls.c:1098 #, c-format msgid "Error on gnutls_record_recv: %d (%s)" msgstr "Fehler beim Schritt \"gnutls_record_recv\": %d (%s)" #: src/sio/syncio_tls.c:1152 #, c-format msgid "Error on gnutls_record_send: %d (%s)" msgstr "Fehler beim Schritt \"gnutls_record_send\": %d (%s)" #: src/sio/syncio_http.c:1293 src/sio/syncio_http.c:1436 msgid "Network Operation" msgstr "Netzwerk-Verbindung" #: src/sio/syncio_http.c:1294 src/sio/syncio_http.c:1437 msgid "Receiving data" msgstr "Daten empfangen" #: src/sio/syncio_http.c:1378 src/sio/syncio_http.c:1386 #: src/sio/syncio_http.c:1521 src/sio/syncio_http.c:1529 msgid "No message received" msgstr "Keine Nachricht empfangen" #: src/sio/syncio_http.c:1402 src/sio/syncio_http.c:1545 #, c-format msgid "HTTP-Status: %d (%s)" msgstr "HTTP-Status: %d (%s)" #: src/sio/syncio_http.c:1403 msgid "- no details -" msgstr "- Keine Angaben -" #: src/sio/syncio_http.c:1409 src/sio/syncio_http.c:1552 msgid "No HTTP status code received" msgstr "Kein HTTP Status-Code empfangen" #: src/sio/syncio_http.c:1546 msgid "- no details -)" msgstr "- Keine Angaben -" #: src/sio/httpsession.c:287 src/sio/httpsession.c:626 msgid "Connecting to server..." msgstr "Mit Server verbinden..." #: src/sio/httpsession.c:303 src/sio/httpsession.c:642 msgid "Retrying to connect (non-SSLv3)" msgstr "Erneuter Verbindungsaufbau wird versucht (ohne SSLv3)" #: src/sio/httpsession.c:314 src/sio/httpsession.c:653 msgid "Retrying to connect (SSLv3)" msgstr "Erneuter Verbindungsaufbau wird versucht (mit SSLv3)" #: src/sio/httpsession.c:328 src/sio/httpsession.c:667 msgid "Could not connect to server" msgstr "Es konnte keine Verbindung zum Server aufgebaut werden." #: src/sio/httpsession.c:337 src/sio/httpsession.c:674 msgid "Connected." msgstr "Verbunden." #: src/sio/httpsession.c:366 msgid "Sending message..." msgstr "Nachricht senden..." #: src/sio/httpsession.c:374 #, c-format msgid "Could not send message (%d)" msgstr "Konnte Nachricht nicht senden (%d)" #: src/sio/httpsession.c:383 msgid "Message sent." msgstr "Nachricht gesendet." #: src/sio/httpsession.c:421 src/sio/httpsession.c:516 #, c-format msgid "HTTP: Moved permanently to %s" msgstr "HTTP: Permanent verschoben nach %s" #: src/sio/httpsession.c:424 src/sio/httpsession.c:519 #, c-format msgid "HTTP: Use proxy at %s" msgstr "HTTP: Proxy verwenden auf %s" #: src/sio/httpsession.c:427 src/sio/httpsession.c:522 #, c-format msgid "HTTP: Moved temporarily to %s" msgstr "HTTP: Zeitweise verschoben nach %s" #: src/sio/httpsession.c:430 src/sio/httpsession.c:525 #, c-format msgid "HTTP: Moved to %s" msgstr "HTTP: Verschoben nach %s" #: src/sio/httpsession.c:452 src/sio/httpsession.c:562 msgid "Receiving response..." msgstr "Antwort wird empfangen..." #: src/sio/httpsession.c:464 src/sio/httpsession.c:594 msgid "Received continuation response." msgstr "Antwort mit Fortsetzung empfangen." #: src/sio/httpsession.c:470 src/sio/httpsession.c:602 msgid "Response received." msgstr "Antwort empfangen." #: src/sio/httpsession.c:475 src/sio/httpsession.c:607 msgid "Disconnecting from server..." msgstr "Beenden der Verbindung zum Server..." #: src/sio/httpsession.c:479 src/sio/httpsession.c:611 #: src/sio/httpsession.c:679 msgid "Disconnected." msgstr "Verbindung beendet." #: src/os/gwendate.c:483 msgid "Sunday" msgstr "Sonntag" #: src/os/gwendate.c:484 msgid "Monday" msgstr "Montag" #: src/os/gwendate.c:485 msgid "Tuesday" msgstr "Dienstag" #: src/os/gwendate.c:486 msgid "Wednesday" msgstr "Mittwoch" #: src/os/gwendate.c:487 msgid "Thursday" msgstr "Donnerstag" #: src/os/gwendate.c:488 msgid "Friday" msgstr "Freitag" #: src/os/gwendate.c:489 msgid "Saturday" msgstr "Samstag" #: src/os/posix/fslock.c:249 msgid "Accquiring lock" msgstr "Starte exklusiven Zugriff" #: src/os/posix/fslock.c:336 #, c-format msgid "" "There already is a lock for \"%s\".\n" "Either that lock is valid (e.g. some other process is currently holding that " "lock) or it is a stale lock of a process which for whatever reason did not " "remove the lock before terminating.\n" "\n" "This dialog allows for forced removal of that lock.\n" "\n" "WARNING: Only remove the lock if you are certain that no other process is " "actually holding the lock!\n" "\n" "Do you want to remove the possibly stale lock?\n" "

There already is a lock for %s.

Either that lock is " "valid (e.g. some other process is currently holding that lock) or it is a " "stale lock of a process which for whatever reason did not remove the lock " "before terminating.

This dialog allows for forced removal of that lock." "

Warning: Only remove the lock if " "you are certain that no other process is actually holding the lock!

Do " "you want to remove the possibly stale lock?

" msgstr "" "Es existiert bereits ein Lock für Benutzer \"%s\".\n" "Entweder das Lock ist gültig (z.B. weil eine andere Anwendung dieses Lock " "derzeit hält) oder aber es ist übriggeblieben, weil eine Anwendung es aus " "welchen Gründen auch immer versäumt hat das Lock wieder freizugeben.\n" "\n" "WARNUNG: Sie sollten das Lock nur dann entfernen, wenn Sie sicher sind, daß " "es von keiner derzeit aktiven Anwendung gehalten wird!\n" "\n" "Wollen Sie das Lock entfernen?\n" "

Es existiert bereits ein Lock fĂźr Benutzer \"%s\".

Entweder " "das Lock ist gßltig (z.B. weil eine andere Anwendung dieses Lock derzeit " "hält) oder aber es ist ßbriggeblieben, weil eine Anwendung es aus welchen " "Grßnden auch immer versäumt hat das Lock wieder freizugeben.

Warnung: Sie sollten das Lock nur dann " "entfernen, wenn Sie sicher sind, daß es von keiner derzeit aktiven Anwendung " "gehalten wird!

Wollen Sie das Lock entfernen?

" #: src/os/posix/fslock.c:365 msgid "Possible Stale Lock" msgstr "Lock-Problem" #: src/os/posix/fslock.c:367 msgid "Wait" msgstr "Warten" #: src/os/posix/fslock.c:368 msgid "Remove Lock" msgstr "Lock entfernen" #: src/os/posix/fslock.c:369 src/crypttoken/ct.c:1016 src/crypttoken/ct.c:1087 #: src/gui/cgui.c:289 msgid "Abort" msgstr "Abbrechen" #: src/os/posix/fslock.c:375 src/crypttoken/ct.c:1020 src/crypttoken/ct.c:1091 msgid "Aborted by user." msgstr "Vom Benutzer abgebrochen." #: src/os/posix/fslock.c:384 msgid "Lock removed by user request." msgstr "Lock auf Aufforderung des Benutzers entfernt." #: src/crypt3/mdigest.c:495 #, c-format msgid "Error unpacking program (%d)" msgstr "Fehler beim Entpacken des Programms (%d)" #: src/crypt3/mdigest.c:512 #, c-format msgid "Error loading checksum file (%d)" msgstr "Fehler beim Laden der Prüfsummendatei (%d)" #: src/crypt3/mdigest.c:538 msgid "Checksum file does not contain valid lines" msgstr "Prüfsummendatei enthält keine gültigen Zeilen" #: src/crypt3/mdigest.c:546 msgid "Integrity check on folder failed" msgstr "Integritätsprüfung des Ordners ist fehlgeschlagen" #: src/crypt3/mdigest.c:556 src/crypt3/mdigest.c:563 #, c-format msgid "Folder contains %d files without checksum" msgstr "Ordner enthält %d Dateien ohne Prüfsumme" #: src/crypttoken/ct.c:819 msgid "access password" msgstr "Zugriffspasswort" #: src/crypttoken/ct.c:821 msgid "manager password" msgstr "Administrationspasswort" #: src/crypttoken/ct.c:823 msgid "password" msgstr "Passwort" #: src/crypttoken/ct.c:828 msgid "" "\n" "You must only enter numbers, not letters." msgstr "" "\n" "Es dürfen nur Zahlen eingegeben werden, keine Buchstaben." #: src/crypttoken/ct.c:833 #, c-format msgid "" "Please enter a new %s for \n" "%s\n" "The password must be at least %d characters long.%sPlease enter a new " "%s for %s. The password must be at least %d characters long.%s" msgstr "" "Bitte geben Sie ein neues %s für\n" " %s\n" "ein. Es muss mindestens %d Zeichen lang sein.%s Bitte geben Sie ein " "neues %s für%s ein. Es muss mindestens %d Zeichen lang sein.%s " #: src/crypttoken/ct.c:851 #, c-format msgid "" "Please enter the %s for \n" "%s\n" "%sPlease enter the %s for %s.%s" msgstr "" "Bitte geben Sie das %s für\n" "%s\n" "ein.%s Bitte geben Sie das %s für %s ein.%s" #: src/crypttoken/ct.c:868 src/gui/passwdstore.c:282 src/gui/passwdstore.c:415 msgid "Enter Password" msgstr "Passworteingabe" #: src/crypttoken/ct.c:958 msgid "" "Please enter your PIN into the card reader.Please enter your PIN into " "the card reader." msgstr "" "Bitte geben Sie Ihre PIN am Kartenleser ein. Bitte geben Sie Ihre PIN " "am Kartenleser ein." #: src/crypttoken/ct.c:963 msgid "Secure PIN Input" msgstr "Sichere PIN-Eingabe" #: src/crypttoken/ct.c:1000 #, c-format msgid "" "Please insert the security disc\n" "for %sPlease insert the security disc for %s" msgstr "" "Bitte legen Sie die Schlüsseldiskette\n" "für %s ins Laufwerk. Bitte legen Sie die Schlüsseldiskette\n" "für %s ins Laufwerk." #: src/crypttoken/ct.c:1006 #, c-format msgid "" "Please insert the chip card\n" "for %sPlease insert the chip card for %s" msgstr "" "Bitte legen Sie die Chipkarte\n" "für %s in den Kartenleser. Bitte legen Sie die Chipkarte\n" "für %s in den Kartenleser." #: src/crypttoken/ct.c:1014 src/crypttoken/ct.c:1085 msgid "Insert Medium" msgstr "Sicherheitsmedium einlegen" #: src/crypttoken/ct.c:1016 src/crypttoken/ct.c:1087 msgid "OK" msgstr "Ok" #: src/crypttoken/ct.c:1027 src/crypttoken/ct.c:1098 msgid "Error" msgstr "Fehler" #: src/crypttoken/ct.c:1028 src/crypttoken/ct.c:1099 msgid "An internal error occurred." msgstr "Es ist ein interner Fehler aufgetreten." #: src/crypttoken/ct.c:1029 src/crypttoken/ct.c:1100 src/gui/gui.c:712 msgid "Dismiss" msgstr "Schließen" #: src/crypttoken/ct.c:1055 #, c-format msgid "" "Please insert the correct security disc\n" "for %sPlease insert the correct security disc for %s" msgstr "" "Bitte legen Sie die korrekte Sicherheitsdiskette für %s ein. Bitte " "legen Sie die korrekte Sicherheitsdiskette für %s ein." #: src/crypttoken/ct.c:1062 #, c-format msgid "" "The wrong chipcard has been inserted.\n" "Please insert the chipcard with the number\n" " %s\n" "into the card reader.\n" "

The wrong card has been inserted.

Please insert the chipcard " "with the number%s into the card reader.

" msgstr "" "Eine falsche Chipkarte wurde eingelegt.\n" "Bitte legen Sie die Chipkarte mit der Nummer\n" " %s\n" "in den Kartenleser ein.\n" "

Eine falsche Chipkarte wurde eingelegt.

Bitte legen Sie die " "Chipkarte mit der Nummer%s in den Kartenleser ein.

" #: src/crypttoken/ct.c:1076 #, c-format msgid "" "Please insert the correct chipcard\n" "for %sPlease insert the correct chipcard for %s" msgstr "" "Bitte legen Sie die korrekte Chipkarte \n" "für %s ein. Bitte legen Sie die korrekte Chipkarte für %s ein." #: src/crypttoken/ctfile.c:773 src/crypttoken/ctfile.c:960 msgid "Public key replaced" msgstr "Öffentlicher Schlüssel ersetzt" #: src/crypttoken/ctfile.c:788 src/crypttoken/ctfile.c:977 #: src/crypttoken/ctfile.c:1123 src/crypttoken/ctfile.c:2152 msgid "Unable to write key file" msgstr "Die Schlüsseldatei konnte nicht geschrieben werden" #: src/crypttoken/ctfile.c:793 src/crypttoken/ctfile.c:982 #: src/crypttoken/ctfile.c:1128 msgid "Key file saved" msgstr "Schlüsseldatei gesichert" #: src/crypttoken/ctfile.c:1043 #, c-format msgid "Invalid key id %02x" msgstr "Ungültige Schlüssel-ID %02x" #: src/crypttoken/ctfile.c:1049 src/crypttoken/ctfile.c:2045 msgid "No key info found" msgstr "Keine Schlüsselinformationen gefunden" #: src/crypttoken/ctfile.c:1980 msgid "Can only generate local keys." msgstr "Es können nur lokale Schlüssel erzeugt werden." #: src/crypttoken/ctfile.c:1988 msgid "Only RSA keys supported." msgstr "Es werden nur RSA-Schlüssel unterstützt." #: src/crypttoken/ctfile.c:2024 msgid "Could not generate key" msgstr "Der Schlüssel konnte nicht erzeugt werden." #: src/crypttoken/ctfile.c:2029 msgid "Key generated" msgstr "Schlüssel erzeugt" #: src/crypttoken/ctfile.c:2157 msgid "Key generated and set" msgstr "Schlüssel erzeugt und gesetzt" #: src/crypttoken/ctplugin.c:303 msgid "No plugin found for this device type" msgstr "Kein Modul für den Gerätetypen gefunden" #: src/crypttoken/ctplugin.c:306 msgid "" "If you're using a Debian/Ubuntu based system please consider to install " "package " msgstr "" "Falls Sie ein Debian-/Ubuntu-basiertes System verwenden sollten Sie das " "folgende Paket installieren: " #: src/crypttoken/ctplugin.c:328 msgid "Determining plugin module..." msgstr "Plugin wird ermittelt..." #: src/crypttoken/ctplugin.c:345 #, c-format msgid "Loading plugin \"%s\"" msgstr "Plugin \"%s\" laden" #: src/crypttoken/ctplugin.c:361 #, c-format msgid "Checking plugin \"%s\"" msgstr "Plugin \"%s\" prüfen" #: src/crypttoken/ctplugin.c:378 #, c-format msgid "Plugin \"%s\" supports this token" msgstr "Plugin \"%s\" unterstützt dieses Token" #: src/crypttoken/ctplugin.c:404 #, c-format msgid "Plugin \"%s\": Function not implemented" msgstr "Plugin \"%s\": Funktion nicht implementiert" #: src/crypttoken/ctplugin.c:414 #, c-format msgid "Plugin \"%s\" does not support this token" msgstr "Plugin \"%s\" unterstützt dieses Token nicht" #: src/crypttoken/ctplugin.c:424 #, c-format msgid "Plugin \"%s\" supports this token, but the name did not match" msgstr "" "Plugin \"%s\" unterstützt dieses Token, aber der Name stimmt nicht überein" #: src/crypttoken/ctplugin.c:435 #, c-format msgid "Plugin \"%s\": Unexpected error (%d)" msgstr "Plugin \"%s\": Unerwarteter Fehler (%d)" #: src/crypttoken/ctplugin.c:446 #, c-format msgid "Could not load plugin \"%s\"" msgstr "Fehler beim Laden des Plugins \"%s\"" #: src/gui/cgui.c:284 msgid "Empty Input" msgstr "Leere Eingabe" #: src/gui/cgui.c:285 msgid "" "Your input was empty.\n" "Do you want to use the default?" msgstr "" "Ihre Eingabe war leer.\n" "Wollen Sie die voreingestellte PIN benutzen?" #: src/gui/cgui.c:287 src/gui/gui.c:1229 msgid "Yes" msgstr "Ja" #: src/gui/cgui.c:288 src/gui/gui.c:1229 msgid "No" msgstr "Nein" #: src/gui/gui.c:961 msgid "Waiting for Data" msgstr "Auf Daten warten" #: src/gui/gui.c:1089 #, c-format msgid "" "The following certificate has been received:\n" "Name : %s\n" "Organisation: %s\n" "Department : %s\n" "Country : %s\n" "City : %s\n" "State : %s\n" "Valid after : %s\n" "Valid until : %s\n" "Hash : %s\n" "Status : %s\n" "Do you wish to accept this certificate?

The following certificate " "has been received:

" "
Name%s
Organisation%s
Department%s
Country%s
City%s
State%s
Valid after" "%s
Valid until%s
Hash" "%s
Status%s%s%s

Do you " "wish to accept this certificate?

" msgstr "" "Das folgende Zertifikat wurde empfangen:\n" "Name : %s\n" "Organisation: %s\n" "Abteilung : %s\n" "Staat : %s\n" "Stadt : %s\n" "Bundesland : %s\n" "GĂźltig ab : %s\n" "GĂźltig bis : %s\n" "Hash : %s\n" "Status : %s\n" "Wollen Sie dieses Zertifikat akzeptieren?

Das folgende Zertifikat " "wurde empfangen:

" "
Name%s
Organisation%s
Abteilung%s
Staat%s
Stadt%s
Bundesland%s
Gültig ab" "%s
Gültig bis%s
Hash%s
Status%s%s%s
" "

Wollen Sie dieses Zertifikat akzeptieren?

" #. TRANSLATORS: This string is used as a template string to #. convert a given time into your local translated timeformat. The #. following characters are accepted in the template string: Y - #. digit of the year, M - digit of the month, D - digit of the day #. of month, h - digit of the hour, m - digit of the minute, s- #. digit of the second. All other characters are left unchanged. #: src/gui/gui.c:1145 src/gui/gui.c:1159 msgid "YYYY/MM/DD hh:mm:ss" msgstr "DD.MM.YYYY hh:mm:ss" #: src/gui/gui.c:1177 msgid "unknown" msgstr "unbekannt" #: src/gui/gui.c:1227 msgid "Certificate Received" msgstr "Zertifikat empfangen" #: src/gui/gui.c:1541 msgid "Operation finished, you can now close this window." msgstr "Vorgang abgeschlossen, Sie können das Fenster nun schließen." #: src/gui/gui.c:2147 msgid "Enforce PIN" msgstr "PIN erzwingen" #: src/gui/gui.c:2149 msgid "" "You entered the same PIN twice.\n" "The PIN is marked as bad, do you want\n" "to use it anyway?

You entered the same PIN twice.

The PIN is " "marked as bad, do you want to use it anyway?

" msgstr "" "Sie haben die gleiche PIN zweimal eingegeben.\n" "Die PIN ist aber als ungĂźltig markiert. Wollen Sie sie trotzdem verwenden? " "

Sie haben die gleiche PIN zweimal eingegeben.

Die PIN ist " "aber als ungĂźltig markiert. Wollen Sie sie trotzdem verwenden?

" #: src/gui/gui.c:2161 msgid "Yes, use anyway" msgstr "Ja, trotzdem verwenden" #: src/gui/gui.c:2162 msgid "Re-enter" msgstr "Neu eingeben" #: src/gui/passwdstore.c:283 src/gui/passwdstore.c:416 msgid "" "Please enter the password for the password store.\n" "Please enter the password for the password store.
" msgstr "" "Bitte geben Sie ein Password fĂźr den Passwortspeicher ein.\n" "Bitte geben Sie ein Password fĂźr den Passwortspeicher ein." #: src/gui/passwdstore.c:374 msgid "Create New Password Store" msgstr "Neuen Passwortspeicher erstellen" #: src/gui/passwdstore.c:376 msgid "" "You are about to create a new password store.\n" "Passwords you store here will be encrypted with a passphrase\n" "which you must enter now.\n" "\n" "Later you will only need to remember the passphrase for the\n" "password store, not all the individuell passwords.\n" "\n" "WARNING: Storing your passwords in the password store\n" "can be considered a security risk, especially if the passphrase protecting " "it\n" "is not strong enough!\n" "\n" "You can safely abort this step, in which case your passwords will not be " "stored.\n" "\n" "Please enter the passphrase for the password store to be created or abort.\n" "

You are about to create a new password store.

Passwords you store here will be encrypted with a passphrase which " "you must enter now.

Later you will only need to remember the " "passphrase for the password store, not all the individuell passwords." "

Warning: Storing your passwords in the " "password store can be considered a security risk, especially if the " "passphrase protecting it is not strong enough!

You can " "safely abort this step, in which case your passwords will not be stored." "


Please enter the passphrase for the password store to be created " "or abort.

" msgstr "" "Sie erstellen jetzt einen neuen Passwortspeicher.\n" "\n" "Die Passwörter, die darin gespeichert werden, müssen ihrerseits durch\n" "ein schwer zu erratendes Hauptpasswort (auch genannt Pass-Phrase)\n" "verschlüsselt werden. Dieses müssen Sie jetzt eingeben.\n" "\n" "Anschließend müssen Sie sich nur noch das Hauptpasswort für den\n" "Passwortspeicher merken, nicht mehr die einzelnen Passwörter.\n" "\n" "Vorsicht: Es ist ein Sicherheitsrisiko, wenn Sie alle Ihre Passwörter\n" "in diesem Passwortspeicher ablegen und dabei nur ein leicht zu\n" "erratendes Hauptpasswort verwenden!\n" "\n" "Sie könne in jedem Fall hier auch \"Abbrechen\" wählen. Ihre Passwörter\n" "werden dann nicht gespeichert.\n" "\n" "Bitte geben Sie jetzt das Hauptpasswort für den Passwortspeicher ein\n" "oder wählen Sie \"Abbrechen\".\n" "\n" "

Sie erstellen jetzt einen neuen Passwortspeicher.


\n" "

\n" "Die PasswĂśrter, die darin gespeichert werden, mĂźssen ihrerseits durch\n" "ein schwer zu erratendes Hauptpasswort (auch genannt Pass-Phrase)\n" "verschlĂźsselt werden. Dieses mĂźssen Sie jetzt eingeben.\n" "

\n" "Anschließend müssen Sie sich nur noch das Hauptpasswort für den\n" "Passwortspeicher merken, nicht mehr die einzelnen Passwörter.\n" "

\n" "Vorsicht: Es ist ein Sicherheitsrisiko,\n" "wenn Sie alle Ihre PasswĂśrter in diesem Passwortspeicher ablegen und\n" "dabei nur ein leicht zu erratendes Hauptpasswort verwenden!\n" "

\n" "\n" "Sie kÜnne in jedem Fall hier auch \"Abbrechen\" wählen. Ihre PasswÜrter\n" "werden dann nicht gespeichert.\n" "

\n" "\n" "Bitte geben Sie jetzt das Hauptpasswort fßr den Passwortspeicher ein oder " "wählen Sie \"Abbrechen\".\n" "

" #: plugins/ct/ohbci/ohbci.c:632 msgid "No valid PIN (tried too often), aborting." msgstr "Keine gĂźltige PIN erhalten (zu oft versucht). Abbruch." #: plugins/ct/ohbci/ohbci.c:666 msgid "Bad PIN, will try again" msgstr "Falsche PIN erhalten. Erneut versuchen" #: plugins/ct/ohbci/ohbci.c:1081 plugins/ct/ohbci/ohbci.c:1136 #: plugins/ct/ohbci/ohbci.c:2358 msgid "Local Sign Key" msgstr "Lokaler SignierschlĂźssel" #: plugins/ct/ohbci/ohbci.c:1169 plugins/ct/ohbci/ohbci.c:1215 #: plugins/ct/ohbci/ohbci.c:2374 msgid "Local Crypt Key" msgstr "Lokaler Crypto-SchlĂźssel" #: plugins/ct/ohbci/ohbci.c:1248 plugins/ct/ohbci/ohbci.c:1299 #: plugins/ct/ohbci/ohbci.c:2388 msgid "Remote Sign Key" msgstr "SignierschlĂźssel des Servers" #: plugins/ct/ohbci/ohbci.c:1335 plugins/ct/ohbci/ohbci.c:1380 #: plugins/ct/ohbci/ohbci.c:2403 msgid "Remote Crypt Key" msgstr "Crypto-SchlĂźssel des Servers" #: plugins/ct/ohbci/ohbci.c:1412 plugins/ct/ohbci/ohbci.c:1461 #: plugins/ct/ohbci/ohbci.c:2424 msgid "Local Auth Key" msgstr "Lokaler AuthentifizierungsschlĂźssel" #: plugins/ct/ohbci/ohbci.c:1494 plugins/ct/ohbci/ohbci.c:1542 #: plugins/ct/ohbci/ohbci.c:2431 msgid "Remote Auth Key" msgstr "AuthentifizierungsschlĂźssel des Servers" #: plugins/ct/ohbci/ohbci.c:1576 plugins/ct/ohbci/ohbci.c:1630 msgid "Temporary Local Sign Key" msgstr "Temporärer Lokaler SignierschlĂźssel" #: plugins/ct/ohbci/ohbci.c:2107 msgid "Updating ancient key file to new one" msgstr "Aktualisiere sehr alte SchlĂźsseldatei auf aktuelles Format" #: tools/xmlmerge/args.c:117 msgid "" "-v verbous\n" "--logfile ARG name of the logfile\n" "--logtype ARG log type\n" "--loglevel ARG log level\n" "-o ARG name of output file (stdout if omitted)\n" "--compact write a more compact file\n" msgstr "" "-v gibt mehr Logmeldungen aus\n" "--logfile ARG Name der Logdatei\n" "--logtype ARG Logtyp\n" "--loglevel ARG Loglevel\n" "-o ARG Name der Ausgabedatei (Standardausgabe, wenn nicht " "angegeben)\n" "--compact schreibe eine kompakte Datei\n" #: tools/xmlmerge/args.c:147 tools/typemaker/args.c:148 #, c-format msgid "Unknown log type \"%s\"\n" msgstr "Unbekannter Logtyp \"%s\"\n" #: tools/xmlmerge/args.c:159 tools/typemaker/args.c:160 #, c-format msgid "Unknown log level \"%s\"\n" msgstr "Unbekannter Loglevel \"%s\"\n" #: tools/xmlmerge/args.c:190 tools/typemaker/args.c:194 #, c-format msgid "Unknown option \"%s\"\n" msgstr "Unbekannte Option \"%s\"\n" #: tools/xmlmerge/args.c:200 msgid "Please specify the name of the output file." msgstr "Bitte geben Sie den Namen der Ausgabedatei an." #: tools/typemaker/args.c:116 msgid "" "-v verbous\n" "--logfile ARG name of the logfile\n" "--logtype ARG log type\n" "--loglevel ARG log level\n" "-d ARG use ARG as domain prefix macro for function declarations\n" "-o ARG name of output file (stdout if omitted)\n" "--compact write a more compact file\n" "-V | --version print version of this tool and exit\n" msgstr "" "-v gibt mehr Logmeldungen aus\n" "--logfile ARG Name der Logdatei\n" "--logtype ARG Logtyp\n" "--loglevel ARG Loglevel\n" "-d ARG ARG als Domain-Prefix aller Funktionsdeklarationen " "benutzen\n" "-o ARG Name der Ausgabedatei (Standardausgabe, wenn nicht " "angegeben)\n" "--compact schreibe eine kompakte Datei\n" "-V | --version Versionsnummer ausgeben und abbrechen\n" #: tools/typemaker2/main.c:163 tools/gcttool/main.c:198 tools/gsa/main.c:134 msgid "Usage: " msgstr "Benutzung: " #: tools/typemaker2/main.c:166 tools/gcttool/main.c:201 tools/gsa/main.c:137 msgid " [GLOBAL OPTIONS] COMMAND [LOCAL OPTIONS]\n" msgstr "[GLOBALE OPTIONEN] KOMMANDO [LOCALE OPTIONEN]\n" #: tools/typemaker2/main.c:169 tools/gcttool/main.c:204 tools/gsa/main.c:140 msgid "" "\n" "Global Options:\n" msgstr "" "\n" "Globale Optionen:\n" #: tools/typemaker2/main.c:175 tools/gcttool/main.c:210 tools/gsa/main.c:146 msgid "" "\n" "Commands:\n" "\n" msgstr "" "\n" "Kommandos:\n" "\n" #: tools/typemaker2/main.c:177 msgid "" " build:\n" " This command creates source and header files for the given file\n" "\n" msgstr "" " build:\n" " Dieser Befehl erzeugt Quelldateien fĂźr die angegebene Datei\n" "\n" #: tools/gcttool/main.c:87 msgid "" "The plugin could not be found.\n" "Please make sure that you have the following packages installed (at least on " "Debian/Ubuntu):\n" "- libchipcard-plugins-libgwenhywfar (for chipcards)\n" "- libaqbanking-plugins-libgwenhywfar\n" msgstr "" "Das Modul konnte nicht gefunden werden.\n" "Stellen Sie sicher, daß die folgenden Pakete installiert sind (zumindest auf " "Debian/Ubuntu):\n" "- libchipcard-plugins-libgwenhywfar (for chipcards)\n" "- libaqbanking-plugins-libgwenhywfar\n" #: tools/gcttool/main.c:212 msgid "" " create:\n" " This command creates a crypt token\n" "\n" msgstr "" " create:\n" " Dieser Befehl erzeugt ein CryptToken\n" "\n" #: tools/gcttool/main.c:216 msgid "" " showuser:\n" " Display user data stored on the token\n" "\n" msgstr "" " showuser:\n" " Zeige auf dem CryptToken gespeicherte Benutzer an\n" "\n" #: tools/gcttool/main.c:220 msgid "" " showkey:\n" " Display key info stored on the token\n" "\n" msgstr "" " showkey:\n" " Zeige auf dem CryptToken gespeicherte SchlĂźsselinformationen an\n" "\n" #: tools/gcttool/main.c:224 msgid "" " update:\n" " Update Crypt Token to newer version (e.g. OpenHBCI keyfiles)\n" "\n" msgstr "" " update:\n" " Aktualisiert Sicherheitsmedien (z.B. OpenHBCI SchlĂźsseldateien)\n" "\n" #: tools/gsa/main.c:130 msgid "GWEN's Simple Archiver" msgstr "GWEN's Simple Archiver - Einfache Archiverstellung" #: tools/gsa/main.c:148 msgid "" " create:\n" " This command creates an archive file\n" "\n" msgstr "" " create:\n" " Dieser Befehl erzeugt eine Archiv-Datei\n" "\n" #: tools/gsa/main.c:152 msgid "" " add:\n" " Add files and folders to an archive file\n" "\n" msgstr "" " add:\n" " Dateien und Ordner zu einer Archiv-Datei hinzufĂźgen\n" "\n" #: tools/gsa/main.c:155 msgid "" " list:\n" " List files and folders in an archive file\n" "\n" msgstr "" " list:\n" " Die Dateien und Ordner aus einer Archiv-Datei anzeigen\n" "\n" #: tools/gsa/main.c:159 msgid "" " check:\n" " Check integrity of files and folders in an archive file\n" "\n" msgstr "" " check:\n" " Die Integrität der Dateien und Ordner einer Archiv-Datei ĂźberprĂźfen\n" "\n" #. type: Attribute 'text' of: #: src/gui/dlg_input.dlg:7 #, no-wrap msgid "Input" msgstr "Eingabe" #. type: Attribute 'text' of: #: src/gui/dlg_input.dlg:10 #, no-wrap msgid "Again" msgstr "Nochmal" #. type: Attribute 'text' of: #: src/gui/dlg_input.dlg:15 #, no-wrap msgid "Store permanently" msgstr "Dauerhaft speichern" #. type: Attribute 'text' of: #: src/gui/dlg_message.dlg:12 #, no-wrap msgid "button1" msgstr "button1" #. type: Attribute 'text' of: #: src/gui/dlg_message.dlg:13 #, no-wrap msgid "button2" msgstr "button2" #. type: Attribute 'text' of: #: src/gui/dlg_message.dlg:14 #, no-wrap msgid "button3" msgstr "button3" #. type: Attribute 'text' of: #: src/gui/dlg_progress.dlg:19 #, no-wrap msgid "Close" msgstr "Schließen" #. type: Content of: #: plugins/dbio/csv/csv.xml:7 msgid "Exporter for CSV" msgstr "Exporter fĂźr CSV" #. type: Content of: #: plugins/dbio/csv/csv.xml:9 msgid "" "This plugin exports data to a CSV file according to a given configuration." msgstr "" "Dieses Plugin exportiert Daten in eine CSV-Datei (Comma Separated Valued, " "Komma-getrennte Werte) gemäß einer angegebenen Konfiguration" #. type: Content of: #: plugins/dbio/olddb/olddb.xml:7 msgid "Importer for OpenHBCI1" msgstr "Importer fĂźr OpenHBCI1" #. type: Content of: #: plugins/dbio/olddb/olddb.xml:9 msgid "This plugin imports data from an old OpenHBCI1-style file." msgstr "Dieses Modul importiert Daten aus einer alten OpenHBCI1-Art." #. type: Content of: #: plugins/dbio/xmldb/xmldb.xml:7 msgid "Importer for XML" msgstr "Importer fĂźr XML" #. type: Content of: #: plugins/dbio/xmldb/xmldb.xml:9 msgid "This plugin imports data from an XML file." msgstr "Dieses Plugin importiert Daten aus einer XML-Datei." #. type: Content of: #: plugins/ct/ohbci/ohbci.xml:6 msgid "OpenHBCI Keyfile Medium" msgstr "OpenHBCI Sicherheitsmedium SchlĂźsseldatei" #. type: Content of: #: plugins/ct/ohbci/ohbci.xml:9 msgid "" "This plugins provides support for keyfiles created with OpenHBCI1 and " "OpenHBCI2. The file is encrypted with a password using the 3DES algorithm " "and it stores the private and public RSA keys." msgstr "" "Dieses Plugin unterstĂźtzt die SchlĂźsseldateien, die mit den alten " "Bibliotheken OpenHBCI1 und OpenHBCI2 erzeugt wurden. Die Datei ist mit einem " "Passwort und dem 3DES-Algorithmus verschlĂźsselt und speichert private und " "Ăśffentliche RSA-SchlĂźssel." #. type: Content of: #: plugins/configmgr/dir/dir.xml:7 msgid "ConfigManager implementation using files" msgstr "Eine Implementierung von ConfigManager mit Dateien" #. type: Content of: #: plugins/configmgr/dir/dir.xml:9 msgid "ConfigManager implementation using files." msgstr "Eine Implementierung von ConfigManager mit Dateien." gwenhywfar-4.15.2beta/po/Makefile.am0000644000175000017500000000003412364015347014215 00000000000000 EXTRA_DIST=de.po sources: gwenhywfar-4.15.2beta/po/ChangeLog0000644000175000017500000000251412364015347013740 000000000000002004-08-20 gettextize * Makefile.in.in: New file, from gettext-0.14.1. * boldquot.sed: New file, from gettext-0.14.1. * en@boldquot.header: New file, from gettext-0.14.1. * en@quot.header: New file, from gettext-0.14.1. * insert-header.sin: New file, from gettext-0.14.1. * quot.sed: New file, from gettext-0.14.1. * remove-potcdate.sin: New file, from gettext-0.14.1. * Rules-quot: New file, from gettext-0.14.1. 2004-08-20 gettextize * Makefile.in.in: New file, from gettext-0.14.1. * boldquot.sed: New file, from gettext-0.14.1. * en@boldquot.header: New file, from gettext-0.14.1. * en@quot.header: New file, from gettext-0.14.1. * insert-header.sin: New file, from gettext-0.14.1. * quot.sed: New file, from gettext-0.14.1. * remove-potcdate.sin: New file, from gettext-0.14.1. * Rules-quot: New file, from gettext-0.14.1. 2004-08-20 gettextize * Makefile.in.in: New file, from gettext-0.14.1. * boldquot.sed: New file, from gettext-0.14.1. * en@boldquot.header: New file, from gettext-0.14.1. * en@quot.header: New file, from gettext-0.14.1. * insert-header.sin: New file, from gettext-0.14.1. * quot.sed: New file, from gettext-0.14.1. * remove-potcdate.sin: New file, from gettext-0.14.1. * Rules-quot: New file, from gettext-0.14.1. gwenhywfar-4.15.2beta/Makefile.am0000644000175000017500000002060012560445316013601 00000000000000SUBDIRS=admin data m4 src plugins tools gui test po doc checks DIST_SUBDIRS=admin data m4 src plugins tools gui test doc po checks AUTOMAKE_OPTIONS = foreign EXTRA_DIST = config.rpath \ ChangeLog \ README.W32 \ README.DARWIN \ README.SOLARIS \ RELEASES \ gwenhywfar.spec \ Makefile.cvs \ i18nsources bin_SCRIPTS = gwenhywfar-config M4dir = $(datadir)/aclocal dist_M4_DATA = gwenhywfar.m4 ACLOCAL_AMFLAGS = -I m4 $(gwenhywfar_symlinkdir)/gwenhywfar/version.h: $(top_builddir)/src/version.h make -C ` dirname $< ` ` basename $< ` ( cd $(gwenhywfar_symlinkdir)/gwenhywfar && $(LN_S) -f ../../$< ` basename $@ ` ) $(gwenhywfar_symlinkdir)/gwenhywfar/types.h: $(top_builddir)/src/types.h make -C ` dirname $< ` ` basename $< ` ( cd $(gwenhywfar_symlinkdir)/gwenhywfar && $(LN_S) -f ../../$< ` basename $@ ` ) $(gwenhywfar_symlinkdir)/gwenhywfar/system.h: $(top_builddir)/src/os/$(OS_TYPE)/system.h make -C ` dirname $< ` ` basename $< ` ( cd $(gwenhywfar_symlinkdir)/gwenhywfar && $(LN_S) -f ../../$< ` basename $@ ` ) BUILT_SOURCES = $(gwenhywfar_symlinkdir)/gwenhywfar/version.h $(gwenhywfar_symlinkdir)/gwenhywfar/types.h $(gwenhywfar_symlinkdir)/gwenhywfar/system.h gwenhywfar-config: gwenhywfar-config.in echo "#! /bin/sh" >gwenhywfar-config && \ echo 'dir="@prefix@"' >>gwenhywfar-config && \ cat gwenhywfar-config.in >>gwenhywfar-config && \ chmod a+x gwenhywfar-config pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = gwenhywfar.pc cmakeconfigdir = $(libdir)/cmake/gwenhywfar-@GWENHYWFAR_VERSION_MAJOR@.@GWENHYWFAR_VERSION_MINOR@ cmakeconfig_DATA = gwenhywfar-config.cmake gwenhywfar-config-version.cmake CLEANFILES = gwenhywfar-config $(PACKAGE).tag listdoc.h DISTCLEANFILES = gwenhywfar-config.in clean-local: clean-local-check .PHONY: clean-local clean-local-check: rm -rf apidoc gwenhywfar4 listdoc.h: $(top_builddir)/admin/mklistdoc admin/mklistdoc -v -I $(top_srcdir)/src/base `find "$(top_builddir)/gwenhywfar4/gwenhywfar" -name "*.h" | LC_ALL=C sort` >listdoc.h $(top_builddir)/admin/mklistdoc: $(MAKE) -C "$(top_builddir)/admin" mklistdoc srcdoc: Doxyfile listdoc.h doxygen $(PACKAGE).tag: Doxyfile listdoc.h doxygen install-srcdoc: $(PACKAGE).tag test -d "$(DESTDIR)@docpath@/$(PACKAGE)" || \ mkdir -p "$(DESTDIR)@docpath@/$(PACKAGE)" for f in apidoc/*; do \ cp $$f "$(DESTDIR)@docpath@/$(PACKAGE)/"; \ done cp "$(PACKAGE).tag" "$(DESTDIR)@docpath@/" if test -x "$(DESTDIR)@docpath@/$(PACKAGE)/installdox"; then \ cd "$(DESTDIR)@docpath@/$(PACKAGE)" && \ ID_OPT="-q" ; \ for ff in ${DOXYGEN_TAGFILES}; do \ ID_OPT="$$ID_OPT -l `basename $$ff`@../`basename $$ff | $(SED) -e s/.tag//`";\ done ;\ ( cd "$(DESTDIR)@docpath@/$(PACKAGE)" && \ ./installdox -q $$ID_OPT \ ); \ fi rpm: $(PACKAGE).spec dist rpmbuild="rpm" && \ if [ `rpm --version | awk '{ print $$3 }'` > /dev/null ]; then rpmbuild="rpmbuild"; fi && \ $$rpmbuild -ta $(PACKAGE)-$(VERSION).tar.gz # Rule for using the Inno Setup compiler. The path to iscc.exe is # set manually here for now and can be overridden if you set an # env variable with the same name. ISCC = "C:\Program Files\Inno Setup 5\iscc.exe" wintmpdir = distribution setup: gwenhywfar.iss mkdir -p $(wintmpdir) make prefix="`pwd`/$(wintmpdir)/usr" \ WIN_PATH_WINDOWS_MINGW="`pwd`/$(wintmpdir)/usr/windows" \ install \ && $(ISCC) gwenhywfar.iss \ && rm -rf $(wintmpdir) # Rule for only building the source rpm srpm: $(PACKAGE).spec dist rpmbuild="rpm" && \ if [ `rpm --version | awk '{ print $$3 }'` > /dev/null ]; then rpmbuild="rpmbuild"; fi && \ $$rpmbuild --nodeps -ts $(PACKAGE)-$(VERSION).tar.gz if IF_MAKE_I18N_FILES # We directly read that file list. For old make programs, you would # set this to an empty variable, because they are only needed by the # developers and release technicians. I18NFILES=$(shell cat $(srcdir)/i18nsources) DLGFILES=$(shell cat $(srcdir)/dlgsources) PDFILES=$(shell cat $(srcdir)/pdsources) # Current build rule: sources: rm -f $(srcdir)/i18nsources $(srcdir)/dlgsources for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done static-sources: rm -f $(srcdir)/i18nsources $(srcdir)/dlgsources $(srcdir)/pdsources for d in src plugins; do \ $(MAKE) -C $$d sources; \ done $(srcdir)/i18nsources $(srcdir)/dlgsources $(srcdir)/pdsources: $(MAKE) sources # Could also be solved this way: Read the I18NFILES variable from file #include $(srcdir)/i18nsources # (Needs the following build rule:) #sources: # rm -f $(srcdir)/i18nsources # make -C $(top_srcdir)/src sources # mv $(srcdir)/i18nsources $(srcdir)/i18nsources.tmp # echo "I18NFILES = \\" > $(srcdir)/i18nsources # $(SED) 's!\(^.*$$\)!$$(top_srcdir)/\1 \\!' \ # $(srcdir)/i18nsources.tmp >> $(srcdir)/i18nsources # echo '$$(top_srcdir)/config.h' >> $(srcdir)/i18nsources # rm -f $(srcdir)/i18nsources.tmp # make Makefile # The list of available languages (makes file name transformations much easier) ALL_LINGUAS = $(basename $(notdir $(shell ls $(srcdir)/po/*.po))) # For old make programs, the locales would directly be written here: #ALL_LINGUAS = de # List of po files. Only necessary in the dependency of the catalogs # rule. For old make programs, you would simpy set this to an empty # variable. I18NLINGUAS = $(foreach lang,$(ALL_LINGUAS),$(srcdir)/po/$(lang).po) # List of mo files. Only necessary for cleanup. For old make programs, # you would simply set this to an empty variable. I18NCATALOGS = $(foreach lang,$(ALL_LINGUAS),$(top_builddir)/po/$(lang).mo) po/$(PACKAGE).pot: i18nsources dlgsources pdsources $(I18NFILES) rm -f po/tmp* if test -n "$(I18NFILES)"; then \ $(XGETTEXT) -C -c -ki18n -ktr2i18n -kI18N -kI18S\ -kI18N_NOOP -ktranslate -kaliasLocale \ -ktr -ktrUtf8 \ '--msgid-bugs-address=aqbanking-user@lists.aqbanking.de' \ -o po/tmppot \ $(I18NFILES) ; \ fi for i in $(DLGFILES); do \ po4a-gettextize -f xml -m $$i -p po/tmppot1 -o attributes=text && \ msghack -o po/tmppot2 --append po/tmppot po/tmppot1 && \ mv po/tmppot2 po/tmppot; \ done for i in $(PDFILES); do \ po4a-gettextize -f xml -m $$i -p po/tmppot1 -o wrap \ -o translated=" " \ -o untranslated=" " \ && \ msghack -o po/tmppot2 --append po/tmppot po/tmppot1 && \ mv po/tmppot2 po/tmppot; \ done mv po/tmppot po/$(PACKAGE).pot rm -f po/tmppot1 # This rule is called automatically at install time. However, it is # necessary only for the translators, so maybe it shouldn't be called # at install time. merge: po/$(PACKAGE).pot @catalogs=$(I18NLINGUAS); \ for cat in $$catalogs; do \ echo msgmerge -o $$cat.new $$cat ./po/$(PACKAGE).pot ; \ msgmerge -o $$cat.new $$cat ./po/$(PACKAGE).pot ; \ if test -s $$cat.new; then \ grep -v "\"POT-Creation" $$cat.new > $$cat.new.2 ; \ grep -v "\"POT-Creation" $$cat >> $$cat.new.1; \ if diff $$cat.new.1 $$cat.new.2; then \ echo " $$cat unchanged; leaving existing po file untouched."; \ rm $$cat.new; \ else \ mv $$cat.new $$cat ; \ fi; \ rm -f $$cat.new.1 $$cat.new.2 ;\ fi ;\ done catalogs: $(I18NLINGUAS) @for i in $(ALL_LINGUAS); do \ filelingua=$(srcdir)/po/$$i.po; \ filecat=$(top_builddir)/po/$$i.mo; \ echo "Creating translation catalogs for language \"$$i\""; \ echo $(MSGFMT) -o $${filecat} $${filelingua} ; \ $(MSGFMT) -o $${filecat} $${filelingua} || touch $${filelingua}; \ done CLEANFILES += $(I18NCATALOGS) install-mo-catalogs: catalogs @for i in $(ALL_LINGUAS); do \ filecat=$(top_builddir)/po/$$i.mo; \ echo "Installing translation catalog for language \"$$i\""; \ $(mkinstalldirs) "$(DESTDIR)$(localedir)/$$i/LC_MESSAGES"; \ echo $(INSTALL_DATA) $${filecat} $(DESTDIR)$(localedir)/$$i/LC_MESSAGES/$(PACKAGE).mo; \ $(INSTALL_DATA) $${filecat} $(DESTDIR)$(localedir)/$$i/LC_MESSAGES/$(PACKAGE).mo; \ done uninstall-mo-catalogs: @$(NORMAL_UNINSTALL) @for i in $(ALL_LINGUAS); do \ echo " rm -f '$(DESTDIR)$(localedir)/$$i/LC_MESSAGES/$(PACKAGE).mo'"; \ rm -f "$(DESTDIR)$(localedir)/$$i/LC_MESSAGES/$(PACKAGE).mo"; \ done install-data-local: install-mo-catalogs uninstall-local: uninstall-mo-catalogs endif cppcheck: for f in `find . -name \*.c -o -name \*.cpp`; do cppcheck $$f; done ChangeLog: git log --pretty="format:------------------------------------------------------------------%n%ai %an%n%s%n%b" -n 100 >ChangeLog dist-hook: rm -f ChangeLog 2>/dev/null $(MAKE) ChangeLog gwenhywfar-4.15.2beta/gwenhywfar-config.cmake.in0000644000175000017500000000312112364015347016576 00000000000000 # Macros cmake's CONFIGURE_PACKAGE_CONFIG_FILE() would create macro(set_and_check _var _file) set(${_var} "${_file}") if(NOT EXISTS "${_file}") message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !") endif() endmacro() macro(check_required_components _NAME) foreach(comp ${${_NAME}_FIND_COMPONENTS}) if(NOT ${_NAME}_${comp}_FOUND) if(${_NAME}_FIND_REQUIRED_${comp}) message( WARNING "${_name} required component \"${comp}\" not found") set(${_NAME}_FOUND FALSE) endif() endif() endforeach() endmacro() set_and_check(prefix "@prefix@") set_and_check(exec_prefix "@exec_prefix@") set_and_check(includedir "@includedir@") set_and_check(GWENHYWFAR_INCLUDE_DIRS "@gwenhywfar_headerdir@") set_and_check(GWENHYWFAR_LIBRARIES "@libdir@/libgwenhywfar.so.@GWENHYWFAR_SO_EFFECTIVE@") # find components # find QT4 or cpp list(FIND GWENHYWFAR_FIND_COMPONENTS "qt4" FIND_GWEN_COMPONENT_QT4) list(FIND GWENHYWFAR_FIND_COMPONENTS "cpp" FIND_GWEN_COMPONENT_CPP) if ( NOT ${FIND_GWEN_COMPONENT_QT4} EQUAL -1 OR NOT ${FIND_GWEN_COMPONENT_CPP} EQUAL -1 ) find_package(gwengui-qt4) if ( gwengui-qt4_FOUND ) set( GWENHYWFAR_INCLUDE_DIRS ${GWENHYWFAR_INCLUDE_DIRS} ${GWENGUI_QT4_INCLUDE_DIRS} ) set( GWENHYWFAR_LIBRARIES ${GWENHYWFAR_LIBRARIES} ${GWENGUI_QT4_LIBRARIES} ) set( GWENHYWFAR_qt4_FOUND true ) set( GWENHYWFAR_cpp_FOUND true ) # this is included into qt4 as has no own configuration file endif() endif() check_required_components(GWENHYWFAR) mark_as_advanced( GWENHYWFAR_INCLUDE_DIRS GWENHYWFAR_LIBRARIES ) gwenhywfar-4.15.2beta/ChangeLog0000644000175000017500000007022312643267227013332 00000000000000------------------------------------------------------------------ 2015-12-31 01:59:51 +0100 Martin Preuss Typemaker2 now also writes APIDOC. Will probably switch to member grouping. ------------------------------------------------------------------ 2015-12-15 15:38:14 +0100 Martin Preuss Prepared release 4.15.2beta ------------------------------------------------------------------ 2015-12-15 10:50:36 +0100 Martin Preuss No longer use gnutls_protocol_set_priority(). ------------------------------------------------------------------ 2015-11-09 22:40:21 +0100 Martin Preuss Prepared release 4.15.1beta. ------------------------------------------------------------------ 2015-10-26 19:59:44 +0100 Martin Preuss TLS: Introduced preprocessor variable "GWEN_TLS_USE_OLD_CODE". If this variable is defined the old code for TLS cipher selection is used, otherwise the new code is chosen. The default setting is currenty to use the new code, that works at least with the NetBank server. ------------------------------------------------------------------ 2015-08-05 21:27:33 +0200 Martin Preuss Prepared Gwenhywfar 4.15.0. ------------------------------------------------------------------ 2015-07-18 20:37:42 +0200 Martin Preuss Added tests for GWEN_PARAM. ------------------------------------------------------------------ 2015-07-18 20:37:33 +0200 Martin Preuss Fixed a typo. ------------------------------------------------------------------ 2015-07-18 19:22:08 +0200 Martin Preuss Modified XML structure use when reading and witing param values. GWEN_Param_List_WriteValuesToXml() and GWEN_Param_List_ReadValuesFromXml() now read/write a more compact XML tree. ------------------------------------------------------------------ 2015-07-18 19:20:49 +0200 Martin Preuss Improved GWEN_XMLNode_GetCharValue() and GWEN_XMLNode_SetCharValue(). If "name" is empty data nodes will be read/written directly below the given node. ------------------------------------------------------------------ 2015-07-18 18:24:09 +0200 Martin Preuss Improved GWEN_PARAMS. Now we can read and write lists of GWEN_PARAMs. It is now also possible to read and write values of params only. Also added API documentation. ------------------------------------------------------------------ 2015-07-13 21:36:55 +0200 Micha Lenk Make contents of listdoc.h reproducible There is a Debian initiative working on making builds reproducible, i.e. to make it possible to reproduce byte-for-byte identical binary packages from a given source. https://wiki.debian.org/ReproducibleBuilds The contents of listdoc.h is generated by the output of "find include -name '*.h'". Unfortunately the output of this command depends on readdir()'s output, which in general is non-deterministic. Under some yet unknown conditions this can result in unreproducible API documentation for Gwenhywfar. By sorting the output of "find" the generated API documentation should become reliably reproducible. ------------------------------------------------------------------ 2015-07-13 20:47:21 +0200 Micha Lenk mklistdoc: Fix minor typo ------------------------------------------------------------------ 2015-05-25 18:18:53 +0200 Martin Preuss Prepared release 4.14.0. ------------------------------------------------------------------ 2015-05-23 21:50:30 +0200 Christian Stimming Fix segfault on windows when using HBCI with keyfile. Reported by hbrunn on https://github.com/Gnucash/gnucash-on-windows/pull/5 ------------------------------------------------------------------ 2015-05-20 23:24:09 +0200 Martin Preuss Major speedup of GWEN_Directory_GetMatchingFilesRecursively(). Don't check for duplicates when adding files or folders to the file/folder list. There should be no duplicate entries anyway inside a folder. ------------------------------------------------------------------ 2015-05-17 10:22:06 +0200 Micha Lenk Re-work Compiler Symbol Visibility Check This was inspired by http://stackoverflow.com/questions/5987219/best-practices-for-probing-for-symbol-visibility-extensions-in-autoconf ------------------------------------------------------------------ 2015-05-17 10:18:16 +0200 Micha Lenk Drop unused autoconf variable gwen_enable_export ------------------------------------------------------------------ 2015-05-15 19:29:13 +0000 Micha Lenk Fix symbol visibilty check for GCC 5.x GCC 5.x supports the -fvisibility=hidden flag too. ------------------------------------------------------------------ 2015-05-14 10:20:12 +0200 Martin Preuss Revert "Turn compiler warning for implicit function declaration into error." This reverts commit 9c20b0998c5f5825ede38ff22eb1b5211eda8741 because "-Werror=implicit-function-declaration" doesn't exist on my target build system. ------------------------------------------------------------------ 2015-05-04 00:00:03 +0200 Micha Lenk Revert "Disable timestamps in HTML pages generated by Doxygen" This reverts commit f340c4a44b4f8a5148b02be0598f2ab63c45e924. Debian's Doxygen as of version 1.8.9.1-3 will have this disabled by default, so this change is not needed anymore. ------------------------------------------------------------------ 2015-04-13 19:47:06 +0200 Micha Lenk Disable timestamps in HTML pages generated by Doxygen There is a Debian initiative working on making builds reproducible, i.e. to make it possible to reproduce byte-for-byte identical binary packages from a given source. https://wiki.debian.org/ReproducibleBuilds One reason why Gwenhywfar currently is not reproducible is the use of timestamps in HTML pages generated by Doxygen. More details about this particular issue can be found here: https://wiki.debian.org/ReproducibleBuilds/TimestampsInDocumentationGeneratedByDoxygen ------------------------------------------------------------------ 2015-03-15 23:01:22 +0100 Martin Preuss typemaker2: Added support for _free-hooks, fixed many compiler warnings. - freeHooks can be used to insert code into the destructor for generated types (used in ADCM_IMAGE_DATA of AqRadBase) - fixed many compiler warnings about defined but unused variables - fixed type definition for GWEN_BINDATA ------------------------------------------------------------------ 2015-03-15 17:04:24 +0100 Martin Preuss API ADDITION: Added 2 more virtual functions to GWEN_MULTICACHE Added virtual functions GWEN_MULTICACHE_TYPE_ATTACH_OBJECT_FN() and GWEN_MULTICACHE_TYPE_FREE_OBJECT_FN(). Those functions have a pointer to the GWEN_MULTICACHE_TYPE as first argument. This is needed for AqRadBase's CUDA image cache. ------------------------------------------------------------------ 2015-01-04 19:08:05 +0100 Martin Preuss Added functions GWEN_Param_List_Get/SetCurrentValueAsInt/Double. ------------------------------------------------------------------ 2015-01-03 23:47:21 +0100 Martin Preuss Prepared release 4.13.1 ------------------------------------------------------------------ 2015-01-03 21:46:19 +0100 Christian Stimming Add function declaration that was missing in header, as discovered by the additional compiler option. ------------------------------------------------------------------ 2015-01-03 21:45:56 +0100 Christian Stimming Turn compiler warning for implicit function declaration into error. This avoids running into the error of 769ab05bb3 again. ------------------------------------------------------------------ 2015-01-03 21:42:31 +0100 Christian Stimming Fix function name for systems without but with This is a bugfix for 66521660959. ------------------------------------------------------------------ 2015-01-02 21:31:10 +0100 Martin Preuss Prepared release 4.13.0 ------------------------------------------------------------------ 2014-12-29 07:54:55 +0100 Elias Oltmanns gui: Restore compilation without libiconv. ------------------------------------------------------------------ 2014-12-28 16:20:58 +0100 Elias Oltmanns gui: Set up charset conversion according to current locale even on Windows This change is supposed to make locale-aware charset conversion more portable. In environments lacking the appropriate POSIX interface like Windows we rely on the capabilities of GNU libiconv. ------------------------------------------------------------------ 2014-12-15 22:25:20 +0100 Christian Stimming Add build directives for travis-ci.org continuous integration testing ------------------------------------------------------------------ 2014-12-15 22:48:55 +0100 Christian Stimming Bugfix from compiler warnings: Use the correct pointer variable. ------------------------------------------------------------------ 2014-12-15 22:48:42 +0100 Christian Stimming Bugfix from compiler warnings: pos variable might be -1, so it must not be unsigned. ------------------------------------------------------------------ 2014-12-15 22:48:21 +0100 Christian Stimming Bugfixes from compiler warnings: Should have been bit operations, not logical operators. ------------------------------------------------------------------ 2014-12-15 22:49:34 +0100 Christian Stimming Avoid compiler warnings (clang): Remove / deactivate unused functions / variables. ------------------------------------------------------------------ 2014-12-14 22:15:15 +0100 Christian Stimming Fix crash in GWEN_Gui_SetCharSet (gnucash bugzilla #741161) that was calling iconv_close on an invalid descriptor. Fixes the crash introduced in r2297 / f12fd6e1f in April 2014. ------------------------------------------------------------------ 2014-11-02 17:00:41 +0100 Martin Preuss Added functions GWEN_Param_List_GetByName() and GWEN_Param_Tree_GetByName(). ------------------------------------------------------------------ 2014-10-12 15:17:11 +0200 Martin Preuss Added .gitignore. ------------------------------------------------------------------ 2014-10-12 15:12:22 +0200 Martin Preuss Merge branch 'master' of https://git.aqbanking.de/git/gwenhywfar ------------------------------------------------------------------ 2014-10-06 21:52:22 +0200 Christian Stimming Re-indentation of source code to get a unified look of the source. This was done using astyle-2.03 with the following command: astyle --style=java --indent=spaces=2 --break-closing-brackets --keep-one-line-blocks --suffix=none --recursive 'src/*.h' 'src/*.c' 'gui/*.h*' 'gui/*.c*' (The astyle options were carefully chosen to match the vast majority of the source code. Nevertheless quite some of the files have a mixed indentation style, which is now unified.) ------------------------------------------------------------------ 2014-09-28 00:03:51 +0200 Christian Stimming Make GWEN_Error_SimpleToString function available in public interface. This function is merely a GWEN_Error -> string converter and hence useful in itself. No extra buffers needed, no extra texts added. ------------------------------------------------------------------ 2014-09-27 23:56:47 +0200 Christian Stimming Fix compiler warnings/errors: "Variable defined but not used" ------------------------------------------------------------------ 2014-09-25 21:14:57 +0200 Christian Stimming Minor error message improvements. ------------------------------------------------------------------ 2014-09-17 22:20:11 +0200 Martin Preuss Merge branch 'master' of https://git.aqbanking.de/git/gwenhywfar ------------------------------------------------------------------ 2014-09-17 22:18:55 +0200 Martin Preuss Fixed a bug with double deallocations in generated *_copy() functions. ------------------------------------------------------------------ 2014-09-17 22:18:25 +0200 Martin Preuss Provide generated files for GWEN_PARAM. GWEN_PARAM is provided using typemaker2, so in order to make the code compilable even without typemaker2 already being built we provide the generated files here as well. ------------------------------------------------------------------ 2014-09-17 22:17:22 +0200 Martin Preuss Added class GWEN_PARAM. This is used at least by AqRadBase, and probably by my other projects as well. It can be used to provide descriptions for settings and a framework to manage those settings. AqRadBase will use it to manage the settings of ADCM_CONVERTER and ADCM_OPERATOR classes. Those settings can then be provided in a generic manner. ------------------------------------------------------------------ 2014-09-15 22:01:45 +0200 Christian Stimming Add configure check for sufficiently new gnutls as otherwise this won't compile. ------------------------------------------------------------------ 2014-08-29 21:04:34 +0200 Christian Stimming Add minor entry to gitignore (and test git access) ------------------------------------------------------------------ 2014-08-04 22:47:49 +0200 Martin Preuss Generic Parser: Added functions to write a parser element tree to XML. This is an essential function for later use in AqBanking because it will be used to generate the basic framework of a format definition from an XML file. ------------------------------------------------------------------ 2014-07-25 23:42:21 +0200 Martin Preuss More work on generic parser. ------------------------------------------------------------------ 2014-07-11 23:12:10 +0000 martin MultiCache: Added missing counter handling. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2338 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-07-08 18:30:21 +0000 martin Removed references to new g_parser from gwentest.c git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2337 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-07-08 12:43:31 +0000 martin Fixed version string creation. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2336 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-07-08 12:43:27 +0000 martin Added .gitignore entries. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2335 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-07-08 12:32:53 +0000 martin Added CMake package configuration files May not work on Mac OSX or Windows because library extensision .so is hard coded. From: Christian DĂĄvid git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2334 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-07-04 12:33:12 +0000 martin Export a function which I need in AqRadBase. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2333 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-07-03 11:40:36 +0000 martin Fixed my latest changes. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2332 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-07-03 11:40:29 +0000 martin Removed work-in-progress from normal compiling. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2331 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-07-03 11:40:23 +0000 martin Added built files to EXTRA_DIST. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2330 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-07-03 11:32:47 +0000 martin Fix 3rsa test. From: Elias Oltmanns git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2329 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-07-03 11:32:40 +0000 martin Only generate RSA keys whose modulus length in bits is a multiple of 8 According to the documentation of Libgcrypt, the length in bits specified when generating key pairs should always be a multiple of 8. Hence, the usage of GWEN_Crypt_KeyRsa_GeneratePair2() is deprecated. From: Elias Oltmanns git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2328 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-07-03 11:32:32 +0000 martin Be careful about sign issues when cropping buffers. From: Elias Oltmanns git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2327 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-07-03 11:32:25 +0000 martin Fix potential overrun in GWEN_Buffer_RemoveRoom() Also reported and a similar patch provided by G. Paul Ziemba . From: Elias Oltmanns git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2326 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-07-03 11:32:19 +0000 martin Rely on GWEN_Buffer_AllocRoom() to get things right Checks for overflow and provision for an extra null character are taken care of in one place and the caller should rely on that. From: Elias Oltmanns git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2325 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-07-03 11:32:11 +0000 martin Address some confusion about the terminating null character on buffer resize. From: Elias Oltmanns git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2324 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-07-03 11:32:04 +0000 martin Fix enforcement of read-only attribute in operations on Gwen buffers. From: Elias Oltmanns git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2323 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-07-03 11:31:56 +0000 martin Make sure that GWEN_Memory_malloc() never returns NULL. From: Elias Oltmanns git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2322 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-07-03 11:28:09 +0000 martin Typemaker2: Improved generating of APIDOC. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2321 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-07-03 11:28:00 +0000 martin Added functions GWEN_SyncIo_Helper_PartiallyReadFile() and GWEN_SyncIo_Helper_ReadFile() Partially or completely reading a file is quite often needed, so we now have functions for that in GWEN. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2320 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-07-03 11:27:49 +0000 martin Fixed the description of GWEN_Text_NumToString() and GWEN_Text_StringToDouble() Actually, we use the locale "C" for number conversion, so the komma is represented as a decimal point ("."), not as a komma. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2319 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-07-03 11:27:42 +0000 martin Added functions GWEN_StringListEntry_SetData() and GWEN_StringList_FindStringEntry() Actually, GWEN_StringListEntry_SetData() already was declared but not implemented. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2318 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-05-30 19:27:34 +0000 martin Typemaker2: Fixed a bug in virtual function creator. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2317 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-05-21 18:41:04 +0000 martin Elias Oltmanns: Use the right key size when the modulus of RSA keys is not divisible by 8. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2316 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-04-24 19:53:38 +0000 christian Add first initial checking of the "destFolder" argument The cmdline argument was added in r1684, but never read so far. Even though it is now read for writing the .tm2 files, it is not yet regarded for the actual *.h/*.c files. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2315 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-04-19 22:41:13 +0000 martin Added .gitignore for new parser folder. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2314 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-04-19 22:41:06 +0000 martin Simplified code for new parser. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2313 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-04-19 22:40:56 +0000 martin Started working on a generic parser. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2312 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-04-17 21:16:00 +0000 martin "des_" API is deprecated, changed to "DES_". Thanks to Henning Brauer from BS Web Services GmbH. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2311 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-04-17 21:15:53 +0000 martin Prepared release 4.12.0beta. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2310 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-04-17 21:15:46 +0000 martin Added function GWEN_Url_toUiShortString(). git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2309 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-04-15 21:42:11 +0000 martin Fixed a bug in quarter year calculations. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2308 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-04-07 18:08:31 +0000 martin Prepared release 4.11.1beta. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2307 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-04-06 08:40:58 +0000 christian Fix GWEN_FORMAT macro: Empty macro must still consume the arguments, otherwise we get a syntax error. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2306 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-04-06 08:25:06 +0000 christian Disable the __attribut__ format for mingw32 build. This broke the gnucash native mingw32 build, see https://github.com/Gnucash/gnucash/commit/4e5e0621322147ff6ada9d72ace36e213dec61c7 git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2305 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-03-31 21:52:44 +0000 martin Fixed a memory leak. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2304 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-03-31 21:52:22 +0000 martin Prepared release 4.11.0beta. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2303 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-03-01 19:12:49 +0000 martin CGui: Always allow the user to abort an input dialog (Elias Oltmanns) This patch simply rearranges some code in GWEN_Gui_CGui__input() mainly in order to move the handler for user initiated abortion outside the buffer-not-full condition. Not a single line of new code is added, but two levels of if-else-nesting are removed into the bargain. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2302 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-03-01 19:12:42 +0000 martin CGui: Add character conversion to the inputBox() routine (Elias Oltmanns) git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2301 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-03-01 19:12:34 +0000 martin Added patches/ folder to .gitignore. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2300 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-03-01 19:12:28 +0000 martin Partially undid last commit. We don't want to incompatibly change the API just yet. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2299 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-03-01 19:12:19 +0000 martin Apply character conversion during command line argument parsing (Elias Oltmanns) In actual fact, character conversion will only be applied if GWEN_Args_Check() is called after the gui has been properly initialised. This means that the arguments parsed beforehand (e.g. in order to influence gui-parameters) had better not be affected by character conversion in the first place. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2298 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-03-01 19:12:11 +0000 martin Gui: Adopt a more consistent approach to character conversion (Elias Oltmanns) Ideally, all direct output to and input from the standard streams should be handled consistently with regard to character conversion. This patch manages to achieve this goal for all output through the CGui callbacks. Moreover, it provides the means for a follow-up patch to apply character conversion during command line argument parsing. Non-canonical input, though, is a different story and will require extra code. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2297 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-03-01 19:12:01 +0000 martin Make GWEN_StringList_Sort() compliant with the documented behaviour (Elias Oltmanns) Contrary to the documentation in stringlist.h, GWEN_StringList_Sort() used to sort in ascending order when the argument ascending was *not* set, and vice versa. This bug has been (partially) masked by the fact, that sorting was broken, anyway, due to incorrect book keeping with regard to the number of list elements and inappropriate integer sorting functions. This change will likely require adjustments to code in other applications and libraries, e.g. AqBanking. Unfortunately, a simple 0/1 swap of the ascending parameter will not do because the bug evidently did not occur consistently. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2296 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-03-01 19:11:53 +0000 martin Fix various hiccups in stringlist handling (Elias Oltmanns) - Do the right book keeping when inserting new entries or clearing the list. - Remove an erroneous assertion in GWEN_StringList_RemoveString(). - Make integer sorting functions actually fit for qsort(). - Make GWEN_StringList_Sort() slightly more efficient and arguably easier to read. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2295 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-03-01 19:11:45 +0000 martin Fix assertions in syncio_file.c (Elias Oltmanns) git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2294 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-03-01 19:11:37 +0000 martin Safe guard against invalid argument to GWEN_Date_GetThisMonthEnd() (Elias Oltmanns) The compiler warns about the use of a possibly uninitialised variable. Since this function is part of the public API, sane arguments can, indeed, not be taken for granted and precautionary steps are in order. git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2293 70169cfe-8b10-0410-8925-dcb4b91034d8 ------------------------------------------------------------------ 2014-03-01 19:11:29 +0000 martin Fix several memory leaks (Elias Oltmanns) git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2292 70169cfe-8b10-0410-8925-dcb4b91034d8 gwenhywfar-4.15.2beta/m4/0000755000175000017500000000000012643267234012152 500000000000000gwenhywfar-4.15.2beta/m4/os.m40000644000175000017500000000571012364015347012754 00000000000000# $Id$ # (c) 2002 Martin Preuss # These functions guess your operation system AC_DEFUN([AQ_CHECK_OS],[ dnl IN: dnl - AC_CANONICAL_SYSTEM muste be called before dnl OUT: dnl Variables: dnl OSYSTEM: Short name of your system (subst) dnl OS_TYPE: either "posix" or "windows" (subst) dnl MAKE_DLL_TARGET: under windows this is set to "dll" (subst) dnl INSTALL_DLL_TARGET: under Windows this is set to "dll-install" (subst) dnl Defines: dnl OS_NAME: full name of your system dnl OS_SHORTNAME: short name of your system dnl Depending on your system one of the following is defined in addition: dnl OS_LINUX, OS_OPENBSD, OS_FREEBSD, OS_BEOS, OS_WIN32 # check for OS AC_MSG_CHECKING([host system type]) OSYSTEM="" OS_TYPE="" MAKE_DLL_TARGET="" INSTALL_DLL_TARGET="" AC_DEFINE_UNQUOTED(OS_NAME,"$host", [host system]) case "$host" in *-linux*) OSYSTEM="linux" AC_DEFINE(OS_LINUX,1,[if linux is used]) AC_DEFINE(OS_POSIX,1,[if this is a POSIX system]) OS_TYPE="posix" ;; *-solaris*) OSYSTEM="solaris" AC_DEFINE(OS_SOLARIS,1,[if Solaris is used]) AC_DEFINE(OS_POSIX,1,[if this is a POSIX system]) OS_TYPE="posix" ;; *-darwin*) OSYSTEM="osx" AC_DEFINE(OS_DARWIN,1,[if Apple Darwin is used]) AC_DEFINE(OS_POSIX,1,[if this is a POSIX system]) OS_TYPE="posix" ;; *-openbsd*) OSYSTEM="openbsd" AC_DEFINE(OS_OPENBSD,1,[if OpenBSD is used]) AC_DEFINE(OS_POSIX,1,[if this is a POSIX system]) OS_TYPE="posix" ;; *-freebsd* | *-kfreebsd*) OSYSTEM="freebsd" AC_DEFINE(OS_FREEBSD,1,[if FreeBSD is used]) AC_DEFINE(OS_POSIX,1,[if this is a POSIX system]) OS_TYPE="posix" ;; *-netbsd*) OSYSTEM="netbsd" AC_DEFINE(OS_NETBSD,1,[if NetBSD is used]) AC_DEFINE(OS_POSIX,1,[if this is a POSIX system]) OS_TYPE="posix" ;; *-beos*) OSYSTEM="beos" AC_DEFINE(OS_BEOS,1,[if BeOS is used]) AC_DEFINE(OS_POSIX,1,[if this is a POSIX system]) OS_TYPE="posix" ;; *-win32*) OSYSTEM="windows" AC_DEFINE(OS_WIN32,1,[if WIN32 is used]) OS_TYPE="windows" AC_DEFINE_UNQUOTED(BUILDING_DLL,1,[if DLL is to be built]) MAKE_DLL_TARGET="dll" INSTALL_DLL_TARGET="dll-install" ;; *-mingw32*) OSYSTEM="windows" AC_DEFINE(OS_WIN32,1,[if WIN32 is used]) OS_TYPE="windows" AC_DEFINE_UNQUOTED(BUILDING_DLL,1,[if DLL is to be built]) MAKE_DLL_TARGET="dll" INSTALL_DLL_TARGET="dll-install" ;; *-palmos*) OSYSTEM="palmos" AC_DEFINE(OS_PALMOS,1,[if PalmOS is used]) OS_TYPE="palmos" ;; *) AC_MSG_WARN([Sorry, but host $host is not supported. Please report if it works anyway. We will assume that your system is a posix system and continue.]) OSYSTEM="unknown" OS_TYPE="posix" AC_DEFINE(OS_POSIX,1,[if this is a POSIX system]) ;; esac AC_SUBST(OSYSTEM) AC_DEFINE_UNQUOTED(OS_SHORTNAME,"$OSYSTEM",[host system]) AC_SUBST(OS_TYPE) AC_DEFINE_UNQUOTED(OS_TYPE,"$OS_TYPE",[system type]) AC_SUBST(MAKE_DLL_TARGET) AC_SUBST(INSTALL_DLL_TARGET) AC_MSG_RESULT($OS_TYPE) ]) gwenhywfar-4.15.2beta/m4/qt.m40000644000175000017500000001377112364015347012765 00000000000000# $Id$ # (c) 2002 Martin Preuss # These functions search for QT 2-3 AC_DEFUN([AQ_CHECK_QT],[ dnl $1 = operating system name ("linux", "freebsd", "windows") dnl $2 = subdirs to include when QT is available dnl searches a dir for some files dnl You may preset the return variables. dnl All variables which already have a value will not be altered dnl returns some variables: dnl qt_generation either 1,2 or 3 dnl qt_includes path to includes dnl qt_libs path to libraries dnl qt_moc path to moc dnl qt_uic path to uic ops="$1" lsd="$2" dnl check if qt apps are desired AC_MSG_CHECKING(if QT applications should be compiled) AC_ARG_ENABLE(qtapps, [ --enable-qtapps enable compilation of qt applications (default=yes)], enable_qtapps="$enableval", enable_qtapps="yes") AC_MSG_RESULT($enable_qtapps) if test "$enable_qtapps" = "no"; then qt_libs="" qt_includes="" qt_app="" qt_moc="" qt_uic="" else dnl paths for qt AC_ARG_WITH(qt-dir, [ --with-qt-dir=DIR uses qt from given dir], [local_qt_paths="$withval"], [local_qt_paths="\ $QTDIR \ /usr/local/lib/qt3 \ /usr/lib/qt3 \ /lib/qt3 \ /usr/local/lib/qt2 \ /usr/lib/qt2 \ /lib/qt2 \ /usr/local/lib/qt1 \ /usr/lib/qt1 \ /lib/qt1 \ /usr/local/lib/qt \ /usr/lib/qt \ /lib/qt \ /usr/local \ /usr \ /usr/X11R6 \ / \ "]) AC_MSG_CHECKING(if threaded qt may be used) AC_ARG_ENABLE(qt-threads, [ --enable-qt-threads enable qt-mt library (default=yes)], enable_qt_threads="$enableval", enable_qt_threads="yes") AC_MSG_RESULT($enable_qt_threads) dnl check for library AC_MSG_CHECKING(for qt libraries) dnl check for 3 if test -z "$qt_libs" && test "$enable_qt_threads" != "no"; then AQ_SEARCH_FOR_PATH([lib/libqt-mt.so.3],[$local_qt_paths]) if test -n "$found_dir" ; then qt_dir="$found_dir" qt_libs="-L$found_dir/lib -lqt-mt" qt_generation="3" fi fi if test -z "$qt_libs"; then AQ_SEARCH_FOR_PATH([lib/libqt.so.3],[$local_qt_paths]) if test -n "$found_dir" ; then qt_dir="$found_dir" qt_libs="-L$found_dir/lib -lqt" qt_generation="3" fi fi dnl check for 2 if test -z "$qt_libs" && test "$enable_qt_threads" != "no"; then AQ_SEARCH_FOR_PATH([lib/libqt-mt.so.2],[$local_qt_paths]) if test -n "$found_dir" ; then qt_dir="$found_dir" qt_libs="-L$found_dir/lib -lqt-mt" qt_generation="2" fi fi if test -z "$qt_libs"; then AQ_SEARCH_FOR_PATH([lib/libqt.so.2],[$local_qt_paths]) if test -n "$found_dir" ; then qt_dir="$found_dir" qt_libs="-L$found_dir/lib -lqt" qt_generation="2" fi fi dnl check for 1 if test -z "$qt_libs" && test "$enable_qt_threads" != "no"; then AQ_SEARCH_FOR_PATH([lib/libqt-mt.so.1],[$local_qt_paths]) if test -n "$found_dir" ; then qt_dir="$found_dir" qt_libs="-L$found_dir/lib -lqt-mt" qt_generation="1" fi fi if test -z "$qt_libs"; then AQ_SEARCH_FOR_PATH([lib/libqt.so.1],[$local_qt_paths]) if test -n "$found_dir" ; then qt_dir="$found_dir" qt_libs="-L$found_dir/lib -lqt" qt_generation="1" fi fi if test -z "$qt_libs"; then AC_MSG_RESULT(not found) else AC_MSG_RESULT($qt_libs) fi dnl check for includes AC_MSG_CHECKING(for qt includes) if test -z "$qt_includes"; then AQ_SEARCH_FOR_PATH([include/qt.h],[$qt_dir $local_qt_paths]) if test -n "$found_dir" ; then qt_includes="-I$found_dir/include" fi fi if test -z "$qt_includes"; then AQ_SEARCH_FOR_PATH([include/qt3/qt.h],[$qt_dir $local_qt_paths]) if test -n "$found_dir" ; then qt_includes="-I$found_dir/include/qt3" fi fi if test -z "$qt_includes"; then AQ_SEARCH_FOR_PATH([include/qt2/qt.h],[$qt_dir $local_qt_paths]) if test -n "$found_dir" ; then qt_includes="-I$found_dir/include/qt2" fi fi if test -z "$qt_includes"; then AQ_SEARCH_FOR_PATH([include/qt1/qt.h],[$qt_dir $local_qt_paths]) if test -n "$found_dir" ; then qt_includes="-I$found_dir/include/qt1" fi fi if test -z "$qt_includes"; then AQ_SEARCH_FOR_PATH([include/qt/qt.h],[$qt_dir $local_qt_paths]) if test -n "$found_dir" ; then qt_includes="-I$found_dir/include/qt" fi fi if test -z "$qt_includes"; then AC_MSG_RESULT(not found) else AC_MSG_RESULT($qt_includes) fi dnl check for moc AC_MSG_CHECKING(for qt moc) if test -z "$qt_moc"; then AQ_SEARCH_FOR_PATH([bin/moc],[$qt_dir $local_qt_paths]) if test -n "$found_dir" ; then qt_moc="$found_dir/bin/moc" fi fi if test -z "$qt_moc"; then AQ_SEARCH_FOR_PATH([bin/moc2],[$qt_dir $local_qt_paths]) if test -n "$found_dir" ; then qt_moc="$found_dir/bin/moc2" fi fi if test -z "$qt_moc"; then AC_MSG_RESULT(not found) else AC_MSG_RESULT($qt_moc) fi dnl check for uic AC_MSG_CHECKING(for qt uic) if test -z "$qt_uic"; then AQ_SEARCH_FOR_PATH([bin/uic],[$qt_dir $local_qt_paths]) if test -n "$found_dir" ; then qt_uic="$found_dir/bin/uic" fi fi if test -z "$qt_uic"; then AC_MSG_RESULT(not found) else AC_MSG_RESULT($qt_uic) fi # check if all necessary qt components where found if test -n "$qt_includes" && \ test -n "$qt_libs" && \ test -n "$qt_moc" && \ test -n "$qt_uic"; then qt_app="$lsd" AC_DEFINE_UNQUOTED(QT_GENERATION,$qt_generation, [QT generation]) else qt_libs="" qt_includes="" qt_app="" qt_moc="" qt_uic="" if test "$enable_qtapps" = "yes"; then AC_MSG_ERROR([ Compilation of QT applications is enabled but I could not find some QT components (see which are missing in messages above). If you don't want to compile QT applications please use "--disable-qtapps". ]) fi fi dnl end of if "$enable_qtapps" fi AC_SUBST(qt_dir) AC_SUBST(qt_app) AC_SUBST(qt_libs) AC_SUBST(qt_includes) AC_SUBST(qt_moc) AC_SUBST(qt_uic) AC_SUBST(qt_generation) ]) gwenhywfar-4.15.2beta/m4/acx_compile_warn.m40000644000175000017500000000445012525054265015646 00000000000000# Compile warning arguments to ./configure # by Christian Stimming 2003-11-19 dnl ACX_COMPILE_WARN() dnl Add arguments for compile warnings and debug options to ./configure. dnl AC_DEFUN([ACX_COMPILE_WARN], [ dnl For enabling of debugging flags/code AC_ARG_ENABLE(debug, [ --enable-debug compile with debugging code enabled, default=no], [case "${enableval}" in yes) CXXFLAGS="${CXXFLAGS} -g" CFLAGS="${CFLAGS} -g" LDFLAGS="${LDFLAGS} -g" AC_DEFINE(DEBUG,1,[Define if you want debugging code enabled.]) ;; no) ;; *) AC_MSG_ERROR(bad value ${enableval} for --enable-debug) ;; esac ], [ # Default value if the argument was not given CXXFLAGS="${CXXFLAGS}" CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" ]) dnl If this is gcc, then ... if test ${GCC}x = yesx; then dnl Enable all warnings AC_ARG_ENABLE(warnings, [ --enable-warnings enable compilation warnings, default=yes], [case "${enableval}" in yes) CXXFLAGS="${CXXFLAGS} -Wall" CFLAGS="${CFLAGS} -Wall" ;; all) CXXFLAGS="${CXXFLAGS} -Wall -pedantic -ansi" CFLAGS="${CFLAGS} -Wall -pedantic -ansi" ;; no) ;; *) AC_MSG_ERROR(bad value ${enableval} for --enable-warnings) ;; esac ], [ # Default value if the argument was not given CXXFLAGS="${CXXFLAGS} -Wall" CFLAGS="${CFLAGS} -Wall" ]) dnl For gcc >= 3.4.x, specifically enable the new warning switch dnl -Wdeclaration-after-statement in order to preserve source code dnl compatibility to gcc 2.95 and other compilers. GCC_VERSION=`${CC} -dumpversion` if test `echo ${GCC_VERSION} | cut -d. -f1` -ge 3; then # This is gcc >= 3.x.x if test `echo ${GCC_VERSION} | cut -d. -f2` -ge 4; then # This is gcc >= 3.4.x CFLAGS="${CFLAGS} -Wdeclaration-after-statement" fi fi dnl For enabling error on warnings AC_ARG_ENABLE(error-on-warning, [ --enable-error-on-warning treat all compile warnings as errors, default=no], [case "${enableval}" in yes) CXXFLAGS="${CXXFLAGS} -Werror" CFLAGS="${CFLAGS} -Werror" ;; no) ;; *) AC_MSG_ERROR(bad value ${enableval} for --enable-error-on-warning) ;; esac ], [ # Default value if the argument was not given CXXFLAGS="${CXXFLAGS}" CFLAGS="${CFLAGS}" ]) fi ]) gwenhywfar-4.15.2beta/m4/kde.m40000644000175000017500000001075412364015347013102 00000000000000# $Id$ # (c) 2002 Martin Preuss # These functions search for KDE 2-3 AC_DEFUN([AQ_CHECK_KDE],[ dnl $1 = operating system name ("linux", "freebsd", "windows") dnl $2 = subdirs to include when KDE is available dnl searches a dir for some files dnl You may preset the return variables. dnl All variables which already have a value will not be altered dnl returns some variables: dnl kde_generation either 1,2 or 3 dnl kde_includes path to includes dnl kde_libs path to libraries dnl kde_install_dir ops="$1" lsd="$2" dnl check if kde apps are desired AC_MSG_CHECKING(if KDE applications should be compiled) AC_ARG_ENABLE(kdeapps, [ --enable-kdeapps enable compilation of kde applications (default=yes)], enable_kdeapps="$enableval", enable_kdeapps="yes") AC_MSG_RESULT($enable_kdeapps) if test "$enable_kdeapps" = "no"; then kde_libs="" kde_includes="" kde_app="" else dnl paths for kde AC_ARG_WITH(kde-dir, [ --with-kde-dir=DIR uses kde from given dir], [local_kde_paths="$withval"], [local_kde_paths="\ $KDEDIR \ /opt/kde3 \ /usr/local/lib/kde3 \ /usr/lib/kde3 \ /lib/kde3 \ /opt/kde2 \ /usr/local/lib/kde2 \ /usr/lib/kde2 \ /lib/kde2 \ /opt/kde1 \ /usr/local/lib/kde1 \ /usr/lib/kde1 \ /lib/kde1 \ /opt/kde \ /usr/local/lib/kde \ /usr/lib/kde \ /lib/kde \ /usr/local \ /usr \ / \ "]) dnl check for library AC_MSG_CHECKING(for kde libraries) dnl check for 3 if test -z "$kde_libs" ; then AQ_SEARCH_FOR_PATH([lib/libkdeui.so.4],[$local_kde_paths]) if test -n "$found_dir" ; then kde_dir="$found_dir" kde_libs="-L$found_dir/lib" kde_generation="3" fi fi dnl check for 2 if test -z "$kde_libs"; then AQ_SEARCH_FOR_PATH([lib/libkdeui.so.3],[$local_kde_paths]) if test -n "$found_dir" ; then kde_dir="$found_dir" kde_libs="-L$found_dir/lib" kde_generation="2" fi fi dnl check for 1 if test -z "$kde_libs"; then AQ_SEARCH_FOR_PATH([lib/libkdeui.so],[$local_kde_paths]) if test -n "$found_dir" ; then kde_dir="$found_dir" kde_libs="-L$found_dir/lib" kde_generation="1" fi fi if test -z "$kde_libs"; then AC_MSG_RESULT(not found) else AC_MSG_RESULT($kde_libs) fi dnl check for includes AC_MSG_CHECKING(for kde includes) if test -z "$kde_includes"; then AQ_SEARCH_FOR_PATH([include/kpushbutton.h],[$kde_dir $local_kde_paths]) if test -n "$found_dir" ; then kde_includes="-I$found_dir/include" fi fi if test -z "$kde_includes"; then AQ_SEARCH_FOR_PATH([include/kde3/kpushbutton.h],[$kde_dir $local_kde_paths]) if test -n "$found_dir" ; then kde_includes="-I$found_dir/include/kde3" fi fi if test -z "$kde_includes"; then AQ_SEARCH_FOR_PATH([include/kde2/kpushbutton.h],[$kde_dir $local_kde_paths]) if test -n "$found_dir" ; then kde_includes="-I$found_dir/include/kde2" fi fi if test -z "$kde_includes"; then AQ_SEARCH_FOR_PATH([include/kde1/kpushbutton.h],[$kde_dir $local_kde_paths]) if test -n "$found_dir" ; then kde_includes="-I$found_dir/include/kde1" fi fi if test -z "$kde_includes"; then AQ_SEARCH_FOR_PATH([include/kde/kpushbutton.h],[$kde_dir $local_kde_paths]) if test -n "$found_dir" ; then kde_includes="-I$found_dir/include/kde" fi fi if test -z "$kde_includes"; then AC_MSG_RESULT(not found) else AC_MSG_RESULT($kde_includes) fi # check if all necessary kde components where found if test -n "$kde_includes" && \ test -n "$kde_libs"; then kde_app="$lsd" AC_DEFINE_UNQUOTED(KDE_GENERATION,$kde_generation,[KDE generation]) AC_MSG_CHECKING(for kde install prefix) AC_ARG_WITH(kde-prefix, [ --with-kde-prefix=DIR install kde apps to prefix], [kde_install_dir="$withval"], [kde_install_dir="$kde_dir"]) AC_MSG_RESULT($kde_install_dir) else kde_libs="" kde_includes="" kde_app="" if test "$enable_kdeapps" = "yes"; then AC_MSG_ERROR([ Compilation of KDE applications is enabled but I could not find some KDE components (see which are missing in messages above). If you don't want to compile KDE applications please use "--disable-kdeapps". ]) fi fi dnl end of if "$enable_kdeapps" fi AC_SUBST(kde_dir) AC_SUBST(kde_app) AC_SUBST(kde_libs) AC_SUBST(kde_includes) AC_SUBST(kde_generation) AC_SUBST(kde_install_dir) ]) gwenhywfar-4.15.2beta/m4/binreloc.m40000644000175000017500000000526712364015347014137 00000000000000# Check for binary relocation support. # Written by Hongli Lai # http://autopackage.org/ AC_DEFUN([AM_BINRELOC], [ AC_ARG_ENABLE(binreloc, [ --enable-binreloc compile with binary relocation support (default=enable when available)], enable_binreloc=$enableval,enable_binreloc=auto) AC_ARG_ENABLE(binreloc-threads, [ --enable-binreloc-threads compile binary relocation with threads support (default=yes)], enable_binreloc_threads=$enableval,enable_binreloc_threads=yes) BINRELOC_CFLAGS= BINRELOC_LIBS= if test "x$enable_binreloc" = "xauto"; then AC_CHECK_FILE([/proc/self/maps]) AC_CACHE_CHECK([whether everything is installed to the same prefix], [br_cv_valid_prefixes], [ # datarootdir variables was introduced with autoconf-2.60 if test "$bindir" = '${exec_prefix}/bin' -a "$sbindir" = '${exec_prefix}/sbin' -a \ \( "$datadir" = '${prefix}/share' -o \( "$datadir" = '${datarootdir}' -a "$datarootdir" = '${prefix}/share' \) \) -a \ "$libdir" = '${exec_prefix}/lib' -a \ "$libexecdir" = '${exec_prefix}/libexec' -a "$sysconfdir" = '${prefix}/etc' then br_cv_valid_prefixes=yes else br_cv_valid_prefixes=no fi ]) fi AC_CACHE_CHECK([whether binary relocation support should be enabled], [br_cv_binreloc], [if test "x$enable_binreloc" = "xyes"; then br_cv_binreloc=yes elif test "x$enable_binreloc" = "xauto"; then if test "x$br_cv_valid_prefixes" = "xyes" -a \ "x$ac_cv_file__proc_self_maps" = "xyes"; then br_cv_binreloc=yes else br_cv_binreloc=no fi else br_cv_binreloc=no fi]) if test "x$br_cv_binreloc" = "xyes"; then BINRELOC_CFLAGS="-DENABLE_BINRELOC" AC_DEFINE(ENABLE_BINRELOC,,[Use binary relocation?]) if test "x$enable_binreloc_threads" = "xyes"; then AC_CHECK_LIB([pthread], [pthread_getspecific]) fi AC_CACHE_CHECK([whether binary relocation should use threads], [br_cv_binreloc_threads], [if test "x$enable_binreloc_threads" = "xyes"; then if test "x$ac_cv_lib_pthread_pthread_getspecific" = "xyes"; then br_cv_binreloc_threads=yes else br_cv_binreloc_threads=no fi else br_cv_binreloc_threads=no fi]) if test "x$br_cv_binreloc_threads" = "xyes"; then BINRELOC_LIBS="-lpthread" AC_DEFINE(BR_PTHREAD,1,[Include pthread support for binary relocation?]) else BINRELOC_CFLAGS="$BINRELOC_CFLAGS -DBR_PTHREADS=0" AC_DEFINE(BR_PTHREAD,0,[Include pthread support for binary relocation?]) fi fi AC_SUBST(BINRELOC_CFLAGS) AC_SUBST(BINRELOC_LIBS) ]) gwenhywfar-4.15.2beta/m4/fox.m40000644000175000017500000000526412364015347013133 00000000000000# $Id: fox.m4,v 1.4 2006/01/18 09:44:19 cstim Exp $ # (c) 2009 Martin Preuss # These functions search for FOX AC_DEFUN([AQ_CHECK_FOX],[ dnl PREREQUISITES: dnl AQ_CHECK_OS must be called before this dnl IN: dnl All variables which already have a value will not be altered dnl OUT: dnl Variables: dnl have_fox - set to "yes" if FOX exists dnl fox_includes - path to includes dnl fox_libs - path to libraries dnl Defines: dnl HAVE_FOX AC_MSG_CHECKING(if FOX is allowed) AC_ARG_ENABLE(fox, [ --enable-fox enable fox (default=yes)], enable_fox="$enableval", enable_fox="yes") AC_MSG_RESULT($enable_fox) if test "$enable_fox" = "no"; then fox_libs="" fox_includes="" have_fox="no" else dnl paths for fox includes AC_MSG_CHECKING(for fox includes) AC_ARG_WITH(fox-includes, [ --with-fox-includes=DIR uses fox includes from given dir], [local_fox_includes="$withval"], [local_fox_includes="\ /usr/include/fox-1.6 \ /usr/local/include/fox-1.6 \ /opt/fox-1.6/include \ " ] ) if test -z "$fox_includes"; then for i in $local_fox_includes; do if test -z "$fox_includes"; then if test -f "$i/fxver.h"; then fox_includes="-I$i" break; fi fi done fi if test -n "$fox_includes"; then AC_MSG_RESULT($fox_includes) else AC_MSG_RESULT(not found) fi # Check for x86_64 architecture; potentially set lib-directory suffix if test "$target_cpu" = "x86_64"; then libdirsuffix="64" else libdirsuffix="" fi dnl paths for fox libs AC_MSG_CHECKING(for fox libraries) AC_ARG_WITH(fox-libs, [ --with-fox-libs=SPEC uses given fox libs ], [fox_libs="$withval"], [ AC_LANG(C++) SAVED_LDFLAGS=$LDFLAGS SAVED_CXXFLAGS=$CXXFLAGS LDFLAGS="$LDFLAGS -lFOX-1.6" CXXFLAGS="$CXXFLAGS $fox_includes" AC_LINK_IFELSE( [AC_LANG_PROGRAM([#include ], [FX::FXDate dummy])], [fox_libs="-lFOX-1.6"]) LDFLAGS=$SAVED_LDFLAGS CXXFLAGS=$SAVED_CXXFLAGS ] ) if test -z "$fox_libs"; then AQ_SEARCH_FOR_PATH([$qt_searchname],[$local_fox_libs]) if test -n "$found_dir" ; then fox_libs="-L$found_dir -lFOX-1.6" fi fi if test -n "$fox_libs"; then AC_MSG_RESULT($fox_libs) else AC_MSG_RESULT(not found) fi # check if all necessary fox components where found if test -z "$fox_includes" || \ test -z "$fox_libs"; then fox_libs="" fox_includes="" have_fox="no" else have_fox="yes" AC_DEFINE(HAVE_FOX, 1, [whether FOX is available]) fi dnl end of if "$enable_fox" fi AS_SCRUB_INCLUDE(fox_includes) AC_SUBST(fox_libs) AC_SUBST(fox_includes) ]) gwenhywfar-4.15.2beta/m4/endian.m40000644000175000017500000000201112364015347013560 00000000000000# $Id: endian.m4 595 2004-11-19 16:17:17Z aquamaniac $ # (c) 2006 Martin Preuss # This function check for endianness AC_DEFUN([AQ_ENDIAN],[ dnl PREREQUISITES: dnl none dnl IN: dnl - default type for crosscompiling dnl OUT: dnl Variables: dnl aq_endian dnl Defines: # check for type to use AC_MSG_CHECKING(for endianness) rm -f conf.endian AC_TRY_RUN([ #include #include int main (){ const char *s; FILE *f; union { unsigned int i; unsigned char c[4]; } u; u.i=0x12345678; if (u.c[0]==0x78) s="little"; else s="big"; f=fopen("conf.endian", "w+"); if (!f) { printf("Could not create file conf.endian\n"); exit(1); } fprintf(f, "%s\n", s); if (fclose(f)) { printf("Could not close file.\n"); exit(1); } exit(0); } ], [aq_endian=`cat conf.endian`; AC_MSG_RESULT($aq_endian)], [AC_MSG_ERROR(Could not determine endianness)], [aq_endian="$1"; AC_MSG_RESULT([Crosscompiling, assuming $1])] ) rm -f conf.endian ]) gwenhywfar-4.15.2beta/m4/searchfiles.m40000644000175000017500000000157312364015347014626 00000000000000# $Id$ # (c) 2002 Martin Preuss # These functions search for files AC_DEFUN([AQ_SEARCH_FOR_PATH],[ dnl searches for a file in a path dnl $1 = file to search dnl $2 = paths to search in dnl returns the directory where the file is found (found_dir) found_dir="" ls=$1 ld="$2" for li in $ld; do case "$build" in *-win32*) fname="$li\\$ls" ;; *) fname="$li/$ls" ;; esac if test -r "$fname"; then found_dir="$li" break fi done ]) AC_DEFUN([AQ_SEARCH_FILES],[ dnl searches a dir for some files dnl $1 = path where to search dnl $2 = files to find dnl returns the name of the file found (found_file) found_file="" ls="$1" ld="$2" lf="" for li in $ld; do lf2="`ls -d ${ls}/${li} 2>/dev/null`" lf="$lf $lf2" done for li in $lf; do if test -r "$li"; then found_file=`basename "$li"` break fi done ]) gwenhywfar-4.15.2beta/m4/iconv.m40000644000175000017500000001375512364015347013461 00000000000000# iconv.m4 serial AM6 (gettext-0.16.2) dnl Copyright (C) 2000-2002, 2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) ]) AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) AC_CACHE_CHECK([for iconv], am_cv_func_iconv, [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_func_iconv=yes) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_lib_iconv=yes am_cv_func_iconv=yes) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_CACHE_CHECK([for working iconv], am_cv_func_iconv_works, [ dnl This tests against bugs in AIX 5.1 and HP-UX 11.11. am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi AC_TRY_RUN([ #include #include int main () { /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static const char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) return 1; } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) return 1; return 0; }], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no], [case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac]) LIBS="$am_save_LIBS" ]) case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function and it works.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST(LIBICONV) AC_SUBST(LTLIBICONV) ]) AC_DEFUN([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL(am_cv_proto_iconv, [ AC_TRY_COMPILE([ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif ], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` AC_MSG_RESULT([$]{ac_t:- }[$]am_cv_proto_iconv) AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, [Define as const if the declaration of iconv() needs const.]) fi ]) gwenhywfar-4.15.2beta/m4/lib-link.m40000644000175000017500000006304612364015347014042 00000000000000# lib-link.m4 serial 8 (gettext-0.15) dnl Copyright (C) 2001-2006 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_PREREQ(2.50) dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and dnl augments the CPPFLAGS variable. AC_DEFUN([AC_LIB_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) define([Name],[translit([$1],[./-], [___])]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ AC_LIB_LINKFLAGS_BODY([$1], [$2]) ac_cv_lib[]Name[]_libs="$LIB[]NAME" ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" ac_cv_lib[]Name[]_cppflags="$INC[]NAME" ]) LIB[]NAME="$ac_cv_lib[]Name[]_libs" LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" INC[]NAME="$ac_cv_lib[]Name[]_cppflags" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the dnl results of this search when this library appears as a dependency. HAVE_LIB[]NAME=yes undefine([Name]) undefine([NAME]) ]) dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode) dnl searches for libname and the libraries corresponding to explicit and dnl implicit dependencies, together with the specified include files and dnl the ability to compile and link the specified testcode. If found, it dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) define([Name],[translit([$1],[./-], [___])]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME dnl accordingly. AC_LIB_LINKFLAGS_BODY([$1], [$2]) dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, dnl because if the user has installed lib[]Name and not disabled its use dnl via --without-lib[]Name-prefix, he wants to use it. ac_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ ac_save_LIBS="$LIBS" LIBS="$LIBS $LIB[]NAME" AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no]) LIBS="$ac_save_LIBS" ]) if test "$ac_cv_lib[]Name" = yes; then HAVE_LIB[]NAME=yes AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.]) AC_MSG_CHECKING([how to link with lib[]$1]) AC_MSG_RESULT([$LIB[]NAME]) else HAVE_LIB[]NAME=no dnl If $LIB[]NAME didn't lead to a usable library, we don't need dnl $INC[]NAME either. CPPFLAGS="$ac_save_CPPFLAGS" LIB[]NAME= LTLIB[]NAME= fi AC_SUBST([HAVE_LIB]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) undefine([Name]) undefine([NAME]) ]) dnl Determine the platform dependent parameters needed to use rpath: dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator, dnl hardcode_direct, hardcode_minus_L. AC_DEFUN([AC_LIB_RPATH], [ dnl Tell automake >= 1.10 to complain if config.rpath is missing. m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" libext="$acl_cv_libext" shlibext="$acl_cv_shlibext" hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" hardcode_direct="$acl_cv_hardcode_direct" hardcode_minus_L="$acl_cv_hardcode_minus_L" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE(rpath, [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib$1-prefix], [ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib --without-lib$1-prefix don't search for lib$1 in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi ]) dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= if test $use_additional = yes; then if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi else if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi else if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" done dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) dnl For those cases where a variable contains several -L and -l options dnl referring to unknown libraries and directories, this macro determines the dnl necessary additional linker options for the runtime path. dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) dnl sets LDADDVAR to linker options needed together with LIBSVALUE. dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, dnl otherwise linking without libtool is assumed. AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], [ AC_REQUIRE([AC_LIB_RPATH]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) $1= if test "$enable_rpath" != no; then if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then dnl Use an explicit option to hardcode directories into the resulting dnl binary. rpathdirs= next= for opt in $2; do if test -n "$next"; then dir="$next" dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem"; then rpathdirs="$rpathdirs $dir" fi next= else case $opt in -L) next=yes ;; -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem"; then rpathdirs="$rpathdirs $dir" fi next= ;; *) next= ;; esac fi done if test "X$rpathdirs" != "X"; then if test -n ""$3""; then dnl libtool is used for linking. Use -R options. for dir in $rpathdirs; do $1="${$1}${$1:+ }-R$dir" done else dnl The linker is used for linking directly. if test -n "$hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user dnl must pass all path elements in one option. alldirs= for dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="$flag" else dnl The -rpath options are cumulative. for dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$dir" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="${$1}${$1:+ }$flag" done fi fi fi fi fi AC_SUBST([$1]) ]) gwenhywfar-4.15.2beta/m4/qt4.m40000644000175000017500000001430712364015347013045 00000000000000# $Id$ # (c) 2010 Martin Preuss # These functions search for QT4 AC_DEFUN([AQ_CHECK_QT4],[ dnl PREREQUISITES: dnl AQ_CHECK_OS must be called before this dnl IN: dnl nothing dnl OUT: dnl Variables: dnl have_qt4 - set to "yes" if QT4 exists dnl qt4_includes - path to includes dnl qt4_libs - path to libraries dnl qt4_uic - name and path of the uic tool dnl qt4_moc - name and path of the moc tool dnl Defines: dnl HAVE_QT4 dnl paths for qt4 includes AC_MSG_CHECKING(for qt4 includes) AC_ARG_WITH(qt4-includes, [ --with-qt4-includes=DIR uses qt4 includes from given dir], [local_qt4_includes="$withval"], [local_qt4_includes="\ $QTDIR/include \ /usr/include/qt4 \ /usr/local/include/qt4 \ /usr/lib/qt4/include \ /usr/local/lib/qt4/include \ /opt/qt4/include \ /usr/include/qt \ /usr/local/include/qt \ /usr/lib/qt/include \ /usr/local/lib/qt/include \ /usr/include \ /usr/local/include \ /opt/qt/include \ /usr/X11R6/include \ " ] ) if test -z "$qt4_includes"; then for i in $local_qt4_includes; do if test -z "$qt4_includes"; then qglobalh_paths="Qt QtCore" for q in $qglobalh_paths; do if test -f "$i/$q/qglobal.h"; then lv1=`grep -h "#define QT_VERSION_STR" $i/$q/qglobal.h` case $lv1 in *4.*) qt4_includes="-I$i -I$i/Qt -I$i/QtCore -I$i/QtGui" qt4_dir=`echo $i | ${SED} 's-/include.*--'` break; ;; esac fi done fi done fi if test -n "$qt4_includes"; then AC_MSG_RESULT($qt4_includes) else AC_MSG_RESULT(not found) fi # Check for x86_64 architecture; potentially set lib-directory suffix if test "$target_cpu" = "x86_64"; then libdirsuffix="64" else libdirsuffix="" fi dnl paths for qt4 libs AC_MSG_CHECKING(for qt4 libraries) AC_ARG_WITH(qt4-libs, [ --with-qt4-libs=DIR uses qt4 libs from given dir], [local_qt4_libs="$withval"], [local_qt4_libs="\ $qt4_dir/lib${libdirsuffix} \ $QTDIR/lib${libdirsuffix} \ $DEBIAN_MULTIARCH_DIRS \ /usr/lib/qt4 \ /usr/local/lib/qt4 \ /usr/lib/qt4/lib${libdirsuffix} \ /usr/local/lib/qt4/lib${libdirsuffix} \ /opt/qt4/lib${libdirsuffix} \ /usr/lib/qt \ /usr/local/lib/qt \ /usr/lib/qt/lib${libdirsuffix} \ /usr/local/lib/qt/lib${libdirsuffix} \ /usr/lib${libdirsuffix} \ /usr/lib${libdirsuffix}/qt4/lib \ /usr/lib${libdirsuffix}/qt-4.5/lib \ /usr/lib${libdirsuffix}/qt-4.6/lib \ /usr/local/lib${libdirsuffix} \ /opt/qt/lib${libdirsuffix} \ /usr/X11R6/lib${libdirsuffix} \ " ] ) # Determine the extension of a shared library; the variable # std_shrext comes from the AC_PROG_LIBTOOL macro. Copied from # libtool. # Shared library suffix. On linux this was set as # shrext_cmds='.so'; but on darwin it is actually a text command. eval std_shrext=\"$shrext_cmds\" if test -n "${std_shrext}"; then std_shrext='.so' fi qt_libname="QtGui" # This is the name of the qt library to search for. if test "x$OSYSTEM" = "xosx"; then qt_searchname="lib${qt_libname}.4.dylib" else qt_searchname="lib${qt_libname}${std_shrext}.4" fi if test -z "$qt4_libs"; then AQ_SEARCH_FOR_PATH([$qt_searchname],[$local_qt4_libs]) if test -n "$found_dir" ; then qt4_libs="-L$found_dir -l${qt_libname} -lQtCore" fi fi if test -n "$qt4_libs"; then AC_MSG_RESULT($qt4_libs) else AC_MSG_RESULT(not found) fi dnl paths for qt4 moc AC_MSG_CHECKING(for qt4 moc) if test -z "$qt4_moc"; then AC_ARG_WITH(qt4-moc, [ --with-qt4-moc=FILE uses the given qt4 moc], [qt4_moc="$withval"], [qt4_moc=""] ) fi if test -z "$qt4_moc"; then searchdir="\ $qt4_dir/bin \ $QTDIR/bin \ /usr/lib/qt4/bin \ /usr/local/lib/qt4/bin \ /opt/qt4/bin \ /usr/lib/qt/bin \ /usr/local/lib/qt/bin \ /usr/bin \ /usr/local/bin \ /opt/qt/bin \ /usr/X11R6/bin \ " # search for "moc-qt4" for f in $searchdir; do if test -x $f/moc-qt4; then qt4_moc="$f/moc-qt4" break fi done # fall back to "moc" if test -z "$qt4_moc"; then for f in $searchdir; do if test -x $f/moc; then qt4_moc="$f/moc" break fi done fi fi if test -n "$qt4_moc"; then AC_MSG_RESULT($qt4_moc) else AC_MSG_RESULT(not found) fi dnl paths for qt4 uic AC_MSG_CHECKING(for qt4 uic) if test -z "$qt4_uic"; then AC_ARG_WITH(qt4-uic, [ --with-qt4-uic=FILE uses the given qt4 uic], [qt4_uic="$withval"], [qt4_uic=""] ) searchdir="\ $qt4_dir/bin \ $QTDIR/bin \ /usr/lib/qt4/bin \ /usr/local/lib/qt4/bin \ /opt/qt4/bin \ /usr/lib/qt/bin \ /usr/local/lib/qt/bin \ /usr/bin \ /usr/local/bin \ /opt/qt/bin \ /usr/X11R6/bin \ " # search for "uic-qt4" for f in $searchdir; do if test -x $f/uic-qt4; then qt4_uic="$f/uic-qt4" break fi done # fall back to "uic" if test -z "$qt4_uic"; then for f in $searchdir; do if test -x $f/uic; then qt4_uic="$f/uic" break fi done fi fi if test -n "$qt4_uic"; then AC_MSG_RESULT($qt4_uic) else AC_MSG_RESULT(not found) fi # check if all necessary qt4 components where found if test -z "$qt4_includes" || \ test -z "$qt4_moc" || \ test -z "$qt4_uic" || \ test -z "$qt4_libs"; then qt4_libs="" qt4_moc="" qt4_uic="" qt4_includes="" have_qt4="no" AC_MSG_ERROR([ Compilation of QT applications is enabled but I could not find some Qt components (see which are missing in messages above). If you don't want to compile Qt4 applications please explicitly specify which GUIs you want to support using "--with-guis". ]) else dnl TODO: AC_TRY_RUN, check whether qversion.h has matching versions have_qt4="yes" AC_DEFINE(HAVE_QT4, 1, [whether Qt4 is available]) fi AS_SCRUB_INCLUDE(qt4_includes) AC_SUBST(qt4_libs) AC_SUBST(qt4_includes) AC_SUBST(qt4_moc) AC_SUBST(qt4_uic) ]) gwenhywfar-4.15.2beta/m4/Makefile.in0000644000175000017500000004123212634022413014125 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = m4 DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ EXTRA_DIST = \ acx_compile_warn.m4 \ as-scrub-include.m4 \ binreloc.m4 \ debugmode.m4 \ distri.m4 \ docpath.m4 \ endian.m4 \ iconv.m4 \ kde.m4 \ lib-prefix.m4 \ lib-link.m4 \ lib-ld.m4 \ os.m4 \ pcsc.m4 \ qt.m4 \ searchfiles.m4 \ ssl.m4 \ types.m4 \ windoze.m4 all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu m4/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu m4/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am sources: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/m4/lt~obsolete.m40000644000175000017500000001375612276417211014714 00000000000000# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) gwenhywfar-4.15.2beta/m4/windoze.m40000644000175000017500000002302612364015347014012 00000000000000# $Id$ # (c) 2004 Martin Preuss # These functions retrieve some important paths AC_DEFUN([AQ_WINDOZE_GETPATH], [ dnl IN: dnl - $1: type of path to get: dnl - windows: windows path dnl - system: windows/system directory dnl - home: users home directory dnl - $2: default value dnl OUT: dnl - aq_windoze_path: path retrieved dnl rm -f conf.winpath save_LIBS="${LIBS}" LIBS="${LIBS} -lshfolder" AC_TRY_RUN([ #include #include #include #include #include int main (){ char buffer[260]; const char *choice = "$1"; FILE *f; buffer[0]=0; if (strlen("$2")) { if (strlen("$2")>=sizeof(buffer)) { printf("path is too long ($2)\n"); exit(1); } strcpy(buffer, "$2"); } else { if (strcasecmp(choice, "windows")==0) { GetWindowsDirectory(buffer, sizeof(buffer)); } else if (strcasecmp(choice, "system")==0) { GetSystemDirectory(buffer, sizeof(buffer)); } else if (strcasecmp(choice, "home")==0) { GetWindowsDirectory(buffer, sizeof(buffer)); } else if (strcasecmp(choice, "program_files") == 0) { SHGetFolderPath(NULL, CSIDL_PROGRAM_FILES, NULL, 0, buffer); } else if (strcasecmp(choice, "common_appdata") == 0) { SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, 0, buffer); } else { printf("Unknown type \"$1\"\n"); exit(1); } } f=fopen("conf.winpath", "w+"); if (!f) { printf("Could not create file conf.winpath\n"); exit(1); } fprintf(f, "%s", buffer); if (fclose(f)) { printf("Could not close file.\n"); exit(1); } exit(0); } ], [aq_windoze_path="`cat conf.winpath`"], [AC_MSG_ERROR(Could not determine path for $1)], [aq_windoze_path="$2"; AC_MSG_RESULT([Crosscompiling, assuming $2])] ) LIBS="${save_LIBS}" rm -f conf.winpath ]) AC_DEFUN([AQ_WINDOZE_GETPATH_MINGW], [ dnl IN: dnl - $1: type of path to get: dnl - windows: windows path dnl - system: windows/system directory dnl - home: users home directory dnl - $2: default value dnl OUT: dnl - aq_windoze_path: path retrieved dnl rm -f conf.winpath LIBS="${LIBS} -lshfolder" AC_TRY_RUN([ #include #include #include #include #include int main (){ char buffer[260]; char buffer2[260+2]; const char *choice = "$1"; char *p; char *tp; FILE *f; int lastWasSlash; buffer[0]=0; if (strlen("$2")) { if (strlen("$2")>=sizeof(buffer)) { printf("path is too long ($2)\n"); exit(1); } strcpy(buffer, "$2"); } else { if (strcasecmp(choice, "windows")==0) { GetWindowsDirectory(buffer, sizeof(buffer)); } else if (strcasecmp(choice, "system")==0) { GetSystemDirectory(buffer, sizeof(buffer)); } else if (strcasecmp(choice, "home")==0) { GetWindowsDirectory(buffer, sizeof(buffer)); } else if (strcasecmp(choice, "program_files") == 0) { SHGetFolderPath(NULL, CSIDL_PROGRAM_FILES, NULL, 0, buffer); } else if (strcasecmp(choice, "common_appdata") == 0) { SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, 0, buffer); } else { printf("Unknown type \"$1\"\n"); exit(1); } } /* create mingw path */ tp=buffer2; p=buffer; if (strlen(buffer)>1) { if (buffer[1]==':') { *tp='/'; tp++; *tp=buffer[0]; tp++; p+=2; } } lastWasSlash=0; while(*p) { if (*p=='\\\\' || *p=='/') { if (!lastWasSlash) { *tp='/'; tp++; lastWasSlash=1; } } else { lastWasSlash=0; *tp=*p; tp++; } p++; } /* while */ *tp=0; f=fopen("conf.winpath", "w+"); if (!f) { printf("Could not create file conf.winpath\n"); exit(1); } fprintf(f, "%s", buffer2); if (fclose(f)) { printf("Could not close file.\n"); exit(1); } exit(0); } ], [aq_windoze_path=`cat conf.winpath`], [AC_MSG_ERROR(Could not determine path for $1)], [aq_windoze_path="$2"; AC_MSG_RESULT([Crosscompiling, assuming $2])] ) LIBS="${save_LIBS}" rm -f conf.winpath ]) AC_DEFUN([ACX_WINDOWS_PATHS],[ dnl IN: dnl - AC_CANONICAL_SYSTEM muste be called before dnl OUT: dnl Variables (subst): dnl WIN_PATH_HOME : path and name of the Windoze home folder dnl WIN_PATH_HOME_MINGW : path and name of the Windoze home folder dnl WIN_PATH_WINDOWS : path and name of the Windoze system folder dnl WIN_PATH_WINDOWS_MINGW : path and name of the Windoze system folder dnl WIN_PATH_SYSTEM : path and name of the Windoze folder dnl WIN_PATH_SYSTEM_MINGW : path and name of the Windoze folder dnl WIN_PATH_PROGRAM_FILES dnl WIN_PATH_PROGRAM_FILES_MINGW dnl WIN_PATH_COMMON_APPDATA dnl WIN_PATH_COMMON_APPDATA_MINGW dnl Defines: dnl WIN_PATH_HOME : path and name of the Windoze home folder dnl WIN_PATH_WINDOWS : path and name of the Windoze system folder dnl WIN_PATH_SYSTEM : path and name of the Windoze folder dnl WIN_PATH_PROGRAM_FILES : path of the program files folder dnl WIN_PATH_COMMON_APPDATA : The directory containing application data for all users # presets AC_ARG_WITH(home-path, [ --with-home-path=DIR specify the home directory for a user], [aq_windoze_path_home="$withval"]) AC_ARG_WITH(system-path, [ --with-system-path=DIR specify the system directory], [aq_windoze_path_system="$withval"]) AC_ARG_WITH(windows-path, [ --with-windows-path=DIR specify the windows directory], [aq_windoze_path_windows="$withval"]) # home directory AC_MSG_CHECKING([for windoze home path (program)]) AC_CACHE_VAL(gwenhywfar_cv_path_home, [ AQ_WINDOZE_GETPATH(home, [$aq_windoze_path_home]) gwenhywfar_cv_path_home="$aq_windoze_path" ]) WIN_PATH_HOME="$gwenhywfar_cv_path_home" AC_MSG_RESULT([$WIN_PATH_HOME]) AC_MSG_CHECKING([for windoze home path (mingw)]) AC_CACHE_VAL(gwenhywfar_cv_path_home_mingw, [ AQ_WINDOZE_GETPATH_MINGW(home, [$aq_windoze_path_home]) gwenhywfar_cv_path_home_mingw="$aq_windoze_path" ]) WIN_PATH_HOME_MINGW="$gwenhywfar_cv_path_home_mingw" AC_MSG_RESULT([$WIN_PATH_HOME_MINGW]) # windows directory AC_MSG_CHECKING([for windoze windows path (program)]) AC_CACHE_VAL(gwenhywfar_cv_path_windows, [ AQ_WINDOZE_GETPATH(windows, [$aq_windoze_path_windows]) gwenhywfar_cv_path_windows="$aq_windoze_path" ]) WIN_PATH_WINDOWS="$gwenhywfar_cv_path_windows" AC_MSG_RESULT([$WIN_PATH_WINDOWS]) AC_MSG_CHECKING([for windoze windows path (mingw)]) AC_CACHE_VAL(gwenhywfar_cv_path_windows_mingw, [ AQ_WINDOZE_GETPATH_MINGW(windows, [$aq_windoze_path_windows]) gwenhywfar_cv_path_windows_mingw="$aq_windoze_path" ]) WIN_PATH_WINDOWS_MINGW="$gwenhywfar_cv_path_windows_mingw" AC_MSG_RESULT([$WIN_PATH_WINDOWS_MINGW]) # windows system directory AC_MSG_CHECKING([for windoze system path (program)]) AC_CACHE_VAL(gwenhywfar_cv_path_system, [ AQ_WINDOZE_GETPATH(system, [$aq_windoze_path_system]) gwenhywfar_cv_path_system="$aq_windoze_path" ]) WIN_PATH_SYSTEM="$gwenhywfar_cv_path_system" AC_MSG_RESULT([$WIN_PATH_SYSTEM]) AC_MSG_CHECKING([for windoze system path (mingw)]) AC_CACHE_VAL(gwenhywfar_cv_path_system_mingw, [ AQ_WINDOZE_GETPATH_MINGW(system, [$aq_windoze_path_system]) gwenhywfar_cv_path_system_mingw="$aq_windoze_path" ]) WIN_PATH_SYSTEM_MINGW="$gwenhywfar_cv_path_system_mingw" AC_MSG_RESULT([$WIN_PATH_SYSTEM_MINGW]) # program files directory AC_MSG_CHECKING([for program files path (program)]) AC_CACHE_VAL(gwenhywfar_cv_path_programfiles, [ AQ_WINDOZE_GETPATH(program_files, [$aq_windoze_path_system]) gwenhywfar_cv_path_programfiles="$aq_windoze_path" ]) WIN_PATH_PROGRAM_FILES="$gwenhywfar_cv_path_programfiles" AC_MSG_RESULT([$WIN_PATH_PROGRAM_FILES]) AC_MSG_CHECKING([for program files path (mingw)]) AC_CACHE_VAL(gwenhywfar_cv_path_programfiles_mingw, [ AQ_WINDOZE_GETPATH_MINGW(program_files, [$aq_windoze_path_system]) gwenhywfar_cv_path_programfiles_mingw="$aq_windoze_path" ]) WIN_PATH_PROGRAM_FILES_MINGW="$gwenhywfar_cv_path_programfiles_mingw" AC_MSG_RESULT([$WIN_PATH_PROGRAM_FILES_MINGW]) # common application data directory AC_MSG_CHECKING([for common app data path (program)]) AC_CACHE_VAL(gwenhywfar_cv_path_commonappdata, [ AQ_WINDOZE_GETPATH(common_appdata, [$aq_windoze_path_system]) gwenhywfar_cv_path_commonappdata="$aq_windoze_path" ]) WIN_PATH_COMMON_APPDATA="$gwenhywfar_cv_path_commonappdata" AC_MSG_RESULT([$WIN_PATH_COMMON_APPDATA]) AC_MSG_CHECKING([for common app data path (mingw)]) AC_CACHE_VAL(gwenhywfar_cv_path_commonappdata_mingw, [ AQ_WINDOZE_GETPATH_MINGW(common_appdata, [$aq_windoze_path_system]) gwenhywfar_cv_path_commonappdata_mingw="$aq_windoze_path" ]) WIN_PATH_COMMON_APPDATA_MINGW="$gwenhywfar_cv_path_commonappdata_mingw" AC_MSG_RESULT([$WIN_PATH_COMMON_APPDATA_MINGW]) # finish variables AC_SUBST(WIN_PATH_HOME) AC_DEFINE_UNQUOTED(WIN_PATH_HOME, "$WIN_PATH_HOME", [home path]) AC_SUBST(WIN_PATH_HOME_MINGW) AC_SUBST(WIN_PATH_WINDOWS) AC_DEFINE_UNQUOTED(WIN_PATH_WINDOWS, "$WIN_PATH_WINDOWS", [windows path]) AC_SUBST(WIN_PATH_WINDOWS_MINGW) AC_SUBST(WIN_PATH_SYSTEM) AC_DEFINE_UNQUOTED(WIN_PATH_SYSTEM, "$WIN_PATH_SYSTEM", [system path]) AC_SUBST(WIN_PATH_SYSTEM_MINGW) AC_SUBST(WIN_PATH_PROGRAM_FILES) AC_DEFINE_UNQUOTED(WIN_PATH_PROGRAM_FILES, "$WIN_PATH_PROGRAM_FILES", [program files path]) AC_SUBST(WIN_PATH_PROGRAM_FILES_MINGW) AC_SUBST(WIN_PATH_COMMON_APPDATA) AC_DEFINE_UNQUOTED(WIN_PATH_COMMON_APPDATA, "$WIN_PATH_COMMON_APPDATA", [common app data path]) AC_SUBST(WIN_PATH_COMMON_APPDATA_MINGW) ]) gwenhywfar-4.15.2beta/m4/ltoptions.m40000644000175000017500000003007312276417211014364 00000000000000# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) gwenhywfar-4.15.2beta/m4/Makefile.am0000644000175000017500000000044312364015347014123 00000000000000 EXTRA_DIST= \ acx_compile_warn.m4 \ as-scrub-include.m4 \ binreloc.m4 \ debugmode.m4 \ distri.m4 \ docpath.m4 \ endian.m4 \ iconv.m4 \ kde.m4 \ lib-prefix.m4 \ lib-link.m4 \ lib-ld.m4 \ os.m4 \ pcsc.m4 \ qt.m4 \ searchfiles.m4 \ ssl.m4 \ types.m4 \ windoze.m4 sources: gwenhywfar-4.15.2beta/m4/libtool.m40000644000175000017500000106011112276417211013772 00000000000000# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi _LT_TAGVAR(link_all_deplibs, $1)=no else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS gwenhywfar-4.15.2beta/m4/docpath.m40000644000175000017500000000100312364015347013744 00000000000000# $Id$ # (c) 2002 Martin Preuss # This function checks for the output path for the documentation AC_DEFUN([AQ_DOCPATH],[ dnl PREREQUISITES: dnl none dnl IN: dnl nothing dnl OUT: dnl Variables: dnl docpath: Output path for the documentation (subst) dnl Defines: # check for docpath AC_MSG_CHECKING(for docpath) AC_ARG_WITH(docpath, [ --with-docpath=DIR where to store the apidoc], [docpath="$withval"], [docpath="apidoc"]) AC_SUBST(docpath) AC_MSG_RESULT($docpath) ]) gwenhywfar-4.15.2beta/m4/debugmode.m40000644000175000017500000000110012364015347014253 00000000000000# $Id$ # (c) 2002 Martin Preuss # This function checks for the debugmode AC_DEFUN([AQ_DEBUGMODE],[ dnl IN: dnl nothing dnl OUT: dnl Variables: dnl DEBUGMODE: number of the debug level (subst) dnl Defines: dnl DEBUGMODE: number of the debug level (subst) dnl check for debugmode AC_MSG_CHECKING(for debug mode) AC_ARG_WITH(debug-mode, [ --with-debug-mode=MODE debug mode], [DEBUGMODE="$withval"], [DEBUGMODE="0"]) AC_SUBST(DEBUGMODE) AC_DEFINE_UNQUOTED(DEBUGMODE,$DEBUGMODE,[debug mode to be used]) AC_MSG_RESULT($DEBUGMODE) ]) gwenhywfar-4.15.2beta/m4/as-scrub-include.m40000644000175000017500000000201412364015347015465 00000000000000dnl as-scrub-include.m4 0.0.1 dnl autostars m4 macro for scrubbing CFLAGS of system include dirs dnl because gcc 3.x complains about including system including dirs dnl dnl thomas@apestaart.org dnl dnl This macro uses output of cpp -v and expects it to contain text that dnl looks a little bit like this: dnl #include <...> search starts here: dnl /usr/local/include dnl /usr/lib/gcc-lib/i386-redhat-linux/3.2/include dnl /usr/include dnl End of search list. dnl AS_SCRUB_INCLUDE(VAR) dnl example dnl AS_SCRUB_INCLUDE(CFLAGS) dnl will remove all system include dirs from the given CFLAGS AC_DEFUN([AS_SCRUB_INCLUDE], [ GIVEN_CFLAGS=$[$1] INCLUDE_DIRS=`echo | cpp -v 2>&1` dnl remove everything from this output between the "starts here" and "End of" dnl line INCLUDE_DIRS=`echo $INCLUDE_DIRS | sed -e 's/.*<...> search starts here://' | sed -e 's/End of search list.*//'` for dir in $INCLUDE_DIRS; do GIVEN_CFLAGS=$(echo $GIVEN_CFLAGS | sed -e "s;-I$dir ;;" | sed -e "s;-I$dir$;;") done [$1]=$GIVEN_CFLAGS ]) gwenhywfar-4.15.2beta/m4/types.m40000644000175000017500000001001512364015347013471 00000000000000# $Id$ # (c) 2004 Martin Preuss # These functions check for special types AC_DEFUN([AQ_TYPE_UINT32],[ dnl PREREQUISITES: dnl none dnl IN: dnl - default type for crosscompiling dnl OUT: dnl Variables: dnl aq_type_uint32 dnl Defines: # check for type to use AC_MSG_CHECKING(for UINT32 type) rm -f conf.uint32 AC_TRY_RUN([ #include #include int main (){ const char *s; FILE *f; if (sizeof(unsigned int)==4) s="unsigned int"; else if (sizeof(unsigned short)==4) s="unsigned short"; else if (sizeof(unsigned long)==4) s="unsigned long"; else if (sizeof(unsigned long long)==4) s="unsigned long long"; else { printf("Could not determine type for UINT32"); exit(1); } f=fopen("conf.uint32", "w+"); if (!f) { printf("Could not create file conf.uint32\n"); exit(1); } fprintf(f, "%s\n", s); if (fclose(f)) { printf("Could not close file.\n"); exit(1); } exit(0); } ], [aq_type_uint32=`cat conf.uint32`; AC_MSG_RESULT($aq_type_uint32)], [AC_MSG_ERROR(Could not determine type)], [aq_type_uint32="$1"; AC_MSG_RESULT([Crosscompiling, assuming $1])] ) rm -f conf.uint32 # check for template to use AC_MSG_CHECKING(for UINT32 template) rm -f conf.uint32 AC_TRY_RUN([ #include #include int main (){ const char *s; FILE *f; if (sizeof(unsigned int)==4) s="%u"; else if (sizeof(unsigned short)==4) s="%hu"; else if (sizeof(unsigned long)==4) s="%lu"; else if (sizeof(unsigned long long)==4) s="%llu"; else { printf("Could not determine template for UINT32"); exit(1); } f=fopen("conf.uint32", "w+"); if (!f) { printf("Could not create file conf.uint32\n"); exit(1); } fprintf(f, "%s\n", s); if (fclose(f)) { printf("Could not close file.\n"); exit(1); } exit(0); } ], [aq_type_tmpl_uint32=`cat conf.uint32`; AC_MSG_RESULT($aq_type_tmpl_uint32)], [AC_MSG_ERROR(Could not determine type)], [aq_type_tmpl_uint32="$1"; AC_MSG_RESULT([Crosscompiling, assuming $1])] ) rm -f conf.uint32 ]) AC_DEFUN([AQ_TYPE_UINT64],[ dnl PREREQUISITES: dnl none dnl IN: dnl - default type for crosscompiling dnl OUT: dnl Variables: dnl aq_type_uint64 dnl Defines: # check for type to use AC_MSG_CHECKING(for UINT64 type) rm -f conf.uint64 AC_TRY_RUN([ #include #include int main (){ const char *s; FILE *f; if (sizeof(unsigned int)==8) s="unsigned int"; else if (sizeof(unsigned short)==8) s="unsigned short"; else if (sizeof(unsigned long)==8) s="unsigned long"; else if (sizeof(unsigned long long)==8) s="unsigned long long"; else { printf("Could not determine type for UINT64"); exit(1); } f=fopen("conf.uint64", "w+"); if (!f) { printf("Could not create file conf.uint64\n"); exit(1); } fprintf(f, "%s\n", s); if (fclose(f)) { printf("Could not close file.\n"); exit(1); } exit(0); } ], [aq_type_uint64=`cat conf.uint64`; AC_MSG_RESULT($aq_type_uint64)], [AC_MSG_ERROR(Could not determine type)], [aq_type_uint64="$1"; AC_MSG_RESULT([Crosscompiling, assuming $1])] ) rm -f conf.uint64 # check for template to use AC_MSG_CHECKING(for UINT64 template) rm -f conf.uint64 AC_TRY_RUN([ #include #include int main (){ const char *s; FILE *f; if (sizeof(unsigned int)==8) s="%u"; else if (sizeof(unsigned short)==8) s="%hu"; else if (sizeof(unsigned long)==8) s="%lu"; else if (sizeof(unsigned long long)==8) s="%llu"; else { printf("Could not determine template for UINT64"); exit(1); } f=fopen("conf.uint64", "w+"); if (!f) { printf("Could not create file conf.uint64\n"); exit(1); } fprintf(f, "%s\n", s); if (fclose(f)) { printf("Could not close file.\n"); exit(1); } exit(0); } ], [aq_type_tmpl_uint64=`cat conf.uint64`; AC_MSG_RESULT($aq_type_tmpl_uint64)], [AC_MSG_ERROR(Could not determine type)], [aq_type_tmpl_uint64="$1"; AC_MSG_RESULT([Crosscompiling, assuming $1])] ) rm -f conf.uint64 ]) gwenhywfar-4.15.2beta/m4/lib-ld.m40000644000175000017500000000653112364015347013500 00000000000000# lib-ld.m4 serial 3 (gettext-0.13) dnl Copyright (C) 1996-2003 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Subroutines of libtool.m4, dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision dnl with libtool.m4. dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. AC_DEFUN([AC_LIB_PROG_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld, [# I'd rather use --version here, but apparently some GNU ld's only accept -v. case `$LD -v 2>&1 conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by GCC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]* | [A-Za-z]:[\\/]*)] [re_direlt='/[^/][^/]*/\.\./'] # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(acl_cv_path_LD, [if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi]) LD="$acl_cv_path_LD" if test -n "$LD"; then AC_MSG_RESULT($LD) else AC_MSG_RESULT(no) fi test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) AC_LIB_PROG_LD_GNU ]) gwenhywfar-4.15.2beta/m4/distri.m40000644000175000017500000000564012364015347013633 00000000000000 # distri.m4 # (c) 2006 Martin Preuss # This function checks for the Linux distribution AC_DEFUN([AQ_DISTRIBUTION], [ dnl searches for libusb dnl Arguments: none dnl Returns: aq_distrib_name (name of the Linux distribution) dnl aq_distrib_tag (tag for packages, like "suse") dnl aq_distrib_version (not for Debian-like systems) AC_MSG_CHECKING(for preselected distribution name) if test -n "$aq_distrib_name"; then AC_MSG_RESULT([yes, $aq_distrib_name]) else AC_MSG_RESULT([no, will have to determine it]) aq_distrib_name="" aq_distrib_version="" aq_distrib_tag="" # Debian-style AC_MSG_CHECKING(whether this is a Debian derivate) case `basename $CC` in gcc | gcc-* | *-gcc | *-gcc-*) debtype=["` ${CC} --version | head -1`"] case $debtype in *\(Debian\ *) aq_distrib_name="Debian" aq_distrib_tag="debian" AC_MSG_RESULT([yes, $aq_distrib_name]) ;; *\(Ubuntu\ * | *\(KUbuntu\ *) aq_distrib_name="Ubuntu" aq_distrib_tag="ubuntu" AC_MSG_RESULT([yes, $aq_distrib_name]) ;; *) AC_MSG_RESULT([no]) ;; esac ;; *) AC_MSG_RESULT([no]) ;; esac fi if test -z "$aq_distrib_name"; then # RPM-style AC_MSG_CHECKING(whether this is an RPM distribution) RPM_COMMAND="`which rpm`" aq_distrib_name="" aq_distrib_tag="" aq_distrib_version="" if test -n "${RPM_COMMAND}"; then if test -x "${RPM_COMMAND}"; then if test -e "/etc/mandriva-release"; then aq_distrib_name="mandriva" aq_distrib_tag="mdk" aq_distrib_version="`rpm -q --queryformat='%{VERSION}' mandriva-release 2>/dev/null`" AC_MSG_RESULT([yes, $aq_distrib_name]) elif test -e "/etc/mandrake-release"; then aq_distrib_name="mandrake" aq_distrib_tag="mdk" aq_distrib_version="`rpm -q --queryformat='%{VERSION}' mandrake-release 2>/dev/null`" AC_MSG_RESULT([yes, $aq_distrib_name]) elif test -e "/etc/SuSE-release"; then aq_distrib_name="suse" aq_distrib_tag="suse" read v1 v2 v3 v4 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) gwenhywfar-4.15.2beta/m4/ltversion.m40000644000175000017500000000126212276417211014354 00000000000000# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) gwenhywfar-4.15.2beta/m4/ssl.m40000644000175000017500000000624412364015347013137 00000000000000# $Id$ # (c) 2002 Martin Preuss # This function checks if SSL is wanted and locates it AC_DEFUN([AQ_CHECK_SSL],[ dnl PREREQUISITES: dnl - AQ_CHECK_OS must be called before dnl - For windows, AQ_WINDOZE must be called beforehand dnl IN: dnl nothing dnl OUT: dnl Variables: dnl ssl_libraries: Path to the SSL libraries (subst) dnl ssl_lib: SSL libraries to link against (subst) dnl ssl_includes: Path to the SSL includes (subst) dnl ssl_available: "yes" if OpenSSL is available dnl Defines: AC_REQUIRE([AQ_CHECK_OS]) dnl check if ssl is desired AC_MSG_CHECKING(if OpenSSL should be used) AC_ARG_ENABLE(ssl, [ --enable-ssl enable SSL features (default=yes)], enable_ssl="$enableval", enable_ssl="yes") AC_MSG_RESULT($enable_ssl) if test "$enable_ssl" != "no"; then dnl ******* openssl includes *********** AC_MSG_CHECKING(for openssl includes) AC_ARG_WITH(openssl-includes, [ --with-openssl-includes=DIR specify include directory for openssl includes], [ssl_search_inc_dirs="$withval"], [ssl_search_inc_dirs="/usr/include\ /usr/local/include\ /usr/local/ssl/include\ /usr/ssl/include\ /more/include\ /sw/include"\ ]) dnl search for ssl AQ_SEARCH_FOR_PATH([openssl/des.h],[$ssl_search_inc_dirs]) if test -z "$found_dir" ; then AC_MSG_RESULT(not found) else ssl_includes="-I$found_dir" AC_MSG_RESULT($ssl_includes) fi dnl ******* openssl lib *********** AC_MSG_CHECKING(for openssl libs) AC_ARG_WITH(openssl-libs, [ --with-openssl-libs=DIR specify lib directory for openssl libraries], [ssl_search_lib_dirs="$withval"], [ssl_search_lib_dirs="/usr/lib \ /usr/local/lib \ /usr/lib/ssl/lib \ /usr/lib/openssl/lib \ /usr/local/ssl/lib \ /usr/local/openssl/lib \ /sw/lib \ /lib"]) dnl search for openssl libs if test "$OSYSTEM" != "windows" ; then dnl POSIX systems for d in $ssl_search_lib_dirs; do # Look for the library files; the dylib one is for Darwin/Mac OS. AQ_SEARCH_FILES("$d", [libssl.so libssl.so.* libssl.a libssl.dylib]) if test -n "$found_file" ; then ssl_libraries="-L$d" ssl_lib="-lssl -lcrypto" break fi done AC_MSG_RESULT($ssl_libraries ${ssl_lib}) else dnl Windoze systems # Tests will be ignored if ssl_lib/ssl_libraries have been set # externally if test -z "$ssl_libraries" -o -z "$ssl_lib" ; then for d in $ssl_search_lib_dirs; do # Look for library (linker) files that are available in # gnuwin32's openssl packages AQ_SEARCH_FILES("$d", [libssl.dll.a libssl.dll libssl.a]) if test -n "$found_file" ; then ssl_libraries="-L$d" ssl_lib="-lssl -lcrypto" break fi done fi AC_MSG_RESULT(${ssl_libraries} ${ssl_lib}) fi AC_MSG_CHECKING(whether openssl is usable) if test -z "$ssl_libraries" -o -z "$ssl_lib" -o -z "$ssl_includes"; then ssl_available="no" else ssl_available="yes" fi AC_MSG_RESULT($ssl_available) # end of "if enable-ssl" fi AC_SUBST(ssl_includes) AC_SUBST(ssl_libraries) AC_SUBST(ssl_lib) ]) gwenhywfar-4.15.2beta/m4/README0000644000175000017500000000027112364015347012746 00000000000000# $Id$ # (c) 2002 Martin Preuss This folder includes some usefull macros for the automake/autoconf tools. This dramatically simplifies the "configure.in" file. gwenhywfar-4.15.2beta/m4/lib-prefix.m40000644000175000017500000001503612364015347014376 00000000000000# lib-prefix.m4 serial 5 (gettext-0.15) dnl Copyright (C) 2001-2005 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't dnl require excessive bracketing. ifdef([AC_HELP_STRING], [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], [AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed dnl to access previously installed libraries. The basic assumption is that dnl a user will want packages to use other packages he previously installed dnl with the same --prefix option. dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate dnl libraries, but is otherwise very convenient. AC_DEFUN([AC_LIB_PREFIX], [ AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib-prefix], [ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib --without-lib-prefix don't search for libraries in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi ]) if test $use_additional = yes; then dnl Potentially add $additional_includedir to $CPPFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's already present in $CPPFLAGS, dnl 3. if it's /usr/local/include and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= for x in $CPPFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $CPPFLAGS. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" fi fi fi fi dnl Potentially add $additional_libdir to $LDFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's already present in $LDFLAGS, dnl 3. if it's /usr/local/lib and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= for x in $LDFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LDFLAGS. LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" fi fi fi fi fi ]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" ]) dnl AC_LIB_PREPARE_MULTILIB creates a variable acl_libdirstem, containing dnl the basename of the libdir, either "lib" or "lib64". AC_DEFUN([AC_LIB_PREPARE_MULTILIB], [ dnl There is no formal standard regarding lib and lib64. The current dnl practice is that on a system supporting 32-bit and 64-bit instruction dnl sets or ABIs, 64-bit libraries go under $prefix/lib64 and 32-bit dnl libraries go under $prefix/lib. We determine the compiler's default dnl mode by looking at the compiler's library search path. If at least dnl of its elements ends in /lib64 or points to a directory whose absolute dnl pathname ends in /lib64, we assume a 64-bit ABI. Otherwise we use the dnl default, namely "lib". acl_libdirstem=lib searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ]) gwenhywfar-4.15.2beta/m4/pcsc.m40000644000175000017500000000532512364015347013265 00000000000000# $Id$ # (c) 2002 Martin Preuss # This function check if PC/SC is wanted AC_DEFUN([AQ_CHECK_PCSC],[ dnl PREREQUISITES: dnl - AQ_CHECK_OS must becalled before dnl IN: dnl nothing dnl OUT: dnl Variables: dnl pcsc_libraries: Path to the SSL libraries dnl pcsc_lib: SSL libraries to link against dnl pcsc_includes: Path to the PC/SC includes dnl Defines: dnl check if pcsc is desired if test "$OSYSTEM" != "windows" ; then AC_MSG_CHECKING(if PC/SC should be used) AC_ARG_ENABLE(pcsc, [ --enable-pcsc enable PC/SC driver (default=yes)], enable_pcsc="$enableval", enable_pcsc="yes") AC_MSG_RESULT($enable_pcsc) if test "$enable_pcsc" != "no"; then dnl ******* pcsc includes *********** AC_MSG_CHECKING(for pcsc includes) if test "$OSYSTEM" != "windows" ; then AC_ARG_WITH(pcsc-includes, [ --with-pcsc-includes=DIR adds pcsc include path], [pcsc_search_inc_dirs="$withval"], [pcsc_search_inc_dirs="/usr/include\ /usr/local/include\ /usr/local/pcsc/include\ /usr/pcsc/include\ "]) dnl search for pcsc AQ_SEARCH_FOR_PATH([winscard.h],[$pcsc_search_inc_dirs]) if test -n "$found_dir" ; then pcsc_includes="-I$found_dir" fi AC_MSG_RESULT($pcsc_includes) else AC_MSG_RESULT(builtin winscard.h) fi dnl ******* pcsc lib *********** AC_MSG_CHECKING(for pcsc libs) AC_ARG_WITH(openpcsc-libname, [ --with-openpcsc-libname=NAME specify the name of the pcsc library], [pcsc_search_lib_names="$withval"], [pcsc_search_lib_names="libpcsclite.so \ libpcsclite.so.* \ libpcsc.a"]) AC_ARG_WITH(openpcsc-libs, [ --with-openpcsc-libs=DIR adds openpcsc library path], [pcsc_search_lib_dirs="$withval"], [pcsc_search_lib_dirs="/usr/lib \ /usr/local/lib \ /usr/lib/pcsc/lib \ /usr/local/pcsc/lib \ /lib"]) dnl search for pcsc libs for d in $pcsc_search_lib_dirs; do AQ_SEARCH_FILES("$d",$pcsc_search_lib_names) if test -n "$found_file" ; then pcsc_libraries="-L$d" pcsc_lib="-l`echo $found_file | sed 's/lib//;s/\.so*//;s/\.a//'`" break fi done if test -z "$pcsc_libraries" -o -z "$pcsc_lib" -o -z "$pcsc_includes"; then AC_MSG_WARN(No pcsc libraries found, SCard driver will not be available.) else AC_MSG_RESULT($pcsc_libraries ${pcsc_lib}) fi # end of "if enable-pcsc" fi #end of if windows fi AC_SUBST(pcsc_includes) AC_SUBST(pcsc_libraries) AC_SUBST(pcsc_lib) ]) gwenhywfar-4.15.2beta/INSTALL0000644000175000017500000002203012364015347012574 00000000000000Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. (Caching is disabled by default to prevent problems with accidental use of stale cache files.) If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You only need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not support the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the `--target=TYPE' option to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc will cause the specified gcc to be used as the C compiler (unless it is overridden in the site shell script). `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. gwenhywfar-4.15.2beta/compile0000755000175000017500000001624512261335263013132 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2013 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gwenhywfar-4.15.2beta/gui/0000755000175000017500000000000012643267241012414 500000000000000gwenhywfar-4.15.2beta/gui/testdialogs/0000755000175000017500000000000012643267241014736 500000000000000gwenhywfar-4.15.2beta/gui/testdialogs/dlg_test.h0000644000175000017500000000023012364015347016625 00000000000000 #ifndef DLG_TEST_H #define DLG_TEST_H #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *Dlg_Test1_new(); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/gui/testdialogs/dlg_test2.h0000644000175000017500000000023212364015347016711 00000000000000 #ifndef DLG_TEST2_H #define DLG_TEST2_H #ifdef __cplusplus extern "C" { #endif GWEN_DIALOG *Dlg_Test2_new(); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/gui/testdialogs/Makefile.in0000644000175000017500000005453512634022413016725 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = gui/testdialogs DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgwengui_test_la_DEPENDENCIES = \ $(top_builddir)/src/$(gwenhywfar_internal_libname) am_libgwengui_test_la_OBJECTS = dlg_test.lo dlg_test2.lo libgwengui_test_la_OBJECTS = $(am_libgwengui_test_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgwengui_test_la_SOURCES) DIST_SOURCES = $(libgwengui_test_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ -DMEDIAPATH=\"$(ABSMEDIAPATH)\" DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = -I$(gwenhywfar_symlinkdir) ABSMEDIAPATH = $(abs_srcdir) noinst_LTLIBRARIES = libgwengui-test.la libgwengui_test_la_SOURCES = \ dlg_test.c \ dlg_test2.c libgwengui_test_la_LIBADD = $(top_builddir)/src/$(gwenhywfar_internal_libname) noinst_HEADERS = \ dlg_test.h \ dlg_test2.h EXTRA_DIST = \ dlg_test.dlg \ disk.png all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gui/testdialogs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gui/testdialogs/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgwengui-test.la: $(libgwengui_test_la_OBJECTS) $(libgwengui_test_la_DEPENDENCIES) $(EXTRA_libgwengui_test_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgwengui_test_la_OBJECTS) $(libgwengui_test_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_test.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_test2.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/gui/testdialogs/disk.png0000644000175000017500000000030212364015347016307 00000000000000‰PNG  IHDR szzô pHYs a Äî–@ľtIDATX…c` Ń"""ţÓÚŇ+VŔíe˘ľe„Ŕ¨F@‘–/Ď`Xž #endif #include #include #include #include #include #include static int GWENHYWFAR_CB _gwenGuiSignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { fprintf(stderr, "Received event %d from widget [%s]\n", t, sender); switch(t) { case GWEN_DialogEvent_TypeInit: fprintf(stderr, "Init\n"); GWEN_Dialog_SetCharProperty(dlg, "button1", GWEN_DialogProperty_Title, 0, "Click this button to close", 0); GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, 640, 0); GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, 480, 0); break; case GWEN_DialogEvent_TypeFini: fprintf(stderr, "Fini\n"); break; case GWEN_DialogEvent_TypeValueChanged: fprintf(stderr, "ValueChanged\n"); if (strcasecmp(sender, "listbox1")==0) { fprintf(stderr, "Selected list entry %d\n", GWEN_Dialog_GetIntProperty(dlg, "listbox1", GWEN_DialogProperty_Value, 0, -1)); } break; case GWEN_DialogEvent_TypeActivated: fprintf(stderr, "Activated\n"); if (strcasecmp(sender, "button1")==0) return GWEN_DialogEvent_ResultAccept; break; case GWEN_DialogEvent_TypeEnabled: fprintf(stderr, "Enabled\n"); break; case GWEN_DialogEvent_TypeDisabled: fprintf(stderr, "Disabled\n"); break; case GWEN_DialogEvent_TypeClose: fprintf(stderr, "Close\n"); return GWEN_DialogEvent_ResultNotHandled; case GWEN_DialogEvent_TypeLast: fprintf(stderr, "Last, ignored\n"); return GWEN_DialogEvent_ResultNotHandled; } return GWEN_DialogEvent_ResultHandled; } GWEN_DIALOG *Dlg_Test2_new() { GWEN_DIALOG *dlg; int rv; const char *s; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); s=getenv("DIALOG_DIR"); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); else GWEN_Buffer_AppendString(tbuf, MEDIAPATH); dlg=GWEN_Dialog_new("dlg_test2"); GWEN_Dialog_SetSignalHandler(dlg, _gwenGuiSignalHandler); GWEN_Dialog_AddMediaPath(dlg, MEDIAPATH); /* read dialog from dialog description file */ GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S "dlg_test2.dlg"); rv=GWEN_Dialog_ReadXmlFile(dlg, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d).", rv); GWEN_Dialog_free(dlg); return NULL; } /* done */ return dlg; } gwenhywfar-4.15.2beta/gui/testdialogs/dlg_test.dlg0000644000175000017500000001513312364015347017154 00000000000000 gwenhywfar-4.15.2beta/gui/testdialogs/Makefile.am0000644000175000017500000000056612364015347016717 00000000000000INCLUDES=-I$(gwenhywfar_symlinkdir) ABSMEDIAPATH=$(abs_srcdir) DEFS+=-DMEDIAPATH=\"$(ABSMEDIAPATH)\" noinst_LTLIBRARIES=libgwengui-test.la libgwengui_test_la_SOURCES = \ dlg_test.c \ dlg_test2.c libgwengui_test_la_LIBADD = $(top_builddir)/src/$(gwenhywfar_internal_libname) noinst_HEADERS=\ dlg_test.h \ dlg_test2.h EXTRA_DIST=\ dlg_test.dlg \ disk.png gwenhywfar-4.15.2beta/gui/testdialogs/dlg_test.c0000644000175000017500000002471612530645242016635 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include static int GWENHYWFAR_CB _gwenGuiSignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { fprintf(stderr, "Received event %d from widget [%s]\n", t, sender); switch(t) { case GWEN_DialogEvent_TypeInit: fprintf(stderr, "Init\n"); GWEN_Dialog_SetCharProperty(dlg, "combo1", GWEN_DialogProperty_AddValue, 0, "Erster Text in Combo1", 0); GWEN_Dialog_SetCharProperty(dlg, "combo1", GWEN_DialogProperty_AddValue, 0, "Zweiter Text in Combo1", 0); GWEN_Dialog_SetIntProperty(dlg, "combo1", GWEN_DialogProperty_Value, 0, 0, 0); GWEN_Dialog_SetCharProperty(dlg, "combo2", GWEN_DialogProperty_AddValue, 0, "Erster Text in Combo2", 0); GWEN_Dialog_SetCharProperty(dlg, "combo2", GWEN_DialogProperty_AddValue, 0, "Zweiter Text in Combo2", 0); GWEN_Dialog_SetIntProperty(dlg, "combo2", GWEN_DialogProperty_Value, 0, 0, 0); GWEN_Dialog_SetCharProperty(dlg, "listbox1", GWEN_DialogProperty_Title, 0, "Column1\tColumn2\tColumn3", 0); GWEN_Dialog_SetCharProperty(dlg, "listbox1", GWEN_DialogProperty_AddValue, 0, "Zeile 1 Spalte 1\tZeile 1 Spalte 2\tZeile 1 Spalte 3", 0); GWEN_Dialog_SetCharProperty(dlg, "listbox1", GWEN_DialogProperty_AddValue, 0, "Zeile 2 Spalte 1\tZeile 2 Spalte 2\tZeile 2 Spalte 3", 0); GWEN_Dialog_SetIntProperty(dlg, "listbox1", GWEN_DialogProperty_ColumnWidth, 0, 100, 0); GWEN_Dialog_SetIntProperty(dlg, "listbox1", GWEN_DialogProperty_ColumnWidth, 1, 200, 0); GWEN_Dialog_SetCharProperty(dlg, "labelWithHtmlImage", GWEN_DialogProperty_Title, 0, "This label contains text which should also contain an image:" "" "

And here the text should continue, followed by another image:" "

" "And again, this should be on the following line." "This label would contain an image if it were able to use " "HTML.", 0); GWEN_Dialog_SetCharProperty(dlg, "textBrowser1", GWEN_DialogProperty_Value, 0, "" "

This is bold text, while this one is italic.

" "This is a list:" "
    " "
  • first item
  • " "
  • second item
  • " "
  • third item
  • " "
  • fourth item
  • " "
" "

This paragraph should follow the list.

" "" "This is BOLD text, while this one is would be i t a l i c.\n" "This is a list:\n" "- first item\n" "- second item\n" "- third item\n" "- fourth item\n" "This paragraph should follow the list.", 0); GWEN_Dialog_SetIntProperty(dlg, "progressBar1", GWEN_DialogProperty_MinValue, 0, 0, 0); GWEN_Dialog_SetIntProperty(dlg, "progressBar1", GWEN_DialogProperty_MaxValue, 0, 10, 0); GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, 640, 0); GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, 480, 0); break; case GWEN_DialogEvent_TypeFini: fprintf(stderr, "Fini\n"); break; case GWEN_DialogEvent_TypeValueChanged: fprintf(stderr, "ValueChanged\n"); if (strcasecmp(sender, "listbox1")==0) { fprintf(stderr, "Selected list entry %d\n", GWEN_Dialog_GetIntProperty(dlg, "listbox1", GWEN_DialogProperty_Value, 0, -1)); } else if (strcasecmp(sender, "editPass1")==0) { const char *s; s=GWEN_Dialog_GetCharProperty(dlg, "editPass1", GWEN_DialogProperty_Value, 0, NULL); if (!(s && *s)) s=""; GWEN_Dialog_SetCharProperty(dlg, "editPass2", GWEN_DialogProperty_Value, 0, s, 0); } break; case GWEN_DialogEvent_TypeActivated: fprintf(stderr, "Activated\n"); if (strcasecmp(sender, "listbox1")==0) { int idx; idx=GWEN_Dialog_GetIntProperty(dlg, "listbox1", GWEN_DialogProperty_Value, 0, -1); fprintf(stderr, "Selected list entry %d\n", idx); if (idx>=0) { const char *s; s=GWEN_Dialog_GetCharProperty(dlg, "listbox1", GWEN_DialogProperty_Value, idx, NULL); if (s && *s) { fprintf(stderr, "Text of selected list entry %d: [%s]\n", idx, s); } } } else if (strcasecmp(sender, "combo1")==0) { int idx; idx=GWEN_Dialog_GetIntProperty(dlg, "combo1", GWEN_DialogProperty_Value, 0, -1); fprintf(stderr, "Selected list entry %d\n", idx); if (idx>=0) { const char *s; s=GWEN_Dialog_GetCharProperty(dlg, "combo1", GWEN_DialogProperty_Value, idx, NULL); if (s && *s) { fprintf(stderr, "Text of selected list entry %d: [%s]\n", idx, s); } } } else if (strcasecmp(sender, "okButton")==0) return GWEN_DialogEvent_ResultAccept; else if (strcasecmp(sender, "abortButton")==0) return GWEN_DialogEvent_ResultReject; else if (strcasecmp(sender, "progressMinus")==0) { int v; v=GWEN_Dialog_GetIntProperty(dlg, "progressBar1", GWEN_DialogProperty_Value, 0, -1); if (v>0) GWEN_Dialog_SetIntProperty(dlg, "progressBar1", GWEN_DialogProperty_Value, 0, v-1, 0); return GWEN_DialogEvent_ResultHandled; } else if (strcasecmp(sender, "progressPlus")==0) { int v; v=GWEN_Dialog_GetIntProperty(dlg, "progressBar1", GWEN_DialogProperty_Value, 0, -1); if (v<10) GWEN_Dialog_SetIntProperty(dlg, "progressBar1", GWEN_DialogProperty_Value, 0, v+1, 0); return GWEN_DialogEvent_ResultHandled; } else if (strcasecmp(sender, "prevPageButton")==0) { int v; v=GWEN_Dialog_GetIntProperty(dlg, "stack1", GWEN_DialogProperty_Value, 0, -1); if (v>0) GWEN_Dialog_SetIntProperty(dlg, "stack1", GWEN_DialogProperty_Value, 0, v-1, 0); return GWEN_DialogEvent_ResultHandled; } else if (strcasecmp(sender, "nextPageButton")==0) { int v; v=GWEN_Dialog_GetIntProperty(dlg, "stack1", GWEN_DialogProperty_Value, 0, -1); if (v<3) GWEN_Dialog_SetIntProperty(dlg, "stack1", GWEN_DialogProperty_Value, 0, v+1, 0); return GWEN_DialogEvent_ResultHandled; } break; case GWEN_DialogEvent_TypeEnabled: fprintf(stderr, "Enabled\n"); break; case GWEN_DialogEvent_TypeDisabled: fprintf(stderr, "Disabled\n"); break; case GWEN_DialogEvent_TypeClose: fprintf(stderr, "Close\n"); return GWEN_DialogEvent_ResultNotHandled; case GWEN_DialogEvent_TypeLast: fprintf(stderr, "Last, ignored\n"); return GWEN_DialogEvent_ResultNotHandled; } return GWEN_DialogEvent_ResultHandled; } GWEN_DIALOG *Dlg_Test1_new() { GWEN_DIALOG *dlg; int rv; const char *s; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); s=getenv("DIALOG_DIR"); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); else GWEN_Buffer_AppendString(tbuf, MEDIAPATH); dlg=GWEN_Dialog_new("dlg_test"); GWEN_Dialog_SetSignalHandler(dlg, _gwenGuiSignalHandler); GWEN_Dialog_AddMediaPath(dlg, GWEN_Buffer_GetStart(tbuf)); /* read dialog from dialog description file */ GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S "dlg_test.dlg"); rv=GWEN_Dialog_ReadXmlFile(dlg, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d).", rv); GWEN_Dialog_free(dlg); return NULL; } /* done */ return dlg; } gwenhywfar-4.15.2beta/gui/qt4/0000755000175000017500000000000012643267241013124 500000000000000gwenhywfar-4.15.2beta/gui/qt4/w_textbrowser.cpp0000644000175000017500000000447412416477066016505 00000000000000/*************************************************************************** begin : Mon Feb 15 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include class Qt4_W_TextBrowser: public Qt4_W_Widget { public: Qt4_W_TextBrowser(GWEN_WIDGET *w):Qt4_W_Widget(w) { } ~Qt4_W_TextBrowser() { } virtual int setup() { QTextBrowser *qw; uint32_t flags; GWEN_WIDGET *wParent; QSizePolicy::Policy hpolicy=QSizePolicy::Minimum; QSizePolicy::Policy vpolicy=QSizePolicy::Minimum; const char *s; QString text; flags=GWEN_Widget_GetFlags(_widget); wParent=GWEN_Widget_Tree_GetParent(_widget); s=GWEN_Widget_GetText(_widget, 0); if (s) text=QString::fromUtf8(s); qw=new QTextBrowser(); qw->setText(text); /* handle flags */ if (flags & GWEN_WIDGET_FLAGS_FILLX) hpolicy=QSizePolicy::Expanding; if (flags & GWEN_WIDGET_FLAGS_FILLY) vpolicy=QSizePolicy::Expanding; qw->setSizePolicy(hpolicy, vpolicy); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_REAL, (void*) qw); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, _widget); return 0; } int setCharProperty(GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { QTextBrowser *qw; QString text; qw=(QTextBrowser*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); if (value) text=QT4_Gui::extractHtml(value); switch(prop) { case GWEN_DialogProperty_Value: qw->setText(""); qw->append(text); return 0; case GWEN_DialogProperty_AddValue: qw->append(text); return 0; case GWEN_DialogProperty_ClearValues: qw->setText(""); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(_widget))); return GWEN_ERROR_INVALID; }; }; gwenhywfar-4.15.2beta/gui/qt4/qt4_gui_dialog.hpp0000644000175000017500000000423612416477066016463 00000000000000/*************************************************************************** begin : Mon Feb 15 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef QT4_DIALOG_HPP #define QT4_DIALOG_HPP #include #include "qt4_gui.hpp" #include #include #include #include #include class QT4_DialogBox; #define QT4_DIALOG_WIDGET_REAL 0 #define QT4_DIALOG_WIDGET_CONTENT 1 #define QT4_DIALOG_WIDGET_LAYOUT 2 class QT4_GuiDialog: public CppDialog { public: QT4_GuiDialog(QT4_Gui *gui, GWEN_DIALOG *dlg); virtual ~QT4_GuiDialog(); static QT4_GuiDialog *getDialog(GWEN_DIALOG *dlg); bool setup(QWidget *parentWindow); int execute(); int openDialog(); int closeDialog(); int runDialog(bool untilEnd); QT4_DialogBox *getMainWindow() { return _mainWidget;}; protected: QT4_Gui *_gui; int _widgetCount; QT4_DialogBox *_mainWidget; int setupTree(GWEN_WIDGET *w); virtual int setIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal); virtual int getIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue); virtual int setCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal); virtual const char *getCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue); }; #endif /* FG_DIALOG_L_HPP */ gwenhywfar-4.15.2beta/gui/qt4/w_dialog.cpp0000644000175000017500000000661112416477066015347 00000000000000/*************************************************************************** begin : Mon Feb 15 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include class Qt4_W_Dialog: public Qt4_W_Widget { public: Qt4_W_Dialog(GWEN_WIDGET *w):Qt4_W_Widget(w) { } ~Qt4_W_Dialog() { } virtual int setup() { QWidget *qw; uint32_t flags; GWEN_WIDGET *wParent; QLayout *qLayout; QSizePolicy::Policy hpolicy=QSizePolicy::Minimum; QSizePolicy::Policy vpolicy=QSizePolicy::Minimum; flags=GWEN_Widget_GetFlags(_widget); wParent=GWEN_Widget_Tree_GetParent(_widget); qw=new QT4_DialogBox(dynamic_cast(getDialog()), QApplication::activeModalWidget()); qLayout=new QVBoxLayout(qw); /* handle flags */ if (flags & GWEN_WIDGET_FLAGS_FILLX) hpolicy=QSizePolicy::Expanding; if (flags & GWEN_WIDGET_FLAGS_FILLY) vpolicy=QSizePolicy::Expanding; qw->setSizePolicy(hpolicy, vpolicy); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_REAL, (void*) qw); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_LAYOUT, (void*) qLayout); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, _widget); return 0; } int addChildGuiWidget(GWEN_WIDGET *wChild) { QWidget *qw; QBoxLayout *qLayout; QWidget *qChild; qw=(QT4_DialogBox*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); qLayout=(QBoxLayout*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_LAYOUT); assert(qLayout); qChild=getQWidget(wChild); assert(qChild); qChild->setParent(qw); qLayout->addWidget(qChild); return 0; } int setCharProperty(GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { QWidget *qw; qw=(QWidget*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); switch(prop) { case GWEN_DialogProperty_Title: qw->setWindowTitle(QString::fromUtf8(value)); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(_widget))); return GWEN_ERROR_INVALID; }; const char *getCharProperty(GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { QWidget *qw; QString str; qw=(QWidget*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); switch(prop) { case GWEN_DialogProperty_Title: str=qw->windowTitle(); if (str.isEmpty()) return defaultValue; else { GWEN_Widget_SetText(_widget, QT4_DIALOG_STRING_TITLE, str.toUtf8()); return GWEN_Widget_GetText(_widget, QT4_DIALOG_STRING_TITLE); } break; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(_widget))); return defaultValue; }; }; gwenhywfar-4.15.2beta/gui/qt4/w_combobox.cpp0000644000175000017500000001040212416477066015711 00000000000000/*************************************************************************** begin : Mon Feb 15 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include class Qt4_W_ComboBox: public Qt4_W_Widget { public: Qt4_W_ComboBox(GWEN_WIDGET *w):Qt4_W_Widget(w) { } ~Qt4_W_ComboBox() { } virtual int setup() { QComboBox *qw; uint32_t flags; GWEN_WIDGET *wParent; QSizePolicy::Policy hpolicy=QSizePolicy::Minimum; QSizePolicy::Policy vpolicy=QSizePolicy::Minimum; QT4_GuiDialog *qtDialog; flags=GWEN_Widget_GetFlags(_widget); wParent=GWEN_Widget_Tree_GetParent(_widget); qw=new QComboBox(); /* handle flags */ if (flags & GWEN_WIDGET_FLAGS_FILLX) hpolicy=QSizePolicy::Expanding; if (flags & GWEN_WIDGET_FLAGS_FILLY) vpolicy=QSizePolicy::Expanding; qw->setSizePolicy(hpolicy, vpolicy); qw->setEditable((flags & GWEN_WIDGET_FLAGS_READONLY)?false:true); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_REAL, (void*) qw); qtDialog=dynamic_cast(getDialog()); assert(qtDialog); qw->connect(qw, SIGNAL(activated(int)), qtDialog->getMainWindow(), SLOT(slotActivated())); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, _widget); return 0; } int setIntProperty(GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { QComboBox *qw; qw=(QComboBox*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); switch(prop) { case GWEN_DialogProperty_Value: qw->setCurrentIndex(value); return 0; case GWEN_DialogProperty_ClearValues: qw->clear(); return 0; default: return Qt4_W_Widget::setIntProperty(prop, index, value, doSignal); } }; int getIntProperty(GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { QComboBox *qw; qw=(QComboBox*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); switch(prop) { case GWEN_DialogProperty_Value: return qw->currentIndex(); case GWEN_DialogProperty_ValueCount: return qw->count(); default: return Qt4_W_Widget::getIntProperty(prop, index, defaultValue); } }; int setCharProperty(GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { QComboBox *qw; QString text; qw=(QComboBox*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); if (value) text=QString::fromUtf8(value); switch(prop) { case GWEN_DialogProperty_Value: // undefined break; case GWEN_DialogProperty_AddValue: qw->addItem(text); return 0; case GWEN_DialogProperty_ClearValues: qw->clear(); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(_widget))); return GWEN_ERROR_INVALID; }; const char *getCharProperty(GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { QComboBox *qw; QString str; qw=(QComboBox*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); switch(prop) { case GWEN_DialogProperty_Value: str=qw->itemText(index); if (str.isEmpty()) return defaultValue; else { GWEN_Widget_SetText(_widget, QT4_DIALOG_STRING_TITLE, str.toUtf8()); return GWEN_Widget_GetText(_widget, QT4_DIALOG_STRING_TITLE); } break; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(_widget))); return defaultValue; }; }; gwenhywfar-4.15.2beta/gui/qt4/w_tabbook.cpp0000644000175000017500000000367712364015347015532 00000000000000/*************************************************************************** begin : Mon Feb 15 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include class Qt4_W_TabBook: public Qt4_W_Widget { public: Qt4_W_TabBook(GWEN_WIDGET *w):Qt4_W_Widget(w) { } ~Qt4_W_TabBook() { } virtual int setup() { QWidget *qw; uint32_t flags; GWEN_WIDGET *wParent; QSizePolicy::Policy hpolicy=QSizePolicy::Minimum; QSizePolicy::Policy vpolicy=QSizePolicy::Minimum; flags=GWEN_Widget_GetFlags(_widget); wParent=GWEN_Widget_Tree_GetParent(_widget); qw=new QTabWidget(); /* handle flags */ if (flags & GWEN_WIDGET_FLAGS_FILLX) hpolicy=QSizePolicy::Expanding; if (flags & GWEN_WIDGET_FLAGS_FILLY) vpolicy=QSizePolicy::Expanding; qw->setSizePolicy(hpolicy, vpolicy); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_REAL, (void*) qw); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_CONTENT, (void*) qw); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, _widget); return 0; } int addChildGuiWidget(GWEN_WIDGET *wChild) { QTabWidget *qw; QWidget *qChild; const char *s; QString text; qw=(QTabWidget*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); if (GWEN_Widget_GetType(wChild)!=GWEN_Widget_TypeTabPage) { DBG_ERROR(GWEN_LOGDOMAIN, "You can only add TabPages to a TabBook"); return GWEN_ERROR_INVALID; } qChild=getQWidget(wChild); assert(qChild); s=GWEN_Widget_GetText(wChild, 0); if (s) text=QString::fromUtf8(s); qw->addTab(qChild, text); return 0; } }; gwenhywfar-4.15.2beta/gui/qt4/w_widgetstack.cpp0000644000175000017500000000475512416477066016430 00000000000000/*************************************************************************** begin : Mon Feb 15 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include class Qt4_W_WidgetStack: public Qt4_W_Widget { public: Qt4_W_WidgetStack(GWEN_WIDGET *w):Qt4_W_Widget(w) { } ~Qt4_W_WidgetStack() { } virtual int setup() { QWidget *qw; uint32_t flags; GWEN_WIDGET *wParent; QSizePolicy::Policy hpolicy=QSizePolicy::Minimum; QSizePolicy::Policy vpolicy=QSizePolicy::Minimum; flags=GWEN_Widget_GetFlags(_widget); wParent=GWEN_Widget_Tree_GetParent(_widget); qw=new QStackedWidget(); /* handle flags */ if (flags & GWEN_WIDGET_FLAGS_FILLX) hpolicy=QSizePolicy::Expanding; if (flags & GWEN_WIDGET_FLAGS_FILLY) vpolicy=QSizePolicy::Expanding; qw->setSizePolicy(hpolicy, vpolicy); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_REAL, (void*) qw); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, _widget); return 0; } int setIntProperty(GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { QStackedWidget *qw; qw=(QStackedWidget*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); switch(prop) { case GWEN_DialogProperty_Value: qw->setCurrentIndex(value); return 0; default: return Qt4_W_Widget::setIntProperty(prop, index, value, doSignal); } }; int getIntProperty(GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { QStackedWidget *qw; qw=(QStackedWidget*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); switch(prop) { case GWEN_DialogProperty_Value: return qw->currentIndex(); default: return Qt4_W_Widget::getIntProperty(prop, index, defaultValue); } }; int addChildGuiWidget(GWEN_WIDGET *wChild) { QStackedWidget *qw; QWidget *qChild; qw=(QStackedWidget*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); qChild=getQWidget(wChild); assert(qChild); qw->addWidget(qChild); return 0; }; }; gwenhywfar-4.15.2beta/gui/qt4/w_gridlayout.cpp0000644000175000017500000000453212416477066016273 00000000000000/*************************************************************************** begin : Mon Feb 15 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include class Qt4_W_GridLayout: public Qt4_W_Widget { public: Qt4_W_GridLayout(GWEN_WIDGET *w):Qt4_W_Widget(w) { } ~Qt4_W_GridLayout() { } virtual int setup() { QWidget *qw; uint32_t flags; GWEN_WIDGET *wParent; QLayout *qLayout; QSizePolicy::Policy hpolicy=QSizePolicy::Minimum; QSizePolicy::Policy vpolicy=QSizePolicy::Minimum; flags=GWEN_Widget_GetFlags(_widget); wParent=GWEN_Widget_Tree_GetParent(_widget); qw=new QWidget(); qLayout=new QGridLayout(qw); /* handle flags */ if (flags & GWEN_WIDGET_FLAGS_FILLX) hpolicy=QSizePolicy::Expanding; if (flags & GWEN_WIDGET_FLAGS_FILLY) vpolicy=QSizePolicy::Expanding; qw->setSizePolicy(hpolicy, vpolicy); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_REAL, (void*) qw); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_LAYOUT, (void*) qLayout); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, _widget); return 0; } int addChildGuiWidget(GWEN_WIDGET *wChild) { QWidget *qw; QGridLayout *qLayout; QWidget *qChild; GWEN_WIDGET *wt; int idx=0; qw=(QWidget*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); qLayout=(QGridLayout*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_LAYOUT); assert(qLayout); qChild=getQWidget(wChild); assert(qChild); qChild->setParent(qw); /* get position of the child widget below myself */ wt=GWEN_Widget_Tree_GetFirstChild(_widget); while(wt && wt!=wChild) { idx++; wt=GWEN_Widget_Tree_GetNext(wt); } if (wt) { int x=0, y=0; int c; if ((c=GWEN_Widget_GetColumns(_widget))) { x=idx % c; y=idx / c; } else if ((c=GWEN_Widget_GetRows(_widget))) { x=idx / c; y=idx % c ; } qLayout->addWidget(qChild, y, x); } return 0; } }; gwenhywfar-4.15.2beta/gui/qt4/w_radiobutton.cpp0000644000175000017500000001007212416477066016436 00000000000000/*************************************************************************** begin : Mon Feb 15 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include class Qt4_W_RadioButton: public Qt4_W_Widget { public: Qt4_W_RadioButton(GWEN_WIDGET *w):Qt4_W_Widget(w) { } ~Qt4_W_RadioButton() { } virtual int setup() { QRadioButton *qw; uint32_t flags; GWEN_WIDGET *wParent; QSizePolicy::Policy hpolicy=QSizePolicy::Minimum; QSizePolicy::Policy vpolicy=QSizePolicy::Minimum; const char *s; QString text; QT4_GuiDialog *qtDialog; flags=GWEN_Widget_GetFlags(_widget); wParent=GWEN_Widget_Tree_GetParent(_widget); s=GWEN_Widget_GetText(_widget, 0); if (s) text=QString::fromUtf8(s); qw=new QRadioButton(text); /* handle flags */ if (flags & GWEN_WIDGET_FLAGS_FILLX) hpolicy=QSizePolicy::Expanding; if (flags & GWEN_WIDGET_FLAGS_FILLY) vpolicy=QSizePolicy::Expanding; qw->setSizePolicy(hpolicy, vpolicy); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_REAL, (void*) qw); qtDialog=dynamic_cast(getDialog()); assert(qtDialog); qw->connect(qw, SIGNAL(toggled(bool)), qtDialog->getMainWindow(), SLOT(slotActivated())); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, _widget); return 0; } int setIntProperty(GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { QRadioButton *qw; qw=(QRadioButton*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); switch(prop) { case GWEN_DialogProperty_Value: qw->setChecked((value==0)?false:true); return 0; default: return Qt4_W_Widget::setIntProperty(prop, index, value, doSignal); } }; int getIntProperty(GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { QRadioButton *qw; qw=(QRadioButton*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); switch(prop) { case GWEN_DialogProperty_Value: return (qw->isChecked())?1:0; default: return Qt4_W_Widget::getIntProperty(prop, index, defaultValue); } }; int setCharProperty(GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { QRadioButton *qw; QString text; qw=(QRadioButton*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); if (value) text=QString::fromUtf8(value); switch(prop) { case GWEN_DialogProperty_Title: qw->setText(text); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(_widget))); return GWEN_ERROR_INVALID; }; const char *getCharProperty(GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { QRadioButton *qw; QString str; qw=(QRadioButton*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); switch(prop) { case GWEN_DialogProperty_Title: str=qw->text(); if (str.isEmpty()) return defaultValue; else { GWEN_Widget_SetText(_widget, QT4_DIALOG_STRING_TITLE, str.toUtf8()); return GWEN_Widget_GetText(_widget, QT4_DIALOG_STRING_TITLE); } break; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(_widget))); return defaultValue; }; }; gwenhywfar-4.15.2beta/gui/qt4/w_vline.cpp0000644000175000017500000000274112364015347015215 00000000000000/*************************************************************************** begin : Mon Feb 15 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include class Qt4_W_VLine: public Qt4_W_Widget { public: Qt4_W_VLine(GWEN_WIDGET *w):Qt4_W_Widget(w) { } ~Qt4_W_VLine() { } virtual int setup() { QFrame *qw; uint32_t flags; GWEN_WIDGET *wParent; QSizePolicy::Policy hpolicy=QSizePolicy::Minimum; QSizePolicy::Policy vpolicy=QSizePolicy::Minimum; const char *s; QString text; flags=GWEN_Widget_GetFlags(_widget); wParent=GWEN_Widget_Tree_GetParent(_widget); s=GWEN_Widget_GetText(_widget, 0); if (s) text=QString::fromUtf8(s); qw=new QFrame(); qw->setFrameShape(QFrame::VLine); qw->setFrameShadow(QFrame::Sunken); /* handle flags */ if (flags & GWEN_WIDGET_FLAGS_FILLX) hpolicy=QSizePolicy::Expanding; if (flags & GWEN_WIDGET_FLAGS_FILLY) vpolicy=QSizePolicy::Expanding; qw->setSizePolicy(hpolicy, vpolicy); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_REAL, (void*) qw); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, _widget); return 0; } }; gwenhywfar-4.15.2beta/gui/qt4/w_lineedit.cpp0000644000175000017500000000665012416477066015710 00000000000000/*************************************************************************** begin : Mon Feb 15 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include class Qt4_W_LineEdit: public Qt4_W_Widget { public: Qt4_W_LineEdit(GWEN_WIDGET *w):Qt4_W_Widget(w) { } ~Qt4_W_LineEdit() { } virtual int setup() { QLineEdit *qw; uint32_t flags; GWEN_WIDGET *wParent; QSizePolicy::Policy hpolicy=QSizePolicy::Minimum; QSizePolicy::Policy vpolicy=QSizePolicy::Minimum; const char *s; QString text; QT4_GuiDialog *qtDialog; flags=GWEN_Widget_GetFlags(_widget); wParent=GWEN_Widget_Tree_GetParent(_widget); s=GWEN_Widget_GetText(_widget, 0); if (s) text=QString::fromUtf8(s); qw=new QLineEdit(text); /* handle flags */ if (flags & GWEN_WIDGET_FLAGS_FILLX) hpolicy=QSizePolicy::Expanding; if (flags & GWEN_WIDGET_FLAGS_FILLY) vpolicy=QSizePolicy::Expanding; qw->setSizePolicy(hpolicy, vpolicy); if (flags & GWEN_WIDGET_FLAGS_PASSWORD) qw->setEchoMode(QLineEdit::Password); else qw->setEchoMode(QLineEdit::Normal); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_REAL, (void*) qw); qtDialog=dynamic_cast(getDialog()); assert(qtDialog); qw->connect(qw, SIGNAL(returnPressed()), qtDialog->getMainWindow(), SLOT(slotActivated())); qw->connect(qw, SIGNAL(textChanged(const QString&)), qtDialog->getMainWindow(), SLOT(slotValueChanged())); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, _widget); return 0; } int setCharProperty(GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { QLineEdit *qw; QString text; qw=(QLineEdit*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); if (value) text=QString::fromUtf8(value); switch(prop) { case GWEN_DialogProperty_Value: qw->setText(text); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(_widget))); return GWEN_ERROR_INVALID; }; const char *getCharProperty(GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { QLineEdit *qw; QString str; qw=(QLineEdit*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); switch(prop) { case GWEN_DialogProperty_Value: str=qw->text(); if (str.isEmpty()) return defaultValue; else { GWEN_Widget_SetText(_widget, QT4_DIALOG_STRING_TITLE, str.toUtf8()); return GWEN_Widget_GetText(_widget, QT4_DIALOG_STRING_TITLE); } break; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(_widget))); return defaultValue; }; }; gwenhywfar-4.15.2beta/gui/qt4/w_scrollarea.cpp0000644000175000017500000000406612364015347016231 00000000000000/*************************************************************************** begin : Mon Feb 15 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include class Qt4_W_ScrollArea: public Qt4_W_Widget { public: Qt4_W_ScrollArea(GWEN_WIDGET *w):Qt4_W_Widget(w) { } ~Qt4_W_ScrollArea() { } virtual int setup() { QScrollArea *qw; QWidget *qChild; uint32_t flags; GWEN_WIDGET *wParent; QSizePolicy::Policy hpolicy=QSizePolicy::Minimum; QSizePolicy::Policy vpolicy=QSizePolicy::Minimum; QLayout *qLayout; flags=GWEN_Widget_GetFlags(_widget); wParent=GWEN_Widget_Tree_GetParent(_widget); qw=new QScrollArea(); qChild=new QWidget(); qChild->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); qw->setWidget(qChild); qLayout=new QVBoxLayout(qChild); qw->setWidgetResizable(true); /* handle flags */ if (flags & GWEN_WIDGET_FLAGS_FILLX) hpolicy=QSizePolicy::Expanding; if (flags & GWEN_WIDGET_FLAGS_FILLY) vpolicy=QSizePolicy::Expanding; qw->setSizePolicy(hpolicy, vpolicy); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_REAL, (void*) qw); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_LAYOUT, (void*) qLayout); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, _widget); return 0; } int addChildGuiWidget(GWEN_WIDGET *wChild) { QWidget *qw; QBoxLayout *qLayout; QWidget *qChild; qw=(QWidget*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); qLayout=(QBoxLayout*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_LAYOUT); assert(qLayout); qChild=getQWidget(wChild); assert(qChild); qChild->setParent(qw); qLayout->addWidget(qChild); return 0; }; }; gwenhywfar-4.15.2beta/gui/qt4/libtest.cpp0000644000175000017500000001016512416477066015227 00000000000000 #undef BUILDING_QT4_GUI #include "qt4_gui.hpp" #include "../testdialogs/dlg_test.h" #include #include #include #include #include #include int test1(int argc, char **argv) { QApplication a(argc, argv); QT4_Gui *gui; int rv; GWEN_DIALOG *dlg; rv=GWEN_Init(); if (rv) { DBG_ERROR_ERR(0, rv); return 2; } GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Info); /* create GUI */ gui=new QT4_Gui(); GWEN_Gui_SetGui(gui->getCInterface()); dlg=Dlg_Test1_new(); if (dlg==NULL) { fprintf(stderr, "Could not create dialog.\n"); return 2; } rv=GWEN_Gui_ExecDialog(dlg, 0); fprintf(stderr, "Result: %d\n", rv); return 0; } int test2(int argc, char **argv) { QApplication a(argc, argv); QT4_Gui *gui; QString lf; int rv; uint32_t pid; rv=GWEN_Init(); if (rv) { DBG_ERROR_ERR(0, rv); return 2; } GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Info); /* create GUI */ gui=new QT4_Gui(); GWEN_Gui_SetGui(gui->getCInterface()); #if 0 pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_KEEP_OPEN, "Progress-Title", "This is an example progress with 2 steps" "This is an example progress with 2 steps", 2, 0); #else pid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_KEEP_OPEN, "Progress-Title", "This is an example progress with 2 steps", 2, 0); #endif GWEN_Gui_ProgressAdvance(pid, 1); rv=GWEN_Gui_MessageBox(GWEN_GUI_MSG_FLAGS_TYPE_INFO, "MessageBox-Title", "This message box should appear in the context of the open progress dialog", "Button1", "Button2", "Button3", pid); GWEN_Gui_ProgressAdvance(pid, 2); GWEN_Gui_ProgressEnd(pid); return 0; } int test3(int argc, char **argv) { int rv; uint32_t id1; uint32_t id2; uint64_t i1; uint64_t i2; QApplication a(argc, argv); QT4_Gui *gui; gui=new QT4_Gui(); GWEN_Gui_SetGui(gui->getCInterface()); id1=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_SHOW_ABORT | GWEN_GUI_PROGRESS_KEEP_OPEN, "Progress-Title", "" "

This is an example text..

" "

As you can see colors can " "be used.

" "", 10, 0); for (i1=1; i1<=10; i1++) { char numbuf[128]; snprintf(numbuf, sizeof(numbuf)-1, "Step %d\n", (int)i1); GWEN_Gui_ProgressLog(id1, GWEN_LoggerLevel_Notice, numbuf); id2=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_SHOW_ABORT, "2nd progress", "Starting 2nd progress...", 10, id1); for (i2=1; i2<=10; i2++) { sleep(1); fprintf(stderr, "Advancing %d/%d\n", (int)i1, (int)i2); rv=GWEN_Gui_ProgressAdvance(id2, i2); if (rv==GWEN_ERROR_USER_ABORTED) { fprintf(stderr, "Aborted by user (2)\n"); break; } } GWEN_Gui_ProgressEnd(id2); rv=GWEN_Gui_ProgressAdvance(id1, i1); if (rv==GWEN_ERROR_USER_ABORTED) { fprintf(stderr, "Aborted by user (1)\n"); break; } } GWEN_Gui_ProgressEnd(id1); return 0; } int main(int argc, char **argv) { return test1(argc, argv); //return test2(argc, argv); //return test3(argc, argv); } gwenhywfar-4.15.2beta/gui/qt4/qt4dialogbox.hpp0000644000175000017500000000165212364015347016160 00000000000000/*************************************************************************** begin : Tue Feb 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef QT4_DIALOGBOX_H #define QT4_DIALOGBOX_H #include class QT4_GuiDialog; class QT4_DialogBox: public QDialog { Q_OBJECT public: QT4_DialogBox(QT4_GuiDialog *dialog, QWidget *parent=0, bool modal=FALSE, Qt::WindowFlags f=0); virtual ~QT4_DialogBox(); void accept(); void reject(); int cont(); void closeEvent(QCloseEvent *e); void unlinkFromDialog(); public slots: void slotActivated(); void slotValueChanged(); protected: QT4_GuiDialog *_dialog; }; #endif gwenhywfar-4.15.2beta/gui/qt4/Makefile.in0000644000175000017500000007710412634022413015110 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = libtest$(EXEEXT) subdir = gui/qt4 DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(srcdir)/gwengui-qt4.pc.in \ $(srcdir)/gwengui-qt4-config.cmake.in \ $(srcdir)/gwengui-qt4-config-version.cmake.in \ $(top_srcdir)/depcomp $(iheader_HEADERS) $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = gwengui-qt4.pc gwengui-qt4-config.cmake \ gwengui-qt4-config-version.cmake CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(cmakeconfigdir)" \ "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(iheaderdir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = libgwengui_qt4_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(builddir)/../cpp/libgwengui-cpp.la am_libgwengui_qt4_la_OBJECTS = qt4dialogbox.lo qt4_gui.lo \ qt4_gui_dialog.lo nodist_libgwengui_qt4_la_OBJECTS = libgwengui_qt4_la_OBJECTS = $(am_libgwengui_qt4_la_OBJECTS) \ $(nodist_libgwengui_qt4_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = PROGRAMS = $(noinst_PROGRAMS) am_libtest_OBJECTS = libtest.$(OBJEXT) libtest_OBJECTS = $(am_libtest_OBJECTS) libtest_DEPENDENCIES = libgwengui-qt4.la \ $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(am__DEPENDENCIES_1) \ $(top_builddir)/gui/cpp/libgwengui-cpp.la \ $(builddir)/../testdialogs/libgwengui-test.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(libgwengui_qt4_la_SOURCES) \ $(nodist_libgwengui_qt4_la_SOURCES) $(libtest_SOURCES) DIST_SOURCES = $(libgwengui_qt4_la_SOURCES) $(libtest_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(cmakeconfig_DATA) $(pkgconfig_DATA) HEADERS = $(iheader_HEADERS) $(nodist_noinst_HEADERS) \ $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = -DBUILDING_QT4_GUI DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = -I$(gwenhywfar_symlinkdir) $(qt4_includes) AM_CPPFLAGS = @visibility_cflags@ pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = gwengui-qt4.pc cmakeconfigdir = $(libdir)/cmake/gwengui-qt4-@GWENHYWFAR_VERSION_MAJOR@.@GWENHYWFAR_VERSION_MINOR@ cmakeconfig_DATA = gwengui-qt4-config.cmake gwengui-qt4-config-version.cmake lib_LTLIBRARIES = libgwengui-qt4.la noinst_HEADERS = \ qt4dialogbox.hpp \ qt4_gui_dialog.hpp \ qt4_gui_dialog.hpp libgwengui_qt4_la_LIBADD = $(qt4_libs) $(top_builddir)/src/$(gwenhywfar_internal_libname) $(builddir)/../cpp/libgwengui-cpp.la libgwengui_qt4_la_SOURCES = \ qt4dialogbox.cpp \ qt4_gui.cpp \ qt4_gui_dialog.cpp nodist_libgwengui_qt4_la_SOURCES = nodist_noinst_HEADERS = iheaderdir = ${gwenhywfar_headerdir_am}/gwen-gui-qt4 iheader_HEADERS = \ qt4_gui.hpp MOC_FILES = \ qt4dialogbox.moc UI_FILES = EXTRA_DIST = $(UI_FILES) \ w_widget.cpp \ w_dialog.cpp \ w_vlayout.cpp \ w_hlayout.cpp \ w_gridlayout.cpp \ w_label.cpp \ w_lineedit.cpp \ w_pushbutton.cpp \ w_hline.cpp \ w_vline.cpp \ w_textedit.cpp \ w_combobox.cpp \ w_tabbook.cpp \ w_checkbox.cpp \ w_groupbox.cpp \ w_widgetstack.cpp \ w_textbrowser.cpp \ w_scrollarea.cpp \ w_progressbar.cpp \ w_listbox.cpp \ w_radiobutton.cpp \ w_spinbox.cpp libtest_SOURCES = libtest.cpp libtest_LDADD = libgwengui-qt4.la $(top_builddir)/src/$(gwenhywfar_internal_libname) $(qt4_libs) \ $(top_builddir)/gui/cpp/libgwengui-cpp.la \ $(builddir)/../testdialogs/libgwengui-test.la SUFFIXES = .ui .ui.hpp .ui.cpp .moc BUILT_SOURCES = $(MOC_FILES) $(nodist_libgwengui_qt4_la_SOURCES) CLEANFILES = $(BUILT_SOURCES) all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .ui .ui.hpp .ui.cpp .moc .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gui/qt4/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gui/qt4/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): gwengui-qt4.pc: $(top_builddir)/config.status $(srcdir)/gwengui-qt4.pc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ gwengui-qt4-config.cmake: $(top_builddir)/config.status $(srcdir)/gwengui-qt4-config.cmake.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ gwengui-qt4-config-version.cmake: $(top_builddir)/config.status $(srcdir)/gwengui-qt4-config-version.cmake.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgwengui-qt4.la: $(libgwengui_qt4_la_OBJECTS) $(libgwengui_qt4_la_DEPENDENCIES) $(EXTRA_libgwengui_qt4_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) -rpath $(libdir) $(libgwengui_qt4_la_OBJECTS) $(libgwengui_qt4_la_LIBADD) $(LIBS) clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list libtest$(EXEEXT): $(libtest_OBJECTS) $(libtest_DEPENDENCIES) $(EXTRA_libtest_DEPENDENCIES) @rm -f libtest$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(libtest_OBJECTS) $(libtest_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qt4_gui.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qt4_gui_dialog.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qt4dialogbox.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-cmakeconfigDATA: $(cmakeconfig_DATA) @$(NORMAL_INSTALL) @list='$(cmakeconfig_DATA)'; test -n "$(cmakeconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(cmakeconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(cmakeconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(cmakeconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(cmakeconfigdir)" || exit $$?; \ done uninstall-cmakeconfigDATA: @$(NORMAL_UNINSTALL) @list='$(cmakeconfig_DATA)'; test -n "$(cmakeconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(cmakeconfigdir)'; $(am__uninstall_files_from_dir) install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) install-iheaderHEADERS: $(iheader_HEADERS) @$(NORMAL_INSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(iheaderdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(iheaderdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(iheaderdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(iheaderdir)" || exit $$?; \ done uninstall-iheaderHEADERS: @$(NORMAL_UNINSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(iheaderdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(cmakeconfigdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(iheaderdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-cmakeconfigDATA install-iheaderHEADERS \ install-pkgconfigDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-cmakeconfigDATA uninstall-iheaderHEADERS \ uninstall-libLTLIBRARIES uninstall-pkgconfigDATA .MAKE: all check install install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool clean-noinstPROGRAMS \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-cmakeconfigDATA install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-iheaderHEADERS \ install-info install-info-am install-libLTLIBRARIES \ install-man install-pdf install-pdf-am install-pkgconfigDATA \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-cmakeconfigDATA \ uninstall-iheaderHEADERS uninstall-libLTLIBRARIES \ uninstall-pkgconfigDATA %.moc: %.hpp $(qt4_moc) -o $@ $< %.ui.hpp: %.ui $(qt4_uic) $< -o $@ sources: for f in $(libgwengui_qt4_la_SOURCES) $(foreach uifile,$(UI_FILES),$(uifile).cpp); do \ echo $(subdir)/$$f >>$(top_srcdir)/qtsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: $(BUILT_SOURCES) for d in $(SUBDIRS); do \ $(MAKE) -C $$d built_sources; \ done ; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/gui/qt4/w_pushbutton.cpp0000644000175000017500000000622712416477066016326 00000000000000/*************************************************************************** begin : Mon Feb 15 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include class Qt4_W_PushButton: public Qt4_W_Widget { public: Qt4_W_PushButton(GWEN_WIDGET *w):Qt4_W_Widget(w) { } ~Qt4_W_PushButton() { } virtual int setup() { QWidget *qw; uint32_t flags; GWEN_WIDGET *wParent; QSizePolicy::Policy hpolicy=QSizePolicy::Minimum; QSizePolicy::Policy vpolicy=QSizePolicy::Minimum; const char *s; QString text; QT4_GuiDialog *qtDialog; flags=GWEN_Widget_GetFlags(_widget); wParent=GWEN_Widget_Tree_GetParent(_widget); s=GWEN_Widget_GetText(_widget, 0); if (s) text=QString::fromUtf8(s); qw=new QPushButton(text); /* handle flags */ if (flags & GWEN_WIDGET_FLAGS_FILLX) hpolicy=QSizePolicy::Expanding; if (flags & GWEN_WIDGET_FLAGS_FILLY) vpolicy=QSizePolicy::Expanding; qw->setSizePolicy(hpolicy, vpolicy); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_REAL, (void*) qw); qtDialog=dynamic_cast(getDialog()); assert(qtDialog); qw->connect(qw, SIGNAL(clicked(bool)), qtDialog->getMainWindow(), SLOT(slotActivated())); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, _widget); return 0; } int setCharProperty(GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { QPushButton *qw; QString text; qw=(QPushButton*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); if (value) text=QString::fromUtf8(value); switch(prop) { case GWEN_DialogProperty_Title: qw->setText(text); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(_widget))); return GWEN_ERROR_INVALID; }; const char *getCharProperty(GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { QPushButton *qw; QString str; qw=(QPushButton*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); switch(prop) { case GWEN_DialogProperty_Title: str=qw->text(); if (str.isEmpty()) return defaultValue; else { GWEN_Widget_SetText(_widget, QT4_DIALOG_STRING_TITLE, str.toUtf8()); return GWEN_Widget_GetText(_widget, QT4_DIALOG_STRING_TITLE); } break; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(_widget))); return defaultValue; }; }; gwenhywfar-4.15.2beta/gui/qt4/w_spinbox.cpp0000644000175000017500000000526512416477066015576 00000000000000/*************************************************************************** begin : Mon Feb 15 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include class Qt4_W_SpinBox: public Qt4_W_Widget { public: Qt4_W_SpinBox(GWEN_WIDGET *w):Qt4_W_Widget(w) { } ~Qt4_W_SpinBox() { } virtual int setup() { QSpinBox *qw; uint32_t flags; GWEN_WIDGET *wParent; QSizePolicy::Policy hpolicy=QSizePolicy::Minimum; QSizePolicy::Policy vpolicy=QSizePolicy::Minimum; QT4_GuiDialog *qtDialog; flags=GWEN_Widget_GetFlags(_widget); wParent=GWEN_Widget_Tree_GetParent(_widget); qw=new QSpinBox(); /* handle flags */ if (flags & GWEN_WIDGET_FLAGS_FILLX) hpolicy=QSizePolicy::Expanding; if (flags & GWEN_WIDGET_FLAGS_FILLY) vpolicy=QSizePolicy::Expanding; qw->setSizePolicy(hpolicy, vpolicy); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_REAL, (void*) qw); qtDialog=dynamic_cast(getDialog()); assert(qtDialog); qw->connect(qw, SIGNAL(valueChanged(int)), qtDialog->getMainWindow(), SLOT(slotValueChanged())); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, _widget); return 0; } int setIntProperty(GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { QSpinBox *qw; qw=(QSpinBox*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); switch(prop) { case GWEN_DialogProperty_Value: qw->setValue(value); return 0; case GWEN_DialogProperty_MinValue: qw->setMinimum(value); return 0; case GWEN_DialogProperty_MaxValue: qw->setMaximum(value); return 0; default: return Qt4_W_Widget::setIntProperty(prop, index, value, doSignal); } }; int getIntProperty(GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { QSpinBox *qw; qw=(QSpinBox*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); switch(prop) { case GWEN_DialogProperty_Value: return qw->value(); case GWEN_DialogProperty_MinValue: return qw->minimum(); case GWEN_DialogProperty_MaxValue: return qw->maximum(); default: return Qt4_W_Widget::getIntProperty(prop, index, defaultValue); } }; }; gwenhywfar-4.15.2beta/gui/qt4/qt4_gui.hpp0000644000175000017500000000360412416477066015142 00000000000000/*************************************************************************** begin : Mon Feb 15 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef QT4_GUI_H #define QT4_GUI_H #if defined __GNUC__ && (! defined (__sun)) && (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) # ifdef BUILDING_QT4_GUI # define QT4GUI_API __attribute__ ((visibility("default"))) # else # define QT4GUI_API # endif #else # define QT4GUI_API #endif class QT4_Gui; class QWidget; #include #include #include /** * This is an implementation of GWEN_GUI for QT4. * * It implements the GWEN_DIALOG framework. * * @todo: @ref GWEN_Gui_Print() needs to be implemented */ class QT4GUI_API QT4_Gui: public CppGui { private: QWidget *_parentWidget; std::list _pushedParents; public: QT4_Gui(); virtual ~QT4_Gui(); QWidget *getParentWidget() const { return _parentWidget;}; void pushParentWidget(QWidget *w); void popParentWidget(); static QString extractHtml(const char *text); protected: /** @name User Interaction * */ /*@{*/ virtual int execDialog(GWEN_DIALOG *dlg, uint32_t guiid); virtual int openDialog(GWEN_DIALOG *dlg, uint32_t guiid); virtual int closeDialog(GWEN_DIALOG *dlg); virtual int runDialog(GWEN_DIALOG *dlg, int untilEnd); virtual int getFileName(const char *caption, GWEN_GUI_FILENAME_TYPE fnt, uint32_t flags, const char *patterns, GWEN_BUFFER *pathBuffer, uint32_t guiid); }; #endif gwenhywfar-4.15.2beta/gui/qt4/w_textedit.cpp0000644000175000017500000000622312416477066015741 00000000000000/*************************************************************************** begin : Mon Feb 15 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include class Qt4_W_TextEdit: public Qt4_W_Widget { public: Qt4_W_TextEdit(GWEN_WIDGET *w):Qt4_W_Widget(w) { } ~Qt4_W_TextEdit() { } virtual int setup() { QTextEdit *qw; uint32_t flags; GWEN_WIDGET *wParent; QSizePolicy::Policy hpolicy=QSizePolicy::Minimum; QSizePolicy::Policy vpolicy=QSizePolicy::Minimum; const char *s; QString text; QT4_GuiDialog *qtDialog; flags=GWEN_Widget_GetFlags(_widget); wParent=GWEN_Widget_Tree_GetParent(_widget); s=GWEN_Widget_GetText(_widget, 0); if (s) text=QString::fromUtf8(s); qw=new QTextEdit(text); /* handle flags */ if (flags & GWEN_WIDGET_FLAGS_FILLX) hpolicy=QSizePolicy::Expanding; if (flags & GWEN_WIDGET_FLAGS_FILLY) vpolicy=QSizePolicy::Expanding; qw->setSizePolicy(hpolicy, vpolicy); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_REAL, (void*) qw); qtDialog=dynamic_cast(getDialog()); assert(qtDialog); qw->connect(qw, SIGNAL(returnPressed()), qtDialog->getMainWindow(), SLOT(slotActivated())); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, _widget); return 0; } int setCharProperty(GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { QTextEdit *qw; QString text; qw=(QTextEdit*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); if (value) text=QString::fromUtf8(value); switch(prop) { case GWEN_DialogProperty_Value: qw->setText(text); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(_widget))); return GWEN_ERROR_INVALID; }; const char *getCharProperty(GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { QTextEdit *qw; QString str; qw=(QTextEdit*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); switch(prop) { case GWEN_DialogProperty_Value: str=qw->toPlainText(); if (str.isEmpty()) return defaultValue; else { GWEN_Widget_SetText(_widget, QT4_DIALOG_STRING_TITLE, str.toUtf8()); return GWEN_Widget_GetText(_widget, QT4_DIALOG_STRING_TITLE); } break; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(_widget))); return defaultValue; }; }; gwenhywfar-4.15.2beta/gui/qt4/w_label.cpp0000644000175000017500000000564412416477066015174 00000000000000/*************************************************************************** begin : Mon Feb 15 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include class Qt4_W_Label: public Qt4_W_Widget { public: Qt4_W_Label(GWEN_WIDGET *w):Qt4_W_Widget(w) { } ~Qt4_W_Label() { } virtual int setup() { QLabel *qw; uint32_t flags; GWEN_WIDGET *wParent; QSizePolicy::Policy hpolicy=QSizePolicy::Minimum; QSizePolicy::Policy vpolicy=QSizePolicy::Minimum; const char *s; QString text; flags=GWEN_Widget_GetFlags(_widget); wParent=GWEN_Widget_Tree_GetParent(_widget); s=GWEN_Widget_GetText(_widget, 0); if (s) text=QT4_Gui::extractHtml(s); qw=new QLabel(text); qw->setWordWrap(true); /* handle flags */ if (flags & GWEN_WIDGET_FLAGS_FILLX) hpolicy=QSizePolicy::Expanding; if (flags & GWEN_WIDGET_FLAGS_FILLY) vpolicy=QSizePolicy::Expanding; qw->setSizePolicy(hpolicy, vpolicy); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_REAL, (void*) qw); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, _widget); return 0; } int setCharProperty(GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { QLabel *qw; QString text; qw=(QLabel*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); if (value) text=QT4_Gui::extractHtml(value); switch(prop) { case GWEN_DialogProperty_Title: qw->setText(text); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(_widget))); return GWEN_ERROR_INVALID; }; const char *getCharProperty(GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { QLabel *qw; QString str; qw=(QLabel*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); switch(prop) { case GWEN_DialogProperty_Title: str=qw->text(); if (str.isEmpty()) return defaultValue; else { GWEN_Widget_SetText(_widget, QT4_DIALOG_STRING_TITLE, str.toUtf8()); return GWEN_Widget_GetText(_widget, QT4_DIALOG_STRING_TITLE); } break; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(_widget))); return defaultValue; }; }; gwenhywfar-4.15.2beta/gui/qt4/w_progressbar.cpp0000644000175000017500000000500312416477066016433 00000000000000/*************************************************************************** begin : Mon Feb 15 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include class Qt4_W_ProgressBar: public Qt4_W_Widget { public: Qt4_W_ProgressBar(GWEN_WIDGET *w):Qt4_W_Widget(w) { } ~Qt4_W_ProgressBar() { } virtual int setup() { QProgressBar *qw; uint32_t flags; GWEN_WIDGET *wParent; QSizePolicy::Policy hpolicy=QSizePolicy::Minimum; QSizePolicy::Policy vpolicy=QSizePolicy::Minimum; flags=GWEN_Widget_GetFlags(_widget); wParent=GWEN_Widget_Tree_GetParent(_widget); qw=new QProgressBar(); qw->setTextVisible(true); /* handle flags */ if (flags & GWEN_WIDGET_FLAGS_FILLX) hpolicy=QSizePolicy::Expanding; if (flags & GWEN_WIDGET_FLAGS_FILLY) vpolicy=QSizePolicy::Expanding; qw->setSizePolicy(hpolicy, vpolicy); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_REAL, (void*) qw); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, _widget); return 0; } int setIntProperty(GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { QProgressBar *qw; qw=(QProgressBar*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); switch(prop) { case GWEN_DialogProperty_Value: qw->setValue(value); return 0; case GWEN_DialogProperty_MinValue: qw->setMinimum(value); return 0; case GWEN_DialogProperty_MaxValue: qw->setMaximum(value); return 0; default: return Qt4_W_Widget::setIntProperty(prop, index, value, doSignal); } }; int getIntProperty(GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { QProgressBar *qw; qw=(QProgressBar*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); switch(prop) { case GWEN_DialogProperty_Value: return qw->value(); case GWEN_DialogProperty_MinValue: return qw->minimum(); case GWEN_DialogProperty_MaxValue: return qw->maximum(); default: return Qt4_W_Widget::getIntProperty(prop, index, defaultValue); } }; }; gwenhywfar-4.15.2beta/gui/qt4/w_groupbox.cpp0000644000175000017500000000375212364015347015750 00000000000000/*************************************************************************** begin : Mon Feb 15 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include class Qt4_W_GroupBox: public Qt4_W_Widget { public: Qt4_W_GroupBox(GWEN_WIDGET *w):Qt4_W_Widget(w) { } ~Qt4_W_GroupBox() { } virtual int setup() { QWidget *qw; uint32_t flags; GWEN_WIDGET *wParent; QLayout *qLayout; QSizePolicy::Policy hpolicy=QSizePolicy::Minimum; QSizePolicy::Policy vpolicy=QSizePolicy::Minimum; const char *s; QString text; flags=GWEN_Widget_GetFlags(_widget); wParent=GWEN_Widget_Tree_GetParent(_widget); s=GWEN_Widget_GetText(_widget, 0); if (s) text=QString::fromUtf8(s); qw=new QGroupBox(text); qLayout=new QVBoxLayout(qw); /* handle flags */ if (flags & GWEN_WIDGET_FLAGS_FILLX) hpolicy=QSizePolicy::Expanding; if (flags & GWEN_WIDGET_FLAGS_FILLY) vpolicy=QSizePolicy::Expanding; qw->setSizePolicy(hpolicy, vpolicy); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_REAL, (void*) qw); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_LAYOUT, (void*) qLayout); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, _widget); return 0; } int addChildGuiWidget(GWEN_WIDGET *wChild) { QWidget *qw; QBoxLayout *qLayout; QWidget *qChild; qw=(QWidget*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); qLayout=(QBoxLayout*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_LAYOUT); assert(qLayout); qChild=getQWidget(wChild); assert(qChild); qChild->setParent(qw); qLayout->addWidget(qChild); return 0; } }; gwenhywfar-4.15.2beta/gui/qt4/w_checkbox.cpp0000644000175000017500000001002112416477066015664 00000000000000/*************************************************************************** begin : Mon Feb 15 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include class Qt4_W_CheckBox: public Qt4_W_Widget { public: Qt4_W_CheckBox(GWEN_WIDGET *w):Qt4_W_Widget(w) { } ~Qt4_W_CheckBox() { } virtual int setup() { QWidget *qw; uint32_t flags; GWEN_WIDGET *wParent; QSizePolicy::Policy hpolicy=QSizePolicy::Minimum; QSizePolicy::Policy vpolicy=QSizePolicy::Minimum; const char *s; QString text; QT4_GuiDialog *qtDialog; flags=GWEN_Widget_GetFlags(_widget); wParent=GWEN_Widget_Tree_GetParent(_widget); s=GWEN_Widget_GetText(_widget, 0); if (s) text=QString::fromUtf8(s); qw=new QCheckBox(text); /* handle flags */ if (flags & GWEN_WIDGET_FLAGS_FILLX) hpolicy=QSizePolicy::Expanding; if (flags & GWEN_WIDGET_FLAGS_FILLY) vpolicy=QSizePolicy::Expanding; qw->setSizePolicy(hpolicy, vpolicy); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_REAL, (void*) qw); qtDialog=dynamic_cast(getDialog()); assert(qtDialog); qw->connect(qw, SIGNAL(toggled(bool)), qtDialog->getMainWindow(), SLOT(slotActivated())); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, _widget); return 0; } int setIntProperty(GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { QCheckBox *qw; qw=(QCheckBox*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); switch(prop) { case GWEN_DialogProperty_Value: qw->setChecked((value==0)?false:true); return 0; default: return Qt4_W_Widget::setIntProperty(prop, index, value, doSignal); } }; int getIntProperty(GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { QCheckBox *qw; qw=(QCheckBox*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); switch(prop) { case GWEN_DialogProperty_Value: return (qw->isChecked())?1:0; default: return Qt4_W_Widget::getIntProperty(prop, index, defaultValue); } }; int setCharProperty(GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { QCheckBox *qw; QString text; qw=(QCheckBox*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); if (value) text=QString::fromUtf8(value); switch(prop) { case GWEN_DialogProperty_Title: qw->setText(text); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(_widget))); return GWEN_ERROR_INVALID; }; const char *getCharProperty(GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { QCheckBox *qw; QString str; qw=(QCheckBox*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); switch(prop) { case GWEN_DialogProperty_Title: str=qw->text(); if (str.isEmpty()) return defaultValue; else { GWEN_Widget_SetText(_widget, QT4_DIALOG_STRING_TITLE, str.toUtf8()); return GWEN_Widget_GetText(_widget, QT4_DIALOG_STRING_TITLE); } break; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(_widget))); return defaultValue; }; }; gwenhywfar-4.15.2beta/gui/qt4/w_hlayout.cpp0000644000175000017500000000355112364015347015565 00000000000000/*************************************************************************** begin : Mon Feb 15 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include class Qt4_W_HLayout: public Qt4_W_Widget { public: Qt4_W_HLayout(GWEN_WIDGET *w):Qt4_W_Widget(w) { } ~Qt4_W_HLayout() { } virtual int setup() { QWidget *qw; uint32_t flags; GWEN_WIDGET *wParent; QLayout *qLayout; QSizePolicy::Policy hpolicy=QSizePolicy::Minimum; QSizePolicy::Policy vpolicy=QSizePolicy::Minimum; flags=GWEN_Widget_GetFlags(_widget); wParent=GWEN_Widget_Tree_GetParent(_widget); qw=new QWidget(); qLayout=new QHBoxLayout(qw); /* handle flags */ if (flags & GWEN_WIDGET_FLAGS_FILLX) hpolicy=QSizePolicy::Expanding; if (flags & GWEN_WIDGET_FLAGS_FILLY) vpolicy=QSizePolicy::Expanding; qw->setSizePolicy(hpolicy, vpolicy); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_REAL, (void*) qw); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_LAYOUT, (void*) qLayout); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, _widget); return 0; } int addChildGuiWidget(GWEN_WIDGET *wChild) { QWidget *qw; QBoxLayout *qLayout; QWidget *qChild; qw=(QWidget*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); qLayout=(QBoxLayout*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_LAYOUT); assert(qLayout); qChild=getQWidget(wChild); assert(qChild); qChild->setParent(qw); qLayout->addWidget(qChild); return 0; } }; gwenhywfar-4.15.2beta/gui/qt4/Makefile.am0000644000175000017500000000406112364015347015077 00000000000000INCLUDES=-I$(gwenhywfar_symlinkdir) $(qt4_includes) AM_CPPFLAGS= @visibility_cflags@ DEFS=-DBUILDING_QT4_GUI pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = gwengui-qt4.pc cmakeconfigdir = $(libdir)/cmake/gwengui-qt4-@GWENHYWFAR_VERSION_MAJOR@.@GWENHYWFAR_VERSION_MINOR@ cmakeconfig_DATA = gwengui-qt4-config.cmake gwengui-qt4-config-version.cmake lib_LTLIBRARIES=libgwengui-qt4.la noinst_PROGRAMS=libtest noinst_HEADERS=\ qt4dialogbox.hpp \ qt4_gui_dialog.hpp \ qt4_gui_dialog.hpp libgwengui_qt4_la_LIBADD=$(qt4_libs) $(top_builddir)/src/$(gwenhywfar_internal_libname) $(builddir)/../cpp/libgwengui-cpp.la libgwengui_qt4_la_SOURCES=\ qt4dialogbox.cpp \ qt4_gui.cpp \ qt4_gui_dialog.cpp nodist_libgwengui_qt4_la_SOURCES= nodist_noinst_HEADERS= iheaderdir=${gwenhywfar_headerdir_am}/gwen-gui-qt4 iheader_HEADERS=\ qt4_gui.hpp MOC_FILES=\ qt4dialogbox.moc UI_FILES= EXTRA_DIST=$(UI_FILES) \ w_widget.cpp \ w_dialog.cpp \ w_vlayout.cpp \ w_hlayout.cpp \ w_gridlayout.cpp \ w_label.cpp \ w_lineedit.cpp \ w_pushbutton.cpp \ w_hline.cpp \ w_vline.cpp \ w_textedit.cpp \ w_combobox.cpp \ w_tabbook.cpp \ w_checkbox.cpp \ w_groupbox.cpp \ w_widgetstack.cpp \ w_textbrowser.cpp \ w_scrollarea.cpp \ w_progressbar.cpp \ w_listbox.cpp \ w_radiobutton.cpp \ w_spinbox.cpp libtest_SOURCES=libtest.cpp libtest_LDADD=libgwengui-qt4.la $(top_builddir)/src/$(gwenhywfar_internal_libname) $(qt4_libs) \ $(top_builddir)/gui/cpp/libgwengui-cpp.la \ $(builddir)/../testdialogs/libgwengui-test.la SUFFIXES = .ui .ui.hpp .ui.cpp .moc %.moc: %.hpp $(qt4_moc) -o $@ $< %.ui.hpp: %.ui $(qt4_uic) $< -o $@ sources: for f in $(libgwengui_qt4_la_SOURCES) $(foreach uifile,$(UI_FILES),$(uifile).cpp); do \ echo $(subdir)/$$f >>$(top_srcdir)/qtsources; \ done for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done built_sources: $(BUILT_SOURCES) for d in $(SUBDIRS); do \ $(MAKE) -C $$d built_sources; \ done ; BUILT_SOURCES = $(MOC_FILES) $(nodist_libgwengui_qt4_la_SOURCES) CLEANFILES = $(BUILT_SOURCES) gwenhywfar-4.15.2beta/gui/qt4/w_hline.cpp0000644000175000017500000000274112364015347015177 00000000000000/*************************************************************************** begin : Mon Feb 15 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include class Qt4_W_HLine: public Qt4_W_Widget { public: Qt4_W_HLine(GWEN_WIDGET *w):Qt4_W_Widget(w) { } ~Qt4_W_HLine() { } virtual int setup() { QFrame *qw; uint32_t flags; GWEN_WIDGET *wParent; QSizePolicy::Policy hpolicy=QSizePolicy::Minimum; QSizePolicy::Policy vpolicy=QSizePolicy::Minimum; const char *s; QString text; flags=GWEN_Widget_GetFlags(_widget); wParent=GWEN_Widget_Tree_GetParent(_widget); s=GWEN_Widget_GetText(_widget, 0); if (s) text=QString::fromUtf8(s); qw=new QFrame(); qw->setFrameShape(QFrame::HLine); qw->setFrameShadow(QFrame::Sunken); /* handle flags */ if (flags & GWEN_WIDGET_FLAGS_FILLX) hpolicy=QSizePolicy::Expanding; if (flags & GWEN_WIDGET_FLAGS_FILLY) vpolicy=QSizePolicy::Expanding; qw->setSizePolicy(hpolicy, vpolicy); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_REAL, (void*) qw); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, _widget); return 0; } }; gwenhywfar-4.15.2beta/gui/qt4/qt4dialogbox.cpp0000644000175000017500000001217512416477066016165 00000000000000/*************************************************************************** begin : Tue Feb 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "qt4dialogbox.hpp" #include "qt4_gui_dialog.hpp" #include #include QT4_DialogBox::QT4_DialogBox(QT4_GuiDialog *dialog, QWidget *parent, bool modal, Qt::WindowFlags f) :QDialog(parent, f) ,_dialog(dialog) { setModal(modal); } QT4_DialogBox::~QT4_DialogBox() { } void QT4_DialogBox::accept() { QDialog::accept(); } void QT4_DialogBox::reject() { QDialog::reject(); } int QT4_DialogBox::cont() { return exec(); } void QT4_DialogBox::closeEvent(QCloseEvent *e) { if (_dialog) { int rv; rv=GWEN_Dialog_EmitSignal(_dialog->getCInterface(), GWEN_DialogEvent_TypeClose, ""); if (rv!=GWEN_DialogEvent_ResultReject) { e->accept(); } } else { e->accept(); } } void QT4_DialogBox::unlinkFromDialog() { _dialog=NULL; } void QT4_DialogBox::slotActivated() { const QObject *snd; snd=sender(); if (snd) { GWEN_WIDGET *w; const char *wname; int rv=GWEN_DialogEvent_ResultNotHandled; w=GWEN_Dialog_FindWidgetByImplData(_dialog->getCInterface(), QT4_DIALOG_WIDGET_REAL, snd); if (w==NULL) { DBG_INFO(0, "Widget not found"); return; } wname=GWEN_Widget_GetName(w); DBG_INFO(GWEN_LOGDOMAIN, "Command for [%s] (type: %s)", wname?wname:"(unnamed)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); switch(GWEN_Widget_GetType(w)) { case GWEN_Widget_TypeUnknown: case GWEN_Widget_TypeNone: break; case GWEN_Widget_TypePushButton: case GWEN_Widget_TypeLineEdit: case GWEN_Widget_TypeComboBox: case GWEN_Widget_TypeListBox: case GWEN_Widget_TypeCheckBox: case GWEN_Widget_TypeLabel: case GWEN_Widget_TypeTextEdit: case GWEN_Widget_TypeSpinBox: rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w), GWEN_DialogEvent_TypeActivated, GWEN_Widget_GetName(w)); break; case GWEN_Widget_TypeRadioButton: case GWEN_Widget_TypeProgressBar: case GWEN_Widget_TypeGroupBox: case GWEN_Widget_TypeHSpacer: case GWEN_Widget_TypeVSpacer: case GWEN_Widget_TypeHLayout: case GWEN_Widget_TypeVLayout: case GWEN_Widget_TypeGridLayout: case GWEN_Widget_TypeDialog: case GWEN_Widget_TypeTabBook: case GWEN_Widget_TypeTabPage: case GWEN_Widget_TypeScrollArea: case GWEN_Widget_TypeWidgetStack: case GWEN_Widget_TypeHLine: case GWEN_Widget_TypeVLine: case GWEN_Widget_TypeTextBrowser: /* nothing to do for these types */ ; } if (rv==GWEN_DialogEvent_ResultAccept) { accept(); } else if (rv==GWEN_DialogEvent_ResultReject) { reject(); } } } void QT4_DialogBox::slotValueChanged() { const QObject *snd; snd=sender(); if (snd) { GWEN_WIDGET *w; const char *wname; int rv=GWEN_DialogEvent_ResultNotHandled; w=GWEN_Dialog_FindWidgetByImplData(_dialog->getCInterface(), QT4_DIALOG_WIDGET_REAL, snd); if (w==NULL) { DBG_INFO(0, "Widget not found"); return; } wname=GWEN_Widget_GetName(w); DBG_INFO(GWEN_LOGDOMAIN, "ValueChanged for [%s] (type: %s)", wname?wname:"(unnamed)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); switch(GWEN_Widget_GetType(w)) { case GWEN_Widget_TypeUnknown: case GWEN_Widget_TypeNone: break; case GWEN_Widget_TypePushButton: case GWEN_Widget_TypeLineEdit: case GWEN_Widget_TypeComboBox: case GWEN_Widget_TypeListBox: case GWEN_Widget_TypeCheckBox: case GWEN_Widget_TypeLabel: case GWEN_Widget_TypeTextEdit: case GWEN_Widget_TypeSpinBox: rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w), GWEN_DialogEvent_TypeValueChanged, GWEN_Widget_GetName(w)); break; case GWEN_Widget_TypeRadioButton: case GWEN_Widget_TypeProgressBar: case GWEN_Widget_TypeGroupBox: case GWEN_Widget_TypeHSpacer: case GWEN_Widget_TypeVSpacer: case GWEN_Widget_TypeHLayout: case GWEN_Widget_TypeVLayout: case GWEN_Widget_TypeGridLayout: case GWEN_Widget_TypeDialog: case GWEN_Widget_TypeTabBook: case GWEN_Widget_TypeTabPage: case GWEN_Widget_TypeScrollArea: case GWEN_Widget_TypeWidgetStack: case GWEN_Widget_TypeHLine: case GWEN_Widget_TypeVLine: case GWEN_Widget_TypeTextBrowser: /* nothing to do for these types */ ; } if (rv==GWEN_DialogEvent_ResultAccept) { accept(); } else if (rv==GWEN_DialogEvent_ResultReject) { reject(); } } } #include "qt4dialogbox.moc" gwenhywfar-4.15.2beta/gui/qt4/gwengui-qt4.pc.in0000644000175000017500000000105612364015347016150 00000000000000# pkg-config configuration for gwengui_qt4 # For information about the syntax, see pkg-config(1) # General installation directories prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ pkgincludedir=@includedir@/gwenhywfar datarootdir=@datarootdir@ datadir=@datadir@ bindir=@bindir@ sysconfdir=@sysconfdir@ # Human-readable name Name: gwengui-qt4 # Human-readable description Description: QT4 Implementation of the GWEN_DIALOG framework. Version: @VERSION@ Libs: -L@libdir@ -lgwengui-qt4 -lgwengui-cpp Cflags: -I@includedir@ gwenhywfar-4.15.2beta/gui/qt4/qt4_gui.cpp0000644000175000017500000001213012416477066015127 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "qt4_gui.hpp" #include "qt4_gui_dialog.hpp" #include #include #include #include #include QT4_Gui::QT4_Gui() :CppGui() ,_parentWidget(NULL) { GWEN_Gui_AddFlags(_gui, GWEN_GUI_FLAGS_DIALOGSUPPORTED); GWEN_Gui_UseDialogs(_gui); GWEN_Gui_SetName(_gui, "qt4-gui"); } QT4_Gui::~QT4_Gui() { } void QT4_Gui::pushParentWidget(QWidget *w) { if (_parentWidget) _pushedParents.push_back(_parentWidget); _parentWidget=w; } void QT4_Gui::popParentWidget() { if (!_pushedParents.empty()) { _parentWidget=_pushedParents.back(); _pushedParents.pop_back(); } else _parentWidget=NULL; } QString QT4_Gui::extractHtml(const char *text) { const char *p=0; const char *p2=0; if (text==NULL) return QString(""); /* find begin of HTML area */ p=text; while ((p=strchr(p, '<'))) { const char *t; t=p; t++; if (toupper(*t)=='H') { t++; if (toupper(*t)=='T') { t++; if (toupper(*t)=='M') { t++; if (toupper(*t)=='L') { t++; if (toupper(*t)=='>') { break; } } } } } p++; } /* while */ /* find end of HTML area */ if (p) { p+=6; /* skip "" */ p2=p; while ((p2=strchr(p2, '<'))) { const char *t; t=p2; t++; if (toupper(*t)=='/') { t++; if (toupper(*t)=='H') { t++; if (toupper(*t)=='T') { t++; if (toupper(*t)=='M') { t++; if (toupper(*t)=='L') { t++; if (toupper(*t)=='>') { break; } } } } } } p2++; } /* while */ } if (p && p2) return QString("")+QString::fromUtf8(p, p2-p)+QString(""); return QString::fromUtf8(text); } int QT4_Gui::execDialog(GWEN_DIALOG *dlg, uint32_t guiid) { QT4_GuiDialog qt4Dlg(this, dlg); QWidget *owner=qApp->activeWindow(); /* setup widget tree for the dialog */ if (!(qt4Dlg.setup(owner))) { return GWEN_ERROR_GENERIC; } return qt4Dlg.execute(); } int QT4_Gui::openDialog(GWEN_DIALOG *dlg, uint32_t guiid) { QT4_GuiDialog *qt4Dlg; QWidget *owner=qApp->activeWindow(); qt4Dlg=new QT4_GuiDialog(this, dlg); /* setup widget tree for the dialog */ if (!(qt4Dlg->setup(owner))) { delete qt4Dlg; return GWEN_ERROR_GENERIC; } return qt4Dlg->openDialog(); } int QT4_Gui::closeDialog(GWEN_DIALOG *dlg) { QT4_GuiDialog *qt4Dlg; int rv; qt4Dlg=QT4_GuiDialog::getDialog(dlg); assert(qt4Dlg); rv=qt4Dlg->closeDialog(); delete qt4Dlg; return rv; } int QT4_Gui::runDialog(GWEN_DIALOG *dlg, int untilEnd) { QT4_GuiDialog *qt4Dlg; qt4Dlg=QT4_GuiDialog::getDialog(dlg); assert(qt4Dlg); return qt4Dlg->runDialog((untilEnd==0)?false:true); } int QT4_Gui::getFileName(const char *caption, GWEN_GUI_FILENAME_TYPE fnt, uint32_t flags, const char *patterns, GWEN_BUFFER *pathBuffer, uint32_t guiid) { QString sCaption; QString sPatterns; QString sPath; QString str; QWidget *owner=qApp->activeWindow(); if (caption) sCaption=QString::fromUtf8(caption); if (patterns) { const char *s1; const char *s2; s1=patterns; while(s1 && *s1) { s2=strchr(s1, '\t'); if (s2) { str=QString::fromUtf8(s1, s2-s1); str.replace(',', ' '); str.replace(';', ' '); /* skip tab */ s2++; } else { str=QString::fromUtf8(s1); str.replace(',', ' '); str.replace(';', ' '); s2=NULL; } if (!str.isEmpty()) sPatterns+=";;"; sPatterns+=str; s1=s2; } } if (GWEN_Buffer_GetUsedBytes(pathBuffer)) sPath=QString::fromUtf8(GWEN_Buffer_GetStart(pathBuffer)); switch(fnt) { case GWEN_Gui_FileNameType_OpenFileName: str=QFileDialog::getOpenFileName(owner, sCaption, sPath, sPatterns); break; case GWEN_Gui_FileNameType_SaveFileName: str=QFileDialog::getSaveFileName(owner, sCaption, sPath, sPatterns); break; case GWEN_Gui_FileNameType_OpenDirectory: str=QFileDialog::getExistingDirectory(owner, sCaption, sPath); break; } if (str.isEmpty()) { DBG_ERROR(GWEN_LOGDOMAIN, "Empty filename returned."); return GWEN_ERROR_ABORTED; } else { GWEN_Buffer_Reset(pathBuffer); GWEN_Buffer_AppendString(pathBuffer, str.toUtf8()); return 0; } } gwenhywfar-4.15.2beta/gui/qt4/gwengui-qt4-config.cmake.in0000644000175000017500000000204612416477066020101 00000000000000 # Macros cmake's CONFIGURE_PACKAGE_CONFIG_FILE() would create macro(set_and_check _var _file) set(${_var} "${_file}") if(NOT EXISTS "${_file}") message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !") endif() endmacro() macro(check_required_components _NAME) foreach(comp ${${_NAME}_FIND_COMPONENTS}) if(NOT ${_NAME}_${comp}_FOUND) if(${_NAME}_FIND_REQUIRED_${comp}) set(${_NAME}_FOUND FALSE) endif() endif() endforeach() endmacro() set_and_check(prefix "@prefix@") set_and_check(exec_prefix "@exec_prefix@") set_and_check(includedir "@includedir@") set_and_check(GWENGUI_QT4_INCLUDE_DIRS "@gwenhywfar_headerdir@") set_and_check(GWENGUI_QT4_LIBRARIES "@libdir@/libgwengui-qt4.so") set_and_check(GWENHYWFAR_CPP_LIBRARIES "@libdir@/libgwengui-cpp.so") set(GWENGUI_QT4_LIBRARIES ${GWENGUI_QT4_LIBRARIES} ${GWENHYWFAR_CPP_LIBRARIES}) mark_as_advanced( GWENGUI_QT4_INCLUDE_DIRS GWENGUI_QT4_LIBRARIES GWENHYWFAR_CPP_LIBRARIES) gwenhywfar-4.15.2beta/gui/qt4/w_vlayout.cpp0000644000175000017500000000355212364015347015604 00000000000000/*************************************************************************** begin : Mon Feb 15 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include class Qt4_W_VLayout: public Qt4_W_Widget { public: Qt4_W_VLayout(GWEN_WIDGET *w):Qt4_W_Widget(w) { } ~Qt4_W_VLayout() { } virtual int setup() { QWidget *qw; uint32_t flags; GWEN_WIDGET *wParent; QLayout *qLayout; QSizePolicy::Policy hpolicy=QSizePolicy::Minimum; QSizePolicy::Policy vpolicy=QSizePolicy::Minimum; flags=GWEN_Widget_GetFlags(_widget); wParent=GWEN_Widget_Tree_GetParent(_widget); qw=new QWidget(); qLayout=new QVBoxLayout(qw); /* handle flags */ if (flags & GWEN_WIDGET_FLAGS_FILLX) hpolicy=QSizePolicy::Expanding; if (flags & GWEN_WIDGET_FLAGS_FILLY) vpolicy=QSizePolicy::Expanding; qw->setSizePolicy(hpolicy, vpolicy); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_REAL, (void*) qw); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_LAYOUT, (void*) qLayout); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, _widget); return 0; } int addChildGuiWidget(GWEN_WIDGET *wChild) { QWidget *qw; QBoxLayout *qLayout; QWidget *qChild; qw=(QWidget*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); qLayout=(QBoxLayout*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_LAYOUT); assert(qLayout); qChild=getQWidget(wChild); assert(qChild); qChild->setParent(qw); qLayout->addWidget(qChild); return 0; }; }; gwenhywfar-4.15.2beta/gui/qt4/qt4_gui_dialog.cpp0000644000175000017500000002106712416477066016457 00000000000000/*************************************************************************** begin : Mon Feb 15 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include "qt4_gui_dialog.hpp" #include "qt4dialogbox.hpp" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define QT4_DIALOG_WIDGET_REAL 0 #define QT4_DIALOG_WIDGET_CONTENT 1 #define QT4_DIALOG_WIDGET_LAYOUT 2 #define QT4_DIALOG_STRING_TITLE 0 #define QT4_DIALOG_STRING_VALUE 1 #include "w_widget.cpp" #include "w_dialog.cpp" #include "w_vlayout.cpp" #include "w_hlayout.cpp" #include "w_gridlayout.cpp" #include "w_label.cpp" #include "w_lineedit.cpp" #include "w_pushbutton.cpp" #include "w_hline.cpp" #include "w_vline.cpp" #include "w_textedit.cpp" #include "w_combobox.cpp" #include "w_tabbook.cpp" #include "w_checkbox.cpp" #include "w_groupbox.cpp" #include "w_widgetstack.cpp" #include "w_textbrowser.cpp" #include "w_scrollarea.cpp" #include "w_progressbar.cpp" #include "w_listbox.cpp" #include "w_radiobutton.cpp" #include "w_spinbox.cpp" QT4_GuiDialog::QT4_GuiDialog(QT4_Gui *gui, GWEN_DIALOG *dlg) :CppDialog(dlg) ,_gui(gui) ,_mainWidget(NULL) { } QT4_GuiDialog::~QT4_GuiDialog() { if (_mainWidget) _mainWidget->unlinkFromDialog(); } QT4_GuiDialog *QT4_GuiDialog::getDialog(GWEN_DIALOG *dlg) { CppDialog *cppDlg; cppDlg=CppDialog::getDialog(dlg); if (cppDlg) return dynamic_cast(cppDlg); return NULL; } int QT4_GuiDialog::execute() { QT4_DialogBox *dialogBox; int rv; dialogBox=dynamic_cast(getMainWindow()); if (dialogBox==NULL) { DBG_INFO(0, "Dialog's main widget is not derived from class FXDialogBox"); return GWEN_ERROR_GENERIC; } /* execute dialog */ rv=dialogBox->exec(); GWEN_Dialog_EmitSignalToAll(_dialog, GWEN_DialogEvent_TypeFini, ""); if (rv==QT4_DialogBox::Accepted) { /* accepted */ return 1; } else return 0; } int QT4_GuiDialog::openDialog() { QT4_DialogBox *dialogBox; dialogBox=dynamic_cast(getMainWindow()); if (dialogBox==NULL) { DBG_INFO(0, "Dialog's main widget is not derived from class FXDialogBox"); return GWEN_ERROR_GENERIC; } /* show dialog */ dialogBox->show(); /* gui update */ qApp->processEvents(); return 0; } int QT4_GuiDialog::closeDialog() { QT4_DialogBox *dialogBox; dialogBox=dynamic_cast(getMainWindow()); if (dialogBox==NULL) { DBG_INFO(0, "Dialog's main widget is not derived from class FXDialogBox"); return GWEN_ERROR_GENERIC; } /* let dialog write its settings */ GWEN_Dialog_EmitSignalToAll(_dialog, GWEN_DialogEvent_TypeFini, ""); /* hide dialog */ dialogBox->hide(); /* gui update */ qApp->processEvents(); delete _mainWidget; _mainWidget=NULL; return 0; } int QT4_GuiDialog::runDialog(bool untilEnd) { QT4_DialogBox *dialogBox; dialogBox=dynamic_cast(getMainWindow()); if (dialogBox==NULL) { DBG_INFO(0, "Dialog's main widget is not derived from class FXDialogBox"); return GWEN_ERROR_GENERIC; } if (untilEnd) { dialogBox->cont(); } else { { /* gui update */ qApp->processEvents(); } } return 0; } int QT4_GuiDialog::setIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { return GWEN_Widget_SetIntProperty(w, prop, index, value, doSignal); } int QT4_GuiDialog::getIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { return GWEN_Widget_GetIntProperty(w, prop, index, defaultValue); } int QT4_GuiDialog::setCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { return GWEN_Widget_SetCharProperty(w, prop, index, value, doSignal); } const char *QT4_GuiDialog::getCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { return GWEN_Widget_GetCharProperty(w, prop, index, defaultValue); } int QT4_GuiDialog::setupTree(GWEN_WIDGET *w) { int rv; Qt4_W_Widget *xw=NULL; switch(GWEN_Widget_GetType(w)) { case GWEN_Widget_TypeDialog: xw=new Qt4_W_Dialog(w); break; case GWEN_Widget_TypeVLayout: xw=new Qt4_W_VLayout(w); break; case GWEN_Widget_TypeHLayout: xw=new Qt4_W_HLayout(w); break; case GWEN_Widget_TypeGridLayout: xw=new Qt4_W_GridLayout(w); break; case GWEN_Widget_TypeLabel: xw=new Qt4_W_Label(w); break; case GWEN_Widget_TypeLineEdit: xw=new Qt4_W_LineEdit(w); break; case GWEN_Widget_TypeVSpacer: case GWEN_Widget_TypeHSpacer: /* abuse widget */ xw=new Qt4_W_Widget(w); break; case GWEN_Widget_TypePushButton: xw=new Qt4_W_PushButton(w); break; case GWEN_Widget_TypeHLine: xw=new Qt4_W_HLine(w); break; case GWEN_Widget_TypeVLine: xw=new Qt4_W_VLine(w); break; case GWEN_Widget_TypeTextEdit: xw=new Qt4_W_TextEdit(w); break; case GWEN_Widget_TypeComboBox: xw=new Qt4_W_ComboBox(w); break; case GWEN_Widget_TypeTabBook: xw=new Qt4_W_TabBook(w); break; case GWEN_Widget_TypeTabPage: xw=new Qt4_W_VLayout(w); break; case GWEN_Widget_TypeCheckBox: xw=new Qt4_W_CheckBox(w); break; case GWEN_Widget_TypeGroupBox: xw=new Qt4_W_GroupBox(w); break; case GWEN_Widget_TypeWidgetStack: xw=new Qt4_W_WidgetStack(w); break; case GWEN_Widget_TypeTextBrowser: xw=new Qt4_W_TextBrowser(w); break; case GWEN_Widget_TypeScrollArea: xw=new Qt4_W_ScrollArea(w); break; case GWEN_Widget_TypeProgressBar: xw=new Qt4_W_ProgressBar(w); break; case GWEN_Widget_TypeListBox: xw=new Qt4_W_ListBox(w); break; case GWEN_Widget_TypeRadioButton: xw=new Qt4_W_RadioButton(w); break; case GWEN_Widget_TypeSpinBox: xw=new Qt4_W_SpinBox(w); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Unhandled widget type %d (%s)", GWEN_Widget_GetType(w), GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); break; } if (xw==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No widget created."); return GWEN_ERROR_INTERNAL; } rv=xw->setup(); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } else { GWEN_WIDGET *wChild; if (GWEN_Widget_GetType(w)==GWEN_Widget_TypeDialog) _mainWidget=(QT4_DialogBox*) GWEN_Widget_GetImplData(xw->getCInterface(), QT4_DIALOG_WIDGET_REAL); /* handle children */ wChild=GWEN_Widget_Tree_GetFirstChild(w); while(wChild) { /* recursion */ rv=setupTree(wChild); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } wChild=GWEN_Widget_Tree_GetNext(wChild); } } return 0; } bool QT4_GuiDialog::setup(QWidget *parentWindow) { GWEN_WIDGET_TREE *wtree; GWEN_WIDGET *w; int rv; wtree=GWEN_Dialog_GetWidgets(_dialog); if (wtree==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No widget tree in dialog"); return false; } w=GWEN_Widget_Tree_GetFirst(wtree); if (w==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No widgets in dialog"); return false; } rv=setupTree(w); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "here (%d)", rv); return false; } _mainWidget=(QT4_DialogBox*) GWEN_Widget_GetImplData(w, QT4_DIALOG_WIDGET_REAL); rv=GWEN_Dialog_EmitSignalToAll(_dialog, GWEN_DialogEvent_TypeInit, ""); if (rv<0) { DBG_INFO(0, "Error initializing dialog: %d", rv); return false; } return true; } gwenhywfar-4.15.2beta/gui/qt4/w_widget.cpp0000644000175000017500000000774412416477066015403 00000000000000/*************************************************************************** begin : Mon Feb 15 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include class Qt4_W_Widget: public CppWidget { public: Qt4_W_Widget(GWEN_WIDGET *w):CppWidget(w) { } ~Qt4_W_Widget() { } virtual int setup() { QWidget *qw; uint32_t flags; GWEN_WIDGET *wParent; QSizePolicy::Policy hpolicy=QSizePolicy::Minimum; QSizePolicy::Policy vpolicy=QSizePolicy::Minimum; flags=GWEN_Widget_GetFlags(_widget); wParent=GWEN_Widget_Tree_GetParent(_widget); qw=new QWidget(); /* handle flags */ if (flags & GWEN_WIDGET_FLAGS_FILLX) hpolicy=QSizePolicy::Expanding; if (flags & GWEN_WIDGET_FLAGS_FILLY) vpolicy=QSizePolicy::Expanding; qw->setSizePolicy(hpolicy, vpolicy); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_REAL, (void*) qw); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_CONTENT, (void*) qw); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, _widget); return 0; } static QWidget *getQWidget(GWEN_WIDGET *w) { QWidget *qw; qw=(QWidget*) GWEN_Widget_GetImplData(w, QT4_DIALOG_WIDGET_REAL); assert(qw); return qw; } int setIntProperty(GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { QWidget *qw; qw=(QWidget*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); switch(prop) { case GWEN_DialogProperty_Width: qw->resize(value, qw->height()); return 0; case GWEN_DialogProperty_Height: qw->resize(qw->width(), value); return 0; case GWEN_DialogProperty_Enabled: qw->setEnabled((value==0)?false:true); return 0; case GWEN_DialogProperty_Focus: qw->setFocus(); return 0; case GWEN_DialogProperty_Visibility: if (value==0) qw->hide(); else qw->show(); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(_widget))); return GWEN_ERROR_INVALID; }; int getIntProperty(GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { QWidget *qw; qw=(QWidget*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); switch(prop) { case GWEN_DialogProperty_Width: return qw->width(); case GWEN_DialogProperty_Height: return qw->height(); case GWEN_DialogProperty_Enabled: return (qw->isEnabled())?1:0; case GWEN_DialogProperty_Focus: return (qw->hasFocus())?1:0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(_widget))); return defaultValue; }; int setCharProperty(GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(_widget))); return GWEN_ERROR_INVALID; }; const char *getCharProperty(GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(_widget))); return defaultValue; }; }; gwenhywfar-4.15.2beta/gui/qt4/gwengui-qt4-config-version.cmake.in0000644000175000017500000000050012416477066021555 00000000000000set(PACKAGE_VERSION "@VERSION@") if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" ) set(PACKAGE_VERSION_COMPATIBLE FALSE) else() set(PACKAGE_VERSION_COMPATIBLE TRUE) if( "${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}") set(PACKAGE_VERSION_EXACT TRUE) endif() endif() gwenhywfar-4.15.2beta/gui/qt4/w_listbox.cpp0000644000175000017500000002005312416477066015570 00000000000000/*************************************************************************** begin : Mon Feb 15 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include class Qt4_W_ListBox: public Qt4_W_Widget { public: Qt4_W_ListBox(GWEN_WIDGET *w):Qt4_W_Widget(w) { } ~Qt4_W_ListBox() { } virtual int setup() { QTreeWidget *qw; uint32_t flags; GWEN_WIDGET *wParent; QSizePolicy::Policy hpolicy=QSizePolicy::Minimum; QSizePolicy::Policy vpolicy=QSizePolicy::Minimum; QT4_GuiDialog *qtDialog; flags=GWEN_Widget_GetFlags(_widget); wParent=GWEN_Widget_Tree_GetParent(_widget); qw=new QTreeWidget(); qw->setAllColumnsShowFocus(true); qw->setSortingEnabled(true); qw->setRootIsDecorated(false); qw->setItemsExpandable(false); qw->setSelectionBehavior(QAbstractItemView::SelectRows); /* handle flags */ if (flags & GWEN_WIDGET_FLAGS_FILLX) hpolicy=QSizePolicy::Expanding; if (flags & GWEN_WIDGET_FLAGS_FILLY) vpolicy=QSizePolicy::Expanding; qw->setSizePolicy(hpolicy, vpolicy); GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_REAL, (void*) qw); qtDialog=dynamic_cast(getDialog()); assert(qtDialog); qw->connect(qw, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), qtDialog->getMainWindow(), SLOT(slotActivated())); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, _widget); return 0; } int setIntProperty(GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { QTreeWidget *qw; qw=(QTreeWidget*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); switch(prop) { case GWEN_DialogProperty_ClearValues: qw->clear(); return 0; case GWEN_DialogProperty_Value: { QTreeWidgetItem *item; item=qw->topLevelItem(index); if (item==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Value %d out of range", value); return GWEN_ERROR_INVALID; } qw->setCurrentItem(item); return 0; } case GWEN_DialogProperty_ColumnWidth: qw->setColumnWidth(index, value); return 0; case GWEN_DialogProperty_SelectionMode: switch(value) { case GWEN_Dialog_SelectionMode_None: qw->setSelectionMode(QAbstractItemView::NoSelection); return 0; case GWEN_Dialog_SelectionMode_Single: qw->setSelectionMode(QAbstractItemView::SingleSelection); return 0; case GWEN_Dialog_SelectionMode_Multi: qw->setSelectionMode(QAbstractItemView::ExtendedSelection); return 0; ; } DBG_ERROR(GWEN_LOGDOMAIN, "Unknown SelectionMode %d", value); return GWEN_ERROR_INVALID; case GWEN_DialogProperty_SortDirection: switch(value) { case GWEN_DialogSortDirection_None: qw->sortByColumn(-1, Qt::AscendingOrder); break; case GWEN_DialogSortDirection_Up: qw->sortByColumn(index, Qt::AscendingOrder); break; case GWEN_DialogSortDirection_Down: qw->sortByColumn(index, Qt::DescendingOrder); break; } return 0; case GWEN_DialogProperty_Sort: { int c; c=qw->sortColumn(); if (c!=-1) { QHeaderView *h; h=qw->header(); qw->sortItems(c, h->sortIndicatorOrder()); } return 0; } default: return Qt4_W_Widget::setIntProperty(prop, index, value, doSignal); } }; int getIntProperty(GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { QTreeWidget *qw; qw=(QTreeWidget*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); switch(prop) { case GWEN_DialogProperty_Value: { QTreeWidgetItem *item; int i=-1; item=qw->currentItem(); while(item) { item=qw->itemAbove(item); i++; } return i; } case GWEN_DialogProperty_ColumnWidth: return qw->columnWidth(index); case GWEN_DialogProperty_SelectionMode: switch(qw->selectionMode()) { case QAbstractItemView::NoSelection: return GWEN_Dialog_SelectionMode_None; case QAbstractItemView::SingleSelection: return GWEN_Dialog_SelectionMode_Single; case QAbstractItemView::ExtendedSelection: return GWEN_Dialog_SelectionMode_Multi; default: break; } DBG_ERROR(GWEN_LOGDOMAIN, "Unknown SelectionMode %d", qw->selectionMode()); return GWEN_ERROR_INVALID; case GWEN_DialogProperty_SortDirection: if (qw->sortColumn()!=index) return GWEN_DialogSortDirection_None; else { switch(qw->header()->sortIndicatorOrder()) { case Qt::AscendingOrder: return GWEN_DialogSortDirection_Up; case Qt::DescendingOrder: return GWEN_DialogSortDirection_Down; default: return GWEN_DialogSortDirection_None; } } break; default: return Qt4_W_Widget::getIntProperty(prop, index, defaultValue); } }; int setCharProperty(GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { QTreeWidget *qw; QString text; qw=(QTreeWidget*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); if (value) text=QT4_Gui::extractHtml(value); switch(prop) { case GWEN_DialogProperty_Title: { QString str; QString t; QStringList sl; int n=0; /* remove all columns */ qw->header()->reset(); str=text; while(!(t=str.section('\t', n, n)).isEmpty()) { sl+=t; n++; } qw->setHeaderLabels(sl); return 0; } case GWEN_DialogProperty_ClearValues: qw->clear(); return 0; case GWEN_DialogProperty_AddValue: { QString str; QString t; int n=0; QStringList sl; QTreeWidgetItem *item; str=text; while(!(t=str.section('\t', n, n)).isEmpty()) { sl+=t; n++; } item=new QTreeWidgetItem(qw, sl); return 0; } default: return Qt4_W_Widget::setCharProperty(prop, index, value, doSignal); } }; const char *getCharProperty(GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { QTreeWidget *qw; QString str; qw=(QTreeWidget*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); assert(qw); switch(prop) { case GWEN_DialogProperty_Title: { QTreeWidgetItem *item; item=qw->headerItem(); if (item) { int i; for (i=0; icolumnCount(); i++) { if (i) str+='\t'; str+=item->text(i); } if (str.isEmpty()) return defaultValue; else { GWEN_Widget_SetText(_widget, QT4_DIALOG_STRING_TITLE, str.toUtf8()); return GWEN_Widget_GetText(_widget, QT4_DIALOG_STRING_TITLE); } } return defaultValue; } case GWEN_DialogProperty_Value: { QTreeWidgetItem *item; int i; item=qw->topLevelItem(index); if (item==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Value %d out of range", index); return defaultValue; } for (i=0; icolumnCount(); i++) { if (i) str+='\t'; str+=item->text(i); } if (str.isEmpty()) return defaultValue; else { GWEN_Widget_SetText(_widget, QT4_DIALOG_STRING_VALUE, str.toUtf8()); return GWEN_Widget_GetText(_widget, QT4_DIALOG_STRING_VALUE); } } default: return Qt4_W_Widget::getCharProperty(prop, index, defaultValue); } }; }; gwenhywfar-4.15.2beta/gui/fox16/0000755000175000017500000000000012643267241013357 500000000000000gwenhywfar-4.15.2beta/gui/fox16/fox16_gui_dialog_l.hpp0000644000175000017500000000714312416477066017464 00000000000000/*************************************************************************** begin : Fri Jan 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef FOX16_GUI_DIALOG_L_HPP #define FOX16_GUI_DIALOG_L_HPP #include "fox16_gui.hpp" #include #include #include #include #include #include class FOX16_GuiDialog: public FXObject, public CppDialog { FXDECLARE(FOX16_GuiDialog) protected: class RadioButtonGroup { protected: FXDataTarget m_radioTarget; int m_groupId; FXint m_radioValue; int m_buttonCount; std::list m_buttonList; public: RadioButtonGroup(int groupId, FXObject* tgt=NULL, FXSelector sel=0) :m_radioTarget(m_radioValue, tgt, sel), m_groupId(groupId), m_radioValue(0), m_buttonCount(0) {}; ~RadioButtonGroup() { std::list::iterator it; for (it=m_buttonList.begin(); it!=m_buttonList.end(); it++) /* reset target pointer in buttons because we are about to destroy the FXDataTarget */ (*it)->setTarget(NULL); }; int getGroupId() { return m_groupId;}; FXDataTarget *getDataTarget() { return &m_radioTarget;}; int getButtonCount() { return m_buttonList.size();}; FXint getRadioValue() const { return m_radioValue;}; void addButton(FXRadioButton *rb) { m_buttonList.push_back(rb); }; }; public: enum { ID_WIDGET_FIRST=1, ID_WIDGET_LAST=1000, ID_LAST }; FOX16_GuiDialog(FOX16_Gui *gui, GWEN_DIALOG *dlg); virtual ~FOX16_GuiDialog(); static FOX16_GuiDialog *getDialog(GWEN_DIALOG *dlg); long onSelCommand(FXObject *sender, FXSelector sel, void *ptr); long onSelChanged(FXObject *sender, FXSelector sel, void *ptr); long onSelKeyPress(FXObject *sender, FXSelector sel, void *ptr); long onSelKeyRelease(FXObject *sender, FXSelector sel, void *ptr); FXIcon *getIcon(const char *fileName); bool setup(FXWindow *parentWindow); int execute(); int cont(); int openDialog(); int closeDialog(); FXDialogBox *getMainWindow() { return _mainWidget;}; protected: FOX16_Gui *_gui; int _widgetCount; FXDialogBox *_mainWidget; FXIconSource *m_iconSource; std::list m_iconList; std::list m_radioGroups; bool m_sizeChanged; FOX16_GuiDialog(); FXWindow *setupTree(FXWindow *parentWindow, GWEN_WIDGET *w); void guiUpdate(); virtual int setIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal); virtual int getIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue); virtual int setCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal); virtual const char *getCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue); }; #endif /* FOX16_DIALOG_L_HPP */ gwenhywfar-4.15.2beta/gui/fox16/fox16_htmltext.hpp0000644000175000017500000000353412416477066016717 00000000000000/*************************************************************************** begin : Sat Jun 19 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef FOX16_HTMLTEXT_HPP #define FOX16_HTMLTEXT_HPP #include #include class FOX16_HtmlCtx; class FOX16GUI_API FOX16_HtmlText: public FXScrollArea { FXDECLARE(FOX16_HtmlText) public: enum { /** don't wrap the text. If this flag is given as parameter to the constructor * then you'll have to insert line-breaks into the text yourself. */ FLAGS_NO_WORDWRAP = 0x00080000 }; FOX16_HtmlText(FXComposite* p, const FXString& text, FXuint opts=0, FXint x=0, FXint y=0, FXint w=0, FXint h=0); ~FOX16_HtmlText(); /// Set the text for this label void setText(const FXString& text); /// Get the text for this label FXString getText() const { return m_text; } virtual FXint getContentWidth(); virtual FXint getContentHeight(); void setMinimumWidth(int i) { m_minWidth=i;}; void makePositionVisible(FXint pos); long onPaint(FXObject*, FXSelector, void*); void layout(); protected: FOX16_HtmlCtx *m_htmlCtx; FXString m_text; int m_minWidth; int m_maxDefaultWidth; bool m_haveDefaultDims; FXint m_defaultWidth; FXint m_defaultHeight; FXint margintop; // Margins top FXint marginbottom; // Margin bottom FXint marginleft; // Margin left FXint marginright; // Margin right FXint barwidth; FOX16_HtmlText(); void updateHtml(); void calcDefaultDims(); }; #endif gwenhywfar-4.15.2beta/gui/fox16/theme.h0000644000175000017500000001203612416477066014562 00000000000000 /* These widgets have initially been created by Martin Oberzalek who gave them into * the public domain via an email to the mailing list foxgui-users on 17th of June, 2010 * ("here the source. Free to use for alll."). * I (Martin Preuss) adapted them to be usable with FOX 1.6 and also added some widgets of * my own (for now: ThemeHeaderItem). */ #ifndef THEME_H #define THEME_H #include /** This header is only needed for the definition of "FOX16GUI_API" which is * used in the declaration of all exported classes and methods. * If you want to use these themed widgets in your own projects you should remove * this include here and all occurrences of "FOX16GUI_API". */ #include #define THEMEBUTTON ThemeButton #define THEMETEXTFIELD ThemeTextField #define THEMECOMBOBOX ThemeComboBox #define THEMELABEL ThemeLabel #define THEMEVERTICALFRAME ThemeVerticalFrame #define THEMEHORIZONTALFRAME ThemeHorizontalFrame #define THEMEMENUBUTTON ThemeMenuButton #define THEMEHEADERITEM ThemeHeaderItem #define THEMETABITEM ThemeTabItem class FOX16GUI_API ThemeButton : public FXButton { FXDECLARE( ThemeButton ); protected: ThemeButton() {} public: ThemeButton(FXComposite* p,const FXString& text,FXIcon* ic=NULL, FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=BUTTON_NORMAL, FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD, FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); long onPaint(FXObject*,FXSelector,void* ptr); }; class FOX16GUI_API ThemeTextField : public FXTextField { FXDECLARE( ThemeTextField ); protected: ThemeTextField() {} public: ThemeTextField(FXComposite* p,FXint ncols,FXObject* tgt=NULL,FXSelector sel=0, FXuint opts=TEXTFIELD_NORMAL,FXint x=0,FXint y=0,FXint w=0, FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); long onPaint(FXObject*,FXSelector,void* ptr); protected: void drawFrame(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); }; FOX16GUI_API void init_theme( FXApp *app ); class FOX16GUI_API ThemeComboBox : public FXComboBox { FXDECLARE( ThemeComboBox ); protected: ThemeComboBox() {} public: ThemeComboBox(FXComposite *p,FXint cols,FXObject* tgt=NULL,FXSelector sel=0, FXuint opts=COMBOBOX_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0, FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); long onPaint(FXObject*,FXSelector,void* ptr); }; class FOX16GUI_API ThemeLabel : public FXLabel { FXDECLARE( ThemeLabel ); protected: ThemeLabel() {} public: ThemeLabel(FXComposite* p,const FXString& text,FXIcon* ic=0,FXuint opts=LABEL_NORMAL, FXint x=0,FXint y=0,FXint w=0,FXint h=0, FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); long onPaint(FXObject*,FXSelector,void* ptr); }; class FOX16GUI_API ThemeTabItem : public FXTabItem { FXDECLARE( ThemeTabItem ); protected: ThemeTabItem() {} public: ThemeTabItem(FXTabBar* p,const FXString& text,FXIcon* ic=0, FXuint opts=TAB_TOP_NORMAL, FXint x=0,FXint y=0,FXint w=0,FXint h=0, FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD, FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); }; class FOX16GUI_API ThemeVerticalFrame : public FXVerticalFrame { protected: ThemeVerticalFrame() {} public: ThemeVerticalFrame(FXComposite *p,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0, FXint pl=DEFAULT_SPACING,FXint pr=DEFAULT_SPACING,FXint pt=DEFAULT_SPACING, FXint pb=DEFAULT_SPACING,FXint hs=DEFAULT_SPACING,FXint vs=DEFAULT_SPACING); }; class FOX16GUI_API ThemeHorizontalFrame : public FXHorizontalFrame { protected: ThemeHorizontalFrame() {} public: ThemeHorizontalFrame(FXComposite *p,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_SPACING,FXint pr=DEFAULT_SPACING,FXint pt=DEFAULT_SPACING, FXint pb=DEFAULT_SPACING,FXint hs=DEFAULT_SPACING,FXint vs=DEFAULT_SPACING); }; class FOX16GUI_API ThemeMenuButton : public FXMenuButton { FXDECLARE( ThemeMenuButton ); protected: ThemeMenuButton() {} public: ThemeMenuButton(FXComposite* p,const FXString& text,FXIcon* ic=NULL, FXPopup* pup=NULL, FXuint opts=JUSTIFY_NORMAL|ICON_BEFORE_TEXT|MENUBUTTON_DOWN, FXint x=0,FXint y=0,FXint w=0,FXint h=0, FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD, FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); long onPaint(FXObject*,FXSelector,void* ptr); FXint getDefaultWidth(); }; class FOX16GUI_API ThemeHeaderItem : public FXHeaderItem { protected: ThemeHeaderItem() {} public: ThemeHeaderItem(const FXString& text, FXIcon* ic=NULL, FXint s=0, void* ptr=NULL); void draw(const FXHeader* header,FXDC& dc,FXint x,FXint y,FXint w,FXint h); }; #endif gwenhywfar-4.15.2beta/gui/fox16/libtest.cpp0000644000175000017500000003617412416477066015472 00000000000000 #ifdef HAVE_CONFIG_H # include #endif #ifdef OS_WIN32 # include # define sleep(x) Sleep(x) #endif #undef BUILDING_FOX16_GUI #include #include "fox16_htmlctx.hpp" #include "fox16_htmllabel.hpp" #include "fox16_htmltext.hpp" #include "../testdialogs/dlg_test.h" #include "../testdialogs/dlg_test2.h" #include #include #include #include int test1(int argc, char **argv) { FXApp a("libtest","Martin Preuss"); FOX16_Gui *gui; //int rv; const char testString[]= #if 0 # if 0 "This is a test. " "And this, is the second line: followed by something else." "" " " " " " " " " " " " " " " " " "
header1header2
data1data2
" "And this is after the table.
" "and this one is red."; # else "This is before right" "RIGHT" "and this after right."; # endif #else "word"; #endif a.init(argc,argv); a.create(); gui=new FOX16_Gui(&a); GWEN_Gui_SetGui(gui->getCInterface()); FOX16_HtmlCtx ctx(0); ctx.setText(testString); //rv=ctx.layout(300, 1024); //fprintf(stderr, "Result of layout: %d\n", rv); ctx.dump(); GWEN_Gui_SetGui(NULL); delete gui; return 0; } int test2(int argc, char **argv) { FXApp application("libtest","Martin Preuss"); FOX16_Gui *gui; int rv; uint32_t id1; uint32_t id2; uint64_t i1; uint64_t i2; application.init(argc,argv); application.create(); gui=new FOX16_Gui(&application); GWEN_Gui_SetGui(gui->getCInterface()); id1=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_SHOW_ABORT | GWEN_GUI_PROGRESS_KEEP_OPEN, "Progress-Title", "" "

This is an example text..

" "

As you can see colors can " "be used.

" "", 15, 0); for (i1=1; i1<=15; i1++) { GWEN_Gui_ProgressLog2(id1, GWEN_LoggerLevel_Notice, "Step %d: This is a another step in the test of progress widgets", (int) i1); id2=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_SHOW_ABORT, "2nd progress", "Starting 2nd progress...", 5, id1); for (i2=1; i2<=3; i2++) { sleep(1); fprintf(stderr, "Advancing %d/%d\n", (int)i1, (int)i2); rv=GWEN_Gui_ProgressAdvance(id2, i2); if (rv==GWEN_ERROR_USER_ABORTED) { fprintf(stderr, "Aborted by user\n"); break; } } GWEN_Gui_ProgressEnd(id2); rv=GWEN_Gui_ProgressAdvance(id1, i1); if (rv==GWEN_ERROR_USER_ABORTED) { fprintf(stderr, "Aborted by user\n"); break; } } GWEN_Gui_ProgressEnd(id1); return 0; } int test3(int argc, char **argv) { FXApp a("libtest","Martin Preuss"); FOX16_HtmlLabel *label; FOX16_Gui *gui; FXDialogBox *dbox; FXVerticalFrame *vf; const char testString[]= #if 1 "

Title

" "

Subtitle

" "This is a test. " "And this, is the second line: followed by something else." "This should be right aligned" "" " " " " " " " " " " " " " " " " "
header1header2
data1this is longer data (data2)
" "And this is after the table.
" "and this one is red."; #else "This is before right" "Right" "and this after right."; #endif a.init(argc,argv); a.create(); gui=new FOX16_Gui(&a); GWEN_Gui_SetGui(gui->getCInterface()); dbox=new FXDialogBox(&a, "Test", DECOR_ALL); vf=new FXVerticalFrame(dbox, LAYOUT_FILL_X | LAYOUT_FILL_Y, 0, 0, 0, 0, 1, 1, 1, 1); label=new FOX16_HtmlLabel(vf, FXString(testString), LAYOUT_FILL_X|LAYOUT_FILL_Y); new FXSpring(vf, LAYOUT_FILL_X | LAYOUT_FILL_Y); new FXLabel(vf, "Normal Testlabel"); dbox->create(); dbox->resize(300, 200); dbox->show(); a.runModalFor(dbox); return 0; } int test4(int argc, char **argv) { FXApp application("libtest","Martin Preuss"); FOX16_Gui *gui; int rv; uint32_t id1; uint32_t id2; uint64_t i1; uint64_t i2; application.init(argc,argv); application.create(); gui=new FOX16_Gui(&application); GWEN_Gui_SetGui(gui->getCInterface()); id1=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_SHOW_ABORT | GWEN_GUI_PROGRESS_KEEP_OPEN, "Progress-Title", "" "

Test f\xc3\xbcr Umlaute.

" "", 10, 0); for (i1=1; i1<=10; i1++) { char numbuf[128]; snprintf(numbuf, sizeof(numbuf)-1, "Step %d", (int)i1); GWEN_Gui_ProgressLog(id1, GWEN_LoggerLevel_Notice, numbuf); id2=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_SHOW_ABORT, "2nd progress", "Starting 2nd progress...", 10, id1); for (i2=1; i2<=10; i2++) { sleep(1); fprintf(stderr, "Advancing %d/%d\n", (int)i1, (int)i2); rv=GWEN_Gui_ProgressAdvance(id2, i2); if (rv==GWEN_ERROR_USER_ABORTED) { fprintf(stderr, "Aborted by user\n"); break; } } GWEN_Gui_ProgressEnd(id2); rv=GWEN_Gui_ProgressAdvance(id1, i1); if (rv==GWEN_ERROR_USER_ABORTED) { fprintf(stderr, "Aborted by user\n"); break; } } GWEN_Gui_ProgressEnd(id1); return 0; } int test5(int argc, char **argv) { FXApp a("libtest","Martin Preuss"); FOX16_HtmlText *label; FOX16_Gui *gui; FXDialogBox *dbox; FXVerticalFrame *vf; const char testString[]= #if 1 "

Test5

" "

Subtitle

" "This is a test. " "And this, is the second line: followed by something else." "This should be right aligned" "" " " " " " " " " " " " " " " " " "
header1header2
data1this is longer data (data2)
" "And this is after the table.
" "and this one is red."; #else "This is before right" "Right" "and this after right."; #endif a.init(argc,argv); a.create(); gui=new FOX16_Gui(&a); GWEN_Gui_SetGui(gui->getCInterface()); dbox=new FXDialogBox(&a, "Test", DECOR_ALL); vf=new FXVerticalFrame(dbox, LAYOUT_FILL_X | LAYOUT_FILL_Y, 0, 0, 0, 0, 1, 1, 1, 1); label=new FOX16_HtmlText(vf, FXString(testString), LAYOUT_FILL_X|LAYOUT_FILL_Y | HSCROLLING_OFF | VSCROLLER_ALWAYS); new FXSpring(vf, LAYOUT_FILL_X | LAYOUT_FILL_Y); new FXLabel(vf, "Normal Testlabel"); dbox->create(); dbox->resize(300, 200); dbox->show(); a.runModalFor(dbox); return 0; } int test6(int argc, char **argv) { FXApp application("libtest","Martin Preuss"); FOX16_Gui *gui; int rv; uint32_t id1; uint32_t id2; uint64_t i1; uint64_t i2; application.init(argc,argv); application.create(); gui=new FOX16_Gui(&application); GWEN_Gui_SetGui(gui->getCInterface()); id1=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_SHOW_ABORT | GWEN_GUI_PROGRESS_KEEP_OPEN, "Progress-Title", "" "

Test f\xc3\xbcr Umlaute.

" "", 10, 0); for (i1=1; i1<=20; i1++) { char numbuf[128]; snprintf(numbuf, sizeof(numbuf)-1, "Step %d", (int)i1); GWEN_Gui_ProgressLog(id1, GWEN_LoggerLevel_Notice, numbuf); id2=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_SHOW_ABORT, "2nd progress", "Starting 2nd progress...", 5, id1); for (i2=1; i2<=5; i2++) { sleep(1); fprintf(stderr, "Advancing %d/%d\n", (int)i1, (int)i2); GWEN_Gui_ProgressLog(id2, GWEN_LoggerLevel_Notice, "Advancing..."); rv=GWEN_Gui_ProgressAdvance(id2, i2); if (rv==GWEN_ERROR_USER_ABORTED) { fprintf(stderr, "Aborted by user\n"); break; } } GWEN_Gui_ProgressEnd(id2); rv=GWEN_Gui_ProgressAdvance(id1, i1); if (rv==GWEN_ERROR_USER_ABORTED) { fprintf(stderr, "Aborted by user\n"); break; } } GWEN_Gui_ProgressEnd(id1); return 0; } int test7(int argc, char **argv) { FXApp application("libtest","Martin Preuss"); FOX16_Gui *gui; char buffer[65]; application.init(argc,argv); application.create(); gui=new FOX16_Gui(&application); GWEN_Gui_SetGui(gui->getCInterface()); GWEN_Gui_InputBox(GWEN_GUI_INPUT_FLAGS_SHOW, "This is the Title", "This is the text.This is ASCII", buffer, 1, sizeof(buffer)-1, 0); return 0; } int test8(int argc, char **argv) { FXApp application("libtest","Martin Preuss"); FOX16_Gui *gui; int rv; GWEN_DIALOG *dlg; application.init(argc,argv); application.create(); gui=new FOX16_Gui(&application); GWEN_Gui_SetGui(gui->getCInterface()); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Debug); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); dlg=Dlg_Test1_new(); if (dlg==NULL) { fprintf(stderr, "Could not create dialog.\n"); return 2; } rv=GWEN_Gui_ExecDialog(dlg, 0); fprintf(stderr, "Result: %d\n", rv); return 0; } int test9(int argc, char **argv) { FXApp application("libtest","Martin Preuss"); FOX16_Gui *gui; int rv; GWEN_DIALOG *dlg; application.init(argc,argv); application.create(); gui=new FOX16_Gui(&application); GWEN_Gui_SetGui(gui->getCInterface()); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Debug); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); dlg=Dlg_Test2_new(); if (dlg==NULL) { fprintf(stderr, "Could not create dialog.\n"); return 2; } rv=GWEN_Gui_ExecDialog(dlg, 0); fprintf(stderr, "Result: %d\n", rv); return 0; } int test10(int argc, char **argv) { FXApp application("libtest","Martin Preuss"); FOX16_Gui *gui; int rv; GWEN_PASSWD_STORE *sto; GWEN_DB_NODE *dbPasswords; const char *token; const char *epw; char pw[256]; if (argc<4) { DBG_ERROR(0, "Expected token and secret"); return 1; } token=argv[2]; epw=argv[3]; application.init(argc,argv); application.create(); gui=new FOX16_Gui(&application); GWEN_Gui_SetGui(gui->getCInterface()); sto=GWEN_PasswordStore_new("/tmp/pwstore.pw"); dbPasswords=GWEN_DB_Group_new("TempPasswords"); gui->setPasswordStore(sto); gui->setPasswordDb(dbPasswords, 0); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Debug); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); rv=GWEN_Gui_GetPassword(0, token, "Get Password", "Please enter password 1", pw, 4, sizeof(pw)-1, 0); if (rv<0) { DBG_ERROR(0, "Error getting password: %d", rv); return 2; } if (strcmp(epw, pw)!=0) { DBG_ERROR(0, "Bad password for token [%s], expected [%s], got [%s].", token, epw, pw); return 2; } #if 0 dlg=Dlg_Test2_new(); if (dlg==NULL) { fprintf(stderr, "Could not create dialog.\n"); return 2; } rv=GWEN_Gui_ExecDialog(dlg, 0); fprintf(stderr, "Result: %d\n", rv); #endif return 0; } int test11(int argc, char **argv) { FXApp application("libtest","Martin Preuss"); FOX16_Gui *gui; char buffer[65]; application.init(argc,argv); application.create(); gui=new FOX16_Gui(&application); GWEN_Gui_SetGui(gui->getCInterface()); GWEN_Gui_InputBox(GWEN_GUI_INPUT_FLAGS_SHOW, "This is the Title", "This is quite a long HTML text. This is the second sentence, which is a bit longer " "than the first one.
In any case this sentence should begin on its own line" "This is quite a long HTML text. This is the second sentence, which is a bit longer " "than the first one.\nIn any case this sentence should begin on its own line.", buffer, 1, sizeof(buffer)-1, 0); return 0; } int test12(int argc, char **argv) { FXApp application("libtest","Martin Preuss"); FOX16_Gui *gui; char buffer[65]; application.init(argc,argv); application.create(); gui=new FOX16_Gui(&application); GWEN_Gui_SetGui(gui->getCInterface()); GWEN_Gui_InputBox(GWEN_GUI_INPUT_FLAGS_SHOW, "This is the Title", "This is quite a long HTML text. This is the second sentence, which is a bit longer " "than the first one.
In any case this sentence should begin on its own line.", buffer, 1, sizeof(buffer)-1, 0); return 0; } int main(int argc, char **argv) { GWEN_Init(); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Debug); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Info); if (argc>1) { if (strcasecmp(argv[1], "1")==0) return test1(argc, argv); else if (strcasecmp(argv[1], "2")==0) return test2(argc, argv); else if (strcasecmp(argv[1], "3")==0) return test3(argc, argv); else if (strcasecmp(argv[1], "4")==0) return test4(argc, argv); else if (strcasecmp(argv[1], "5")==0) return test5(argc, argv); else if (strcasecmp(argv[1], "6")==0) return test6(argc, argv); else if (strcasecmp(argv[1], "7")==0) return test7(argc, argv); else if (strcasecmp(argv[1], "8")==0) return test8(argc, argv); else if (strcasecmp(argv[1], "9")==0) return test9(argc, argv); else if (strcasecmp(argv[1], "10")==0) return test10(argc, argv); else if (strcasecmp(argv[1], "11")==0) return test11(argc, argv); else if (strcasecmp(argv[1], "12")==0) return test12(argc, argv); } else return test7(argc, argv); } gwenhywfar-4.15.2beta/gui/fox16/fox16_gui.hpp0000644000175000017500000000572312416477066015634 00000000000000/*************************************************************************** begin : Fri Jan 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef FOX16_GUI_HPP #define FOX16_GUI_HPP #include #include #include #include #include /* TODO: * - catch closing of dialog and send GWEN_DialogEvent_TypeClose. * */ class FOX16_GuiUpdater; class FOX16GUI_API FOX16_Gui: public CppGui { public: class FOX16GUI_API WinScope { friend class FOX16_Gui; public: typedef enum { WIN_SCOPE_TYPE_WINDOW=0, } WIN_SCOPE_TYPE; WinScope(uint32_t parentId, FXWindow *w); WinScope(FXWindow *w); ~WinScope(); uint32_t getParentId() const { return m_parentId;}; uint32_t getId() const { return m_id;}; FXWindow *getWindow() const { return m_window;}; protected: WinScope(WIN_SCOPE_TYPE t, uint32_t parentId, FXWindow *w); WIN_SCOPE_TYPE getType() const { return m_type;}; uint32_t m_parentId; uint32_t m_id; FXWindow *m_window; WIN_SCOPE_TYPE m_type; }; typedef std::list WinScopePtrList; enum { ID_MAINWINDOW=1 }; FOX16_Gui(FXApp* a); ~FOX16_Gui(); FXApp *getApp() { return m_app;}; FOX16GUI_API static FXString getRawText(const char *text); FOX16GUI_API static FXString getHtmlText(const char *text); FXWindow *getGuiWindow(uint32_t id); FOX16GUI_API static FOX16_Gui *getFgGui(); virtual int openDialog(GWEN_DIALOG *dlg, uint32_t guiid); virtual int closeDialog(GWEN_DIALOG *dlg); virtual int runDialog(GWEN_DIALOG *dlg, int untilEnd); HTML_FONT *getFont(const char *fontName, int fontSize, uint32_t fontFlags); protected: uint32_t getNextId(); uint32_t getIdOfLastScope(); void addWinScope(WinScope *ws); void delWinScope(WinScope *ws); void dumpScopeList(); HTML_FONT *findFont(const char *fontName, int fontSize, uint32_t fontFlags); int print(const char *docTitle, const char *docType, const char *descr, const char *text, uint32_t guiid); int execDialog(GWEN_DIALOG *dlg, uint32_t guiid); int getFileName(const char *caption, GWEN_GUI_FILENAME_TYPE fnt, uint32_t flags, const char *patterns, GWEN_BUFFER *pathBuffer, uint32_t guiid); WinScope *findWinScope(uint32_t id); WinScope *findWinScopeExt(uint32_t id); FXApp *m_app; WinScopePtrList m_scopeList; uint32_t m_lastId; FOX16_GuiUpdater *m_updater; HTML_FONT_LIST *m_fontList; }; #endif gwenhywfar-4.15.2beta/gui/fox16/fox16_gui_sortinglist_l.hpp0000644000175000017500000000501012416477066020575 00000000000000/*************************************************************************** begin : Fri Jan 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef FOX16_GUI_SORTINGLIST_HPP #define FOX16_GUI_SORTINGLIST_HPP #include class FOX16_GuiSortingList: public FXFoldingList { FXDECLARE(FOX16_GuiSortingList) public: public: FOX16_GuiSortingList(FXComposite *p, FXObject* tgt=NULL, FXSelector sel=0, FXuint opts=0, FXint x=0, FXint y=0, FXint w=0, FXint h=0); virtual ~FOX16_GuiSortingList(); FXFoldingItem *getItem(int idx); virtual void sortByColumn(int c, bool up); FXbool getHeaderArrowDir(int c) const; void setHeaderArrowDir(int c, FXbool b); long onHeaderClicked(FXObject*, FXSelector, void* ptr); protected: FOX16_GuiSortingList(); static FXint sortFuncCol0a(const FXFoldingItem*,const FXFoldingItem*); static FXint sortFuncCol0d(const FXFoldingItem*,const FXFoldingItem*); static FXint sortFuncCol1a(const FXFoldingItem*,const FXFoldingItem*); static FXint sortFuncCol1d(const FXFoldingItem*,const FXFoldingItem*); static FXint sortFuncCol2a(const FXFoldingItem*,const FXFoldingItem*); static FXint sortFuncCol2d(const FXFoldingItem*,const FXFoldingItem*); static FXint sortFuncCol3a(const FXFoldingItem*,const FXFoldingItem*); static FXint sortFuncCol3d(const FXFoldingItem*,const FXFoldingItem*); static FXint sortFuncCol4a(const FXFoldingItem*,const FXFoldingItem*); static FXint sortFuncCol4d(const FXFoldingItem*,const FXFoldingItem*); static FXint sortFuncCol5a(const FXFoldingItem*,const FXFoldingItem*); static FXint sortFuncCol5d(const FXFoldingItem*,const FXFoldingItem*); static FXint sortFuncCol6a(const FXFoldingItem*,const FXFoldingItem*); static FXint sortFuncCol6d(const FXFoldingItem*,const FXFoldingItem*); static FXint sortFuncCol7a(const FXFoldingItem*,const FXFoldingItem*); static FXint sortFuncCol7d(const FXFoldingItem*,const FXFoldingItem*); static FXint sortFuncCol8a(const FXFoldingItem*,const FXFoldingItem*); static FXint sortFuncCol8d(const FXFoldingItem*,const FXFoldingItem*); static FXint sortFuncCol9a(const FXFoldingItem*,const FXFoldingItem*); static FXint sortFuncCol9d(const FXFoldingItem*,const FXFoldingItem*); }; #endif gwenhywfar-4.15.2beta/gui/fox16/Makefile.in0000644000175000017500000007312412634022413015341 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = libtest$(EXEEXT) subdir = gui/fox16 DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(srcdir)/gwengui-fox16.pc.in $(top_srcdir)/depcomp \ $(iheader_HEADERS) $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = gwengui-fox16.pc CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" \ "$(DESTDIR)$(iheaderdir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = libgwengui_fox16_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(top_builddir)/gui/cpp/libgwengui-cpp.la am_libgwengui_fox16_la_OBJECTS = fox16_gui.lo fox16_gui_dialog.lo \ fox16_gui_sortinglist.lo fox16_gui_updater.lo fox16_htmlctx.lo \ fox16_htmllabel.lo fox16_htmltext.lo theme.lo libgwengui_fox16_la_OBJECTS = $(am_libgwengui_fox16_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libgwengui_fox16_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(libgwengui_fox16_la_LDFLAGS) \ $(LDFLAGS) -o $@ PROGRAMS = $(noinst_PROGRAMS) am_libtest_OBJECTS = libtest.$(OBJEXT) libtest_OBJECTS = $(am_libtest_OBJECTS) libtest_DEPENDENCIES = libgwengui-fox16.la $(am__DEPENDENCIES_1) \ $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(top_builddir)/gui/cpp/libgwengui-cpp.la \ $(builddir)/../testdialogs/libgwengui-test.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(libgwengui_fox16_la_SOURCES) $(libtest_SOURCES) DIST_SOURCES = $(libgwengui_fox16_la_SOURCES) $(libtest_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(pkgconfig_DATA) HEADERS = $(iheader_HEADERS) $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ -DBUILDING_FOX16_GUI -DPACKAGE=\"$(PACKAGE)\" DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = -I$(gwenhywfar_symlinkdir) $(fox_includes) -Ihtml AM_CPPFLAGS = @visibility_cflags@ pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = gwengui-fox16.pc lib_LTLIBRARIES = libgwengui-fox16.la noinst_HEADERS = \ fox16_gui_dialog_l.hpp \ fox16_gui_sortinglist_l.hpp \ fox16_gui_updater_l.hpp \ fox16_htmlctx_p.hpp \ fox16_htmlctx.hpp libgwengui_fox16_la_LIBADD = $(fox_libs) $(top_builddir)/src/$(gwenhywfar_internal_libname) $(top_builddir)/gui/cpp/libgwengui-cpp.la libgwengui_fox16_la_LDFLAGS = -no-undefined libgwengui_fox16_la_SOURCES = \ fox16_gui.cpp \ fox16_gui_dialog.cpp \ fox16_gui_sortinglist.cpp \ fox16_gui_updater.cpp \ fox16_htmlctx.cpp \ fox16_htmllabel.cpp \ fox16_htmltext.cpp \ theme.cpp iheaderdir = ${gwenhywfar_headerdir_am}/gwen-gui-fox16 iheader_HEADERS = \ fox16_gui.hpp \ fox16_htmlctx.hpp \ fox16_htmllabel.hpp \ fox16_htmltext.hpp \ theme.h \ api.h libtest_SOURCES = libtest.cpp libtest_LDADD = libgwengui-fox16.la $(fox_libs) $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(top_builddir)/gui/cpp/libgwengui-cpp.la \ $(builddir)/../testdialogs/libgwengui-test.la all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gui/fox16/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gui/fox16/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): gwengui-fox16.pc: $(top_builddir)/config.status $(srcdir)/gwengui-fox16.pc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgwengui-fox16.la: $(libgwengui_fox16_la_OBJECTS) $(libgwengui_fox16_la_DEPENDENCIES) $(EXTRA_libgwengui_fox16_la_DEPENDENCIES) $(AM_V_CXXLD)$(libgwengui_fox16_la_LINK) -rpath $(libdir) $(libgwengui_fox16_la_OBJECTS) $(libgwengui_fox16_la_LIBADD) $(LIBS) clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list libtest$(EXEEXT): $(libtest_OBJECTS) $(libtest_DEPENDENCIES) $(EXTRA_libtest_DEPENDENCIES) @rm -f libtest$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(libtest_OBJECTS) $(libtest_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fox16_gui.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fox16_gui_dialog.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fox16_gui_sortinglist.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fox16_gui_updater.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fox16_htmlctx.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fox16_htmllabel.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fox16_htmltext.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/theme.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) install-iheaderHEADERS: $(iheader_HEADERS) @$(NORMAL_INSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(iheaderdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(iheaderdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(iheaderdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(iheaderdir)" || exit $$?; \ done uninstall-iheaderHEADERS: @$(NORMAL_UNINSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(iheaderdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(iheaderdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iheaderHEADERS install-pkgconfigDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iheaderHEADERS uninstall-libLTLIBRARIES \ uninstall-pkgconfigDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool clean-noinstPROGRAMS \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-iheaderHEADERS install-info install-info-am \ install-libLTLIBRARIES install-man install-pdf install-pdf-am \ install-pkgconfigDATA install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-iheaderHEADERS \ uninstall-libLTLIBRARIES uninstall-pkgconfigDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/gui/fox16/fox16_gui.cpp0000644000175000017500000002475712416477066015637 00000000000000/*************************************************************************** begin : Fri Jan 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "fox16_gui.hpp" #include "fox16_gui_dialog_l.hpp" #include "fox16_gui_updater_l.hpp" #include FOX16_Gui::WinScope::WinScope(uint32_t parentId, FXWindow *w) : m_parentId(parentId) , m_id(0) , m_window(w) , m_type(WIN_SCOPE_TYPE_WINDOW) { FOX16_Gui *gui=FOX16_Gui::getFgGui(); assert(gui); if (m_parentId==0) m_parentId=gui->getIdOfLastScope(); m_id=gui->getNextId(); gui->addWinScope(this); } FOX16_Gui::WinScope::WinScope(FXWindow *w) : m_parentId() , m_id(ID_MAINWINDOW) , m_window(w) , m_type(WIN_SCOPE_TYPE_WINDOW) { FOX16_Gui *gui=FOX16_Gui::getFgGui(); assert(gui); gui->addWinScope(this); } FOX16_Gui::WinScope::WinScope(FOX16_Gui::WinScope::WIN_SCOPE_TYPE t, uint32_t parentId, FXWindow *w) : m_parentId(parentId) , m_id(0) , m_window(w) , m_type(t) { FOX16_Gui *gui=FOX16_Gui::getFgGui(); assert(gui); if (m_parentId==0) m_parentId=gui->getIdOfLastScope(); m_id=gui->getNextId(); gui->addWinScope(this); } FOX16_Gui::WinScope::~WinScope() { FOX16_Gui *gui=FOX16_Gui::getFgGui(); assert(gui); gui->delWinScope(this); } FOX16_Gui::FOX16_Gui(FXApp *a) :CppGui() ,m_app(a) ,m_lastId(0) ,m_updater() ,m_fontList(NULL) { m_updater=new FOX16_GuiUpdater(); GWEN_Gui_AddFlags(_gui, GWEN_GUI_FLAGS_DIALOGSUPPORTED); GWEN_Gui_UseDialogs(_gui); GWEN_Gui_SetName(_gui, "fox16-gui"); m_fontList=HtmlFont_List_new(); } FOX16_Gui::~FOX16_Gui() { if (!m_scopeList.empty()) { DBG_ERROR(GWEN_LOGDOMAIN, "ScopeList is not empty!"); } if (m_updater) delete m_updater; HtmlFont_List_free(m_fontList); } uint32_t FOX16_Gui::getNextId() { return ++m_lastId; } uint32_t FOX16_Gui::getIdOfLastScope() { if (!m_scopeList.empty()) return m_scopeList.back()->getId(); return 0; } void FOX16_Gui::addWinScope(WinScope *ws) { m_scopeList.push_back(ws); } void FOX16_Gui::delWinScope(WinScope *ws) { m_scopeList.remove(ws); } FOX16_Gui::WinScope *FOX16_Gui::findWinScope(uint32_t id) { WinScopePtrList::iterator it; for (it=m_scopeList.begin(); it!=m_scopeList.end(); it++) { if ((*it)->getId()==id) return (*it); } return NULL; } FXWindow *FOX16_Gui::getGuiWindow(uint32_t id) { return m_app->getActiveWindow(); } FOX16_Gui *FOX16_Gui::getFgGui() { CppGui *cppgui; cppgui=CppGui::getCppGui(); if (cppgui) return dynamic_cast(cppgui); else return NULL; } void FOX16_Gui::dumpScopeList() { WinScopePtrList::iterator it; for (it=m_scopeList.begin(); it!=m_scopeList.end(); it++) { const char *s; switch((*it)->getType()) { case WinScope::WIN_SCOPE_TYPE_WINDOW: s="window"; break; default: s="unknown"; break; } fprintf(stderr, "WinScope: id %08x, parent %08x, type %s\n", (*it)->getId(), (*it)->getParentId(), s); } } int FOX16_Gui::print(const char *docTitle, const char *docType, const char *descr, const char *text, uint32_t guiid) { DBG_ERROR(GWEN_LOGDOMAIN, "Not implemented"); return GWEN_ERROR_NOT_IMPLEMENTED; } FXString FOX16_Gui::getRawText(const char *text) { const char *p=0; const char *p2=0; if (text==NULL) return FXString(""); /* find begin of HTML area */ p=text; while ((p=strchr(p, '<'))) { const char *t; t=p; t++; if (toupper(*t)=='H') { t++; if (toupper(*t)=='T') { t++; if (toupper(*t)=='M') { t++; if (toupper(*t)=='L') { t++; if (toupper(*t)=='>') { break; } } } } } p++; } /* while */ /* find end of HTML area */ if (p) { p2=p; p2+=6; /* skip "" */ while ((p2=strchr(p2, '<'))) { const char *t; t=p2; t++; if (toupper(*t)=='/') { t++; if (toupper(*t)=='H') { t++; if (toupper(*t)=='T') { t++; if (toupper(*t)=='M') { t++; if (toupper(*t)=='L') { t++; if (toupper(*t)=='>') { break; } } } } } } p2++; } /* while */ } if (p && p2) { p2+=7; /* skip "" */ int startPos=(p-text); int endPos=(p2-text); FXString result; result=FXString(text); result.erase(startPos, endPos); return result; } else return FXString(text); } FXString FOX16_Gui::getHtmlText(const char *text) { const char *p=0; const char *p2=0; if (text==NULL) return FXString(""); /* find begin of HTML area */ p=text; while ((p=strchr(p, '<'))) { const char *t; t=p; t++; if (toupper(*t)=='H') { t++; if (toupper(*t)=='T') { t++; if (toupper(*t)=='M') { t++; if (toupper(*t)=='L') { t++; if (toupper(*t)=='>') { break; } } } } } p++; } /* while */ /* find end of HTML area */ if (p) { p+=6; /* skip "" */ p2=p; while ((p2=strchr(p2, '<'))) { const char *t; t=p2; t++; if (toupper(*t)=='/') { t++; if (toupper(*t)=='H') { t++; if (toupper(*t)=='T') { t++; if (toupper(*t)=='M') { t++; if (toupper(*t)=='L') { t++; if (toupper(*t)=='>') { break; } } } } } } p2++; } /* while */ } if (p && p2) return FXString(p, p2-p); else return FXString(text); } int FOX16_Gui::execDialog(GWEN_DIALOG *dlg, uint32_t guiid) { FOX16_GuiDialog foxDlg(this, dlg); FXWindow *owner; /* get main window of parent dialog (if any) */ owner=m_app->getActiveWindow(); /* setup widget tree for the dialog */ if (!(foxDlg.setup(owner))) { return GWEN_ERROR_GENERIC; } return foxDlg.execute(); } int FOX16_Gui::openDialog(GWEN_DIALOG *dlg, uint32_t guiid) { FOX16_GuiDialog *foxDlg; FXWindow *owner; /* get main window of parent dialog (if any) */ owner=m_app->getActiveWindow(); foxDlg=new FOX16_GuiDialog(this, dlg); /* setup widget tree for the dialog */ if (!(foxDlg->setup(owner))) { delete foxDlg; return GWEN_ERROR_GENERIC; } foxDlg->openDialog(); m_updater->guiUpdate(); return 0; } int FOX16_Gui::closeDialog(GWEN_DIALOG *dlg) { FOX16_GuiDialog *foxDlg; foxDlg=FOX16_GuiDialog::getDialog(dlg); assert(foxDlg); foxDlg->closeDialog(); delete foxDlg; m_updater->guiUpdate(); return 0; } int FOX16_Gui::runDialog(GWEN_DIALOG *dlg, int untilEnd) { FOX16_GuiDialog *foxDlg; foxDlg=FOX16_GuiDialog::getDialog(dlg); assert(foxDlg); if (untilEnd) return foxDlg->cont(); else { m_updater->guiUpdate(); return 0; } } int FOX16_Gui::getFileName(const char *caption, GWEN_GUI_FILENAME_TYPE fnt, uint32_t flags, const char *patterns, GWEN_BUFFER *pathBuffer, uint32_t guiid) { FXString sCaption; FXString sPatterns; FXString sPath; FXString str; FXWindow *owner; if (caption) sCaption=FXString(caption); if (patterns) { const char *s1; const char *s2; s1=patterns; while(s1 && *s1) { s2=strchr(s1, '\t'); if (s2) { str=FXString(s1, s2-s1); /* skip tab */ s2++; } else { str=FXString(s1); s2=NULL; } if (str.contains('(')) { if (!sPatterns.empty()) sPatterns+='\n'; sPatterns+=str.before('('); str=str.after('('); sPatterns+='('; sPatterns+=str.substitute(';', ','); } else { if (!sPatterns.empty()) sPatterns+='\n'; sPatterns+=str.substitute(';', ','); } s1=s2; } } if (GWEN_Buffer_GetUsedBytes(pathBuffer)) sPath=FXString(GWEN_Buffer_GetStart(pathBuffer)); owner=m_app->getModalWindow(); if (owner==NULL) { owner=m_app->getActiveWindow(); } if (owner==NULL) { owner=m_app->getRootWindow(); } if (owner==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not determine owner window"); return GWEN_ERROR_INTERNAL; } switch(fnt) { case GWEN_Gui_FileNameType_OpenFileName: str=FXFileDialog::getOpenFilename(owner, sCaption, sPath, sPatterns, 0); break; case GWEN_Gui_FileNameType_SaveFileName: str=FXFileDialog::getSaveFilename(owner, sCaption, sPath, sPatterns, 0); break; case GWEN_Gui_FileNameType_OpenDirectory: str=FXFileDialog::getOpenDirectory(owner, sCaption, sPath); break; } if (str.empty()) { DBG_ERROR(GWEN_LOGDOMAIN, "Empty filename returned."); return GWEN_ERROR_ABORTED; } else { GWEN_Buffer_Reset(pathBuffer); GWEN_Buffer_AppendString(pathBuffer, str.text()); return 0; } } HTML_FONT *FOX16_Gui::findFont(const char *fontName, int fontSize, uint32_t fontFlags) { HTML_FONT *fnt; assert(m_fontList); fnt=HtmlFont_List_First(m_fontList); while(fnt) { const char *s; s=HtmlFont_GetFontName(fnt); if (s && *s && HtmlFont_GetFontSize(fnt)==fontSize && HtmlFont_GetFontFlags(fnt)==fontFlags && strcasecmp(s, fontName)==0) break; fnt=HtmlFont_List_Next(fnt); } return fnt; } HTML_FONT *FOX16_Gui::getFont(const char *fontName, int fontSize, uint32_t fontFlags) { HTML_FONT *fnt; fnt=findFont(fontName, fontSize, fontFlags); if (fnt) return fnt; else { fnt=HtmlFont_new(); HtmlFont_SetFontName(fnt, fontName); HtmlFont_SetFontSize(fnt, fontSize); HtmlFont_SetFontFlags(fnt, fontFlags); HtmlFont_List_Add(fnt, m_fontList); return fnt; } } gwenhywfar-4.15.2beta/gui/fox16/fox16_gui_dialog.cpp0000644000175000017500000015263412416477066017152 00000000000000/*************************************************************************** begin : Fri Jan 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "fox16_gui_dialog_l.hpp" #include "fox16_gui_sortinglist_l.hpp" #include "fox16_htmllabel.hpp" #include "fox16_htmltext.hpp" #include "theme.h" #include #include #include #include #include #include #include #define FOX16_DIALOG_WIDGET_REAL 0 #define FOX16_DIALOG_WIDGET_CONTENT 1 #define FOX16_DIALOG_STRING_TITLE 0 #define FOX16_DIALOG_STRING_VALUE 1 FXDEFMAP(FOX16_GuiDialog) FOX16_GuiDialogMap[]= { FXMAPFUNCS(SEL_COMMAND, FOX16_GuiDialog::ID_WIDGET_FIRST, FOX16_GuiDialog::ID_WIDGET_LAST, FOX16_GuiDialog::onSelCommand), FXMAPFUNCS(SEL_CHANGED, FOX16_GuiDialog::ID_WIDGET_FIRST, FOX16_GuiDialog::ID_WIDGET_LAST, FOX16_GuiDialog::onSelChanged), FXMAPFUNCS(SEL_KEYPRESS, FOX16_GuiDialog::ID_WIDGET_FIRST, FOX16_GuiDialog::ID_WIDGET_LAST, FOX16_GuiDialog::onSelKeyPress), FXMAPFUNCS(SEL_KEYRELEASE, FOX16_GuiDialog::ID_WIDGET_FIRST, FOX16_GuiDialog::ID_WIDGET_LAST, FOX16_GuiDialog::onSelKeyRelease) }; FXIMPLEMENT(FOX16_GuiDialog, FXObject, FOX16_GuiDialogMap, ARRAYNUMBER(FOX16_GuiDialogMap)) FOX16_GuiDialog::FOX16_GuiDialog() :FXObject() ,CppDialog() ,_gui(NULL) ,_widgetCount(0) ,_mainWidget(NULL) ,m_iconSource(NULL) ,m_sizeChanged(FALSE) { } FOX16_GuiDialog::FOX16_GuiDialog(FOX16_Gui *gui, GWEN_DIALOG *dlg) :FXObject() ,CppDialog(dlg) ,_gui(gui) ,_widgetCount(0) ,_mainWidget(NULL) ,m_iconSource(NULL) ,m_sizeChanged(FALSE) { } FOX16_GuiDialog::~FOX16_GuiDialog() { if (_mainWidget) delete _mainWidget; if (!m_iconList.empty()) { std::list::iterator it; for (it=m_iconList.begin(); it!=m_iconList.end(); it++) delete *it; m_iconList.clear(); } if (m_iconSource) delete m_iconSource; if (!m_radioGroups.empty()) { std::list::iterator it; for (it=m_radioGroups.begin(); it!=m_radioGroups.end(); it++) delete *it; } } FOX16_GuiDialog *FOX16_GuiDialog::getDialog(GWEN_DIALOG *dlg) { CppDialog *cppDlg; cppDlg=CppDialog::getDialog(dlg); if (cppDlg) return dynamic_cast(cppDlg); return NULL; } FXIcon *FOX16_GuiDialog::getIcon(const char *fileName) { GWEN_STRINGLIST *sl; sl=GWEN_Dialog_GetMediaPaths(_dialog); if (sl) { GWEN_BUFFER *tbuf; int rv; FXIcon *ic; tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Directory_FindFileInPaths(sl, fileName, tbuf); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return NULL; } if (m_iconSource==NULL) m_iconSource=new FXIconSource(FXApp::instance()); DBG_DEBUG(GWEN_LOGDOMAIN, "Loading [%s]", GWEN_Buffer_GetStart(tbuf)); ic=m_iconSource->loadIconFile(GWEN_Buffer_GetStart(tbuf)); if (ic==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not load icon [%s]", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return NULL; } m_iconList.push_back(ic); GWEN_Buffer_free(tbuf); return ic; } else { DBG_ERROR(GWEN_LOGDOMAIN, "No media paths in dialog"); return NULL; } } int FOX16_GuiDialog::execute() { FXDialogBox *dialogBox; int rv; dialogBox=_mainWidget; /* execute dialog */ dialogBox->show(PLACEMENT_OWNER); rv=dialogBox->execute(); GWEN_Dialog_EmitSignalToAll(_dialog, GWEN_DialogEvent_TypeFini, ""); if (rv==0) { /* aborted */ return 0; } else /* accepted */ return 1; } int FOX16_GuiDialog::setIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { DBG_DEBUG(GWEN_LOGDOMAIN, "SetIntProperty([%s], %d)", GWEN_Widget_GetName(w), value); switch(GWEN_Widget_GetType(w)) { case GWEN_Widget_TypeUnknown: return GWEN_ERROR_GENERIC; case GWEN_Widget_TypeNone: return GWEN_ERROR_GENERIC; case GWEN_Widget_TypeComboBox: { THEMECOMBOBOX *f; f=(THEMECOMBOBOX*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Value: if (valuegetNumItems()) { f->setCurrentItem(value, doSignal?TRUE:FALSE); return 0; } else { DBG_ERROR(GWEN_LOGDOMAIN, "Index %d out of range in widget [%s]", value, GWEN_Widget_GetName(w)); return GWEN_ERROR_INVALID; } case GWEN_DialogProperty_ClearValues: f->clearItems(); return 0; default: break; } break; } case GWEN_Widget_TypeRadioButton: { FXRadioButton *f; f=(FXRadioButton*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Value: f->setCheck((value==0)?FALSE:TRUE, doSignal?TRUE:FALSE); return 0; default: break; } break; } case GWEN_Widget_TypeProgressBar: { FXProgressBar *f; f=(FXProgressBar*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Value: f->setProgress(value); return 0; case GWEN_DialogProperty_MinValue: if (value!=0) { DBG_ERROR(GWEN_LOGDOMAIN, "MinValue should be 0!"); return GWEN_ERROR_INVALID; } return 0; case GWEN_DialogProperty_MaxValue: f->setTotal(value); return 0; default: break; } break; } case GWEN_Widget_TypeSpinBox: { FXSpinner *f; f=(FXSpinner*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Value: f->setValue(value); return 0; case GWEN_DialogProperty_MinValue: { FXint lo, hi; f->getRange(lo, hi); lo=value; f->setRange(lo, hi); return 0; } case GWEN_DialogProperty_MaxValue: { FXint lo, hi; f->getRange(lo, hi); hi=value; if (hisetRange(lo, hi); return 0; } default: break; } break; } case GWEN_Widget_TypeListBox: { FOX16_GuiSortingList *f; FXFoldingItem *fi; int i=0; f=(FOX16_GuiSortingList*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Value: fi=f->getFirstItem(); while(fi && igetNext(); i++; } if (fi && i==value) f->setCurrentItem(fi, doSignal?TRUE:FALSE); else { DBG_ERROR(GWEN_LOGDOMAIN, "Value %d out of range", value); return GWEN_ERROR_INVALID; } return 0; case GWEN_DialogProperty_ColumnWidth: f->setHeaderSize(index, value); return 0; case GWEN_DialogProperty_SelectionMode: switch(value) { case GWEN_Dialog_SelectionMode_None: /* simply fall-through */ case GWEN_Dialog_SelectionMode_Single: f->setListStyle(FOLDINGLIST_BROWSESELECT); return 0; case GWEN_Dialog_SelectionMode_Multi: f->setListStyle(FOLDINGLIST_EXTENDEDSELECT); return 0; ; } DBG_ERROR(GWEN_LOGDOMAIN, "Unknown SelectionMode %d", value); return GWEN_ERROR_INVALID; case GWEN_DialogProperty_SelectionState: { FXFoldingItem *ti; ti=f->getItem(index); if (ti==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Index %d out of range", index); return GWEN_ERROR_INVALID; } ti->setSelected((value==0)?FALSE:TRUE); return 0; } case GWEN_DialogProperty_ClearValues: f->clearItems(); return 0; case GWEN_DialogProperty_SortDirection: { int i; for (i=0; igetNumHeaders(); i++) { if (i==index) { switch(value) { case GWEN_DialogSortDirection_None: f->setHeaderArrowDir(i, MAYBE); break; case GWEN_DialogSortDirection_Up: f->setHeaderArrowDir(i, TRUE); break; case GWEN_DialogSortDirection_Down: f->setHeaderArrowDir(i, FALSE); break; } } else f->setHeaderArrowDir(i, MAYBE); } switch(value) { case GWEN_DialogSortDirection_None: break; case GWEN_DialogSortDirection_Up: f->sortByColumn(i, true); break; case GWEN_DialogSortDirection_Down: f->sortByColumn(i, false); break; } } return 0; case GWEN_DialogProperty_Sort: { int i; for (i=0; igetNumHeaders(); i++) { FXbool b; b=f->getHeaderArrowDir(i); if (b!=MAYBE) { if (b==TRUE) f->sortByColumn(i, true); else f->sortByColumn(i, false); break; } } } return 0; default: break; } break; } case GWEN_Widget_TypeCheckBox: { FXCheckButton *f; f=(FXCheckButton*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Value: f->setCheck((value==0)?FALSE:TRUE, doSignal?TRUE:FALSE); return 0; default: break; } break; } case GWEN_Widget_TypeTabBook: { FXTabBook *f; f=(FXTabBook*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Value: f->setCurrent(value, doSignal?TRUE:FALSE); return 0; default: break; } break; } case GWEN_Widget_TypeWidgetStack: { FXSwitcher *f; f=(FXSwitcher*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Value: f->setCurrent(value, doSignal?TRUE:FALSE); return 0; default: break; } break; } case GWEN_Widget_TypeLabel: case GWEN_Widget_TypePushButton: case GWEN_Widget_TypeLineEdit: case GWEN_Widget_TypeTextEdit: case GWEN_Widget_TypeGroupBox: case GWEN_Widget_TypeHSpacer: case GWEN_Widget_TypeVSpacer: case GWEN_Widget_TypeHLayout: case GWEN_Widget_TypeVLayout: case GWEN_Widget_TypeGridLayout: case GWEN_Widget_TypeDialog: case GWEN_Widget_TypeTabPage: case GWEN_Widget_TypeScrollArea: case GWEN_Widget_TypeHLine: case GWEN_Widget_TypeVLine: case GWEN_Widget_TypeTextBrowser: ; } { FXWindow *f; f=(FXWindow*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Width: f->recalc(); f->resize(value, f->getHeight()); m_sizeChanged=TRUE; return 0; case GWEN_DialogProperty_Height: f->recalc(); f->resize(f->getWidth(), value); m_sizeChanged=TRUE; return 0; case GWEN_DialogProperty_Enabled: if (value==0) f->disable(); else f->enable(); return 0; case GWEN_DialogProperty_Focus: f->setFocus(); return 0; case GWEN_DialogProperty_Visibility: if (value==0) { f->hide(); f->recalc(); } else { f->show(); f->recalc(); } return 0; case GWEN_DialogProperty_Title: case GWEN_DialogProperty_Value: case GWEN_DialogProperty_MinValue: case GWEN_DialogProperty_MaxValue: case GWEN_DialogProperty_AddValue: case GWEN_DialogProperty_ClearValues: case GWEN_DialogProperty_ValueCount: case GWEN_DialogProperty_ColumnWidth: case GWEN_DialogProperty_SelectionMode: case GWEN_DialogProperty_SelectionState: case GWEN_DialogProperty_SortDirection: case GWEN_DialogProperty_Sort: case GWEN_DialogProperty_ToolTip: case GWEN_DialogProperty_None: case GWEN_DialogProperty_Unknown: ; } } DBG_WARN(0, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } int FOX16_GuiDialog::getIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { switch(GWEN_Widget_GetType(w)) { case GWEN_Widget_TypeUnknown: case GWEN_Widget_TypeNone: return defaultValue; case GWEN_Widget_TypeComboBox: { THEMECOMBOBOX *f; f=(THEMECOMBOBOX*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Value: return f->getCurrentItem(); case GWEN_DialogProperty_ValueCount: return f->getNumItems(); default: break; } break; } case GWEN_Widget_TypeRadioButton: { FXRadioButton *f; f=(FXRadioButton*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Value: return (f->getCheck()==TRUE)?1:0; default: break; } break; } case GWEN_Widget_TypeProgressBar: { FXProgressBar *f; f=(FXProgressBar*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Value: return f->getProgress(); case GWEN_DialogProperty_MinValue: return 0; case GWEN_DialogProperty_MaxValue: return f->getTotal(); default: break; } break; } case GWEN_Widget_TypeSpinBox: { FXSpinner *f; f=(FXSpinner*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Value: return f->getValue(); case GWEN_DialogProperty_MinValue: { FXint lo, hi; f->getRange(lo, hi); return lo; } case GWEN_DialogProperty_MaxValue: { FXint lo, hi; f->getRange(lo, hi); return hi; } default: break; } break; } case GWEN_Widget_TypeListBox: { FOX16_GuiSortingList *f; FXFoldingItem *fi; int i=0; f=(FOX16_GuiSortingList*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Value: fi=f->getCurrentItem(); if (fi==NULL) return defaultValue; else { FXFoldingItem *ti; ti=fi; while( (ti=ti->getPrev()) ) i++; return i; } case GWEN_DialogProperty_ValueCount: return f->getNumItems(); case GWEN_DialogProperty_ColumnWidth: return f->getHeaderSize(index); case GWEN_DialogProperty_SelectionMode: { switch(f->getListStyle()) { case FOLDINGLIST_BROWSESELECT: return GWEN_Dialog_SelectionMode_Single; case FOLDINGLIST_EXTENDEDSELECT: return GWEN_Dialog_SelectionMode_Multi; default: return GWEN_Dialog_SelectionMode_None; } break; } case GWEN_DialogProperty_SelectionState: { FXFoldingItem *ti; int i=index; ti=f->getFirstItem(); while(ti && i) { ti=ti->getNext(); i--; } if (ti) return (ti->isSelected()==TRUE)?1:0; return defaultValue; } case GWEN_DialogProperty_SortDirection: { int i; for (i=0; igetNumHeaders(); i++) { if (i==index) { FXbool b; b=f->getHeaderArrowDir(i); if (b==MAYBE) return GWEN_DialogSortDirection_None; else if (b==TRUE) return GWEN_DialogSortDirection_Up; else return GWEN_DialogSortDirection_Down; } } DBG_ERROR(GWEN_LOGDOMAIN, "Column %d out of range", index); } return defaultValue; default: break; } break; } case GWEN_Widget_TypeCheckBox: { FXCheckButton *f; f=(FXCheckButton*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Value: return (f->getCheck()==TRUE)?1:0; default: break; } break; } case GWEN_Widget_TypeTabBook: { FXTabBook *f; f=(FXTabBook*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Value: return f->getCurrent(); default: break; } break; } case GWEN_Widget_TypeWidgetStack: { FXSwitcher *f; f=(FXSwitcher*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Value: return f->getCurrent(); default: break; } break; } case GWEN_Widget_TypeLabel: case GWEN_Widget_TypePushButton: case GWEN_Widget_TypeLineEdit: case GWEN_Widget_TypeTextEdit: case GWEN_Widget_TypeGroupBox: case GWEN_Widget_TypeHSpacer: case GWEN_Widget_TypeVSpacer: case GWEN_Widget_TypeHLayout: case GWEN_Widget_TypeVLayout: case GWEN_Widget_TypeGridLayout: case GWEN_Widget_TypeDialog: case GWEN_Widget_TypeTabPage: case GWEN_Widget_TypeScrollArea: case GWEN_Widget_TypeHLine: case GWEN_Widget_TypeVLine: case GWEN_Widget_TypeTextBrowser: break; } /* generic properties every widget has */ { FXWindow *f; f=(FXWindow*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Width: return f->getWidth(); case GWEN_DialogProperty_Height: return f->getHeight(); case GWEN_DialogProperty_Enabled: return (f->isEnabled()==TRUE)?1:0; case GWEN_DialogProperty_Focus: return (f->hasFocus())?1:0; case GWEN_DialogProperty_Title: case GWEN_DialogProperty_Value: case GWEN_DialogProperty_MinValue: case GWEN_DialogProperty_MaxValue: case GWEN_DialogProperty_AddValue: case GWEN_DialogProperty_ClearValues: case GWEN_DialogProperty_ValueCount: case GWEN_DialogProperty_ColumnWidth: case GWEN_DialogProperty_SelectionMode: case GWEN_DialogProperty_SelectionState: case GWEN_DialogProperty_SortDirection: case GWEN_DialogProperty_Sort: case GWEN_DialogProperty_Visibility: case GWEN_DialogProperty_ToolTip: case GWEN_DialogProperty_None: case GWEN_DialogProperty_Unknown: ; } } DBG_WARN(0, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } int FOX16_GuiDialog::setCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { FXString strValue; FXString htmlValue; if (value && *value) { strValue=FOX16_Gui::getRawText(value); htmlValue=FOX16_Gui::getHtmlText(value); } switch(GWEN_Widget_GetType(w)) { case GWEN_Widget_TypeUnknown: return GWEN_ERROR_GENERIC; case GWEN_Widget_TypeNone: return GWEN_ERROR_GENERIC; case GWEN_Widget_TypeLabel: { FOX16_HtmlLabel *f; f=(FOX16_HtmlLabel*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Title: f->setText(htmlValue); return 0; default: break; } break; } case GWEN_Widget_TypeTextBrowser: { FOX16_HtmlText *f; f=(FOX16_HtmlText*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Value: f->setText(htmlValue); f->makePositionVisible(strValue.length()); return 0; case GWEN_DialogProperty_AddValue: f->setText(f->getText()+htmlValue); return 0; case GWEN_DialogProperty_ClearValues: f->setText(""); return 0; default: break; } break; } case GWEN_Widget_TypePushButton: { THEMEBUTTON *f; f=(THEMEBUTTON*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Title: f->setText(value); return 0; case GWEN_DialogProperty_ToolTip: f->setTipText(htmlValue); return 0; default: break; } break; } case GWEN_Widget_TypeLineEdit: { FXTextField *f; f=(FXTextField*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Value: f->setText(value, doSignal?TRUE:FALSE); return 0; case GWEN_DialogProperty_ToolTip: f->setTipText(htmlValue); return 0; default: break; } break; } case GWEN_Widget_TypeTextEdit: { FXText *f; f=(FXText*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Value: f->setText(strValue); return 0; case GWEN_DialogProperty_ToolTip: f->setTipText(htmlValue); return 0; default: break; } break; } case GWEN_Widget_TypeComboBox: { THEMECOMBOBOX *f; f=(THEMECOMBOBOX*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Value: // undefined break; case GWEN_DialogProperty_ToolTip: f->setTipText(htmlValue); return 0; case GWEN_DialogProperty_AddValue: { int i; f->appendItem(strValue); i=f->getNumItems(); if (i>10) i=10; f->setNumVisible(i); return 0; } case GWEN_DialogProperty_ClearValues: f->clearItems(); return 0; default: break; } break; } case GWEN_Widget_TypeGroupBox: { FXGroupBox *f; f=(FXGroupBox*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Title: f->setText(strValue); return 0; default: break; } break; } case GWEN_Widget_TypeRadioButton: { FXRadioButton *f; f=(FXRadioButton*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Title: f->setText(strValue); return 0; case GWEN_DialogProperty_ToolTip: f->setTipText(htmlValue); return 0; default: break; } break; } case GWEN_Widget_TypeCheckBox: { FXCheckButton *f; f=(FXCheckButton*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Title: f->setText(strValue); return 0; case GWEN_DialogProperty_ToolTip: f->setTipText(htmlValue); return 0; default: break; } break; } case GWEN_Widget_TypeTabPage: { FXWindow *f1; THEMETABITEM *f2; f1=(FXWindow*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f1); f2=(THEMETABITEM*) (f1->getPrev()); assert(f2); switch(prop) { case GWEN_DialogProperty_Title: f2->setText(strValue); return 0; case GWEN_DialogProperty_ToolTip: f2->setTipText(htmlValue); return 0; default: break; } break; } case GWEN_Widget_TypeDialog: { FXDialogBox *f; f=(FXDialogBox*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Title: f->setTitle(strValue); return 0; default: break; } break; } case GWEN_Widget_TypeListBox: { FXFoldingList *f; FXString str; FXString t; FXint n=0; f=(FXFoldingList*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Title: f->getHeader()->clearItems(); str=strValue; while(!(t=str.section('\t',n)).empty()) { f->appendHeader(t, NULL, 20); n++; } return 0; case GWEN_DialogProperty_AddValue: f->appendItem(NULL, strValue); return 0; case GWEN_DialogProperty_ClearValues: f->clearItems(); return 0; default: break; } break; } case GWEN_Widget_TypeSpinBox: { FXSpinner *f; f=(FXSpinner*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_ToolTip: f->setTipText(htmlValue); return 0; default: break; } break; } case GWEN_Widget_TypeProgressBar: case GWEN_Widget_TypeHSpacer: case GWEN_Widget_TypeVSpacer: case GWEN_Widget_TypeHLayout: case GWEN_Widget_TypeVLayout: case GWEN_Widget_TypeGridLayout: case GWEN_Widget_TypeTabBook: case GWEN_Widget_TypeScrollArea: case GWEN_Widget_TypeWidgetStack: case GWEN_Widget_TypeHLine: case GWEN_Widget_TypeVLine: ; } /* this block is just to make sure we get warnings when new * properties are available but not handled here */ switch(prop) { case GWEN_DialogProperty_Title: case GWEN_DialogProperty_Value: case GWEN_DialogProperty_MinValue: case GWEN_DialogProperty_MaxValue: case GWEN_DialogProperty_Enabled: case GWEN_DialogProperty_AddValue: case GWEN_DialogProperty_ClearValues: case GWEN_DialogProperty_ValueCount: case GWEN_DialogProperty_ColumnWidth: case GWEN_DialogProperty_Width: case GWEN_DialogProperty_Height: case GWEN_DialogProperty_SelectionMode: case GWEN_DialogProperty_SelectionState: case GWEN_DialogProperty_Focus: case GWEN_DialogProperty_SortDirection: case GWEN_DialogProperty_Sort: case GWEN_DialogProperty_Visibility: case GWEN_DialogProperty_ToolTip: case GWEN_DialogProperty_None: case GWEN_DialogProperty_Unknown: break; } DBG_WARN(0, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } const char *FOX16_GuiDialog::getCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { FXString str; switch(GWEN_Widget_GetType(w)) { case GWEN_Widget_TypeUnknown: return defaultValue; case GWEN_Widget_TypeNone: return defaultValue; case GWEN_Widget_TypeLabel: { FOX16_HtmlLabel *f; f=(FOX16_HtmlLabel*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Title: str=f->getText(); if (str.empty()) return defaultValue; else { GWEN_Widget_SetText(w, FOX16_DIALOG_STRING_TITLE, str.text()); return GWEN_Widget_GetText(w, FOX16_DIALOG_STRING_TITLE); } default: break; } break; } case GWEN_Widget_TypePushButton: { THEMEBUTTON *f; f=(THEMEBUTTON*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Title: str=f->getText(); if (str.empty()) return defaultValue; else { GWEN_Widget_SetText(w, FOX16_DIALOG_STRING_TITLE, str.text()); return GWEN_Widget_GetText(w, FOX16_DIALOG_STRING_TITLE); } default: break; } break; } case GWEN_Widget_TypeLineEdit: { FXTextField *f; f=(FXTextField*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Value: str=f->getText(); if (str.empty()) return defaultValue; else { GWEN_Widget_SetText(w, FOX16_DIALOG_STRING_VALUE, str.text()); return GWEN_Widget_GetText(w, FOX16_DIALOG_STRING_VALUE); } default: break; } break; } case GWEN_Widget_TypeTextEdit: { FXText *f; f=(FXText*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Value: str=f->getText(); if (str.empty()) return defaultValue; else { GWEN_Widget_SetText(w, FOX16_DIALOG_STRING_VALUE, str.text()); return GWEN_Widget_GetText(w, FOX16_DIALOG_STRING_VALUE); } default: break; } break; } case GWEN_Widget_TypeTextBrowser: { FOX16_HtmlText *f; f=(FOX16_HtmlText*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Value: str=f->getText(); if (str.empty()) return defaultValue; else { GWEN_Widget_SetText(w, FOX16_DIALOG_STRING_VALUE, str.text()); return GWEN_Widget_GetText(w, FOX16_DIALOG_STRING_VALUE); } default: break; } break; } case GWEN_Widget_TypeComboBox: { THEMECOMBOBOX *f; f=(THEMECOMBOBOX*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Value: if (indexgetNumItems()) { str=f->getItem(index); if (str.empty()) return defaultValue; else { GWEN_Widget_SetText(w, FOX16_DIALOG_STRING_VALUE, str.text()); return GWEN_Widget_GetText(w, FOX16_DIALOG_STRING_VALUE); } } else { DBG_ERROR(GWEN_LOGDOMAIN, "Index %d out of range", index); return defaultValue; } default: break; } break; } case GWEN_Widget_TypeGroupBox: { FXGroupBox *f; f=(FXGroupBox*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Title: str=f->getText(); if (str.empty()) return defaultValue; else { GWEN_Widget_SetText(w, FOX16_DIALOG_STRING_TITLE, str.text()); return GWEN_Widget_GetText(w, FOX16_DIALOG_STRING_TITLE); } default: break; } break; } case GWEN_Widget_TypeRadioButton: { FXRadioButton *f; f=(FXRadioButton*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Title: str=f->getText(); if (str.empty()) return defaultValue; else { GWEN_Widget_SetText(w, FOX16_DIALOG_STRING_TITLE, str.text()); return GWEN_Widget_GetText(w, FOX16_DIALOG_STRING_TITLE); } default: break; } break; } case GWEN_Widget_TypeCheckBox: { FXCheckButton *f; f=(FXCheckButton*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Title: str=f->getText(); if (str.empty()) return defaultValue; else { GWEN_Widget_SetText(w, FOX16_DIALOG_STRING_TITLE, str.text()); return GWEN_Widget_GetText(w, FOX16_DIALOG_STRING_TITLE); } default: break; } break; } case GWEN_Widget_TypeTabPage: { FXWindow *f1; THEMETABITEM *f2; f1=(FXWindow*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f1); f2=(THEMETABITEM*) (f1->getPrev()); assert(f2); switch(prop) { case GWEN_DialogProperty_Title: str=f2->getText(); if (str.empty()) return defaultValue; else { GWEN_Widget_SetText(w, FOX16_DIALOG_STRING_TITLE, str.text()); return GWEN_Widget_GetText(w, FOX16_DIALOG_STRING_TITLE); } default: break; } break; } case GWEN_Widget_TypeDialog: { FXDialogBox *f; f=(FXDialogBox*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Title: str=f->getTitle(); if (str.empty()) return defaultValue; else { GWEN_Widget_SetText(w, FOX16_DIALOG_STRING_TITLE, str.text()); return GWEN_Widget_GetText(w, FOX16_DIALOG_STRING_TITLE); } default: break; } break; } case GWEN_Widget_TypeListBox: { FXFoldingList *f; FXHeader *fh; FXFoldingItem *fi; f=(FXFoldingList*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL); assert(f); switch(prop) { case GWEN_DialogProperty_Title: fh=f->getHeader(); if (fh) { int i; for (i=0; igetNumItems(); i++) { if (!str.empty()) str+="\t"; str+=fh->getItemText(i); } } if (str.empty()) return defaultValue; else { GWEN_Widget_SetText(w, FOX16_DIALOG_STRING_TITLE, str.text()); return GWEN_Widget_GetText(w, FOX16_DIALOG_STRING_TITLE); } case GWEN_DialogProperty_Value: fi=f->getFirstItem(); if (fi) { int i=index; while(fi && i>0) { fi=fi->getNext(); i--; } if (fi) { str=fi->getText(); if (str.empty()) return defaultValue; GWEN_Widget_SetText(w, FOX16_DIALOG_STRING_VALUE, str.text()); return GWEN_Widget_GetText(w, FOX16_DIALOG_STRING_VALUE); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Index %d out of range", index); return defaultValue; } } else { DBG_ERROR(GWEN_LOGDOMAIN, "Empty list"); return defaultValue; } default: break; } break; } case GWEN_Widget_TypeProgressBar: case GWEN_Widget_TypeSpinBox: case GWEN_Widget_TypeHSpacer: case GWEN_Widget_TypeVSpacer: case GWEN_Widget_TypeHLayout: case GWEN_Widget_TypeVLayout: case GWEN_Widget_TypeGridLayout: case GWEN_Widget_TypeTabBook: case GWEN_Widget_TypeScrollArea: case GWEN_Widget_TypeWidgetStack: case GWEN_Widget_TypeHLine: case GWEN_Widget_TypeVLine: break; } /* this block is just to make sure we get warnings when new * properties are available but not handled here */ switch(prop) { case GWEN_DialogProperty_Title: case GWEN_DialogProperty_Value: case GWEN_DialogProperty_MinValue: case GWEN_DialogProperty_MaxValue: case GWEN_DialogProperty_Enabled: case GWEN_DialogProperty_AddValue: case GWEN_DialogProperty_ClearValues: case GWEN_DialogProperty_ValueCount: case GWEN_DialogProperty_ColumnWidth: case GWEN_DialogProperty_Width: case GWEN_DialogProperty_Height: case GWEN_DialogProperty_SelectionMode: case GWEN_DialogProperty_SelectionState: case GWEN_DialogProperty_Focus: case GWEN_DialogProperty_SortDirection: case GWEN_DialogProperty_Sort: case GWEN_DialogProperty_Visibility: case GWEN_DialogProperty_ToolTip: case GWEN_DialogProperty_None: case GWEN_DialogProperty_Unknown: break; } DBG_WARN(0, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } long FOX16_GuiDialog::onSelCommand(FXObject *sender, FXSelector sel, void *ptr) { GWEN_WIDGET *w; const char *wname; int rv=GWEN_DialogEvent_ResultNotHandled; FXDialogBox *dialogBox; w=GWEN_Dialog_FindWidgetByImplData(_dialog, FOX16_DIALOG_WIDGET_REAL, sender); if (w==NULL) { if (!m_radioGroups.empty()) { std::list::iterator it; RadioButtonGroup *grp=NULL; for (it=m_radioGroups.begin(); it!=m_radioGroups.end(); it++) { if ((*it)->getDataTarget()==sender) { grp=*it; break; } } if (grp==NULL) { DBG_WARN(GWEN_LOGDOMAIN, "Widget or RadioButtonGroup not found"); return 0; } else { DBG_INFO(0, "Found button group %d: %d", grp->getGroupId(), grp->getRadioValue()); // no signal for now return 1; } } } wname=GWEN_Widget_GetName(w); dialogBox=_mainWidget; DBG_DEBUG(GWEN_LOGDOMAIN, "Command for [%s] (type: %s)", wname?wname:"(unnamed)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); switch(GWEN_Widget_GetType(w)) { case GWEN_Widget_TypeUnknown: return GWEN_ERROR_GENERIC; case GWEN_Widget_TypeNone: return GWEN_ERROR_GENERIC; case GWEN_Widget_TypePushButton: case GWEN_Widget_TypeLineEdit: case GWEN_Widget_TypeComboBox: case GWEN_Widget_TypeListBox: case GWEN_Widget_TypeCheckBox: case GWEN_Widget_TypeLabel: case GWEN_Widget_TypeTextEdit: rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w), GWEN_DialogEvent_TypeActivated, GWEN_Widget_GetName(w)); break; case GWEN_Widget_TypeSpinBox: rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w), GWEN_DialogEvent_TypeValueChanged, GWEN_Widget_GetName(w)); break; case GWEN_Widget_TypeRadioButton: /* use SEL_UPDATED for FXRadioButton */ case GWEN_Widget_TypeProgressBar: case GWEN_Widget_TypeGroupBox: case GWEN_Widget_TypeHSpacer: case GWEN_Widget_TypeVSpacer: case GWEN_Widget_TypeHLayout: case GWEN_Widget_TypeVLayout: case GWEN_Widget_TypeGridLayout: case GWEN_Widget_TypeDialog: case GWEN_Widget_TypeTabBook: case GWEN_Widget_TypeTabPage: case GWEN_Widget_TypeScrollArea: case GWEN_Widget_TypeWidgetStack: case GWEN_Widget_TypeHLine: case GWEN_Widget_TypeVLine: case GWEN_Widget_TypeTextBrowser: /* nothing to do for these types */ ; } if (rv==GWEN_DialogEvent_ResultAccept) { dialogBox->getApp()->stopModal(dialogBox, 1); } else if (rv==GWEN_DialogEvent_ResultReject) { dialogBox->getApp()->stopModal(dialogBox, 0); } return 1; } long FOX16_GuiDialog::onSelChanged(FXObject *sender, FXSelector sel, void *ptr) { GWEN_WIDGET *w; int rv=GWEN_DialogEvent_ResultNotHandled; FXDialogBox *dialogBox; w=GWEN_Dialog_FindWidgetByImplData(_dialog, FOX16_DIALOG_WIDGET_REAL, sender); if (w==NULL) { DBG_INFO(0, "Widget not found"); return 0; } dialogBox=_mainWidget; switch(GWEN_Widget_GetType(w)) { case GWEN_Widget_TypeUnknown: return GWEN_ERROR_GENERIC; case GWEN_Widget_TypeNone: return GWEN_ERROR_GENERIC; case GWEN_Widget_TypeSpinBox: case GWEN_Widget_TypeLineEdit: rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w), GWEN_DialogEvent_TypeValueChanged, GWEN_Widget_GetName(w)); break; case GWEN_Widget_TypeLabel: case GWEN_Widget_TypePushButton: case GWEN_Widget_TypeTextEdit: case GWEN_Widget_TypeComboBox: case GWEN_Widget_TypeRadioButton: case GWEN_Widget_TypeProgressBar: case GWEN_Widget_TypeGroupBox: case GWEN_Widget_TypeHSpacer: case GWEN_Widget_TypeVSpacer: case GWEN_Widget_TypeHLayout: case GWEN_Widget_TypeVLayout: case GWEN_Widget_TypeGridLayout: case GWEN_Widget_TypeListBox: case GWEN_Widget_TypeDialog: case GWEN_Widget_TypeTabBook: case GWEN_Widget_TypeTabPage: case GWEN_Widget_TypeCheckBox: case GWEN_Widget_TypeScrollArea: case GWEN_Widget_TypeWidgetStack: case GWEN_Widget_TypeHLine: case GWEN_Widget_TypeVLine: case GWEN_Widget_TypeTextBrowser: ; } if (rv==GWEN_DialogEvent_ResultAccept) { GWEN_Dialog_EmitSignalToAll(_dialog, GWEN_DialogEvent_TypeFini, ""); dialogBox->getApp()->stopModal(dialogBox, 1); } else if (rv==GWEN_DialogEvent_ResultReject) { GWEN_Dialog_EmitSignalToAll(_dialog, GWEN_DialogEvent_TypeFini, ""); dialogBox->getApp()->stopModal(dialogBox, 0); } return 1; } long FOX16_GuiDialog::onSelKeyPress(FXObject *sender, FXSelector sel, void *ptr) { GWEN_WIDGET *w; w=GWEN_Dialog_FindWidgetByImplData(_dialog, FOX16_DIALOG_WIDGET_REAL, sender); if (w==NULL) { DBG_INFO(0, "Widget not found"); return 0; } switch(GWEN_Widget_GetType(w)) { case GWEN_Widget_TypeUnknown: case GWEN_Widget_TypeNone: return 0; case GWEN_Widget_TypeDialog: /* catch ENTER key */ if (((FXEvent*)ptr)->code==KEY_Return || ((FXEvent*)ptr)->code==KEY_KP_Enter) { return 1; } return 0; case GWEN_Widget_TypeLabel: case GWEN_Widget_TypePushButton: case GWEN_Widget_TypeLineEdit: case GWEN_Widget_TypeTextEdit: case GWEN_Widget_TypeComboBox: case GWEN_Widget_TypeRadioButton: case GWEN_Widget_TypeProgressBar: case GWEN_Widget_TypeSpinBox: case GWEN_Widget_TypeGroupBox: case GWEN_Widget_TypeHSpacer: case GWEN_Widget_TypeVSpacer: case GWEN_Widget_TypeHLayout: case GWEN_Widget_TypeVLayout: case GWEN_Widget_TypeGridLayout: case GWEN_Widget_TypeListBox: case GWEN_Widget_TypeTabBook: case GWEN_Widget_TypeTabPage: case GWEN_Widget_TypeCheckBox: case GWEN_Widget_TypeScrollArea: case GWEN_Widget_TypeWidgetStack: case GWEN_Widget_TypeHLine: case GWEN_Widget_TypeVLine: case GWEN_Widget_TypeTextBrowser: ; } return 0; } long FOX16_GuiDialog::onSelKeyRelease(FXObject *sender, FXSelector sel, void *ptr) { GWEN_WIDGET *w; w=GWEN_Dialog_FindWidgetByImplData(_dialog, FOX16_DIALOG_WIDGET_REAL, sender); if (w==NULL) { DBG_INFO(0, "Widget not found"); return 0; } switch(GWEN_Widget_GetType(w)) { case GWEN_Widget_TypeDialog: /* catch ENTER key */ if (((FXEvent*)ptr)->code==KEY_Return || ((FXEvent*)ptr)->code==KEY_KP_Enter) { return 1; } return 0; case GWEN_Widget_TypeUnknown: case GWEN_Widget_TypeNone: case GWEN_Widget_TypeLabel: case GWEN_Widget_TypePushButton: case GWEN_Widget_TypeLineEdit: case GWEN_Widget_TypeTextEdit: case GWEN_Widget_TypeComboBox: case GWEN_Widget_TypeRadioButton: case GWEN_Widget_TypeProgressBar: case GWEN_Widget_TypeSpinBox: case GWEN_Widget_TypeGroupBox: case GWEN_Widget_TypeHSpacer: case GWEN_Widget_TypeVSpacer: case GWEN_Widget_TypeHLayout: case GWEN_Widget_TypeVLayout: case GWEN_Widget_TypeGridLayout: case GWEN_Widget_TypeListBox: case GWEN_Widget_TypeTabBook: case GWEN_Widget_TypeTabPage: case GWEN_Widget_TypeCheckBox: case GWEN_Widget_TypeScrollArea: case GWEN_Widget_TypeWidgetStack: case GWEN_Widget_TypeHLine: case GWEN_Widget_TypeVLine: case GWEN_Widget_TypeTextBrowser: ; } return 0; } bool FOX16_GuiDialog::setup(FXWindow *parentWindow) { FXWindow *xw; GWEN_WIDGET_TREE *wtree; GWEN_WIDGET *w; int rv; wtree=GWEN_Dialog_GetWidgets(_dialog); if (wtree==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No widget tree in dialog"); return false; } w=GWEN_Widget_Tree_GetFirst(wtree); if (w==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No widgets in dialog"); return false; } xw=setupTree(parentWindow, w); if (xw==NULL) { DBG_INFO(0, "here"); return false; } _mainWidget=dynamic_cast(xw); assert(_mainWidget); /* create X11 server side resources */ xw->create(); m_sizeChanged=FALSE; rv=GWEN_Dialog_EmitSignalToAll(_dialog, GWEN_DialogEvent_TypeInit, ""); if (rv<0) { DBG_INFO(0, "Error initializing dialog: %d", rv); return false; } if (!m_sizeChanged) { DBG_ERROR(0, "Resizing dialog myself"); xw->resize(xw->getDefaultWidth(), xw->getDefaultHeight()); } xw->layout(); return true; } FXWindow *FOX16_GuiDialog::setupTree(FXWindow *parentWindow, GWEN_WIDGET *w) { const char *s; const char *name; FXuint opts=0; uint32_t flags; FXString text; FXString htmlText; FXComposite *parentComposite=NULL; FXWindow *wChild=NULL; FXWindow *wContent=NULL; GWEN_WIDGET *parentWidget; int cols; int rows; /* sample data */ flags=GWEN_Widget_GetFlags(w); s=GWEN_Widget_GetText(w, 0); if (s) { text=FXString(s); htmlText=FOX16_Gui::getHtmlText(s); } name=GWEN_Widget_GetName(w); cols=GWEN_Widget_GetColumns(w); rows=GWEN_Widget_GetRows(w); parentWidget=GWEN_Widget_Tree_GetParent(w); /* check for parent type */ if (parentWindow) parentComposite=dynamic_cast(parentWindow); if (parentComposite==NULL) { switch(GWEN_Widget_GetType(w)) { case GWEN_Widget_TypeDialog: /* these types don't need the parent to be a FXComposite */ break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Parent of widget [%s] (type %d) is not a composite", name?name:"(unnamed)", GWEN_Widget_GetType(w)); return NULL; } } /* setup info for new widget */ if (flags & GWEN_WIDGET_FLAGS_FILLX) opts|=LAYOUT_FILL_X | LAYOUT_FILL_COLUMN; if (flags & GWEN_WIDGET_FLAGS_FILLY) opts|=LAYOUT_FILL_Y; if (flags & GWEN_WIDGET_FLAGS_DECOR_SHRINKABLE) opts|=DECOR_SHRINKABLE; if (flags & GWEN_WIDGET_FLAGS_DECOR_STRETCHABLE) opts|=DECOR_STRETCHABLE; if (flags & GWEN_WIDGET_FLAGS_DECOR_MINIMIZE) opts|=DECOR_MINIMIZE; if (flags & GWEN_WIDGET_FLAGS_DECOR_MAXIMIZE) opts|=DECOR_MAXIMIZE; if (flags & GWEN_WIDGET_FLAGS_DECOR_CLOSE) opts|=DECOR_CLOSE; if (flags & GWEN_WIDGET_FLAGS_DECOR_MENU) opts|=DECOR_MENU; if (flags & GWEN_WIDGET_FLAGS_EQUAL_WIDTH) opts|=PACK_UNIFORM_WIDTH; if (flags & GWEN_WIDGET_FLAGS_EQUAL_HEIGHT) opts|=PACK_UNIFORM_HEIGHT; if (flags & GWEN_WIDGET_FLAGS_JUSTIFY_LEFT) opts|=JUSTIFY_LEFT; if (flags & GWEN_WIDGET_FLAGS_JUSTIFY_RIGHT) opts|=JUSTIFY_RIGHT; if (flags & GWEN_WIDGET_FLAGS_JUSTIFY_TOP) opts|=JUSTIFY_TOP; if (flags & GWEN_WIDGET_FLAGS_JUSTIFY_BOTTOM) opts|=JUSTIFY_BOTTOM; if (flags & GWEN_WIDGET_FLAGS_JUSTIFY_CENTERX) opts|=JUSTIFY_CENTER_X; if (flags & GWEN_WIDGET_FLAGS_JUSTIFY_CENTERY) opts|=JUSTIFY_CENTER_Y; /* create THIS widget */ switch(GWEN_Widget_GetType(w)) { case GWEN_Widget_TypeLabel: { FOX16_HtmlLabel *label; int wi; const char *s; GWEN_STRINGLISTENTRY *se; if (flags & GWEN_WIDGET_FLAGS_NO_WORDWRAP) opts|=FOX16_HtmlLabel::FLAGS_NO_WORDWRAP; label=new FOX16_HtmlLabel(parentComposite, htmlText, opts); s=GWEN_Widget_GetIconFileName(w); if (s && *s) { FXIcon *ic; ic=getIcon(s); if (ic) label->setIcon(ic); } wi=GWEN_Widget_GetWidth(w); if (wi>0) label->setMaxDefaultWidth(wi); /* copy media paths to label */ se=GWEN_StringList_FirstEntry(GWEN_Dialog_GetMediaPaths(_dialog)); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); assert(s); label->addMediaPath(s); se=GWEN_StringListEntry_Next(se); } wChild=label; break; } case GWEN_Widget_TypePushButton: { const char *s; FXIcon *ic=NULL; if (flags & GWEN_WIDGET_FLAGS_DEFAULT_WIDGET) opts|=BUTTON_DEFAULT | BUTTON_INITIAL | BUTTON_NORMAL; else opts|=BUTTON_NORMAL; s=GWEN_Widget_GetIconFileName(w); if (s && *s) ic=getIcon(s); wChild=new THEMEBUTTON(parentComposite, text, ic, /* icon */ this, ID_WIDGET_FIRST+_widgetCount, opts); break; } case GWEN_Widget_TypeLineEdit: if (flags & GWEN_WIDGET_FLAGS_PASSWORD) opts|=TEXTFIELD_PASSWD; if (flags & GWEN_WIDGET_FLAGS_READONLY) opts|=TEXTFIELD_READONLY; wChild=new FXTextField(parentComposite, cols?cols:16, this, ID_WIDGET_FIRST+_widgetCount, opts | TEXTFIELD_NORMAL | TEXTFIELD_ENTER_ONLY); break; case GWEN_Widget_TypeTextEdit: { FXText *f; if (flags & GWEN_WIDGET_FLAGS_READONLY) opts|=TEXT_READONLY; f=new FXText(parentComposite, this, ID_WIDGET_FIRST+_widgetCount, opts | HSCROLLING_OFF); if (cols) f->setVisibleColumns(cols); if (rows) f->setVisibleRows(rows); wChild=f; break; } case GWEN_Widget_TypeTextBrowser: { FOX16_HtmlText *f; f=new FOX16_HtmlText(parentComposite, "", opts | HSCROLLING_OFF); wChild=f; break; } case GWEN_Widget_TypeComboBox: if (flags & GWEN_WIDGET_FLAGS_READONLY) opts|=COMBOBOX_STATIC; wChild=new THEMECOMBOBOX(parentComposite, cols?cols:16, this, ID_WIDGET_FIRST+_widgetCount, opts); break; case GWEN_Widget_TypeRadioButton: { FXRadioButton *rb; int groupId; RadioButtonGroup *grp=NULL; std::list::iterator it; groupId=GWEN_Widget_GetGroupId(w); for (it=m_radioGroups.begin(); it!=m_radioGroups.end(); it++) { if ((*it)->getGroupId()==groupId) { grp=*it; } } if (grp==NULL) { grp=new RadioButtonGroup(groupId, this, ID_WIDGET_FIRST+_widgetCount); m_radioGroups.push_back(grp); } rb=new FXRadioButton(parentComposite, text, grp->getDataTarget(), FXDataTarget::ID_OPTION+grp->getButtonCount(), opts | RADIOBUTTON_NORMAL); grp->addButton(rb); wChild=rb; break; } case GWEN_Widget_TypeProgressBar: wChild=new FXProgressBar(parentComposite, this, ID_WIDGET_FIRST+_widgetCount, opts | PROGRESSBAR_NORMAL | PROGRESSBAR_PERCENTAGE); break; case GWEN_Widget_TypeGroupBox: wChild=new FXGroupBox(parentComposite, text, opts | GROUPBOX_NORMAL | FRAME_LINE); break; case GWEN_Widget_TypeHSpacer: wChild=new FXSpring(parentComposite, opts | LAYOUT_FILL_X); break; case GWEN_Widget_TypeVSpacer: wChild=new FXSpring(parentComposite, opts | LAYOUT_FILL_Y); break; case GWEN_Widget_TypeHLayout: wChild=new FXHorizontalFrame(parentComposite, opts, 0, 0, 0, 0, 0, 0, 0, 0); break; case GWEN_Widget_TypeVLayout: wChild=new FXVerticalFrame(parentComposite, opts, 0, 0, 0, 0, 0, 0, 0, 0); break; case GWEN_Widget_TypeGridLayout: if (cols & rows) { DBG_ERROR(GWEN_LOGDOMAIN, "State columns *or* rows, not both in widget [%s]", name?name:"(unnamed)"); return NULL; } if (cols) wChild=new FXMatrix(parentComposite, cols, opts | MATRIX_BY_COLUMNS, 0, 0, 0, 0, 0, 0, 0, 0); else wChild=new FXMatrix(parentComposite, rows, opts | MATRIX_BY_ROWS, 0, 0, 0, 0, 0, 0, 0, 0); break; case GWEN_Widget_TypeListBox: wChild=new FOX16_GuiSortingList(parentComposite, this, ID_WIDGET_FIRST+_widgetCount, opts | FRAME_SUNKEN|FRAME_THICK | LISTBOX_NORMAL); break; case GWEN_Widget_TypeDialog: if (parentWindow) wChild=new FXDialogBox(parentWindow, name?FXString(name):FXString(""), opts | DECOR_TITLE | DECOR_BORDER); else wChild=new FXDialogBox(FXApp::instance(), name?FXString(name):FXString(""), opts | DECOR_TITLE | DECOR_BORDER); break; case GWEN_Widget_TypeTabBook: wChild=new FXTabBook(parentComposite, this, ID_WIDGET_FIRST+_widgetCount, opts | TABBOOK_NORMAL); break; case GWEN_Widget_TypeTabPage: if (parentWidget==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Widget [%s] has no parent", name?name:"(unnamed)"); return NULL; } else { FXTabBook *tbook=dynamic_cast(parentWindow); if (tbook==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Parent of widget [%s] needs to be of type TabBook", name?name:"(unnamed)"); return NULL; } new THEMETABITEM(tbook, text, NULL, opts | TAB_TOP_NORMAL); wChild=new FXVerticalFrame(tbook, opts); } break; case GWEN_Widget_TypeCheckBox: wChild=new FXCheckButton(parentComposite, text, this, ID_WIDGET_FIRST+_widgetCount, opts | CHECKBUTTON_NORMAL); break; case GWEN_Widget_TypeScrollArea: { FXScrollWindow *f; f=new FXScrollWindow(parentComposite, opts); wChild=f; wContent=f->contentWindow(); break; } case GWEN_Widget_TypeWidgetStack: wChild=new FXSwitcher(parentComposite, opts); break; case GWEN_Widget_TypeHLine: wChild=new FXHorizontalSeparator(parentComposite, opts | SEPARATOR_GROOVE); break; case GWEN_Widget_TypeVLine: wChild=new FXVerticalSeparator(parentComposite, opts | SEPARATOR_GROOVE); break; case GWEN_Widget_TypeSpinBox: wChild=new FXSpinner(parentComposite, cols?cols:16, this, ID_WIDGET_FIRST+_widgetCount, opts | SPIN_NORMAL); break; case GWEN_Widget_TypeUnknown: DBG_ERROR(GWEN_LOGDOMAIN, "Widget [%s] is of type \'unknown\'", name?name:"(unnamed)"); return NULL; case GWEN_Widget_TypeNone: DBG_ERROR(GWEN_LOGDOMAIN, "Widget [%s] is of type \'none\'", name?name:"(unnamed)"); return NULL; } assert(wChild); _widgetCount++; if (wContent==NULL) wContent=wChild; GWEN_Widget_SetImplData(w, FOX16_DIALOG_WIDGET_REAL, (void*) wChild); GWEN_Widget_SetImplData(w, FOX16_DIALOG_WIDGET_CONTENT, (void*) wContent); /* handle children */ w=GWEN_Widget_Tree_GetFirstChild(w); while(w) { if (NULL==setupTree(wContent, w)) return NULL; w=GWEN_Widget_Tree_GetNext(w); } return wChild; } int FOX16_GuiDialog::cont() { FXDialogBox *dialogBox; dialogBox=_mainWidget; return dialogBox->getApp()->runModalFor(dialogBox); } int FOX16_GuiDialog::openDialog() { FXDialogBox *dialogBox; dialogBox=_mainWidget; /* show dialog */ dialogBox->layout(); dialogBox->show(PLACEMENT_OWNER); return 0; } int FOX16_GuiDialog::closeDialog() { FXDialogBox *dialogBox; dialogBox=_mainWidget; /* let dialog write its settings */ GWEN_Dialog_EmitSignalToAll(_dialog, GWEN_DialogEvent_TypeFini, ""); /* hide dialog */ dialogBox->hide(); delete _mainWidget; _mainWidget=NULL; return 0; } gwenhywfar-4.15.2beta/gui/fox16/fox16_gui_updater.cpp0000644000175000017500000000223312416477066017344 00000000000000/*************************************************************************** begin : Fri Jan 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "fox16_gui_updater_l.hpp" #include FXDEFMAP(FOX16_GuiUpdater) FOX16_GuiUpdaterMap[]= { FXMAPFUNC(SEL_CHORE, FOX16_GuiUpdater::ID_CHORE, FOX16_GuiUpdater::onChore), }; FXIMPLEMENT(FOX16_GuiUpdater, FXObject, FOX16_GuiUpdaterMap, ARRAYNUMBER(FOX16_GuiUpdaterMap)) FOX16_GuiUpdater::FOX16_GuiUpdater() :FXObject() , m_guiIdleFlag(0) { } FOX16_GuiUpdater::~FOX16_GuiUpdater() { } void FOX16_GuiUpdater::guiUpdate() { FXApp *a=FXApp::instance(); a->addChore(this, ID_CHORE); a->flush(true); m_guiIdleFlag=0; a->runUntil(m_guiIdleFlag); } long FOX16_GuiUpdater::onChore(FXObject*, FXSelector, void*) { m_guiIdleFlag=1; return 1; } gwenhywfar-4.15.2beta/gui/fox16/fox16_htmllabel.hpp0000644000175000017500000000435212416477066017011 00000000000000/*************************************************************************** begin : Tue Feb 23 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef FOX16_HTMLLABEL_HPP #define FOX16_HTMLLABEL_HPP #include #include class FOX16_HtmlCtx; class FOX16GUI_API FOX16_HtmlLabel: public FXFrame { FXDECLARE(FOX16_HtmlLabel) public: enum { /** don't wrap the text. If this flag is given as parameter to the constructor * then you'll have to insert line-breaks into the text yourself. */ FLAGS_NO_WORDWRAP = 0x00080000, /** when wrapping words use the full widget width to layout the text. * Otherwise the wordwrapping occurrs at the width set by @ref setMaxDefaultWidth(). */ FLAGS_USE_FULL_WIDTH = 0x00040000 }; FOX16_HtmlLabel(FXComposite* p, const FXString& text, FXuint opts=0, FXint x=0, FXint y=0, FXint w=0, FXint h=0, FXint pl=DEFAULT_PAD, FXint pr=DEFAULT_PAD, FXint pt=DEFAULT_PAD, FXint pb=DEFAULT_PAD); ~FOX16_HtmlLabel(); /// Set the text for this label void setText(const FXString& text); /// Get the text for this label FXString getText() const { return m_text; } FXIcon *getIcon() const { return m_icon;}; void setIcon(FXIcon *ic); void addMediaPath(const char *s); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); void create(); void setMinimumWidth(int i) { m_minWidth=i;}; void setMaxDefaultWidth(int i) { m_maxDefaultWidth=i;}; long onPaint(FXObject*, FXSelector, void*); void layout(); protected: FOX16_HtmlCtx *m_htmlCtx; FXString m_text; int m_minWidth; int m_maxDefaultWidth; bool m_haveDefaultDims; FXint m_defaultWidth; FXint m_defaultHeight; GWEN_STRINGLIST *m_mediaPaths; FXIcon *m_icon; FOX16_HtmlLabel(); void updateHtml(); void calcDefaultDims(); }; #endif gwenhywfar-4.15.2beta/gui/fox16/Makefile.am0000644000175000017500000000226612364015347015337 00000000000000INCLUDES=-I$(gwenhywfar_symlinkdir) $(fox_includes) -Ihtml AM_CPPFLAGS= @visibility_cflags@ DEFS+=-DBUILDING_FOX16_GUI -DPACKAGE=\"$(PACKAGE)\" pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = gwengui-fox16.pc lib_LTLIBRARIES=libgwengui-fox16.la noinst_HEADERS=\ fox16_gui_dialog_l.hpp \ fox16_gui_sortinglist_l.hpp \ fox16_gui_updater_l.hpp \ fox16_htmlctx_p.hpp \ fox16_htmlctx.hpp libgwengui_fox16_la_LIBADD=$(fox_libs) $(top_builddir)/src/$(gwenhywfar_internal_libname) $(top_builddir)/gui/cpp/libgwengui-cpp.la libgwengui_fox16_la_LDFLAGS=-no-undefined libgwengui_fox16_la_SOURCES=\ fox16_gui.cpp \ fox16_gui_dialog.cpp \ fox16_gui_sortinglist.cpp \ fox16_gui_updater.cpp \ fox16_htmlctx.cpp \ fox16_htmllabel.cpp \ fox16_htmltext.cpp \ theme.cpp iheaderdir=${gwenhywfar_headerdir_am}/gwen-gui-fox16 iheader_HEADERS=\ fox16_gui.hpp \ fox16_htmlctx.hpp \ fox16_htmllabel.hpp \ fox16_htmltext.hpp \ theme.h \ api.h noinst_PROGRAMS=libtest libtest_SOURCES=libtest.cpp libtest_LDADD=libgwengui-fox16.la $(fox_libs) $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(top_builddir)/gui/cpp/libgwengui-cpp.la \ $(builddir)/../testdialogs/libgwengui-test.la gwenhywfar-4.15.2beta/gui/fox16/fox16_htmllabel.cpp0000644000175000017500000001470212416477066017004 00000000000000/*************************************************************************** begin : Tue Feb 23 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "fox16_htmllabel.hpp" #include "fox16_htmlctx.hpp" #include #include #include #include #define MAX_DEFAULT_WIDTH 400 #define ICON_SPACE 4 FXDEFMAP(FOX16_HtmlLabel) FOX16_HtmlLabelMap[]= { FXMAPFUNC(SEL_PAINT,0,FOX16_HtmlLabel::onPaint), }; // Object implementation FXIMPLEMENT(FOX16_HtmlLabel, FXFrame, FOX16_HtmlLabelMap, ARRAYNUMBER(FOX16_HtmlLabelMap)) FOX16_HtmlLabel::FOX16_HtmlLabel(FXComposite* p, const FXString& text, FXuint opts, FXint x, FXint y, FXint w, FXint h, FXint pl, FXint pr, FXint pt, FXint pb) :FXFrame(p, opts, x, y, w, h, pl, pr, pt, pb) ,m_htmlCtx(NULL) ,m_minWidth(0) ,m_maxDefaultWidth(-1) ,m_haveDefaultDims(false) ,m_mediaPaths(NULL) ,m_icon(NULL) { m_mediaPaths=GWEN_StringList_new(); setText(text); flags|=FLAG_ENABLED|FLAG_DIRTY|FLAG_RECALC; } FOX16_HtmlLabel::FOX16_HtmlLabel() :FXFrame() ,m_htmlCtx(NULL) ,m_minWidth(0) ,m_mediaPaths(NULL) ,m_icon(NULL) { flags|=FLAG_ENABLED; } FOX16_HtmlLabel::~FOX16_HtmlLabel() { if (m_htmlCtx) delete m_htmlCtx; GWEN_StringList_free(m_mediaPaths); } void FOX16_HtmlLabel::setText(const FXString& text) { m_haveDefaultDims=false; m_text=text; updateHtml(); flags|=FLAG_DIRTY; layout(); recalc(); update(); } void FOX16_HtmlLabel::addMediaPath(const char *s) { assert(s); GWEN_StringList_AppendString(m_mediaPaths, s, 0, 1); } void FOX16_HtmlLabel::setIcon(FXIcon *ic) { m_icon=ic; flags|=FLAG_DIRTY; layout(); recalc(); update(); } void FOX16_HtmlLabel::calcDefaultDims() { #if 0 int w; if (options & FLAGS_NO_WORDWRAP) w=-1; else if (options & FLAGS_USE_FULL_WIDTH) w=width; else w=m_maxDefaultWidth; m_htmlCtx->layout(w-border*2, -1); m_defaultWidth=m_htmlCtx->getWidth(); m_defaultHeight=m_htmlCtx->getHeight(); m_haveDefaultDims=true; #else int w; if (options & FLAGS_NO_WORDWRAP) w=-1; else if (options & FLAGS_USE_FULL_WIDTH) w=width; else if (m_maxDefaultWidth!=-1) w=m_maxDefaultWidth; else { int wTmp=1024; int mask=1024; int i; for (i=0; i<10; i++) { double ar, nw, nh; m_htmlCtx->layout(wTmp-border*2, -1); nw=(double) (m_htmlCtx->getWidth()); nh=(double)(m_htmlCtx->getHeight()); ar=nw/nh; if (ar>=3.5 && ar<4.0) break; if (ar>4.0) /* w/h too high, so we need to reduce the width */ wTmp&=~mask; mask>>=1; wTmp|=mask; } w=wTmp; } /* TODO: handle icon size correctly */ m_htmlCtx->layout(w-border*2, -1); m_defaultWidth=m_htmlCtx->getWidth(); m_defaultHeight=m_htmlCtx->getHeight(); m_haveDefaultDims=true; //DBG_ERROR(0, "Labelsize: %d / %d", m_defaultWidth, m_defaultHeight); #endif } FXint FOX16_HtmlLabel::getDefaultWidth() { int w; if (m_htmlCtx==NULL) updateHtml(); if (!m_haveDefaultDims) calcDefaultDims(); w=m_defaultWidth; if (m_icon) w+=m_icon->getWidth()+ICON_SPACE; //DBG_ERROR(0, "GetDefaultWidth[%s]: Width= %d", m_text.text(), w); return w; } FXint FOX16_HtmlLabel::getDefaultHeight() { int h; if (m_htmlCtx==NULL) updateHtml(); if (!m_haveDefaultDims) calcDefaultDims(); h=m_defaultHeight; if (m_icon) { int ih; ih=m_icon->getHeight(); if (ih>h) h=ih; } //DBG_ERROR(0, "GetDefaultHeight[%s]: Height= %d", m_text.text(), h); return h; } long FOX16_HtmlLabel::onPaint(FXObject*, FXSelector, void *ptr) { FXEvent *ev=(FXEvent*)ptr; FXDCWindow dc(this, ev); dc.setForeground(backColor); dc.fillRectangle(border, border, width-(border*2), height-(border*2)); if (m_htmlCtx) { //DBG_ERROR(0, "Paint: Labelsize= %d / %d", m_htmlCtx->getWidth(), m_htmlCtx->getHeight()); if (m_icon) { int th; int ih; int ty=border; if(isEnabled()) dc.drawIcon(m_icon, border, border); else dc.drawIconSunken(m_icon, border, border); ih=m_icon->getHeight(); th=m_htmlCtx->getHeight(); if (ih>th) ty+=(ih-th)/2; m_htmlCtx->paint(&dc, border+ICON_SPACE+m_icon->getWidth(), ty); } else { m_htmlCtx->paint(&dc, border, border); } } else { DBG_ERROR(GWEN_LOGDOMAIN, "No HtmlContext"); } drawFrame(dc, 0, 0, width, height); return 1; } void FOX16_HtmlLabel::create() { FXFrame::create(); if (m_icon) m_icon->create(); updateHtml(); recalc(); } void FOX16_HtmlLabel::layout() { #if 0 int w; m_haveDefaultDims=false; if (options & FLAGS_NO_WORDWRAP) w=-1; else if (options & FLAGS_USE_FULL_WIDTH) { w=width; if (m_icon) w-=(m_icon->getWidth()+ICON_SPACE); } else w=m_maxDefaultWidth; if (m_htmlCtx==NULL) updateHtml(); m_htmlCtx->layout(w-border*2, height-border*2); update(); flags&=~FLAG_DIRTY; #else int w; //DBG_ERROR(0, "Layout[%s]: Width=%d, height=%d", m_text.text(), width, height); if (m_htmlCtx==NULL) updateHtml(); if (!m_haveDefaultDims) calcDefaultDims(); if (options & FLAGS_NO_WORDWRAP) w=-1; else if (options & FLAGS_USE_FULL_WIDTH) { w=width; if (m_icon) w-=(m_icon->getWidth()+ICON_SPACE); } else w=m_defaultWidth; m_htmlCtx->layout(w-border*2, height-border*2); update(); flags&=~FLAG_DIRTY; #endif } void FOX16_HtmlLabel::updateHtml() { GWEN_STRINGLISTENTRY *se; if (m_htmlCtx) delete m_htmlCtx; m_haveDefaultDims=false; m_htmlCtx=new FOX16_HtmlCtx(0); /* copy media paths to context */ se=GWEN_StringList_FirstEntry(m_mediaPaths); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); assert(s); m_htmlCtx->addMediaPath(s); se=GWEN_StringListEntry_Next(se); } m_htmlCtx->setBackgroundColor(backColor); m_htmlCtx->setForegroundColor(fxcolorfromname("black")); m_htmlCtx->setText(m_text.text()); flags|=FLAG_DIRTY; } gwenhywfar-4.15.2beta/gui/fox16/theme.cpp0000644000175000017500000006331712416477066015125 00000000000000/* These widgets have initially been created by Martin Oberzalek who gave them into * the public domain via an email to the mailing list foxgui-users on 17th of June, 2010 * ("here the source. Free to use for alll."). * I (Martin Preuss) adapted them to be usable with FOX 1.6 and also added some widgets of * my own (for now: ThemeHeaderItem). */ #ifdef HAVE_CONFIG_H # include #endif #include "theme.h" #define ICON_SPACING 4 // Draw rectangle static void drawRectangle(FXDC& dc,FXColor lower,FXColor upper,FXint x,FXint y,FXint w,FXint h) { register FXint rr,gg,bb,dr,dg,db,r1,g1,b1,r2,g2,b2,yl,yh,yy,dy,n,t; const FXint MAXSTEPS=128; if(0n) n=t; if((t=FXABS(db))>n) n=t; n++; if(n>h) n=h; if(n>MAXSTEPS) n=MAXSTEPS; rr=(r1<<16)+32767; gg=(g1<<16)+32767; bb=(b1<<16)+32767; yy=32767; dr=(dr<<16)/n; dg=(dg<<16)/n; db=(db<<16)/n; dy=(h<<16)/n; do { yl=yy>>16; yy+=dy; yh=yy>>16; dc.setForeground(FXRGB(rr>>16,gg>>16,bb>>16)); dc.fillRectangle(x,y+yl,w,yh-yl); rr+=dr; gg+=dg; bb+=db; } while(yhgetWidth(); ih=icon->getHeight(); } just_x(tx,ix,tw,iw); just_y(ty,iy,th,ih); // Shift a bit when pressed if (state && (options&(FRAME_RAISED|FRAME_SUNKEN))) { ++tx; ++ty; ++ix; ++iy; } // Draw enabled state if(isEnabled()) { if(icon) { dc.drawIcon(icon,ix,iy); } if(!label.empty()) { dc.setFont(font); dc.setForeground(textColor); drawLabel(dc,label,hotoff,tx,ty,tw,th); } if(hasFocus()) { dc.drawFocusRectangle(border+1,border+1,width-2*border-2,height-2*border-2); } } // Draw grayed-out state else { if (icon) { dc.drawIconSunken(icon,ix,iy); } if(!label.empty()) { dc.setFont(font); dc.setForeground(hiliteColor); drawLabel(dc,label,hotoff,tx+1,ty+1,tw,th); dc.setForeground(shadowColor); drawLabel(dc,label,hotoff,tx,ty,tw,th); } } return 1; } FXDEFMAP(ThemeTextField) ThemeTextFieldMap[]= { FXMAPFUNC( SEL_PAINT, 0, ThemeTextField::onPaint) }; FXIMPLEMENT( ThemeTextField, FXTextField, ThemeTextFieldMap, ARRAYNUMBER(ThemeTextFieldMap) ); ThemeTextField::ThemeTextField(FXComposite* p,FXint ncols,FXObject* tgt,FXSelector sel, FXuint opts,FXint x,FXint y,FXint w,FXint h, FXint pl,FXint pr,FXint pt,FXint pb) : FXTextField( p, ncols, tgt, sel, opts, x, y, w, h, pl, pr, pt, pb ) { } static void drawFrame(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h) { if(0setBaseColor( ColorThemes[0].base ); app->setBorderColor( ColorThemes[0].border ); app->setBackColor( ColorThemes[0].back ); app->setForeColor( ColorThemes[0].fore ); app->setSelforeColor( ColorThemes[0].selfore ); app->setSelbackColor( ColorThemes[0].selback ); app->setTipforeColor( ColorThemes[0].tipfore ); app->setTipbackColor( ColorThemes[0].tipback ); app->setSelMenuTextColor( ColorThemes[0].menufore ); app->setSelMenuBackColor( ColorThemes[0].menuback ); // app->setHiliteColor(FXRGB(123,158,189)); } FXDEFMAP(ThemeComboBox) ThemeComboBoxMap[]= { FXMAPFUNC( SEL_PAINT, 0, ThemeComboBox::onPaint) }; FXIMPLEMENT( ThemeComboBox, FXComboBox, ThemeComboBoxMap, ARRAYNUMBER(ThemeComboBoxMap) ); ThemeComboBox::ThemeComboBox(FXComposite *p,FXint cols,FXObject* tgt,FXSelector sel,FXuint opts, FXint x,FXint y,FXint w,FXint h, FXint pl,FXint pr,FXint pt,FXint pb) : FXComboBox(p,cols, tgt, sel, opts,x,y,w,h, pl,pr,pt,pb) { delete button; button=new ThemeMenuButton(this,FXString::null, NULL, pane, FRAME_RAISED|MENUBUTTON_DOWN|MENUBUTTON_ATTACH_RIGHT, 0,0,0,0, 0,0,0,0); button->setXOffset(border); button->setYOffset(border); } long ThemeComboBox::onPaint(FXObject*,FXSelector,void* ptr) { FXEvent *ev=(FXEvent*)ptr; FXDCWindow dc(this,ev); dc.setForeground(backColor); dc.fillRectangle(ev->rect.x,ev->rect.y,ev->rect.w,ev->rect.h); drawFrame(dc,0,0,width,height); return 1; } FXDEFMAP(ThemeLabel) ThemeLabelMap[]= { FXMAPFUNC( SEL_PAINT, 0, ThemeLabel::onPaint ) }; FXIMPLEMENT( ThemeLabel, FXLabel, ThemeLabelMap, ARRAYNUMBER( ThemeLabelMap )); ThemeLabel::ThemeLabel(FXComposite* p,const FXString& text,FXIcon* ic,FXuint opts, FXint x,FXint y,FXint w,FXint h,FXint pl,FXint pr,FXint pt,FXint pb) : FXLabel( p, text, ic, opts, x, y, w, h, pl, pr, pt, pb ) { } // Handle repaint long ThemeLabel::onPaint(FXObject*,FXSelector,void* ptr) { FXEvent *ev=(FXEvent*)ptr; FXDCWindow dc(this,ev); FXint tw=0,th=0,iw=0,ih=0,tx,ty,ix,iy; dc.setForeground(backColor); dc.fillRectangle(0,0,width,height); if (!label.empty()) { tw=labelWidth(label); th=labelHeight(label); } if (icon) { iw=icon->getWidth(); ih=icon->getHeight(); } just_x(tx,ix,tw,iw); just_y(ty,iy,th,ih); if(icon) { if(isEnabled()) dc.drawIcon(icon,ix,iy); else dc.drawIconSunken(icon,ix,iy); } if (!label.empty()) { dc.setFont(font); if(isEnabled()) { dc.setForeground(textColor); drawLabel(dc,label,hotoff,tx,ty,tw,th); } else { dc.setForeground(hiliteColor); drawLabel(dc,label,hotoff,tx+1,ty+1,tw,th); dc.setForeground(shadowColor); drawLabel(dc,label,hotoff,tx,ty,tw,th); } } if (options & (FRAME_THICK|FRAME_RAISED|FRAME_SUNKEN)) { if( options & (FRAME_SUNKEN) ) drawSunkenFrame(dc,0,0,width,height); else if( options & (FRAME_RAISED) ) drawHighlightFrame(dc,0,0,width,height); else drawFrame(dc,0,0,width,height); } return 1; } FXDEFMAP(ThemeTabItem) ThemeTabItemMap[]= { // FXMAPFUNC( SEL_PAINT, 0, ThemeTabItem::onPaint ) }; FXIMPLEMENT( ThemeTabItem, FXTabItem, ThemeTabItemMap, ARRAYNUMBER( ThemeTabItemMap )); ThemeTabItem::ThemeTabItem(FXTabBar* p,const FXString& text,FXIcon* ic,FXuint opts, FXint x,FXint y,FXint w,FXint h,FXint pl,FXint pr,FXint pt,FXint pb) : FXTabItem(p,text,ic,opts,x,y,w,h,pl,pr,pt,pb) { shadowColor = FXRGB(123,158,189); borderColor = FXRGB(123,158,189); hiliteColor = FXRGB(123,158,189); } ThemeVerticalFrame::ThemeVerticalFrame(FXComposite* p,FXuint opts,FXint x,FXint y,FXint w,FXint h, FXint pl,FXint pr,FXint pt,FXint pb,FXint hs,FXint vs) : FXVerticalFrame( p, opts, x, y, w, h, pl, pr, pt, pb, hs, vs ) { setHiliteColor( FXRGB(123,158,189) ); } ThemeHorizontalFrame::ThemeHorizontalFrame(FXComposite* p,FXuint opts,FXint x,FXint y,FXint w,FXint h, FXint pl,FXint pr,FXint pt,FXint pb,FXint hs,FXint vs) : FXHorizontalFrame( p, opts, x, y, w, h, pl, pr, pt, pb, hs, vs ) { setHiliteColor( FXRGB(123,158,189) ); } #define MENUBUTTONARROW_WIDTH 13 #define MENUBUTTONARROW_HEIGHT 5 FXDEFMAP(ThemeMenuButton) ThemeMenuButtonMap[]= { FXMAPFUNC( SEL_PAINT, 0, ThemeMenuButton::onPaint) }; FXIMPLEMENT( ThemeMenuButton, FXMenuButton, ThemeMenuButtonMap, ARRAYNUMBER(ThemeMenuButtonMap) ); ThemeMenuButton::ThemeMenuButton(FXComposite* p,const FXString& text, FXIcon* ic,FXPopup* pup,FXuint opts, FXint x,FXint y,FXint w,FXint h, FXint pl,FXint pr,FXint pt,FXint pb ) : FXMenuButton( p, text, ic, pup, opts, x, y, w, h, pl, pr, pt, pb) { } // Handle repaint long ThemeMenuButton::onPaint(FXObject*,FXSelector,void* ptr) { FXint tw=0,th=0,iw=0,ih=0,tx,ty,ix,iy; FXEvent *ev=(FXEvent*)ptr; FXPoint points[6]; FXDCWindow dc(this,ev); /* FXColor top = FXRGB(0xfe,0xfd,0xfd); FXColor bottom = FXRGB(0xdd,0xd7,0xce); FXColor shade = FXRGB(0xdc,0xd9,0xd4); */ FXColor top = FXRGB(0xde,0xe7,0xff); FXColor bottom = FXRGB(0xbd,0xcf,0xff); FXColor shade = FXRGB(0xbd,0xcb,0xf7); FXColor buttoncolor = FXRGB(0x4a,0x61,0x84); // FXColor bordercolor = FXRGB(123,158,189); FXColor bordercolor = shade; FXPoint basebackground[4]= { FXPoint(0,0),FXPoint(width-1,0),FXPoint(0,height-1),FXPoint(width-1,height-1) }; FXPoint bordershade[16]= { FXPoint(0,1),FXPoint(1,0),FXPoint(1,2),FXPoint(2,1), FXPoint(width-2,0),FXPoint(width-1,1),FXPoint(width-3,1),FXPoint(width-2,2), FXPoint(0,height-2),FXPoint(1,height-1),FXPoint(1,height-3),FXPoint(2,height-2), FXPoint(width-1,height-2),FXPoint(width-2,height-1),FXPoint(width-2,height-3),FXPoint(width-3,height-2) }; FXPoint bordercorners[4]= { FXPoint(1,1),FXPoint(1,height-2),FXPoint(width-2,1),FXPoint(width-2,height-2) }; // Got a border at all? if (options&(FRAME_RAISED|FRAME_SUNKEN)) { // Toolbar style if (options&MENUBUTTON_TOOLBAR) { // Enabled and cursor inside, and not popped up if (isEnabled() && underCursor() && !state) { dc.setForeground(backColor); dc.fillRectangle(border,border,width-border*2,height-border*2); if(options&FRAME_THICK) drawDoubleRaisedRectangle(dc,0,0,width,height); else drawRaisedRectangle(dc,0,0,width,height); } // Enabled and popped up else if (isEnabled() && state) { dc.setForeground(hiliteColor); dc.fillRectangle(border,border,width-border*2,height-border*2); if(options&FRAME_THICK) drawDoubleSunkenRectangle(dc,0,0,width,height); else drawSunkenRectangle(dc,0,0,width,height); } // Disabled or unchecked or not under cursor else { dc.setForeground(backColor); dc.fillRectangle(0,0,width,height); } } // Normal style else { // Draw in up state if disabled or up if (!isEnabled() || !state) { /* * dc.setForeground(backColor); dc.fillRectangle(border,border,width-border*2,height-border*2); if(options&FRAME_THICK) drawDoubleRaisedRectangle(dc,0,0,width,height); else drawRaisedRectangle(dc,0,0,width,height); */ /// Outside Background dc.setForeground(baseColor); dc.drawPoints(basebackground,4); /// Border dc.setForeground(bordercolor); dc.drawRectangle(2,0,width-5,0); dc.drawRectangle(2,height-1,width-5,height-1); dc.drawRectangle(0,2,0,height-5); dc.drawRectangle(width-1,2,0,height-5); dc.drawPoints(bordercorners,4); dc.setForeground(shade); dc.drawPoints(bordershade,16); /// Gradient drawRectangle(dc,top,bottom,2,1,width-4,height-2); dc.setForeground(top); dc.drawRectangle(1,3,0,height-7); dc.setForeground(bottom); dc.drawRectangle(width-2,3,0,height-7); } // Draw sunken if enabled and either checked or pressed else { dc.setForeground(baseColor); dc.drawPoints(basebackground,4); /// Border dc.setForeground(bordercolor); dc.drawRectangle(2,0,width-5,0); dc.drawRectangle(2,height-1,width-5,height-1); dc.drawRectangle(0,2,0,height-5); dc.drawRectangle(width-1,2,0,height-5); dc.drawPoints(bordercorners,4); dc.setForeground(shade); dc.drawPoints(bordershade,16); dc.setForeground(FXRGB(0xdc,0xd4,0xc9)); dc.fillRectangle(2,1,width-4,height-2); } } } // No borders else { if(isEnabled() && state) { dc.setForeground(hiliteColor); dc.fillRectangle(0,0,width,height); } else { dc.setForeground(backColor); dc.fillRectangle(0,0,width,height); } } // Position text & icon if (!label.empty()) { tw=labelWidth(label); th=labelHeight(label); } // Icon? if (icon) { iw=icon->getWidth(); ih=icon->getHeight(); } // Arrows? else if(!(options&MENUBUTTON_NOARROWS)) { if(options&MENUBUTTON_LEFT) { ih=MENUBUTTONARROW_WIDTH; iw=MENUBUTTONARROW_HEIGHT; } else { iw=MENUBUTTONARROW_WIDTH; ih=MENUBUTTONARROW_HEIGHT; } } // Keep some room for the arrow! just_x(tx,ix,tw,iw); just_y(ty,iy,th,ih); // Move a bit when pressed if (state) { ++tx; ++ty; ++ix; ++iy; } // Draw icon if (icon) { if (isEnabled()) dc.drawIcon(icon,ix,iy); else dc.drawIconSunken(icon,ix,iy); } // Draw arrows else if (!(options&MENUBUTTON_NOARROWS)) { // Right arrow if ((options&MENUBUTTON_RIGHT)==MENUBUTTON_RIGHT) { if (isEnabled()) dc.setForeground(buttoncolor); else dc.setForeground(shadowColor); points[0].x=ix; points[0].y=iy; points[1].x=ix; points[1].y=iy+MENUBUTTONARROW_WIDTH-1; points[2].x=ix+MENUBUTTONARROW_HEIGHT; points[2].y=(FXshort)(iy+(MENUBUTTONARROW_WIDTH>>1)); dc.fillPolygon(points,3); } // Left arrow else if (options&MENUBUTTON_LEFT) { if (isEnabled()) dc.setForeground(buttoncolor); else dc.setForeground(shadowColor); points[0].x=ix+MENUBUTTONARROW_HEIGHT; points[0].y=iy; points[1].x=ix+MENUBUTTONARROW_HEIGHT; points[1].y=iy+MENUBUTTONARROW_WIDTH-1; points[2].x=ix; points[2].y=(FXshort)(iy+(MENUBUTTONARROW_WIDTH>>1)); dc.fillPolygon(points,3); } // Up arrow else if (options&MENUBUTTON_UP) { if(isEnabled()) dc.setForeground(buttoncolor); else dc.setForeground(shadowColor); points[0].x=(FXshort)(ix+(MENUBUTTONARROW_WIDTH>>1)); points[0].y=iy-1; points[1].x=ix; points[1].y=iy+MENUBUTTONARROW_HEIGHT; points[2].x=ix+MENUBUTTONARROW_WIDTH; points[2].y=iy+MENUBUTTONARROW_HEIGHT; dc.fillPolygon(points,3); } // Down arrow else { if(isEnabled()) dc.setForeground(buttoncolor); else dc.setForeground(shadowColor); points[0].x=ix+1; points[0].y=iy; points[2].x=ix+MENUBUTTONARROW_WIDTH-1; points[2].y=iy; points[1].x=(FXshort)(ix+(MENUBUTTONARROW_WIDTH>>1)); points[1].y=iy+MENUBUTTONARROW_HEIGHT; points[3].x=ix+MENUBUTTONARROW_WIDTH-3; points[3].y=iy; points[4].x=(FXshort)(ix+(MENUBUTTONARROW_WIDTH>>1)); points[4].y=iy+MENUBUTTONARROW_HEIGHT-3; points[5].x=ix+3; points[5].y=iy; dc.fillConcavePolygon(points,6); } } // Draw text if (!label.empty()) { dc.setFont(font); if(isEnabled()) { dc.setForeground(textColor); drawLabel(dc,label,hotoff,tx,ty,tw,th); } else { dc.setForeground(hiliteColor); drawLabel(dc,label,hotoff,tx+1,ty+1,tw,th); dc.setForeground(shadowColor); drawLabel(dc,label,hotoff,tx,ty,tw,th); } } // Draw focus if (hasFocus()) { if (isEnabled()) { dc.drawFocusRectangle(border+1,border+1,width-2*border-2,height-2*border-2); } } return 1; } // Get default width FXint ThemeMenuButton::getDefaultWidth() { FXint tw=0,iw=0,s=0,w,pw; if (!label.empty()) { tw=labelWidth(label); s=4; } if (!(options&MENUBUTTON_NOARROWS)) { if (options&MENUBUTTON_LEFT) iw=MENUBUTTONARROW_HEIGHT; else iw=MENUBUTTONARROW_WIDTH; } if(icon) iw=icon->getWidth(); if (!(options&(ICON_AFTER_TEXT|ICON_BEFORE_TEXT))) w=FXMAX(tw,iw); else w=tw+iw+s; w=padleft+padright+(border<<1)+w; if (!(options&MENUBUTTON_LEFT) && (options&MENUBUTTON_ATTACH_RIGHT) && (options&MENUBUTTON_ATTACH_CENTER)) { if (pane) { pw=pane->getDefaultWidth(); if(pw>w) w=pw; } } return w; } #if 0 FXDEFMAP(ThemeHeaderItem) ThemeHeaderItemMap[]= { FXMAPFUNC(SEL_PAINT, 0, ThemeHeaderItem::onPaint) }; FXIMPLEMENT(ThemeHeaderItem, FXHeaderItem, ThemeHeaderItemMap, ARRAYNUMBER(ThemeHeaderItemMap)); #endif ThemeHeaderItem::ThemeHeaderItem(const FXString& text, FXIcon* ic, FXint s, void* ptr) :FXHeaderItem(text, ic, s, ptr) { } void ThemeHeaderItem::draw(const FXHeader* header,FXDC& dc,FXint x,FXint y,FXint w,FXint h) { register FXint tx,ty,tw,th,ix,iy,iw,ih,s,ml,mr,mt,mb,beg,end,t,xx,yy,bb,aa,ax,ay; register FXFont *font=header->getFont(); FXColor top = FXRGB(0xfe,0xfd,0xfd); FXColor bottom = FXRGB(0xdd,0xd7,0xce); FXColor shade = FXRGB(0xdc,0xd9,0xd4); // Get border width and padding bb=header->getBorderWidth(); ml=header->getPadLeft()+bb; mr=header->getPadRight()+bb; mt=header->getPadTop()+bb; mb=header->getPadBottom()+bb; dc.setForeground(shade); /// Gradient drawRectangle(dc,top, bottom, x+2, y+1, w-4, h-2); // Shrink by margins x+=ml; w-=ml+mr; y+=mt; h-=mt+mb; // Initial clip rectangle dc.setClipRectangle(x,y,w,h); dc.setForeground(header->getTextColor()); // Text width and height tw=th=iw=ih=beg=s=0; do { end=beg; while(endgetTextWidth(&label[beg],end-beg))>tw) tw=t; th+=font->getFontHeight(); beg=end+1; } while(endgetWidth(); ih=icon->getHeight(); } // Icon-text spacing if(iw && tw) s=ICON_SPACING; // Draw arrows if (state&(ARROW_UP|ARROW_DOWN)) { aa=(font->getFontHeight()-5)|1; ay=y+(h-aa)/2; ax=x+w-aa-2; if(state&ARROW_UP) { dc.setForeground(header->getHiliteColor()); dc.drawLine(ax+aa/2,ay,ax+aa-1,ay+aa); dc.drawLine(ax,ay+aa,ax+aa,ay+aa); dc.setForeground(header->getShadowColor()); dc.drawLine(ax+aa/2,ay,ax,ay+aa); } else { dc.setForeground(header->getHiliteColor()); dc.drawLine(ax+aa/2,ay+aa,ax+aa-1,ay); dc.setForeground(header->getShadowColor()); dc.drawLine(ax+aa/2,ay+aa,ax,ay); dc.drawLine(ax,ay,ax+aa,ay); } w-=aa+4; dc.setClipRectangle(x,y,w,h); } // Fix x coordinate if (state&LEFT) { if(state&BEFORE) { ix=x; tx=ix+iw+s; } else if (state&AFTER) { tx=x; ix=tx+tw+s; } else { ix=x; tx=x; } } else if(state&RIGHT) { if(state&BEFORE) { tx=x+w-tw; ix=tx-iw-s; } else if (state&AFTER) { ix=x+w-iw; tx=ix-tw-s; } else { ix=x+w-iw; tx=x+w-tw; } } else { if (state&BEFORE) { ix=x+(w-tw-iw-s)/2; tx=ix+iw+s; } else if (state&AFTER) { tx=x+(w-tw-iw-s)/2; ix=tx+tw+s; } else { ix=x+(w-iw)/2; tx=x+(w-tw)/2; } } // Fix y coordinate if(state&TOP) { if (state&ABOVE) { iy=y; ty=iy+ih; } else if (state&BELOW) { ty=y; iy=ty+th; } else { iy=y; ty=y; } } else if(state&BOTTOM) { if (state&ABOVE) { ty=y+h-th; iy=ty-ih; } else if (state&BELOW) { iy=y+h-ih; ty=iy-th; } else { iy=y+h-ih; ty=y+h-th; } } else { if (state&ABOVE) { iy=y+(h-th-ih)/2; ty=iy+ih; } else if (state&BELOW) { ty=y+(h-th-ih)/2; iy=ty+th; } else { iy=y+(h-ih)/2; ty=y+(h-th)/2; } } // Offset a bit when pressed if (state&PRESSED) { tx++; ty++; ix++; iy++; } // Paint icon if (icon) { dc.drawIcon(icon,ix,iy); } // Text color dc.setForeground(header->getTextColor()); // Draw text yy=ty+font->getFontAscent(); beg=0; do { end=beg; while(endgetTextWidth(&label[beg],end-beg); else xx=tx+(tw-font->getTextWidth(&label[beg],end-beg))/2; dc.drawText(xx,yy,&label[beg],end-beg); yy+=font->getFontHeight(); beg=end+1; } while(end #endif #include "fox16_gui_sortinglist_l.hpp" #include FXDEFMAP(FOX16_GuiSortingList) FOX16_GuiSortingListMap[]= { FXMAPFUNC(SEL_COMMAND, FXFoldingList::ID_HEADER_CHANGE, FOX16_GuiSortingList::onHeaderClicked) }; FXIMPLEMENT(FOX16_GuiSortingList, FXFoldingList, FOX16_GuiSortingListMap, ARRAYNUMBER(FOX16_GuiSortingListMap)) FOX16_GuiSortingList::FOX16_GuiSortingList(FXComposite *p, FXObject* tgt, FXSelector sel, FXuint opts, FXint x, FXint y, FXint w, FXint h) :FXFoldingList(p, tgt, sel, opts, x, y, w, h) { } FOX16_GuiSortingList::FOX16_GuiSortingList() :FXFoldingList() { } FOX16_GuiSortingList::~FOX16_GuiSortingList() { } FXFoldingItem *FOX16_GuiSortingList::getItem(int index) { FXFoldingItem *ti; int i=index; ti=getFirstItem(); while(ti && i) { ti=ti->getNext(); i--; } return ti; } FXbool FOX16_GuiSortingList::getHeaderArrowDir(int c) const { return header->getArrowDir(c); } void FOX16_GuiSortingList::setHeaderArrowDir(int c, FXbool b) { header->setArrowDir(c, b); } long FOX16_GuiSortingList::onHeaderClicked(FXObject*, FXSelector, void* ptr) { FXint idx=(FXint)(FXival)ptr; FXbool b; int i; b=header->getArrowDir(idx); for (i=0; igetNumItems(); i++) header->setArrowDir(i, MAYBE); if (b==TRUE) { /* was up, becomes down */ header->setArrowDir(idx, FALSE); sortByColumn(idx, false); } else if (b==FALSE) { /* was down, becomes MAYBE */ header->setArrowDir(idx, MAYBE); } else { /* was MAYBE, becomes up */ header->setArrowDir(idx, TRUE); sortByColumn(idx, true); } return 1; } void FOX16_GuiSortingList::sortByColumn(int c, bool up) { switch(c) { case 0: if (up) setSortFunc(sortFuncCol0a); else setSortFunc(sortFuncCol0d); break; case 1: if (up) setSortFunc(sortFuncCol1a); else setSortFunc(sortFuncCol1d); break; case 2: if (up) setSortFunc(sortFuncCol2a); else setSortFunc(sortFuncCol2d); break; case 3: if (up) setSortFunc(sortFuncCol3a); else setSortFunc(sortFuncCol3d); break; case 4: if (up) setSortFunc(sortFuncCol4a); else setSortFunc(sortFuncCol4d); break; case 5: if (up) setSortFunc(sortFuncCol5a); else setSortFunc(sortFuncCol5d); break; case 6: if (up) setSortFunc(sortFuncCol6a); else setSortFunc(sortFuncCol6d); break; case 7: if (up) setSortFunc(sortFuncCol7a); else setSortFunc(sortFuncCol7d); break; case 8: if (up) setSortFunc(sortFuncCol8a); else setSortFunc(sortFuncCol8d); break; case 9: if (up) setSortFunc(sortFuncCol9a); else setSortFunc(sortFuncCol9d); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Column %d is out of range (no more functions)", c); return; } sortItems(); } FXint FOX16_GuiSortingList::sortFuncCol0a(const FXFoldingItem *a, const FXFoldingItem *b) { return compareSectionCase(a->getText().text(),b->getText().text(), 0); } FXint FOX16_GuiSortingList::sortFuncCol0d(const FXFoldingItem *a, const FXFoldingItem *b) { return compareSectionCase(b->getText().text(),a->getText().text(), 0); } FXint FOX16_GuiSortingList::sortFuncCol1a(const FXFoldingItem *a, const FXFoldingItem *b) { return compareSectionCase(a->getText().text(),b->getText().text(), 1); } FXint FOX16_GuiSortingList::sortFuncCol1d(const FXFoldingItem *a, const FXFoldingItem *b) { return compareSectionCase(b->getText().text(),a->getText().text(), 1); } FXint FOX16_GuiSortingList::sortFuncCol2a(const FXFoldingItem *a, const FXFoldingItem *b) { return compareSectionCase(a->getText().text(),b->getText().text(), 2); } FXint FOX16_GuiSortingList::sortFuncCol2d(const FXFoldingItem *a, const FXFoldingItem *b) { return compareSectionCase(b->getText().text(),a->getText().text(), 2); } FXint FOX16_GuiSortingList::sortFuncCol3a(const FXFoldingItem *a, const FXFoldingItem *b) { return compareSectionCase(a->getText().text(),b->getText().text(), 3); } FXint FOX16_GuiSortingList::sortFuncCol3d(const FXFoldingItem *a, const FXFoldingItem *b) { return compareSectionCase(b->getText().text(),a->getText().text(), 3); } FXint FOX16_GuiSortingList::sortFuncCol4a(const FXFoldingItem *a, const FXFoldingItem *b) { return compareSectionCase(a->getText().text(),b->getText().text(), 4); } FXint FOX16_GuiSortingList::sortFuncCol4d(const FXFoldingItem *a, const FXFoldingItem *b) { return compareSectionCase(b->getText().text(),a->getText().text(), 4); } FXint FOX16_GuiSortingList::sortFuncCol5a(const FXFoldingItem *a, const FXFoldingItem *b) { return compareSectionCase(a->getText().text(),b->getText().text(), 5); } FXint FOX16_GuiSortingList::sortFuncCol5d(const FXFoldingItem *a, const FXFoldingItem *b) { return compareSectionCase(b->getText().text(),a->getText().text(), 5); } FXint FOX16_GuiSortingList::sortFuncCol6a(const FXFoldingItem *a, const FXFoldingItem *b) { return compareSectionCase(a->getText().text(),b->getText().text(), 6); } FXint FOX16_GuiSortingList::sortFuncCol6d(const FXFoldingItem *a, const FXFoldingItem *b) { return compareSectionCase(b->getText().text(),a->getText().text(), 6); } FXint FOX16_GuiSortingList::sortFuncCol7a(const FXFoldingItem *a, const FXFoldingItem *b) { return compareSectionCase(a->getText().text(),b->getText().text(), 7); } FXint FOX16_GuiSortingList::sortFuncCol7d(const FXFoldingItem *a, const FXFoldingItem *b) { return compareSectionCase(b->getText().text(),a->getText().text(), 7); } FXint FOX16_GuiSortingList::sortFuncCol8a(const FXFoldingItem *a, const FXFoldingItem *b) { return compareSectionCase(a->getText().text(),b->getText().text(), 8); } FXint FOX16_GuiSortingList::sortFuncCol8d(const FXFoldingItem *a, const FXFoldingItem *b) { return compareSectionCase(b->getText().text(),a->getText().text(), 8); } FXint FOX16_GuiSortingList::sortFuncCol9a(const FXFoldingItem *a, const FXFoldingItem *b) { return compareSectionCase(a->getText().text(),b->getText().text(), 9); } FXint FOX16_GuiSortingList::sortFuncCol9d(const FXFoldingItem *a, const FXFoldingItem *b) { return compareSectionCase(b->getText().text(),a->getText().text(), 9); } gwenhywfar-4.15.2beta/gui/fox16/fox16_htmlctx.cpp0000644000175000017500000003505012416477066016522 00000000000000/*************************************************************************** begin : Mon Feb 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "fox16_htmlctx_p.hpp" #include "fox16_gui.hpp" #include #include #include #include #include #include #include #include #include #include #include GWEN_INHERIT(GWEN_XML_CONTEXT, FOX16_HtmlCtx) GWEN_INHERIT(HTML_FONT, FXFont) GWEN_INHERIT(HTML_IMAGE, FXImage) int FOX16_HtmlCtxLinker::GetTextWidth(GWEN_XML_CONTEXT *ctx, HTML_FONT *fnt, const char *s) { FOX16_HtmlCtx *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, FOX16_HtmlCtx, ctx); assert(xctx); return xctx->getTextWidth(fnt, s); } int FOX16_HtmlCtxLinker::GetTextHeight(GWEN_XML_CONTEXT *ctx, HTML_FONT *fnt, const char *s) { FOX16_HtmlCtx *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, FOX16_HtmlCtx, ctx); assert(xctx); return xctx->getTextHeight(fnt, s); } uint32_t FOX16_HtmlCtxLinker::GetColorFromName(const GWEN_XML_CONTEXT *ctx, const char *name) { FOX16_HtmlCtx *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, FOX16_HtmlCtx, ctx); assert(xctx); return xctx->getColorFromName(name); } HTML_FONT *FOX16_HtmlCtxLinker::GetFont(GWEN_XML_CONTEXT *ctx, const char *fontName, int fontSize, uint32_t fontFlags) { FOX16_HtmlCtx *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, FOX16_HtmlCtx, ctx); assert(xctx); return xctx->getFont(fontName, fontSize, fontFlags); } HTML_IMAGE *FOX16_HtmlCtxLinker::GetImage(GWEN_XML_CONTEXT *ctx, const char *imageName) { FOX16_HtmlCtx *xctx; assert(ctx); xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, FOX16_HtmlCtx, ctx); assert(xctx); return xctx->getImage(imageName); } void FOX16_HtmlCtxLinker::freeData(void *bp, void *p) { FOX16_HtmlCtx *xctx; xctx=(FOX16_HtmlCtx*) p; if (xctx->_context) xctx->_context=NULL; delete xctx; } void FOX16_HtmlCtxLinker::freeFontData(void *bp, void *p) { FXFont *xfnt; xfnt=(FXFont*) p; delete xfnt; } void FOX16_HtmlCtxLinker::freeImageData(void *bp, void *p) { FXImage *ximg; ximg=(FXImage*) p; delete ximg; } FOX16_HtmlCtx::FOX16_HtmlCtx(uint32_t flags) :_context(NULL) ,_font(NULL) ,_fgColor(0) ,_bgColor(0) ,m_iconSource(NULL) { HTML_PROPS *pr; HTML_FONT *fnt; _context=HtmlCtx_new(flags); GWEN_INHERIT_SETDATA(GWEN_XML_CONTEXT, FOX16_HtmlCtx, _context, this, FOX16_HtmlCtxLinker::freeData); _font=FXApp::instance()->getNormalFont(); HtmlCtx_SetGetTextWidthFn(_context, FOX16_HtmlCtxLinker::GetTextWidth); HtmlCtx_SetGetTextHeightFn(_context, FOX16_HtmlCtxLinker::GetTextHeight); HtmlCtx_SetGetColorFromNameFn(_context, FOX16_HtmlCtxLinker::GetColorFromName); HtmlCtx_SetGetFontFn(_context, FOX16_HtmlCtxLinker::GetFont); HtmlCtx_SetGetImageFn(_context, FOX16_HtmlCtxLinker::GetImage); pr=HtmlProps_new(); fnt=HtmlCtx_GetFont(_context, _font->getName().text(), _font->getSize()/10, 0); HtmlProps_SetFont(pr, fnt); HtmlCtx_SetStandardProps(_context, pr); HtmlProps_free(pr); } FOX16_HtmlCtx::~FOX16_HtmlCtx() { if (_context) { GWEN_INHERIT_UNLINK(GWEN_XML_CONTEXT, FOX16_HtmlCtx, _context); GWEN_XmlCtx_free(_context); } } FXFont *FOX16_HtmlCtx::_getFoxFont(HTML_FONT *fnt) { FXFont *xfnt; if (GWEN_INHERIT_ISOFTYPE(HTML_FONT, FXFont, fnt)) { xfnt=GWEN_INHERIT_GETDATA(HTML_FONT, FXFont, fnt); return xfnt; } else { FXuint size; FXuint weight; FXuint slant; FXuint encoding; FXString face; uint32_t flags; if (HtmlFont_GetFontName(fnt)) face=HtmlFont_GetFontName(fnt); else face=_font->getName(); size=HtmlFont_GetFontSize(fnt); weight=FXFont::Normal; slant=_font->getSlant(); encoding=_font->getEncoding(); flags=HtmlFont_GetFontFlags(fnt); if (flags & HTML_FONT_FLAGS_STRONG) weight=FXFont::Bold; if (flags & HTML_FONT_FLAGS_ITALIC) slant=FXFont::Italic; DBG_DEBUG(GWEN_LOGDOMAIN, "Creating font [%s], size=%d, weight=%d, slant=%d, encoding=%d", face.text(), size, weight, slant, encoding); xfnt=new FXFont(FXApp::instance(), face, size, weight, slant, encoding); if (xfnt==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not create font [%s], size=%d, weight=%d, slant=%d, encoding=%d", face.text(), size, weight, slant, encoding); return NULL; } xfnt->create(); GWEN_INHERIT_SETDATA(HTML_FONT, FXFont, fnt, xfnt, FOX16_HtmlCtxLinker::freeFontData); return xfnt; } } int FOX16_HtmlCtx::getTextWidth(HTML_FONT *fnt, const char *s) { if (s==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "NULLPOINTER, returning size 0"); return 0; } else { FXFont *xfnt; FXString str; str=FXString(s); xfnt=_getFoxFont(fnt); if (xfnt==NULL) return _font->getTextWidth(str); else return xfnt->getTextWidth(str); } } int FOX16_HtmlCtx::getTextHeight(HTML_FONT *fnt, const char *s) { if (s==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "NULLPOINTER, returning size 0"); return 0; } else { FXFont *xfnt; FXString str; str=FXString(s); xfnt=_getFoxFont(fnt); if (xfnt==NULL) return _font->getTextHeight(str); else return xfnt->getTextHeight(str); } } uint32_t FOX16_HtmlCtx::getColorFromName(const char *name) { return fxcolorfromname(name); } int FOX16_HtmlCtx::layout(int width, int height) { return HtmlCtx_Layout(_context, width, height); } void FOX16_HtmlCtx::setText(const char *s) { int rv; rv=GWEN_XMLContext_ReadFromString(_context, s); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); } } void FOX16_HtmlCtx::addMediaPath(const char *s) { HtmlCtx_AddMediaPath(_context, s); } static void dumpObject(HTML_OBJECT *o, FILE *f, int indent) { HTML_OBJECT *c; int i; const char *s; HTML_PROPS *pr; HTML_FONT *fnt; s=HtmlObject_GetText(o); for (i=0; isetFont(xfnt); ascent=xfnt->getFontAscent(); } /* select foreground color */ col=HtmlProps_GetForegroundColor(pr); if (col==HTML_PROPS_NOCOLOR) dc->setForeground(_fgColor); else dc->setForeground(col); /* select background color */ col=HtmlProps_GetBackgroundColor(pr); if (col==HTML_PROPS_NOCOLOR) dc->setBackground(_bgColor); else dc->setBackground(col); dc->drawText(xOffset, yOffset+ascent, HtmlObject_GetText(o)); break; } case HtmlObjectType_Image: { HTML_IMAGE *img; img=HtmlObject_Image_GetImage(o); if (img) { FXImage *ximg; ximg=GWEN_INHERIT_GETDATA(HTML_IMAGE, FXImage, img); if (ximg) { HTML_PROPS *pr; uint32_t col; pr=HtmlObject_GetProperties(o); /* select background color */ col=HtmlProps_GetBackgroundColor(pr); if (col==HTML_PROPS_NOCOLOR) { dc->setBackground(_bgColor); dc->setForeground(_bgColor); } else { dc->setBackground(col); dc->setForeground(col); } dc->fillRectangle(xOffset, yOffset, ximg->getWidth(), ximg->getHeight()); dc->drawImage(ximg, xOffset, yOffset); } } break; } default: break; } c=HtmlObject_Tree_GetFirstChild(o); while(c) { _paint(dc, c, xOffset, yOffset); c=HtmlObject_Tree_GetNext(c); } } void FOX16_HtmlCtx::_paintAt(FXDC *dc, HTML_OBJECT *o, int xOffset, int yOffset, int xText, int yText, int w, int h) { HTML_OBJECT *c; int x; int y; int printX; int printY; int objectW; int objectH; x=xText+HtmlObject_GetX(o); y=yText+HtmlObject_GetY(o); objectW=HtmlObject_GetWidth(o); objectH=HtmlObject_GetHeight(o); printX=x-xOffset; printY=y-yOffset; if (printX=0 && printY=0) { switch(HtmlObject_GetObjectType(o)) { #if 0 case HtmlObjectType_Grid: dc->setForeground(FXRGB(255,0,0)); dc->fillRectangle(printX, printY, HtmlObject_GetWidth(o), HtmlObject_GetHeight(o)); #endif case HtmlObjectType_Word: { HTML_PROPS *pr; HTML_FONT *fnt; FXFont *xfnt; int ascent=0; uint32_t col; pr=HtmlObject_GetProperties(o); /* select font */ fnt=HtmlProps_GetFont(pr); xfnt=_getFoxFont(fnt); if (xfnt) { dc->setFont(xfnt); ascent=xfnt->getFontAscent(); } /* select foreground color */ col=HtmlProps_GetForegroundColor(pr); if (col==HTML_PROPS_NOCOLOR) dc->setForeground(_fgColor); else dc->setForeground(col); /* select background color */ col=HtmlProps_GetBackgroundColor(pr); if (col==HTML_PROPS_NOCOLOR) dc->setBackground(_bgColor); else dc->setBackground(col); dc->drawText(printX, printY+ascent, HtmlObject_GetText(o)); break; } case HtmlObjectType_Image: { HTML_IMAGE *img; img=HtmlObject_Image_GetImage(o); if (img) { FXImage *ximg; ximg=GWEN_INHERIT_GETDATA(HTML_IMAGE, FXImage, img); if (ximg) { HTML_PROPS *pr; uint32_t col; pr=HtmlObject_GetProperties(o); /* select background color */ col=HtmlProps_GetBackgroundColor(pr); if (col==HTML_PROPS_NOCOLOR) { dc->setBackground(_bgColor); dc->setForeground(_bgColor); } else { dc->setBackground(col); dc->setForeground(col); } dc->fillRectangle(printX, printY, ximg->getWidth(), ximg->getHeight()); dc->drawImage(ximg, printX, printY); } } break; } default: break; } c=HtmlObject_Tree_GetFirstChild(o); while(c) { _paintAt(dc, c, xOffset, yOffset, x, y, w, h); c=HtmlObject_Tree_GetNext(c); } } } void FOX16_HtmlCtx::paint(FXDC *dc, int xOffset, int yOffset) { HTML_OBJECT *o; o=HtmlCtx_GetRootObject(_context); if (o) _paint(dc, o, xOffset, yOffset); } void FOX16_HtmlCtx::paintAt(FXDC *dc, int xOffset, int yOffset, int xText, int yText, int w, int h) { HTML_OBJECT *o; o=HtmlCtx_GetRootObject(_context); if (o) _paintAt(dc, o, xOffset, yOffset, xText, yText, w, h); } int FOX16_HtmlCtx::getWidth() { HTML_OBJECT *o; o=HtmlCtx_GetRootObject(_context); if (o) return HtmlObject_GetWidth(o); else return -1; } int FOX16_HtmlCtx::getHeight() { HTML_OBJECT *o; o=HtmlCtx_GetRootObject(_context); if (o) return HtmlObject_GetHeight(o); else return -1; } HTML_FONT *FOX16_HtmlCtx::getFont(const char *fontName, int fontSize, uint32_t fontFlags) { FOX16_Gui *gui; gui=FOX16_Gui::getFgGui(); assert(gui); return gui->getFont(fontName, fontSize, fontFlags); } HTML_IMAGE *FOX16_HtmlCtx::getImage(const char *fileName) { GWEN_STRINGLIST *sl; sl=HtmlCtx_GetMediaPaths(_context); if (sl) { GWEN_BUFFER *tbuf; int rv; FXImage *ximg; HTML_IMAGE *img; tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Directory_FindFileInPaths(sl, fileName, tbuf); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return NULL; } if (m_iconSource==NULL) m_iconSource=new FXIconSource(FXApp::instance()); ximg=m_iconSource->loadIconFile(GWEN_Buffer_GetStart(tbuf)); if (ximg==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not load icon [%s]", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return NULL; } ximg->create(); img=HtmlImage_new(); HtmlImage_SetImageName(img, GWEN_Buffer_GetStart(tbuf)); HtmlImage_SetWidth(img, ximg->getWidth()); HtmlImage_SetHeight(img, ximg->getHeight()); GWEN_INHERIT_SETDATA(HTML_IMAGE, FXImage, img, ximg, FOX16_HtmlCtxLinker::freeImageData); GWEN_Buffer_free(tbuf); return img; } else { DBG_ERROR(GWEN_LOGDOMAIN, "No media paths in dialog"); return NULL; } } void FOX16_HtmlCtx::setBackgroundColor(FXColor c) { _bgColor=c; } void FOX16_HtmlCtx::setForegroundColor(FXColor c) { _fgColor=c; } gwenhywfar-4.15.2beta/gui/fox16/fox16_htmlctx.hpp0000644000175000017500000000365312416477066016533 00000000000000/*************************************************************************** begin : Mon Feb 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef FOX16_HTMLCTX_HPP #define FOX16_HTMLCTX_HPP #include #include #include #include #include class FOX16GUI_API FOX16_HtmlCtx { friend class FOX16_HtmlCtxLinker; public: FOX16_HtmlCtx(uint32_t flags); ~FOX16_HtmlCtx(); void setText(const char *s); int getWidth(); int getHeight(); HTML_FONT *getFont(const char *fontName, int fontSize, uint32_t fontFlags); HTML_IMAGE *getImage(const char *imageName); void addMediaPath(const char *s); int layout(int width, int height); void dump(); void paint(FXDC *dc, int xOffset, int yOffset); void paintAt(FXDC *dc, int xOffset, int yOffset, int xText, int yText, int w, int h); void setBackgroundColor(FXColor c); void setForegroundColor(FXColor c); protected: GWEN_XML_CONTEXT *_context; FXFont *_font; FXColor _fgColor; FXColor _bgColor; FXIconSource *m_iconSource; FXFont *_getFoxFont(HTML_FONT *fnt); void _paint(FXDC *dc, HTML_OBJECT *o, int xOffset, int yOffset); void _paintAt(FXDC *dc, HTML_OBJECT *o, int xOffset, int yOffset, int xText, int yText, int w, int h); int getTextWidth(HTML_FONT *fnt, const char *s); int getTextHeight(HTML_FONT *fnt, const char *s); uint32_t getColorFromName(const char *name); }; #endif gwenhywfar-4.15.2beta/gui/fox16/fox16_htmlctx_p.hpp0000644000175000017500000000266012416477066017047 00000000000000/*************************************************************************** begin : Mon Feb 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef FOX16_HTMLCTX_P_HPP #define FOX16_HTMLCTX_P_HPP #include "fox16_htmlctx.hpp" class FOX16_HtmlCtxLinker { friend class FOX16_HtmlCtx; static int GetTextWidth(GWEN_XML_CONTEXT *ctx, HTML_FONT *fnt, const char *s); static int GetTextHeight(GWEN_XML_CONTEXT *ctx, HTML_FONT *fnt, const char *s); static uint32_t GetColorFromName(const GWEN_XML_CONTEXT *ctx, const char *name); static HTML_FONT *GetFont(GWEN_XML_CONTEXT *ctx, const char *fontName, int fontSize, uint32_t fontFlags); static HTML_IMAGE *GetImage(GWEN_XML_CONTEXT *ctx, const char *imageName); static GWENHYWFAR_CB void freeData(void *bp, void *p); static GWENHYWFAR_CB void freeFontData(void *bp, void *p); static GWENHYWFAR_CB void freeImageData(void *bp, void *p); }; #endif gwenhywfar-4.15.2beta/gui/fox16/gwengui-fox16.pc.in0000644000175000017500000000106612364015347016637 00000000000000# pkg-config configuration for gwengui_fox16 # For information about the syntax, see pkg-config(1) # General installation directories prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ pkgincludedir=@includedir@/gwenhywfar datarootdir=@datarootdir@ datadir=@datadir@ bindir=@bindir@ sysconfdir=@sysconfdir@ # Human-readable name Name: gwengui-fox16 # Human-readable description Description: FOX16 Implementation of the GWEN_DIALOG framework. Version: @VERSION@ Libs: -L@libdir@ -lgwengui-fox16 -lgwengui-cpp Cflags: -I@includedir@ gwenhywfar-4.15.2beta/gui/fox16/api.h0000644000175000017500000000254412416477066014234 00000000000000/*************************************************************************** copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_GUI_FOX16_API_H #define GWEN_GUI_FOX16_API_H #include #if defined __GNUC__ && (! defined (__sun)) && (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) # ifdef BUILDING_FOX16_GUI /* building Fox16 */ # if GWENHYWFAR_SYS_IS_WINDOWS /* for windows */ # ifdef __declspec # define FOX16GUI_API __declspec (dllexport) # else /* if __declspec */ # define FOX16GUI_API # endif /* if NOT __declspec */ # else /* for non-win32 */ # ifdef GCC_WITH_VISIBILITY_ATTRIBUTE # define FOX16GUI_API __attribute__((visibility("default"))) # else # define FOX16GUI_API # endif # endif # else /* not building Fox16 */ # if GWENHYWFAR_SYS_IS_WINDOWS /* for windows */ # ifdef __declspec # define FOX16GUI_API __declspec (dllimport) # else /* if __declspec */ # define FOX16GUI_API # endif /* if NOT __declspec */ # else /* for non-win32 */ # define FOX16GUI_API # endif # endif #endif #endif gwenhywfar-4.15.2beta/gui/fox16/fox16_htmltext.cpp0000644000175000017500000001231512416477066016707 00000000000000/*************************************************************************** begin : Tue Feb 23 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "fox16_htmltext.hpp" #include "fox16_htmlctx.hpp" #include #include #include #define MAX_DEFAULT_WIDTH 400 #define BORDER 2 FXDEFMAP(FOX16_HtmlText) FOX16_HtmlTextMap[]= { FXMAPFUNC(SEL_PAINT,0,FOX16_HtmlText::onPaint), }; // Object implementation FXIMPLEMENT(FOX16_HtmlText, FXScrollArea, FOX16_HtmlTextMap, ARRAYNUMBER(FOX16_HtmlTextMap)) FOX16_HtmlText::FOX16_HtmlText(FXComposite* p, const FXString& text, FXuint opts, FXint x, FXint y, FXint w, FXint h) :FXScrollArea(p, opts, x, y, w, h) ,m_htmlCtx(NULL) ,m_minWidth(0) ,m_maxDefaultWidth(MAX_DEFAULT_WIDTH) ,m_haveDefaultDims(false) ,margintop(BORDER) ,marginbottom(BORDER) ,marginleft(BORDER) ,marginright(BORDER) ,barwidth(8) { setText(text); flags|=FLAG_ENABLED; } FOX16_HtmlText::FOX16_HtmlText() :FXScrollArea() ,m_htmlCtx(NULL) ,m_minWidth(0) { flags|=FLAG_ENABLED; } FOX16_HtmlText::~FOX16_HtmlText() { if (m_htmlCtx) delete m_htmlCtx; } void FOX16_HtmlText::setText(const FXString& text) { m_haveDefaultDims=false; m_text=text; updateHtml(); flags|=FLAG_DIRTY; layout(); recalc(); update(); } void FOX16_HtmlText::calcDefaultDims() { int w; int wNeeded; m_htmlCtx->layout(-1, -1); wNeeded=m_htmlCtx->getWidth(); w=wNeeded; if (w>m_maxDefaultWidth) w=m_maxDefaultWidth; if (wlayout(w-BORDER*2, -1); //} m_defaultWidth=m_htmlCtx->getWidth(); m_defaultHeight=m_htmlCtx->getHeight(); m_haveDefaultDims=true; } FXint FOX16_HtmlText::getContentWidth() { if (m_htmlCtx==NULL) updateHtml(); if (!m_haveDefaultDims) calcDefaultDims(); m_htmlCtx->layout(viewport_w-(marginleft+marginright+barwidth), -1); return m_htmlCtx->getWidth(); } FXint FOX16_HtmlText::getContentHeight() { if (m_htmlCtx==NULL) updateHtml(); if (!m_haveDefaultDims) calcDefaultDims(); return m_htmlCtx->getHeight(); } long FOX16_HtmlText::onPaint(FXObject*, FXSelector, void *ptr) { FXEvent* event=(FXEvent*)ptr; FXDCWindow dc(this,event); //dc.setFont(font); //dc.setForeground(FXRGB(255,0,0)); //dc.fillRectangle(event->rect.x,event->rect.y,event->rect.w,event->rect.h); dc.setForeground(backColor); dc.fillRectangle(event->rect.x, event->rect.y, event->rect.w, event->rect.h); // Paint top margin if (event->rect.y<=margintop) { dc.setForeground(backColor); dc.fillRectangle(0, 0, viewport_w, margintop); } // Paint bottom margin if (event->rect.y+event->rect.h>=viewport_h-marginbottom) { dc.setForeground(backColor); dc.fillRectangle(0, viewport_h-marginbottom, viewport_w, marginbottom); } // Paint left margin if(event->rect.xrect.x+event->rect.w>=viewport_w-marginright) { dc.setForeground(backColor); dc.fillRectangle(viewport_w-marginright, margintop, marginright, viewport_h-margintop-marginbottom); } // Paint text //dc.setClipRectangle(marginleft, margintop, viewport_w-marginright-marginleft, viewport_h-margintop-marginbottom); //drawContents(dc, event->rect.x, event->rect.y, event->rect.w, event->rect.h); if (m_htmlCtx) { #if 0 /* this doesn work */ m_htmlCtx->paintAt(&dc, -marginleft-pos_x, -margintop-pos_y, event->rect.x, event->rect.y, event->rect.w, event->rect.h); #else m_htmlCtx->paintAt(&dc, -marginleft-pos_x, -margintop-pos_y, 0, 0, viewport_w-(marginleft+marginright+barwidth), viewport_h-(margintop+marginbottom)); #endif } else { DBG_ERROR(GWEN_LOGDOMAIN, "No HtmlContext"); } return 1; } void FOX16_HtmlText::layout() { int w; m_haveDefaultDims=false; if (options & FLAGS_NO_WORDWRAP) w=-1; else w=viewport_w; if (m_htmlCtx==NULL) updateHtml(); m_htmlCtx->layout(w-(marginleft+marginright+barwidth), height-(margintop+marginbottom)); // Scrollbars adjusted FXScrollArea::layout(); update(); flags&=~FLAG_DIRTY; } void FOX16_HtmlText::updateHtml() { if (m_htmlCtx) delete m_htmlCtx; m_htmlCtx=new FOX16_HtmlCtx(0); m_htmlCtx->setBackgroundColor(backColor); m_htmlCtx->setForegroundColor(fxcolorfromname("black")); m_htmlCtx->setText(m_text.text()); flags|=FLAG_DIRTY; } void FOX16_HtmlText::makePositionVisible(FXint pos) { FXint xPos, yPos; xPos=pos_x; yPos=getContentHeight()-viewport_h; if (xPos>=0 && yPos>=0) setPosition(-xPos, -yPos); } gwenhywfar-4.15.2beta/gui/fox16/fox16_gui_updater_l.hpp0000644000175000017500000000144712364015347017662 00000000000000/*************************************************************************** begin : Fri Jan 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef FOX16_GUI_UPDATER_L_HPP #define FOX16_GUI_UPDATER_L_HPP #include #include class FOX16_GuiUpdater: public FXObject { FXDECLARE(FOX16_GuiUpdater) public: enum { ID_CHORE=1 }; FOX16_GuiUpdater(); ~FOX16_GuiUpdater(); void guiUpdate(); long onChore(FXObject*, FXSelector, void*); protected: FXuint m_guiIdleFlag; }; #endif gwenhywfar-4.15.2beta/gui/Makefile.in0000644000175000017500000005535312634022412014401 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = gui DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ SUBDIRS = testdialogs cpp @gwenhywfar_guis@ DIST_SUBDIRS = testdialogs cpp qt4 fox16 gtk2 cocoa all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gui/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gui/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am sources: for d in $(SUBDIRS); do \ make -C $$d sources; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/gui/cpp/0000755000175000017500000000000012643267241013176 500000000000000gwenhywfar-4.15.2beta/gui/cpp/cppdialog_p.hpp0000644000175000017500000000317512416477066016124 00000000000000/*************************************************************************** begin : Fri Jan 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef CPPDIALOG_P_HPP #define CPPDIALOG_P_HPP #include "cppdialog.hpp" class CppDialogLinker { friend class CppDialog; static GWENHYWFAR_CB int SetIntProperty(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal); static GWENHYWFAR_CB int GetIntProperty(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue); static GWENHYWFAR_CB int SetCharProperty(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal); static GWENHYWFAR_CB const char *GetCharProperty(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue); static GWENHYWFAR_CB void freeData(void *bp, void *p); }; #endif /* CPPDIALOG_P_HPP */ gwenhywfar-4.15.2beta/gui/cpp/cppdialog.hpp0000644000175000017500000000471212416477066015603 00000000000000/*************************************************************************** begin : Fri Jan 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef CPPDIALOG_HPP #define CPPDIALOG_HPP #include #include #include #include class CppDialog; /** * @brief A C++ binding for the C module @ref GWEN_DIALOG * * This class simply is a C++ binding for the C module @ref GWEN_DIALOG. * It redirects C callbacks used by GWEN_DIALOG to virtual functions in * this class. * * @author Martin Preuss */ class CPPGUI_API CppDialog { friend class CppDialogLinker; private: GWEN_DIALOG_SETINTPROPERTY_FN _setIntPropertyFn; GWEN_DIALOG_GETINTPROPERTY_FN _getIntPropertyFn; GWEN_DIALOG_SETCHARPROPERTY_FN _setCharPropertyFn; GWEN_DIALOG_GETCHARPROPERTY_FN _getCharPropertyFn; public: CppDialog(GWEN_DIALOG *dlg); virtual ~CppDialog(); GWEN_DIALOG *getCInterface(); static CPPGUI_API CppDialog *getDialog(GWEN_DIALOG *dlg); protected: GWEN_DIALOG *_dialog; CppDialog(); int emitSignal(GWEN_DIALOG_EVENTTYPE t, const char *sender); GWEN_WIDGET_TREE *getWidgets() const; GWEN_WIDGET *findWidgetByName(const char *name); GWEN_WIDGET *findWidgetByImplData(int index, void *ptr); virtual int setIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal); virtual int getIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue); virtual int setCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal); virtual const char *getCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue); }; #endif /* CPPDIALOG_HPP */ gwenhywfar-4.15.2beta/gui/cpp/Makefile.in0000644000175000017500000006434712634022412015166 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = gui/cpp DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(iheader_HEADERS) $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(iheaderdir)" LTLIBRARIES = $(lib_LTLIBRARIES) libgwengui_cpp_la_DEPENDENCIES = \ $(top_builddir)/src/$(gwenhywfar_internal_libname) am_libgwengui_cpp_la_OBJECTS = cppdialog.lo cppgui.lo cppwidget.lo libgwengui_cpp_la_OBJECTS = $(am_libgwengui_cpp_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libgwengui_cpp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(libgwengui_cpp_la_LDFLAGS) \ $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(libgwengui_cpp_la_SOURCES) DIST_SOURCES = $(libgwengui_cpp_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(iheader_HEADERS) $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ -DBUILDING_CPP_GUI -DPACKAGE=\"$(PACKAGE)\" DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = -I$(gwenhywfar_symlinkdir) $(fox_includes) -Ihtml AM_CPPFLAGS = @visibility_cflags@ lib_LTLIBRARIES = libgwengui-cpp.la noinst_HEADERS = \ cppdialog_p.hpp \ cppgui_p.hpp \ cppwidget_p.hpp libgwengui_cpp_la_LIBADD = $(top_builddir)/src/$(gwenhywfar_internal_libname) libgwengui_cpp_la_LDFLAGS = -no-undefined libgwengui_cpp_la_SOURCES = \ cppdialog.cpp \ cppgui.cpp \ cppwidget.cpp iheaderdir = ${gwenhywfar_headerdir_am}/gwen-gui-cpp iheader_HEADERS = \ api.h \ cppgui.hpp \ cppdialog.hpp \ cppwidget.hpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gui/cpp/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gui/cpp/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgwengui-cpp.la: $(libgwengui_cpp_la_OBJECTS) $(libgwengui_cpp_la_DEPENDENCIES) $(EXTRA_libgwengui_cpp_la_DEPENDENCIES) $(AM_V_CXXLD)$(libgwengui_cpp_la_LINK) -rpath $(libdir) $(libgwengui_cpp_la_OBJECTS) $(libgwengui_cpp_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cppdialog.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cppgui.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cppwidget.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-iheaderHEADERS: $(iheader_HEADERS) @$(NORMAL_INSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(iheaderdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(iheaderdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(iheaderdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(iheaderdir)" || exit $$?; \ done uninstall-iheaderHEADERS: @$(NORMAL_UNINSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(iheaderdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(iheaderdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iheaderHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iheaderHEADERS uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am \ install-iheaderHEADERS install-info install-info-am \ install-libLTLIBRARIES install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-iheaderHEADERS \ uninstall-libLTLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/gui/cpp/cppwidget_p.hpp0000644000175000017500000000305212416477066016142 00000000000000/*************************************************************************** begin : Fri Jan 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef CPPWIDGET_P_HPP #define CPPWIDGET_P_HPP #include "cppwidget.hpp" class CppWidgetLinker { friend class CppWidget; static GWENHYWFAR_CB int SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal); static GWENHYWFAR_CB int GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue); static GWENHYWFAR_CB int SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal); static GWENHYWFAR_CB const char *GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue); static GWENHYWFAR_CB int AddChildGuiWidget(GWEN_WIDGET *w, GWEN_WIDGET *wChild); static GWENHYWFAR_CB void freeData(void *bp, void *p); }; #endif /* CPPDIALOG_P_HPP */ gwenhywfar-4.15.2beta/gui/cpp/cppdialog.cpp0000644000175000017500000001344012416477066015574 00000000000000/*************************************************************************** begin : Fri Jan 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "cppdialog_p.hpp" #include #include #include #include #include #include #include #include #define I18N(msg) GWEN_I18N_Translate(PACKAGE, msg) GWEN_INHERIT(GWEN_DIALOG, CppDialog); int CppDialogLinker::SetIntProperty(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { CppDialog *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, CppDialog, dlg); assert(xdlg); return xdlg->setIntProperty(w, prop, index, value, doSignal); } int CppDialogLinker::GetIntProperty(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { CppDialog *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, CppDialog, dlg); assert(xdlg); return xdlg->getIntProperty(w, prop, index, defaultValue); } int CppDialogLinker::SetCharProperty(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { CppDialog *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, CppDialog, dlg); assert(xdlg); return xdlg->setCharProperty(w, prop, index, value, doSignal); } const char *CppDialogLinker::GetCharProperty(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { CppDialog *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, CppDialog, dlg); assert(xdlg); return xdlg->getCharProperty(w, prop, index, defaultValue); } void CppDialogLinker::freeData(void *bp, void *p) { CppDialog *xdlg; xdlg=(CppDialog*) p; if (xdlg->_dialog) xdlg->_dialog=NULL; delete xdlg; } CppDialog::CppDialog() :_dialog(NULL) { } CppDialog::CppDialog(GWEN_DIALOG *dlg) :_dialog(NULL) { _dialog=dlg; GWEN_INHERIT_SETDATA(GWEN_DIALOG, CppDialog, _dialog, this, CppDialogLinker::freeData); _setIntPropertyFn=GWEN_Dialog_SetSetIntPropertyFn(_dialog, CppDialogLinker::SetIntProperty); _getIntPropertyFn=GWEN_Dialog_SetGetIntPropertyFn(_dialog, CppDialogLinker::GetIntProperty); _setCharPropertyFn=GWEN_Dialog_SetSetCharPropertyFn(_dialog, CppDialogLinker::SetCharProperty); _getCharPropertyFn=GWEN_Dialog_SetGetCharPropertyFn(_dialog, CppDialogLinker::GetCharProperty); } CppDialog::~CppDialog() { if (_dialog) { GWEN_INHERIT_UNLINK(GWEN_DIALOG, CppDialog, _dialog) } } CppDialog *CppDialog::getDialog(GWEN_DIALOG *dlg) { CppDialog *xdlg; GWEN_DIALOG *pdlg; while( (pdlg=GWEN_Dialog_GetParentDialog(dlg)) ) dlg=pdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, CppDialog, dlg); assert(xdlg); return xdlg; } GWEN_DIALOG *CppDialog::getCInterface() { return _dialog; } int CppDialog::setIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { if (_setIntPropertyFn) return _setIntPropertyFn(_dialog, w, prop, index, value, doSignal); else return GWEN_ERROR_NOT_SUPPORTED; } int CppDialog::getIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { if (_getIntPropertyFn) return _getIntPropertyFn(_dialog, w, prop, index, defaultValue); else return defaultValue; } int CppDialog::setCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { if (_setCharPropertyFn) return _setCharPropertyFn(_dialog, w, prop, index, value, doSignal); else return GWEN_ERROR_NOT_SUPPORTED; } const char *CppDialog::getCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { if (_getCharPropertyFn) return _getCharPropertyFn(_dialog, w, prop, index, defaultValue); else return defaultValue; } int CppDialog::emitSignal(GWEN_DIALOG_EVENTTYPE t, const char *sender) { assert(_dialog); return GWEN_Dialog_EmitSignal(_dialog, t, sender); } GWEN_WIDGET_TREE *CppDialog::getWidgets() const { assert(_dialog); return GWEN_Dialog_GetWidgets(_dialog); } GWEN_WIDGET *CppDialog::findWidgetByName(const char *name) { assert(_dialog); return GWEN_Dialog_FindWidgetByName(_dialog, name); } GWEN_WIDGET *CppDialog::findWidgetByImplData(int index, void *ptr) { assert(_dialog); return GWEN_Dialog_FindWidgetByImplData(_dialog, index, ptr); } gwenhywfar-4.15.2beta/gui/cpp/Makefile.am0000644000175000017500000000107412364015347015152 00000000000000INCLUDES=-I$(gwenhywfar_symlinkdir) $(fox_includes) -Ihtml AM_CPPFLAGS= @visibility_cflags@ DEFS+=-DBUILDING_CPP_GUI -DPACKAGE=\"$(PACKAGE)\" lib_LTLIBRARIES=libgwengui-cpp.la noinst_HEADERS=\ cppdialog_p.hpp \ cppgui_p.hpp \ cppwidget_p.hpp libgwengui_cpp_la_LIBADD=$(top_builddir)/src/$(gwenhywfar_internal_libname) libgwengui_cpp_la_LDFLAGS=-no-undefined libgwengui_cpp_la_SOURCES=\ cppdialog.cpp \ cppgui.cpp \ cppwidget.cpp iheaderdir=${gwenhywfar_headerdir_am}/gwen-gui-cpp iheader_HEADERS=\ api.h \ cppgui.hpp \ cppdialog.hpp \ cppwidget.hpp gwenhywfar-4.15.2beta/gui/cpp/cppwidget.cpp0000644000175000017500000001441312416477066015621 00000000000000/*************************************************************************** begin : Fri Jan 22 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "cppwidget_p.hpp" #include "cppdialog.hpp" #include #include #include #include #include #include #include #include #include #define I18N(msg) GWEN_I18N_Translate(PACKAGE, msg) GWEN_INHERIT(GWEN_WIDGET, CppWidget); int CppWidgetLinker::SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { CppWidget *xw; assert(w); xw=GWEN_INHERIT_GETDATA(GWEN_WIDGET, CppWidget, w); assert(xw); return xw->setIntProperty(prop, index, value, doSignal); } int CppWidgetLinker::GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { CppWidget *xw; assert(w); xw=GWEN_INHERIT_GETDATA(GWEN_WIDGET, CppWidget, w); assert(xw); return xw->getIntProperty(prop, index, defaultValue); } int CppWidgetLinker::SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { CppWidget *xw; assert(w); xw=GWEN_INHERIT_GETDATA(GWEN_WIDGET, CppWidget, w); assert(xw); return xw->setCharProperty(prop, index, value, doSignal); } const char *CppWidgetLinker::GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { CppWidget *xw; assert(w); xw=GWEN_INHERIT_GETDATA(GWEN_WIDGET, CppWidget, w); assert(xw); return xw->getCharProperty(prop, index, defaultValue); } int CppWidgetLinker::AddChildGuiWidget(GWEN_WIDGET *w, GWEN_WIDGET *wChild) { CppWidget *xw; assert(w); xw=GWEN_INHERIT_GETDATA(GWEN_WIDGET, CppWidget, w); assert(xw); return xw->addChildGuiWidget(wChild); } void CppWidgetLinker::freeData(void *bp, void *p) { CppWidget *xw; xw=(CppWidget*) p; if (xw->_widget) xw->_widget=NULL; delete xw; } CppWidget::CppWidget() :_widget(NULL) { } CppWidget::CppWidget(GWEN_WIDGET *w) :_widget(w) { GWEN_INHERIT_SETDATA(GWEN_WIDGET, CppWidget, _widget, this, CppWidgetLinker::freeData); _setIntPropertyFn=GWEN_Widget_SetSetIntPropertyFn(_widget, CppWidgetLinker::SetIntProperty); _getIntPropertyFn=GWEN_Widget_SetGetIntPropertyFn(_widget, CppWidgetLinker::GetIntProperty); _setCharPropertyFn=GWEN_Widget_SetSetCharPropertyFn(_widget, CppWidgetLinker::SetCharProperty); _getCharPropertyFn=GWEN_Widget_SetGetCharPropertyFn(_widget, CppWidgetLinker::GetCharProperty); _addChildGuiWidgetFn=GWEN_Widget_SetAddChildGuiWidgetFn(_widget, CppWidgetLinker::AddChildGuiWidget); } CppWidget::~CppWidget() { if (_widget) { GWEN_INHERIT_UNLINK(GWEN_WIDGET, CppWidget, _widget) } } GWEN_WIDGET *CppWidget::getCInterface() { return _widget; } CppWidget *CppWidget::getWidget(GWEN_WIDGET *w) { CppWidget *xw; assert(w); xw=GWEN_INHERIT_GETDATA(GWEN_WIDGET, CppWidget, w); assert(xw); return xw; } CppDialog *CppWidget::getDialog() { GWEN_DIALOG *dlg; dlg=GWEN_Widget_GetDialog(_widget); if (dlg) return CppDialog::getDialog(dlg); else return NULL; } int CppWidget::setIntProperty(GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { if (_setIntPropertyFn) return _setIntPropertyFn(_widget, prop, index, value, doSignal); else return GWEN_ERROR_NOT_SUPPORTED; } int CppWidget::getIntProperty(GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { if (_getIntPropertyFn) return _getIntPropertyFn(_widget, prop, index, defaultValue); else return defaultValue; } int CppWidget::setCharProperty(GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { if (_setCharPropertyFn) return _setCharPropertyFn(_widget, prop, index, value, doSignal); else return GWEN_ERROR_NOT_SUPPORTED; } const char *CppWidget::getCharProperty(GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { if (_getCharPropertyFn) return _getCharPropertyFn(_widget, prop, index, defaultValue); else return defaultValue; } int CppWidget::addChildGuiWidget(GWEN_WIDGET *wChild) { if (_addChildGuiWidgetFn) return _addChildGuiWidgetFn(_widget, wChild); else return GWEN_ERROR_NOT_SUPPORTED; } const char *CppWidget::getName() { return GWEN_Widget_GetName(_widget); } GWEN_WIDGET_TYPE CppWidget::getType() { return GWEN_Widget_GetType(_widget); } int CppWidget::getColumns() { return GWEN_Widget_GetColumns(_widget); } int CppWidget::getRows() { return GWEN_Widget_GetRows(_widget); } uint32_t CppWidget::getFlags() { return GWEN_Widget_GetFlags(_widget); } int CppWidget::getGroupId() { return GWEN_Widget_GetGroupId(_widget); } int CppWidget::getWidth() { return GWEN_Widget_GetWidth(_widget); } int CppWidget::getHeight() { return GWEN_Widget_GetHeight(_widget); } const char *CppWidget::getText(int idx) { return GWEN_Widget_GetText(_widget, idx); } const char *CppWidget::getIconFileName() { return GWEN_Widget_GetIconFileName(_widget); } const char *CppWidget::getImageFileName() { return GWEN_Widget_GetImageFileName(_widget); } gwenhywfar-4.15.2beta/gui/cpp/cppgui.hpp0000644000175000017500000000665012416477066015133 00000000000000/*************************************************************************** copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef CPPGUI_HPP #define CPPGUI_HPP #include #include //#include //#include #define I18N(msg) GWEN_I18N_Translate(PACKAGE, msg) #define I18S(msg) msg #include #include class CppGui; #include #include /** * @brief A C++ binding for the C module @ref GWEN_GUI * * This class simply is a C++ binding for the C module @ref GWEN_GUI. * It redirects C callbacks used by GWEN_GUI to virtual functions in * this class. * * @author Martin Preuss */ class CPPGUI_API CppGui { friend class CppGuiLinker; private: GWEN_GUI_CHECKCERT_FN _checkCertFn; GWEN_GUI_PRINT_FN _printFn; GWEN_GUI_GETPASSWORD_FN _getPasswordFn; GWEN_GUI_SETPASSWORDSTATUS_FN _setPasswordStatusFn; GWEN_GUI_EXEC_DIALOG_FN _execDialogFn; GWEN_GUI_OPEN_DIALOG_FN _openDialogFn; GWEN_GUI_CLOSE_DIALOG_FN _closeDialogFn; GWEN_GUI_RUN_DIALOG_FN _runDialogFn; GWEN_GUI_GET_FILENAME_FN _getFileNameFn; public: CppGui(); virtual ~CppGui(); static CPPGUI_API CppGui *getCppGui(); GWEN_GUI *getCInterface(); void setPasswordDb(GWEN_DB_NODE *dbPasswords, int persistent); void setPasswordStore(GWEN_PASSWD_STORE *sto); protected: GWEN_GUI *_gui; /** @name User Interaction * */ /*@{*/ /** * See @ref CppGui_Print */ virtual int print(const char *docTitle, const char *docType, const char *descr, const char *text, uint32_t guiid); virtual int getPassword(uint32_t flags, const char *token, const char *title, const char *text, char *buffer, int minLen, int maxLen, uint32_t guiid); virtual int setPasswordStatus(const char *token, const char *pin, GWEN_GUI_PASSWORD_STATUS status, uint32_t guiid); virtual int checkCert(const GWEN_SSLCERTDESCR *cert, GWEN_SYNCIO *sio, uint32_t guiid); virtual int logHook(const char *logDomain, GWEN_LOGGER_LEVEL priority, const char *s); virtual int execDialog(GWEN_DIALOG *dlg, uint32_t guiid); virtual int openDialog(GWEN_DIALOG *dlg, uint32_t guiid); virtual int closeDialog(GWEN_DIALOG *dlg); virtual int runDialog(GWEN_DIALOG *dlg, int untilEnd); virtual int getFileName(const char *caption, GWEN_GUI_FILENAME_TYPE fnt, uint32_t flags, const char *patterns, GWEN_BUFFER *pathBuffer, uint32_t guiid); int checkCertBuiltIn(const GWEN_SSLCERTDESCR *cert, GWEN_SYNCIO *sio, uint32_t guiid); }; #endif /* CPPGUI_HPP */ gwenhywfar-4.15.2beta/gui/cpp/cppgui.cpp0000644000175000017500000002135712416477066015127 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "cppgui_p.hpp" #include #include #include #include #include #include #include #include GWEN_INHERIT(GWEN_GUI, CppGui); int CppGuiLinker::Print(GWEN_GUI *gui, const char *docTitle, const char *docType, const char *descr, const char *text, uint32_t guiid) { CppGui *xgui; assert(gui); xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, CppGui, gui); assert(xgui); return xgui->print(docTitle, docType, descr, text, guiid); } int CppGuiLinker::GetPassword(GWEN_GUI *gui, uint32_t flags, const char *token, const char *title, const char *text, char *buffer, int minLen, int maxLen, uint32_t guiid) { CppGui *xgui; assert(gui); xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, CppGui, gui); assert(xgui); return xgui->getPassword(flags, token, title, text, buffer, minLen, maxLen, guiid); } int CppGuiLinker::SetPasswordStatus(GWEN_GUI *gui, const char *token, const char *pin, GWEN_GUI_PASSWORD_STATUS status, uint32_t guiid) { CppGui *xgui; assert(gui); xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, CppGui, gui); assert(xgui); return xgui->setPasswordStatus(token, pin, status, guiid); } int CppGuiLinker::CheckCert(GWEN_GUI *gui, const GWEN_SSLCERTDESCR *cert, GWEN_SYNCIO *sio, uint32_t guiid) { CppGui *xgui; assert(gui); xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, CppGui, gui); assert(xgui); return xgui->checkCert(cert, sio, guiid); } int CppGuiLinker::LogHook(GWEN_GUI *gui, const char *logDomain, GWEN_LOGGER_LEVEL priority, const char *s) { CppGui *xgui; assert(gui); xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, CppGui, gui); assert(xgui); return xgui->logHook(logDomain, priority, s); } int CppGuiLinker::ExecDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg, uint32_t guiid) { CppGui *xgui; assert(gui); xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, CppGui, gui); assert(xgui); return xgui->execDialog(dlg, guiid); } int CppGuiLinker::OpenDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg, uint32_t guiid) { CppGui *xgui; assert(gui); xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, CppGui, gui); assert(xgui); DBG_ERROR(0, "CppGuiLinker::OpenDialog"); return xgui->openDialog(dlg, guiid); } int CppGuiLinker::CloseDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg) { CppGui *xgui; assert(gui); xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, CppGui, gui); assert(xgui); return xgui->closeDialog(dlg); } int CppGuiLinker::RunDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg, int untilEnd) { CppGui *xgui; assert(gui); xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, CppGui, gui); assert(xgui); return xgui->runDialog(dlg, untilEnd); } int CppGuiLinker::GetFileName(GWEN_GUI *gui, const char *caption, GWEN_GUI_FILENAME_TYPE fnt, uint32_t flags, const char *patterns, GWEN_BUFFER *pathBuffer, uint32_t guiid) { CppGui *xgui; assert(gui); xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, CppGui, gui); assert(xgui); return xgui->getFileName(caption, fnt, flags, patterns, pathBuffer, guiid); } GWENHYWFAR_CB void CppGuiLinker::freeData(void *bp, void *p) { CppGui *xgui; DBG_NOTICE(0, "CppGuiLinker: Freeing CppGui"); xgui=(CppGui*)p; if (xgui->_gui) { xgui->_gui=0; } delete xgui; } CppGui::CppGui() :_checkCertFn(NULL) ,_gui(NULL) { _gui=GWEN_Gui_new(); GWEN_INHERIT_SETDATA(GWEN_GUI, CppGui, _gui, this, CppGuiLinker::freeData); GWEN_Gui_UseDialogs(_gui); _checkCertFn=GWEN_Gui_SetCheckCertFn(_gui, CppGuiLinker::CheckCert); _printFn=GWEN_Gui_SetPrintFn(_gui, CppGuiLinker::Print); _getPasswordFn=GWEN_Gui_SetGetPasswordFn(_gui, CppGuiLinker::GetPassword); _setPasswordStatusFn=GWEN_Gui_SetSetPasswordStatusFn(_gui, CppGuiLinker::SetPasswordStatus); GWEN_Gui_SetLogHookFn(_gui, CppGuiLinker::LogHook); _execDialogFn=GWEN_Gui_SetExecDialogFn(_gui, CppGuiLinker::ExecDialog); _openDialogFn=GWEN_Gui_SetOpenDialogFn(_gui, CppGuiLinker::OpenDialog); _closeDialogFn=GWEN_Gui_SetCloseDialogFn(_gui, CppGuiLinker::CloseDialog); _runDialogFn=GWEN_Gui_SetRunDialogFn(_gui, CppGuiLinker::RunDialog); _getFileNameFn=GWEN_Gui_SetGetFileNameFn(_gui, CppGuiLinker::GetFileName); } CppGui::~CppGui() { if (_gui) { GWEN_INHERIT_UNLINK(GWEN_GUI, CppGui, _gui) GWEN_Gui_free(_gui); } } int CppGui::checkCert(const GWEN_SSLCERTDESCR *cd, GWEN_SYNCIO *sio, uint32_t guiid) { return checkCertBuiltIn(cd, sio, guiid); } int CppGui::logHook(const char *logDomain, GWEN_LOGGER_LEVEL priority, const char *s) { /* not hooked */ return 0; } int CppGui::execDialog(GWEN_DIALOG *dlg, uint32_t guiid) { return GWEN_ERROR_NOT_SUPPORTED; } int CppGui::openDialog(GWEN_DIALOG *dlg, uint32_t guiid) { DBG_ERROR(0, "CppGui::OpenDialog"); return GWEN_ERROR_NOT_SUPPORTED; } int CppGui::closeDialog(GWEN_DIALOG *dlg) { return GWEN_ERROR_NOT_SUPPORTED; } int CppGui::runDialog(GWEN_DIALOG *dlg, int untilEnd) { return GWEN_ERROR_NOT_SUPPORTED; } int CppGui::getFileName(const char *caption, GWEN_GUI_FILENAME_TYPE fnt, uint32_t flags, const char *patterns, GWEN_BUFFER *pathBuffer, uint32_t guiid) { DBG_ERROR(0, "Not supported"); return GWEN_ERROR_NOT_SUPPORTED; } int CppGui::print(const char *docTitle, const char *docType, const char *descr, const char *text, uint32_t guiid) { if (_printFn) return _printFn(_gui, docTitle, docType, descr, text, guiid); else return GWEN_ERROR_NOT_SUPPORTED; } int CppGui::checkCertBuiltIn(const GWEN_SSLCERTDESCR *cert, GWEN_SYNCIO *sio, uint32_t guiid) { if (_checkCertFn) return _checkCertFn(_gui, cert, sio, guiid); else { DBG_ERROR(0, "No built-in checkcert function?"); return GWEN_ERROR_NOT_SUPPORTED; } } int CppGui::getPassword(uint32_t flags, const char *token, const char *title, const char *text, char *buffer, int minLen, int maxLen, uint32_t guiid) { if (_getPasswordFn) return _getPasswordFn(_gui, flags, token, title, text, buffer, minLen, maxLen, guiid); else return GWEN_ERROR_NOT_SUPPORTED; } int CppGui::setPasswordStatus(const char *token, const char *pin, GWEN_GUI_PASSWORD_STATUS status, uint32_t guiid) { if (_setPasswordStatusFn) return _setPasswordStatusFn(_gui, token, pin, status, guiid); else return GWEN_ERROR_NOT_SUPPORTED; } void CppGui::setPasswordDb(GWEN_DB_NODE *dbPasswords, int persistent) { GWEN_Gui_SetPasswordDb(_gui, dbPasswords, persistent); } void CppGui::setPasswordStore(GWEN_PASSWD_STORE *sto) { GWEN_Gui_SetPasswdStore(_gui, sto); } GWEN_GUI *CppGui::getCInterface() { return _gui; } CppGui *CppGui::getCppGui() { GWEN_GUI *gui; CppGui *xgui; gui=GWEN_Gui_GetGui(); if (gui==NULL) return NULL; xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, CppGui, gui); return xgui; } gwenhywfar-4.15.2beta/gui/cpp/cppgui_p.hpp0000644000175000017500000000545712416477066015456 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef CPPGUI_P_HPP #define CPPGUI_P_HPP #include "cppgui.hpp" class CppGuiLinker { friend class CppGui; static int GWENHYWFAR_CB Print(GWEN_GUI *gui, const char *docTitle, const char *docType, const char *descr, const char *text, uint32_t guiid); static int GWENHYWFAR_CB GetPassword(GWEN_GUI *gui, uint32_t flags, const char *token, const char *title, const char *text, char *buffer, int minLen, int maxLen, uint32_t guiid); static int GWENHYWFAR_CB SetPasswordStatus(GWEN_GUI *gui, const char *token, const char *pin, GWEN_GUI_PASSWORD_STATUS status, uint32_t guiid); static int GWENHYWFAR_CB CheckCert(GWEN_GUI *gui, const GWEN_SSLCERTDESCR *cert, GWEN_SYNCIO *io, uint32_t guiid); static int GWENHYWFAR_CB LogHook(GWEN_GUI *gui, const char *logDomain, GWEN_LOGGER_LEVEL priority, const char *s); static int GWENHYWFAR_CB ExecDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg, uint32_t guiid); static int GWENHYWFAR_CB OpenDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg, uint32_t guiid); static int GWENHYWFAR_CB CloseDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg); static int GWENHYWFAR_CB RunDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg, int untilEnd); static int GWENHYWFAR_CB GetFileName(GWEN_GUI *gui, const char *caption, GWEN_GUI_FILENAME_TYPE fnt, uint32_t flags, const char *patterns, GWEN_BUFFER *pathBuffer, uint32_t guiid); static GWENHYWFAR_CB void freeData(void *bp, void *p); }; #endif /* CPPGUI_P_HPP */ gwenhywfar-4.15.2beta/gui/cpp/cppwidget.hpp0000644000175000017500000000473212416477066015631 00000000000000/*************************************************************************** begin : Tue Jul 13 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef CPPWIDGET_HPP #define CPPWIDGET_HPP #include #include #include class CppWidget; class CppDialog; #include /** * @brief A C++ binding for the C module @ref GWEN_WIDGET * * This class simply is a C++ binding for the C module @ref GWEN_WIDGET. * It redirects C callbacks used by GWEN_WIDGET to virtual functions in * this class. * * @author Martin Preuss */ class CPPGUI_API CppWidget { friend class CppWidgetLinker; private: GWEN_WIDGET_SETINTPROPERTY_FN _setIntPropertyFn; GWEN_WIDGET_GETINTPROPERTY_FN _getIntPropertyFn; GWEN_WIDGET_SETCHARPROPERTY_FN _setCharPropertyFn; GWEN_WIDGET_GETCHARPROPERTY_FN _getCharPropertyFn; GWEN_WIDGET_ADDCHILDGUIWIDGET_FN _addChildGuiWidgetFn; public: CppWidget(GWEN_WIDGET *w); virtual ~CppWidget(); GWEN_WIDGET *getCInterface(); static CPPGUI_API CppWidget *getWidget(GWEN_WIDGET *w); CppDialog *getDialog(); const char *getName(); GWEN_WIDGET_TYPE getType(); int getColumns(); int getRows(); uint32_t getFlags(); int getGroupId(); int getWidth(); int getHeight(); const char *getText(int idx); const char *getIconFileName(); const char *getImageFileName(); protected: GWEN_WIDGET *_widget; CppWidget(); virtual int setIntProperty(GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal); virtual int getIntProperty(GWEN_DIALOG_PROPERTY prop, int index, int defaultValue); virtual int setCharProperty(GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal); virtual const char *getCharProperty(GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue); virtual int addChildGuiWidget(GWEN_WIDGET *wChild); }; #endif /* CPPWIDGET_HPP */ gwenhywfar-4.15.2beta/gui/cpp/api.h0000644000175000017500000000251312416477066014047 00000000000000/*************************************************************************** copyright : (C) 2012 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_GUI_CPP_API_H #define GWEN_GUI_CPP_API_H #include #if defined __GNUC__ && (! defined (__sun)) && (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) # ifdef BUILDING_CPP_GUI /* building Cpp */ # if GWENHYWFAR_SYS_IS_WINDOWS /* for windows */ # ifdef __declspec # define CPPGUI_API __declspec (dllexport) # else /* if __declspec */ # define CPPGUI_API # endif /* if NOT __declspec */ # else /* for non-win32 */ # ifdef GCC_WITH_VISIBILITY_ATTRIBUTE # define CPPGUI_API __attribute__((visibility("default"))) # else # define CPPGUI_API # endif # endif # else /* not building Cpp */ # if GWENHYWFAR_SYS_IS_WINDOWS /* for windows */ # ifdef __declspec # define CPPGUI_API __declspec (dllimport) # else /* if __declspec */ # define CPPGUI_API # endif /* if NOT __declspec */ # else /* for non-win32 */ # define CPPGUI_API # endif # endif #endif #endif gwenhywfar-4.15.2beta/gui/Makefile.am0000644000175000017500000000024112364015347014363 00000000000000SUBDIRS=testdialogs cpp @gwenhywfar_guis@ DIST_SUBDIRS=testdialogs cpp qt4 fox16 gtk2 cocoa sources: for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-4.15.2beta/gui/gtk2/0000755000175000017500000000000012643267241013263 500000000000000gwenhywfar-4.15.2beta/gui/gtk2/w_gridlayout.c0000644000175000017500000001460212416477066016071 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ typedef struct GTK2_GRIDLAYOUT_WIDGET GTK2_GRIDLAYOUT_WIDGET; struct GTK2_GRIDLAYOUT_WIDGET { int sortByRow; int allocatedColumns; int allocatedRows; int currentColumn; int currentRow; }; GWEN_INHERIT(GWEN_WIDGET, GTK2_GRIDLAYOUT_WIDGET) static GWENHYWFAR_CB int Gtk2Gui_WGridLayout_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE); return 0; case GWEN_DialogProperty_Focus: gtk_widget_grab_focus(GTK_WIDGET(g)); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int Gtk2Gui_WGridLayout_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0; case GWEN_DialogProperty_Focus: return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0; return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int Gtk2Gui_WGridLayout_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* Gtk2Gui_WGridLayout_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int Gtk2Gui_WGridLayout_AddChildGuiWidget(GWEN_WIDGET *w, GWEN_WIDGET *wChild) { GTK2_GRIDLAYOUT_WIDGET *xw; GtkWidget *g; GtkWidget *gChild; uint32_t cflags; int x; int y; assert(w); xw=GWEN_INHERIT_GETDATA(GWEN_WIDGET, GTK2_GRIDLAYOUT_WIDGET, w); assert(xw); cflags=GWEN_Widget_GetFlags(wChild); g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); gChild=GTK_WIDGET(GWEN_Widget_GetImplData(wChild, GTK2_DIALOG_WIDGET_REAL)); assert(gChild); if (xw->sortByRow) { /* fill rows, enter next column if column full */ y=(xw->currentRow)++; if (y>=xw->allocatedRows) { xw->currentRow=0; y=(xw->currentRow)++; xw->currentColumn++; } x=xw->currentColumn; if (x>=xw->allocatedColumns) { xw->allocatedColumns=x+1; gtk_table_resize(GTK_TABLE(g), xw->allocatedRows, xw->allocatedColumns); } } else { /* fill columns, enter next row if row full */ x=(xw->currentColumn)++; if (x>=xw->allocatedColumns) { xw->currentColumn=0; x=(xw->currentColumn)++; xw->currentRow++; } y=xw->currentRow; if (y>=xw->allocatedRows) { xw->allocatedRows=y+1; gtk_table_resize(GTK_TABLE(g), xw->allocatedRows, xw->allocatedColumns); } } gtk_table_attach(GTK_TABLE(g), gChild, x, x+1, y, y+1, (cflags & GWEN_WIDGET_FLAGS_FILLX)?(GTK_FILL|GTK_EXPAND):0, (cflags & GWEN_WIDGET_FLAGS_FILLY)?(GTK_FILL|GTK_EXPAND):0, GTK2_GUI_DIALOG_DEFAULT_BOX_SPACING, GTK2_GUI_DIALOG_DEFAULT_BOX_SPACING); return 0; } static GWENHYWFAR_CB void Gtk2Gui_WGridLayout_FreeData(void *bp, void *p) { GTK2_GRIDLAYOUT_WIDGET *xw; xw=(GTK2_GRIDLAYOUT_WIDGET*) p; GWEN_FREE_OBJECT(xw); } int Gtk2Gui_WGridLayout_Setup(GWEN_WIDGET *w) { GtkWidget *g; uint32_t flags; GWEN_WIDGET *wParent; GTK2_GRIDLAYOUT_WIDGET *xw; int rows; int cols; GWEN_NEW_OBJECT(GTK2_GRIDLAYOUT_WIDGET, xw); GWEN_INHERIT_SETDATA(GWEN_WIDGET, GTK2_GRIDLAYOUT_WIDGET, w, xw, Gtk2Gui_WGridLayout_FreeData); flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); cols=GWEN_Widget_GetColumns(w); rows=GWEN_Widget_GetRows(w); if (rows>0) { xw->sortByRow=1; xw->allocatedRows=rows; xw->allocatedColumns=1; } else { xw->sortByRow=0; xw->allocatedColumns=cols; xw->allocatedRows=1; } g=gtk_table_new(xw->allocatedRows, xw->allocatedColumns, FALSE); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g); GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WGridLayout_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WGridLayout_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WGridLayout_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WGridLayout_GetCharProperty); GWEN_Widget_SetAddChildGuiWidgetFn(w, Gtk2Gui_WGridLayout_AddChildGuiWidget); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/gtk2/w_checkbox.c0000644000175000017500000001245412416477066015477 00000000000000/*************************************************************************** begin : Mon Jul 12 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ static GWENHYWFAR_CB int Gtk2Gui_WCheckBox_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { GtkButton *g; g=GTK_BUTTON(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE); return 0; case GWEN_DialogProperty_Focus: gtk_widget_grab_focus(GTK_WIDGET(g)); return 0; case GWEN_DialogProperty_Width: case GWEN_DialogProperty_Height: /* just ignore these for now */ return 0; case GWEN_DialogProperty_Value: gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g), (value==0)?FALSE:TRUE); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int Gtk2Gui_WCheckBox_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { GtkButton *g; g=GTK_BUTTON(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0; case GWEN_DialogProperty_Focus: return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0; case GWEN_DialogProperty_Width: case GWEN_DialogProperty_Height: /* just ignore these for now */ return 0; case GWEN_DialogProperty_Value: return (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(g))==TRUE)?1:0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int Gtk2Gui_WCheckBox_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { GtkButton *g; g=GTK_BUTTON(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Title: gtk_button_set_label(g, value); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* Gtk2Gui_WCheckBox_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { GtkButton *g; g=GTK_BUTTON(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Title: return gtk_button_get_label(g); default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static void Gtk2Gui_WCheckBox_Toggled_handler(GtkButton *button, gpointer data) { GWEN_WIDGET *w; int rv; w=data; assert(w); rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w), GWEN_DialogEvent_TypeActivated, GWEN_Widget_GetName(w)); if (rv==GWEN_DialogEvent_ResultAccept) Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1); else if (rv==GWEN_DialogEvent_ResultReject) Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0); } int Gtk2Gui_WCheckBox_Setup(GWEN_WIDGET *w) { GtkWidget *g; const char *s; uint32_t flags; GWEN_WIDGET *wParent; gulong toggled_handler_id; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); s=GWEN_Widget_GetText(w, 0); /* create widget */ if (s && *s) g=gtk_check_button_new_with_mnemonic(s); else g=gtk_check_button_new(); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g); GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WCheckBox_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WCheckBox_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WCheckBox_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WCheckBox_GetCharProperty); toggled_handler_id=g_signal_connect(g, "toggled", G_CALLBACK (Gtk2Gui_WCheckBox_Toggled_handler), w); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/gtk2/libtest.c0000644000175000017500000000751012530645242015014 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include "config.h" /* for OS_WIN32 */ #include "gtk2_gui.h" #include "../testdialogs/dlg_test.h" #include "../testdialogs/dlg_test2.h" #include #include #include #include #include int test1(int argc, char **argv) { GWEN_GUI *gui; int rv; GWEN_DIALOG *dlg; rv=GWEN_Init(); if (rv) { DBG_ERROR_ERR(0, rv); return 2; } GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Info); gtk_set_locale (); gtk_init (&argc, &argv); /* create GUI */ gui=Gtk2_Gui_new(); GWEN_Gui_SetGui(gui); dlg=Dlg_Test1_new(); if (dlg==NULL) { fprintf(stderr, "Could not create dialog.\n"); return 2; } rv=GWEN_Gui_ExecDialog(dlg, 0); fprintf(stderr, "Result: %d\n", rv); return 0; } int test2(int argc, char **argv) { int rv; uint32_t id1; uint32_t id2; uint64_t i1; uint64_t i2; GWEN_GUI *gui; gtk_set_locale (); gtk_init (&argc, &argv); gui=Gtk2_Gui_new(); GWEN_Gui_SetGui(gui); id1=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_SHOW_ABORT | GWEN_GUI_PROGRESS_KEEP_OPEN, "Progress-Title", "" "

This is an example text..

" "

As you can see colors can " "be used.

" "", 10, 0); for (i1=1; i1<=10; i1++) { char numbuf[128]; snprintf(numbuf, sizeof(numbuf)-1, "Step %d\n", (int)i1); GWEN_Gui_ProgressLog(id1, GWEN_LoggerLevel_Notice, numbuf); id2=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_SHOW_ABORT, "2nd progress", "Starting 2nd progress...", 10, id1); for (i2=1; i2<=10; i2++) { sleep(1); fprintf(stderr, "Advancing %d/%d\n", (int)i1, (int)i2); rv=GWEN_Gui_ProgressAdvance(id2, i2); if (rv==GWEN_ERROR_USER_ABORTED) { fprintf(stderr, "Aborted by user (2)\n"); break; } } GWEN_Gui_ProgressEnd(id2); rv=GWEN_Gui_ProgressAdvance(id1, i1); if (rv==GWEN_ERROR_USER_ABORTED) { fprintf(stderr, "Aborted by user (1)\n"); break; } } GWEN_Gui_ProgressEnd(id1); return 0; } int test3(int argc, char **argv) { GWEN_GUI *gui; int rv; GWEN_DIALOG *dlg; rv=GWEN_Init(); if (rv) { DBG_ERROR_ERR(0, rv); return 2; } GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Info); gtk_set_locale (); gtk_init (&argc, &argv); /* create GUI */ gui=Gtk2_Gui_new(); GWEN_Gui_SetGui(gui); dlg=Dlg_Test2_new(); if (dlg==NULL) { fprintf(stderr, "Could not create dialog.\n"); return 2; } rv=GWEN_Gui_ExecDialog(dlg, 0); fprintf(stderr, "Result: %d\n", rv); return 0; } int main(int argc, char **argv) { if (argc>1) { if (strcasecmp(argv[1], "1")==0) return test1(argc, argv); else if (strcasecmp(argv[1], "2")==0) return test2(argc, argv); else if (strcasecmp(argv[1], "3")==0) return test3(argc, argv); } return test1(argc, argv); } gwenhywfar-4.15.2beta/gui/gtk2/w_pushbutton.c0000644000175000017500000001353512416477066016125 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ static GWENHYWFAR_CB int Gtk2Gui_WPushButton_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { GtkButton *g; g=GTK_BUTTON(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE); return 0; case GWEN_DialogProperty_Focus: gtk_widget_grab_focus(GTK_WIDGET(g)); return 0; case GWEN_DialogProperty_Width: case GWEN_DialogProperty_Height: /* just ignore these for now */ return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int Gtk2Gui_WPushButton_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { GtkButton *g; g=GTK_BUTTON(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0; case GWEN_DialogProperty_Focus: return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0; return 0; case GWEN_DialogProperty_Width: case GWEN_DialogProperty_Height: /* just ignore these for now */ return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int Gtk2Gui_WPushButton_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { GtkButton *g; g=GTK_BUTTON(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Title: gtk_button_set_label(g, value); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* Gtk2Gui_WPushButton_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { GtkButton *g; g=GTK_BUTTON(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Title: return gtk_button_get_label(g); default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static void Gtk2Gui_WPushButton_Clicked_handler(GtkButton *button, gpointer data) { GWEN_WIDGET *w; int rv; w=data; assert(w); rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w), GWEN_DialogEvent_TypeActivated, GWEN_Widget_GetName(w)); if (rv==GWEN_DialogEvent_ResultAccept) Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1); else if (rv==GWEN_DialogEvent_ResultReject) Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0); } int Gtk2Gui_WPushButton_Setup(GWEN_WIDGET *w) { GtkWidget *g; const char *s; uint32_t flags; GWEN_WIDGET *wParent; gulong clicked_handler_id; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); s=GWEN_Widget_GetText(w, 0); /* create widget */ if (s && *s) g=gtk_button_new_with_mnemonic(s); else g=gtk_button_new(); s=GWEN_Widget_GetIconFileName(w); if (s && *s) { GWEN_STRINGLIST *sl; sl=GWEN_Dialog_GetMediaPaths(GWEN_Widget_GetDialog(w)); if (sl) { int rv; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Directory_FindFileInPaths(sl, s, tbuf); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Image file [%s] not found (%d)", s, rv); /* ignore result here, instead create GtkImage with "broken mage" later */ } else { GtkWidget *gImage; gImage=gtk_image_new_from_file(GWEN_Buffer_GetStart(tbuf)); gtk_button_set_image(GTK_BUTTON(g), gImage); gtk_button_set_image_position(GTK_BUTTON(g), GTK_POS_LEFT); } GWEN_Buffer_free(tbuf); } } GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g); GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WPushButton_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WPushButton_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WPushButton_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WPushButton_GetCharProperty); clicked_handler_id=g_signal_connect(g, "clicked", G_CALLBACK (Gtk2Gui_WPushButton_Clicked_handler), w); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/gtk2/w_spinbox.c0000644000175000017500000001363112416477066015371 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ typedef struct W_SPINBOX W_SPINBOX; struct W_SPINBOX { GtkAdjustment *adjustment; }; GWEN_INHERIT(GWEN_WIDGET, W_SPINBOX) static GWENHYWFAR_CB int Gtk2Gui_WSpinBox_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { GtkWidget *g; W_SPINBOX *xw; assert(w); xw=GWEN_INHERIT_GETDATA(GWEN_WIDGET, W_SPINBOX, w); assert(xw); g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE); return 0; case GWEN_DialogProperty_Focus: gtk_widget_grab_focus(GTK_WIDGET(g)); return 0; case GWEN_DialogProperty_Width: case GWEN_DialogProperty_Height: /* just ignore these for now */ return 0; case GWEN_DialogProperty_Value: gtk_adjustment_set_value(GTK_ADJUSTMENT(xw->adjustment), value); return 0; case GWEN_DialogProperty_MinValue: gtk_adjustment_set_lower(GTK_ADJUSTMENT(xw->adjustment), value); return 0; case GWEN_DialogProperty_MaxValue: gtk_adjustment_set_upper(GTK_ADJUSTMENT(xw->adjustment), value); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int Gtk2Gui_WSpinBox_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { GtkWidget *g; W_SPINBOX *xw; assert(w); xw=GWEN_INHERIT_GETDATA(GWEN_WIDGET, W_SPINBOX, w); assert(xw); g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0; case GWEN_DialogProperty_Focus: return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0; return 0; case GWEN_DialogProperty_Width: case GWEN_DialogProperty_Height: /* just ignore these for now */ return 0; case GWEN_DialogProperty_Value: return gtk_adjustment_get_value(GTK_ADJUSTMENT(xw->adjustment)); case GWEN_DialogProperty_MinValue: return gtk_adjustment_get_lower(GTK_ADJUSTMENT(xw->adjustment)); case GWEN_DialogProperty_MaxValue: return gtk_adjustment_get_upper(GTK_ADJUSTMENT(xw->adjustment)); default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int Gtk2Gui_WSpinBox_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* Gtk2Gui_WSpinBox_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static void GWENHYWFAR_CB Gtk2Gui_WSpinBox_FreeData(void *bp, void *p) { W_SPINBOX *xw; xw=(W_SPINBOX*) p; GWEN_FREE_OBJECT(xw); } static void Gtk2Gui_WSpinBox_Changed_handler(GtkAdjustment *adjustment, gpointer data) { GWEN_WIDGET *w; int rv; w=data; assert(w); rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w), GWEN_DialogEvent_TypeValueChanged, GWEN_Widget_GetName(w)); if (rv==GWEN_DialogEvent_ResultAccept) Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1); else if (rv==GWEN_DialogEvent_ResultReject) Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0); } int Gtk2Gui_WSpinBox_Setup(GWEN_WIDGET *w) { GtkWidget *g; const char *s; uint32_t flags; GWEN_WIDGET *wParent; W_SPINBOX *xw; gulong changed_handler_id; GWEN_NEW_OBJECT(W_SPINBOX, xw); GWEN_INHERIT_SETDATA(GWEN_WIDGET, W_SPINBOX, w, xw, Gtk2Gui_WSpinBox_FreeData); flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); s=GWEN_Widget_GetText(w, 0); xw->adjustment=GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 100.0, 1.0, 5.0, 5.0)); g=gtk_spin_button_new(xw->adjustment, 1.0, 0); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g); GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WSpinBox_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WSpinBox_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WSpinBox_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WSpinBox_GetCharProperty); changed_handler_id=g_signal_connect(g, "value-changed", G_CALLBACK (Gtk2Gui_WSpinBox_Changed_handler), w); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/gtk2/gtk2_gui_dialog.c0000644000175000017500000003066212416477066016416 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gtk2_gui_dialog_p.h" #include #include #include #include #include #include #include #include #include #include #define I18N(msg) GWEN_I18N_Translate(PACKAGE, msg) #define GTK2_DIALOG_WIDGET_REAL 0 #define GTK2_DIALOG_WIDGET_CONTENT 1 #define GTK2_DIALOG_WIDGET_DATA 2 #define GTK2_DIALOG_STRING_TITLE 0 #define GTK2_DIALOG_STRING_VALUE 1 #include "w_combobox.c" #include "w_label.c" #include "w_dialog.c" #include "w_gridlayout.c" #include "w_hlayout.c" #include "w_hline.c" #include "w_hspacer.c" #include "w_vlayout.c" #include "w_vline.c" #include "w_vspacer.c" #include "w_pushbutton.c" #include "w_lineedit.c" #include "w_textedit.c" #include "w_textbrowser.c" #include "w_stack.c" #include "w_tabbook.c" #include "w_groupbox.c" #include "w_progressbar.c" #include "w_listbox.c" #include "w_checkbox.c" #include "w_scrollarea.c" #include "w_radiobutton.c" #include "w_spinbox.c" GWEN_INHERIT(GWEN_DIALOG, GTK2_GUI_DIALOG) void Gtk2Gui_Dialog_Extend(GWEN_DIALOG *dlg) { GTK2_GUI_DIALOG *xdlg; GWEN_NEW_OBJECT(GTK2_GUI_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, GTK2_GUI_DIALOG, dlg, xdlg, Gtk2Gui_Dialog_FreeData); /* set virtual functions */ xdlg->setIntPropertyFn=GWEN_Dialog_SetSetIntPropertyFn(dlg, Gtk2Gui_Dialog_SetIntProperty); xdlg->getIntPropertyFn=GWEN_Dialog_SetGetIntPropertyFn(dlg, Gtk2Gui_Dialog_GetIntProperty); xdlg->setCharPropertyFn=GWEN_Dialog_SetSetCharPropertyFn(dlg, Gtk2Gui_Dialog_SetCharProperty); xdlg->getCharPropertyFn=GWEN_Dialog_SetGetCharPropertyFn(dlg, Gtk2Gui_Dialog_GetCharProperty); } void Gtk2Gui_Dialog_Unextend(GWEN_DIALOG *dlg) { GTK2_GUI_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GTK2_GUI_DIALOG, dlg); assert(xdlg); /* reset virtual functions */ GWEN_Dialog_SetSetIntPropertyFn(dlg, xdlg->setIntPropertyFn); GWEN_Dialog_SetGetIntPropertyFn(dlg, xdlg->getIntPropertyFn); GWEN_Dialog_SetSetCharPropertyFn(dlg, xdlg->setCharPropertyFn); GWEN_Dialog_SetGetCharPropertyFn(dlg, xdlg->getCharPropertyFn); GWEN_INHERIT_UNLINK(GWEN_DIALOG, GTK2_GUI_DIALOG, dlg); } void GWENHYWFAR_CB Gtk2Gui_Dialog_FreeData(void *bp, void *p) { GTK2_GUI_DIALOG *xdlg; xdlg=(GTK2_GUI_DIALOG*) p; if (xdlg->mainWidget) gtk_widget_destroy(xdlg->mainWidget); GWEN_FREE_OBJECT(xdlg); } GtkWidget *Gtk2Gui_Dialog_GetMainWidget(const GWEN_DIALOG *dlg) { GTK2_GUI_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GTK2_GUI_DIALOG, dlg); assert(xdlg); return xdlg->mainWidget; } GWENHYWFAR_CB int Gtk2Gui_Dialog_SetIntProperty(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { return GWEN_Widget_SetIntProperty(w, prop, index, value, doSignal); } GWENHYWFAR_CB int Gtk2Gui_Dialog_GetIntProperty(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { return GWEN_Widget_GetIntProperty(w, prop, index, defaultValue); } GWENHYWFAR_CB int Gtk2Gui_Dialog_SetCharProperty(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { return GWEN_Widget_SetCharProperty(w, prop, index, value, doSignal); } GWENHYWFAR_CB const char *Gtk2Gui_Dialog_GetCharProperty(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { return GWEN_Widget_GetCharProperty(w, prop, index, defaultValue); } int Gtk2Gui_Dialog_Setup(GWEN_DIALOG *dlg, GtkWidget *parentWindow) { GTK2_GUI_DIALOG *xdlg; GWEN_WIDGET_TREE *wtree; GWEN_WIDGET *w; GtkWindow *gw; int rv; GList *tll; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GTK2_GUI_DIALOG, dlg); assert(xdlg); wtree=GWEN_Dialog_GetWidgets(dlg); if (wtree==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No widget tree in dialog"); return GWEN_ERROR_NOT_FOUND; } w=GWEN_Widget_Tree_GetFirst(wtree); if (w==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No widgets in dialog"); return GWEN_ERROR_NOT_FOUND; } rv=Gtk2Gui_Dialog_SetupTree(w); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } gw=GTK_WINDOW(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); gtk_window_set_type_hint(GTK_WINDOW(gw), GDK_WINDOW_TYPE_HINT_DIALOG); gtk_window_set_position (GTK_WINDOW (gw), GTK_WIN_POS_CENTER_ON_PARENT); /*gtk_window_set_keep_above(GTK_WINDOW(gw), TRUE);*/ xdlg->mainWidget=GTK_WIDGET(gw); tll=gtk_window_list_toplevels(); if (tll) { GList* element; GtkWindow *topLevel=NULL; for (element = tll; element; element = g_list_next(element)) { GtkWindow* win = GTK_WINDOW(element->data); if (gtk_window_is_active(win)) { topLevel=win; break; } } g_list_free(tll); if (topLevel) { DBG_NOTICE(GWEN_LOGDOMAIN, "Found active window [%s]", gtk_window_get_title(topLevel)); gtk_window_set_transient_for(gw, topLevel); } else { DBG_ERROR(GWEN_LOGDOMAIN, "No active window found..."); } } return 0; } void Gtk2Gui_Dialog_Leave(GWEN_DIALOG *dlg, int result) { GTK2_GUI_DIALOG *xdlg; GWEN_DIALOG *parent; /* get toplevel dialog, the one which actually is the GUI dialog */ while( (parent=GWEN_Dialog_GetParentDialog(dlg)) ) dlg=parent; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GTK2_GUI_DIALOG, dlg); assert(xdlg); xdlg->response=result; if (g_main_loop_is_running(xdlg->loop)) g_main_loop_quit(xdlg->loop); } static void run_unmap_handler (GtkWindow *window, gpointer data) { GWEN_DIALOG *dlg; GTK2_GUI_DIALOG *xdlg; dlg=data; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GTK2_GUI_DIALOG, dlg); assert(xdlg); Gtk2Gui_Dialog_Leave(dlg, 0); } static gint run_delete_handler(GtkWindow *window, GdkEventAny *event, gpointer data) { GWEN_DIALOG *dlg; GTK2_GUI_DIALOG *xdlg; dlg=data; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GTK2_GUI_DIALOG, dlg); assert(xdlg); Gtk2Gui_Dialog_Leave(dlg, 0); return TRUE; /* Do not destroy */ } static void run_destroy_handler(GtkWindow *window, gpointer data) { GWEN_DIALOG *dlg; GTK2_GUI_DIALOG *xdlg; dlg=data; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GTK2_GUI_DIALOG, dlg); assert(xdlg); xdlg->destroyed=1; } int GTK2_Gui_Dialog_Run(GWEN_DIALOG *dlg, int untilEnd) { GTK2_GUI_DIALOG *xdlg; GtkWidget *g; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GTK2_GUI_DIALOG, dlg); assert(xdlg); g=Gtk2Gui_Dialog_GetMainWidget(dlg); if (g==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No main widget"); Gtk2Gui_Dialog_Unextend(dlg); return GWEN_ERROR_INVALID; } xdlg->unmap_handler = g_signal_connect(g, "unmap", G_CALLBACK (run_unmap_handler), dlg); xdlg->delete_handler = g_signal_connect(g, "delete-event", G_CALLBACK (run_delete_handler), dlg); xdlg->destroy_handler = g_signal_connect(g, "destroy", G_CALLBACK (run_destroy_handler), dlg); xdlg->loop=g_main_loop_new(NULL, FALSE); if (untilEnd) g_main_loop_run(xdlg->loop); else { GMainContext *ctx; ctx=g_main_loop_get_context(xdlg->loop); while(g_main_context_pending(ctx)) g_main_context_iteration(ctx, FALSE); } g_main_loop_unref(xdlg->loop); if (!xdlg->destroyed) { g_signal_handler_disconnect(g, xdlg->unmap_handler); g_signal_handler_disconnect(g, xdlg->delete_handler); g_signal_handler_disconnect(g, xdlg->destroy_handler); } return xdlg->response; } int Gtk2Gui_Dialog_SetupTree(GWEN_WIDGET *w) { int rv; switch(GWEN_Widget_GetType(w)) { case GWEN_Widget_TypeDialog: rv=Gtk2Gui_WDialog_Setup(w); break; case GWEN_Widget_TypeLabel: rv=Gtk2Gui_WLabel_Setup(w); break; case GWEN_Widget_TypeGridLayout: rv=Gtk2Gui_WGridLayout_Setup(w); break; case GWEN_Widget_TypeVLayout: rv=Gtk2Gui_WVLayout_Setup(w); break; case GWEN_Widget_TypeHLayout: rv=Gtk2Gui_WHLayout_Setup(w); break; case GWEN_Widget_TypePushButton: rv=Gtk2Gui_WPushButton_Setup(w); break; case GWEN_Widget_TypeLineEdit: rv=Gtk2Gui_WLineEdit_Setup(w); break; case GWEN_Widget_TypeHLine: rv=Gtk2Gui_WHLine_Setup(w); break; case GWEN_Widget_TypeVLine: rv=Gtk2Gui_WVLine_Setup(w); break; case GWEN_Widget_TypeVSpacer: rv=Gtk2Gui_WVSpacer_Setup(w); break; case GWEN_Widget_TypeHSpacer: rv=Gtk2Gui_WHSpacer_Setup(w); break; case GWEN_Widget_TypeComboBox: rv=Gtk2Gui_WComboBox_Setup(w); break; case GWEN_Widget_TypeTextEdit: rv=Gtk2Gui_WTextEdit_Setup(w); break; case GWEN_Widget_TypeWidgetStack: rv=Gtk2Gui_WStack_Setup(w); break; case GWEN_Widget_TypeTabBook: rv=Gtk2Gui_WTabBook_Setup(w); break; case GWEN_Widget_TypeTabPage: /* just re-use vbox */ GWEN_Widget_AddFlags(w, GWEN_WIDGET_FLAGS_FILLX | GWEN_WIDGET_FLAGS_FILLY); rv=Gtk2Gui_WVLayout_Setup(w); break; case GWEN_Widget_TypeGroupBox: rv=Gtk2Gui_WGroupBox_Setup(w); break; case GWEN_Widget_TypeTextBrowser: rv=Gtk2Gui_WTextBrowser_Setup(w); break; case GWEN_Widget_TypeProgressBar: rv=Gtk2Gui_WProgressBar_Setup(w); break; case GWEN_Widget_TypeSpinBox: rv=Gtk2Gui_WSpinBox_Setup(w); break; case GWEN_Widget_TypeListBox: rv=Gtk2Gui_WListBox_Setup(w); break; case GWEN_Widget_TypeCheckBox: rv=Gtk2Gui_WCheckBox_Setup(w); break; case GWEN_Widget_TypeScrollArea: rv=Gtk2Gui_WScrollArea_Setup(w); break; case GWEN_Widget_TypeRadioButton: rv=Gtk2Gui_WRadioButton_Setup(w); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Unhandled widget type %d", GWEN_Widget_GetType(w)); rv=GWEN_ERROR_INVALID; break; } if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } else { GWEN_WIDGET *wChild; /* handle children */ wChild=GWEN_Widget_Tree_GetFirstChild(w); while(wChild) { /* recursion */ rv=Gtk2Gui_Dialog_SetupTree(wChild); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } wChild=GWEN_Widget_Tree_GetNext(wChild); } } return 0; } int Gtk2Gui_GetRawText(const char *text, GWEN_BUFFER *tbuf) { const char *p=0; const char *p2=0; if (text==NULL) return 0; /* find begin of HTML area */ p=text; while ((p=strchr(p, '<'))) { const char *t; t=p; t++; if (toupper(*t)=='H') { t++; if (toupper(*t)=='T') { t++; if (toupper(*t)=='M') { t++; if (toupper(*t)=='L') { t++; if (toupper(*t)=='>') { break; } } } } } p++; } /* while */ /* find end of HTML area */ if (p) { p2=p; p2+=6; /* skip "" */ while ((p2=strchr(p2, '<'))) { const char *t; t=p2; t++; if (toupper(*t)=='/') { t++; if (toupper(*t)=='H') { t++; if (toupper(*t)=='T') { t++; if (toupper(*t)=='M') { t++; if (toupper(*t)=='L') { t++; if (toupper(*t)=='>') { break; } } } } } } p2++; } /* while */ } if (p && p2) { int startPos; int endPos; p2+=7; /* skip "" */ startPos=(p-text); endPos=(p2-text); /* append stuff before startPos */ if (startPos) GWEN_Buffer_AppendBytes(tbuf, text, startPos); if (*p2) GWEN_Buffer_AppendString(tbuf, p2); return 0; } else { GWEN_Buffer_AppendString(tbuf, text); return 0; } } gwenhywfar-4.15.2beta/gui/gtk2/gtk2_gui_dialog_l.h0000644000175000017500000000223012364015347016714 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GTK2_GUI_DIALOG_L_H #define GTK2_GUI_DIALOG_L_H #include #include #include #define GTK2_GUI_DIALOG_DEFAULT_BOX_SPACING 3 typedef struct { GWEN_DIALOG *dialog; GtkWindow *window; int response; GMainLoop *loop; int destroyed; } RunInfo; void Gtk2Gui_Dialog_Extend(GWEN_DIALOG *dlg); void Gtk2Gui_Dialog_Unextend(GWEN_DIALOG *dlg); int Gtk2Gui_Dialog_Setup(GWEN_DIALOG *dlg, GtkWidget *parentWindow); GtkWidget *Gtk2Gui_Dialog_GetMainWidget(const GWEN_DIALOG *dlg); int GTK2_Gui_Dialog_Run(GWEN_DIALOG *dlg, int timeout); void Gtk2Gui_Dialog_Leave(GWEN_DIALOG *dlg, int result); int Gtk2Gui_GetRawText(const char *text, GWEN_BUFFER *tbuf); #endif gwenhywfar-4.15.2beta/gui/gtk2/w_dialog.c0000644000175000017500000001212312416477066015141 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ static GWENHYWFAR_CB int Gtk2Gui_WDialog_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { GtkWindow *g; g=GTK_WINDOW(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE); return 0; case GWEN_DialogProperty_Focus: gtk_widget_grab_focus(GTK_WIDGET(g)); return 0; case GWEN_DialogProperty_Width: { gint width, height; gtk_window_get_size(GTK_WINDOW(g), &width, &height); gtk_window_resize(GTK_WINDOW(g), value, height); return 0; } case GWEN_DialogProperty_Height: { gint width, height; gtk_window_get_size(GTK_WINDOW(g), &width, &height); gtk_window_resize(GTK_WINDOW(g), width, value); return 0; } default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int Gtk2Gui_WDialog_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { GtkWindow *g; g=GTK_WINDOW(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0; case GWEN_DialogProperty_Focus: return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0; return 0; case GWEN_DialogProperty_Width: { gint width, height; gtk_window_get_size(GTK_WINDOW(g), &width, &height); return width; } case GWEN_DialogProperty_Height: { gint width, height; gtk_window_get_size(GTK_WINDOW(g), &width, &height); return height; } default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int Gtk2Gui_WDialog_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { GtkWindow *g; g=GTK_WINDOW(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Title: gtk_window_set_title(GTK_WINDOW(g), value); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* Gtk2Gui_WDialog_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { GtkWindow *g; g=GTK_WINDOW(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Title: return gtk_window_get_title(GTK_WINDOW(g)); default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int Gtk2Gui_WDialog_AddChildGuiWidget(GWEN_WIDGET *w, GWEN_WIDGET *wChild) { GtkWidget *g; GtkWidget *gChild; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); gChild=GTK_WIDGET(GWEN_Widget_GetImplData(wChild, GTK2_DIALOG_WIDGET_REAL)); assert(gChild); gtk_container_add(GTK_CONTAINER(g), gChild); return 0; } int Gtk2Gui_WDialog_Setup(GWEN_WIDGET *w) { GtkWidget *g; const char *s; uint32_t flags; flags=GWEN_Widget_GetFlags(w); s=GWEN_Widget_GetText(w, 0); g=gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_modal(GTK_WINDOW(g), TRUE); if (s && *s) gtk_window_set_title(GTK_WINDOW(g), s); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g); GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WDialog_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WDialog_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WDialog_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WDialog_GetCharProperty); GWEN_Widget_SetAddChildGuiWidgetFn(w, Gtk2Gui_WDialog_AddChildGuiWidget); return 0; } gwenhywfar-4.15.2beta/gui/gtk2/gtk2_gui.h0000644000175000017500000000151012364015347015062 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GTK2_GUI_H #define GTK2_GUI_H #include #if defined __GNUC__ && (! defined (__sun)) && (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) # ifdef BUILDING_GTK2_GUI # define GTK2GUI_API __attribute__ ((visibility("default"))) # else # define GTK2GUI_API # endif #else # define GTK2GUI_API #endif #include GTK2GUI_API GWEN_GUI *Gtk2_Gui_new(); #endif gwenhywfar-4.15.2beta/gui/gtk2/w_combobox.c0000644000175000017500000001663412416477066015525 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ typedef struct W_COMBOBOX W_COMBOBOX; struct W_COMBOBOX { GWEN_STRINGLIST *entries; }; GWEN_INHERIT(GWEN_WIDGET, W_COMBOBOX) static GWENHYWFAR_CB int Gtk2Gui_WComboBox_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { GtkWidget *g; W_COMBOBOX *xw; assert(w); xw=GWEN_INHERIT_GETDATA(GWEN_WIDGET, W_COMBOBOX, w); assert(xw); g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE); return 0; case GWEN_DialogProperty_Focus: gtk_widget_grab_focus(GTK_WIDGET(g)); return 0; case GWEN_DialogProperty_Value: gtk_combo_box_set_active(GTK_COMBO_BOX(g), value); return 0; case GWEN_DialogProperty_ClearValues: { GtkListStore *store; store=GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(g))); assert(store); gtk_list_store_clear(store); GWEN_StringList_Clear(xw->entries); return 0; } default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int Gtk2Gui_WComboBox_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0; case GWEN_DialogProperty_Focus: return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0; return 0; case GWEN_DialogProperty_Value: { gint i; i=gtk_combo_box_get_active(GTK_COMBO_BOX(g)); if (i==-1) return defaultValue; else return i; } case GWEN_DialogProperty_ValueCount: { GtkListStore *store; gint i; store=GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(g))); assert(store); i=gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store), NULL); return i; } default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int Gtk2Gui_WComboBox_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { GtkWidget *g; W_COMBOBOX *xw; assert(w); xw=GWEN_INHERIT_GETDATA(GWEN_WIDGET, W_COMBOBOX, w); assert(xw); g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Value: /* undefined */ break; case GWEN_DialogProperty_AddValue: { GtkListStore *store; GtkTreeIter iter; store=GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(g))); assert(store); gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, value, -1); GWEN_StringList_AppendString(xw->entries, value, 0, 0); return 0; } case GWEN_DialogProperty_ClearValues: { GtkListStore *store; store=GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(g))); assert(store); gtk_list_store_clear(store); GWEN_StringList_Clear(xw->entries); return 0; } default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* Gtk2Gui_WComboBox_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { GtkWidget *g; W_COMBOBOX *xw; assert(w); xw=GWEN_INHERIT_GETDATA(GWEN_WIDGET, W_COMBOBOX, w); assert(xw); g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Value: { const char *s; s=GWEN_StringList_StringAt(xw->entries, index); if (s && *s) return s; else return defaultValue; } default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static void changed_handler(GtkWidget *comboBox, gpointer data) { GWEN_WIDGET *w; int rv; w=data; assert(w); rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w), GWEN_DialogEvent_TypeActivated, GWEN_Widget_GetName(w)); if (rv==GWEN_DialogEvent_ResultAccept) Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1); else if (rv==GWEN_DialogEvent_ResultReject) Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0); } static void GWENHYWFAR_CB Gtk2Gui_WComboBox_FreeData(void *bp, void *p) { W_COMBOBOX *xw; xw=(W_COMBOBOX*) p; GWEN_StringList_free(xw->entries); GWEN_FREE_OBJECT(xw); } int Gtk2Gui_WComboBox_Setup(GWEN_WIDGET *w) { W_COMBOBOX *xw; GtkWidget *g; GtkCellRenderer *cr; GtkListStore *store; uint32_t flags; GWEN_WIDGET *wParent; gulong changed_handler_id; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); /* create widget */ store=gtk_list_store_new(1, G_TYPE_STRING); if (flags & GWEN_WIDGET_FLAGS_READONLY) g=gtk_combo_box_new_with_model(GTK_TREE_MODEL(store)); else /* TODO: why the heck does *this* combo box have two columns in the list?? */ g=gtk_combo_box_entry_new_with_model(GTK_TREE_MODEL(store), 0); g_object_unref(store); cr=gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT (g), cr, TRUE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(g), cr, "text", 0, NULL); GWEN_NEW_OBJECT(W_COMBOBOX, xw); GWEN_INHERIT_SETDATA(GWEN_WIDGET, W_COMBOBOX, w, xw, Gtk2Gui_WComboBox_FreeData); xw->entries=GWEN_StringList_new(); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g); GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WComboBox_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WComboBox_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WComboBox_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WComboBox_GetCharProperty); changed_handler_id=g_signal_connect(g, "changed", G_CALLBACK (changed_handler), w); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/gtk2/w_progressbar.c0000644000175000017500000001417312416477066016242 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ typedef struct W_PROGRESSBAR W_PROGRESSBAR; struct W_PROGRESSBAR { int minValue; int maxValue; int currentValue; }; GWEN_INHERIT(GWEN_WIDGET, W_PROGRESSBAR) static GWENHYWFAR_CB int Gtk2Gui_WProgressBar_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { GtkProgressBar *g; W_PROGRESSBAR *xw; assert(w); xw=GWEN_INHERIT_GETDATA(GWEN_WIDGET, W_PROGRESSBAR, w); assert(xw); g=GTK_PROGRESS_BAR(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE); return 0; case GWEN_DialogProperty_Focus: gtk_widget_grab_focus(GTK_WIDGET(g)); return 0; case GWEN_DialogProperty_Width: case GWEN_DialogProperty_Height: /* just ignore these for now */ return 0; case GWEN_DialogProperty_Value: { xw->currentValue=value; if (xw->maxValue) { gdouble d; char numbuf[32]; d=(gdouble)(xw->currentValue-xw->minValue)/(gdouble)(xw->maxValue); gtk_progress_bar_set_fraction(g, d); snprintf(numbuf, sizeof(numbuf)-1, "%d %%", (int)(d*100.0)); numbuf[sizeof(numbuf)-1]=0; gtk_progress_bar_set_text(g, numbuf); } else { gtk_progress_bar_set_fraction(g, 0.0); gtk_progress_bar_set_text(g, ""); } return 0; } case GWEN_DialogProperty_MinValue: { xw->minValue=value; if (xw->maxValue) { gdouble d; char numbuf[32]; d=(gdouble)(xw->currentValue-xw->minValue)/(gdouble)(xw->maxValue); gtk_progress_bar_set_fraction(g, d); snprintf(numbuf, sizeof(numbuf)-1, "%d %%", (int)(d*100.0)); numbuf[sizeof(numbuf)-1]=0; gtk_progress_bar_set_text(g, numbuf); } else { gtk_progress_bar_set_fraction(g, 0.0); gtk_progress_bar_set_text(g, ""); } return 0; } case GWEN_DialogProperty_MaxValue: { xw->maxValue=value; if (xw->maxValue) { gdouble d; char numbuf[32]; d=(gdouble)(xw->currentValue-xw->minValue)/(gdouble)(xw->maxValue); gtk_progress_bar_set_fraction(g, d); snprintf(numbuf, sizeof(numbuf)-1, "%d %%", (int)(d*100.0)); numbuf[sizeof(numbuf)-1]=0; gtk_progress_bar_set_text(g, numbuf); return 0; } else { gtk_progress_bar_set_fraction(g, 0.0); gtk_progress_bar_set_text(g, ""); } } default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int Gtk2Gui_WProgressBar_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { GtkProgressBar *g; W_PROGRESSBAR *xw; assert(w); xw=GWEN_INHERIT_GETDATA(GWEN_WIDGET, W_PROGRESSBAR, w); assert(xw); g=GTK_PROGRESS_BAR(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0; case GWEN_DialogProperty_Focus: return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0; return 0; case GWEN_DialogProperty_Width: case GWEN_DialogProperty_Height: /* just ignore these for now */ return 0; case GWEN_DialogProperty_Value: return xw->currentValue; case GWEN_DialogProperty_MinValue: return xw->minValue; case GWEN_DialogProperty_MaxValue: return xw->maxValue; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int Gtk2Gui_WProgressBar_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* Gtk2Gui_WProgressBar_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static void GWENHYWFAR_CB Gtk2Gui_WProgressBar_FreeData(void *bp, void *p) { W_PROGRESSBAR *xw; xw=(W_PROGRESSBAR*) p; GWEN_FREE_OBJECT(xw); } int Gtk2Gui_WProgressBar_Setup(GWEN_WIDGET *w) { GtkWidget *g; const char *s; uint32_t flags; GWEN_WIDGET *wParent; W_PROGRESSBAR *xw; GWEN_NEW_OBJECT(W_PROGRESSBAR, xw); GWEN_INHERIT_SETDATA(GWEN_WIDGET, W_PROGRESSBAR, w, xw, Gtk2Gui_WProgressBar_FreeData); flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); s=GWEN_Widget_GetText(w, 0); g=gtk_progress_bar_new(); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g); GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WProgressBar_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WProgressBar_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WProgressBar_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WProgressBar_GetCharProperty); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/gtk2/w_textbrowser.c0000644000175000017500000001421712416477066016300 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ static GWENHYWFAR_CB int Gtk2Gui_WTextBrowser_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { GtkWidget *g; /* text view */ GtkWidget *gs; /* scrollable window */ g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_CONTENT)); assert(g); gs=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(gs); switch(prop) { case GWEN_DialogProperty_Enabled: gtk_widget_set_sensitive(GTK_WIDGET(gs), (value==0)?FALSE:TRUE); return 0; case GWEN_DialogProperty_Focus: gtk_widget_grab_focus(GTK_WIDGET(gs)); return 0; case GWEN_DialogProperty_Width: case GWEN_DialogProperty_Height: /* just ignore these for now */ return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int Gtk2Gui_WTextBrowser_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { GtkWidget *g; /* text view */ GtkWidget *gs; /* scrollable window */ g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_CONTENT)); assert(g); gs=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(gs); g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_CONTENT)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: return (gtk_widget_get_sensitive(GTK_WIDGET(gs))==TRUE)?1:0; case GWEN_DialogProperty_Focus: return (gtk_widget_has_focus(GTK_WIDGET(gs))==TRUE)?1:0; return 0; case GWEN_DialogProperty_Width: case GWEN_DialogProperty_Height: /* just ignore these for now */ return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int Gtk2Gui_WTextBrowser_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { GtkWidget *g; /* text view */ GtkWidget *gs; /* scrollable window */ GWEN_BUFFER *tbuf; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_CONTENT)); assert(g); gs=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(gs); tbuf=GWEN_Buffer_new(0, 128, 0, 1); if (value && *value) Gtk2Gui_GetRawText(value, tbuf); switch(prop) { case GWEN_DialogProperty_Value: { GtkTextBuffer *tb; GtkAdjustment *va; tb=gtk_text_view_get_buffer(GTK_TEXT_VIEW(g)); assert(tb); gtk_text_buffer_set_text(tb, GWEN_Buffer_GetStart(tbuf), -1); /* scroll to end */ va=gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(gs)); if (va) gtk_adjustment_set_value(va, va->upper); GWEN_Buffer_free(tbuf); return 0; } default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); GWEN_Buffer_free(tbuf); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* Gtk2Gui_WTextBrowser_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { GtkWidget *g; /* text view */ GtkWidget *gs; /* scrollable window */ g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_CONTENT)); assert(g); gs=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(gs); switch(prop) { case GWEN_DialogProperty_Value: { GtkTextBuffer *tb; GtkTextIter startIter; GtkTextIter endIter; gchar *s; tb=gtk_text_view_get_buffer(GTK_TEXT_VIEW(g)); assert(tb); gtk_text_buffer_get_start_iter(tb, &startIter); gtk_text_buffer_get_end_iter(tb, &endIter); s=gtk_text_buffer_get_text(tb, &startIter, &endIter, FALSE); if (s) { GWEN_Widget_SetText(w, GTK2_DIALOG_STRING_VALUE, s); g_free(s); return GWEN_Widget_GetText(w, GTK2_DIALOG_STRING_VALUE); } return defaultValue; } default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } int Gtk2Gui_WTextBrowser_Setup(GWEN_WIDGET *w) { GtkWidget *gs; GtkWidget *g; const char *s; uint32_t flags; GWEN_WIDGET *wParent; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); s=GWEN_Widget_GetText(w, 0); /* create widget */ gs=gtk_scrolled_window_new(NULL, NULL); g=gtk_text_view_new(); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(gs), g); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 128, 0, 1); Gtk2Gui_GetRawText(s, tbuf); gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(g)), GWEN_Buffer_GetStart(tbuf), -1); GWEN_Buffer_free(tbuf); } GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) gs); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g); GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WTextBrowser_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WTextBrowser_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WTextBrowser_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WTextBrowser_GetCharProperty); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/gtk2/w_radiobutton.c0000644000175000017500000001355612416477066016247 00000000000000/*************************************************************************** begin : Mon Jul 12 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ static GWENHYWFAR_CB int Gtk2Gui_WRadioButton_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { GtkButton *g; g=GTK_BUTTON(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE); return 0; case GWEN_DialogProperty_Focus: gtk_widget_grab_focus(GTK_WIDGET(g)); return 0; case GWEN_DialogProperty_Width: case GWEN_DialogProperty_Height: /* just ignore these for now */ return 0; case GWEN_DialogProperty_Value: gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g), (value==0)?FALSE:TRUE); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int Gtk2Gui_WRadioButton_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { GtkButton *g; g=GTK_BUTTON(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0; case GWEN_DialogProperty_Focus: return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0; case GWEN_DialogProperty_Width: case GWEN_DialogProperty_Height: /* just ignore these for now */ return 0; case GWEN_DialogProperty_Value: return (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(g))==TRUE)?1:0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int Gtk2Gui_WRadioButton_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { GtkButton *g; g=GTK_BUTTON(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Title: gtk_button_set_label(g, value); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* Gtk2Gui_WRadioButton_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { GtkButton *g; g=GTK_BUTTON(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Title: return gtk_button_get_label(g); default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static void Gtk2Gui_WRadioButton_Toggled_handler(GtkButton *button, gpointer data) { GWEN_WIDGET *w; int rv; w=data; assert(w); rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w), GWEN_DialogEvent_TypeActivated, GWEN_Widget_GetName(w)); if (rv==GWEN_DialogEvent_ResultAccept) Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1); else if (rv==GWEN_DialogEvent_ResultReject) Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0); } int Gtk2Gui_WRadioButton_Setup(GWEN_WIDGET *w) { GtkWidget *g; const char *s; uint32_t flags; GWEN_WIDGET *wParent; GWEN_WIDGET *wT; gulong toggled_handler_id; int groupId; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); groupId=GWEN_Widget_GetGroupId(w); s=GWEN_Widget_GetText(w, 0); /* create widget */ if (s && *s) g=gtk_radio_button_new_with_mnemonic(NULL, s); else g=gtk_radio_button_new(NULL); /* get root widget */ wT=wParent; while(GWEN_Widget_Tree_GetParent(wT)) wT=GWEN_Widget_Tree_GetParent(wT); /* get first radio button of the same group */ while(wT) { if ((GWEN_Widget_GetType(wT)==GWEN_Widget_TypeRadioButton) && GWEN_Widget_GetGroupId(wT)==groupId) break; wT=GWEN_Widget_Tree_GetBelow(wT); } if (wT && wT!=w) { GSList *grp; grp=gtk_radio_button_get_group(GTK_RADIO_BUTTON(GWEN_Widget_GetImplData(wT, GTK2_DIALOG_WIDGET_REAL))); gtk_radio_button_set_group(GTK_RADIO_BUTTON(g), grp); } /* set pointers */ GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g); GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WRadioButton_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WRadioButton_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WRadioButton_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WRadioButton_GetCharProperty); toggled_handler_id=g_signal_connect(g, "toggled", G_CALLBACK (Gtk2Gui_WRadioButton_Toggled_handler), w); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/gtk2/gtk2_gui.c0000644000175000017500000001762112416477066015077 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gtk2_gui_p.h" #include "gtk2_gui_dialog_l.h" #include #include #include #include #include #include #include #include #define I18N(msg) GWEN_I18N_Translate(PACKAGE, msg) GWEN_INHERIT(GWEN_GUI, GTK2_GUI) GWEN_GUI *Gtk2_Gui_new() { GWEN_GUI *gui; GTK2_GUI *xgui; gui=GWEN_Gui_new(); GWEN_NEW_OBJECT(GTK2_GUI, xgui); GWEN_INHERIT_SETDATA(GWEN_GUI, GTK2_GUI, gui, xgui, Gtk2_Gui_FreeData); GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_DIALOGSUPPORTED); GWEN_Gui_UseDialogs(gui); xgui->execDialogFn=GWEN_Gui_SetExecDialogFn(gui, GTK2_Gui_ExecDialog); xgui->openDialogFn=GWEN_Gui_SetOpenDialogFn(gui, GTK2_Gui_OpenDialog); xgui->closeDialogFn=GWEN_Gui_SetCloseDialogFn(gui, GTK2_Gui_CloseDialog); xgui->runDialogFn=GWEN_Gui_SetRunDialogFn(gui, GTK2_Gui_RunDialog); xgui->getFileNameDialogFn=GWEN_Gui_SetGetFileNameFn(gui, GTK2_Gui_GetFileName); return gui; } GWENHYWFAR_CB void Gtk2_Gui_FreeData(void *bp, void *p) { GTK2_GUI *xgui; xgui=(GTK2_GUI*) p; GWEN_FREE_OBJECT(xgui); } GWENHYWFAR_CB int GTK2_Gui_ExecDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg, uint32_t guiid) { int rv; assert(dlg); rv=GTK2_Gui_OpenDialog(gui, dlg, guiid); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=GTK2_Gui_RunDialog(gui, dlg, 1); GTK2_Gui_CloseDialog(gui, dlg); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } GWENHYWFAR_CB int GTK2_Gui_OpenDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg, uint32_t guiid) { int rv; GtkWidget *g; assert(dlg); Gtk2Gui_Dialog_Extend(dlg); rv=Gtk2Gui_Dialog_Setup(dlg, NULL); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); Gtk2Gui_Dialog_Unextend(dlg); return rv; } g=Gtk2Gui_Dialog_GetMainWidget(dlg); if (g==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No main widget"); Gtk2Gui_Dialog_Unextend(dlg); return GWEN_ERROR_INVALID; } rv=GWEN_Dialog_EmitSignalToAll(dlg, GWEN_DialogEvent_TypeInit, ""); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Error initializing dialog: %d", rv); Gtk2Gui_Dialog_Unextend(dlg); return rv; } /* show dialog */ gtk_widget_show_all(g); return 0; } GWENHYWFAR_CB int GTK2_Gui_CloseDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg) { GtkWidget *g; int rv; assert(dlg); g=Gtk2Gui_Dialog_GetMainWidget(dlg); if (g==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No main widget"); Gtk2Gui_Dialog_Unextend(dlg); return GWEN_ERROR_INVALID; } /* hide dialog */ gtk_widget_hide_all(g); /* send fini signal to dialog */ rv=GWEN_Dialog_EmitSignalToAll(dlg, GWEN_DialogEvent_TypeFini, ""); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Error deinitializing dialog: %d", rv); Gtk2Gui_Dialog_Unextend(dlg); return rv; } Gtk2Gui_Dialog_Unextend(dlg); return 0; } GWENHYWFAR_CB int GTK2_Gui_RunDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg, int untilEnd) { int rv; assert(dlg); rv=GTK2_Gui_Dialog_Run(dlg, untilEnd); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } GWENHYWFAR_CB int GTK2_Gui_GetFileName(GWEN_GUI *gui, const char *caption, GWEN_GUI_FILENAME_TYPE fnt, uint32_t flags, const char *patterns, GWEN_BUFFER *pathBuffer, uint32_t guiid) { char *folder=NULL; char *fileName=NULL; if (GWEN_Buffer_GetUsedBytes(pathBuffer)) { folder=strdup(GWEN_Buffer_GetStart(pathBuffer)); fileName=strchr(folder, GWEN_DIR_SEPARATOR); if (fileName) { *fileName=0; fileName++; if (*fileName==0) fileName=NULL; } } switch(fnt) { case GWEN_Gui_FileNameType_OpenFileName: { GtkWidget *dialog; if (!(caption && *caption)) caption=I18N("Open File"); dialog=gtk_file_chooser_dialog_new (caption, NULL, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); if (folder && *folder) gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (dialog), folder); if (fileName && *fileName) gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), fileName); if (gtk_dialog_run(GTK_DIALOG(dialog))==GTK_RESPONSE_ACCEPT) { char *filename; filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); GWEN_Buffer_Reset(pathBuffer); GWEN_Buffer_AppendString(pathBuffer, filename); g_free (filename); gtk_widget_destroy (dialog); free(folder); return 0; } gtk_widget_destroy (dialog); free(folder); return GWEN_ERROR_USER_ABORTED; } case GWEN_Gui_FileNameType_SaveFileName: { GtkWidget *dialog; if (!(caption && *caption)) caption=I18N("Save File"); dialog=gtk_file_chooser_dialog_new (caption, NULL, GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE); if (folder && *folder) gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (dialog), folder); if (fileName && *fileName) gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), fileName); if (gtk_dialog_run(GTK_DIALOG(dialog))==GTK_RESPONSE_ACCEPT) { char *filename; filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); GWEN_Buffer_Reset(pathBuffer); GWEN_Buffer_AppendString(pathBuffer, filename); g_free(filename); gtk_widget_destroy(dialog); free(folder); return 0; } gtk_widget_destroy (dialog); free(folder); return GWEN_ERROR_USER_ABORTED; } case GWEN_Gui_FileNameType_OpenDirectory: { GtkWidget *dialog; if (!(caption && *caption)) caption=I18N("Select Folder"); dialog=gtk_file_chooser_dialog_new (caption, NULL, GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); if (gtk_dialog_run(GTK_DIALOG(dialog))==GTK_RESPONSE_ACCEPT) { char *filename; filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); GWEN_Buffer_Reset(pathBuffer); GWEN_Buffer_AppendString(pathBuffer, filename); g_free (filename); gtk_widget_destroy (dialog); free(folder); return 0; } gtk_widget_destroy (dialog); free(folder); return GWEN_ERROR_USER_ABORTED; } default: break; } free(folder); return GWEN_ERROR_USER_ABORTED; } gwenhywfar-4.15.2beta/gui/gtk2/w_hlayout.c0000644000175000017500000001141512416477066015372 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ static GWENHYWFAR_CB int Gtk2Gui_WHLayout_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE); return 0; case GWEN_DialogProperty_Focus: gtk_widget_grab_focus(GTK_WIDGET(g)); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int Gtk2Gui_WHLayout_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0; case GWEN_DialogProperty_Focus: return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0; return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int Gtk2Gui_WHLayout_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* Gtk2Gui_WHLayout_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int Gtk2Gui_WHLayout_AddChildGuiWidget(GWEN_WIDGET *w, GWEN_WIDGET *wChild) { GtkWidget *g; GtkWidget *gChild; uint32_t cflags; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); gChild=GTK_WIDGET(GWEN_Widget_GetImplData(wChild, GTK2_DIALOG_WIDGET_REAL)); assert(gChild); cflags=GWEN_Widget_GetFlags(wChild); gtk_box_pack_start(GTK_BOX(g), gChild, (cflags & GWEN_WIDGET_FLAGS_FILLX)?TRUE:FALSE, (cflags & GWEN_WIDGET_FLAGS_FILLX)?TRUE:FALSE, 0); return 0; } int Gtk2Gui_WHLayout_Setup(GWEN_WIDGET *w) { GtkWidget *g; uint32_t flags; GWEN_WIDGET *wParent; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); #if 0 /* using equal width here doesn't seem to be working as expected: * I would expect al children be of equal width, but instead all children are * equally distant to each other while still being of different width... */ g=gtk_hbox_new((flags & GWEN_WIDGET_FLAGS_EQUAL_WIDTH)?TRUE:FALSE, GTK2_GUI_DIALOG_DEFAULT_BOX_SPACING); #else g=gtk_hbox_new(FALSE, GTK2_GUI_DIALOG_DEFAULT_BOX_SPACING); #endif GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g); GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WHLayout_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WHLayout_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WHLayout_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WHLayout_GetCharProperty); GWEN_Widget_SetAddChildGuiWidgetFn(w, Gtk2Gui_WHLayout_AddChildGuiWidget); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/gtk2/Makefile.in0000644000175000017500000007144512634022413015251 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = libtest$(EXEEXT) subdir = gui/gtk2 DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(srcdir)/gwengui-gtk2.pc.in $(top_srcdir)/depcomp \ $(iheader_HEADERS) $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = gwengui-gtk2.pc CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" \ "$(DESTDIR)$(iheaderdir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = libgwengui_gtk2_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(top_builddir)/src/$(gwenhywfar_internal_libname) am_libgwengui_gtk2_la_OBJECTS = gtk2_gui_dialog.lo gtk2_gui.lo libgwengui_gtk2_la_OBJECTS = $(am_libgwengui_gtk2_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libgwengui_gtk2_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(libgwengui_gtk2_la_LDFLAGS) \ $(LDFLAGS) -o $@ PROGRAMS = $(noinst_PROGRAMS) am_libtest_OBJECTS = libtest.$(OBJEXT) libtest_OBJECTS = $(am_libtest_OBJECTS) libtest_DEPENDENCIES = libgwengui-gtk2.la $(am__DEPENDENCIES_1) \ $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(builddir)/../testdialogs/libgwengui-test.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgwengui_gtk2_la_SOURCES) $(libtest_SOURCES) DIST_SOURCES = $(libgwengui_gtk2_la_SOURCES) $(libtest_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(pkgconfig_DATA) HEADERS = $(iheader_HEADERS) $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ -DBUILDING_GTK2_GUI -DPACKAGE=\"$(PACKAGE)\" DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = -I$(gwenhywfar_symlinkdir) $(GTK2_CFLAGS) AM_CPPFLAGS = @visibility_cflags@ pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = gwengui-gtk2.pc lib_LTLIBRARIES = libgwengui-gtk2.la libgwengui_gtk2_la_LIBADD = $(GTK2_LIBS) $(top_builddir)/src/$(gwenhywfar_internal_libname) libgwengui_gtk2_la_LDFLAGS = -no-undefined noinst_HEADERS = \ gtk2_gui_p.h \ gtk2_gui_dialog_l.h \ gtk2_gui_dialog_p.h libgwengui_gtk2_la_SOURCES = \ gtk2_gui_dialog.c \ gtk2_gui.c EXTRA_DIST = \ w_combobox.c \ w_label.c \ w_dialog.c \ w_gridlayout.c \ w_groupbox.c \ w_hlayout.c \ w_hline.c \ w_hspacer.c \ w_lineedit.c \ w_vlayout.c \ w_vline.c \ w_vspacer.c \ w_pushbutton.c \ w_textbrowser.c \ w_textedit.c \ w_stack.c \ w_tabbook.c \ w_progressbar.c \ w_listbox.c \ w_checkbox.c \ w_scrollarea.c \ w_radiobutton.c \ w_spinbox.c iheaderdir = ${gwenhywfar_headerdir_am}/gwen-gui-gtk2 iheader_HEADERS = \ gtk2_gui.h libtest_SOURCES = libtest.c libtest_LDADD = libgwengui-gtk2.la $(GTK2_LIBS) $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(builddir)/../testdialogs/libgwengui-test.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gui/gtk2/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gui/gtk2/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): gwengui-gtk2.pc: $(top_builddir)/config.status $(srcdir)/gwengui-gtk2.pc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgwengui-gtk2.la: $(libgwengui_gtk2_la_OBJECTS) $(libgwengui_gtk2_la_DEPENDENCIES) $(EXTRA_libgwengui_gtk2_la_DEPENDENCIES) $(AM_V_CCLD)$(libgwengui_gtk2_la_LINK) -rpath $(libdir) $(libgwengui_gtk2_la_OBJECTS) $(libgwengui_gtk2_la_LIBADD) $(LIBS) clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list libtest$(EXEEXT): $(libtest_OBJECTS) $(libtest_DEPENDENCIES) $(EXTRA_libtest_DEPENDENCIES) @rm -f libtest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(libtest_OBJECTS) $(libtest_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtk2_gui.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtk2_gui_dialog.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtest.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) install-iheaderHEADERS: $(iheader_HEADERS) @$(NORMAL_INSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(iheaderdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(iheaderdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(iheaderdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(iheaderdir)" || exit $$?; \ done uninstall-iheaderHEADERS: @$(NORMAL_UNINSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(iheaderdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(iheaderdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iheaderHEADERS install-pkgconfigDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iheaderHEADERS uninstall-libLTLIBRARIES \ uninstall-pkgconfigDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool clean-noinstPROGRAMS \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-iheaderHEADERS install-info install-info-am \ install-libLTLIBRARIES install-man install-pdf install-pdf-am \ install-pkgconfigDATA install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-iheaderHEADERS \ uninstall-libLTLIBRARIES uninstall-pkgconfigDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/gui/gtk2/w_hspacer.c0000644000175000017500000000515112416477066015332 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ static GWENHYWFAR_CB int Gtk2Gui_WHSpacer_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE); return 0; case GWEN_DialogProperty_Focus: gtk_widget_grab_focus(GTK_WIDGET(g)); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int Gtk2Gui_WHSpacer_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0; case GWEN_DialogProperty_Focus: return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0; return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } int Gtk2Gui_WHSpacer_Setup(GWEN_WIDGET *w) { GtkWidget *g; uint32_t flags; GWEN_WIDGET *wParent; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); g=gtk_hbox_new(FALSE, 0); GWEN_Widget_AddFlags(w, GWEN_WIDGET_FLAGS_FILLX); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g); GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WHSpacer_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WHSpacer_GetIntProperty); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/gtk2/w_listbox.c0000644000175000017500000003325312416477066015375 00000000000000/*************************************************************************** begin : Fri Jul 09 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #define W_LISTBOX_MAX_TYPES 256 static GWENHYWFAR_CB int Gtk2Gui_WListBox_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_CONTENT)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE); return 0; case GWEN_DialogProperty_Focus: gtk_widget_grab_focus(GTK_WIDGET(g)); return 0; case GWEN_DialogProperty_Value: { GtkTreePath *path; path=gtk_tree_path_new_from_indices(value, -1); gtk_tree_view_set_cursor(GTK_TREE_VIEW(g), path, NULL, FALSE); gtk_tree_path_free(path); return 0; } case GWEN_DialogProperty_SelectionMode: { GtkTreeSelection *sel; sel=gtk_tree_view_get_selection(GTK_TREE_VIEW(g)); if (sel) { switch(value) { case GWEN_Dialog_SelectionMode_None: gtk_tree_selection_set_mode(sel, GTK_SELECTION_NONE); return 0; case GWEN_Dialog_SelectionMode_Single: gtk_tree_selection_set_mode(sel, GTK_SELECTION_SINGLE); return 0; case GWEN_Dialog_SelectionMode_Multi: gtk_tree_selection_set_mode(sel, GTK_SELECTION_MULTIPLE); return 0; } DBG_ERROR(GWEN_LOGDOMAIN, "Unknown SelectionMode %d", value); return GWEN_ERROR_INVALID; } break; } case GWEN_DialogProperty_ColumnWidth: { GtkTreeViewColumn *col; col=gtk_tree_view_get_column(GTK_TREE_VIEW(g), index); if (col) { gtk_tree_view_column_set_fixed_width(col, value); return 0; } /* no width */ return GWEN_ERROR_INVALID; } case GWEN_DialogProperty_SortDirection: { GtkTreeViewColumn *col; int i; int cols; /* remove sort indicator from all columns */ cols=GWEN_Widget_GetColumns(w); for (i=0; iW_LISTBOX_MAX_TYPES) cols=W_LISTBOX_MAX_TYPES; for (i=0; idata)); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); cnt++; le=g_list_next(le); } /* while */ GWEN_Widget_SetText(w, GTK2_DIALOG_STRING_TITLE, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); g_list_free(cols); return GWEN_Widget_GetText(w, GTK2_DIALOG_STRING_TITLE); } return defaultValue; } case GWEN_DialogProperty_Value: { GtkTreePath *path; path=gtk_tree_path_new_from_indices(index, -1); if (path!=NULL) { GtkListStore *sto; GtkTreeIter iter; sto=GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(g))); if (gtk_tree_model_get_iter(GTK_TREE_MODEL(sto), &iter, path)) { GList *cols; cols=gtk_tree_view_get_columns(GTK_TREE_VIEW(g)); if (cols) { GList *le; GWEN_BUFFER *tbuf; int cnt=0; tbuf=GWEN_Buffer_new(0, 256, 0, 1); le=g_list_first(cols); while(le) { gchar *s; if (cnt) GWEN_Buffer_AppendByte(tbuf, '\t'); gtk_tree_model_get(GTK_TREE_MODEL(sto), &iter, cnt, &s, -1, NULL); if (s) { GWEN_Buffer_AppendString(tbuf, s); g_free(s); } cnt++; le=g_list_next(le); } /* while */ GWEN_Widget_SetText(w, GTK2_DIALOG_STRING_VALUE, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); g_list_free(cols); return GWEN_Widget_GetText(w, GTK2_DIALOG_STRING_VALUE); } } gtk_tree_path_free(path); } return defaultValue; } default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static void Gtk2Gui_WListBox_CursorChanged_handler(GtkTreeView *g, gpointer data) { GWEN_WIDGET *w; int rv; w=data; assert(w); rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w), GWEN_DialogEvent_TypeActivated, GWEN_Widget_GetName(w)); if (rv==GWEN_DialogEvent_ResultAccept) Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1); else if (rv==GWEN_DialogEvent_ResultReject) Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0); } int Gtk2Gui_WListBox_Setup(GWEN_WIDGET *w) { GtkWidget *g; GtkWidget *gScroll; uint32_t flags; GWEN_WIDGET *wParent; gulong changed_handler_id; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); gScroll=gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(gScroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); g=gtk_tree_view_new(); gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(g), TRUE); gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(g), TRUE); gtk_container_add(GTK_CONTAINER(gScroll), GTK_WIDGET(g)); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) gScroll); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g); GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WListBox_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WListBox_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WListBox_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WListBox_GetCharProperty); changed_handler_id=g_signal_connect(g, "cursor-changed", G_CALLBACK (Gtk2Gui_WListBox_CursorChanged_handler), w); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/gtk2/w_lineedit.c0000644000175000017500000001417412416477066015507 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ static GWENHYWFAR_CB int Gtk2Gui_WLineEdit_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE); return 0; case GWEN_DialogProperty_Focus: gtk_widget_grab_focus(GTK_WIDGET(g)); return 0; case GWEN_DialogProperty_Width: case GWEN_DialogProperty_Height: /* just ignore these for now */ return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int Gtk2Gui_WLineEdit_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0; case GWEN_DialogProperty_Focus: return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0; return 0; case GWEN_DialogProperty_Width: case GWEN_DialogProperty_Height: /* just ignore these for now */ return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int Gtk2Gui_WLineEdit_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Value: gtk_entry_set_text(GTK_ENTRY(g), value); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* Gtk2Gui_WLineEdit_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Value: return gtk_entry_get_text(GTK_ENTRY(g)); default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static void Gtk2Gui_WLineEdit_Deleted_text_handler(GtkEntryBuffer *entrybuffer, guint arg1, guint arg2, gpointer data) { GWEN_WIDGET *w; int rv; w=data; assert(w); rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w), GWEN_DialogEvent_TypeValueChanged, GWEN_Widget_GetName(w)); if (rv==GWEN_DialogEvent_ResultAccept) Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1); else if (rv==GWEN_DialogEvent_ResultReject) Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0); } static void Gtk2Gui_WLineEdit_Inserted_text_handler(GtkEntryBuffer *entrybuffer, guint arg1, gchar *arg2, guint arg3, gpointer data) { GWEN_WIDGET *w; int rv; w=data; assert(w); rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w), GWEN_DialogEvent_TypeValueChanged, GWEN_Widget_GetName(w)); if (rv==GWEN_DialogEvent_ResultAccept) Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1); else if (rv==GWEN_DialogEvent_ResultReject) Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0); } int Gtk2Gui_WLineEdit_Setup(GWEN_WIDGET *w) { GtkWidget *g; const char *s; uint32_t flags; GWEN_WIDGET *wParent; gulong deleted_text_handler_id; gulong inserted_text_handler_id; gboolean text_is_visible; flags=GWEN_Widget_GetFlags(w); text_is_visible = (flags & GWEN_WIDGET_FLAGS_PASSWORD) == 0; wParent=GWEN_Widget_Tree_GetParent(w); s=GWEN_Widget_GetText(w, 0); /* create widget */ g=gtk_entry_new(); if (s && *s) gtk_entry_set_text(GTK_ENTRY(g), s); gtk_entry_set_visibility(GTK_ENTRY(g), text_is_visible); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g); GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WLineEdit_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WLineEdit_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WLineEdit_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WLineEdit_GetCharProperty); deleted_text_handler_id=g_signal_connect(gtk_entry_get_buffer(GTK_ENTRY(g)), "deleted-text", G_CALLBACK (Gtk2Gui_WLineEdit_Deleted_text_handler), w); inserted_text_handler_id=g_signal_connect(gtk_entry_get_buffer(GTK_ENTRY(g)), "inserted-text", G_CALLBACK (Gtk2Gui_WLineEdit_Inserted_text_handler), w); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/gtk2/gtk2_gui_p.h0000644000175000017500000000321312416477066015413 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GTK2_GUI_P_H #define GTK2_GUI_P_H #include "gtk2_gui.h" #include typedef struct GTK2_GUI GTK2_GUI; struct GTK2_GUI { GWEN_GUI_EXEC_DIALOG_FN execDialogFn; GWEN_GUI_OPEN_DIALOG_FN openDialogFn; GWEN_GUI_CLOSE_DIALOG_FN closeDialogFn; GWEN_GUI_RUN_DIALOG_FN runDialogFn; GWEN_GUI_GET_FILENAME_FN getFileNameDialogFn; }; static GWENHYWFAR_CB void Gtk2_Gui_FreeData(void *bp, void *p); static GWENHYWFAR_CB int GTK2_Gui_ExecDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg, uint32_t guiid); static GWENHYWFAR_CB int GTK2_Gui_OpenDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg, uint32_t guiid); static GWENHYWFAR_CB int GTK2_Gui_CloseDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg); static GWENHYWFAR_CB int GTK2_Gui_RunDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg, int timeout); static GWENHYWFAR_CB int GTK2_Gui_GetFileName(GWEN_GUI *gui, const char *caption, GWEN_GUI_FILENAME_TYPE fnt, uint32_t flags, const char *patterns, GWEN_BUFFER *pathBuffer, uint32_t guiid); #endif gwenhywfar-4.15.2beta/gui/gtk2/gtk2_gui_dialog_p.h0000644000175000017500000000340412416477066016734 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GTK2_GUI_DIALOG_P_H #define GTK2_GUI_DIALOG_P_H #include "gtk2_gui_dialog_l.h" typedef struct GTK2_GUI_DIALOG GTK2_GUI_DIALOG; struct GTK2_GUI_DIALOG { GWEN_DIALOG_SETINTPROPERTY_FN setIntPropertyFn; GWEN_DIALOG_GETINTPROPERTY_FN getIntPropertyFn; GWEN_DIALOG_SETCHARPROPERTY_FN setCharPropertyFn; GWEN_DIALOG_GETCHARPROPERTY_FN getCharPropertyFn; GtkWidget *mainWidget; int response; GMainLoop *loop; int destroyed; gulong unmap_handler; gulong destroy_handler; gulong delete_handler; }; static void GWENHYWFAR_CB Gtk2Gui_Dialog_FreeData(void *bp, void *p); static int GWENHYWFAR_CB Gtk2Gui_Dialog_SetIntProperty(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal); static int GWENHYWFAR_CB Gtk2Gui_Dialog_GetIntProperty(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue); static int GWENHYWFAR_CB Gtk2Gui_Dialog_SetCharProperty(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal); static const char * GWENHYWFAR_CB Gtk2Gui_Dialog_GetCharProperty(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue); static int Gtk2Gui_Dialog_SetupTree(GWEN_WIDGET *w); #endif gwenhywfar-4.15.2beta/gui/gtk2/w_vline.c0000644000175000017500000000503212416477066015020 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ static GWENHYWFAR_CB int Gtk2Gui_WVLine_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE); return 0; case GWEN_DialogProperty_Focus: gtk_widget_grab_focus(GTK_WIDGET(g)); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int Gtk2Gui_WVLine_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0; case GWEN_DialogProperty_Focus: return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0; return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } int Gtk2Gui_WVLine_Setup(GWEN_WIDGET *w) { GtkWidget *g; uint32_t flags; GWEN_WIDGET *wParent; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); g=gtk_vseparator_new(); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g); GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WVLine_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WVLine_GetIntProperty); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/gtk2/w_hline.c0000644000175000017500000000503212416477066015002 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ static GWENHYWFAR_CB int Gtk2Gui_WHLine_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE); return 0; case GWEN_DialogProperty_Focus: gtk_widget_grab_focus(GTK_WIDGET(g)); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int Gtk2Gui_WHLine_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0; case GWEN_DialogProperty_Focus: return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0; return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } int Gtk2Gui_WHLine_Setup(GWEN_WIDGET *w) { GtkWidget *g; uint32_t flags; GWEN_WIDGET *wParent; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); g=gtk_hseparator_new(); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g); GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WHLine_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WHLine_GetIntProperty); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/gtk2/w_groupbox.c0000644000175000017500000001210512416477066015547 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ static GWENHYWFAR_CB int Gtk2Gui_WGroupBox_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE); return 0; case GWEN_DialogProperty_Focus: gtk_widget_grab_focus(GTK_WIDGET(g)); return 0; case GWEN_DialogProperty_Width: case GWEN_DialogProperty_Height: /* just ignore these for now */ return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int Gtk2Gui_WGroupBox_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0; case GWEN_DialogProperty_Focus: return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0; return 0; case GWEN_DialogProperty_Width: case GWEN_DialogProperty_Height: /* just ignore these for now */ return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int Gtk2Gui_WGroupBox_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Title: gtk_frame_set_label(GTK_FRAME(g), value); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* Gtk2Gui_WGroupBox_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Title: return gtk_frame_get_label(GTK_FRAME(g)); default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int Gtk2Gui_WGroupBox_AddChildGuiWidget(GWEN_WIDGET *w, GWEN_WIDGET *wChild) { GtkWidget *g; GtkWidget *gChild; uint32_t cflags; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_CONTENT)); assert(g); gChild=GTK_WIDGET(GWEN_Widget_GetImplData(wChild, GTK2_DIALOG_WIDGET_REAL)); assert(gChild); cflags=GWEN_Widget_GetFlags(wChild); gtk_box_pack_start(GTK_BOX(g), gChild, (cflags & GWEN_WIDGET_FLAGS_FILLY)?TRUE:FALSE, (cflags & GWEN_WIDGET_FLAGS_FILLY)?TRUE:FALSE, 0); return 0; } int Gtk2Gui_WGroupBox_Setup(GWEN_WIDGET *w) { GtkWidget *g; GtkWidget *gContent; const char *s; uint32_t flags; GWEN_WIDGET *wParent; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); s=GWEN_Widget_GetText(w, 0); g=gtk_frame_new(s); gContent=gtk_vbox_new(TRUE, GTK2_GUI_DIALOG_DEFAULT_BOX_SPACING); gtk_container_add(GTK_CONTAINER(g), gContent); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) gContent); GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WGroupBox_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WGroupBox_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WGroupBox_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WGroupBox_GetCharProperty); GWEN_Widget_SetAddChildGuiWidgetFn(w, Gtk2Gui_WGroupBox_AddChildGuiWidget); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/gtk2/Makefile.am0000644000175000017500000000227512364015347015243 00000000000000INCLUDES=-I$(gwenhywfar_symlinkdir) $(GTK2_CFLAGS) AM_CPPFLAGS= @visibility_cflags@ DEFS+=-DBUILDING_GTK2_GUI -DPACKAGE=\"$(PACKAGE)\" pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = gwengui-gtk2.pc lib_LTLIBRARIES=libgwengui-gtk2.la libgwengui_gtk2_la_LIBADD=$(GTK2_LIBS) $(top_builddir)/src/$(gwenhywfar_internal_libname) libgwengui_gtk2_la_LDFLAGS = -no-undefined noinst_HEADERS=\ gtk2_gui_p.h \ gtk2_gui_dialog_l.h \ gtk2_gui_dialog_p.h libgwengui_gtk2_la_SOURCES=\ gtk2_gui_dialog.c \ gtk2_gui.c EXTRA_DIST=\ w_combobox.c \ w_label.c \ w_dialog.c \ w_gridlayout.c \ w_groupbox.c \ w_hlayout.c \ w_hline.c \ w_hspacer.c \ w_lineedit.c \ w_vlayout.c \ w_vline.c \ w_vspacer.c \ w_pushbutton.c \ w_textbrowser.c \ w_textedit.c \ w_stack.c \ w_tabbook.c \ w_progressbar.c \ w_listbox.c \ w_checkbox.c \ w_scrollarea.c \ w_radiobutton.c \ w_spinbox.c iheaderdir=${gwenhywfar_headerdir_am}/gwen-gui-gtk2 iheader_HEADERS= \ gtk2_gui.h noinst_PROGRAMS = libtest libtest_SOURCES = libtest.c libtest_LDADD = libgwengui-gtk2.la $(GTK2_LIBS) $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(builddir)/../testdialogs/libgwengui-test.la gwenhywfar-4.15.2beta/gui/gtk2/gwengui-gtk2.pc.in0000644000175000017500000000104412364015347016443 00000000000000# pkg-config configuration for gwengui_gtk2 # For information about the syntax, see pkg-config(1) # General installation directories prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ pkgincludedir=@includedir@/gwenhywfar datarootdir=@datarootdir@ datadir=@datadir@ bindir=@bindir@ sysconfdir=@sysconfdir@ # Human-readable name Name: gwengui-gtk2 # Human-readable description Description: GTK2 Implementation of the GWEN_DIALOG framework. Version: @VERSION@ Libs: -L@libdir@ -lgwengui-gtk2 Cflags: -I@includedir@ gwenhywfar-4.15.2beta/gui/gtk2/w_scrollarea.c0000644000175000017500000001305312416477066016034 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ static GWENHYWFAR_CB int Gtk2Gui_WScrollArea_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { GtkWidget *g; /* text view */ GtkWidget *gs; /* scrollable window */ g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_CONTENT)); assert(g); gs=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(gs); switch(prop) { case GWEN_DialogProperty_Enabled: gtk_widget_set_sensitive(GTK_WIDGET(gs), (value==0)?FALSE:TRUE); return 0; case GWEN_DialogProperty_Focus: gtk_widget_grab_focus(GTK_WIDGET(gs)); return 0; case GWEN_DialogProperty_Width: case GWEN_DialogProperty_Height: /* just ignore these for now */ return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int Gtk2Gui_WScrollArea_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { GtkWidget *g; /* text view */ GtkWidget *gs; /* scrollable window */ g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_CONTENT)); assert(g); gs=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(gs); g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_CONTENT)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: return (gtk_widget_get_sensitive(GTK_WIDGET(gs))==TRUE)?1:0; case GWEN_DialogProperty_Focus: return (gtk_widget_has_focus(GTK_WIDGET(gs))==TRUE)?1:0; return 0; case GWEN_DialogProperty_Width: case GWEN_DialogProperty_Height: /* just ignore these for now */ return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int Gtk2Gui_WScrollArea_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { GtkWidget *g; /* scrollable window */ GtkWidget *gContent; /* vbox */ gContent=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_CONTENT)); assert(gContent); g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* Gtk2Gui_WScrollArea_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { GtkWidget *gs; /* scrollable window */ GtkWidget *g; /* vbox */ g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_CONTENT)); assert(g); gs=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(gs); DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int Gtk2Gui_WScrollArea_AddChildGuiWidget(GWEN_WIDGET *w, GWEN_WIDGET *wChild) { GtkWidget *g; GtkWidget *gChild; uint32_t cflags; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_CONTENT)); assert(g); gChild=GTK_WIDGET(GWEN_Widget_GetImplData(wChild, GTK2_DIALOG_WIDGET_REAL)); assert(gChild); cflags=GWEN_Widget_GetFlags(wChild); gtk_box_pack_start(GTK_BOX(g), gChild, (cflags & GWEN_WIDGET_FLAGS_FILLY)?TRUE:FALSE, (cflags & GWEN_WIDGET_FLAGS_FILLY)?TRUE:FALSE, 0); return 0; } int Gtk2Gui_WScrollArea_Setup(GWEN_WIDGET *w) { GtkWidget *g; GtkWidget *gContent; uint32_t flags; GWEN_WIDGET *wParent; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); /* create widget */ g=gtk_scrolled_window_new(NULL, NULL); gContent=gtk_vbox_new(TRUE, GTK2_GUI_DIALOG_DEFAULT_BOX_SPACING); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(g), gContent); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) gContent); GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WScrollArea_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WScrollArea_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WScrollArea_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WScrollArea_GetCharProperty); GWEN_Widget_SetAddChildGuiWidgetFn(w, Gtk2Gui_WScrollArea_AddChildGuiWidget); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/gtk2/w_tabbook.c0000644000175000017500000001070412416477066015326 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ static GWENHYWFAR_CB int Gtk2Gui_WTabBook_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE); return 0; case GWEN_DialogProperty_Focus: gtk_widget_grab_focus(GTK_WIDGET(g)); return 0; case GWEN_DialogProperty_Value: gtk_notebook_set_current_page(GTK_NOTEBOOK(g), value); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int Gtk2Gui_WTabBook_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0; case GWEN_DialogProperty_Focus: return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0; return 0; case GWEN_DialogProperty_Value: return gtk_notebook_get_current_page(GTK_NOTEBOOK(g)); default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int Gtk2Gui_WTabBook_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* Gtk2Gui_WTabBook_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int Gtk2Gui_WTabBook_AddChildGuiWidget(GWEN_WIDGET *w, GWEN_WIDGET *wChild) { GtkWidget *g; GtkWidget *gChild; const char *s; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); gChild=GTK_WIDGET(GWEN_Widget_GetImplData(wChild, GTK2_DIALOG_WIDGET_REAL)); assert(gChild); s=GWEN_Widget_GetText(wChild, 0); gtk_notebook_append_page(GTK_NOTEBOOK(g), gChild, (s && *s)?gtk_label_new(s):NULL); return 0; } int Gtk2Gui_WTabBook_Setup(GWEN_WIDGET *w) { GtkWidget *g; uint32_t flags; GWEN_WIDGET *wParent; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); g=gtk_notebook_new(); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g); GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WTabBook_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WTabBook_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WTabBook_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WTabBook_GetCharProperty); GWEN_Widget_SetAddChildGuiWidgetFn(w, Gtk2Gui_WTabBook_AddChildGuiWidget); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/gtk2/w_label.c0000644000175000017500000001102012416477066014754 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ static GWENHYWFAR_CB int Gtk2Gui_WLabel_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { GtkLabel *g; g=GTK_LABEL(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE); return 0; case GWEN_DialogProperty_Focus: gtk_widget_grab_focus(GTK_WIDGET(g)); return 0; case GWEN_DialogProperty_Width: case GWEN_DialogProperty_Height: /* just ignore these for now */ return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int Gtk2Gui_WLabel_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { GtkLabel *g; g=GTK_LABEL(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0; case GWEN_DialogProperty_Focus: return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0; return 0; case GWEN_DialogProperty_Width: case GWEN_DialogProperty_Height: /* just ignore these for now */ return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int Gtk2Gui_WLabel_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { GtkLabel *g; GWEN_BUFFER *tbuf; g=GTK_LABEL(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); tbuf=GWEN_Buffer_new(0, 128, 0, 1); if (value && *value) Gtk2Gui_GetRawText(value, tbuf); switch(prop) { case GWEN_DialogProperty_Title: gtk_label_set_text(g, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); GWEN_Buffer_free(tbuf); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* Gtk2Gui_WLabel_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { GtkLabel *g; g=GTK_LABEL(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Title: return gtk_label_get_label(g); default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } int Gtk2Gui_WLabel_Setup(GWEN_WIDGET *w) { GtkWidget *g; const char *s; uint32_t flags; GWEN_WIDGET *wParent; GWEN_BUFFER *tbuf; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); s=GWEN_Widget_GetText(w, 0); tbuf=GWEN_Buffer_new(0, 128, 0, 1); if (s && *s) Gtk2Gui_GetRawText(s, tbuf); g=gtk_label_new(GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g); GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WLabel_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WLabel_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WLabel_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WLabel_GetCharProperty); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/gtk2/w_textedit.c0000644000175000017500000001371212416477066015541 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ static GWENHYWFAR_CB int Gtk2Gui_WTextEdit_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE); return 0; case GWEN_DialogProperty_Focus: gtk_widget_grab_focus(GTK_WIDGET(g)); return 0; case GWEN_DialogProperty_Width: case GWEN_DialogProperty_Height: /* just ignore these for now */ return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int Gtk2Gui_WTextEdit_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0; case GWEN_DialogProperty_Focus: return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0; return 0; case GWEN_DialogProperty_Width: case GWEN_DialogProperty_Height: /* just ignore these for now */ return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int Gtk2Gui_WTextEdit_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Value: { GtkTextBuffer *tb; GtkTextIter endIter; tb=gtk_text_view_get_buffer(GTK_TEXT_VIEW(g)); assert(tb); if (value && *value) gtk_text_buffer_set_text(tb, value, -1); else gtk_text_buffer_set_text(tb, "", -1); gtk_text_buffer_get_end_iter(tb, &endIter); gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(g), &endIter, 0.5, FALSE, 0.0, 0.0); return 0; } default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* Gtk2Gui_WTextEdit_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Value: { GtkTextBuffer *tb; GtkTextIter startIter; GtkTextIter endIter; gchar *s; tb=gtk_text_view_get_buffer(GTK_TEXT_VIEW(g)); assert(tb); gtk_text_buffer_get_start_iter(tb, &startIter); gtk_text_buffer_get_end_iter(tb, &endIter); s=gtk_text_buffer_get_text(tb, &startIter, &endIter, FALSE); if (s) { GWEN_Widget_SetText(w, GTK2_DIALOG_STRING_VALUE, s); g_free(s); return GWEN_Widget_GetText(w, GTK2_DIALOG_STRING_VALUE); } return defaultValue; } default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static void Gtk2Gui_WTextEdit_Changed_handler(GtkTextBuffer *buffer, gpointer data) { GWEN_WIDGET *w; int rv; w=data; assert(w); rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w), GWEN_DialogEvent_TypeValueChanged, GWEN_Widget_GetName(w)); if (rv==GWEN_DialogEvent_ResultAccept) Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1); else if (rv==GWEN_DialogEvent_ResultReject) Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0); } int Gtk2Gui_WTextEdit_Setup(GWEN_WIDGET *w) { GtkWidget *g; const char *s; uint32_t flags; GWEN_WIDGET *wParent; gulong changed_handler_id; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); s=GWEN_Widget_GetText(w, 0); /* create widget */ g=gtk_text_view_new(); if (s && *s) gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(g)), s, -1); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g); GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WTextEdit_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WTextEdit_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WTextEdit_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WTextEdit_GetCharProperty); changed_handler_id=g_signal_connect(gtk_text_view_get_buffer(GTK_TEXT_VIEW(g)), "changed", G_CALLBACK (Gtk2Gui_WTextEdit_Changed_handler), w); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/gtk2/w_vlayout.c0000644000175000017500000001073012416477066015407 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ static GWENHYWFAR_CB int Gtk2Gui_WVLayout_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE); return 0; case GWEN_DialogProperty_Focus: gtk_widget_grab_focus(GTK_WIDGET(g)); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int Gtk2Gui_WVLayout_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0; case GWEN_DialogProperty_Focus: return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0; return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int Gtk2Gui_WVLayout_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* Gtk2Gui_WVLayout_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int Gtk2Gui_WVLayout_AddChildGuiWidget(GWEN_WIDGET *w, GWEN_WIDGET *wChild) { GtkWidget *g; GtkWidget *gChild; uint32_t cflags; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); gChild=GTK_WIDGET(GWEN_Widget_GetImplData(wChild, GTK2_DIALOG_WIDGET_REAL)); assert(gChild); cflags=GWEN_Widget_GetFlags(wChild); gtk_box_pack_start(GTK_BOX(g), gChild, (cflags & GWEN_WIDGET_FLAGS_FILLY)?TRUE:FALSE, (cflags & GWEN_WIDGET_FLAGS_FILLY)?TRUE:FALSE, 0); return 0; } int Gtk2Gui_WVLayout_Setup(GWEN_WIDGET *w) { GtkWidget *g; uint32_t flags; GWEN_WIDGET *wParent; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); g=gtk_vbox_new((flags & GWEN_WIDGET_FLAGS_EQUAL_HEIGHT)?TRUE:FALSE, GTK2_GUI_DIALOG_DEFAULT_BOX_SPACING); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g); GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WVLayout_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WVLayout_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WVLayout_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WVLayout_GetCharProperty); GWEN_Widget_SetAddChildGuiWidgetFn(w, Gtk2Gui_WVLayout_AddChildGuiWidget); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/gtk2/w_vspacer.c0000644000175000017500000000515112416477066015350 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ static GWENHYWFAR_CB int Gtk2Gui_WVSpacer_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE); return 0; case GWEN_DialogProperty_Focus: gtk_widget_grab_focus(GTK_WIDGET(g)); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int Gtk2Gui_WVSpacer_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0; case GWEN_DialogProperty_Focus: return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0; return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } int Gtk2Gui_WVSpacer_Setup(GWEN_WIDGET *w) { GtkWidget *g; uint32_t flags; GWEN_WIDGET *wParent; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); g=gtk_vbox_new(FALSE, 0); GWEN_Widget_AddFlags(w, GWEN_WIDGET_FLAGS_FILLY); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g); GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WVSpacer_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WVSpacer_GetIntProperty); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/gtk2/w_stack.c0000644000175000017500000001130712416477066015012 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ /* * Note: This is a special use case for gtk_notebook. * To use it as a WidgetStack we have to disable drawing od tabs * and borders by calling: * - gtk_notebook_set_show_tabs(GTK_NOTEBOOK(g), FALSE); * - gtk_notebook_set_show_border(GTK_NOTEBOOK(g), FALSE); * */ static GWENHYWFAR_CB int Gtk2Gui_WStack_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE); return 0; case GWEN_DialogProperty_Focus: gtk_widget_grab_focus(GTK_WIDGET(g)); return 0; case GWEN_DialogProperty_Value: gtk_notebook_set_current_page(GTK_NOTEBOOK(g), value); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int Gtk2Gui_WStack_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); switch(prop) { case GWEN_DialogProperty_Enabled: return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0; case GWEN_DialogProperty_Focus: return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0; return 0; case GWEN_DialogProperty_Value: return gtk_notebook_get_current_page(GTK_NOTEBOOK(g)); default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int Gtk2Gui_WStack_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* Gtk2Gui_WStack_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { GtkWidget *g; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int Gtk2Gui_WStack_AddChildGuiWidget(GWEN_WIDGET *w, GWEN_WIDGET *wChild) { GtkWidget *g; GtkWidget *gChild; g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); gChild=GTK_WIDGET(GWEN_Widget_GetImplData(wChild, GTK2_DIALOG_WIDGET_REAL)); assert(gChild); gtk_notebook_append_page(GTK_NOTEBOOK(g), gChild, NULL); return 0; } int Gtk2Gui_WStack_Setup(GWEN_WIDGET *w) { GtkWidget *g; uint32_t flags; GWEN_WIDGET *wParent; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); g=gtk_notebook_new(); gtk_notebook_set_show_tabs(GTK_NOTEBOOK(g), FALSE); gtk_notebook_set_show_border(GTK_NOTEBOOK(g), FALSE); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g); GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WStack_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WStack_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WStack_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WStack_GetCharProperty); GWEN_Widget_SetAddChildGuiWidgetFn(w, Gtk2Gui_WStack_AddChildGuiWidget); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/cocoa/0000755000175000017500000000000012643267242013501 500000000000000gwenhywfar-4.15.2beta/gui/cocoa/CocoaVLayout.h0000644000175000017500000000054212364015347016140 00000000000000// // CocoaVLayout.h // // // Created by Samuel Strupp on 10.08.10. // #import #import "CocoaGwenGUIProtocol.h" @interface CocoaVLayout : NSView { NSMutableArray *subviewsInOrder; BOOL fillX; BOOL fillY; } @property BOOL fillX; @property BOOL fillY; -(void) addLayoutSubview:(NSView*)new_subview ; @end gwenhywfar-4.15.2beta/gui/cocoa/CocoaHLineView.h0000644000175000017500000000042312364015347016365 00000000000000// // CocoaHLineView.h // // // Created by Samuel Strupp on 10.08.10. // #import #import "CocoaGwenGUIProtocol.h" @interface CocoaHLineView : NSView { BOOL fillX; BOOL fillY; } @property BOOL fillX; @property BOOL fillY; @end gwenhywfar-4.15.2beta/gui/cocoa/CocoaVLineView.h0000644000175000017500000000042412364015347016404 00000000000000// // CocoaVLineView.h // // // Created by Samuel Strupp on 10.08.10. // #import #import "CocoaGwenGUIProtocol.h" @interface CocoaVLineView : NSView { BOOL fillX; BOOL fillY; } @property BOOL fillX; @property BOOL fillY; @end gwenhywfar-4.15.2beta/gui/cocoa/CocoaComboBox.h0000644000175000017500000000107412364015347016246 00000000000000// // CocoaComboBox.h // // // Created by Samuel Strupp on 10.08.10. // #ifndef COCOA_COMBOBOX_H #define COCOA_COMBOBOX_H #import #import "CocoaGwenGUIProtocol.h" typedef void (*gwenComboBoxActionPtr)(NSComboBox *comboBox, void* data); @interface CocoaComboBox : NSComboBox { BOOL fillX; BOOL fillY; CGFloat minWidth; gwenComboBoxActionPtr c_actionPtr; void* c_actionData; } @property BOOL fillX; @property BOOL fillY; -(void) setC_ComboBoxActionPtr:(gwenComboBoxActionPtr)ptr Data:(void*)data; @end #endif gwenhywfar-4.15.2beta/gui/cocoa/CocoaGroupBox.h0000644000175000017500000000042012364015347016275 00000000000000// // CocoaGroupBox.h // // // Created by Samuel Strupp on 10.08.10. // #import #import "CocoaGwenGUIProtocol.h" @interface CocoaGroupBox : NSBox { BOOL fillX; BOOL fillY; } @property BOOL fillX; @property BOOL fillY; @end gwenhywfar-4.15.2beta/gui/cocoa/w_vspacer.mm0000644000175000017500000000457512364015347015755 00000000000000/*************************************************************************** begin : Aug 17 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #import "CocoaSpacer.h" static GWENHYWFAR_CB int CocoaGui_WVSpacer_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { CocoaSpacer *vSpacer; vSpacer=(CocoaSpacer*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(vSpacer); switch(prop) { case GWEN_DialogProperty_Enabled: return 0; case GWEN_DialogProperty_Focus: return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int CocoaGui_WVSpacer_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { CocoaSpacer *vSpacer; vSpacer=(CocoaSpacer*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(vSpacer); switch(prop) { case GWEN_DialogProperty_Enabled: return 1; case GWEN_DialogProperty_Focus: return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } int CocoaGui_WVSpacer_Setup(GWEN_WIDGET *w) { CocoaSpacer *vSpacer; uint32_t flags; GWEN_WIDGET *wParent; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); vSpacer = [[[CocoaSpacer alloc] initWithFrame:NSMakeRect(0.0, 0.0, 10.0, 10.0)] autorelease]; GWEN_Widget_AddFlags(w, GWEN_WIDGET_FLAGS_FILLY); vSpacer.fillY = YES; if (flags & GWEN_WIDGET_FLAGS_FILLX) vSpacer.fillX = YES; GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_REAL, (void*) vSpacer); GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_CONTENT, (void*) vSpacer); GWEN_Widget_SetSetIntPropertyFn(w, CocoaGui_WVSpacer_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, CocoaGui_WVSpacer_GetIntProperty); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/cocoa/CocoaLabel.h0000644000175000017500000000056712364015347015563 00000000000000// // CocoaLabel.h // // // Created by Samuel Strupp on 10.08.10. // #ifndef COCOA_LABEL_H #define COCOA_LABEL_H #import #import "CocoaGwenGUIProtocol.h" @interface CocoaLabel : NSTextField { BOOL fillX; BOOL fillY; CGFloat minWidth; } @property BOOL fillX; @property BOOL fillY; -(NSSize) neededTextSize; @end #endif gwenhywfar-4.15.2beta/gui/cocoa/w_combobox.mm0000644000175000017500000002014512364015347016111 00000000000000/*************************************************************************** begin : August 16 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #import "CocoaPopUpButton.h" #import "CocoaComboBox.h" static GWENHYWFAR_CB int CocoaGui_WComboBox_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { CocoaComboBox *comboBox = nil; CocoaPopUpButton *popUp = nil; NSControl *control = (NSControl*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(control); if ([control isKindOfClass:[CocoaComboBox class]]) comboBox = (CocoaComboBox*)control; else popUp = (CocoaPopUpButton*)control; switch(prop) { case GWEN_DialogProperty_Enabled: [control setEnabled:(value!=0)]; return 0; case GWEN_DialogProperty_Focus: [[control window] makeFirstResponder:control]; return 0; case GWEN_DialogProperty_Value: if (comboBox) { [comboBox selectItemAtIndex:value]; } else if (popUp) { [popUp selectItemAtIndex:value]; } return 0; case GWEN_DialogProperty_ClearValues: { if (comboBox) [comboBox removeAllItems]; else if (popUp) [popUp removeAllItems]; return 0; } default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int CocoaGui_WComboBox_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { CocoaComboBox *comboBox = nil; CocoaPopUpButton *popUp = nil; NSControl *control = (NSControl*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(control); if ([control isKindOfClass:[CocoaComboBox class]]) comboBox = (CocoaComboBox*)control; else popUp = (CocoaPopUpButton*)control; switch(prop) { case GWEN_DialogProperty_Enabled: return ([control isEnabled])?1:0; case GWEN_DialogProperty_Focus: if ([control window]) { if ([[control window] firstResponder] == control) return 1; } return 0; case GWEN_DialogProperty_Value: { if (comboBox) { return [comboBox indexOfSelectedItem]; } else if (popUp) { return [popUp indexOfSelectedItem]; } return defaultValue; } case GWEN_DialogProperty_ValueCount: { int i = -1; if (comboBox) { i = [comboBox numberOfItems]; } else if (popUp) { i = [popUp numberOfItems]; } DBG_ERROR(0, "Number: %d", i); return i; } default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int CocoaGui_WComboBox_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { CocoaComboBox *comboBox = nil; CocoaPopUpButton *popUp = nil; NSControl *control = (NSControl*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(control); if ([control isKindOfClass:[CocoaComboBox class]]) comboBox = (CocoaComboBox*)control; else popUp = (CocoaPopUpButton*)control; switch(prop) { case GWEN_DialogProperty_Value: { return GWEN_ERROR_NOT_FOUND; } case GWEN_DialogProperty_AddValue: { NSString *stringValue = [[NSString alloc] initWithCString:value encoding:NSUTF8StringEncoding]; if (popUp && stringValue) { [popUp addItemWithTitle:stringValue]; } else if (comboBox && stringValue) { [comboBox addItemWithObjectValue:stringValue]; } [stringValue release]; return 0; } case GWEN_DialogProperty_ClearValues: { if (comboBox) [comboBox removeAllItems]; else if (popUp) [popUp removeAllItems]; return 0; } default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* CocoaGui_WComboBox_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { CocoaComboBox *comboBox = nil; CocoaPopUpButton *popUp = nil; NSControl *control = (NSControl*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(control); if ([control isKindOfClass:[CocoaComboBox class]]) comboBox = (CocoaComboBox*)control; else popUp = (CocoaPopUpButton*)control; switch(prop) { case GWEN_DialogProperty_Value: { NSString *value = nil; if (popUp) { value = [popUp titleOfSelectedItem]; } else if (comboBox && [[comboBox itemObjectValueAtIndex:index] isKindOfClass:[NSString class]]) { value = [comboBox itemObjectValueAtIndex:index]; } if (value) return [value cStringUsingEncoding:NSUTF8StringEncoding]; return NULL; } default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static void CocoaGui_WComboBox_Changed_handler(NSControl *comboBoxOrPopUp, void* data) { GWEN_WIDGET *w; int rv; DBG_ERROR(0, "Changed"); w=(GWEN_WIDGET*)data; assert(w); rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w), GWEN_DialogEvent_TypeActivated, GWEN_Widget_GetName(w)); if (rv==GWEN_DialogEvent_ResultAccept) CocoaGui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1); else if (rv==GWEN_DialogEvent_ResultReject) CocoaGui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0); } /*static void changed_handler(GtkWidget *comboBox, gpointer data) { GWEN_WIDGET *w; int rv; DBG_ERROR(0, "Changed"); w=data; assert(w); rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w), GWEN_DialogEvent_TypeActivated, GWEN_Widget_GetName(w)); if (rv==GWEN_DialogEvent_ResultAccept) Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1); else if (rv==GWEN_DialogEvent_ResultReject) Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0); }*/ int CocoaGui_WComboBox_Setup(GWEN_WIDGET *w) { // GtkWidget *g; //GtkCellRenderer *cr; //GtkListStore *store; uint32_t flags; GWEN_WIDGET *wParent; //gulong changed_handler_id; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); if (flags & GWEN_WIDGET_FLAGS_READONLY) { //NSPopUpButton CocoaPopUpButton *popUp = [[[CocoaPopUpButton alloc] initWithFrame:NSMakeRect(0.0, 0.0, 60.0, 24.0) pullsDown:NO] autorelease]; if (flags & GWEN_WIDGET_FLAGS_FILLX) popUp.fillX = YES; if (flags & GWEN_WIDGET_FLAGS_FILLY) popUp.fillY = YES; GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_REAL, (void*) popUp); GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_CONTENT, (void*) popUp); gwenPopUpActionPtr ptr = CocoaGui_WComboBox_Changed_handler; [popUp setC_PopUpActionPtr:ptr Data:w]; } else { //NSComboBox CocoaComboBox *comboBox = [[[CocoaComboBox alloc] initWithFrame:NSMakeRect(0.0, 0.0, 60.0, 24.0)] autorelease]; if (flags & GWEN_WIDGET_FLAGS_FILLX) comboBox.fillX = YES; if (flags & GWEN_WIDGET_FLAGS_FILLY) comboBox.fillY = YES; GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_REAL, (void*) comboBox); GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_CONTENT, (void*) comboBox); gwenComboBoxActionPtr ptr = CocoaGui_WComboBox_Changed_handler; [comboBox setC_ComboBoxActionPtr:ptr Data:w]; } GWEN_Widget_SetSetIntPropertyFn(w, CocoaGui_WComboBox_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, CocoaGui_WComboBox_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, CocoaGui_WComboBox_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, CocoaGui_WComboBox_GetCharProperty); #pragma mark NOCH MACHEN Action setzen /*changed_handler_id=g_signal_connect(g, "changed", G_CALLBACK (changed_handler), w);*/ if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/cocoa/w_gridlayout.mm0000644000175000017500000001501712364015347016466 00000000000000/*************************************************************************** begin : August 16 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ /*typedef struct GTK2_GRIDLAYOUT_WIDGET GTK2_GRIDLAYOUT_WIDGET; struct GTK2_GRIDLAYOUT_WIDGET { int sortByRow; int allocatedColumns; int allocatedRows; int currentColumn; int currentRow; };*/ //GWEN_INHERIT(GWEN_WIDGET, GTK2_GRIDLAYOUT_WIDGET) #import "CocoaGridLayout.h" static GWENHYWFAR_CB int CocoaGui_WGridLayout_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { CocoaGridLayout *gridLayout; gridLayout = (CocoaGridLayout*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(gridLayout); switch(prop) { case GWEN_DialogProperty_Enabled: //gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE); return 0; case GWEN_DialogProperty_Focus: //gtk_widget_grab_focus(GTK_WIDGET(g)); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int CocoaGui_WGridLayout_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { CocoaGridLayout *gridLayout; gridLayout = (CocoaGridLayout*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(gridLayout); switch(prop) { case GWEN_DialogProperty_Enabled: //return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0; return 1; case GWEN_DialogProperty_Focus: //return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0; return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int CocoaGui_WGridLayout_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { CocoaGridLayout *gridLayout; gridLayout = (CocoaGridLayout*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(gridLayout); DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* CocoaGui_WGridLayout_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { CocoaGridLayout *gridLayout; gridLayout = (CocoaGridLayout*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(gridLayout); DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int CocoaGui_WGridLayout_AddChildGuiWidget(GWEN_WIDGET *w, GWEN_WIDGET *wChild) { CocoaGridLayout *gridLayout; NSView *childView; uint32_t cflags; gridLayout=(CocoaGridLayout*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(gridLayout); childView=(NSView*)(GWEN_Widget_GetImplData(wChild, COCOA_DIALOG_WIDGET_REAL)); assert(childView); cflags=GWEN_Widget_GetFlags(wChild); [gridLayout addLayoutSubview:childView]; return 0; /* GTK2_GRIDLAYOUT_WIDGET *xw; GtkWidget *g; GtkWidget *gChild; uint32_t cflags; int x; int y; assert(w); xw=GWEN_INHERIT_GETDATA(GWEN_WIDGET, GTK2_GRIDLAYOUT_WIDGET, w); assert(xw); cflags=GWEN_Widget_GetFlags(wChild); g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); assert(g); gChild=GTK_WIDGET(GWEN_Widget_GetImplData(wChild, GTK2_DIALOG_WIDGET_REAL)); assert(gChild); if (xw->sortByRow) { // fill rows, enter next column if column full y=(xw->currentRow)++; if (y>=xw->allocatedRows) { xw->currentRow=0; y=(xw->currentRow)++; xw->currentColumn++; } x=xw->currentColumn; if (x>=xw->allocatedColumns) { xw->allocatedColumns=x+1; gtk_table_resize(GTK_TABLE(g), xw->allocatedRows, xw->allocatedColumns); } } else { // fill columns, enter next row if row full x=(xw->currentColumn)++; if (x>=xw->allocatedColumns) { xw->currentColumn=0; x=(xw->currentColumn)++; xw->currentRow++; } y=xw->currentRow; if (y>=xw->allocatedRows) { xw->allocatedRows=y+1; gtk_table_resize(GTK_TABLE(g), xw->allocatedRows, xw->allocatedColumns); } } gtk_table_attach(GTK_TABLE(g), gChild, x, x+1, y, y+1, (cflags & GWEN_WIDGET_FLAGS_FILLX)?(GTK_FILL|GTK_EXPAND):0, (cflags & GWEN_WIDGET_FLAGS_FILLY)?(GTK_FILL|GTK_EXPAND):0, GTK2_GUI_DIALOG_DEFAULT_BOX_SPACING, GTK2_GUI_DIALOG_DEFAULT_BOX_SPACING);*/ return 0; } /*static GWENHYWFAR_CB void Gtk2Gui_WGridLayout_FreeData(void *bp, void *p) { GTK2_GRIDLAYOUT_WIDGET *xw; xw=(GTK2_GRIDLAYOUT_WIDGET*) p; GWEN_FREE_OBJECT(xw); }*/ int CocoaGui_WGridLayout_Setup(GWEN_WIDGET *w) { CocoaGridLayout *gridLayout; uint32_t flags; GWEN_WIDGET *wParent; //GTK2_GRIDLAYOUT_WIDGET *xw; int rows; int cols; //GWEN_NEW_OBJECT(GTK2_GRIDLAYOUT_WIDGET, xw); //GWEN_INHERIT_SETDATA(GWEN_WIDGET, GTK2_GRIDLAYOUT_WIDGET, w, xw, Gtk2Gui_WGridLayout_FreeData);*/ flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); cols=GWEN_Widget_GetColumns(w); rows=GWEN_Widget_GetRows(w); gridLayout = [[[CocoaGridLayout alloc] initWithFrame:NSMakeRect(10.0, 10.0, 200.0, 200.0)] autorelease]; gridLayout.columns = cols; gridLayout.rows = rows; if (flags & GWEN_WIDGET_FLAGS_FILLX) gridLayout.fillX = YES; if (flags & GWEN_WIDGET_FLAGS_FILLY) gridLayout.fillY = YES; GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_REAL, (void*) gridLayout); GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_CONTENT, (void*) gridLayout); GWEN_Widget_SetSetIntPropertyFn(w, CocoaGui_WGridLayout_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, CocoaGui_WGridLayout_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, CocoaGui_WGridLayout_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, CocoaGui_WGridLayout_GetCharProperty); GWEN_Widget_SetAddChildGuiWidgetFn(w, CocoaGui_WGridLayout_AddChildGuiWidget); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/cocoa/w_scrollarea.mm0000644000175000017500000001175212364015347016434 00000000000000/*************************************************************************** begin : Aug 17 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #import "CocoaScrollBox.h" static GWENHYWFAR_CB int CocoaGui_WScrollArea_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { CocoaScrollBox *scrollView; scrollView = (CocoaScrollBox*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_CONTENT)); assert(scrollView); switch(prop) { case GWEN_DialogProperty_Enabled: return 0; case GWEN_DialogProperty_Focus: return 0; case GWEN_DialogProperty_Width: { NSRect frame = [scrollView frame]; frame.size.width = value; [scrollView setFrame:frame]; } return 0; case GWEN_DialogProperty_Height:{ NSRect frame = [scrollView frame]; frame.size.height = value; [scrollView setFrame:frame]; } return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int CocoaGui_WScrollArea_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { CocoaScrollBox *scrollView; scrollView = (CocoaScrollBox*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_CONTENT)); assert(scrollView); switch(prop) { case GWEN_DialogProperty_Enabled: return 1; case GWEN_DialogProperty_Focus: return 0; case GWEN_DialogProperty_Width: return [scrollView frame].size.width; case GWEN_DialogProperty_Height: return [scrollView frame].size.height; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int CocoaGui_WScrollArea_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { CocoaScrollBox *scrollView; scrollView = (CocoaScrollBox*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_CONTENT)); assert(scrollView); DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* CocoaGui_WScrollArea_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { CocoaScrollBox *scrollView; scrollView = (CocoaScrollBox*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_CONTENT)); assert(scrollView); DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int CocoaGui_WScrollArea_AddChildGuiWidget(GWEN_WIDGET *w, GWEN_WIDGET *wChild) { CocoaScrollBox *scrollView; NSView *childView; uint32_t cflags; scrollView=(CocoaScrollBox*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(scrollView); childView=(NSView*)(GWEN_Widget_GetImplData(wChild, COCOA_DIALOG_WIDGET_REAL)); assert(childView); cflags=GWEN_Widget_GetFlags(wChild); [scrollView setLayoutedDocumentView:childView]; return 0; } int CocoaGui_WScrollArea_Setup(GWEN_WIDGET *w) { //GtkWidget *g; //GtkWidget *gContent; CocoaScrollBox *scrollView; uint32_t flags; GWEN_WIDGET *wParent; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); /* create widget */ /*g=gtk_scrolled_window_new(NULL, NULL); gContent=gtk_vbox_new(TRUE, GTK2_GUI_DIALOG_DEFAULT_BOX_SPACING); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(g), gContent);*/ scrollView = [[[CocoaScrollBox alloc] initWithFrame:NSMakeRect(0.0, 0.0, 100.0, 100.0)] autorelease]; [scrollView setHasVerticalScroller:YES]; [scrollView setHasHorizontalScroller:YES]; [scrollView setAutohidesScrollers:NO]; if (flags & GWEN_WIDGET_FLAGS_FILLX) scrollView.fillX = YES; if (flags & GWEN_WIDGET_FLAGS_FILLY) scrollView.fillY = YES; GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_REAL, (void*) scrollView); GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_CONTENT, (void*) scrollView); GWEN_Widget_SetSetIntPropertyFn(w, CocoaGui_WScrollArea_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, CocoaGui_WScrollArea_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, CocoaGui_WScrollArea_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, CocoaGui_WScrollArea_GetCharProperty); GWEN_Widget_SetAddChildGuiWidgetFn(w, CocoaGui_WScrollArea_AddChildGuiWidget); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/cocoa/CocoaWindowContentView.m0000644000175000017500000001041012364015347020172 00000000000000// // CocoaVLayout.m // // // Created by Samuel Strupp on 10.08.10. // Copyright 2010 Synium Software GmbH. All rights reserved. // #ifdef HAVE_CONFIG_H # include #endif #import "CocoaWindowContentView.h" #import "CocoaGwenGUIProtocol.h" #ifndef COCOA_WINDOW_CONTENT_VIEW_MM #define COCOA_WINDOW_CONTENT_VIEW_MM @implementation CocoaWindowContentView @synthesize fillX; @synthesize fillY; - (id)initWithFrame:(NSRect)frame { self = [super initWithFrame:frame]; if (self) { subviewsInOrder = [[NSMutableArray alloc] init]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(layoutSubviews) name:NSViewFrameDidChangeNotification object:self]; } return self; } -(void) dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; [subviewsInOrder release]; [super dealloc]; } //#define borderDistance 0.0 //#define cellDistance 0.0 -(void) layoutSubviews { NSRect bounds = [self bounds]; NSUInteger numOfSubViews = [subviewsInOrder count]; if (numOfSubViews > 0) { //Prepass to compute the sizes CGFloat sizesHeight[numOfSubViews]; CGFloat sizesWidth[numOfSubViews]; CGFloat exclusiveHeight = 0.0; NSUInteger exclusiveChilds = 0; NSUInteger i; for (i=0; i)subview fillX]) sizesWidth[i] = -1.0; else { CGFloat neededWidth = [()subview minSize].width; sizesWidth[i] = neededWidth; } if ([()subview fillY]) sizesHeight[i] = -1.0; else { CGFloat neededHeight = [()subview minSize].height; sizesHeight[i] = neededHeight; exclusiveHeight += neededHeight; exclusiveChilds++; } } else { sizesWidth[i] = -1.0; sizesHeight[i] = -1.0; } } //Compute standard Sizes for Subviews CGFloat stdHeight = 0.0; if (numOfSubViews > exclusiveChilds) { CGFloat fillHeight = bounds.size.height-exclusiveHeight; stdHeight = (fillHeight/*-(borderDistance+borderDistance)-((numOfSubViews-1)*cellDistance)*/)/(numOfSubViews-exclusiveChilds); } else { CGFloat fillHeight = bounds.size.height; stdHeight = (fillHeight/*-(borderDistance+borderDistance)-((numOfSubViews-1)*cellDistance)*/)/(numOfSubViews); } CGFloat stdWidth = bounds.size.width/*-(borderDistance+borderDistance)*/; //change Subviews Frame NSRect actualFrame = bounds; actualFrame.origin.x = 0.0; //borderDistance; actualFrame.origin.y += bounds.size.height; //-borderDistance; for (i=0; i 0) { NSUInteger i; for (i=0; i)subview minSize]; if (subViewMinSize.width/*+borderWidth*/ > size.width) { size.width = subViewMinSize.width/*+borderWidh*/; } size.height += subViewMinSize.height; //if (i>0) size.height += cellDistance; } } } return size; } /*- (void)setFrame:(NSRect)frameRect { NSSize minSize = [self minSize]; if (frameRect.size.height < minSize.height) { frameRect.size.height = minSize.height; } if (frameRect.size.width < minSize.width) { frameRect.size.width = minSize.width; } [super setFrame:frameRect]; }*/ @end #endif gwenhywfar-4.15.2beta/gui/cocoa/w_stack.mm0000644000175000017500000001206512364015347015410 00000000000000/*************************************************************************** begin : August 19 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ /* * Note: This is a special use case for gtk_notebook. * To use it as a WidgetStack we have to disable drawing od tabs * and borders by calling: * - gtk_notebook_set_show_tabs(GTK_NOTEBOOK(g), FALSE); * - gtk_notebook_set_show_border(GTK_NOTEBOOK(g), FALSE); * */ static GWENHYWFAR_CB int CocoaGui_WStack_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { CocoaTabView *stackView; stackView=(CocoaTabView*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(stackView); switch(prop) { case GWEN_DialogProperty_Enabled: return 0; case GWEN_DialogProperty_Focus: return 0; case GWEN_DialogProperty_Width: { NSRect frame = [stackView frame]; frame.size.width = value; [stackView setFrame:frame]; } return 0; case GWEN_DialogProperty_Height: { NSRect frame = [stackView frame]; frame.size.height = value; [stackView setFrame:frame]; } return 0; case GWEN_DialogProperty_Value: if (value >= 0 && value < [stackView numberOfTabViewItems]) { [stackView selectTabViewItemAtIndex:value]; } return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int CocoaGui_WStack_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { CocoaTabView *stackView; stackView=(CocoaTabView*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(stackView); switch(prop) { case GWEN_DialogProperty_Enabled: return 1; case GWEN_DialogProperty_Focus: return 0; case GWEN_DialogProperty_Width: return [stackView frame].size.width; case GWEN_DialogProperty_Height: return [stackView frame].size.height; case GWEN_DialogProperty_Value: return [stackView indexOfTabViewItem:[stackView selectedTabViewItem]]; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int CocoaGui_WStack_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { CocoaTabView *stackView; stackView=(CocoaTabView*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(stackView); DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* CocoaGui_WStack_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { CocoaTabView *stackView; stackView=(CocoaTabView*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(stackView); DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int CocoaGui_WStack_AddChildGuiWidget(GWEN_WIDGET *w, GWEN_WIDGET *wChild) { CocoaTabView *stackView; stackView=(CocoaTabView*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(stackView); NSView *subview =(NSView*)(GWEN_Widget_GetImplData(wChild, COCOA_DIALOG_WIDGET_REAL)); assert(subview); NSTabViewItem *item = [[NSTabViewItem alloc] init]; [item setView:subview]; [stackView addTabViewItem:item]; [item release]; return 0; } int CocoaGui_WStack_Setup(GWEN_WIDGET *w) { CocoaTabView *stackView; uint32_t flags; GWEN_WIDGET *wParent; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); stackView = [[[CocoaTabView alloc] initWithFrame:NSMakeRect(0.0, 0.0, 100.0, 100.0)] autorelease]; [stackView setTabViewType:NSNoTabsNoBorder]; if (flags & GWEN_WIDGET_FLAGS_FILLX) stackView.fillX = YES; if (flags & GWEN_WIDGET_FLAGS_FILLY) stackView.fillY = YES; GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_REAL, (void*) stackView); GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_CONTENT, (void*) stackView); GWEN_Widget_SetSetIntPropertyFn(w, CocoaGui_WStack_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, CocoaGui_WStack_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, CocoaGui_WStack_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, CocoaGui_WStack_GetCharProperty); GWEN_Widget_SetAddChildGuiWidgetFn(w, CocoaGui_WStack_AddChildGuiWidget); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/cocoa/CocoaProgressbar.m0000644000175000017500000000115312364015347017032 00000000000000// // CocoaProgressbar.m // // // Created by Samuel Strupp on 10.08.10. // #ifdef HAVE_CONFIG_H # include #endif #import "CocoaProgressbar.h" @implementation CocoaProgressbar @synthesize fillX; @synthesize fillY; - (id)initWithFrame:(NSRect)frame { self = [super initWithFrame:frame]; if (self) { // Initialization code here. fillX = NO; fillY = NO; } return self; } -(void) dealloc { [super dealloc]; } #pragma mark Protocoll Methods - (NSSize) minSize { return NSMakeSize(5.0, 20.0); } - (BOOL) fillX { return fillX; } - (BOOL) fillY { return fillY; } @end gwenhywfar-4.15.2beta/gui/cocoa/w_groupbox.mm0000644000175000017500000001312712364015347016150 00000000000000/*************************************************************************** begin : August 16 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #import "CocoaWindowContentView.h" #import "CocoaGroupBox.h" static GWENHYWFAR_CB int CocoaGui_WGroupBox_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { CocoaGroupBox *box; box = (CocoaGroupBox*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(box); switch(prop) { case GWEN_DialogProperty_Enabled: return 0; case GWEN_DialogProperty_Focus: return 0; case GWEN_DialogProperty_Width: { NSRect frame = [box frame]; frame.size.width = value; [box setFrame:frame]; } return 0; case GWEN_DialogProperty_Height: { NSRect frame = [box frame]; frame.size.height = value; [box setFrame:frame]; } return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int CocoaGui_WGroupBox_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { CocoaGroupBox *box; box = (CocoaGroupBox*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(box); switch(prop) { case GWEN_DialogProperty_Enabled: //return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0; return 1; case GWEN_DialogProperty_Focus: //return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0; return 0; case GWEN_DialogProperty_Width: return [box frame].size.width; case GWEN_DialogProperty_Height: return [box frame].size.height; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int CocoaGui_WGroupBox_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { CocoaGroupBox *box; box = (CocoaGroupBox*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(box); switch(prop) { case GWEN_DialogProperty_Title: { NSString *stringValue = [[NSString alloc] initWithCString:value encoding:NSUTF8StringEncoding]; [box setTitle:stringValue]; [stringValue release]; } return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* CocoaGui_WGroupBox_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { CocoaGroupBox *box; box = (CocoaGroupBox*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(box); switch(prop) { case GWEN_DialogProperty_Title: return [[box title] cStringUsingEncoding:NSUTF8StringEncoding]; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int CocoaGui_WGroupBox_AddChildGuiWidget(GWEN_WIDGET *w, GWEN_WIDGET *wChild) { CocoaGroupBox *box; //GtkWidget *gChild; //uint32_t cflags; box = (CocoaGroupBox*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(box); NSView *subview = (NSView*)(GWEN_Widget_GetImplData(wChild, COCOA_DIALOG_WIDGET_REAL)); assert(subview); [(CocoaWindowContentView*)[box contentView] addLayoutSubview:subview]; //cflags=GWEN_Widget_GetFlags(wChild); /*gtk_box_pack_start(GTK_BOX(g), gChild, (cflags & GWEN_WIDGET_FLAGS_FILLY)?TRUE:FALSE, (cflags & GWEN_WIDGET_FLAGS_FILLY)?TRUE:FALSE, 0);*/ return 0; } int CocoaGui_WGroupBox_Setup(GWEN_WIDGET *w) { CocoaGroupBox *box; const char *s; uint32_t flags; GWEN_WIDGET *wParent; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); s=GWEN_Widget_GetText(w, 0); box = [[[CocoaGroupBox alloc] initWithFrame:NSMakeRect(10.0, 10.0, 100.0, 22.0)] autorelease]; if (flags & GWEN_WIDGET_FLAGS_FILLX) box.fillX = YES; if (flags & GWEN_WIDGET_FLAGS_FILLY) box.fillY = YES; CocoaWindowContentView *newContentView = [[CocoaWindowContentView alloc] initWithFrame:[[box contentView] frame]]; [newContentView setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable]; [box setContentView:newContentView]; [newContentView release]; if (s && *s) { NSString *title = [[NSString alloc] initWithCString:s encoding:NSUTF8StringEncoding]; [box setTitle:title]; [title release]; } GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_REAL, (void*) box); GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_CONTENT, (void*) box); GWEN_Widget_SetSetIntPropertyFn(w, CocoaGui_WGroupBox_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, CocoaGui_WGroupBox_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, CocoaGui_WGroupBox_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, CocoaGui_WGroupBox_GetCharProperty); GWEN_Widget_SetAddChildGuiWidgetFn(w, CocoaGui_WGroupBox_AddChildGuiWidget); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/cocoa/w_lineedit.mm0000644000175000017500000001530212364015347016075 00000000000000/*************************************************************************** begin : August 10 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #import "CocoaLineTextField.h" static GWENHYWFAR_CB int CocoaGui_WLineEdit_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { CocoaLineTextField *textField; textField=(CocoaLineTextField*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(textField); switch(prop) { case GWEN_DialogProperty_Enabled: [textField setEnabled:(value==0)?NO:YES]; return 0; case GWEN_DialogProperty_Focus: if ([textField window]) { [[textField window] makeFirstResponder:textField]; } return 0; case GWEN_DialogProperty_Width: { NSRect frame = [textField frame]; frame.size.width = value; [textField setFrame:frame]; } return 0; case GWEN_DialogProperty_Height:{ NSRect frame = [textField frame]; frame.size.height = value; [textField setFrame:frame]; } return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int CocoaGui_WLineEdit_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { CocoaLineTextField *textField; textField=(CocoaLineTextField*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(textField); switch(prop) { case GWEN_DialogProperty_Enabled: return ([textField isEnabled])?1:0; case GWEN_DialogProperty_Focus: if ([textField window]) { if ([[textField window] firstResponder] == textField) return 1; } return 0; case GWEN_DialogProperty_Width: return [textField frame].size.width; case GWEN_DialogProperty_Height: return [textField frame].size.height; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int CocoaGui_WLineEdit_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { CocoaLineTextField *textField; textField=(CocoaLineTextField*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(textField); switch(prop) { case GWEN_DialogProperty_Value:{ NSString *stringValue = [[NSString alloc] initWithCString:value encoding:NSUTF8StringEncoding]; [textField setStringValue:stringValue]; [stringValue release]; } default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* CocoaGui_WLineEdit_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { CocoaLineTextField *textField; textField=(CocoaLineTextField*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(textField); switch(prop) { case GWEN_DialogProperty_Title: return [[textField stringValue] cStringUsingEncoding:NSUTF8StringEncoding]; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static void CocoaGui_WLineEdit_End_Editing_text_handler(NSTextField *textField, void* data) { GWEN_WIDGET *w; int rv; //NSLog(@"CocoaGui_WLineEdit_End_Editing_text_handler"); w=data; assert(w); rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w), GWEN_DialogEvent_TypeActivated, GWEN_Widget_GetName(w)); if (rv==GWEN_DialogEvent_ResultAccept) CocoaGui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1); else if (rv==GWEN_DialogEvent_ResultReject) CocoaGui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0); } static void CocoaGui_WLineEdit_Changed_text_handler(NSTextField *textField, void* data) { GWEN_WIDGET *w; int rv; //NSLog(@"CocoaGui_WLineEdit_Changed_text_handler"); w=data; assert(w); rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w), GWEN_DialogEvent_TypeValueChanged, GWEN_Widget_GetName(w)); if (rv==GWEN_DialogEvent_ResultAccept) CocoaGui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1); else if (rv==GWEN_DialogEvent_ResultReject) CocoaGui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0); } int CocoaGui_WLineEdit_Setup(GWEN_WIDGET *w) { CocoaLineTextField *textField; const char *s; uint32_t flags; GWEN_WIDGET *wParent; //gulong deleted_text_handler_id; //gulong inserted_text_handler_id; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); s=GWEN_Widget_GetText(w, 0); /* create widget */ textField = [[[CocoaLineTextField alloc] initWithFrame:NSMakeRect(10.0, 10.0, 100.0, 22.0)] autorelease]; if (flags & GWEN_WIDGET_FLAGS_FILLX) textField.fillX = YES; if (flags & GWEN_WIDGET_FLAGS_FILLY) textField.fillY = YES; if (flags & GWEN_WIDGET_FLAGS_PASSWORD) { [textField setCell:[[[NSSecureTextFieldCell alloc] init] autorelease]]; [textField setDrawsBackground:YES]; [textField setBezeled:YES]; } //[labelTextField setDrawsBackground:NO]; [[textField cell] setLineBreakMode:NSLineBreakByClipping]; //[[textField cell] setWraps:NO]; //[textField setBordered:YES]; [textField setEditable:YES]; if (s && *s) { NSString *stringValue = [[NSString alloc] initWithCString:s encoding:NSUTF8StringEncoding]; [textField setStringValue:stringValue]; [stringValue release]; } GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_REAL, (void*) textField); GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_CONTENT, (void*) textField); GWEN_Widget_SetSetIntPropertyFn(w, CocoaGui_WLineEdit_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, CocoaGui_WLineEdit_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, CocoaGui_WLineEdit_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, CocoaGui_WLineEdit_GetCharProperty); gwenTextFieldActionPtr ptr = CocoaGui_WLineEdit_End_Editing_text_handler; [textField setC_ActionPtr:ptr Data:w]; gwenTextFieldActionPtr changed_ptr = CocoaGui_WLineEdit_Changed_text_handler; [textField setC_TextChanged_ActionPtr:changed_ptr Data:w]; if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/cocoa/libtest.m0000644000175000017500000001175712364015347015255 00000000000000/*************************************************************************** begin : August 03 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ //#include "../testdialogs/dlg_test.h" #include #include #include #include #include #import #import @interface AppDelegate : NSObject { } - (void)applicationDidFinishLaunching:(NSNotification *)aNotification; @end @implementation AppDelegate -(id) init { self = [super init]; if (self) { } return self; } -(void) dealloc { [super dealloc]; } - (void)windowWillClose:(NSNotification *)notification { [NSApp stop:self]; } - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { NSLog(@"Test"); NSWindow *window = [[NSWindow alloc] initWithContentRect:NSMakeRect(100.0, 100.0, 200.0, 200.0) styleMask:NSTitledWindowMask|NSClosableWindowMask backing:NSBackingStoreBuffered defer:YES]; [window setDelegate:self]; [window makeKeyAndOrderFront:nil]; test1(); } @end int test1() { //fprintf(stderr, "Test\n"); NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSLog(@"Start"); GWEN_GUI *gui; int rv; GWEN_DIALOG *dlg; rv=GWEN_Init(); if (rv) { DBG_ERROR_ERR(0, rv); return 2; } NSLog(@"GWEN Gui initialized"); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Info); //gtk_set_locale (); //gtk_init (&argc, &argv); // create GUI gui=Cocoa_Gui_new(); GWEN_Gui_SetGui(gui); NSLog(@"Cocoa Gui set"); dlg=Dlg_Test1_new(); if (dlg==NULL) { fprintf(stderr, "Could not create dialog.\n"); return 2; } NSLog(@"Test new"); rv=GWEN_Gui_ExecDialog(dlg, 0); fprintf(stderr, "Result: %d\n", rv); /* GWEN_GUI *gui; int rv; GWEN_DIALOG *dlg; rv=GWEN_Init(); if (rv) { DBG_ERROR_ERR(0, rv); return 2; } GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Info); gtk_set_locale (); gtk_init (&argc, &argv); // create GUI gui=Gtk2_Gui_new(); GWEN_Gui_SetGui(gui); dlg=Dlg_Test1_new(); if (dlg==NULL) { fprintf(stderr, "Could not create dialog.\n"); return 2; } rv=GWEN_Gui_ExecDialog(dlg, 0); fprintf(stderr, "Result: %d\n", rv);*/ [pool release]; return 0; } /*int test2(int argc, char **argv) { int rv; uint32_t id1; uint32_t id2; uint64_t i1; uint64_t i2; GWEN_GUI *gui; gtk_set_locale (); gtk_init (&argc, &argv); gui=Gtk2_Gui_new(); GWEN_Gui_SetGui(gui); id1=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_SHOW_ABORT | GWEN_GUI_PROGRESS_KEEP_OPEN, "Progress-Title", "" "

This is an example text..

" "

As you can see colors can " "be used.

" "", 10, 0); for (i1=1; i1<=10; i1++) { char numbuf[128]; snprintf(numbuf, sizeof(numbuf)-1, "Step %d\n", (int)i1); GWEN_Gui_ProgressLog(id1, GWEN_LoggerLevel_Notice, numbuf); id2=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_SHOW_ABORT, "2nd progress", "Starting 2nd progress...", 10, id1); for (i2=1; i2<=10; i2++) { sleep(1); fprintf(stderr, "Advancing %d/%d\n", (int)i1, (int)i2); rv=GWEN_Gui_ProgressAdvance(id2, i2); if (rv==GWEN_ERROR_USER_ABORTED) { fprintf(stderr, "Aborted by user (2)\n"); break; } } GWEN_Gui_ProgressEnd(id2); rv=GWEN_Gui_ProgressAdvance(id1, i1); if (rv==GWEN_ERROR_USER_ABORTED) { fprintf(stderr, "Aborted by user (1)\n"); break; } } GWEN_Gui_ProgressEnd(id1); return 0; }*/ int test3(int argc, char **argv) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSLog(@"Cocoa-Test"); NSString *cocoa_string = @"Das ist ein Cocoa String"; [pool release]; return 0; } int main(int argc, char **argv) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSApplication *app = [NSApplication sharedApplication]; AppDelegate *app_delegate = [[AppDelegate alloc] init]; NSMenu *menu = [[NSMenu alloc] initWithTitle:@"Testprogramm"]; [menu addItemWithTitle:@"Quit" action:@selector(windowWillClose:) keyEquivalent:@"Q"]; [app setDelegate:app_delegate]; [app setMainMenu:menu]; [NSApp run]; [menu release]; [pool release]; //test1(argc, argv); //return test2(argc, argv); //return test3(argc, argv); /*#if 0 GWEN_GUI *gui; gtk_set_locale (); gtk_init (&argc, &argv); gui=Gtk2_Gui_new(); GWEN_Gui_SetGui(gui); return 0; #endif*/ } gwenhywfar-4.15.2beta/gui/cocoa/cocoa_gui_dialog.m0000644000175000017500000002423712364015347017053 00000000000000/*************************************************************************** begin : August 09 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "cocoa_gui_dialog_p.h" #include #include #include #include #include #include #include #include #include #define COCOA_DIALOG_WIDGET_REAL 0 #define COCOA_DIALOG_WIDGET_CONTENT 1 #define COCOA_DIALOG_WIDGET_DATA 2 #define COCOA_DIALOG_STRING_TITLE 0 #define COCOA_DIALOG_STRING_VALUE 1 #include "w_dialog.mm" #include "w_label.mm" #include "w_vlayout.mm" #include "w_hlayout.mm" #include "w_pushbutton.mm" #include "w_lineedit.mm" #include "w_textedit.mm" #include "w_checkbox.mm" #include "w_hline.mm" #include "w_vline.mm" #include "w_progressbar.mm" #include "w_radiobutton.mm" #include "w_tabbook.mm" #include "w_groupbox.mm" #include "w_combobox.mm" #include "w_gridlayout.mm" #include "w_hspacer.mm" #include "w_vspacer.mm" #include "w_listbox.mm" #include "w_scrollarea.mm" #include "w_textbrowser.mm" #include "w_stack.mm" #include "w_spinbox.mm" GWEN_INHERIT(GWEN_DIALOG, COCOA_GUI_DIALOG) void CocoaGui_Dialog_Extend(GWEN_DIALOG *dlg) { COCOA_GUI_DIALOG *xdlg; GWEN_NEW_OBJECT(COCOA_GUI_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, COCOA_GUI_DIALOG, dlg, xdlg, CocoaGui_Dialog_FreeData); // set virtual functions xdlg->setIntPropertyFn=GWEN_Dialog_SetSetIntPropertyFn(dlg, CocoaGui_Dialog_SetIntProperty); xdlg->getIntPropertyFn=GWEN_Dialog_SetGetIntPropertyFn(dlg, CocoaGui_Dialog_GetIntProperty); xdlg->setCharPropertyFn=GWEN_Dialog_SetSetCharPropertyFn(dlg, CocoaGui_Dialog_SetCharProperty); xdlg->getCharPropertyFn=GWEN_Dialog_SetGetCharPropertyFn(dlg, CocoaGui_Dialog_GetCharProperty); } void CocoaGui_Dialog_Unextend(GWEN_DIALOG *dlg){ COCOA_GUI_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, COCOA_GUI_DIALOG, dlg); assert(xdlg); // reset virtual functions GWEN_Dialog_SetSetIntPropertyFn(dlg, xdlg->setIntPropertyFn); GWEN_Dialog_SetGetIntPropertyFn(dlg, xdlg->getIntPropertyFn); GWEN_Dialog_SetSetCharPropertyFn(dlg, xdlg->setCharPropertyFn); GWEN_Dialog_SetGetCharPropertyFn(dlg, xdlg->getCharPropertyFn); GWEN_INHERIT_UNLINK(GWEN_DIALOG, COCOA_GUI_DIALOG, dlg); } void GWENHYWFAR_CB CocoaGui_Dialog_FreeData(void *bp, void *p) { COCOA_GUI_DIALOG *xdlg; xdlg=(COCOA_GUI_DIALOG*) p; if (xdlg->mainWindow) { NSWindow *window = (xdlg->mainWindow); [window release]; xdlg->mainWindow = nil; } GWEN_FREE_OBJECT(xdlg); } CocoaWindow *CocoaGui_Dialog_GetMainWidget(const GWEN_DIALOG *dlg) { COCOA_GUI_DIALOG *xdlg; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, COCOA_GUI_DIALOG, dlg); assert(xdlg); return xdlg->mainWindow; } int CocoaGui_Dialog_SetIntProperty(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { return GWEN_Widget_SetIntProperty(w, prop, index, value, doSignal); } int CocoaGui_Dialog_GetIntProperty(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { return GWEN_Widget_GetIntProperty(w, prop, index, defaultValue); } int CocoaGui_Dialog_SetCharProperty(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { return GWEN_Widget_SetCharProperty(w, prop, index, value, doSignal); } const char *CocoaGui_Dialog_GetCharProperty(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { return GWEN_Widget_GetCharProperty(w, prop, index, defaultValue); } int CocoaGui_Dialog_Setup(GWEN_DIALOG *dlg, NSWindow *parentWindow) { COCOA_GUI_DIALOG *xdlg; GWEN_WIDGET_TREE *wtree; GWEN_WIDGET *w; int rv; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, COCOA_GUI_DIALOG, dlg); assert(xdlg); wtree=GWEN_Dialog_GetWidgets(dlg); if (wtree==NULL) { DBG_ERROR(0, "No widget tree in dialog"); return GWEN_ERROR_NOT_FOUND; } w=GWEN_Widget_Tree_GetFirst(wtree); if (w==NULL) { DBG_ERROR(0, "No widgets in dialog"); return GWEN_ERROR_NOT_FOUND; } rv=CocoaGui_Dialog_SetupTree(w); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } xdlg->mainWindow=(CocoaWindow*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); return 0; } void CocoaGui_Dialog_Leave(GWEN_DIALOG *dlg, int result) { COCOA_GUI_DIALOG *xdlg; GWEN_DIALOG *parent; // get toplevel dialog, the one which actually is the GUI dialog while( (parent=GWEN_Dialog_GetParentDialog(dlg)) ) dlg=parent; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, COCOA_GUI_DIALOG, dlg); assert(xdlg); //xdlg->response=result; /*if (g_main_loop_is_running(xdlg->loop)) g_main_loop_quit(xdlg->loop);*/ if (xdlg->mainWindow) { [NSApp abortModal]; [xdlg->mainWindow close]; } } /*static void run_unmap_handler (NSWindow *window, void* data){ GWEN_DIALOG *dlg; COCOA_GUI_DIALOG *xdlg; dlg=data; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, COCOA_GUI_DIALOG, dlg); assert(xdlg); DBG_ERROR(0, "here"); CocoaGui_Dialog_Leave(dlg, 0); } static int run_delete_handler(NSWindow *window, void* data){ GWEN_DIALOG *dlg; COCOA_GUI_DIALOG *xdlg; dlg=data; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, COCOA_GUI_DIALOG, dlg); assert(xdlg); DBG_ERROR(0, "here"); CocoaGui_Dialog_Leave(dlg, 0); return TRUE; // Do not destroy } static void run_destroy_handler(NSWindow *window, void* data) { GWEN_DIALOG *dlg; COCOA_GUI_DIALOG *xdlg; dlg=data; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, COCOA_GUI_DIALOG, dlg); assert(xdlg); DBG_ERROR(0, "Destroyed"); xdlg->destroyed=1; }*/ int Cocoa_Gui_Dialog_Run(GWEN_DIALOG *dlg, int untilEnd) { COCOA_GUI_DIALOG *xdlg; CocoaWindow *g; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, COCOA_GUI_DIALOG, dlg); assert(xdlg); g=CocoaGui_Dialog_GetMainWidget(dlg); if (g==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No main widget"); CocoaGui_Dialog_Unextend(dlg); return GWEN_ERROR_INVALID; } if (untilEnd) { [NSApp runModalForWindow:g]; } else { NSModalSession session = [NSApp beginModalSessionForWindow:g]; for (;;) { if ([NSApp runModalSession:session] != NSRunContinuesResponse) break; } [NSApp endModalSession:session]; } /* xdlg->unmap_handler = g_signal_connect(g, "unmap", G_CALLBACK (run_unmap_handler), dlg); xdlg->delete_handler = g_signal_connect(g, "delete-event", G_CALLBACK (run_delete_handler), dlg); xdlg->destroy_handler = g_signal_connect(g, "destroy", G_CALLBACK (run_destroy_handler), dlg);*/ //xdlg->loop=g_main_loop_new(NULL, FALSE); /*if (untilEnd) g_main_loop_run(xdlg->loop); else { GMainContext *ctx; ctx=g_main_loop_get_context(xdlg->loop); while(g_main_context_pending(ctx)) g_main_context_iteration(ctx, FALSE); } g_main_loop_unref(xdlg->loop); if (!xdlg->destroyed) { g_signal_handler_disconnect(g, xdlg->unmap_handler); g_signal_handler_disconnect(g, xdlg->delete_handler); g_signal_handler_disconnect(g, xdlg->destroy_handler); } return xdlg->response;*/ return 0; } int CocoaGui_Dialog_SetupTree(GWEN_WIDGET *w) { int rv; switch(GWEN_Widget_GetType(w)) { case GWEN_Widget_TypeDialog: rv=CocoaGui_WDialog_Setup(w); break; case GWEN_Widget_TypeLabel: rv=CocoaGui_WLabel_Setup(w); break; case GWEN_Widget_TypeVLayout: rv=CocoaGui_WVLayout_Setup(w); break; case GWEN_Widget_TypePushButton: rv=CocoaGui_WPushButton_Setup(w); break; case GWEN_Widget_TypeHLayout: rv=CocoaGui_WHLayout_Setup(w); break; case GWEN_Widget_TypeLineEdit: rv=CocoaGui_WLineEdit_Setup(w); break; case GWEN_Widget_TypeTextEdit: rv=CocoaGui_WTextEdit_Setup(w); break; case GWEN_Widget_TypeCheckBox: rv=CocoaGui_WCheckBox_Setup(w); break; case GWEN_Widget_TypeHLine: rv=CocoaGui_WHLine_Setup(w); break; case GWEN_Widget_TypeVLine: rv=CocoaGui_WVLine_Setup(w); break; case GWEN_Widget_TypeProgressBar: rv=CocoaGui_WProgressBar_Setup(w); break; case GWEN_Widget_TypeRadioButton: rv=CocoaGui_WRadioButton_Setup(w); break; case GWEN_Widget_TypeTabBook: rv=CocoaGui_WTabBook_Setup(w); break; case GWEN_Widget_TypeTabPage: // just re-use vbox GWEN_Widget_AddFlags(w, GWEN_WIDGET_FLAGS_FILLX | GWEN_WIDGET_FLAGS_FILLY); rv=CocoaGui_WVLayout_Setup(w); break; case GWEN_Widget_TypeGroupBox: rv=CocoaGui_WGroupBox_Setup(w); break; case GWEN_Widget_TypeComboBox: rv=CocoaGui_WComboBox_Setup(w); break; case GWEN_Widget_TypeGridLayout: rv=CocoaGui_WGridLayout_Setup(w); break; case GWEN_Widget_TypeHSpacer: rv=CocoaGui_WHSpacer_Setup(w); break; case GWEN_Widget_TypeVSpacer: rv=CocoaGui_WVSpacer_Setup(w); break; case GWEN_Widget_TypeListBox: rv=CocoaGui_WListBox_Setup(w); break; case GWEN_Widget_TypeScrollArea: rv=CocoaGui_WScrollArea_Setup(w); break; case GWEN_Widget_TypeTextBrowser: rv=CocoaGui_WTextBrowser_Setup(w); break; case GWEN_Widget_TypeWidgetStack: rv=CocoaGui_WStack_Setup(w); break; case GWEN_Widget_TypeSpinBox: rv=CocoaGui_WSpinBox_Setup(w); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Unhandled widget type %d", GWEN_Widget_GetType(w)); rv=GWEN_ERROR_INVALID; break; } if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } else { GWEN_WIDGET *wChild; // handle children wChild=GWEN_Widget_Tree_GetFirstChild(w); while(wChild) { // recursion rv=CocoaGui_Dialog_SetupTree(wChild); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } wChild=GWEN_Widget_Tree_GetNext(wChild); } } return 0; } gwenhywfar-4.15.2beta/gui/cocoa/w_hlayout.mm0000644000175000017500000001151112364015347015763 00000000000000/*************************************************************************** begin : August 10 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #import "CocoaHLayout.h" static GWENHYWFAR_CB int CocoaGui_WHLayout_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { CocoaHLayout *hlayout; hlayout=(CocoaHLayout*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(hlayout); switch(prop) { case GWEN_DialogProperty_Enabled: //gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE); return 0; case GWEN_DialogProperty_Focus: //gtk_widget_grab_focus(GTK_WIDGET(g)); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int CocoaGui_WHLayout_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { CocoaHLayout *hlayout; hlayout=(CocoaHLayout*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(hlayout); switch(prop) { case GWEN_DialogProperty_Enabled: //return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0; return 1; case GWEN_DialogProperty_Focus: //return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0; return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int CocoaGui_WHLayout_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { /*CocoaHLayout *hlayout; hlayout=(CocoaHLayout*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(hlayout);*/ DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* CocoaGui_WHLayout_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { /*CocoaHLayout *hlayout; hlayout=(CocoaHLayout*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(hlayout);*/ DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int CocoaGui_WHLayout_AddChildGuiWidget(GWEN_WIDGET *w, GWEN_WIDGET *wChild) { CocoaHLayout *hlayout; NSView *childView; uint32_t cflags; hlayout=(CocoaHLayout*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(hlayout); childView=(NSView*)(GWEN_Widget_GetImplData(wChild, COCOA_DIALOG_WIDGET_REAL)); assert(childView); cflags=GWEN_Widget_GetFlags(wChild); [hlayout addLayoutSubview:childView]; /*gtk_box_pack_start(GTK_BOX(g), gChild, (cflags & GWEN_WIDGET_FLAGS_FILLX)?TRUE:FALSE, (cflags & GWEN_WIDGET_FLAGS_FILLX)?TRUE:FALSE, 0);*/ return 0; } int CocoaGui_WHLayout_Setup(GWEN_WIDGET *w) { CocoaHLayout *hlayout; uint32_t flags; GWEN_WIDGET *wParent; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); hlayout = [[[CocoaHLayout alloc] initWithFrame:NSMakeRect(10.0, 10.0, 200.0, 200.0)] autorelease]; if (flags & GWEN_WIDGET_FLAGS_FILLX) hlayout.fillX = YES; if (flags & GWEN_WIDGET_FLAGS_FILLY) hlayout.fillY = YES; /*#if 0 // using equal width here doesn't seem to be working as expected: // I would expect al children be of equal width, but instead all children are // equally distant to each other while still being of different width... // g=gtk_hbox_new((flags & GWEN_WIDGET_FLAGS_EQUAL_WIDTH)?TRUE:FALSE, GTK2_GUI_DIALOG_DEFAULT_BOX_SPACING); #else g=gtk_hbox_new(FALSE, GTK2_GUI_DIALOG_DEFAULT_BOX_SPACING); #endif*/ GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_REAL, (void*) hlayout); GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_CONTENT, (void*) hlayout); GWEN_Widget_SetSetIntPropertyFn(w, CocoaGui_WHLayout_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, CocoaGui_WHLayout_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, CocoaGui_WHLayout_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, CocoaGui_WHLayout_GetCharProperty); GWEN_Widget_SetAddChildGuiWidgetFn(w, CocoaGui_WHLayout_AddChildGuiWidget); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/cocoa/CocoaGridLayout.h0000644000175000017500000000070712364015347016623 00000000000000// // CocoaGridLayout.h // // // Created by Samuel Strupp on 10.08.10. // #import #import "CocoaGwenGUIProtocol.h" @interface CocoaGridLayout : NSView { NSMutableArray *subviewsInOrder; BOOL fillX; BOOL fillY; NSInteger columns; NSInteger rows; } @property BOOL fillX; @property BOOL fillY; @property NSInteger columns; @property NSInteger rows; -(void) addLayoutSubview:(NSView*)new_subview ; @end gwenhywfar-4.15.2beta/gui/cocoa/CocoaScrollBox.m0000644000175000017500000000413112364015347016447 00000000000000// // CocoaScrollBox.m // // // Created by Samuel Strupp on 17.08.10. // #ifdef HAVE_CONFIG_H # include #endif #import "CocoaScrollBox.h" #ifndef COCOA_SCROLL_BOX_M #define COCOA_SCROLL_BOX_M @implementation CocoaScrollBox @synthesize fillX; @synthesize fillY; - (id)initWithFrame:(NSRect)frame { self = [super initWithFrame:frame]; if (self) { fillX = NO; fillY = NO; //subviewsInOrder = [[NSMutableArray alloc] init]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(layoutSubviews) name:NSViewFrameDidChangeNotification object:self]; } return self; } -(void) dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; //[subviewsInOrder release]; [super dealloc]; } /*- (void)drawRect:(NSRect)dirtyRect { //debug colors [[NSColor greenColor] set]; NSRectFill(dirtyRect); }*/ #define borderDistance 8.0 #define cellDistance 4.0 -(void) layoutSubviews { NSView *documentView = [self documentView]; if (documentView && [documentView conformsToProtocol:@protocol(CocoaGwenGUIProtocol)]) { NSSize neededMinSize = [()documentView minSize]; NSSize contentSize = [self contentSize]; NSRect newFrame = NSMakeRect(0.0, 0.0, neededMinSize.width, neededMinSize.height); if ([()documentView fillX] && neededMinSize.width < contentSize.width) newFrame.size.width = contentSize.width; if ([()documentView fillY] && neededMinSize.height < contentSize.height) newFrame.size.height = contentSize.height; [documentView setFrame:newFrame]; } } -(void) setLayoutedDocumentView:(NSView*)new_documentView { [self setDocumentView:new_documentView]; [self layoutSubviews]; } #pragma mark Protocoll Methods - (NSSize) minSize { return NSMakeSize(50.0, 50.0); } /*- (void)setFrame:(NSRect)frameRect { NSSize minSize = [self minSize]; if (frameRect.size.height < minSize.height) { frameRect.size.height = minSize.height; } if (frameRect.size.width < minSize.width) { frameRect.size.width = minSize.width; } [super setFrame:frameRect]; }*/ @end #endif gwenhywfar-4.15.2beta/gui/cocoa/CocoaLineTextField.m0000644000175000017500000000310012364015347017233 00000000000000// // CocoaLineTextField.m // // // Created by Samuel Strupp on 10.08.10. // #ifdef HAVE_CONFIG_H # include #endif #import "CocoaLineTextField.h" #ifndef COCOA_LINE_TEXTFIELD_MM #define COCOA_LINE_TEXTFIELD_MM @implementation CocoaLineTextField - (id)initWithFrame:(NSRect)frame { self = [super initWithFrame:frame]; if (self) { [self setTarget:self]; [self setAction:@selector(textChanged:)]; c_actionPtr = nil; c_actionData = nil; minWidth = 32.0; c_textChangedActionPtr = nil; c_textChangedActionData = nil; } return self; } -(void) dealloc { [super dealloc]; } -(void) computeMinWidth { NSSize size = [self neededTextSize]; if (size.width > 32.0) minWidth = size.width; else minWidth = 32.0; } -(void) setC_ActionPtr:(gwenTextFieldActionPtr)ptr Data:(void*)data { c_actionPtr = ptr; c_actionData = data; } -(void) setC_TextChanged_ActionPtr:(gwenTextFieldActionPtr)ptr Data:(void*)data { c_textChangedActionPtr = ptr; c_textChangedActionData = data; } -(void) textChanged:(id)sender { if (c_actionPtr) { c_actionPtr(self, c_actionData); } } - (void)textDidChange:(NSNotification *)aNotification { //NSLog(@"textDidChange"); if (c_textChangedActionPtr) { c_textChangedActionPtr(self, c_textChangedActionData); } [super textDidChange:aNotification]; } - (void)setStringValue:(NSString *)aString { [super setStringValue:aString]; //damit hebeln wir die automatische Größen Berechnung vom CocoaLabel aus. } #pragma mark Protocoll Methods - (NSSize) minSize { return NSMakeSize(minWidth, 22.0); } @end #endif gwenhywfar-4.15.2beta/gui/cocoa/w_vlayout.mm0000644000175000017500000001236312364015347016007 00000000000000/*************************************************************************** begin : August 10 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #import "CocoaVLayout.h" static GWENHYWFAR_CB int CocoaGui_WVLayout_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { CocoaVLayout *vlayout; vlayout=(CocoaVLayout*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(vlayout); switch(prop) { case GWEN_DialogProperty_Enabled: //gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE); return 0; case GWEN_DialogProperty_Focus: //gtk_widget_grab_focus(GTK_WIDGET(g)); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int CocoaGui_WVLayout_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { CocoaVLayout *vlayout; vlayout=(CocoaVLayout*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(vlayout); switch(prop) { case GWEN_DialogProperty_Enabled: //return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0; return 1; case GWEN_DialogProperty_Focus: //return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0; return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int CocoaGui_WVLayout_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { /*CocoaVLayout *vlayout; vlayout=(CocoaVLayout*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(vlayout);*/ DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* CocoaGui_WVLayout_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { /*CocoaVLayout *vlayout; vlayout=(CocoaVLayout*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(vlayout);*/ DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int CocoaGui_WVLayout_AddChildGuiWidget(GWEN_WIDGET *w, GWEN_WIDGET *wChild) { CocoaVLayout *vlayout; NSView *childView; uint32_t cflags; vlayout=(CocoaVLayout*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(vlayout); childView=(NSView*)(GWEN_Widget_GetImplData(wChild, COCOA_DIALOG_WIDGET_REAL)); assert(childView); cflags=GWEN_Widget_GetFlags(wChild); [vlayout addLayoutSubview:childView]; //Noch richtig implementieren /* gtk_box_pack_start(GTK_BOX(g), gChild, (cflags & GWEN_WIDGET_FLAGS_FILLY)?TRUE:FALSE, (cflags & GWEN_WIDGET_FLAGS_FILLY)?TRUE:FALSE, 0);*/ return 0; } int CocoaGui_WVLayout_Setup(GWEN_WIDGET *w) { /*GtkWidget *g; uint32_t flags; GWEN_WIDGET *wParent; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); g=gtk_vbox_new((flags & GWEN_WIDGET_FLAGS_EQUAL_HEIGHT)?TRUE:FALSE, GTK2_GUI_DIALOG_DEFAULT_BOX_SPACING); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g); GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g); GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WVLayout_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WVLayout_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WVLayout_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WVLayout_GetCharProperty); GWEN_Widget_SetAddChildGuiWidgetFn(w, Gtk2Gui_WVLayout_AddChildGuiWidget); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w);*/ CocoaVLayout *vlayout; uint32_t flags; GWEN_WIDGET *wParent; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); vlayout = [[[CocoaVLayout alloc] initWithFrame:NSMakeRect(10.0, 10.0, 200.0, 200.0)] autorelease]; if (flags & GWEN_WIDGET_FLAGS_FILLX) vlayout.fillX = YES; if (flags & GWEN_WIDGET_FLAGS_FILLY) vlayout.fillY = YES; GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_REAL, (void*) vlayout); GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_CONTENT, (void*) vlayout); GWEN_Widget_SetSetIntPropertyFn(w, CocoaGui_WVLayout_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, CocoaGui_WVLayout_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, CocoaGui_WVLayout_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, CocoaGui_WVLayout_GetCharProperty); GWEN_Widget_SetAddChildGuiWidgetFn(w, CocoaGui_WVLayout_AddChildGuiWidget); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/cocoa/w_pushbutton.mm0000644000175000017500000001511012364015347016510 00000000000000/*************************************************************************** begin : August 10 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #import "CocoaButton.h" static GWENHYWFAR_CB int CocoaGui_WPushButton_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { CocoaButton *button; button=(CocoaButton*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(button); switch(prop) { case GWEN_DialogProperty_Enabled: [button setEnabled:(value==0)?NO:YES]; return 0; case GWEN_DialogProperty_Focus: if ([button window]) { [[button window] makeFirstResponder:button]; } return 0; case GWEN_DialogProperty_Width: { NSRect frame = [button frame]; frame.size.width = value; [button setFrame:frame]; } return 0; case GWEN_DialogProperty_Height: { NSRect frame = [button frame]; frame.size.height = value; [button setFrame:frame]; } return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int CocoaGui_WPushButton_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { CocoaButton *button; button=(CocoaButton*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(button); switch(prop) { case GWEN_DialogProperty_Enabled: return ([button isEnabled]==YES)?1:0; case GWEN_DialogProperty_Focus: if ([button window]) { if ([[button window] firstResponder] == button) return 1; } return 0; case GWEN_DialogProperty_Width: return [button frame].size.width; case GWEN_DialogProperty_Height: return [button frame].size.height; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int CocoaGui_WPushButton_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { CocoaButton *button; button=(CocoaButton*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(button); switch(prop) { case GWEN_DialogProperty_Title: { NSString *stringValue = [[NSString alloc] initWithCString:value encoding:NSUTF8StringEncoding]; [button setTitle:stringValue]; [stringValue release]; } return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* CocoaGui_WPushButton_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { CocoaButton *button; button=(CocoaButton*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(button); switch(prop) { case GWEN_DialogProperty_Title: return [[button stringValue] cStringUsingEncoding:NSUTF8StringEncoding]; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static void CocoaGui_WPushButton_Clicked_handler(NSButton *button, void* data) { GWEN_WIDGET *w; int rv; DBG_ERROR(0, "Clicked"); w=(GWEN_WIDGET*)data; assert(w); rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w), GWEN_DialogEvent_TypeActivated, GWEN_Widget_GetName(w)); if (rv==GWEN_DialogEvent_ResultAccept) CocoaGui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1); else if (rv==GWEN_DialogEvent_ResultReject) CocoaGui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0); } int CocoaGui_WPushButton_Setup(GWEN_WIDGET *w) { CocoaButton *button; const char *s; uint32_t flags; GWEN_WIDGET *wParent; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); s=GWEN_Widget_GetText(w, 0); //Create Button button = [[[CocoaButton alloc] initWithFrame:NSMakeRect(0.0, 0.0, 60.0, 24.0)] autorelease]; if (flags & GWEN_WIDGET_FLAGS_FILLX) button.fillX = YES; if (flags & GWEN_WIDGET_FLAGS_FILLY) button.fillY = YES; [button setBezelStyle:NSRoundedBezelStyle]; if (s && *s) { NSString *title = [[NSString alloc] initWithCString:s encoding:NSUTF8StringEncoding]; [button setTitle:title]; [title release]; } s=GWEN_Widget_GetIconFileName(w); if (s && *s) { GWEN_STRINGLIST *sl; sl=GWEN_Dialog_GetMediaPaths(GWEN_Widget_GetDialog(w)); if (sl) { int rv; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Directory_FindFileInPaths(sl, s, tbuf); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Image file [%s] not found (%d)", s, rv); // ignore result here, instead create GtkImage with "broken mage" later } else { NSString *pathToIconFile = [[NSString alloc] initWithCString:GWEN_Buffer_GetStart(tbuf) encoding:NSUTF8StringEncoding]; if (pathToIconFile) { NSImage *icon = [[NSImage alloc] initWithContentsOfFile:pathToIconFile]; CGFloat height = 15.0; NSSize imageSize = [icon size]; imageSize.width = round(imageSize.width/(imageSize.height/height)); imageSize.height = 15.0; [icon setSize:imageSize]; [pathToIconFile release]; if (icon) { //[button setBezelStyle:NSRegularSquareBezelStyle]; [button setImage:icon]; [button setImagePosition:NSImageLeft]; //[[button cell] setImageScaling:NSImageScaleProportionallyUpOrDown]; [icon release]; } } } GWEN_Buffer_free(tbuf); } } GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_REAL, (void*) button); GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_CONTENT, (void*) button); GWEN_Widget_SetSetIntPropertyFn(w, CocoaGui_WPushButton_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, CocoaGui_WPushButton_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, CocoaGui_WPushButton_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, CocoaGui_WPushButton_GetCharProperty); gwenActionPtr ptr = CocoaGui_WPushButton_Clicked_handler; [button setC_ActionPtr:ptr Data:w]; if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/cocoa/w_checkbox.mm0000644000175000017500000001332712364015347016073 00000000000000/*************************************************************************** begin : Aug 10 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #import "CocoaCheckboxButton.h" static GWENHYWFAR_CB int CocoaGui_WCheckBox_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { CocoaCheckboxButton *checkbox; checkbox = (CocoaCheckboxButton*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(checkbox); switch(prop) { case GWEN_DialogProperty_Enabled: [checkbox setEnabled:(value==0)?NO:YES]; return 0; case GWEN_DialogProperty_Focus: if ([checkbox window]) { [[checkbox window] makeFirstResponder:checkbox]; } return 0; case GWEN_DialogProperty_Width: { NSRect frame = [checkbox frame]; frame.size.width = value; [checkbox setFrame:frame]; } return 0; case GWEN_DialogProperty_Height: { NSRect frame = [checkbox frame]; frame.size.height = value; [checkbox setFrame:frame]; } return 0; case GWEN_DialogProperty_Value:{ if (value==0) [checkbox setState:NSOffState]; else [checkbox setState:NSOnState]; } return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int CocoaGui_WCheckBox_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { CocoaCheckboxButton *checkbox; checkbox = (CocoaCheckboxButton*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(checkbox); switch(prop) { case GWEN_DialogProperty_Enabled: return ([checkbox isEnabled]==YES)?1:0; case GWEN_DialogProperty_Focus: if ([checkbox window]) { if ([[checkbox window] firstResponder] == checkbox) return 1; } return 0; case GWEN_DialogProperty_Width: return [checkbox frame].size.width; case GWEN_DialogProperty_Height: return [checkbox frame].size.height; case GWEN_DialogProperty_Value: return ([checkbox state]==NSOnState)?1:0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int CocoaGui_WCheckBox_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { CocoaCheckboxButton *checkbox; checkbox = (CocoaCheckboxButton*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(checkbox); switch(prop) { case GWEN_DialogProperty_Title: { NSString *stringValue = [[NSString alloc] initWithCString:value encoding:NSUTF8StringEncoding]; [checkbox setTitle:stringValue]; [stringValue release]; } return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* CocoaGui_WCheckBox_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { CocoaCheckboxButton *checkbox; checkbox = (CocoaCheckboxButton*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(checkbox); switch(prop) { case GWEN_DialogProperty_Title: return [[checkbox stringValue] cStringUsingEncoding:NSUTF8StringEncoding]; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static void CocoaGui_WCheckBox_Toggled_handler(NSButton *button, void* data) { GWEN_WIDGET *w; int rv; DBG_ERROR(0, "Toggled"); w=(GWEN_WIDGET*)data; assert(w); rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w), GWEN_DialogEvent_TypeActivated, GWEN_Widget_GetName(w)); if (rv==GWEN_DialogEvent_ResultAccept) CocoaGui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1); else if (rv==GWEN_DialogEvent_ResultReject) CocoaGui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0); } int CocoaGui_WCheckBox_Setup(GWEN_WIDGET *w) { CocoaCheckboxButton *checkbox; const char *s; uint32_t flags; GWEN_WIDGET *wParent; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); s=GWEN_Widget_GetText(w, 0); //Create Button checkbox = [[[CocoaCheckboxButton alloc] initWithFrame:NSMakeRect(0.0, 0.0, 60.0, 24.0)] autorelease]; if (flags & GWEN_WIDGET_FLAGS_FILLX) checkbox.fillX = YES; if (flags & GWEN_WIDGET_FLAGS_FILLY) checkbox.fillY = YES; if (s && *s) { NSString *title = [[NSString alloc] initWithCString:s encoding:NSUTF8StringEncoding]; [checkbox setTitle:title]; [title release]; } GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_REAL, (void*) checkbox); GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_CONTENT, (void*) checkbox); GWEN_Widget_SetSetIntPropertyFn(w, CocoaGui_WCheckBox_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, CocoaGui_WCheckBox_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, CocoaGui_WCheckBox_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, CocoaGui_WCheckBox_GetCharProperty); gwenActionPtr ptr = CocoaGui_WCheckBox_Toggled_handler; [checkbox setC_ActionPtr:ptr Data:w]; if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/cocoa/CocoaLabel.m0000644000175000017500000000344112364015347015562 00000000000000// // CocoaLabel.m // // // Created by Samuel Strupp on 10.08.10. // #ifdef HAVE_CONFIG_H # include #endif #import "CocoaLabel.h" #ifndef COCOA_LABEL_MM #define COCOA_LABEL_MM @implementation CocoaLabel @synthesize fillX; @synthesize fillY; - (id)initWithFrame:(NSRect)frame { self = [super initWithFrame:frame]; if (self) { fillX = NO; fillY = NO; minWidth = 0.0; } return self; } -(void) dealloc { [super dealloc]; } -(NSSize) neededTextSize { NSString *title = [self stringValue]; if (title && [title length]>0) { NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys: [NSColor blackColor], NSForegroundColorAttributeName, [self font], NSFontAttributeName, nil]; return [title sizeWithAttributes:attributes]; } return NSZeroSize; } -(void) computeMinWidth { NSSize size = [self neededTextSize]; minWidth = size.width+4.0; } - (void)setStringValue:(NSString *)aString { /*remove HTML version if available*/ if (aString) { NSRange htmlRange = [aString rangeOfString:@""]; if (htmlRange.location != NSNotFound) { NSRange endHtmlRange = [aString rangeOfString:@""]; if (endHtmlRange.location != NSNotFound) { NSString *stringToUse = @""; NSRange cutRange = NSUnionRange(htmlRange, endHtmlRange); stringToUse = [aString stringByReplacingCharactersInRange:cutRange withString:@""]; [super setStringValue:stringToUse]; [self computeMinWidth]; return; } } } [super setStringValue:aString]; [self computeMinWidth]; } /*- (void)drawRect:(NSRect)dirtyRect { //debug colors [[NSColor yellowColor] set]; NSRectFill(dirtyRect); [super drawRect:dirtyRect]; }*/ #pragma mark Protocol Methods - (NSSize) minSize { return NSMakeSize(minWidth, 17.0); } @end #endif gwenhywfar-4.15.2beta/gui/cocoa/CocoaLineTextField.h0000644000175000017500000000116112364015347017233 00000000000000// // CocoaLineTextField.h // // // Created by Samuel Strupp on 10.08.10. // #ifndef COCOA_LINE_TEXTFIELD_H #define COCOA_LINE_TEXTFIELD_H #import #import "CocoaLabel.h" typedef void (*gwenTextFieldActionPtr)(NSTextField *textField, void* data); @interface CocoaLineTextField : CocoaLabel { gwenTextFieldActionPtr c_actionPtr; void* c_actionData; gwenTextFieldActionPtr c_textChangedActionPtr; void* c_textChangedActionData; } -(void) setC_ActionPtr:(gwenTextFieldActionPtr)ptr Data:(void*)data; -(void) setC_TextChanged_ActionPtr:(gwenTextFieldActionPtr)ptr Data:(void*)data; @end #endif gwenhywfar-4.15.2beta/gui/cocoa/w_listbox.mm0000644000175000017500000002000712364015347015762 00000000000000/*************************************************************************** begin : Aug 17 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #import "CocoaScrollBox.h" #import "CocoaListBox.h" #define W_LISTBOX_MAX_TYPES 256 static GWENHYWFAR_CB int CocoaGui_WListBox_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { CocoaListBox *listbox; CocoaScrollBox *scrollView; scrollView = (CocoaScrollBox*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(scrollView); listbox = [scrollView documentView]; assert(listbox); switch(prop) { case GWEN_DialogProperty_Enabled: [listbox setEnabled:(value==0)?NO:YES]; return 0; case GWEN_DialogProperty_Focus: { if ([listbox window]) { [[listbox window] makeFirstResponder:listbox]; } } return 0; case GWEN_DialogProperty_SelectionMode: { switch(value) { case GWEN_Dialog_SelectionMode_None: [listbox setAllowsEmptySelection:YES]; [listbox setAllowsMultipleSelection:NO]; [listbox deselectAll:listbox]; return 0; case GWEN_Dialog_SelectionMode_Single: [listbox setAllowsEmptySelection:NO]; [listbox setAllowsMultipleSelection:NO]; return 0; case GWEN_Dialog_SelectionMode_Multi: [listbox setAllowsEmptySelection:NO]; [listbox setAllowsMultipleSelection:YES]; return 0; } DBG_ERROR(GWEN_LOGDOMAIN, "Unknown SelectionMode %d", value); return GWEN_ERROR_INVALID; } case GWEN_DialogProperty_ColumnWidth: { if ([listbox setColumnWidthTo:value forColumn:index]) return 0; return GWEN_ERROR_INVALID; } case GWEN_DialogProperty_SortDirection: { if ([listbox setSortOrderTo:(value == GWEN_DialogSortDirection_Up) ForColumnWithIndex:index]) return 0; return GWEN_ERROR_INVALID; } case GWEN_DialogProperty_Sort: // NOOP, we use auto-sorting for now (TODO: figure out how to manually sort) return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int CocoaGui_WListBox_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { CocoaListBox *listbox; CocoaScrollBox *scrollView; scrollView = (CocoaScrollBox*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(scrollView); listbox = [scrollView documentView]; assert(listbox); switch(prop) { case GWEN_DialogProperty_Enabled: return ([listbox isEnabled])?1:0; case GWEN_DialogProperty_Focus: if ([listbox window]) { if ([[listbox window] firstResponder] == listbox) return 1; } return 0; case GWEN_DialogProperty_Value: { return [listbox selectedRow]; return -1; } case GWEN_DialogProperty_ColumnWidth: { return [listbox widthOfColumn:index]; } case GWEN_DialogProperty_SortDirection: { NSInteger sortOrder = [listbox sortOrderForColumnAtIndex:index]; switch (sortOrder) { case 1: return GWEN_DialogSortDirection_Up; case 0: return GWEN_DialogSortDirection_Down; default: break; } return GWEN_DialogSortDirection_None; } default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int CocoaGui_WListBox_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { CocoaListBox *listbox; CocoaScrollBox *scrollView; scrollView = (CocoaScrollBox*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(scrollView); listbox = [scrollView documentView]; assert(listbox); switch(prop) { case GWEN_DialogProperty_Title: { if (value && *value) { NSString *titleString = [[NSString alloc] initWithCString:value encoding:NSUTF8StringEncoding]; [listbox setTitelsAndCreateColumns:titleString]; [titleString release]; } return 0; } case GWEN_DialogProperty_ClearValues: { [listbox clearDataRows]; return 0; } case GWEN_DialogProperty_AddValue: { if (value && *value) { NSString *dataRowString = [[NSString alloc] initWithCString:value encoding:NSUTF8StringEncoding]; [listbox addDataRowString:dataRowString]; [dataRowString release]; } return 0; } default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* CocoaGui_WListBox_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { CocoaListBox *listbox; CocoaScrollBox *scrollView; scrollView = (CocoaScrollBox*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(scrollView); listbox = [scrollView documentView]; assert(listbox); switch(prop) { case GWEN_DialogProperty_Title: { NSString *titlesString = [listbox titlesString]; if (titlesString) { return [titlesString cStringUsingEncoding:NSUTF8StringEncoding]; } return defaultValue; } case GWEN_DialogProperty_Value: { NSString *dataRowString = [listbox dataRowStringForRow:index]; if (dataRowString) { return [dataRowString cStringUsingEncoding:NSUTF8StringEncoding]; } return defaultValue; } default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static void CocoaGui_WListBox_Changed_handler(NSTableView *tableView, void* data) { GWEN_WIDGET *w; int rv; DBG_ERROR(0, "ListBox Changed"); w=data; assert(w); rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w), GWEN_DialogEvent_TypeActivated, GWEN_Widget_GetName(w)); if (rv==GWEN_DialogEvent_ResultAccept) CocoaGui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1); else if (rv==GWEN_DialogEvent_ResultReject) CocoaGui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0); } int CocoaGui_WListBox_Setup(GWEN_WIDGET *w) { CocoaListBox *listBox; uint32_t flags; GWEN_WIDGET *wParent; //gulong changed_handler_id; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); CocoaScrollBox *scrollView = [[[CocoaScrollBox alloc] initWithFrame:NSMakeRect(0.0, 0.0, 100.0, 100.0)] autorelease]; [scrollView setHasVerticalScroller:YES]; [scrollView setHasHorizontalScroller:YES]; [scrollView setAutohidesScrollers:YES]; if (flags & GWEN_WIDGET_FLAGS_FILLX) scrollView.fillX = YES; if (flags & GWEN_WIDGET_FLAGS_FILLY) scrollView.fillY = YES; listBox = [[[CocoaListBox alloc] initWithFrame:NSMakeRect(0.0, 0.0, 100.0, 100.0)] autorelease]; [listBox setFocusRingType:NSFocusRingTypeNone]; [scrollView setLayoutedDocumentView:listBox]; GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_REAL, (void*) scrollView); GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_CONTENT, (void*) scrollView); GWEN_Widget_SetSetIntPropertyFn(w, CocoaGui_WListBox_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, CocoaGui_WListBox_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, CocoaGui_WListBox_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, CocoaGui_WListBox_GetCharProperty); #pragma mark NOCH MACHEN /*changed_handler_id=g_signal_connect(g, "cursor-changed", G_CALLBACK (Gtk2Gui_WListBox_CursorChanged_handler), w);*/ gwenListBoxActionPtr ptr = CocoaGui_WListBox_Changed_handler; [listBox setC_ActionPtr:ptr Data:w]; if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/cocoa/CocoaPopUpButton.h0000644000175000017500000000107612364015347016777 00000000000000// // CocoaPopUpButton.h // // // Created by Samuel Strupp on 10.08.10. // #ifndef COCOA_POPUP_BUTTON_H #define COCOA_POPUP_BUTTON_H #import #import "CocoaGwenGUIProtocol.h" typedef void (*gwenPopUpActionPtr)(NSPopUpButton *button, void* data); @interface CocoaPopUpButton : NSPopUpButton { gwenPopUpActionPtr c_actionPtr; void* c_actionData; BOOL fillX; BOOL fillY; CGFloat minWidth; } @property BOOL fillX; @property BOOL fillY; -(void) setC_PopUpActionPtr:(gwenPopUpActionPtr)ptr Data:(void*)data; @end #endif gwenhywfar-4.15.2beta/gui/cocoa/CocoaSpinbox.m0000644000175000017500000000746212364015347016174 00000000000000// // CocoaSpinbox.m // // // Created by Samuel Strupp on 19.08.10. // #ifdef HAVE_CONFIG_H # include #endif #import "CocoaSpinbox.h" #ifndef COCOA_SPINBOX_MM #define COCOA_SPINBOX_MM @implementation CocoaSpinbox @synthesize fillX; @synthesize fillY; - (id)initWithFrame:(NSRect)frame { self = [super initWithFrame:frame]; if (self) { textfield = [[NSTextField alloc] initWithFrame:NSMakeRect(0.0, 0.0, 40.0, 27.0)]; [textfield setAlignment:NSRightTextAlignment]; [textfield setTarget:self]; [textfield setAction:@selector(getValueFromTextField:)]; [self addSubview:textfield]; stepper = [[NSStepper alloc] initWithFrame:NSMakeRect(40.0, 0.0, 19.0, 27.0)]; [stepper setTarget:self]; [stepper setAction:@selector(getValueFromStepper:)]; [stepper setValueWraps:NO]; [self addSubview:stepper]; fillX = NO; fillY = NO; minValue = NSIntegerMin; maxValue = NSIntegerMax; [stepper setMinValue:minValue]; [stepper setMaxValue:maxValue]; c_actionPtr = nil; c_actionData = nil; minWidth = 40.0; } return self; } -(void) dealloc { [stepper release]; [textfield release]; [super dealloc]; } -(void) setC_ActionPtr:(gwenSpinBoxActionPtr)ptr Data:(void*)data { c_actionPtr = ptr; c_actionData = data; } -(void) valueDidChange { if (c_actionPtr) { c_actionPtr(self, c_actionData); } } -(void) setFrame:(NSRect)frameRect { if (frameRect.size.height < 22.0) frameRect.size.height = 22.0; [super setFrame:frameRect]; NSRect bounds = [self bounds]; NSRect stepperFrame = NSMakeRect(bounds.origin.x+bounds.size.width-16.0, bounds.origin.y-3.0, 19.0, 27.0); [stepper setFrame:stepperFrame]; NSRect textfieldFrame = NSMakeRect(bounds.origin.x, bounds.origin.y, bounds.size.width-16.0, 22.0); [textfield setFrame:textfieldFrame]; } -(void) makeFirstResponder { if ([textfield window]) { [[textfield window] makeFirstResponder:textfield]; } } -(BOOL) isFirstResponder { if ([textfield window]) { if ([[textfield window] firstResponder] == textfield) return YES; } return NO; } -(void) setEnabled:(BOOL)value { [textfield setEnabled:value]; [stepper setEnabled:value]; } -(BOOL) isEnabled { return [textfield isEnabled]; } -(void) setIntegerValue:(NSInteger)new_value { if (new_value >= minValue && new_value <= maxValue) { [textfield setIntegerValue:new_value]; [stepper setIntegerValue:new_value]; } } -(NSInteger) integerValue { return [textfield integerValue]; } -(void) setMinValue:(NSInteger)new_min_value { minValue = new_min_value; [stepper setMinValue:minValue]; if (maxValue < minValue) maxValue = minValue; if ([self integerValue] < minValue) [self setIntegerValue:minValue]; } -(NSInteger) minValue { return minValue; } -(void) setMaxValue:(NSInteger)new_max_value { maxValue = new_max_value; [stepper setMaxValue:maxValue]; if (maxValue < minValue) minValue = maxValue; if ([self integerValue] > maxValue) [self setIntegerValue:maxValue]; } -(NSInteger) maxValue { return maxValue; } - (void)setStringValue:(NSString *)aString { NSInteger value = 0; if (aString && [aString length] > 0) { value = [aString integerValue]; } [self setIntegerValue:value]; } -(NSString*) stringValue { return [textfield stringValue]; } -(void) getValueFromStepper:(id)sender { NSInteger new_value = [stepper integerValue]; if (new_value >= minValue && new_value <= maxValue) { [textfield setIntegerValue:new_value]; [self valueDidChange]; } } -(void) getValueFromTextField:(id)sender { NSInteger new_value = [textfield integerValue]; if (new_value < minValue) new_value = minValue; if (new_value > maxValue) new_value = maxValue; [textfield setIntegerValue:new_value]; [stepper setIntegerValue:new_value]; [self valueDidChange]; } #pragma mark Protocol Methods - (NSSize) minSize { return NSMakeSize(minWidth, 22.0); } @end #endif gwenhywfar-4.15.2beta/gui/cocoa/cocoa_gui.h0000644000175000017500000000156312364015347015524 00000000000000/*************************************************************************** begin : August 03 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef COCOA_GUI_H #define COCOA_GUI_H #if defined __GNUC__ && (! defined (__sun)) && (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) # ifdef BUILDING_COCOA_GUI # define COCOAGUI_API __attribute__ ((visibility("default"))) # else # define COCOAGUI_API # endif #else # define COCOAGUI_API #endif #include #include #ifdef __cplusplus extern "C" { #endif COCOAGUI_API GWEN_GUI *Cocoa_Gui_new(); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/gui/cocoa/CocoaGridLayout.m0000644000175000017500000002412512364015347016630 00000000000000// // CocoaGridLayout.m // // // Created by Samuel Strupp on 10.08.10. // Copyright 2010 Synium Software GmbH. All rights reserved. // #ifdef HAVE_CONFIG_H # include #endif #import "CocoaGridLayout.h" #import "CocoaGwenGUIProtocol.h" @implementation CocoaGridLayout @synthesize fillX; @synthesize fillY; @synthesize columns; @synthesize rows; - (id)initWithFrame:(NSRect)frame { self = [super initWithFrame:frame]; if (self) { fillX = NO; fillY = NO; subviewsInOrder = [[NSMutableArray alloc] init]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(layoutSubviews) name:NSViewFrameDidChangeNotification object:self]; } return self; } -(void) dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; [subviewsInOrder release]; [super dealloc]; } /*- (void)drawRect:(NSRect)dirtyRect { //debug colors [[NSColor redColor] set]; NSRectFill(dirtyRect); }*/ #define borderDistance 8.0 #define cellDistance 4.0 -(void) layoutSubviews { NSRect bounds = [self bounds]; NSUInteger numOfSubViews = [subviewsInOrder count]; if (numOfSubViews > 0) { //Prepass to compute the sizes BOOL columnMode = (columns > 0); NSInteger neededColumns, neededRows; if (columnMode) { neededColumns = columns; neededRows = numOfSubViews/columns + numOfSubViews%columns; } else { if (rows > 0) { neededColumns = numOfSubViews/rows + numOfSubViews%rows; neededRows = rows; } else { //We choose column mode with one column neededColumns = 1; neededRows = numOfSubViews; } } CGFloat minWidthNeededForColumn[neededColumns]; CGFloat minHeightNeededForRow[neededRows]; char fillXFlags[neededColumns]; char fillYFlags[neededRows]; NSUInteger i; for (i=0; i)subview minSize]; if (minWidthNeededForColumn[actualColumn] < minSize.width) minWidthNeededForColumn[actualColumn] = minSize.width; if (minHeightNeededForRow[actualRow] < minSize.height) minHeightNeededForRow[actualRow] = minSize.height; if ([()subview fillX]) fillXFlags[actualColumn] = 1; if ([()subview fillY]) fillYFlags[actualRow] = 1; } } //compute exact sizes CGFloat maxWidth = bounds.size.width-borderDistance-borderDistance-(neededColumns-1)*cellDistance; NSInteger flexibleCells = 0; for(i=0; i 0.0 && flexibleCells > 0) { CGFloat flexibleStdWidth = maxWidth/flexibleCells; for (i=0; i 0.0 && flexibleCells > 0) { CGFloat flexibleStdHeight = maxHeight/flexibleCells; for (i=0; i= 0) actualFrame.origin.x += minWidthNeededForColumn[oldIndex]+cellDistance; actualFrame.origin.y = bounds.origin.y+bounds.size.height-borderDistance-minHeightNeededForRow[actualRow]; oldIndex = actualColumn; } } NSView* subview = [subviewsInOrder objectAtIndex:i]; actualFrame.size.height = minHeightNeededForRow[actualRow]; actualFrame.size.width = minWidthNeededForColumn[actualColumn]; NSRect realFrame = actualFrame; if ([subview conformsToProtocol:@protocol(CocoaGwenGUIProtocol)]) { BOOL flexWidth = [()subview fillX]; BOOL flexHeight = [()subview fillY]; if (!flexWidth || !flexHeight) { NSSize minSize = [()subview minSize]; if (!flexWidth && minSize.width < realFrame.size.width) realFrame.size.width = minSize.width; if (!flexHeight && minSize.height < realFrame.size.height) { realFrame.origin.y += realFrame.size.height-minSize.height; realFrame.size.height = minSize.height; } } } [subview setFrame:realFrame]; //NSLog(@"frame = %@", NSStringFromRect(actualFrame)); if (columnMode) actualFrame.origin.x += actualFrame.size.width+cellDistance; else if (actualRow+1 < neededRows) actualFrame.origin.y -= minHeightNeededForRow[actualRow+1]+cellDistance; } /*CGFloat sizesHeight[numOfSubViews]; CGFloat sizesWidth[numOfSubViews]; CGFloat exclusiveHeight = 0.0; NSUInteger exclusiveChilds = 0; NSUInteger i; for (i=0; i)subview fillX]) sizesWidth[i] = -1.0; else { CGFloat neededWidth = [()subview minSize].width; sizesWidth[i] = neededWidth; } if ([()subview fillY]) sizesHeight[i] = -1.0; else { CGFloat neededHeight = [()subview minSize].height; sizesHeight[i] = neededHeight; exclusiveHeight += neededHeight; exclusiveChilds++; } } else { sizesWidth[i] = -1.0; sizesHeight[i] = -1.0; } } //Compute standard Sizes for Subviews CGFloat stdHeight = 0.0; if (numOfSubViews > exclusiveChilds) { CGFloat fillHeight = bounds.size.height-exclusiveHeight; stdHeight = (fillHeight-(borderDistance+borderDistance)-((numOfSubViews-1)*cellDistance))/(numOfSubViews-exclusiveChilds); } else { CGFloat fillHeight = bounds.size.height; stdHeight = (fillHeight-(borderDistance+borderDistance)-((numOfSubViews-1)*cellDistance))/(numOfSubViews); } CGFloat stdWidth = bounds.size.width-(borderDistance+borderDistance); //change Subviews Frame NSRect actualFrame = bounds; actualFrame.origin.x = borderDistance; actualFrame.origin.y += bounds.size.height-borderDistance; for (i=0; i 0) { NSInteger neededColumns, neededRows; BOOL columnMode = (columns > 0); if (columnMode) { neededColumns = columns; neededRows = numOfSubViews/columns + numOfSubViews%columns; } else { if (rows > 0) { neededColumns = numOfSubViews/rows + numOfSubViews%rows; neededRows = rows; } else { //We choose column mode with one column neededColumns = 1; neededRows = numOfSubViews; } } CGFloat minWidthNeededForColumn[neededColumns]; CGFloat minHeightNeededForRow[neededRows]; NSUInteger i; for (i=0; i)subview minSize]; if (minWidthNeededForColumn[actualColumn] < minSize.width) minWidthNeededForColumn[actualColumn] = minSize.width; if (minHeightNeededForRow[actualRow] < minSize.height) minHeightNeededForRow[actualRow] = minSize.height; } } CGFloat minNeededWidth = borderDistance+borderDistance+(neededColumns-1)*cellDistance; for (i=0; i #import "CocoaButton.h" @class CocoaRadioButton; @interface CocoaRadioGroupManager : NSObject { NSInteger groupeID; NSPointerArray *memberRadioButtons; } @property NSInteger groupeID; -(void) removeRadioButton:(CocoaRadioButton*)buttonToRemove; -(void) addRadioButton:(CocoaRadioButton*)buttonToAdd; -(void) newOnStateButtonIs:(CocoaRadioButton*)newOnStateButton; @end @interface CocoaRadioButton : CocoaButton { CocoaRadioGroupManager *_groupManager; } -(void) createNewGroupManagerWithGroupID:(NSInteger)newGroupID; -(CocoaRadioGroupManager*) getGroupManager; -(void) setGroupManager:(CocoaRadioGroupManager*) newGroupManager; @end gwenhywfar-4.15.2beta/gui/cocoa/cocoa_gui_dialog_l.h0000644000175000017500000000220012364015347017343 00000000000000/*************************************************************************** begin : August 09 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef COCOA_GUI_DIALOG_L_H #define COCOA_GUI_DIALOG_L_H //#include #include #import #import #import "CocoaWindow.h" //#define GTK2_GUI_DIALOG_DEFAULT_BOX_SPACING 3 /*typedef struct { GWEN_DIALOG *dialog; GtkWindow *window; int response; GMainLoop *loop; int destroyed; } RunInfo;*/ void CocoaGui_Dialog_Extend(GWEN_DIALOG *dlg); void CocoaGui_Dialog_Unextend(GWEN_DIALOG *dlg); int CocoaGui_Dialog_Setup(GWEN_DIALOG *dlg, NSWindow *parentWindow); CocoaWindow *CocoaGui_Dialog_GetMainWidget(const GWEN_DIALOG *dlg); int Cocoa_Gui_Dialog_Run(GWEN_DIALOG *dlg, int timeout); void CocoaGui_Dialog_Leave(GWEN_DIALOG *dlg, int result); #endif gwenhywfar-4.15.2beta/gui/cocoa/w_tabbook.mm0000644000175000017500000001076412364015347015730 00000000000000/*************************************************************************** begin : August 16 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #import "CocoaTabView.h" static GWENHYWFAR_CB int CocoaGui_WTabBook_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { CocoaTabView *tabView; tabView=(CocoaTabView*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(tabView); switch(prop) { case GWEN_DialogProperty_Enabled: return 0; case GWEN_DialogProperty_Focus: return 0; case GWEN_DialogProperty_Value: if (value >= 0 && value < [tabView numberOfTabViewItems]) { [tabView selectTabViewItemAtIndex:value]; } return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int CocoaGui_WTabBook_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { CocoaTabView *tabView; tabView=(CocoaTabView*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(tabView); switch(prop) { case GWEN_DialogProperty_Enabled: return 1; case GWEN_DialogProperty_Focus: return 0; case GWEN_DialogProperty_Value: return [tabView indexOfTabViewItem:[tabView selectedTabViewItem]]; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int CocoaGui_WTabBook_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { CocoaTabView *tabView; tabView=(CocoaTabView*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(tabView); DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* CocoaGui_WTabBook_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { CocoaTabView *tabView; tabView=(CocoaTabView*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(tabView); DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int CocoaGui_WTabBook_AddChildGuiWidget(GWEN_WIDGET *w, GWEN_WIDGET *wChild) { CocoaTabView *tabView; const char *s; tabView=(CocoaTabView*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(tabView); NSView *subview =(NSView*)(GWEN_Widget_GetImplData(wChild, COCOA_DIALOG_WIDGET_REAL)); assert(subview); s=GWEN_Widget_GetText(wChild, 0); NSTabViewItem *item = [[NSTabViewItem alloc] init]; if (s && *s) { NSString *title = [[NSString alloc] initWithCString:s encoding:NSUTF8StringEncoding]; [item setLabel:title]; [title release]; } [item setView:subview]; [tabView addTabViewItem:item]; [item release]; return 0; } int CocoaGui_WTabBook_Setup(GWEN_WIDGET *w) { CocoaTabView *tabView; uint32_t flags; GWEN_WIDGET *wParent; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); tabView=[[[CocoaTabView alloc] initWithFrame:NSMakeRect(10.0, 10.0, 100.0, 22.0)] autorelease]; if (flags & GWEN_WIDGET_FLAGS_FILLX) tabView.fillX = YES; if (flags & GWEN_WIDGET_FLAGS_FILLY) tabView.fillY = YES; GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_REAL, (void*) tabView); GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_CONTENT, (void*) tabView); GWEN_Widget_SetSetIntPropertyFn(w, CocoaGui_WTabBook_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, CocoaGui_WTabBook_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, CocoaGui_WTabBook_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, CocoaGui_WTabBook_GetCharProperty); GWEN_Widget_SetAddChildGuiWidgetFn(w, CocoaGui_WTabBook_AddChildGuiWidget); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/cocoa/w_hspacer.mm0000644000175000017500000000457012364015347015732 00000000000000/*************************************************************************** begin : Aug 17 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #import "CocoaSpacer.h" static GWENHYWFAR_CB int CocoaGui_WHSpacer_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { CocoaSpacer *hSpacer; hSpacer=(CocoaSpacer*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(hSpacer); switch(prop) { case GWEN_DialogProperty_Enabled: return 0; case GWEN_DialogProperty_Focus: return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int CocoaGui_WHSpacer_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { CocoaSpacer *hSpacer; hSpacer=(CocoaSpacer*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(hSpacer); switch(prop) { case GWEN_DialogProperty_Enabled: return 1; case GWEN_DialogProperty_Focus: return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } int CocoaGui_WHSpacer_Setup(GWEN_WIDGET *w) { CocoaSpacer *hSpacer; uint32_t flags; GWEN_WIDGET *wParent; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); hSpacer = [[[CocoaSpacer alloc] initWithFrame:NSMakeRect(0.0, 0.0, 10.0, 10.0)] autorelease]; GWEN_Widget_AddFlags(w, GWEN_WIDGET_FLAGS_FILLX); hSpacer.fillX = YES; if (flags & GWEN_WIDGET_FLAGS_FILLY) hSpacer.fillY = YES; GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_REAL, (void*) hSpacer); GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_CONTENT, (void*) hSpacer); GWEN_Widget_SetSetIntPropertyFn(w, CocoaGui_WHSpacer_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, CocoaGui_WHSpacer_GetIntProperty); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/cocoa/CocoaTextBrowser.m0000644000175000017500000000423712364015347017037 00000000000000// // CocoaTextBrowser.m // // // Created by Samuel Strupp on 18.08.10. // #ifdef HAVE_CONFIG_H # include #endif #import "CocoaTextBrowser.h" @implementation CocoaTextBrowser @synthesize fillX; @synthesize fillY; - (id) initWithFrame:(NSRect)frameRect frameName:(NSString *)frameName groupName:(NSString *)groupName { self = [super initWithFrame:frameRect frameName:frameName groupName:groupName]; if (self) { fillX = NO; fillY = NO; loadedString = nil; //[[[self mainFrame] frameView] setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; } return self; } -(void) dealloc { [loadedString release]; [super dealloc]; } #pragma mark Special Methods -(void) setStringValue:(NSString*)value BasePath:(NSString*)base { if (value) { [loadedString release]; loadedString = [value retain]; NSString *basePath = base; if (!basePath) { basePath = [[NSBundle mainBundle] resourcePath]; if (!basePath) basePath = [[[NSBundle mainBundle] bundlePath] stringByDeletingLastPathComponent]; } NSURL *baseURL = [NSURL fileURLWithPath:basePath]; if (value) { NSRange htmlRange = [value rangeOfString:@""]; if (htmlRange.location != NSNotFound) { NSRange endHtmlRange = [value rangeOfString:@""]; if (endHtmlRange.location != NSNotFound) { NSString *stringToUse = @""; NSRange useRange = NSUnionRange(htmlRange, endHtmlRange); stringToUse = [value substringWithRange:useRange]; [[self mainFrame] loadHTMLString:stringToUse baseURL:baseURL]; return; } } [[self mainFrame] loadHTMLString:value baseURL:baseURL]; } } else { [loadedString release]; loadedString = nil; } } -(void) setStringValue:(NSString*)value { [self setStringValue:value BasePath:nil]; } -(NSString*) stringValue { return loadedString; } #pragma mark Protocoll Methods - (NSSize) minSize { return NSMakeSize(30.0, 30.0); } - (BOOL) fillX { return fillX; } - (BOOL) fillY { return fillY; } - (void)setFrame:(NSRect)frameRect { if (frameRect.size.width < 0.0) frameRect.size.width = 0.0; if (frameRect.size.height < 0.0) frameRect.size.height = 0.0; [super setFrame:frameRect]; } @end gwenhywfar-4.15.2beta/gui/cocoa/CocoaGwenGUIProtocol.h0000644000175000017500000000042612364015347017525 00000000000000// // CocoaGwenGUIProtocol.h // CocoaGwenGuiTest // // Created by Samuel Strupp on 12.08.10. // Copyright 2010 Synium Software GmbH. All rights reserved. // #import @protocol CocoaGwenGUIProtocol - (NSSize) minSize; - (BOOL) fillX; - (BOOL) fillY; @end gwenhywfar-4.15.2beta/gui/cocoa/CocoaSpacer.m0000644000175000017500000000115612364015347015761 00000000000000// // CocoaSpacer.m // // // Created by Samuel Strupp on 17.08.10. // #ifdef HAVE_CONFIG_H # include #endif #import "CocoaSpacer.h" #ifndef COCOA_SPACER_MM #define COCOA_SPACER_MM @implementation CocoaSpacer @synthesize fillX; @synthesize fillY; - (id)initWithFrame:(NSRect)frame { self = [super initWithFrame:frame]; if (self) { fillX = NO; fillY = NO; } return self; } -(void) dealloc { [super dealloc]; } #pragma mark Protocoll Methods - (NSSize) minSize { return NSMakeSize(0.0, 0.0); } - (BOOL) fillX { return fillX; } - (BOOL) fillY { return fillY; } @end #endif gwenhywfar-4.15.2beta/gui/cocoa/CocoaCheckboxButton.h0000644000175000017500000000027212364015347017457 00000000000000// // CocoaCheckboxButton.h // // Created by Samuel Strupp on 12.08.10. // #import #import "CocoaButton.h" @interface CocoaCheckboxButton : CocoaButton { } @end gwenhywfar-4.15.2beta/gui/cocoa/CocoaTextBrowser.h0000644000175000017500000000072312364015347017026 00000000000000// // CocoaTextBrowser.h // // // Created by Samuel Strupp on 17.08.10. // #import #import #import "CocoaGwenGUIProtocol.h" @interface CocoaTextBrowser : WebView { BOOL fillX; BOOL fillY; NSString* loadedString; } @property BOOL fillX; @property BOOL fillY; -(void) setStringValue:(NSString*)value BasePath:(NSString*)base; -(void) setStringValue:(NSString*)value; -(NSString*) stringValue; @end gwenhywfar-4.15.2beta/gui/cocoa/w_dialog.mm0000644000175000017500000001340212364015347015536 00000000000000/*************************************************************************** begin : August 09 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #import "CocoaWindow.h" #import "CocoaWindowContentView.h" static GWENHYWFAR_CB int CocoaGui_WDialog_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { NSWindow *window = nil; window=(NSWindow*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(window); if (window) { switch(prop) { case GWEN_DialogProperty_Enabled: // just ignore return 0; case GWEN_DialogProperty_Focus: //[window makeKeyAndOrderFront:nil]; return 0; case GWEN_DialogProperty_Width: { NSLog(@"setWidth %i", value); NSRect frame = [window frame]; frame.size.width = value; [window setFrame:frame display:YES]; } return 0; case GWEN_DialogProperty_Height: { NSRect frame = [window frame]; frame.size.height = value; [window setFrame:frame display:YES]; } return 0; default: break; } } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int CocoaGui_WDialog_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { NSWindow *window = nil; window=(NSWindow*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(window); switch(prop) { case GWEN_DialogProperty_Enabled: return 1; case GWEN_DialogProperty_Focus: return [window isKeyWindow]; case GWEN_DialogProperty_Width: return [window frame].size.width; case GWEN_DialogProperty_Height: return [window frame].size.height; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int CocoaGui_WDialog_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { NSWindow *window = nil; NSLog(@"CocoaGui_WDialog_SetCharProperty"); window=(NSWindow*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(window); switch(prop) { case GWEN_DialogProperty_Title: { NSString *newTitle = [[NSString alloc] initWithCString:value encoding:NSUTF8StringEncoding]; [window setTitle:newTitle]; [newTitle release]; } return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* CocoaGui_WDialog_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { NSWindow *window = nil; window=(NSWindow*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(window); switch(prop) { case GWEN_DialogProperty_Title: return [[window title] cStringUsingEncoding:NSUTF8StringEncoding]; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int CocoaGui_WDialog_AddChildGuiWidget(GWEN_WIDGET *w, GWEN_WIDGET *wChild) { NSLog(@"CocoaGui_WDialog_AddChildGuiWidget"); NSWindow *window = nil; window=(NSWindow*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(window); NSView *subview = (NSView*)(GWEN_Widget_GetImplData(wChild, COCOA_DIALOG_WIDGET_REAL)); assert(subview); NSRect bounds = [[window contentView] bounds]; [subview setFrame:bounds]; [subview setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable]; CocoaWindowContentView *contentView = (CocoaWindowContentView*)[window contentView]; [contentView addLayoutSubview:subview]; return 0; } int CocoaGui_WDialog_Setup(GWEN_WIDGET *w) { CocoaWindow *newWindow; const char *s; uint32_t flags; flags=GWEN_Widget_GetFlags(w); s=GWEN_Widget_GetText(w, 0); newWindow=[[CocoaWindow alloc] initWithContentRect:NSMakeRect(50.0, 50.0, 400.0, 200.0) styleMask:NSTitledWindowMask/*|NSClosableWindowMask*/|NSResizableWindowMask backing:NSBackingStoreBuffered defer:YES]; [newWindow setReleasedWhenClosed:NO]; CocoaWindowContentView *newContentView = [[CocoaWindowContentView alloc] initWithFrame:[[newWindow contentView] frame]]; [newContentView setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable]; [newWindow setContentView:newContentView]; [newContentView release]; NSLog(@"getWindow Title"); if (s && *s) { //DBG_WARN(GWEN_LOGDOMAIN, "String s = (%s)",s ); NSString *stringValue = [[NSString alloc] initWithCString:s encoding:NSUTF8StringEncoding]; NSLog(@"Window Title = %@", stringValue); [newWindow setTitle:stringValue]; [stringValue release]; } GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_REAL, (void*) newWindow); GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_CONTENT, (void*) newWindow); GWEN_Widget_SetSetIntPropertyFn(w, CocoaGui_WDialog_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, CocoaGui_WDialog_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, CocoaGui_WDialog_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, CocoaGui_WDialog_GetCharProperty); GWEN_Widget_SetAddChildGuiWidgetFn(w, CocoaGui_WDialog_AddChildGuiWidget); return 0; } gwenhywfar-4.15.2beta/gui/cocoa/w_radiobutton.mm0000644000175000017500000001467412364015347016645 00000000000000/*************************************************************************** begin : Aug 10 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #import "CocoaRadioButton.h" static GWENHYWFAR_CB int CocoaGui_WRadioButton_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { NSButton *radioButton; radioButton = (NSButton*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(radioButton); switch(prop) { case GWEN_DialogProperty_Enabled: [radioButton setEnabled:(value==0)?NO:YES]; return 0; case GWEN_DialogProperty_Focus: if ([radioButton window]) { [[radioButton window] makeFirstResponder:radioButton]; } return 0; case GWEN_DialogProperty_Width: { NSRect frame = [radioButton frame]; frame.size.width = value; [radioButton setFrame:frame]; } return 0; case GWEN_DialogProperty_Height: { NSRect frame = [radioButton frame]; frame.size.height = value; [radioButton setFrame:frame]; } return 0; case GWEN_DialogProperty_Value:{ if (value==0) [radioButton setState:NSOffState]; else [radioButton setState:NSOnState]; } return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int CocoaGui_WRadioButton_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { NSButton *radioButton; radioButton = (NSButton*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(radioButton); switch(prop) { case GWEN_DialogProperty_Enabled: return ([radioButton isEnabled]==YES)?1:0; case GWEN_DialogProperty_Focus: if ([radioButton window]) { if ([[radioButton window] firstResponder] == radioButton) return 1; } return 0; case GWEN_DialogProperty_Width: return [radioButton frame].size.width; case GWEN_DialogProperty_Height: return [radioButton frame].size.height; case GWEN_DialogProperty_Value: return ([radioButton state]==NSOnState)?1:0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int CocoaGui_WRadioButton_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { NSButton *radioButton; radioButton = (NSButton*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(radioButton); switch(prop) { case GWEN_DialogProperty_Title: { NSString *stringValue = [[NSString alloc] initWithCString:value encoding:NSUTF8StringEncoding]; [radioButton setTitle:stringValue]; [stringValue release]; } return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* CocoaGui_WRadioButton_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { NSButton *radioButton; radioButton = (NSButton*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(radioButton); switch(prop) { case GWEN_DialogProperty_Title: return [[radioButton stringValue] cStringUsingEncoding:NSUTF8StringEncoding]; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static void CocoaGui_WRadioButton_Toggled_handler(NSButton *button, void* data) { GWEN_WIDGET *w; int rv; DBG_ERROR(0, "Toggled"); w=data; assert(w); rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w), GWEN_DialogEvent_TypeActivated, GWEN_Widget_GetName(w)); if (rv==GWEN_DialogEvent_ResultAccept) CocoaGui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1); else if (rv==GWEN_DialogEvent_ResultReject) CocoaGui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0); } int CocoaGui_WRadioButton_Setup(GWEN_WIDGET *w) { CocoaRadioButton *radioButton; const char *s; uint32_t flags; GWEN_WIDGET *wParent; GWEN_WIDGET *wT; int groupId; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); groupId=GWEN_Widget_GetGroupId(w); s=GWEN_Widget_GetText(w, 0); //Create Button radioButton = [[[CocoaRadioButton alloc] initWithFrame:NSMakeRect(0.0, 0.0, 60.0, 24.0)] autorelease]; if (flags & GWEN_WIDGET_FLAGS_FILLX) radioButton.fillX = YES; if (flags & GWEN_WIDGET_FLAGS_FILLY) radioButton.fillY = YES; if (s && *s) { NSString *title = [[NSString alloc] initWithCString:s encoding:NSUTF8StringEncoding]; [radioButton setTitle:title]; [title release]; } /* get root widget */ wT=wParent; while(GWEN_Widget_Tree_GetParent(wT)) wT=GWEN_Widget_Tree_GetParent(wT); // get first radio button of the same group while(wT) { if ((GWEN_Widget_GetType(wT)==GWEN_Widget_TypeRadioButton) && GWEN_Widget_GetGroupId(wT)==groupId) break; wT=GWEN_Widget_Tree_GetBelow(wT); } if (wT && wT!=w) { CocoaRadioButton *sameGroupRadioButton = (CocoaRadioButton*)(GWEN_Widget_GetImplData(wT, COCOA_DIALOG_WIDGET_REAL)); [radioButton setGroupManager:[sameGroupRadioButton getGroupManager]]; } else { [radioButton createNewGroupManagerWithGroupID:groupId]; } // set pointers GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_REAL, (void*) radioButton); GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_CONTENT, (void*) radioButton); GWEN_Widget_SetSetIntPropertyFn(w, CocoaGui_WRadioButton_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, CocoaGui_WRadioButton_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, CocoaGui_WRadioButton_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, CocoaGui_WRadioButton_GetCharProperty); gwenActionPtr ptr = CocoaGui_WRadioButton_Toggled_handler; [radioButton setC_ActionPtr:ptr Data:w]; if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/cocoa/CocoaVLineView.m0000644000175000017500000000170012364015347016407 00000000000000// // CocoaHLineView.m // // // Created by Samuel Strupp on 10.08.10. // #ifdef HAVE_CONFIG_H # include #endif #import "CocoaVLineView.h" @implementation CocoaVLineView @synthesize fillX; @synthesize fillY; - (id)initWithFrame:(NSRect)frame { self = [super initWithFrame:frame]; if (self) { // Initialization code here. fillX = NO; fillY = NO; } return self; } -(void) dealloc { [super dealloc]; } - (void)drawRect:(NSRect)dirtyRect { NSRect bounds = [self bounds]; [[NSColor grayColor] set]; NSBezierPath *line = [NSBezierPath bezierPath]; CGFloat x = bounds.origin.x+bounds.size.width/2.0; [line moveToPoint:NSMakePoint(x, bounds.origin.y)]; [line lineToPoint:NSMakePoint(x, bounds.origin.y + bounds.size.height)]; [line stroke]; } #pragma mark Protocoll Methods - (NSSize) minSize { return NSMakeSize(3.0, 3.0); } - (BOOL) fillX { return fillX; } - (BOOL) fillY { return fillY; } @end gwenhywfar-4.15.2beta/gui/cocoa/Makefile.in0000644000175000017500000007626012634022412015465 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = gwen-cocoa-test$(EXEEXT) subdir = gui/cocoa DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(iheader_HEADERS) $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(iheaderdir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = libgwengui_cocoa_la_DEPENDENCIES = \ $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_libgwengui_cocoa_la_OBJECTS = CocoaButton.lo CocoaCheckboxButton.lo \ CocoaComboBox.lo CocoaGridLayout.lo CocoaGroupBox.lo \ cocoa_gui_dialog.lo cocoa_gui.lo CocoaHLayout.lo \ CocoaHLineView.lo CocoaLabel.lo CocoaLineTextField.lo \ CocoaListBox.lo CocoaPopUpButton.lo CocoaProgressbar.lo \ CocoaRadioButton.lo CocoaScrollBox.lo CocoaSpacer.lo \ CocoaSpinbox.lo CocoaTabView.lo CocoaTextBrowser.lo \ CocoaVLayout.lo CocoaVLineView.lo CocoaWindowContentView.lo \ CocoaWindow.lo libgwengui_cocoa_la_OBJECTS = $(am_libgwengui_cocoa_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = PROGRAMS = $(noinst_PROGRAMS) am_gwen_cocoa_test_OBJECTS = libtest.$(OBJEXT) gwen_cocoa_test_OBJECTS = $(am_gwen_cocoa_test_OBJECTS) gwen_cocoa_test_DEPENDENCIES = libgwengui-cocoa.la \ $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) \ $(builddir)/../testdialogs/libgwengui-test.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f OBJCCOMPILE = $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) LTOBJCCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(OBJC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_OBJCFLAGS) $(OBJCFLAGS) AM_V_OBJC = $(am__v_OBJC_@AM_V@) am__v_OBJC_ = $(am__v_OBJC_@AM_DEFAULT_V@) am__v_OBJC_0 = @echo " OBJC " $@; am__v_OBJC_1 = OBJCLD = $(OBJC) OBJCLINK = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(OBJCLD) $(AM_OBJCFLAGS) $(OBJCFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_OBJCLD = $(am__v_OBJCLD_@AM_V@) am__v_OBJCLD_ = $(am__v_OBJCLD_@AM_DEFAULT_V@) am__v_OBJCLD_0 = @echo " OBJCLD " $@; am__v_OBJCLD_1 = SOURCES = $(libgwengui_cocoa_la_SOURCES) $(gwen_cocoa_test_SOURCES) DIST_SOURCES = $(libgwengui_cocoa_la_SOURCES) \ $(gwen_cocoa_test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(iheader_HEADERS) $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ -DBUILDING_COCOA_GUI -DPACKAGE=\"$(PACKAGE)\" DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = -I$(gwenhywfar_symlinkdir) $(COCOA_CFLAGS) AM_CPPFLAGS = @visibility_cflags@ #AM_OBJCFLAGS= -x objective-c lib_LTLIBRARIES = libgwengui-cocoa.la libgwengui_cocoa_la_LIBADD = $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(COCOA_FRAMEWORK) $(FOUNDATION_FRAMEWORK) $(APPKIT_FRAMEWORK) $(COREDATA_FRAMEWORK) $(WEBKIT_FRAMEWORK) \ -lobjc #libgwengui_cocoa_la_LDFLAGS= noinst_HEADERS = \ CocoaButton.h \ CocoaCheckboxButton.h \ CocoaComboBox.h \ CocoaGridLayout.h \ CocoaGroupBox.h \ cocoa_gui_dialog_l.h \ cocoa_gui_dialog_p.h \ cocoa_gui.h \ cocoa_gui_p.h \ CocoaGwenGUIProtocol.h \ CocoaHLayout.h \ CocoaHLineView.h \ CocoaLabel.h \ CocoaLineTextField.h \ CocoaListBox.h \ CocoaPopUpButton.h \ CocoaProgressbar.h \ CocoaRadioButton.h \ CocoaScrollBox.h \ CocoaSpacer.h \ CocoaSpinbox.h \ CocoaTabView.h \ CocoaTextBrowser.h \ CocoaVLayout.h \ CocoaVLineView.h \ CocoaWindowContentView.h \ CocoaWindow.h libgwengui_cocoa_la_SOURCES = \ CocoaButton.m \ CocoaCheckboxButton.m \ CocoaComboBox.m \ CocoaGridLayout.m \ CocoaGroupBox.m \ cocoa_gui_dialog.m \ cocoa_gui.m \ CocoaHLayout.m \ CocoaHLineView.m \ CocoaLabel.m \ CocoaLineTextField.m \ CocoaListBox.m \ CocoaPopUpButton.m \ CocoaProgressbar.m \ CocoaRadioButton.m \ CocoaScrollBox.m \ CocoaSpacer.m \ CocoaSpinbox.m \ CocoaTabView.m \ CocoaTextBrowser.m \ CocoaVLayout.m \ CocoaVLineView.m \ CocoaWindowContentView.m \ CocoaWindow.m iheaderdir = ${gwenhywfar_headerdir_am}/gwen-gui-cocoa iheader_HEADERS = \ cocoa_gui.h gwen_cocoa_test_SOURCES = libtest.m #gwen_cocoa_test_LDFLAGS= gwen_cocoa_test_LDADD = libgwengui-cocoa.la $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(COCOA_FRAMEWORK) $(FOUNDATION_FRAMEWORK) $(APPKIT_FRAMEWORK) $(COREDATA_FRAMEWORK) $(WEBKIT_FRAMEWORK) \ -lobjc \ $(builddir)/../testdialogs/libgwengui-test.la EXTRA_DIST = \ w_dialog.mm \ w_label.mm \ w_vlayout.mm \ w_hlayout.mm \ w_pushbutton.mm \ w_lineedit.mm \ w_textedit.mm \ w_checkbox.mm \ w_hline.mm \ w_vline.mm \ w_progressbar.mm \ w_radiobutton.mm \ w_tabbook.mm \ w_groupbox.mm \ w_combobox.mm \ w_gridlayout.mm \ w_hspacer.mm \ w_vspacer.mm \ w_listbox.mm \ w_scrollarea.mm \ w_textbrowser.mm \ w_stack.mm \ w_spinbox.mm all: all-am .SUFFIXES: .SUFFIXES: .lo .m .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gui/cocoa/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gui/cocoa/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgwengui-cocoa.la: $(libgwengui_cocoa_la_OBJECTS) $(libgwengui_cocoa_la_DEPENDENCIES) $(EXTRA_libgwengui_cocoa_la_DEPENDENCIES) $(AM_V_OBJCLD)$(OBJCLINK) -rpath $(libdir) $(libgwengui_cocoa_la_OBJECTS) $(libgwengui_cocoa_la_LIBADD) $(LIBS) clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list gwen-cocoa-test$(EXEEXT): $(gwen_cocoa_test_OBJECTS) $(gwen_cocoa_test_DEPENDENCIES) $(EXTRA_gwen_cocoa_test_DEPENDENCIES) @rm -f gwen-cocoa-test$(EXEEXT) $(AM_V_OBJCLD)$(OBJCLINK) $(gwen_cocoa_test_OBJECTS) $(gwen_cocoa_test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CocoaButton.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CocoaCheckboxButton.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CocoaComboBox.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CocoaGridLayout.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CocoaGroupBox.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CocoaHLayout.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CocoaHLineView.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CocoaLabel.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CocoaLineTextField.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CocoaListBox.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CocoaPopUpButton.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CocoaProgressbar.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CocoaRadioButton.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CocoaScrollBox.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CocoaSpacer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CocoaSpinbox.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CocoaTabView.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CocoaTextBrowser.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CocoaVLayout.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CocoaVLineView.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CocoaWindow.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CocoaWindowContentView.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cocoa_gui.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cocoa_gui_dialog.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtest.Po@am__quote@ .m.o: @am__fastdepOBJC_TRUE@ $(AM_V_OBJC)$(OBJCCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepOBJC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(OBJCCOMPILE) -c -o $@ $< .m.obj: @am__fastdepOBJC_TRUE@ $(AM_V_OBJC)$(OBJCCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepOBJC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(OBJCCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .m.lo: @am__fastdepOBJC_TRUE@ $(AM_V_OBJC)$(LTOBJCCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepOBJC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(LTOBJCCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-iheaderHEADERS: $(iheader_HEADERS) @$(NORMAL_INSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(iheaderdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(iheaderdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(iheaderdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(iheaderdir)" || exit $$?; \ done uninstall-iheaderHEADERS: @$(NORMAL_UNINSTALL) @list='$(iheader_HEADERS)'; test -n "$(iheaderdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(iheaderdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(iheaderdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iheaderHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iheaderHEADERS uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool clean-noinstPROGRAMS \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-iheaderHEADERS install-info install-info-am \ install-libLTLIBRARIES install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-iheaderHEADERS \ uninstall-libLTLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/gui/cocoa/CocoaProgressbar.h0000644000175000017500000000044412364015347017027 00000000000000// // CocoaProgressbar.h // // // Created by Samuel Strupp on 10.08.10. // #import #import "CocoaGwenGUIProtocol.h" @interface CocoaProgressbar : NSProgressIndicator { BOOL fillX; BOOL fillY; } @property BOOL fillX; @property BOOL fillY; @end gwenhywfar-4.15.2beta/gui/cocoa/w_spinbox.mm0000644000175000017500000001365212364015347015770 00000000000000/*************************************************************************** begin : August 19 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #import "CocoaSpinbox.h" /*typedef struct W_SPINBOX W_SPINBOX; struct W_SPINBOX { GtkAdjustment *adjustment; };*/ GWEN_INHERIT(GWEN_WIDGET, W_SPINBOX) static GWENHYWFAR_CB int CocoaGui_WSpinBox_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { CocoaSpinbox *spinbox; spinbox=(CocoaSpinbox*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(spinbox); switch(prop) { case GWEN_DialogProperty_Enabled: [spinbox setEnabled:(value==0)?NO:YES]; return 0; case GWEN_DialogProperty_Focus: [spinbox makeFirstResponder]; return 0; case GWEN_DialogProperty_Width: { NSRect frame = [spinbox frame]; frame.size.width = value; [spinbox setFrame:frame]; } return 0; case GWEN_DialogProperty_Height:{ NSRect frame = [spinbox frame]; frame.size.height = value; [spinbox setFrame:frame]; } return 0; case GWEN_DialogProperty_Value: [spinbox setIntegerValue:value]; return 0; case GWEN_DialogProperty_MinValue: [spinbox setMinValue:value]; return 0; case GWEN_DialogProperty_MaxValue: [spinbox setMaxValue:value]; return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int CocoaGui_WSpinBox_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { CocoaSpinbox *spinbox; spinbox=(CocoaSpinbox*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(spinbox); switch(prop) { case GWEN_DialogProperty_Enabled: return ([spinbox isEnabled])?1:0; case GWEN_DialogProperty_Focus: return ([spinbox isFirstResponder])?1:0; case GWEN_DialogProperty_Width: return [spinbox frame].size.width; case GWEN_DialogProperty_Height: return [spinbox frame].size.height; case GWEN_DialogProperty_Value: return [spinbox integerValue]; case GWEN_DialogProperty_MinValue: return [spinbox minValue]; case GWEN_DialogProperty_MaxValue: return [spinbox maxValue]; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int CocoaGui_WSpinBox_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { CocoaSpinbox *spinbox; spinbox=(CocoaSpinbox*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(spinbox); switch(prop) { case GWEN_DialogProperty_Value: { if (value && *value) { NSString *stringValue = [[NSString alloc] initWithCString:value encoding:NSUTF8StringEncoding]; [spinbox setStringValue:stringValue]; [stringValue release]; } } default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* CocoaGui_WSpinBox_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { CocoaSpinbox *spinbox; spinbox=(CocoaSpinbox*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(spinbox); switch(prop) { case GWEN_DialogProperty_Value: return [[spinbox stringValue] cStringUsingEncoding:NSUTF8StringEncoding]; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static void CocoaGui_WSpinBox_Changed_handler(NSView *spinbox, void* data) { GWEN_WIDGET *w; int rv; DBG_ERROR(0, "ValueChanged"); w=data; assert(w); rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w), GWEN_DialogEvent_TypeValueChanged, GWEN_Widget_GetName(w)); if (rv==GWEN_DialogEvent_ResultAccept) CocoaGui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1); else if (rv==GWEN_DialogEvent_ResultReject) CocoaGui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0); } int CocoaGui_WSpinBox_Setup(GWEN_WIDGET *w) { CocoaSpinbox *spinbox; const char *s; uint32_t flags; GWEN_WIDGET *wParent; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); s=GWEN_Widget_GetText(w, 0); spinbox = [[[CocoaSpinbox alloc] initWithFrame:NSMakeRect(0.0, 0.0, 100.0, 22.0)] autorelease]; if (flags & GWEN_WIDGET_FLAGS_FILLX) spinbox.fillX = YES; if (flags & GWEN_WIDGET_FLAGS_FILLY) spinbox.fillY = YES; if (s && *s) { NSString *stringValue = [[NSString alloc] initWithCString:s encoding:NSUTF8StringEncoding]; [spinbox setStringValue:stringValue]; [stringValue release]; } else { [spinbox setStringValue:nil]; } GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_REAL, (void*) spinbox); GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_CONTENT, (void*) spinbox); GWEN_Widget_SetSetIntPropertyFn(w, CocoaGui_WSpinBox_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, CocoaGui_WSpinBox_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, CocoaGui_WSpinBox_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, CocoaGui_WSpinBox_GetCharProperty); gwenSpinBoxActionPtr ptr = CocoaGui_WSpinBox_Changed_handler; [spinbox setC_ActionPtr:ptr Data:w]; if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/cocoa/cocoa_gui_p.h0000644000175000017500000000256012364015347016041 00000000000000/*************************************************************************** begin : August 03 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef COCOA_GUI_P_H #define COCOA_GUI_P_H #include "cocoa_gui.h" typedef struct COCOA_GUI COCOA_GUI; struct COCOA_GUI { GWEN_GUI_EXEC_DIALOG_FN execDialogFn; GWEN_GUI_OPEN_DIALOG_FN openDialogFn; GWEN_GUI_CLOSE_DIALOG_FN closeDialogFn; GWEN_GUI_RUN_DIALOG_FN runDialogFn; GWEN_GUI_GET_FILENAME_FN getFileNameDialogFn; }; static GWENHYWFAR_CB void Cocoa_Gui_FreeData(void *bp, void *p); static GWENHYWFAR_CB int COCOA_Gui_ExecDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg, uint32_t guiid); static GWENHYWFAR_CB int COCOA_Gui_OpenDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg, uint32_t guiid); static GWENHYWFAR_CB int COCOA_Gui_CloseDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg); static GWENHYWFAR_CB int COCOA_Gui_RunDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg, int timeout); static GWENHYWFAR_CB int COCOA_Gui_GetFileName(GWEN_GUI *gui, const char *caption, GWEN_GUI_FILENAME_TYPE fnt, uint32_t flags, const char *patterns, GWEN_BUFFER *pathBuffer, uint32_t guiid); #endif gwenhywfar-4.15.2beta/gui/cocoa/CocoaButton.m0000644000175000017500000000310612364015347016014 00000000000000// // CocoaButton.m // // // Created by Samuel Strupp on 10.08.10. // #ifdef HAVE_CONFIG_H # include #endif #import "CocoaButton.h" #ifndef COCOA_GWEN_BUTTON_MM #define COCOA_GWEN_BUTTON_MM @implementation CocoaButton @synthesize fillX; @synthesize fillY; - (id)initWithFrame:(NSRect)frame { self = [super initWithFrame:frame]; if (self) { [self setTarget:self]; [self setAction:@selector(clicked:)]; c_actionPtr = nil; c_actionData = nil; fillX = NO; fillY = NO; minWidth = 40.0; } return self; } -(void) dealloc { [super dealloc]; } -(NSSize) neededTextSize { NSString *title = [self title]; if (title && [title length]>0) { NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys: [NSColor blackColor], NSForegroundColorAttributeName, [self font], NSFontAttributeName, nil]; return [title sizeWithAttributes:attributes]; } return NSZeroSize; } -(void) computeMinWidth { NSSize size = [self neededTextSize]; minWidth = size.width + 40.0; if ([self image]) { minWidth += [[self image] size].width; } } -(void) setC_ActionPtr:(gwenActionPtr)ptr Data:(void*)data { c_actionPtr = ptr; c_actionData = data; } -(void) clicked:(id) sender { if (c_actionPtr) { c_actionPtr(self, c_actionData); } } - (void)setTitle:(NSString *)aString { [super setTitle:aString]; [self computeMinWidth]; } - (void)setImage:(NSImage *)anImage { [super setImage:anImage]; [self computeMinWidth]; } #pragma mark Protocoll Methods - (NSSize) minSize { return NSMakeSize(minWidth, 32.0); } @end #endif gwenhywfar-4.15.2beta/gui/cocoa/cocoa_gui_dialog_p.h0000644000175000017500000000372512364015347017364 00000000000000/*************************************************************************** begin : August 09 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef COCOA_GUI_DIALOG_P_H #define COCOA_GUI_DIALOG_P_H #include "cocoa_gui_dialog_l.h" #import #import #import "CocoaWindow.h" typedef struct COCOA_GUI_DIALOG COCOA_GUI_DIALOG; struct COCOA_GUI_DIALOG { GWEN_DIALOG_SETINTPROPERTY_FN setIntPropertyFn; GWEN_DIALOG_GETINTPROPERTY_FN getIntPropertyFn; GWEN_DIALOG_SETCHARPROPERTY_FN setCharPropertyFn; GWEN_DIALOG_GETCHARPROPERTY_FN getCharPropertyFn; CocoaWindow *mainWindow; /*int response; NSRunLoop *loop; int destroyed;*/ //BOOL modalSessionStarted; //NSModalSession session; void* unmap_handler; void* destroy_handler; void* delete_handler; }; static void GWENHYWFAR_CB CocoaGui_Dialog_FreeData(void *bp, void *p); static int CocoaGui_Dialog_SetIntProperty(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal); static int CocoaGui_Dialog_GetIntProperty(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue); static int CocoaGui_Dialog_SetCharProperty(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal); static const char *CocoaGui_Dialog_GetCharProperty(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue); static int CocoaGui_Dialog_SetupTree(GWEN_WIDGET *w); #endif gwenhywfar-4.15.2beta/gui/cocoa/CocoaHLayout.m0000644000175000017500000001052112364015347016125 00000000000000// // CocoaHLayout.m // // // Created by Samuel Strupp on 10.08.10. // #ifdef HAVE_CONFIG_H # include #endif #import "CocoaHLayout.h" @implementation CocoaHLayout @synthesize fillX; @synthesize fillY; - (id)initWithFrame:(NSRect)frame { self = [super initWithFrame:frame]; if (self) { fillX = NO; fillY = NO; subviewsInOrder = [[NSMutableArray alloc] init]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(layoutSubviews) name:NSViewFrameDidChangeNotification object:self]; } return self; } -(void) dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; [subviewsInOrder release]; [super dealloc]; } /*- (void)drawRect:(NSRect)dirtyRect { //debug colors [[NSColor greenColor] set]; NSRectFill(dirtyRect); }*/ #define borderDistance 8.0 #define cellDistance 4.0 -(void) layoutSubviews { NSRect bounds = [self bounds]; NSUInteger numOfSubViews = [subviewsInOrder count]; if (numOfSubViews > 0) { //Prepass to compute the sizes CGFloat sizesHeight[numOfSubViews]; CGFloat sizesWidth[numOfSubViews]; CGFloat exclusiveWidth = 0.0; NSUInteger exclusiveChilds = 0; NSUInteger i; for (i=0; i)subview fillX]) sizesWidth[i] = -1.0; else { CGFloat neededWidth = [()subview minSize].width; sizesWidth[i] = neededWidth; exclusiveWidth += neededWidth; exclusiveChilds++; } if ([()subview fillY]) sizesHeight[i] = -1.0; else { CGFloat neededHeight = [()subview minSize].height; sizesHeight[i] = neededHeight; } } else { sizesWidth[i] = -1.0; sizesHeight[i] = -1.0; } } //Compute standard Sizes for Subviews CGFloat stdWidth = 0.0; if (numOfSubViews > exclusiveChilds) { CGFloat fillWidth = bounds.size.width-exclusiveWidth; stdWidth = (fillWidth-(borderDistance+borderDistance)-((numOfSubViews-1)*cellDistance))/(numOfSubViews-exclusiveChilds); } else { CGFloat fillWidth = bounds.size.width; stdWidth = (fillWidth-(borderDistance+borderDistance)-((numOfSubViews-1)*cellDistance))/(numOfSubViews); } CGFloat stdHeight = bounds.size.height-(borderDistance+borderDistance); //if (numOfSubViews>=4) NSLog(@"view.width = %f", bounds.size.width); //change Subviews Frame NSRect actualFrame = bounds; actualFrame.origin.x = borderDistance; actualFrame.origin.y += bounds.size.height-borderDistance; for (i=0; i=4) NSLog(@"subview %i width = %f", i, usedWidth); NSView* subview = [subviewsInOrder objectAtIndex:i]; [subview setFrame:actualFrame]; actualFrame.origin.x += usedWidth+cellDistance; } } } -(void) addLayoutSubview:(NSView*)new_subview { [subviewsInOrder addObject:new_subview]; [self addSubview:new_subview]; [self layoutSubviews]; } #pragma mark Protocoll Methods - (NSSize) minSize { NSUInteger numOfSubViews = [subviewsInOrder count]; CGFloat borderWidth = borderDistance+borderDistance; NSSize size = NSMakeSize(borderWidth, borderWidth); if (numOfSubViews > 0) { NSUInteger i; for (i=0; i)subview minSize]; if (subViewMinSize.height+borderWidth > size.height) { size.height = subViewMinSize.height+borderWidth; } size.width += subViewMinSize.width; if (i>0) size.width += cellDistance; } } } return size; } - (void)setFrame:(NSRect)frameRect { NSSize minSize = [self minSize]; if (frameRect.size.height < minSize.height) { frameRect.size.height = minSize.height; } if (frameRect.size.width < minSize.width) { frameRect.size.width = minSize.width; } [super setFrame:frameRect]; } @end gwenhywfar-4.15.2beta/gui/cocoa/CocoaTabView.m0000644000175000017500000000215012364015347016100 00000000000000// // CocoaTabView.m // // // Created by Samuel Strupp on 10.08.10. // #ifdef HAVE_CONFIG_H # include #endif #import "CocoaTabView.h" @implementation CocoaTabView @synthesize fillX; @synthesize fillY; - (id)initWithFrame:(NSRect)frame { self = [super initWithFrame:frame]; if (self) { fillX = NO; fillY = NO; } return self; } -(void) dealloc { [super dealloc]; } #pragma mark Protocoll Methods - (NSSize) minSize { NSArray *tabViewItems = [self tabViewItems]; NSSize maxSize = NSZeroSize; for (NSTabViewItem *item in tabViewItems) { NSView *subview = [item view]; if ([subview conformsToProtocol:@protocol(CocoaGwenGUIProtocol)]) { NSSize subViewMinSize = [()subview minSize]; if (subViewMinSize.width > maxSize.width) maxSize.width = subViewMinSize.width; if (subViewMinSize.height > maxSize.height) maxSize.height = subViewMinSize.height; } } if ([self tabViewType] != NSNoTabsNoBorder) { maxSize.width += 22.0; maxSize.height += 40.0; } return maxSize; } - (BOOL) fillX { return fillX; } - (BOOL) fillY { return fillY; } @end gwenhywfar-4.15.2beta/gui/cocoa/CocoaGroupBox.m0000644000175000017500000000142212364015347016305 00000000000000// // CocoaGroupBox.m // // // Created by Samuel Strupp on 10.08.10. // #ifdef HAVE_CONFIG_H # include #endif #import "CocoaGroupBox.h" @implementation CocoaGroupBox @synthesize fillX; @synthesize fillY; - (id)initWithFrame:(NSRect)frame { self = [super initWithFrame:frame]; if (self) { fillX = NO; fillY = NO; } return self; } -(void) dealloc { [super dealloc]; } #pragma mark Protocoll Methods - (NSSize) minSize { if ([[self contentView] conformsToProtocol:@protocol(CocoaGwenGUIProtocol)]) { NSSize size = [()[self contentView] minSize]; size.height += 24.0; size.width += 14.0; return size; } return NSMakeSize(22.0, 40.0); } - (BOOL) fillX { return fillX; } - (BOOL) fillY { return fillY; } @end gwenhywfar-4.15.2beta/gui/cocoa/Makefile.am0000644000175000017500000000460012364015347015452 00000000000000INCLUDES=-I$(gwenhywfar_symlinkdir) $(COCOA_CFLAGS) AM_CPPFLAGS= @visibility_cflags@ DEFS+=-DBUILDING_COCOA_GUI -DPACKAGE=\"$(PACKAGE)\" #AM_OBJCFLAGS= -x objective-c lib_LTLIBRARIES=libgwengui-cocoa.la libgwengui_cocoa_la_LIBADD=$(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(COCOA_FRAMEWORK) $(FOUNDATION_FRAMEWORK) $(APPKIT_FRAMEWORK) $(COREDATA_FRAMEWORK) $(WEBKIT_FRAMEWORK) \ -lobjc #libgwengui_cocoa_la_LDFLAGS= noinst_HEADERS=\ CocoaButton.h \ CocoaCheckboxButton.h \ CocoaComboBox.h \ CocoaGridLayout.h \ CocoaGroupBox.h \ cocoa_gui_dialog_l.h \ cocoa_gui_dialog_p.h \ cocoa_gui.h \ cocoa_gui_p.h \ CocoaGwenGUIProtocol.h \ CocoaHLayout.h \ CocoaHLineView.h \ CocoaLabel.h \ CocoaLineTextField.h \ CocoaListBox.h \ CocoaPopUpButton.h \ CocoaProgressbar.h \ CocoaRadioButton.h \ CocoaScrollBox.h \ CocoaSpacer.h \ CocoaSpinbox.h \ CocoaTabView.h \ CocoaTextBrowser.h \ CocoaVLayout.h \ CocoaVLineView.h \ CocoaWindowContentView.h \ CocoaWindow.h libgwengui_cocoa_la_SOURCES=\ CocoaButton.m \ CocoaCheckboxButton.m \ CocoaComboBox.m \ CocoaGridLayout.m \ CocoaGroupBox.m \ cocoa_gui_dialog.m \ cocoa_gui.m \ CocoaHLayout.m \ CocoaHLineView.m \ CocoaLabel.m \ CocoaLineTextField.m \ CocoaListBox.m \ CocoaPopUpButton.m \ CocoaProgressbar.m \ CocoaRadioButton.m \ CocoaScrollBox.m \ CocoaSpacer.m \ CocoaSpinbox.m \ CocoaTabView.m \ CocoaTextBrowser.m \ CocoaVLayout.m \ CocoaVLineView.m \ CocoaWindowContentView.m \ CocoaWindow.m iheaderdir=${gwenhywfar_headerdir_am}/gwen-gui-cocoa iheader_HEADERS= \ cocoa_gui.h noinst_PROGRAMS = gwen-cocoa-test gwen_cocoa_test_SOURCES = libtest.m #gwen_cocoa_test_LDFLAGS= gwen_cocoa_test_LDADD = libgwengui-cocoa.la $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(COCOA_FRAMEWORK) $(FOUNDATION_FRAMEWORK) $(APPKIT_FRAMEWORK) $(COREDATA_FRAMEWORK) $(WEBKIT_FRAMEWORK) \ -lobjc \ $(builddir)/../testdialogs/libgwengui-test.la EXTRA_DIST=\ w_dialog.mm \ w_label.mm \ w_vlayout.mm \ w_hlayout.mm \ w_pushbutton.mm \ w_lineedit.mm \ w_textedit.mm \ w_checkbox.mm \ w_hline.mm \ w_vline.mm \ w_progressbar.mm \ w_radiobutton.mm \ w_tabbook.mm \ w_groupbox.mm \ w_combobox.mm \ w_gridlayout.mm \ w_hspacer.mm \ w_vspacer.mm \ w_listbox.mm \ w_scrollarea.mm \ w_textbrowser.mm \ w_stack.mm \ w_spinbox.mm gwenhywfar-4.15.2beta/gui/cocoa/CocoaHLayout.h0000644000175000017500000000054212364015347016122 00000000000000// // CocoaHLayout.h // // // Created by Samuel Strupp on 10.08.10. // #import #import "CocoaGwenGUIProtocol.h" @interface CocoaHLayout : NSView { NSMutableArray *subviewsInOrder; BOOL fillX; BOOL fillY; } @property BOOL fillX; @property BOOL fillY; -(void) addLayoutSubview:(NSView*)new_subview ; @end gwenhywfar-4.15.2beta/gui/cocoa/CocoaRadioButton.m0000644000175000017500000000560712364015347017003 00000000000000// // CocoaRadioButton.m // CocoaGwenGuiTest // // Created by Samuel Strupp on 12.08.10. // Copyright 2010 Synium Software GmbH. All rights reserved. // #ifdef HAVE_CONFIG_H # include #endif #import "CocoaRadioButton.h" @implementation CocoaRadioButton - (id)initWithFrame:(NSRect)frame { self = [super initWithFrame:frame]; if (self) { [self setBezelStyle:NSRoundedBezelStyle]; [self setButtonType:NSRadioButton]; _groupManager = nil; } return self; } -(void) dealloc { if (_groupManager) { [_groupManager removeRadioButton:self]; [_groupManager release]; } [super dealloc]; } -(void) computeMinWidth { NSSize size = [self neededTextSize]; minWidth = size.width + 22.0; } -(void) createNewGroupManagerWithGroupID:(NSInteger)newGroupID { if (_groupManager) { [_groupManager removeRadioButton:self]; [_groupManager release]; _groupManager = nil; } _groupManager = [[CocoaRadioGroupManager alloc] init]; _groupManager.groupeID = newGroupID; [_groupManager addRadioButton:self]; } -(CocoaRadioGroupManager*) getGroupManager { return _groupManager; } -(void) setGroupManager:(CocoaRadioGroupManager*) newGroupManager { if (_groupManager) { [_groupManager removeRadioButton:self]; [_groupManager release]; _groupManager = nil; } if (newGroupManager) { _groupManager = [newGroupManager retain]; [_groupManager addRadioButton:self]; } } - (void)setState:(NSInteger)value { if (value == NSOnState && _groupManager) { [_groupManager newOnStateButtonIs:self]; } [super setState:value]; } -(void) clicked:(id)sender { if ([self state] == NSOnState && _groupManager) { [_groupManager newOnStateButtonIs:self]; } [super clicked:sender]; } /*- (void)drawRect:(NSRect)dirtyRect { //debug colors [[NSColor blueColor] set]; NSRectFill(dirtyRect); [super drawRect:dirtyRect]; }*/ #pragma mark Protocoll Methods - (NSSize) minSize { return NSMakeSize(minWidth, 16.0); } @end @implementation CocoaRadioGroupManager @synthesize groupeID; - (id)init { self = [super init]; if (self) { memberRadioButtons = [[NSPointerArray pointerArrayWithWeakObjects] retain]; } return self; } -(void) dealloc { [memberRadioButtons release]; [super dealloc]; } -(void) removeRadioButton:(CocoaRadioButton*)buttonToRemove { NSUInteger i; NSUInteger count = [memberRadioButtons count]; NSUInteger foundIndex = count; //ungültiger Index for (i=0; icurrentValue=value; d=(double)value; [progressbar setDoubleValue:d]; //NSLog(@"progressbar value = %f",d); return 0; } case GWEN_DialogProperty_MinValue: { double d; xw->minValue=value; d=(double)value; [progressbar setMinValue:d]; //NSLog(@"progressbar min value = %f",d); return 0; } case GWEN_DialogProperty_MaxValue: { double d; xw->maxValue=value; d=(double)value; [progressbar setMaxValue:d]; //NSLog(@"progressbar max value = %f",d); return 0; } default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int CocoaGui_WProgressBar_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { CocoaProgressbar *progressbar; W_PROGRESSBAR *xw; assert(w); xw=GWEN_INHERIT_GETDATA(GWEN_WIDGET, W_PROGRESSBAR, w); assert(xw); progressbar=(CocoaProgressbar*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(progressbar); switch(prop) { case GWEN_DialogProperty_Enabled: return 1; case GWEN_DialogProperty_Focus: return 0; case GWEN_DialogProperty_Width: return [progressbar frame].size.width; case GWEN_DialogProperty_Height: return [progressbar frame].size.height; case GWEN_DialogProperty_Value: return xw->currentValue; case GWEN_DialogProperty_MinValue: return xw->minValue; case GWEN_DialogProperty_MaxValue: return xw->maxValue; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int CocoaGui_WProgressBar_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* CocoaGui_WProgressBar_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static void GWENHYWFAR_CB CocoaGui_WProgressBar_FreeData(void *bp, void *p) { W_PROGRESSBAR *xw; xw=(W_PROGRESSBAR*) p; GWEN_FREE_OBJECT(xw); } int CocoaGui_WProgressBar_Setup(GWEN_WIDGET *w) { CocoaProgressbar *progressbar; //const char *s; uint32_t flags; GWEN_WIDGET *wParent; W_PROGRESSBAR *xw; GWEN_NEW_OBJECT(W_PROGRESSBAR, xw); GWEN_INHERIT_SETDATA(GWEN_WIDGET, W_PROGRESSBAR, w, xw, CocoaGui_WProgressBar_FreeData); flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); //s=GWEN_Widget_GetText(w, 0); //g=gtk_progress_bar_new(); progressbar = [[[CocoaProgressbar alloc] initWithFrame:NSMakeRect(0.0, 0.0, 100.0, 20.0)] autorelease]; if (flags & GWEN_WIDGET_FLAGS_FILLX) progressbar.fillX = YES; if (flags & GWEN_WIDGET_FLAGS_FILLY) progressbar.fillY = YES; [progressbar setIndeterminate:NO]; [progressbar setUsesThreadedAnimation:YES]; [progressbar startAnimation:nil]; GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_REAL, (void*) progressbar); GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_CONTENT, (void*) progressbar); GWEN_Widget_SetSetIntPropertyFn(w, CocoaGui_WProgressBar_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, CocoaGui_WProgressBar_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, CocoaGui_WProgressBar_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, CocoaGui_WProgressBar_GetCharProperty); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/cocoa/CocoaSpinbox.h0000644000175000017500000000200312364015347016151 00000000000000// // CocoaSpinbox.h // // // Created by Samuel Strupp on 19.08.10. // #ifndef COCOA_SPINBOX_H #define COCOA_SPINBOX_H #import #import "CocoaGwenGUIProtocol.h" typedef void (*gwenSpinBoxActionPtr)(NSView *spinbox, void* data); @interface CocoaSpinbox : NSView { NSStepper *stepper; NSTextField *textfield; CGFloat minWidth; BOOL fillX; BOOL fillY; NSInteger minValue; NSInteger maxValue; gwenSpinBoxActionPtr c_actionPtr; void* c_actionData; } @property BOOL fillX; @property BOOL fillY; -(void) setC_ActionPtr:(gwenSpinBoxActionPtr)ptr Data:(void*)data; -(void) makeFirstResponder; -(BOOL) isFirstResponder; -(void) setEnabled:(BOOL)value; -(BOOL) isEnabled; -(void) setIntegerValue:(NSInteger)new_value; -(NSInteger) integerValue; -(void) setMinValue:(NSInteger)new_min_value; -(NSInteger) minValue; -(void) setMaxValue:(NSInteger)new_max_value; -(NSInteger) maxValue; -(void)setStringValue:(NSString *)aString; -(NSString*) stringValue; @end #endif gwenhywfar-4.15.2beta/gui/cocoa/CocoaWindow.h0000644000175000017500000000062312364015347016004 00000000000000// // CocoaWindow.h // // // Created by Samuel Strupp on 20.08.10. // #ifndef COCOA_WINDOW_H #define COCOA_WINDOW_H #import typedef void (*gwenWindowActionPtr)(NSWindow *window, void* data); @interface CocoaWindow : NSWindow { gwenWindowActionPtr c_actionPtr; void* c_actionData; gwenWindowActionPtr c_textChangedActionPtr; void* c_textChangedActionData; } @end #endif gwenhywfar-4.15.2beta/gui/cocoa/CocoaVLayout.m0000644000175000017500000001063412364015347016150 00000000000000// // CocoaVLayout.m // // // Created by Samuel Strupp on 10.08.10. // Copyright 2010 Synium Software GmbH. All rights reserved. // #ifdef HAVE_CONFIG_H # include #endif #import "CocoaVLayout.h" #import "CocoaGwenGUIProtocol.h" @implementation CocoaVLayout @synthesize fillX; @synthesize fillY; - (id)initWithFrame:(NSRect)frame { self = [super initWithFrame:frame]; if (self) { fillX = NO; fillY = NO; subviewsInOrder = [[NSMutableArray alloc] init]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(layoutSubviews) name:NSViewFrameDidChangeNotification object:self]; } return self; } -(void) dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; [subviewsInOrder release]; [super dealloc]; } /*- (void)drawRect:(NSRect)dirtyRect { //debug colors [[NSColor redColor] set]; NSRectFill(dirtyRect); }*/ #define borderDistance 8.0 #define cellDistance 4.0 -(void) layoutSubviews { NSRect bounds = [self bounds]; NSUInteger numOfSubViews = [subviewsInOrder count]; if (numOfSubViews > 0) { //Prepass to compute the sizes CGFloat sizesHeight[numOfSubViews]; CGFloat sizesWidth[numOfSubViews]; CGFloat exclusiveHeight = 0.0; NSUInteger exclusiveChilds = 0; NSUInteger i; for (i=0; i)subview fillX]) sizesWidth[i] = -1.0; else { CGFloat neededWidth = [()subview minSize].width; sizesWidth[i] = neededWidth; } if ([()subview fillY]) sizesHeight[i] = -1.0; else { CGFloat neededHeight = [()subview minSize].height; sizesHeight[i] = neededHeight; exclusiveHeight += neededHeight; exclusiveChilds++; } } else { sizesWidth[i] = -1.0; sizesHeight[i] = -1.0; } } //Compute standard Sizes for Subviews CGFloat stdHeight = 0.0; if (numOfSubViews > exclusiveChilds) { CGFloat fillHeight = bounds.size.height-exclusiveHeight; stdHeight = (fillHeight-(borderDistance+borderDistance)-((numOfSubViews-1)*cellDistance))/(numOfSubViews-exclusiveChilds); } else { CGFloat fillHeight = bounds.size.height; stdHeight = (fillHeight-(borderDistance+borderDistance)-((numOfSubViews-1)*cellDistance))/(numOfSubViews); } CGFloat stdWidth = bounds.size.width-(borderDistance+borderDistance); //if (numOfSubViews>=4) NSLog(@"view.height = %f", bounds.size.height); //change Subviews Frame NSRect actualFrame = bounds; actualFrame.origin.x = borderDistance; actualFrame.origin.y += bounds.size.height-borderDistance; for (i=0; i=4) NSLog(@"subview %i height = %f", i, usedHeight); CGFloat usedWidth = sizesWidth[i]; if (usedWidth < 0.0) usedWidth = stdWidth; NSView* subview = [subviewsInOrder objectAtIndex:i]; actualFrame.size.width = usedWidth; [subview setFrame:actualFrame]; actualFrame.origin.y -= cellDistance; } } } -(void) addLayoutSubview:(NSView*)new_subview { [subviewsInOrder addObject:new_subview]; [self addSubview:new_subview]; [self layoutSubviews]; } #pragma mark Protocoll Methods - (NSSize) minSize { NSUInteger numOfSubViews = [subviewsInOrder count]; CGFloat borderWidth = borderDistance+borderDistance; NSSize size = NSMakeSize(borderWidth, borderWidth); if (numOfSubViews > 0) { NSUInteger i; for (i=0; i)subview minSize]; if (subViewMinSize.width+borderWidth > size.width) { size.width = subViewMinSize.width+borderWidth; } size.height += subViewMinSize.height; if (i>0) size.height += cellDistance; } } } return size; } - (void)setFrame:(NSRect)frameRect { NSSize minSize = [self minSize]; if (frameRect.size.height < minSize.height) { frameRect.size.height = minSize.height; } if (frameRect.size.width < minSize.width) { frameRect.size.width = minSize.width; } [super setFrame:frameRect]; } @end gwenhywfar-4.15.2beta/gui/cocoa/CocoaSpacer.h0000644000175000017500000000041512364015347015751 00000000000000// // CocoaSpacer.h // // // Created by Samuel Strupp on 17.08.10. // #import #import "CocoaGwenGUIProtocol.h" @interface CocoaSpacer : NSView { BOOL fillX; BOOL fillY; } @property BOOL fillX; @property BOOL fillY; @end gwenhywfar-4.15.2beta/gui/cocoa/CocoaTabView.h0000644000175000017500000000042212364015347016073 00000000000000// // CocoaTabView.h // // // Created by Samuel Strupp on 10.08.10. // #import #import "CocoaGwenGUIProtocol.h" @interface CocoaTabView : NSTabView { BOOL fillX; BOOL fillY; } @property BOOL fillX; @property BOOL fillY; @end gwenhywfar-4.15.2beta/gui/cocoa/CocoaCheckboxButton.m0000644000175000017500000000145712364015347017472 00000000000000// // CocoaCheckboxButton.m // // Created by Samuel Strupp on 12.08.10. // #ifdef HAVE_CONFIG_H # include #endif #import "CocoaCheckboxButton.h" #import @implementation CocoaCheckboxButton - (id)initWithFrame:(NSRect)frame { self = [super initWithFrame:frame]; if (self) { [self setBezelStyle:NSRoundedBezelStyle]; [self setButtonType:NSSwitchButton]; } return self; } -(void) dealloc { [super dealloc]; } -(void) computeMinWidth { NSSize size = [self neededTextSize]; minWidth = size.width + 22.0; } /*- (void)drawRect:(NSRect)dirtyRect { //debug colors [[NSColor orangeColor] set]; NSRectFill(dirtyRect); [super drawRect:dirtyRect]; }*/ #pragma mark Protocoll Methods - (NSSize) minSize { return NSMakeSize(minWidth, 16.0); } @endgwenhywfar-4.15.2beta/gui/cocoa/w_textbrowser.mm0000644000175000017500000001260412364015347016672 00000000000000/*************************************************************************** begin : Aug 18 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #import "CocoaTextBrowser.h" static GWENHYWFAR_CB int CocoaGui_WTextBrowser_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { CocoaTextBrowser *textBrowser; textBrowser = (CocoaTextBrowser*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_CONTENT)); assert(textBrowser); switch(prop) { case GWEN_DialogProperty_Enabled: return 0; case GWEN_DialogProperty_Focus: return 0; case GWEN_DialogProperty_Width: { NSRect frame = [textBrowser frame]; frame.size.width = value; [textBrowser setFrame:frame]; } return 0; case GWEN_DialogProperty_Height: { NSRect frame = [textBrowser frame]; frame.size.height = value; [textBrowser setFrame:frame]; } return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int CocoaGui_WTextBrowser_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { CocoaTextBrowser *textBrowser; textBrowser = (CocoaTextBrowser*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_CONTENT)); assert(textBrowser); switch(prop) { case GWEN_DialogProperty_Enabled: return 1; case GWEN_DialogProperty_Focus: return 0; case GWEN_DialogProperty_Width: return [textBrowser frame].size.width; case GWEN_DialogProperty_Height: return [textBrowser frame].size.height; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int CocoaGui_WTextBrowser_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { CocoaTextBrowser *textBrowser; textBrowser = (CocoaTextBrowser*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_CONTENT)); assert(textBrowser); switch(prop) { case GWEN_DialogProperty_Value: { if (value && *value) { GWEN_STRINGLIST *sl; //take the first media path as base url sl=GWEN_Dialog_GetMediaPaths(GWEN_Widget_GetDialog(w)); const char * basePath = GWEN_StringListEntry_Data(GWEN_StringList_FirstEntry(sl)); NSString *basePathString = nil; if (basePath && *basePath) { basePathString = [[NSString alloc] initWithCString:basePath encoding:NSUTF8StringEncoding]; } NSString *stringValue = [[NSString alloc] initWithCString:value encoding:NSUTF8StringEncoding]; [textBrowser setStringValue:stringValue BasePath:basePathString]; [stringValue release]; [basePathString release]; } return 0; } default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* CocoaGui_WTextBrowser_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { CocoaTextBrowser *textBrowser; textBrowser = (CocoaTextBrowser*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_CONTENT)); assert(textBrowser); switch(prop) { case GWEN_DialogProperty_Value: { NSString* stringValue = [textBrowser stringValue]; if (stringValue && [stringValue length] > 0) return [stringValue cStringUsingEncoding:NSUTF8StringEncoding]; return defaultValue; } default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } int CocoaGui_WTextBrowser_Setup(GWEN_WIDGET *w) { CocoaTextBrowser *textBrowser; const char *s; uint32_t flags; GWEN_WIDGET *wParent; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); s=GWEN_Widget_GetText(w, 0); textBrowser = [[[CocoaTextBrowser alloc] initWithFrame:NSMakeRect(0.0, 0.0, 30.0, 30.0) frameName:nil groupName:nil] autorelease]; if (flags & GWEN_WIDGET_FLAGS_FILLX) textBrowser.fillX = YES; if (flags & GWEN_WIDGET_FLAGS_FILLY) textBrowser.fillY = YES; if (s && *s) { NSString *stringValue = [[NSString alloc] initWithCString:s encoding:NSUTF8StringEncoding]; [textBrowser setStringValue:stringValue]; [stringValue release]; } GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_REAL, (void*) textBrowser); GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_CONTENT, (void*) textBrowser); GWEN_Widget_SetSetIntPropertyFn(w, CocoaGui_WTextBrowser_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, CocoaGui_WTextBrowser_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, CocoaGui_WTextBrowser_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, CocoaGui_WTextBrowser_GetCharProperty); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/cocoa/CocoaWindow.m0000644000175000017500000000112312364015347016005 00000000000000// // CocoaLabel.m // // // Created by Samuel Strupp on 10.08.10. // #ifdef HAVE_CONFIG_H # include #endif #import "CocoaWindow.h" #ifndef COCOA_WINDOW_MM #define COCOA_WINDOW_MM @implementation CocoaWindow - (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)windowStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)deferCreation { self = [super initWithContentRect:contentRect styleMask:windowStyle backing:bufferingType defer:deferCreation]; if (self) { } return self; } -(void) dealloc { [super dealloc]; } @end #endif gwenhywfar-4.15.2beta/gui/cocoa/w_textedit.mm0000644000175000017500000001432512364015347016136 00000000000000/*************************************************************************** begin : August 10 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #import "CocoaLineTextField.h" static GWENHYWFAR_CB int CocoaGui_WTextEdit_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { CocoaLineTextField *textField; textField=(CocoaLineTextField*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(textField); switch(prop) { case GWEN_DialogProperty_Enabled: [textField setEnabled:(value==0)?NO:YES]; return 0; case GWEN_DialogProperty_Focus: if ([textField window]) { [[textField window] makeFirstResponder:textField]; } return 0; case GWEN_DialogProperty_Width: { NSRect frame = [textField frame]; frame.size.width = value; [textField setFrame:frame]; } return 0; case GWEN_DialogProperty_Height:{ NSRect frame = [textField frame]; frame.size.height = value; [textField setFrame:frame]; } return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int CocoaGui_WTextEdit_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { CocoaLineTextField *textField; textField=(CocoaLineTextField*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(textField); switch(prop) { case GWEN_DialogProperty_Enabled: return ([textField isEnabled])?1:0; case GWEN_DialogProperty_Focus: if ([textField window]) { if ([[textField window] firstResponder] == textField) return 1; } return 0; case GWEN_DialogProperty_Width: return [textField frame].size.width; case GWEN_DialogProperty_Height: return [textField frame].size.height; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int CocoaGui_WTextEdit_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { CocoaLineTextField *textField; textField=(CocoaLineTextField*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(textField); switch(prop) { case GWEN_DialogProperty_Value:{ NSString *stringValue = [[NSString alloc] initWithCString:value encoding:NSUTF8StringEncoding]; [textField setStringValue:stringValue]; [stringValue release]; } default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* CocoaGui_WTextEdit_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { CocoaLineTextField *textField; textField=(CocoaLineTextField*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(textField); switch(prop) { case GWEN_DialogProperty_Title: return [[textField stringValue] cStringUsingEncoding:NSUTF8StringEncoding]; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static void CocoaGui_WTextEdit_End_Editing_text_handler(NSTextField *textField, void* data) { GWEN_WIDGET *w; int rv; w=data; assert(w); rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w), GWEN_DialogEvent_TypeActivated, GWEN_Widget_GetName(w)); if (rv==GWEN_DialogEvent_ResultAccept) CocoaGui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1); else if (rv==GWEN_DialogEvent_ResultReject) CocoaGui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0); } static void CocoaGui_WTextEdit_Changed_text_handler(NSTextField *textField, void* data) { GWEN_WIDGET *w; int rv; w=data; assert(w); rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w), GWEN_DialogEvent_TypeValueChanged, GWEN_Widget_GetName(w)); if (rv==GWEN_DialogEvent_ResultAccept) CocoaGui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1); else if (rv==GWEN_DialogEvent_ResultReject) CocoaGui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0); } int CocoaGui_WTextEdit_Setup(GWEN_WIDGET *w) { CocoaLineTextField *textField; const char *s; uint32_t flags; GWEN_WIDGET *wParent; //gulong changed_handler_id; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); s=GWEN_Widget_GetText(w, 0); /* create widget */ textField = [[[CocoaLineTextField alloc] initWithFrame:NSMakeRect(10.0, 10.0, 100.0, 22.0)] autorelease]; if (flags & GWEN_WIDGET_FLAGS_FILLX) textField.fillX = YES; if (flags & GWEN_WIDGET_FLAGS_FILLY) textField.fillY = YES; //[textField setBordered:YES]; [textField setEditable:YES]; if (s && *s) { NSString *stringValue = [[NSString alloc] initWithCString:s encoding:NSUTF8StringEncoding]; [textField setStringValue:stringValue]; [stringValue release]; } GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_REAL, (void*) textField); GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_CONTENT, (void*) textField); GWEN_Widget_SetSetIntPropertyFn(w, CocoaGui_WTextEdit_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, CocoaGui_WTextEdit_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, CocoaGui_WTextEdit_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, CocoaGui_WTextEdit_GetCharProperty); gwenTextFieldActionPtr ptr = CocoaGui_WTextEdit_End_Editing_text_handler; [textField setC_ActionPtr:ptr Data:w]; gwenTextFieldActionPtr changed_ptr = CocoaGui_WTextEdit_Changed_text_handler; [textField setC_TextChanged_ActionPtr:changed_ptr Data:w]; if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/cocoa/CocoaHLineView.m0000644000175000017500000000163212364015347016375 00000000000000// // CocoaHLineView.m // // // Created by Samuel Strupp on 10.08.10. // #ifdef HAVE_CONFIG_H # include #endif #import "CocoaHLineView.h" @implementation CocoaHLineView @synthesize fillX; @synthesize fillY; - (id)initWithFrame:(NSRect)frame { self = [super initWithFrame:frame]; if (self) { fillX = NO; fillY = NO; } return self; } -(void) dealloc { [super dealloc]; } - (void)drawRect:(NSRect)dirtyRect { NSRect bounds = [self bounds]; [[NSColor grayColor] set]; NSBezierPath *line = [NSBezierPath bezierPath]; CGFloat y = bounds.origin.y+bounds.size.height/2.0; [line moveToPoint:NSMakePoint(bounds.origin.x, y)]; [line lineToPoint:NSMakePoint(bounds.origin.x + bounds.size.width, y)]; [line stroke]; } #pragma mark Protocoll Methods - (NSSize) minSize { return NSMakeSize(3.0, 3.0); } - (BOOL) fillX { return fillX; } - (BOOL) fillY { return fillY; } @end gwenhywfar-4.15.2beta/gui/cocoa/w_label.mm0000644000175000017500000001224112364015347015356 00000000000000/*************************************************************************** begin : August 09 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #import "CocoaLabel.h" static GWENHYWFAR_CB int CocoaGui_WLabel_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { CocoaLabel *labelTextField; labelTextField=(CocoaLabel*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(labelTextField); switch(prop) { case GWEN_DialogProperty_Enabled: [labelTextField setEnabled:(value==0)?NO:YES]; return 0; case GWEN_DialogProperty_Focus: if ([labelTextField window]) { [[labelTextField window] makeFirstResponder:labelTextField]; } return 0; case GWEN_DialogProperty_Width: { NSRect frame = [labelTextField frame]; frame.size.width = value; [labelTextField setFrame:frame]; } return 0; case GWEN_DialogProperty_Height:{ NSRect frame = [labelTextField frame]; frame.size.height = value; [labelTextField setFrame:frame]; } return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int CocoaGui_WLabel_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { CocoaLabel *labelTextField; labelTextField=(CocoaLabel*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(labelTextField); switch(prop) { case GWEN_DialogProperty_Enabled: return ([labelTextField isEnabled])?1:0; case GWEN_DialogProperty_Focus: if ([labelTextField window]) { if ([[labelTextField window] firstResponder] == labelTextField) { return 1; } } return 0; case GWEN_DialogProperty_Width: return [labelTextField frame].size.width; case GWEN_DialogProperty_Height: return [labelTextField frame].size.height; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } static GWENHYWFAR_CB int CocoaGui_WLabel_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal) { CocoaLabel *labelTextField; labelTextField=(CocoaLabel*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(labelTextField); switch(prop) { case GWEN_DialogProperty_Title: { NSString *stringValue = [[NSString alloc] initWithCString:value encoding:NSUTF8StringEncoding]; [labelTextField setStringValue:stringValue]; NSLog(@"%@", stringValue); [stringValue release]; } return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB const char* CocoaGui_WLabel_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue) { CocoaLabel *labelTextField; labelTextField=(CocoaLabel*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(labelTextField); switch(prop) { case GWEN_DialogProperty_Title: return [[labelTextField stringValue] cStringUsingEncoding:NSUTF8StringEncoding]; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } int CocoaGui_WLabel_Setup(GWEN_WIDGET *w) { CocoaLabel *labelTextField; const char *s; uint32_t flags; GWEN_WIDGET *wParent; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); s=GWEN_Widget_GetText(w, 0); labelTextField = [[[CocoaLabel alloc] initWithFrame:NSMakeRect(10.0, 10.0, 100.0, 24.0)] autorelease]; if (flags & GWEN_WIDGET_FLAGS_FILLX) labelTextField.fillX = YES; if (flags & GWEN_WIDGET_FLAGS_FILLY) labelTextField.fillY = YES; [labelTextField setDrawsBackground:NO]; [labelTextField setBordered:NO]; [labelTextField setEditable:NO]; if (s && *s) { NSString *stringValue = [[NSString alloc] initWithCString:s encoding:NSUTF8StringEncoding]; [labelTextField setStringValue:stringValue]; //NSLog(@"%@", stringValue); [stringValue release]; } GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_REAL, (void*) labelTextField); GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_CONTENT, (void*) labelTextField); GWEN_Widget_SetSetIntPropertyFn(w, CocoaGui_WLabel_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, CocoaGui_WLabel_GetIntProperty); GWEN_Widget_SetSetCharPropertyFn(w, CocoaGui_WLabel_SetCharProperty); GWEN_Widget_SetGetCharPropertyFn(w, CocoaGui_WLabel_GetCharProperty); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/cocoa/CocoaWindowContentView.h0000644000175000017500000000056512364015347020177 00000000000000// // CocoaWindowContentView.h // // // Created by Samuel Strupp on 10.08.10. // #import #import "CocoaGwenGUIProtocol.h" @interface CocoaWindowContentView : NSView { NSMutableArray *subviewsInOrder; BOOL fillX; BOOL fillY; } @property BOOL fillX; @property BOOL fillY; -(void) addLayoutSubview:(NSView*)new_subview; @end gwenhywfar-4.15.2beta/gui/cocoa/CocoaListBox.h0000644000175000017500000000172012364015347016120 00000000000000// // CocoaListBox.h // // // Created by Samuel Strupp on 17.08.10. // #import #import "CocoaGwenGUIProtocol.h" typedef void (*gwenListBoxActionPtr)(NSTableView *listbox, void* data); @interface CocoaListBox : NSTableView { gwenListBoxActionPtr c_actionPtr; void* c_actionData; BOOL fillX; BOOL fillY; NSMutableArray *dataArray; } @property BOOL fillX; @property BOOL fillY; -(void) setC_ActionPtr:(gwenListBoxActionPtr)ptr Data:(void*)data; -(void) setTitelsAndCreateColumns:(NSString*)titleString; -(NSString*) titlesString; -(void) addDataRowString:(NSString*)dataRowString; -(NSString*) dataRowStringForRow:(NSUInteger)index; -(void) clearDataRows; -(BOOL) setColumnWidthTo:(NSInteger)widthInPixels forColumn:(NSInteger)index; -(NSInteger) widthOfColumn:(NSInteger)index; -(BOOL) setSortOrderTo:(BOOL)ascending ForColumnWithIndex:(NSUInteger)index; -(NSInteger) sortOrderForColumnAtIndex:(NSUInteger)index; @end gwenhywfar-4.15.2beta/gui/cocoa/CocoaComboBox.m0000644000175000017500000000354312364015347016256 00000000000000// // CocoaComboBox.m // // // Created by Samuel Strupp on 10.08.10. // #ifdef HAVE_CONFIG_H # include #endif #import "CocoaComboBox.h" #ifndef COCOA_COMBOBOX_MM #define COCOA_COMBOBOX_MM @implementation CocoaComboBox @synthesize fillX; @synthesize fillY; - (id)initWithFrame:(NSRect)frame { self = [super initWithFrame:frame]; if (self) { [self setTarget:self]; [self setAction:@selector(textChanged:)]; c_actionPtr = nil; c_actionData = nil; c_actionPtr = nil; } return self; } -(void) dealloc { [super dealloc]; } -(NSSize) neededTextSize { if ([self numberOfItems] > 0) { NSSize maxSize = NSZeroSize; NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys: [NSColor blackColor], NSForegroundColorAttributeName, [self font], NSFontAttributeName, nil]; NSArray *objectValues = [self objectValues]; for (NSString *s in objectValues) { NSSize titleSize = [s sizeWithAttributes:attributes]; if (maxSize.width < titleSize.width) maxSize.width = titleSize.width; if (maxSize.height < titleSize.height) maxSize.height = titleSize.height; } return maxSize; } return NSZeroSize; } -(void) computeMinWidth { NSSize size = [self neededTextSize]; minWidth = size.width+44.0; } -(void) setC_ComboBoxActionPtr:(gwenComboBoxActionPtr)ptr Data:(void*)data { c_actionPtr = ptr; c_actionData = data; } -(void) textChanged:(id)sender { if (c_actionPtr) { c_actionPtr(self, c_actionData); } } - (void)setStringValue:(NSString *)aString { [super setStringValue:aString]; //damit hebeln wir die automatische Größen Berechnung vom CocoaLabel aus. } - (void)addItemWithObjectValue:(id)anObject { [super addItemWithObjectValue:anObject]; [self computeMinWidth]; } #pragma mark Protocoll Methods - (NSSize) minSize { return NSMakeSize(minWidth, 24.0); } @end #endif gwenhywfar-4.15.2beta/gui/cocoa/w_hline.mm0000644000175000017500000000520412364015347015377 00000000000000/*************************************************************************** begin : Auf 10 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #import "CocoaHLineView.h" static GWENHYWFAR_CB int CocoaGui_WHLine_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { CocoaHLineView *hLineView; hLineView=(CocoaHLineView*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(hLineView); switch(prop) { case GWEN_DialogProperty_Enabled: //gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE); return 0; case GWEN_DialogProperty_Focus: //gtk_widget_grab_focus(GTK_WIDGET(g)); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int CocoaGui_WHLine_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { CocoaHLineView *hLineView; hLineView=(CocoaHLineView*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(hLineView); switch(prop) { case GWEN_DialogProperty_Enabled: //return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0; return 0; case GWEN_DialogProperty_Focus: //return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0; return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } int CocoaGui_WHLine_Setup(GWEN_WIDGET *w) { CocoaHLineView *hLineView; uint32_t flags; GWEN_WIDGET *wParent; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); hLineView = [[[CocoaHLineView alloc] initWithFrame:NSMakeRect(0.0, 0.0, 100.0, 5.0)] autorelease]; if (flags & GWEN_WIDGET_FLAGS_FILLX) hLineView.fillX = YES; if (flags & GWEN_WIDGET_FLAGS_FILLY) hLineView.fillY = YES; GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_REAL, (void*) hLineView); GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_CONTENT, (void*) hLineView); GWEN_Widget_SetSetIntPropertyFn(w, CocoaGui_WHLine_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, CocoaGui_WHLine_GetIntProperty); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/cocoa/CocoaButton.h0000644000175000017500000000101512364015347016004 00000000000000// // CocoaButton.h // // // Created by Samuel Strupp on 10.08.10. // #import #import "CocoaGwenGUIProtocol.h" typedef void (*gwenActionPtr)(NSButton *button, void* data); @interface CocoaButton : NSButton { gwenActionPtr c_actionPtr; void* c_actionData; BOOL fillX; BOOL fillY; CGFloat minWidth; } @property BOOL fillX; @property BOOL fillY; -(void) setC_ActionPtr:(gwenActionPtr)ptr Data:(void*)data; -(NSSize) neededTextSize; -(void) clicked:(id) sender; @end gwenhywfar-4.15.2beta/gui/cocoa/CocoaListBox.m0000644000175000017500000001721212364015347016130 00000000000000// // CocoaListBox.m // // // Created by Samuel Strupp on 17.08.10. // #ifdef HAVE_CONFIG_H # include #endif #import "CocoaListBox.h" @implementation CocoaListBox @synthesize fillX; @synthesize fillY; - (id)initWithFrame:(NSRect)frame { self = [super initWithFrame:frame]; if (self) { fillX = NO; fillY = NO; dataArray = [[NSMutableArray alloc] init]; [self setColumnAutoresizingStyle:NSTableViewLastColumnOnlyAutoresizingStyle]; [self setUsesAlternatingRowBackgroundColors:YES]; [self setDataSource:self]; [self setDelegate:self]; [self setTarget:self]; [self setAction:@selector(performAction:)]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(performAction:) name:NSTableViewSelectionDidChangeNotification object:self]; } return self; } -(void) dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; [dataArray release]; [super dealloc]; } #pragma mark Special Methods -(void) setC_ActionPtr:(gwenListBoxActionPtr)ptr Data:(void*)data { c_actionPtr = ptr; c_actionData = data; } -(void) performAction:(id) sender { if (c_actionPtr) { c_actionPtr(self, c_actionData); } } -(void) setTitelsAndCreateColumns:(NSString*)titleString { if (!titleString) return; //first delete old columns NSArray *oldColumns = [self tableColumns]; for (NSTableColumn *oldColumn in oldColumns) { [self removeTableColumn:oldColumn]; } //now create new columns NSArray *titles = [titleString componentsSeparatedByString:@"\t"]; //NSLog(@"%@", titles); NSUInteger numOfColumns = [titles count]; NSUInteger i; for (i=0; i indexOfColumn) { obj1 = [element1 objectAtIndex:indexOfColumn]; } if ([element2 count] > indexOfColumn) { obj2 = [element2 objectAtIndex:indexOfColumn]; } if (obj1 && obj2) { NSComparisonResult result = [obj1 localizedCaseInsensitiveCompare:obj2]; if (ascending) return result; else { if (result == NSOrderedAscending) return NSOrderedDescending; else if (result == NSOrderedDescending) return NSOrderedAscending; else return result; } } return NSOrderedSame; } -(void) sortTableView:(NSTableView*)tableView { NSArray *sortDescriptors = [tableView sortDescriptors]; if (!sortDescriptors || [sortDescriptors count] <=0) return; NSSortDescriptor *sortDesc = [sortDescriptors objectAtIndex:0]; if (sortDesc) { NSNumber *indexOfColumn = [NSNumber numberWithInteger:[[sortDesc key] integerValue]]; NSNumber *sortOrder = [NSNumber numberWithBool:[sortDesc ascending]]; //NSLog(@"sort Index = %@ Ascending = %@", [indexOfColumn description], [sortOrder description]); NSArray *keys = [NSArray arrayWithObjects:@"indexOfColumn", @"ascending", nil]; NSArray *objects = [NSArray arrayWithObjects:indexOfColumn, sortOrder, nil]; NSDictionary *contextDict = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; [dataArray sortUsingFunction:positionSort context:contextDict]; [self reloadData]; } } -(BOOL) setColumnWidthTo:(NSInteger)widthInPixels forColumn:(NSInteger)index { if (index < 0 || widthInPixels < 0) return NO; NSTableColumn *tableColumn = [self tableColumnWithIdentifier:[NSString stringWithFormat:@"%i",index]]; if (tableColumn) { [tableColumn setWidth:widthInPixels]; return YES; } return NO; } -(NSInteger) widthOfColumn:(NSInteger)index { if (index >= 0) { NSTableColumn *tableColumn = [self tableColumnWithIdentifier:[NSString stringWithFormat:@"%i",index]]; if (tableColumn) { return ceil([tableColumn width]); } } return -1; } -(BOOL) setSortOrderTo:(BOOL)ascending ForColumnWithIndex:(NSUInteger)index { NSArray *tableColumns = [self tableColumns]; if (index < [tableColumns count]) { NSSortDescriptor *sortDesc = [[NSSortDescriptor alloc] initWithKey:[NSString stringWithFormat:@"%u",index] ascending:ascending]; [self setSortDescriptors:[NSArray arrayWithObject:sortDesc]]; [sortDesc release]; [self sortTableView:self]; return YES; } return NO; } -(NSInteger) sortOrderForColumnAtIndex:(NSUInteger)index { NSArray *tableColumns = [self tableColumns]; if (index < [tableColumns count]) { NSArray *sortDescriptors = [self sortDescriptors]; if (!sortDescriptors || [sortDescriptors count] <=0) return -1; NSSortDescriptor *sortDesc = [sortDescriptors objectAtIndex:0]; if ((NSUInteger)[[sortDesc key] integerValue] == index) { return [sortDesc ascending]; } } return -1; } #pragma mark DataSource Methods - (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView { return [dataArray count]; } - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex { if (rowIndex >= 0 && rowIndex < [dataArray count]) { NSUInteger index = [(NSString*)[aTableColumn identifier] integerValue]; NSArray *rowArray = [dataArray objectAtIndex:rowIndex]; if (rowArray && index < [rowArray count]) { return [rowArray objectAtIndex:index]; } } return nil; } - (void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex { return; } #pragma mark Delegate Methods - (void)tableView:(NSTableView *)aTableView sortDescriptorsDidChange:(NSArray *)oldDescriptors { [self sortTableView:aTableView]; } #pragma mark Protocoll Methods - (NSSize) minSize { return NSMakeSize(300.0, 300.0); } - (BOOL) fillX { return fillX; } - (BOOL) fillY { return fillY; } @end gwenhywfar-4.15.2beta/gui/cocoa/w_vline.mm0000644000175000017500000000521212364015347015414 00000000000000/*************************************************************************** begin : Auf 10 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #import "CocoaVLineView.h" static GWENHYWFAR_CB int CocoaGui_WVLine_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal) { CocoaVLineView *vLineView; vLineView=(CocoaVLineView*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(vLineView); switch(prop) { case GWEN_DialogProperty_Enabled: //gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE); return 0; case GWEN_DialogProperty_Focus: //gtk_widget_grab_focus(GTK_WIDGET(g)); return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return GWEN_ERROR_INVALID; } static GWENHYWFAR_CB int CocoaGui_WVLine_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue) { CocoaVLineView *vLineView; vLineView=(CocoaVLineView*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); assert(vLineView); switch(prop) { case GWEN_DialogProperty_Enabled: //return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0; return 0; case GWEN_DialogProperty_Focus: //return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0; return 0; default: break; } DBG_WARN(GWEN_LOGDOMAIN, "Function is not appropriate for this type of widget (%s)", GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); return defaultValue; } int CocoaGui_WVLine_Setup(GWEN_WIDGET *w) { CocoaVLineView *vLineView; uint32_t flags; GWEN_WIDGET *wParent; flags=GWEN_Widget_GetFlags(w); wParent=GWEN_Widget_Tree_GetParent(w); vLineView = [[[CocoaVLineView alloc] initWithFrame:NSMakeRect(0.0, 0.0, 100.0, 5.0)] autorelease]; if (flags & GWEN_WIDGET_FLAGS_FILLX) vLineView.fillX = YES; if (flags & GWEN_WIDGET_FLAGS_FILLY) vLineView.fillY = YES; GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_REAL, (void*) vLineView); GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_CONTENT, (void*) vLineView); GWEN_Widget_SetSetIntPropertyFn(w, CocoaGui_WHLine_SetIntProperty); GWEN_Widget_SetGetIntPropertyFn(w, CocoaGui_WHLine_GetIntProperty); if (wParent) GWEN_Widget_AddChildGuiWidget(wParent, w); return 0; } gwenhywfar-4.15.2beta/gui/cocoa/CocoaScrollBox.h0000644000175000017500000000057112364015347016446 00000000000000// // CocoaScrollBox.h // // // Created by Samuel Strupp on 17.08.10. // #import #import "CocoaGwenGUIProtocol.h" @interface CocoaScrollBox : NSScrollView { //NSMutableArray *subviewsInOrder; BOOL fillX; BOOL fillY; } @property BOOL fillX; @property BOOL fillY; -(void) setLayoutedDocumentView:(NSView*)new_documentView; @end gwenhywfar-4.15.2beta/gui/cocoa/cocoa_gui.m0000644000175000017500000001534112364015347015530 00000000000000/*************************************************************************** begin : August 03 2010 copyright : (C) 2010 by Samuel Strupp *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "cocoa_gui_dialog_l.h" #include "cocoa_gui_p.h" #include #include #include #include #include #include #include #include GWEN_INHERIT(GWEN_GUI, COCOA_GUI) #define I18N(msg) GWEN_I18N_Translate(PACKAGE, msg) GWEN_GUI *Cocoa_Gui_new() { GWEN_GUI *gui; COCOA_GUI *xgui; gui=GWEN_Gui_new(); GWEN_NEW_OBJECT(COCOA_GUI, xgui); GWEN_INHERIT_SETDATA(GWEN_GUI, COCOA_GUI, gui, xgui, Cocoa_Gui_FreeData); GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_DIALOGSUPPORTED); GWEN_Gui_UseDialogs(gui); xgui->execDialogFn=GWEN_Gui_SetExecDialogFn(gui, COCOA_Gui_ExecDialog); xgui->openDialogFn=GWEN_Gui_SetOpenDialogFn(gui, COCOA_Gui_OpenDialog); xgui->closeDialogFn=GWEN_Gui_SetCloseDialogFn(gui, COCOA_Gui_CloseDialog); xgui->runDialogFn=GWEN_Gui_SetRunDialogFn(gui, COCOA_Gui_RunDialog); xgui->getFileNameDialogFn=GWEN_Gui_SetGetFileNameFn(gui, COCOA_Gui_GetFileName); return gui; } void Cocoa_Gui_FreeData(void *bp, void *p) { COCOA_GUI *xgui; xgui=(COCOA_GUI*) p; GWEN_FREE_OBJECT(xgui); } int COCOA_Gui_ExecDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg, uint32_t guiid) { NSLog(@"ExecDialog"); int rv; rv = COCOA_Gui_OpenDialog(gui, dlg, guiid); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv = COCOA_Gui_RunDialog(gui, dlg, 1); COCOA_Gui_CloseDialog(gui, dlg); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } int COCOA_Gui_OpenDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg, uint32_t guiid) { int rv; NSWindow *g; NSLog(@"OpenDialog"); CocoaGui_Dialog_Extend(dlg); rv=CocoaGui_Dialog_Setup(dlg, NULL); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); CocoaGui_Dialog_Unextend(dlg); return rv; } NSLog(@"OpenDialog Setup"); g=CocoaGui_Dialog_GetMainWidget(dlg); if (g==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No main widget"); CocoaGui_Dialog_Unextend(dlg); return GWEN_ERROR_INVALID; } NSLog(@"OpenDialog GetMainWidget"); rv=GWEN_Dialog_EmitSignalToAll(dlg, GWEN_DialogEvent_TypeInit, ""); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Error initializing dialog: %d", rv); CocoaGui_Dialog_Unextend(dlg); return rv; } NSLog(@"OpenDialog EmitSignalToAll"); /* show dialog */ [g center]; [g makeKeyAndOrderFront:nil]; return 0; } int COCOA_Gui_CloseDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg) { NSWindow *g; int rv; g=CocoaGui_Dialog_GetMainWidget(dlg); if (g==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "No main widget"); CocoaGui_Dialog_Unextend(dlg); return GWEN_ERROR_INVALID; } /* hide dialog */ [g close]; /* send fini signal to dialog */ rv=GWEN_Dialog_EmitSignalToAll(dlg, GWEN_DialogEvent_TypeFini, ""); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Error deinitializing dialog: %d", rv); CocoaGui_Dialog_Unextend(dlg); return rv; } CocoaGui_Dialog_Unextend(dlg); return 0; } int COCOA_Gui_RunDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg, int untilEnd) { int rv; rv=Cocoa_Gui_Dialog_Run(dlg, untilEnd); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return rv; } int COCOA_Gui_GetFileName(GWEN_GUI *gui, const char *caption, GWEN_GUI_FILENAME_TYPE fnt, uint32_t flags, const char *patterns, GWEN_BUFFER *pathBuffer, uint32_t guiid) { char *folder=NULL; char *fileName=NULL; if (GWEN_Buffer_GetUsedBytes(pathBuffer)) { folder=strdup(GWEN_Buffer_GetStart(pathBuffer)); fileName=strchr(folder, GWEN_DIR_SEPARATOR); if (fileName) { *fileName=0; fileName++; if (*fileName==0) fileName=NULL; } } switch(fnt) { case GWEN_Gui_FileNameType_OpenFileName: case GWEN_Gui_FileNameType_OpenDirectory: { NSString *title = nil; if (caption && *caption) title = [[[NSString alloc] initWithCString:caption encoding:NSUTF8StringEncoding] autorelease]; NSOpenPanel *openPanel = [NSOpenPanel openPanel]; if (openPanel) { if (title) [openPanel setTitle:title]; [openPanel setAllowsMultipleSelection:NO]; [openPanel setCanChooseFiles:(fnt == GWEN_Gui_FileNameType_OpenFileName)]; [openPanel setCanChooseDirectories:(fnt == GWEN_Gui_FileNameType_OpenDirectory)]; NSString *pathToFolder = nil; if (fileName && *fileName) pathToFolder = [[[NSString alloc] initWithCString:fileName encoding:NSUTF8StringEncoding] autorelease]; if (pathToFolder) [openPanel setDirectory:pathToFolder]; NSInteger result = [openPanel runModal]; if (result == NSFileHandlingPanelOKButton) { NSArray *urls = [openPanel URLs]; if (urls && [urls count] > 0) { NSString *path = [[(NSURL*)[urls objectAtIndex:0] path] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; if (path && [path length]>0) { const char *filename = [path cStringUsingEncoding:NSUTF8StringEncoding]; GWEN_Buffer_Reset(pathBuffer); GWEN_Buffer_AppendString(pathBuffer, filename); return 0; } } } } return GWEN_ERROR_USER_ABORTED; } case GWEN_Gui_FileNameType_SaveFileName: { NSString *title = nil; if (caption && *caption) title = [[[NSString alloc] initWithCString:caption encoding:NSUTF8StringEncoding] autorelease]; NSSavePanel *savePanel = [NSSavePanel savePanel]; if (savePanel) { if (title) [savePanel setTitle:title]; [savePanel setCanCreateDirectories:YES]; NSString *pathToFolder = nil; if (fileName && *fileName) pathToFolder = [[[NSString alloc] initWithCString:fileName encoding:NSUTF8StringEncoding] autorelease]; if (pathToFolder) [savePanel setDirectory:pathToFolder]; NSInteger result = [savePanel runModal]; if (result == NSFileHandlingPanelOKButton) { NSURL *url = [savePanel URL]; if (url) { NSString *path = [[url path] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; if (path && [path length]>0) { const char *filename = [path cStringUsingEncoding:NSUTF8StringEncoding]; GWEN_Buffer_Reset(pathBuffer); GWEN_Buffer_AppendString(pathBuffer, filename); return 0; } } } } return GWEN_ERROR_USER_ABORTED; } default: break; } free(folder); return GWEN_ERROR_USER_ABORTED; } gwenhywfar-4.15.2beta/gui/cocoa/CocoaPopUpButton.m0000644000175000017500000000353712364015347017010 00000000000000// // CocoaPopUpButton.m // // // Created by Samuel Strupp on 10.08.10. // #ifdef HAVE_CONFIG_H # include #endif #import "CocoaPopUpButton.h" #ifndef COCOA_POPUP_BUTTON_MM #define COCOA_POPUP_BUTTON_MM @implementation CocoaPopUpButton @synthesize fillX; @synthesize fillY; - (id)initWithFrame:(NSRect)frameRect pullsDown:(BOOL)flag { self = [super initWithFrame:frameRect pullsDown:flag]; if (self) { [self setTarget:self]; [self setAction:@selector(clicked:)]; c_actionPtr = nil; c_actionData = nil; fillX = NO; fillY = NO; minWidth = 40.0; } return self; } -(void) dealloc { [super dealloc]; } -(NSSize) neededTextSize { if ([self numberOfItems] > 0) { NSSize maxSize = NSZeroSize; NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys: [NSColor blackColor], NSForegroundColorAttributeName, [self font], NSFontAttributeName, nil]; NSArray *titles = [self itemTitles]; for (NSString *title in titles) { NSSize titleSize = [title sizeWithAttributes:attributes]; if (maxSize.width < titleSize.width) maxSize.width = titleSize.width; if (maxSize.height < titleSize.height) maxSize.height = titleSize.height; } return maxSize; } return NSZeroSize; } -(void) computeMinWidth { NSSize size = [self neededTextSize]; minWidth = size.width + 40.0; } -(void) setC_PopUpActionPtr:(gwenPopUpActionPtr)ptr Data:(void*)data { c_actionPtr = ptr; c_actionData = data; } -(void) clicked:(id) sender { if (c_actionPtr) { c_actionPtr(self, c_actionData); } } - (void)setTitle:(NSString *)aString { [super setTitle:aString]; [self computeMinWidth]; } - (void)addItemWithTitle:(NSString *)title { [super addItemWithTitle:title]; [self computeMinWidth]; } #pragma mark Protocoll Methods - (NSSize) minSize { return NSMakeSize(minWidth, 24.0); } @end #endif gwenhywfar-4.15.2beta/install-sh0000755000175000017500000003325512261335263013560 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-11-20.07; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gwenhywfar-4.15.2beta/configure0000755000175000017500000272612112634022417013464 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= ac_unique_file="src/gwenhywfarapi.h" ac_default_prefix=/usr # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_list= ac_func_list= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS gwenhywfar_plugins_cfgmgr_libs gwenhywfar_plugins_cfgmgr_dirs gwenhywfar_plugins_dbio_libs gwenhywfar_plugins_dbio_dirs gwenhywfar_plugins_ct_libs gwenhywfar_plugins_ct_dirs gwenhywfar_datadir gwenhywfar_symlinkdir gwenhywfar_headerdir gwenhywfar_headerdir_am gwenhywfar_plugindir gwenhywfar_pkgincludedir gwenhywfar_os_lib gwenhywfar_libsui gwenhywfar_libspp gwenhywfar_internal_libname gwenhywfar_libs gwenhywfar_bindir gwenhywfar_ldflags gwenhywfar_crypt_lib all_libraries all_includes PROG_LIBRARIES GWEN_OS DOXYGEN_DEFINE DOXYGEN_INPUT gwenhywfar_buffer_hardlimit visibility_cflags STRIPALL DOXYGEN_TAGFILES docpath WITH_GUI_QT4_FALSE WITH_GUI_QT4_TRUE with_gui_qt4 QT4_BINDIR YES qt4_uic qt4_moc qt4_includes qt4_libs WITH_GUI_GTK2_FALSE WITH_GUI_GTK2_TRUE with_gui_gtk2 GTK2_LIBS GTK2_CFLAGS WITH_GUI_FOX16_FALSE WITH_GUI_FOX16_TRUE with_gui_fox16 fox_includes fox_libs gwenhywfar_guis ICONV_LIBS WITH_ICONV i18n_libs HAVE_I18N IF_MAKE_I18N_FILES_FALSE IF_MAKE_I18N_FILES_TRUE MAKE_I18N_FILES MSGFMT XGETTEXT aq_distrib_version aq_distrib_tag aq_distrib_name ssl_available IF_HAVE_OPENSSL_FALSE IF_HAVE_OPENSSL_TRUE ssl_lib ssl_libraries ssl_includes PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG LIBGNUTLS_LIBS LIBGNUTLS_CFLAGS GPG_ERROR_LIBS GPG_ERROR_CFLAGS GPG_ERROR_CONFIG LIBGCRYPT_CONFIG LIBGCRYPT_LIBS LIBGCRYPT_CFLAGS DPKG_ARCH PROFILING_LDFLAGS PROFILING_CFLAGS gwenhywfar_cfg_searchdir gwenhywfar_locale_searchdir gwenhywfar_sysdata_searchdir gwenhywfar_data_searchdir gwenhywfar_plugin_searchdir gwenhywfar_sys_is_windows IS_WINDOWS_FALSE IS_WINDOWS_TRUE BINRELOC_LIBS BINRELOC_CFLAGS LIBOBJS LTLIBICONV LIBICONV rt_libs USE_DOT RC AS CXXCPP CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR DLLTOOL OBJDUMP LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED LIBTOOL am__fastdepOBJC_FALSE am__fastdepOBJC_TRUE OBJCDEPMODE ac_ct_OBJC OBJCFLAGS OBJC am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC WEBKIT_FRAMEWORK COREDATA_FRAMEWORK APPKIT_FRAMEWORK SYSCONF_FRAMEWORK FOUNDATION_FRAMEWORK COCOA_FRAMEWORK INSTALL_DLL_TARGET MAKE_DLL_TARGET OS_TYPE OSYSTEM GWENPP_SO_EFFECTIVE GWENPP_SO_AGE GWENPP_SO_REVISION GWENPP_SO_CURRENT GWENUI_SO_EFFECTIVE GWENUI_SO_AGE GWENUI_SO_REVISION GWENUI_SO_CURRENT AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM GWENHYWFAR_SO_EFFECTIVE GWENHYWFAR_SO_AGE GWENHYWFAR_SO_REVISION GWENHYWFAR_SO_CURRENT OHBCI_VERSION_STRING GWENHYWFAR_VERSION_RELEASE_STRING GWENHYWFAR_VERSION_STRING GWENHYWFAR_VERSION_FULL_STRING GWENHYWFAR_VERSION_TAG GWENHYWFAR_VERSION_BUILD GWENHYWFAR_VERSION_PATCHLEVEL GWENHYWFAR_VERSION_MINOR GWENHYWFAR_VERSION_MAJOR host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_static enable_shared enable_dependency_tracking with_pic enable_fast_install with_gnu_ld with_sysroot enable_libtool_lock enable_rpath with_libiconv_prefix enable_binreloc enable_binreloc_threads enable_gwen_subproject enable_network_checks enable_local_install with_plugin_searchdir with_data_searchdir with_sysdata_searchdir with_locale_searchdir with_cfg_searchdir enable_variadic_macros enable_profiling with_libgcrypt_prefix with_libgpg_error_prefix with_gpg_error_prefix enable_ssl with_openssl_includes with_openssl_libs with_iconv with_guis enable_fox with_fox_includes with_fox_libs with_qt4_includes with_qt4_libs with_qt4_moc with_qt4_uic with_docpath enable_release enable_memtrace enable_debug enable_warnings enable_error_on_warning with_buffer_hardlimit enable_full_doc with_plugins_ct with_plugins_dbio with_plugins_cfgmgr ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CXX CXXFLAGS CCC OBJC OBJCFLAGS CPP CXXCPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR LIBGNUTLS_CFLAGS LIBGNUTLS_LIBS GTK2_CFLAGS GTK2_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-static[=PKGS] build static libraries [default=no] --enable-shared[=PKGS] build shared libraries [default=yes] --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-rpath do not hardcode runtime library paths --enable-binreloc compile with binary relocation support (default=enable when available) --enable-binreloc-threads compile binary relocation with threads support (default=yes) --enable-gwen-subproject make gwen only a subproject (default=no) --disable-network-checks disables checks that assume available network during build (default=enabled) --enable-local-install allow local installation mode (default=no) --enable-variadic-macros enable variadic macros (default=yes) --enable-profiling enable profiling (default=no) --enable-ssl enable SSL features (default=yes) --enable-fox enable fox (default=yes) --enable-release make this an official release (default=no) --enable-memtrace enable memory trace (default=no) --enable-debug compile with debugging code enabled, default=no --enable-warnings enable compilation warnings, default=yes --enable-error-on-warning treat all compile warnings as errors, default=no --enable-full-doc enable creating full apidoc (default=no) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-gnu-ld assume the C compiler uses GNU ld default=no --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir --with-plugin-searchdir=DIR where to search for plugins --with-data-searchdir=DIR where to search for gwen's data files --with-sysdata-searchdir=DIR where to search for data files --with-locale-searchdir=DIR where to search for locale files --with-cfg-searchdir=DIR where to search for cfg files --with-libgcrypt-prefix=PFX prefix where LIBGCRYPT is installed (optional) --with-libgpg-error-prefix=PFX prefix where GPG Error is installed (optional) --with-openssl-includes=DIR specify include directory for openssl includes --with-openssl-libs=DIR specify lib directory for openssl libraries --with-iconv=PATH take iconv from PATH --with-guis=list space separated list of GUI implementations (default:all) --with-fox-includes=DIR uses fox includes from given dir --with-fox-libs=SPEC uses given fox libs --with-qt4-includes=DIR uses qt4 includes from given dir --with-qt4-libs=DIR uses qt4 libs from given dir --with-qt4-moc=FILE uses the given qt4 moc --with-qt4-uic=FILE uses the given qt4 uic --with-docpath=DIR where to store the apidoc --with-buffer-hardlimit=VALUE new default buffer hard limit --with-plugins-ct=LIST list of CT plugins to build --with-plugins-dbio=LIST list of DBIO plugins to build --with-plugins-cfgmgr=LIST list of ConfigManager plugins to build Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CXX C++ compiler command CXXFLAGS C++ compiler flags OBJC Objective C compiler command OBJCFLAGS Objective C compiler flags CPP C preprocessor CXXCPP C++ preprocessor PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path LIBGNUTLS_CFLAGS C compiler flags for LIBGNUTLS, overriding pkg-config LIBGNUTLS_LIBS linker flags for LIBGNUTLS, overriding pkg-config GTK2_CFLAGS C compiler flags for GTK2, overriding pkg-config GTK2_LIBS linker flags for GTK2, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_objc_try_compile LINENO # ----------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_objc_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_objc_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_objc_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES # --------------------------------------------- # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR # accordingly. ac_fn_c_check_decl () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack as_decl_name=`echo $2|sed 's/ *(.*//'` as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 $as_echo_n "checking whether $as_decl_name is declared... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { #ifndef $as_decl_name #ifdef __cplusplus (void) $as_decl_use; #else (void) $as_decl_name; #endif #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_decl cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi as_fn_append ac_header_list " sys/time.h" as_fn_append ac_header_list " unistd.h" as_fn_append ac_func_list " alarm" # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac ac_config_headers="$ac_config_headers config.h" ###------------------------------------------------------------------------- # # versions # GWENHYWFAR_VERSION_MAJOR=4 GWENHYWFAR_VERSION_MINOR=15 GWENHYWFAR_VERSION_PATCHLEVEL=2 GWENHYWFAR_VERSION_BUILD=0 GWENHYWFAR_VERSION_TAG="beta" ###------------------------------------------------------------------------- # # SO version for Gwenhywfar # GWENHYWFAR_SO_CURRENT="75" GWENHYWFAR_SO_AGE="15" GWENHYWFAR_SO_REVISION="2" GWENHYWFAR_SO_EFFECTIVE="`echo \$(($GWENHYWFAR_SO_CURRENT-$GWENHYWFAR_SO_AGE))`" ###------------------------------------------------------------------------- # # Generate version strings and BUILD # #GWENHYWFAR_VERSION_BUILD="0" # Let svn write the revision number directly into here on # each svn update. Note: The trailing space is necessary for # cvs versions. #GWENHYWFAR_VERSION_BUILD=`echo "$Rev$ " | cut -d' ' -f2` #if test "x$GWENHYWFAR_VERSION_BUILD" = "x" ; then # GWENHYWFAR_VERSION_BUILD="0" #fi GWENHYWFAR_VERSION_FULL_STRING="$GWENHYWFAR_VERSION_MAJOR.$GWENHYWFAR_VERSION_MINOR.${GWENHYWFAR_VERSION_PATCHLEVEL}${GWENHYWFAR_VERSION_TAG}-${GWENHYWFAR_VERSION_BUILD}" GWENHYWFAR_VERSION_STRING="$GWENHYWFAR_VERSION_MAJOR.$GWENHYWFAR_VERSION_MINOR.$GWENHYWFAR_VERSION_PATCHLEVEL" # The version number for the plugin/ct/ohbci/ohbci.la OHBCI_VERSION_STRING="0.1.0" ###------------------------------------------------------------------------- # # Create release strings # case "$GWENHYWFAR_VERSION_TAG" in cvs|svn|git) GWENHYWFAR_VERSION_RELEASE_STRING="$GWENHYWFAR_VERSION_MAJOR.$GWENHYWFAR_VERSION_MINOR.$GWENHYWFAR_VERSION_PATCHLEVEL.r${GWENHYWFAR_VERSION_BUILD}" ;; stable) GWENHYWFAR_VERSION_RELEASE_STRING="$GWENHYWFAR_VERSION_MAJOR.$GWENHYWFAR_VERSION_MINOR.$GWENHYWFAR_VERSION_PATCHLEVEL" ;; *) GWENHYWFAR_VERSION_RELEASE_STRING="$GWENHYWFAR_VERSION_MAJOR.$GWENHYWFAR_VERSION_MINOR.$GWENHYWFAR_VERSION_PATCHLEVEL" # add TAG GWENHYWFAR_VERSION_RELEASE_STRING="${GWENHYWFAR_VERSION_RELEASE_STRING}${GWENHYWFAR_VERSION_TAG}" ;; esac cat >>confdefs.h <<_ACEOF #define GWENHYWFAR_VERSION_MAJOR $GWENHYWFAR_VERSION_MAJOR _ACEOF cat >>confdefs.h <<_ACEOF #define GWENHYWFAR_VERSION_MINOR $GWENHYWFAR_VERSION_MINOR _ACEOF cat >>confdefs.h <<_ACEOF #define GWENHYWFAR_VERSION_PATCHLEVEL $GWENHYWFAR_VERSION_PATCHLEVEL _ACEOF cat >>confdefs.h <<_ACEOF #define GWENHYWFAR_VERSION_BUILD $GWENHYWFAR_VERSION_BUILD _ACEOF cat >>confdefs.h <<_ACEOF #define GWENHYWFAR_VERSION_STRING "$GWENHYWFAR_VERSION_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define GWENHYWFAR_VERSION_FULL_STRING "$GWENHYWFAR_VERSION_FULL_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define GWENHYWFAR_VERSION_TAG $GWENHYWFAR_VERSION_TAG _ACEOF am__api_version='1.14' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE=gwenhywfar VERSION=$GWENHYWFAR_VERSION_RELEASE_STRING cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi ###------------------------------------------------------------------------- # # SO version for GwenUI # GWENUI_SO_CURRENT="1" GWENUI_SO_REVISION="1" GWENUI_SO_AGE="0" GWENUI_SO_EFFECTIVE="`echo \$(($GWENUI_SO_CURRENT-$GWENUI_SO_AGE))`" ###------------------------------------------------------------------------- # # SO version for GwenPP # GWENPP_SO_CURRENT="16" GWENPP_SO_REVISION="0" GWENPP_SO_AGE="0" GWENPP_SO_EFFECTIVE="`echo \$(($GWENPP_SO_CURRENT-$GWENPP_SO_AGE))`" ###------------------------------------------------------------------------- # check for OS # check for OS { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } OSYSTEM="" OS_TYPE="" MAKE_DLL_TARGET="" INSTALL_DLL_TARGET="" cat >>confdefs.h <<_ACEOF #define OS_NAME "$host" _ACEOF case "$host" in *-linux*) OSYSTEM="linux" $as_echo "#define OS_LINUX 1" >>confdefs.h $as_echo "#define OS_POSIX 1" >>confdefs.h OS_TYPE="posix" ;; *-solaris*) OSYSTEM="solaris" $as_echo "#define OS_SOLARIS 1" >>confdefs.h $as_echo "#define OS_POSIX 1" >>confdefs.h OS_TYPE="posix" ;; *-darwin*) OSYSTEM="osx" $as_echo "#define OS_DARWIN 1" >>confdefs.h $as_echo "#define OS_POSIX 1" >>confdefs.h OS_TYPE="posix" ;; *-openbsd*) OSYSTEM="openbsd" $as_echo "#define OS_OPENBSD 1" >>confdefs.h $as_echo "#define OS_POSIX 1" >>confdefs.h OS_TYPE="posix" ;; *-freebsd* | *-kfreebsd*) OSYSTEM="freebsd" $as_echo "#define OS_FREEBSD 1" >>confdefs.h $as_echo "#define OS_POSIX 1" >>confdefs.h OS_TYPE="posix" ;; *-netbsd*) OSYSTEM="netbsd" $as_echo "#define OS_NETBSD 1" >>confdefs.h $as_echo "#define OS_POSIX 1" >>confdefs.h OS_TYPE="posix" ;; *-beos*) OSYSTEM="beos" $as_echo "#define OS_BEOS 1" >>confdefs.h $as_echo "#define OS_POSIX 1" >>confdefs.h OS_TYPE="posix" ;; *-win32*) OSYSTEM="windows" $as_echo "#define OS_WIN32 1" >>confdefs.h OS_TYPE="windows" cat >>confdefs.h <<_ACEOF #define BUILDING_DLL 1 _ACEOF MAKE_DLL_TARGET="dll" INSTALL_DLL_TARGET="dll-install" ;; *-mingw32*) OSYSTEM="windows" $as_echo "#define OS_WIN32 1" >>confdefs.h OS_TYPE="windows" cat >>confdefs.h <<_ACEOF #define BUILDING_DLL 1 _ACEOF MAKE_DLL_TARGET="dll" INSTALL_DLL_TARGET="dll-install" ;; *-palmos*) OSYSTEM="palmos" $as_echo "#define OS_PALMOS 1" >>confdefs.h OS_TYPE="palmos" ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Sorry, but host $host is not supported. Please report if it works anyway. We will assume that your system is a posix system and continue." >&5 $as_echo "$as_me: WARNING: Sorry, but host $host is not supported. Please report if it works anyway. We will assume that your system is a posix system and continue." >&2;} OSYSTEM="unknown" OS_TYPE="posix" $as_echo "#define OS_POSIX 1" >>confdefs.h ;; esac cat >>confdefs.h <<_ACEOF #define OS_SHORTNAME "$OSYSTEM" _ACEOF cat >>confdefs.h <<_ACEOF #define OS_TYPE "$OS_TYPE" _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OS_TYPE" >&5 $as_echo "$OS_TYPE" >&6; } if test "$OSYSTEM" = "osx"; then COCOA_FRAMEWORK="-framework Cocoa" FOUNDATION_FRAMEWORK="-framework CoreFoundation" SYSCONF_FRAMEWORK="-framework SystemConfiguration" APPKIT_FRAMEWORK="-framework AppKit" COREDATA_FRAMEWORK="-framework CoreData" WEBKIT_FRAMEWORK="-framework WebKit" fi ###------------------------------------------------------------------------- # prefix handling if test "x$prefix" = "xNONE"; then prefix=$ac_default_prefix ac_configure_args="$ac_configure_args --prefix $prefix" fi ###------------------------------------------------------------------------- # # static/shared handling # # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=no fi # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi ###------------------------------------------------------------------------- # # Checks for programs. # ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CXX_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi ac_ext=m ac_cpp='$OBJCPP $CPPFLAGS' ac_compile='$OBJC -c $OBJCFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$OBJC -o conftest$ac_exeext $OBJCFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_objc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in gcc objcc objc cc CC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJC"; then ac_cv_prog_OBJC="$OBJC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJC=$ac_cv_prog_OBJC if test -n "$OBJC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJC" >&5 $as_echo "$OBJC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$OBJC" && break done fi if test -z "$OBJC"; then ac_ct_OBJC=$OBJC for ac_prog in gcc objcc objc cc CC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJC"; then ac_cv_prog_ac_ct_OBJC="$ac_ct_OBJC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJC=$ac_cv_prog_ac_ct_OBJC if test -n "$ac_ct_OBJC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJC" >&5 $as_echo "$ac_ct_OBJC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_OBJC" && break done if test "x$ac_ct_OBJC" = x; then OBJC="gcc" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJC=$ac_ct_OBJC fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for Objective C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Objective C compiler" >&5 $as_echo_n "checking whether we are using the GNU Objective C compiler... " >&6; } if ${ac_cv_objc_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_objc_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_objc_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objc_compiler_gnu" >&5 $as_echo "$ac_cv_objc_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GOBJC=yes else GOBJC= fi ac_test_OBJCFLAGS=${OBJCFLAGS+set} ac_save_OBJCFLAGS=$OBJCFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $OBJC accepts -g" >&5 $as_echo_n "checking whether $OBJC accepts -g... " >&6; } if ${ac_cv_prog_objc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_objc_werror_flag=$ac_objc_werror_flag ac_objc_werror_flag=yes ac_cv_prog_objc_g=no OBJCFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_objc_try_compile "$LINENO"; then : ac_cv_prog_objc_g=yes else OBJCFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_objc_try_compile "$LINENO"; then : else ac_objc_werror_flag=$ac_save_objc_werror_flag OBJCFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_objc_try_compile "$LINENO"; then : ac_cv_prog_objc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_objc_werror_flag=$ac_save_objc_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_objc_g" >&5 $as_echo "$ac_cv_prog_objc_g" >&6; } if test "$ac_test_OBJCFLAGS" = set; then OBJCFLAGS=$ac_save_OBJCFLAGS elif test $ac_cv_prog_objc_g = yes; then if test "$GOBJC" = yes; then OBJCFLAGS="-g -O2" else OBJCFLAGS="-g" fi else if test "$GOBJC" = yes; then OBJCFLAGS="-O2" else OBJCFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$OBJC" am_compiler_list='gcc3 gcc' { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_OBJC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_OBJC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_OBJC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_OBJC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_OBJC_dependencies_compiler_type" >&5 $as_echo "$am_cv_OBJC_dependencies_compiler_type" >&6; } OBJCDEPMODE=depmode=$am_cv_OBJC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_OBJC_dependencies_compiler_type" = gcc3; then am__fastdepOBJC_TRUE= am__fastdepOBJC_FALSE='#' else am__fastdepOBJC_TRUE='#' am__fastdepOBJC_FALSE= fi #AC_PROG_OBJCXX #AC_PROG_OBJCXXCPP case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf # Set options enable_dlopen=no enable_win32_dll=no # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) link_all_deplibs=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi link_all_deplibs=no else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if ${ac_cv_prog_CXXCPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else _lt_caught_CXX_error=yes fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= compiler_needs_object_CXX=no export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no inherit_rpath_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds reload_flag_CXX=$reload_flag reload_cmds_CXX=$reload_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC compiler_CXX=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes file_list_spec_CXX='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec_CXX='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty # executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' fi archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds its shared # libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_CXX=' ' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=yes file_list_spec_CXX='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' enable_shared_with_static_runtimes_CXX=yes # Don't use ranlib old_postinstall_cmds_CXX='chmod 644 $oldlib' postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec_CXX='' fi link_all_deplibs_CXX=yes allow_undefined_flag_CXX="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" if test "$lt_cv_apple_cc_single_mod" != "yes"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi else ld_shlibs_CXX=no fi ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; haiku*) archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs_CXX=yes ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [1-5].* | *pgcpp\ [1-5].*) prelink_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' old_archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_CXX=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) ld_shlibs_CXX=yes ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no hardcode_direct_absolute_CXX=yes archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='${wl}-E' whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else ld_shlibs_CXX=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) case $host in osf3*) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' ;; *) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' ;; esac hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='${wl}-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_CXX='${wl}-z,text' allow_undefined_flag_CXX='${wl}-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ '"$old_archive_cmds_CXX" reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ '"$reload_cmds_CXX" ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac compiler_lib_search_dirs_CXX= if test -n "${compiler_lib_search_path_CXX}"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_CXX='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) # IBM XL 8.0, 9.0 on PPC and BlueGene lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-qpic' lt_prog_compiler_static_CXX='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_CXX=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' ;; esac ;; linux* | k*bsd*-gnu | gnu*) link_all_deplibs_CXX=no ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no else lt_cv_archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 $as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || test "X$hardcode_automatic_CXX" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 $as_echo "$hardcode_action_CXX" >&6; } if test "$hardcode_action_CXX" = relink || test "$inherit_rpath_CXX" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_commands="$ac_config_commands libtool" # Only expand once: enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. set dummy ${ac_tool_prefix}as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AS"; then ac_cv_prog_AS="$AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AS="${ac_tool_prefix}as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AS=$ac_cv_prog_AS if test -n "$AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 $as_echo "$AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AS"; then ac_ct_AS=$AS # Extract the first word of "as", so it can be a program name with args. set dummy as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AS"; then ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AS="as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AS=$ac_cv_prog_ac_ct_AS if test -n "$ac_ct_AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 $as_echo "$ac_ct_AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AS" = x; then AS="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AS=$ac_ct_AS fi else AS="$ac_cv_prog_AS" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi ;; esac test -z "$AS" && AS=as test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$OBJDUMP" && OBJDUMP=objdump if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RC"; then ac_cv_prog_RC="$RC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RC="${ac_tool_prefix}windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RC=$ac_cv_prog_RC if test -n "$RC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RC" >&5 $as_echo "$RC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RC"; then ac_ct_RC=$RC # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RC"; then ac_cv_prog_ac_ct_RC="$ac_ct_RC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RC="windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RC=$ac_cv_prog_ac_ct_RC if test -n "$ac_ct_RC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RC" >&5 $as_echo "$ac_ct_RC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RC" = x; then RC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RC=$ac_ct_RC fi else RC="$ac_cv_prog_RC" fi # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o objext_RC=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC compiler_RC=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` lt_cv_prog_compiler_c_o_RC=yes if test -n "$compiler"; then : fi GCC=$lt_save_GCC ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS # Newer libtool doesn't have AC_LIBTOOL_RC anymore. Need to check for # $(RC) by ourselves. if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RC"; then ac_cv_prog_RC="$RC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RC="${ac_tool_prefix}windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RC=$ac_cv_prog_RC if test -n "$RC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RC" >&5 $as_echo "$RC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RC"; then ac_ct_RC=$RC # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RC"; then ac_cv_prog_ac_ct_RC="$ac_ct_RC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RC="windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RC=$ac_cv_prog_ac_ct_RC if test -n "$ac_ct_RC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RC" >&5 $as_echo "$ac_ct_RC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RC" = x; then RC="no" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RC=$ac_ct_RC fi else RC="$ac_cv_prog_RC" fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done # Extract the first word of "dot", so it can be a program name with args. set dummy dot; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_USE_DOT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$USE_DOT"; then ac_cv_prog_USE_DOT="$USE_DOT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_USE_DOT="YES" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_USE_DOT" && ac_cv_prog_USE_DOT="NO" fi fi USE_DOT=$ac_cv_prog_USE_DOT if test -n "$USE_DOT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_DOT" >&5 $as_echo "$USE_DOT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "sed", so it can be a program name with args. set dummy sed; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_SED+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$SED"; then ac_cv_prog_SED="$SED" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_SED="sed" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi SED=$ac_cv_prog_SED if test -n "$SED"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SED" >&5 $as_echo "$SED" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ###------------------------------------------------------------------------- # # Checks for libraries. # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBDL 1 _ACEOF LIBS="-ldl $LIBS" fi # note: this AC_CHECK_LIB will also add -ldl to LIBS. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sem_init in -lrt" >&5 $as_echo_n "checking for sem_init in -lrt... " >&6; } if ${ac_cv_lib_rt_sem_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lrt -pthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sem_init (); int main () { return sem_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_rt_sem_init=yes else ac_cv_lib_rt_sem_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_sem_init" >&5 $as_echo "$ac_cv_lib_rt_sem_init" >&6; } if test "x$ac_cv_lib_rt_sem_init" = xyes; then : rt_libs="-lrt -pthread" $as_echo "#define HAVE_LIBRT \"1\"" >>confdefs.h fi # Some systems have iconv in libc, some have it in libiconv (OSF/1 and # those with the standalone portable GNU libiconv installed). Check # which one is available. The define ICONV_CONST will be "" or "const" # accordingly. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5 $as_echo_n "checking for ld used by GCC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | [A-Za-z]:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${acl_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi fi LD="$acl_cv_path_LD" if test -n "$LD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${acl_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. case `$LD -v 2>&1 &5 $as_echo "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 $as_echo_n "checking for shared library run path origin... " >&6; } if ${acl_cv_rpath+:} false; then : $as_echo_n "(cached) " >&6 else CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 $as_echo "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" libext="$acl_cv_libext" shlibext="$acl_cv_shlibext" hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" hardcode_direct="$acl_cv_hardcode_direct" hardcode_minus_L="$acl_cv_hardcode_minus_L" # Check whether --enable-rpath was given. if test "${enable_rpath+set}" = set; then : enableval=$enable_rpath; : else enable_rpath=yes fi acl_libdirstem=lib searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libiconv-prefix was given. if test "${with_libiconv_prefix+set}" = set; then : withval=$with_libiconv_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi fi LIBICONV= LTLIBICONV= INCICONV= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='iconv ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" else : fi else found_dir= found_la= found_so= found_a= if test $use_additional = yes; then if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi else if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi else if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$hardcode_direct" = yes; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" fi if test "$hardcode_minus_L" != no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" else LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" ;; esac done fi else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" done fi am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 $as_echo_n "checking for iconv... " >&6; } if ${am_cv_func_iconv+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_lib_iconv=yes am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 $as_echo "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 $as_echo_n "checking for working iconv... " >&6; } if ${am_cv_func_iconv_works+:} false; then : $as_echo_n "(cached) " >&6 else am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi if test "$cross_compiling" = yes; then : case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static const char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) return 1; } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : am_cv_func_iconv_works=yes else am_cv_func_iconv_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi LIBS="$am_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 $as_echo "$am_cv_func_iconv_works" >&6; } case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then $as_echo "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 $as_echo_n "checking how to link with libiconv... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 $as_echo "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi if test "$am_cv_func_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5 $as_echo_n "checking for iconv declaration... " >&6; } if ${am_cv_proto_iconv+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : am_cv_proto_iconv_arg1="" else am_cv_proto_iconv_arg1="const" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);" fi am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_t:- }$am_cv_proto_iconv" >&5 $as_echo "${ac_t:- }$am_cv_proto_iconv" >&6; } cat >>confdefs.h <<_ACEOF #define ICONV_CONST $am_cv_proto_iconv_arg1 _ACEOF fi ###------------------------------------------------------------------------- # # Checks for header files. # ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 $as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } if eval \${$as_ac_Header+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> int main () { if ((DIR *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_ac_Header=yes" else eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_ac_Header { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' dir; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' x; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi for ac_header in arpa/inet.h fcntl.h netdb.h netinet/in.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in stdlib.h string.h strings.h sys/socket.h sys/time.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in syslog.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in unistd.h do : ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" if test "x$ac_cv_header_unistd_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UNISTD_H 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_mongrel "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default" if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done for ac_header in signal.h termios.h langinfo.h localcharset.h iconv.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in time.h locale.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in syslog.h do : ac_fn_c_check_header_mongrel "$LINENO" "syslog.h" "ac_cv_header_syslog_h" "$ac_includes_default" if test "x$ac_cv_header_syslog_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYSLOG_H 1 _ACEOF fi done for ac_header in sys/stat.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/stat.h" "ac_cv_header_sys_stat_h" "$ac_includes_default" if test "x$ac_cv_header_sys_stat_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_STAT_H 1 _ACEOF fi done for ac_header in sys/types.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default" if test "x$ac_cv_header_sys_types_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_TYPES_H 1 _ACEOF fi done for ac_header in sys/wait.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/wait.h" "ac_cv_header_sys_wait_h" "$ac_includes_default" if test "x$ac_cv_header_sys_wait_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_WAIT_H 1 _ACEOF fi done for ac_header in regex.h do : ac_fn_c_check_header_mongrel "$LINENO" "regex.h" "ac_cv_header_regex_h" "$ac_includes_default" if test "x$ac_cv_header_regex_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_REGEX_H 1 _ACEOF fi done ###------------------------------------------------------------------------- # # Checks for declarations # ac_fn_c_check_decl "$LINENO" "sigprocmask" "ac_cv_have_decl_sigprocmask" " #ifdef HAVE_SIGNAL_H # include #endif " if test "x$ac_cv_have_decl_sigprocmask" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_SIGPROCMASK $ac_have_decl _ACEOF ###------------------------------------------------------------------------- # # Checks for typedefs, structures, and compiler characteristics. # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } if ${ac_cv_header_time+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_time=yes else ac_cv_header_time=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 $as_echo "$ac_cv_header_time" >&6; } if test $ac_cv_header_time = yes; then $as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 $as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } if ${ac_cv_struct_tm+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { struct tm tm; int *p = &tm.tm_sec; return !p; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_tm=time.h else ac_cv_struct_tm=sys/time.h fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 $as_echo "$ac_cv_struct_tm" >&6; } if test $ac_cv_struct_tm = sys/time.h; then $as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h fi ###------------------------------------------------------------------------- # # Checks for library functions. # { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether closedir returns void" >&5 $as_echo_n "checking whether closedir returns void... " >&6; } if ${ac_cv_func_closedir_void+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_closedir_void=yes else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default #include <$ac_header_dirent> #ifndef __cplusplus int closedir (); #endif int main () { return closedir (opendir (".")) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_closedir_void=no else ac_cv_func_closedir_void=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_closedir_void" >&5 $as_echo "$ac_cv_func_closedir_void" >&6; } if test $ac_cv_func_closedir_void = yes; then $as_echo "#define CLOSEDIR_VOID 1" >>confdefs.h fi for ac_header in $ac_header_list do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in $ac_func_list do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mktime" >&5 $as_echo_n "checking for working mktime... " >&6; } if ${ac_cv_func_working_mktime+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_working_mktime=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Test program from Paul Eggert and Tony Leneis. */ #ifdef TIME_WITH_SYS_TIME # include # include #else # ifdef HAVE_SYS_TIME_H # include # else # include # endif #endif #include #include #ifdef HAVE_UNISTD_H # include #endif #ifndef HAVE_ALARM # define alarm(X) /* empty */ #endif /* Work around redefinition to rpl_putenv by other config tests. */ #undef putenv static time_t time_t_max; static time_t time_t_min; /* Values we'll use to set the TZ environment variable. */ static const char *tz_strings[] = { (const char *) 0, "TZ=GMT0", "TZ=JST-9", "TZ=EST+3EDT+2,M10.1.0/00:00:00,M2.3.0/00:00:00" }; #define N_STRINGS (sizeof (tz_strings) / sizeof (tz_strings[0])) /* Return 0 if mktime fails to convert a date in the spring-forward gap. Based on a problem report from Andreas Jaeger. */ static int spring_forward_gap () { /* glibc (up to about 1998-10-07) failed this test. */ struct tm tm; /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0" instead of "TZ=America/Vancouver" in order to detect the bug even on systems that don't support the Olson extension, or don't have the full zoneinfo tables installed. */ putenv ((char*) "TZ=PST8PDT,M4.1.0,M10.5.0"); tm.tm_year = 98; tm.tm_mon = 3; tm.tm_mday = 5; tm.tm_hour = 2; tm.tm_min = 0; tm.tm_sec = 0; tm.tm_isdst = -1; return mktime (&tm) != (time_t) -1; } static int mktime_test1 (time_t now) { struct tm *lt; return ! (lt = localtime (&now)) || mktime (lt) == now; } static int mktime_test (time_t now) { return (mktime_test1 (now) && mktime_test1 ((time_t) (time_t_max - now)) && mktime_test1 ((time_t) (time_t_min + now))); } static int irix_6_4_bug () { /* Based on code from Ariel Faigon. */ struct tm tm; tm.tm_year = 96; tm.tm_mon = 3; tm.tm_mday = 0; tm.tm_hour = 0; tm.tm_min = 0; tm.tm_sec = 0; tm.tm_isdst = -1; mktime (&tm); return tm.tm_mon == 2 && tm.tm_mday == 31; } static int bigtime_test (int j) { struct tm tm; time_t now; tm.tm_year = tm.tm_mon = tm.tm_mday = tm.tm_hour = tm.tm_min = tm.tm_sec = j; now = mktime (&tm); if (now != (time_t) -1) { struct tm *lt = localtime (&now); if (! (lt && lt->tm_year == tm.tm_year && lt->tm_mon == tm.tm_mon && lt->tm_mday == tm.tm_mday && lt->tm_hour == tm.tm_hour && lt->tm_min == tm.tm_min && lt->tm_sec == tm.tm_sec && lt->tm_yday == tm.tm_yday && lt->tm_wday == tm.tm_wday && ((lt->tm_isdst < 0 ? -1 : 0 < lt->tm_isdst) == (tm.tm_isdst < 0 ? -1 : 0 < tm.tm_isdst)))) return 0; } return 1; } static int year_2050_test () { /* The correct answer for 2050-02-01 00:00:00 in Pacific time, ignoring leap seconds. */ unsigned long int answer = 2527315200UL; struct tm tm; time_t t; tm.tm_year = 2050 - 1900; tm.tm_mon = 2 - 1; tm.tm_mday = 1; tm.tm_hour = tm.tm_min = tm.tm_sec = 0; tm.tm_isdst = -1; /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0" instead of "TZ=America/Vancouver" in order to detect the bug even on systems that don't support the Olson extension, or don't have the full zoneinfo tables installed. */ putenv ((char*) "TZ=PST8PDT,M4.1.0,M10.5.0"); t = mktime (&tm); /* Check that the result is either a failure, or close enough to the correct answer that we can assume the discrepancy is due to leap seconds. */ return (t == (time_t) -1 || (0 < t && answer - 120 <= t && t <= answer + 120)); } int main () { time_t t, delta; int i, j; /* This test makes some buggy mktime implementations loop. Give up after 60 seconds; a mktime slower than that isn't worth using anyway. */ alarm (60); for (;;) { t = (time_t_max << 1) + 1; if (t <= time_t_max) break; time_t_max = t; } time_t_min = - ((time_t) ~ (time_t) 0 == (time_t) -1) - time_t_max; delta = time_t_max / 997; /* a suitable prime number */ for (i = 0; i < N_STRINGS; i++) { if (tz_strings[i]) putenv ((char*) tz_strings[i]); for (t = 0; t <= time_t_max - delta; t += delta) if (! mktime_test (t)) return 1; if (! (mktime_test ((time_t) 1) && mktime_test ((time_t) (60 * 60)) && mktime_test ((time_t) (60 * 60 * 24)))) return 1; for (j = 1; ; j <<= 1) if (! bigtime_test (j)) return 1; else if (INT_MAX / 2 < j) break; if (! bigtime_test (INT_MAX)) return 1; } return ! (irix_6_4_bug () && spring_forward_gap () && year_2050_test ()); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_working_mktime=yes else ac_cv_func_working_mktime=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_working_mktime" >&5 $as_echo "$ac_cv_func_working_mktime" >&6; } if test $ac_cv_func_working_mktime = no; then case " $LIBOBJS " in *" mktime.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS mktime.$ac_objext" ;; esac fi for ac_header in sys/select.h sys/socket.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking types of arguments for select" >&5 $as_echo_n "checking types of arguments for select... " >&6; } if ${ac_cv_func_select_args+:} false; then : $as_echo_n "(cached) " >&6 else for ac_arg234 in 'fd_set *' 'int *' 'void *'; do for ac_arg1 in 'int' 'size_t' 'unsigned long int' 'unsigned int'; do for ac_arg5 in 'struct timeval *' 'const struct timeval *'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default #ifdef HAVE_SYS_SELECT_H # include #endif #ifdef HAVE_SYS_SOCKET_H # include #endif int main () { extern int select ($ac_arg1, $ac_arg234, $ac_arg234, $ac_arg234, $ac_arg5); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_func_select_args="$ac_arg1,$ac_arg234,$ac_arg5"; break 3 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done done done # Provide a safe default value. : "${ac_cv_func_select_args=int,int *,struct timeval *}" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_select_args" >&5 $as_echo "$ac_cv_func_select_args" >&6; } ac_save_IFS=$IFS; IFS=',' set dummy `echo "$ac_cv_func_select_args" | sed 's/\*/\*/g'` IFS=$ac_save_IFS shift cat >>confdefs.h <<_ACEOF #define SELECT_TYPE_ARG1 $1 _ACEOF cat >>confdefs.h <<_ACEOF #define SELECT_TYPE_ARG234 ($2) _ACEOF cat >>confdefs.h <<_ACEOF #define SELECT_TYPE_ARG5 ($3) _ACEOF rm -f conftest* for ac_func in gethostbyaddr gethostbyname inet_ntoa isascii getpid do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in memmove memset do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in select socket do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in strcasecmp strchr strdup strerror do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in snprintf do : ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf" if test "x$ac_cv_func_snprintf" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SNPRINTF 1 _ACEOF fi done for ac_func in symlink setlocale do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in srandom random do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done # Init binreloc # Check whether --enable-binreloc was given. if test "${enable_binreloc+set}" = set; then : enableval=$enable_binreloc; enable_binreloc=$enableval else enable_binreloc=auto fi # Check whether --enable-binreloc-threads was given. if test "${enable_binreloc_threads+set}" = set; then : enableval=$enable_binreloc_threads; enable_binreloc_threads=$enableval else enable_binreloc_threads=yes fi BINRELOC_CFLAGS= BINRELOC_LIBS= if test "x$enable_binreloc" = "xauto"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /proc/self/maps" >&5 $as_echo_n "checking for /proc/self/maps... " >&6; } if ${ac_cv_file__proc_self_maps+:} false; then : $as_echo_n "(cached) " >&6 else test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/proc/self/maps"; then ac_cv_file__proc_self_maps=yes else ac_cv_file__proc_self_maps=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__proc_self_maps" >&5 $as_echo "$ac_cv_file__proc_self_maps" >&6; } if test "x$ac_cv_file__proc_self_maps" = xyes; then : fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether everything is installed to the same prefix" >&5 $as_echo_n "checking whether everything is installed to the same prefix... " >&6; } if ${br_cv_valid_prefixes+:} false; then : $as_echo_n "(cached) " >&6 else # datarootdir variables was introduced with autoconf-2.60 if test "$bindir" = '${exec_prefix}/bin' -a "$sbindir" = '${exec_prefix}/sbin' -a \ \( "$datadir" = '${prefix}/share' -o \( "$datadir" = '${datarootdir}' -a "$datarootdir" = '${prefix}/share' \) \) -a \ "$libdir" = '${exec_prefix}/lib' -a \ "$libexecdir" = '${exec_prefix}/libexec' -a "$sysconfdir" = '${prefix}/etc' then br_cv_valid_prefixes=yes else br_cv_valid_prefixes=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $br_cv_valid_prefixes" >&5 $as_echo "$br_cv_valid_prefixes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether binary relocation support should be enabled" >&5 $as_echo_n "checking whether binary relocation support should be enabled... " >&6; } if ${br_cv_binreloc+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$enable_binreloc" = "xyes"; then br_cv_binreloc=yes elif test "x$enable_binreloc" = "xauto"; then if test "x$br_cv_valid_prefixes" = "xyes" -a \ "x$ac_cv_file__proc_self_maps" = "xyes"; then br_cv_binreloc=yes else br_cv_binreloc=no fi else br_cv_binreloc=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $br_cv_binreloc" >&5 $as_echo "$br_cv_binreloc" >&6; } if test "x$br_cv_binreloc" = "xyes"; then BINRELOC_CFLAGS="-DENABLE_BINRELOC" $as_echo "#define ENABLE_BINRELOC /**/" >>confdefs.h if test "x$enable_binreloc_threads" = "xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_getspecific in -lpthread" >&5 $as_echo_n "checking for pthread_getspecific in -lpthread... " >&6; } if ${ac_cv_lib_pthread_pthread_getspecific+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_getspecific (); int main () { return pthread_getspecific (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread_pthread_getspecific=yes else ac_cv_lib_pthread_pthread_getspecific=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_getspecific" >&5 $as_echo "$ac_cv_lib_pthread_pthread_getspecific" >&6; } if test "x$ac_cv_lib_pthread_pthread_getspecific" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBPTHREAD 1 _ACEOF LIBS="-lpthread $LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether binary relocation should use threads" >&5 $as_echo_n "checking whether binary relocation should use threads... " >&6; } if ${br_cv_binreloc_threads+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$enable_binreloc_threads" = "xyes"; then if test "x$ac_cv_lib_pthread_pthread_getspecific" = "xyes"; then br_cv_binreloc_threads=yes else br_cv_binreloc_threads=no fi else br_cv_binreloc_threads=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $br_cv_binreloc_threads" >&5 $as_echo "$br_cv_binreloc_threads" >&6; } if test "x$br_cv_binreloc_threads" = "xyes"; then BINRELOC_LIBS="-lpthread" $as_echo "#define BR_PTHREAD 1" >>confdefs.h else BINRELOC_CFLAGS="$BINRELOC_CFLAGS -DBR_PTHREADS=0" $as_echo "#define BR_PTHREAD 0" >>confdefs.h fi fi ###------------------------------------------------------------------------- # # check whether gwen is a subproject to another one # { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gwen is a subproject" >&5 $as_echo_n "checking if gwen is a subproject... " >&6; } # Check whether --enable-gwen-subproject was given. if test "${enable_gwen_subproject+set}" = set; then : enableval=$enable_gwen_subproject; enable_gwen_subproject="$enableval" else enable_gwen_subproject="no" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_gwen_subproject" >&5 $as_echo "$enable_gwen_subproject" >&6; } if test "$enable_gwen_subproject" != "no"; then $as_echo "#define GWENHYWFAR_IS_SUBPROJECT 1" >>confdefs.h fi ###------------------------------------------------------------------------- # # check whether 'make check' should run checks that depend on network connectivity # { $as_echo "$as_me:${as_lineno-$LINENO}: checking network connectivity can be assumed available during 'make check'" >&5 $as_echo_n "checking network connectivity can be assumed available during 'make check'... " >&6; } # Check whether --enable-network-checks was given. if test "${enable_network_checks+set}" = set; then : enableval=$enable_network_checks; enable_gwen_network_checks="$enableval" else enable_gwen_network_checks="yes" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_gwen_network_checks" >&5 $as_echo "$enable_gwen_network_checks" >&6; } if test "$enable_gwen_network_checks" = "no"; then $as_echo "#define GWENHYWFAR_SKIP_NETWORK_CHECKS 1" >>confdefs.h fi ###------------------------------------------------------------------------- # # check whether local installation mode is enabled # { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether local installation mode is wanted" >&5 $as_echo_n "checking whether local installation mode is wanted... " >&6; } # Check whether --enable-local-install was given. if test "${enable_local_install+set}" = set; then : enableval=$enable_local_install; enable_local_install="$enableval" else enable_local_install="no" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_local_install" >&5 $as_echo "$enable_local_install" >&6; } if test "$enable_local_install" != "no"; then $as_echo "#define ENABLE_LOCAL_INSTALL 1" >>confdefs.h fi ###------------------------------------------------------------------------- # # OS dependant settings # # Common settings for all OSs gwenhywfar_bindir="\${bindir}" gwenhywfar_libs="-lgwenhywfar" gwenhywfar_ldflags="-L\${libdir}" gwenhywfar_internal_libname="libgwenhywfar.la" gwenhywfar_headerdir_am="\$(includedir)/gwenhywfar4" gwenhywfar_headerdir="\${includedir}/gwenhywfar4" gwenhywfar_plugindir="\${libdir}/gwenhywfar/plugins/${GWENHYWFAR_SO_EFFECTIVE}" gwenhywfar_symlinkdir="\$(top_builddir)/gwenhywfar4" gwenhywfar_datadir="\${datadir}/gwenhywfar" gwenhywfar_sysdatadir="\${datadir}" # Now the specific settings case "$OS_TYPE" in posix) gwenhywfar_sys_is_windows=0 gwenhywfar_os_lib="os/posix/libos.la" GWEN_OS="posix" # add special libraries for solaris if test "$OSYSTEM" = "solaris"; then all_libraries="${all_libraries} -lresolv -lsocket" PROG_LIBRARIES="${PROG_LIBRARIES} -lresolv -lsocket" fi # add special libraries for darwin if test "$OSYSTEM" = "osx"; then # hmm, this should be detected by the GETTEXT macro... #PROG_LIBRARIES="${PROG_LIBRARIES} -lintl" # for local install mode on Mac OS X link with the CoreFoundation framework if test "$enable_local_install" != "no"; then all_libraries="${all_libraries} -framework CoreFoundation" fi fi ;; windows) gwenhywfar_sys_is_windows=1 gwenhywfar_os_lib="os/windows/libos.la" GWEN_OS="windows" all_libraries="${all_libraries} -lwsock32 -lintl" ;; *) as_fn_error $? "**** Unknown operating system type" "$LINENO" 5 ;; esac if test "$OS_TYPE" = "windows"; then IS_WINDOWS_TRUE= IS_WINDOWS_FALSE='#' else IS_WINDOWS_TRUE='#' IS_WINDOWS_FALSE= fi ###------------------------------------------------------------------------- # # check plugin search path # { $as_echo "$as_me:${as_lineno-$LINENO}: checking plugin search dir" >&5 $as_echo_n "checking plugin search dir... " >&6; } # Check whether --with-plugin-searchdir was given. if test "${with_plugin_searchdir+set}" = set; then : withval=$with_plugin_searchdir; gwenhywfar_plugin_searchdir="$withval" else gwenhywfar_plugin_searchdir="" fi if test -z "${gwenhywfar_plugin_searchdir}"; then if test "$OSYSTEM" = "windows"; then gwenhywfar_plugin_searchdir="lib/gwenhywfar/plugins/${GWENHYWFAR_SO_EFFECTIVE}" else if test "$enable_local_install" != "no"; then gwenhywfar_plugin_searchdir="lib/gwenhywfar/plugins/${GWENHYWFAR_SO_EFFECTIVE}" else gwenhywfar_plugin_searchdir="$gwenhywfar_plugindir" fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gwenhywfar_plugin_searchdir" >&5 $as_echo "$gwenhywfar_plugin_searchdir" >&6; } ###------------------------------------------------------------------------- # # check data search dir # { $as_echo "$as_me:${as_lineno-$LINENO}: checking data search dir" >&5 $as_echo_n "checking data search dir... " >&6; } # Check whether --with-data-searchdir was given. if test "${with_data_searchdir+set}" = set; then : withval=$with_data_searchdir; gwenhywfar_data_searchdir="$withval" else gwenhywfar_data_searchdir="" fi if test -z "${gwenhywfar_data_searchdir}"; then if test "$OSYSTEM" = "windows"; then gwenhywfar_data_searchdir="share/gwenhywfar" else if test "$enable_local_install" != "no"; then gwenhywfar_data_searchdir="share/gwenhywfar" else gwenhywfar_data_searchdir="$gwenhywfar_datadir" fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gwenhywfar_data_searchdir" >&5 $as_echo "$gwenhywfar_data_searchdir" >&6; } ###------------------------------------------------------------------------- # # check system data search dir # { $as_echo "$as_me:${as_lineno-$LINENO}: checking system data search dir" >&5 $as_echo_n "checking system data search dir... " >&6; } # Check whether --with-sysdata-searchdir was given. if test "${with_sysdata_searchdir+set}" = set; then : withval=$with_sysdata_searchdir; gwenhywfar_sysdata_searchdir="$withval" else gwenhywfar_sysdata_searchdir="" fi if test -z "${gwenhywfar_sysdata_searchdir}"; then if test "$OSYSTEM" = "windows"; then gwenhywfar_sysdata_searchdir="share" else if test "$enable_local_install" != "no"; then gwenhywfar_sysdata_searchdir="share" else gwenhywfar_sysdata_searchdir="$gwenhywfar_sysdatadir" fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gwenhywfar_sysdata_searchdir" >&5 $as_echo "$gwenhywfar_sysdata_searchdir" >&6; } ###------------------------------------------------------------------------- # # check locale search dir # { $as_echo "$as_me:${as_lineno-$LINENO}: checking locale search dir" >&5 $as_echo_n "checking locale search dir... " >&6; } # Check whether --with-locale-searchdir was given. if test "${with_locale_searchdir+set}" = set; then : withval=$with_locale_searchdir; gwenhywfar_locale_searchdir="$withval" else gwenhywfar_locale_searchdir="" fi if test -z "${gwenhywfar_locale_searchdir}"; then if test "$OSYSTEM" = "windows"; then gwenhywfar_locale_searchdir="share/locale" else if test "$enable_local_install" != "no"; then gwenhywfar_locale_searchdir="share/locale" else gwenhywfar_locale_searchdir="\$(localedir)" fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gwenhywfar_locale_searchdir" >&5 $as_echo "$gwenhywfar_locale_searchdir" >&6; } ###------------------------------------------------------------------------- # # check cfg search dir # { $as_echo "$as_me:${as_lineno-$LINENO}: checking cfg search dir" >&5 $as_echo_n "checking cfg search dir... " >&6; } # Check whether --with-cfg-searchdir was given. if test "${with_cfg_searchdir+set}" = set; then : withval=$with_cfg_searchdir; gwenhywfar_cfg_searchdir="$withval" else gwenhywfar_cfg_searchdir="" fi if test -z "$gwenhywfar_cfg_searchdir"; then if test "$OSYSTEM" = "windows"; then gwenhywfar_cfg_searchdir="etc" else if test "$enable_local_install" != "no"; then gwenhywfar_cfg_searchdir="etc" else gwenhywfar_cfg_searchdir="\$(sysconfdir)" fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gwenhywfar_cfg_searchdir" >&5 $as_echo "$gwenhywfar_cfg_searchdir" >&6; } ###------------------------------------------------------------------------- # # check whether variadic macros should be supported # { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiling with variadic macros" >&5 $as_echo_n "checking if compiling with variadic macros... " >&6; } # Check whether --enable-variadic-macros was given. if test "${enable_variadic_macros+set}" = set; then : enableval=$enable_variadic_macros; enable_variadic_macros="$enableval" else enable_variadic_macros="yes" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_variadic_macros" >&5 $as_echo "$enable_variadic_macros" >&6; } if test "x$enable_variadic_macros" = "xno"; then $as_echo "#define NO_VARIADIC_MACROS 1" >>confdefs.h fi ###------------------------------------------------------------------------- # # check whether profiling is to be supported # { $as_echo "$as_me:${as_lineno-$LINENO}: checking if profiling is to be supported" >&5 $as_echo_n "checking if profiling is to be supported... " >&6; } # Check whether --enable-profiling was given. if test "${enable_profiling+set}" = set; then : enableval=$enable_profiling; enable_profiling="$enableval" else enable_profiling="no" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_profiling" >&5 $as_echo "$enable_profiling" >&6; } if test "x$enable_profiling" = "xyes"; then PROFILING_CFLAGS="-pg" PROFILING_LDFLAGS="-pg" else PROFILING_CFLAGS="" PROFILING_LDFLAGS="" fi ###------------------------------------------------------------------------- # # check for Debian multiarch paths # if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dpkg-architecture", so it can be a program name with args. set dummy ${ac_tool_prefix}dpkg-architecture; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_DPKG_ARCH+:} false; then : $as_echo_n "(cached) " >&6 else case $DPKG_ARCH in [\\/]* | ?:[\\/]*) ac_cv_path_DPKG_ARCH="$DPKG_ARCH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_DPKG_ARCH="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DPKG_ARCH=$ac_cv_path_DPKG_ARCH if test -n "$DPKG_ARCH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DPKG_ARCH" >&5 $as_echo "$DPKG_ARCH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_DPKG_ARCH"; then ac_pt_DPKG_ARCH=$DPKG_ARCH # Extract the first word of "dpkg-architecture", so it can be a program name with args. set dummy dpkg-architecture; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_DPKG_ARCH+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_DPKG_ARCH in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_DPKG_ARCH="$ac_pt_DPKG_ARCH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_DPKG_ARCH="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_DPKG_ARCH=$ac_cv_path_ac_pt_DPKG_ARCH if test -n "$ac_pt_DPKG_ARCH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DPKG_ARCH" >&5 $as_echo "$ac_pt_DPKG_ARCH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_DPKG_ARCH" = x; then DPKG_ARCH="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DPKG_ARCH=$ac_pt_DPKG_ARCH fi else DPKG_ARCH="$ac_cv_path_DPKG_ARCH" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for multiarch paths" >&5 $as_echo_n "checking for multiarch paths... " >&6; } multiarch_triplet="" DEBIAN_MULTIARCH_DIRS="" if test -n "$DPKG_ARCH"; then multiarch_triplet=$($DPKG_ARCH -qDEB_HOST_MULTIARCH 2> /dev/null) if test -z "$multiarch_triplet"; then multiarch_triplet=$($DPKG_ARCH -qDEB_HOST_GNU_TYPE) fi fi if test -n "$multiarch_triplet"; then DEBIAN_MULTIARCH_DIRS="/lib/$multiarch_triplet /usr/lib/$multiarch_triplet" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEBIAN_MULTIARCH_DIRS" >&5 $as_echo "$DEBIAN_MULTIARCH_DIRS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } fi ###------------------------------------------------------------------------- # # check for libgcrypt # NEED_LIBGCRYPT_API=1 NEED_LIBGCRYPT_VERSION=1.2.0 cat >>confdefs.h <<_ACEOF #define NEED_LIBGCRYPT_VERSION "$NEED_LIBGCRYPT_VERSION" _ACEOF case "$OS_TYPE" in windows) LIBGCRYPT_CFLAGS="" LIBGCRYPT_LIBS="-lgcrypt" ;; *) # Check whether --with-libgcrypt-prefix was given. if test "${with_libgcrypt_prefix+set}" = set; then : withval=$with_libgcrypt_prefix; libgcrypt_config_prefix="$withval" else libgcrypt_config_prefix="" fi if test x$libgcrypt_config_prefix != x ; then if test x${LIBGCRYPT_CONFIG+set} != xset ; then LIBGCRYPT_CONFIG=$libgcrypt_config_prefix/bin/libgcrypt-config fi fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}libgcrypt-config", so it can be a program name with args. set dummy ${ac_tool_prefix}libgcrypt-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_LIBGCRYPT_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $LIBGCRYPT_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_LIBGCRYPT_CONFIG="$LIBGCRYPT_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_LIBGCRYPT_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi LIBGCRYPT_CONFIG=$ac_cv_path_LIBGCRYPT_CONFIG if test -n "$LIBGCRYPT_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBGCRYPT_CONFIG" >&5 $as_echo "$LIBGCRYPT_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_LIBGCRYPT_CONFIG"; then ac_pt_LIBGCRYPT_CONFIG=$LIBGCRYPT_CONFIG # Extract the first word of "libgcrypt-config", so it can be a program name with args. set dummy libgcrypt-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_LIBGCRYPT_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_LIBGCRYPT_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_LIBGCRYPT_CONFIG="$ac_pt_LIBGCRYPT_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_LIBGCRYPT_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_LIBGCRYPT_CONFIG=$ac_cv_path_ac_pt_LIBGCRYPT_CONFIG if test -n "$ac_pt_LIBGCRYPT_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_LIBGCRYPT_CONFIG" >&5 $as_echo "$ac_pt_LIBGCRYPT_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_LIBGCRYPT_CONFIG" = x; then LIBGCRYPT_CONFIG="no" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIBGCRYPT_CONFIG=$ac_pt_LIBGCRYPT_CONFIG fi else LIBGCRYPT_CONFIG="$ac_cv_path_LIBGCRYPT_CONFIG" fi tmp="$NEED_LIBGCRYPT_API:$NEED_LIBGCRYPT_VERSION" if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then req_libgcrypt_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'` min_libgcrypt_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'` else req_libgcrypt_api=0 min_libgcrypt_version="$tmp" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBGCRYPT - version >= $min_libgcrypt_version" >&5 $as_echo_n "checking for LIBGCRYPT - version >= $min_libgcrypt_version... " >&6; } ok=no if test "$LIBGCRYPT_CONFIG" != "no" ; then req_major=`echo $min_libgcrypt_version | \ sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\1/'` req_minor=`echo $min_libgcrypt_version | \ sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\2/'` req_micro=`echo $min_libgcrypt_version | \ sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\3/'` libgcrypt_config_version=`$LIBGCRYPT_CONFIG --version` major=`echo $libgcrypt_config_version | \ sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1/'` minor=`echo $libgcrypt_config_version | \ sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\2/'` micro=`echo $libgcrypt_config_version | \ sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\3/'` if test "$major" -gt "$req_major"; then ok=yes else if test "$major" -eq "$req_major"; then if test "$minor" -gt "$req_minor"; then ok=yes else if test "$minor" -eq "$req_minor"; then if test "$micro" -ge "$req_micro"; then ok=yes fi fi fi fi fi fi if test $ok = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($libgcrypt_config_version)" >&5 $as_echo "yes ($libgcrypt_config_version)" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test $ok = yes; then # If we have a recent libgcrypt, we should also check that the # API is compatible if test "$req_libgcrypt_api" -gt 0 ; then tmp=`$LIBGCRYPT_CONFIG --api-version 2>/dev/null || echo 0` if test "$tmp" -gt 0 ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking LIBGCRYPT API version" >&5 $as_echo_n "checking LIBGCRYPT API version... " >&6; } if test "$req_libgcrypt_api" -eq "$tmp" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: okay" >&5 $as_echo "okay" >&6; } else ok=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: does not match. want=$req_libgcrypt_api got=$tmp" >&5 $as_echo "does not match. want=$req_libgcrypt_api got=$tmp" >&6; } fi fi fi fi if test $ok = yes; then LIBGCRYPT_CFLAGS=`$LIBGCRYPT_CONFIG --cflags` LIBGCRYPT_LIBS=`$LIBGCRYPT_CONFIG --libs` have_gcrypt="yes" if test x"$host" != x ; then libgcrypt_config_host=`$LIBGCRYPT_CONFIG --host 2>/dev/null || echo none` if test x"$libgcrypt_config_host" != xnone ; then if test x"$libgcrypt_config_host" != x"$host" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** *** The config script $LIBGCRYPT_CONFIG was *** built for $libgcrypt_config_host and thus may not match the *** used host $host. *** You may want to use the configure option --with-libgcrypt-prefix *** to specify a matching config script. ***" >&5 $as_echo "$as_me: WARNING: *** *** The config script $LIBGCRYPT_CONFIG was *** built for $libgcrypt_config_host and thus may not match the *** used host $host. *** You may want to use the configure option --with-libgcrypt-prefix *** to specify a matching config script. ***" >&2;} fi fi fi else LIBGCRYPT_CFLAGS="" LIBGCRYPT_LIBS="" have_gcrypt="no" fi if test "$have_gcrypt" != "yes"; then as_fn_error $? " **** Libgcrypt is required for Gwenhywfar. Please install it (including devel packages) **** (at least version $NEED_LIBGCRYPT_VERSION using API $NEED_LIBGCRYPT_API is required.)" "$LINENO" 5 fi ;; esac ###------------------------------------------------------------------------- # # check for library for common error values and messages in GnuPG components # gpg_error_config_prefix="" # Check whether --with-libgpg-error-prefix was given. if test "${with_libgpg_error_prefix+set}" = set; then : withval=$with_libgpg_error_prefix; gpg_error_config_prefix="$withval" fi # Check whether --with-gpg-error-prefix was given. if test "${with_gpg_error_prefix+set}" = set; then : withval=$with_gpg_error_prefix; gpg_error_config_prefix="$withval" fi if test x$gpg_error_config_prefix != x ; then if test x${GPG_ERROR_CONFIG+set} != xset ; then GPG_ERROR_CONFIG=$gpg_error_config_prefix/bin/gpg-error-config fi fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gpg-error-config", so it can be a program name with args. set dummy ${ac_tool_prefix}gpg-error-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GPG_ERROR_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $GPG_ERROR_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_GPG_ERROR_CONFIG="$GPG_ERROR_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GPG_ERROR_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GPG_ERROR_CONFIG=$ac_cv_path_GPG_ERROR_CONFIG if test -n "$GPG_ERROR_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GPG_ERROR_CONFIG" >&5 $as_echo "$GPG_ERROR_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_GPG_ERROR_CONFIG"; then ac_pt_GPG_ERROR_CONFIG=$GPG_ERROR_CONFIG # Extract the first word of "gpg-error-config", so it can be a program name with args. set dummy gpg-error-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_GPG_ERROR_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_GPG_ERROR_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_GPG_ERROR_CONFIG="$ac_pt_GPG_ERROR_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_GPG_ERROR_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_GPG_ERROR_CONFIG=$ac_cv_path_ac_pt_GPG_ERROR_CONFIG if test -n "$ac_pt_GPG_ERROR_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_GPG_ERROR_CONFIG" >&5 $as_echo "$ac_pt_GPG_ERROR_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_GPG_ERROR_CONFIG" = x; then GPG_ERROR_CONFIG="no" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac GPG_ERROR_CONFIG=$ac_pt_GPG_ERROR_CONFIG fi else GPG_ERROR_CONFIG="$ac_cv_path_GPG_ERROR_CONFIG" fi min_gpg_error_version=0.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GPG Error - version >= $min_gpg_error_version" >&5 $as_echo_n "checking for GPG Error - version >= $min_gpg_error_version... " >&6; } ok=no if test "$GPG_ERROR_CONFIG" != "no" \ && test -f "$GPG_ERROR_CONFIG" ; then req_major=`echo $min_gpg_error_version | \ sed 's/\([0-9]*\)\.\([0-9]*\)/\1/'` req_minor=`echo $min_gpg_error_version | \ sed 's/\([0-9]*\)\.\([0-9]*\)/\2/'` gpg_error_config_version=`$GPG_ERROR_CONFIG $gpg_error_config_args --version` major=`echo $gpg_error_config_version | \ sed 's/\([0-9]*\)\.\([0-9]*\).*/\1/'` minor=`echo $gpg_error_config_version | \ sed 's/\([0-9]*\)\.\([0-9]*\).*/\2/'` if test "$major" -gt "$req_major"; then ok=yes else if test "$major" -eq "$req_major"; then if test "$minor" -ge "$req_minor"; then ok=yes fi fi fi fi if test $ok = yes; then GPG_ERROR_CFLAGS=`$GPG_ERROR_CONFIG $gpg_error_config_args --cflags` GPG_ERROR_LIBS=`$GPG_ERROR_CONFIG $gpg_error_config_args --libs` { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($gpg_error_config_version)" >&5 $as_echo "yes ($gpg_error_config_version)" >&6; } : gpg_error_config_host=`$GPG_ERROR_CONFIG $gpg_error_config_args --host 2>/dev/null || echo none` if test x"$gpg_error_config_host" != xnone ; then if test x"$gpg_error_config_host" != x"$host" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** *** The config script $GPG_ERROR_CONFIG was *** built for $gpg_error_config_host and thus may not match the *** used host $host. *** You may want to use the configure option --with-gpg-error-prefix *** to specify a matching config script. ***" >&5 $as_echo "$as_me: WARNING: *** *** The config script $GPG_ERROR_CONFIG was *** built for $gpg_error_config_host and thus may not match the *** used host $host. *** You may want to use the configure option --with-gpg-error-prefix *** to specify a matching config script. ***" >&2;} fi fi else GPG_ERROR_CFLAGS="" GPG_ERROR_LIBS="" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } : fi ###------------------------------------------------------------------------- # # check for libgnutls # case "$OS_TYPE" in windows) LIBGNUTLS_CFLAGS="" LIBGNUTLS_LIBS="-lgnutls -lgpg-error" # we use 1.6.3 or higher, so we do have gnutls_transport_set_error HAVE_GNUTLS_TRANSPORT_SET_ERRNO="yes" ;; *) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBGNUTLS" >&5 $as_echo_n "checking for LIBGNUTLS... " >&6; } if test -n "$LIBGNUTLS_CFLAGS"; then pkg_cv_LIBGNUTLS_CFLAGS="$LIBGNUTLS_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gnutls >= 2.9.8\""; } >&5 ($PKG_CONFIG --exists --print-errors "gnutls >= 2.9.8") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBGNUTLS_CFLAGS=`$PKG_CONFIG --cflags "gnutls >= 2.9.8" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBGNUTLS_LIBS"; then pkg_cv_LIBGNUTLS_LIBS="$LIBGNUTLS_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gnutls >= 2.9.8\""; } >&5 ($PKG_CONFIG --exists --print-errors "gnutls >= 2.9.8") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBGNUTLS_LIBS=`$PKG_CONFIG --libs "gnutls >= 2.9.8" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBGNUTLS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gnutls >= 2.9.8" 2>&1` else LIBGNUTLS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gnutls >= 2.9.8" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBGNUTLS_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gnutls >= 2.9.8) were not met: $LIBGNUTLS_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBGNUTLS_CFLAGS and LIBGNUTLS_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LIBGNUTLS_CFLAGS and LIBGNUTLS_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else LIBGNUTLS_CFLAGS=$pkg_cv_LIBGNUTLS_CFLAGS LIBGNUTLS_LIBS=$pkg_cv_LIBGNUTLS_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi # check for 1.6 or higher oldlibs="$LIBS" LIBS="${LIBGNUTLS_LIBS}" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gnutls_transport_set_errno in -lgnutls" >&5 $as_echo_n "checking for gnutls_transport_set_errno in -lgnutls... " >&6; } if ${ac_cv_lib_gnutls_gnutls_transport_set_errno+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgnutls $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gnutls_transport_set_errno (); int main () { return gnutls_transport_set_errno (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gnutls_gnutls_transport_set_errno=yes else ac_cv_lib_gnutls_gnutls_transport_set_errno=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gnutls_gnutls_transport_set_errno" >&5 $as_echo "$ac_cv_lib_gnutls_gnutls_transport_set_errno" >&6; } if test "x$ac_cv_lib_gnutls_gnutls_transport_set_errno" = xyes; then : HAVE_GNUTLS_TRANSPORT_SET_ERRNO="yes" else HAVE_GNUTLS_TRANSPORT_SET_ERRNO="no" fi LIBS="$oldlibs" ;; esac if test "x${HAVE_GNUTLS_TRANSPORT_SET_ERRNO}" = "xyes"; then $as_echo "#define HAVE_GNUTLS_TRANSPORT_SET_ERRNO 1" >>confdefs.h fi ###------------------------------------------------------------------------- # # check for OpenSSL # { $as_echo "$as_me:${as_lineno-$LINENO}: checking if OpenSSL should be used" >&5 $as_echo_n "checking if OpenSSL should be used... " >&6; } # Check whether --enable-ssl was given. if test "${enable_ssl+set}" = set; then : enableval=$enable_ssl; enable_ssl="$enableval" else enable_ssl="yes" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_ssl" >&5 $as_echo "$enable_ssl" >&6; } if test "$enable_ssl" != "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for openssl includes" >&5 $as_echo_n "checking for openssl includes... " >&6; } # Check whether --with-openssl-includes was given. if test "${with_openssl_includes+set}" = set; then : withval=$with_openssl_includes; ssl_search_inc_dirs="$withval" else ssl_search_inc_dirs="/usr/include\ /usr/local/include\ /usr/local/ssl/include\ /usr/ssl/include\ /more/include\ /sw/include"\ fi found_dir="" ls=openssl/des.h ld="$ssl_search_inc_dirs" for li in $ld; do case "$build" in *-win32*) fname="$li\\$ls" ;; *) fname="$li/$ls" ;; esac if test -r "$fname"; then found_dir="$li" break fi done if test -z "$found_dir" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } else ssl_includes="-I$found_dir" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ssl_includes" >&5 $as_echo "$ssl_includes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for openssl libs" >&5 $as_echo_n "checking for openssl libs... " >&6; } # Check whether --with-openssl-libs was given. if test "${with_openssl_libs+set}" = set; then : withval=$with_openssl_libs; ssl_search_lib_dirs="$withval" else ssl_search_lib_dirs="/usr/lib \ /usr/local/lib \ /usr/lib/ssl/lib \ /usr/lib/openssl/lib \ /usr/local/ssl/lib \ /usr/local/openssl/lib \ /sw/lib \ /lib" fi if test "$OSYSTEM" != "windows" ; then for d in $ssl_search_lib_dirs; do # Look for the library files; the dylib one is for Darwin/Mac OS. found_file="" ls=""$d"" ld="libssl.so libssl.so.* libssl.a libssl.dylib" lf="" for li in $ld; do lf2="`ls -d ${ls}/${li} 2>/dev/null`" lf="$lf $lf2" done for li in $lf; do if test -r "$li"; then found_file=`basename "$li"` break fi done if test -n "$found_file" ; then ssl_libraries="-L$d" ssl_lib="-lssl -lcrypto" break fi done { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ssl_libraries ${ssl_lib}" >&5 $as_echo "$ssl_libraries ${ssl_lib}" >&6; } else # Tests will be ignored if ssl_lib/ssl_libraries have been set # externally if test -z "$ssl_libraries" -o -z "$ssl_lib" ; then for d in $ssl_search_lib_dirs; do # Look for library (linker) files that are available in # gnuwin32's openssl packages found_file="" ls=""$d"" ld="libssl.dll.a libssl.dll libssl.a" lf="" for li in $ld; do lf2="`ls -d ${ls}/${li} 2>/dev/null`" lf="$lf $lf2" done for li in $lf; do if test -r "$li"; then found_file=`basename "$li"` break fi done if test -n "$found_file" ; then ssl_libraries="-L$d" ssl_lib="-lssl -lcrypto" break fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ssl_libraries} ${ssl_lib}" >&5 $as_echo "${ssl_libraries} ${ssl_lib}" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether openssl is usable" >&5 $as_echo_n "checking whether openssl is usable... " >&6; } if test -z "$ssl_libraries" -o -z "$ssl_lib" -o -z "$ssl_includes"; then ssl_available="no" else ssl_available="yes" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ssl_available" >&5 $as_echo "$ssl_available" >&6; } # end of "if enable-ssl" fi if test "$ssl_available" = "yes"; then cat >>confdefs.h <<_ACEOF #define HAVE_OPENSSL 1 _ACEOF USE_CRYPT="yes" else GWEN_CRYPTO="none" USE_CRYPT="no" fi if test "$ssl_available" = "yes"; then IF_HAVE_OPENSSL_TRUE= IF_HAVE_OPENSSL_FALSE='#' else IF_HAVE_OPENSSL_TRUE='#' IF_HAVE_OPENSSL_FALSE= fi ###------------------------------------------------------------------------- # check for Distribution { $as_echo "$as_me:${as_lineno-$LINENO}: checking for preselected distribution name" >&5 $as_echo_n "checking for preselected distribution name... " >&6; } if test -n "$aq_distrib_name"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, $aq_distrib_name" >&5 $as_echo "yes, $aq_distrib_name" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, will have to determine it" >&5 $as_echo "no, will have to determine it" >&6; } aq_distrib_name="" aq_distrib_version="" aq_distrib_tag="" # Debian-style { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether this is a Debian derivate" >&5 $as_echo_n "checking whether this is a Debian derivate... " >&6; } case `basename $CC` in gcc | gcc-* | *-gcc | *-gcc-*) debtype="` ${CC} --version | head -1`" case $debtype in *\(Debian\ *) aq_distrib_name="Debian" aq_distrib_tag="debian" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, $aq_distrib_name" >&5 $as_echo "yes, $aq_distrib_name" >&6; } ;; *\(Ubuntu\ * | *\(KUbuntu\ *) aq_distrib_name="Ubuntu" aq_distrib_tag="ubuntu" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, $aq_distrib_name" >&5 $as_echo "yes, $aq_distrib_name" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi if test -z "$aq_distrib_name"; then # RPM-style { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether this is an RPM distribution" >&5 $as_echo_n "checking whether this is an RPM distribution... " >&6; } RPM_COMMAND="`which rpm`" aq_distrib_name="" aq_distrib_tag="" aq_distrib_version="" if test -n "${RPM_COMMAND}"; then if test -x "${RPM_COMMAND}"; then if test -e "/etc/mandriva-release"; then aq_distrib_name="mandriva" aq_distrib_tag="mdk" aq_distrib_version="`rpm -q --queryformat='%{VERSION}' mandriva-release 2>/dev/null`" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, $aq_distrib_name" >&5 $as_echo "yes, $aq_distrib_name" >&6; } elif test -e "/etc/mandrake-release"; then aq_distrib_name="mandrake" aq_distrib_tag="mdk" aq_distrib_version="`rpm -q --queryformat='%{VERSION}' mandrake-release 2>/dev/null`" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, $aq_distrib_name" >&5 $as_echo "yes, $aq_distrib_name" >&6; } elif test -e "/etc/SuSE-release"; then aq_distrib_name="suse" aq_distrib_tag="suse" read v1 v2 v3 v4 &5 $as_echo "yes, $aq_distrib_name" >&6; } elif test -e "/etc/fedora-release"; then aq_distrib_name="fedora" aq_distrib_tag="fc" aq_distrib_version="`rpm -q --queryformat='%{VERSION}' fedora-release 2>/dev/null`" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, $aq_distrib_name" >&5 $as_echo "yes, $aq_distrib_name" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (RPM found, but unknown distribution)" >&5 $as_echo "no (RPM found, but unknown distribution)" >&6; } fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (RPM not found)" >&5 $as_echo "no (RPM not found)" >&6; } fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (no RPM installed)" >&5 $as_echo "no (no RPM installed)" >&6; } fi fi ###------------------------------------------------------------------------- # # check for I18N # # check whether i18n files are to be created # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$XGETTEXT"; then ac_cv_prog_XGETTEXT="$XGETTEXT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_XGETTEXT="xgettext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_XGETTEXT" && ac_cv_prog_XGETTEXT="missing" fi fi XGETTEXT=$ac_cv_prog_XGETTEXT if test -n "$XGETTEXT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi MAKE_I18N_FILES="yes" if test "$XGETTEXT" = "missing"; then MAKE_I18N_FILES="no" { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: xgettext is missing. Locale suport is disabled." >&5 $as_echo "$as_me: WARNING: xgettext is missing. Locale suport is disabled." >&2;} fi # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $MSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="missing" ;; esac fi MSGFMT=$ac_cv_path_MSGFMT if test -n "$MSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$MSGFMT" = "missing"; then MAKE_I18N_FILES="no" { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: msgfmt is missing. Locale suport is disabled." >&5 $as_echo "$as_me: WARNING: msgfmt is missing. Locale suport is disabled." >&2;} fi if test "$MAKE_I18N_FILES" = "yes"; then IF_MAKE_I18N_FILES_TRUE= IF_MAKE_I18N_FILES_FALSE='#' else IF_MAKE_I18N_FILES_TRUE='#' IF_MAKE_I18N_FILES_FALSE= fi # then check whether i18n support is to be compiled in i18n_libs="" HAVE_I18N="yes" for ac_header in locale.h libintl.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else HAVE_I18N="no" fi done if test "$OS_TYPE" != "windows"; then oldlibs="$LIBS" LIBS="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gettext" >&5 $as_echo_n "checking for library containing gettext... " >&6; } if ${ac_cv_search_gettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gettext (); int main () { return gettext (); ; return 0; } _ACEOF for ac_lib in '' intl; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_gettext=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_gettext+:} false; then : break fi done if ${ac_cv_search_gettext+:} false; then : else ac_cv_search_gettext=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gettext" >&5 $as_echo "$ac_cv_search_gettext" >&6; } ac_res=$ac_cv_search_gettext if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else HAVE_I18N="no" fi i18n_libs="$LIBS" LIBS="$oldlibs" else i18n_libs="-lintl" fi if test "$HAVE_I18N" != "NO"; then cat >>confdefs.h <<_ACEOF #define HAVE_I18N 1 _ACEOF fi ###------------------------------------------------------------------------- # # check for iconv # # Check whether --with-iconv was given. if test "${with_iconv+set}" = set; then : withval=$with_iconv; ICONV_DIR="$withval" else ICONV_DIR="/usr" fi if test "$ICONV_DIR" = "no" ; then echo Disabling ICONV support else if test "$with_iconv" != "yes" -a "$with_iconv" != "" ; then CPPFLAGS="${CPPFLAGS} -I$with_iconv/include" # Export this since our headers include iconv.h ICONV_INCLUDES="-I$ICONV_DIR/include" ICONV_LIBS="-L$ICONV_DIR/lib" fi ac_fn_c_check_header_mongrel "$LINENO" "iconv.h" "ac_cv_header_iconv_h" "$ac_includes_default" if test "x$ac_cv_header_iconv_h" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 $as_echo_n "checking for iconv... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open ("",""); iconv (cd, NULL, NULL, NULL, NULL); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } WITH_ICONV=1 else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv in -liconv" >&5 $as_echo_n "checking for iconv in -liconv... " >&6; } _ldflags="${LDFLAGS}" _libs="${LIBS}" LDFLAGS="${LDFLAGS} ${ICONV_LIBS}" LIBS="${LIBS} -liconv" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open ("",""); iconv (cd, NULL, NULL, NULL, NULL); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } WITH_ICONV=1 ICONV_LIBS="${ICONV_LIBS} -liconv" LIBS="${_libs}" LDFLAGS="${_ldflags}" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } LIBS="${_libs}" LDFLAGS="${_ldflags}" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi fi cat >>confdefs.h <<_ACEOF #define HAVE_ICONV $WITH_ICONV _ACEOF ###------------------------------------------------------------------------- # # guis # # Check whether --with-guis was given. if test "${with_guis+set}" = set; then : withval=$with_guis; gwenhywfar_guis="$withval" else gwenhywfar_guis="qt4 gtk2" fi if test "$gwenhywfar_guis" = "none"; then gwenhywfar_guis="" fi if test "$gwenhywfar_guis" = "yes"; then gwenhywfar_guis="" fi ###------------------------------------------------------------------------- # Check for fox toolkit # case "$gwenhywfar_guis" in *fox16*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if FOX is allowed" >&5 $as_echo_n "checking if FOX is allowed... " >&6; } # Check whether --enable-fox was given. if test "${enable_fox+set}" = set; then : enableval=$enable_fox; enable_fox="$enableval" else enable_fox="yes" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_fox" >&5 $as_echo "$enable_fox" >&6; } if test "$enable_fox" = "no"; then fox_libs="" fox_includes="" have_fox="no" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fox includes" >&5 $as_echo_n "checking for fox includes... " >&6; } # Check whether --with-fox-includes was given. if test "${with_fox_includes+set}" = set; then : withval=$with_fox_includes; local_fox_includes="$withval" else local_fox_includes="\ /usr/include/fox-1.6 \ /usr/local/include/fox-1.6 \ /opt/fox-1.6/include \ " fi if test -z "$fox_includes"; then for i in $local_fox_includes; do if test -z "$fox_includes"; then if test -f "$i/fxver.h"; then fox_includes="-I$i" break; fi fi done fi if test -n "$fox_includes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $fox_includes" >&5 $as_echo "$fox_includes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } fi # Check for x86_64 architecture; potentially set lib-directory suffix if test "$target_cpu" = "x86_64"; then libdirsuffix="64" else libdirsuffix="" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fox libraries" >&5 $as_echo_n "checking for fox libraries... " >&6; } # Check whether --with-fox-libs was given. if test "${with_fox_libs+set}" = set; then : withval=$with_fox_libs; fox_libs="$withval" else ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu SAVED_LDFLAGS=$LDFLAGS SAVED_CXXFLAGS=$CXXFLAGS LDFLAGS="$LDFLAGS -lFOX-1.6" CXXFLAGS="$CXXFLAGS $fox_includes" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FX::FXDate dummy ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : fox_libs="-lFOX-1.6" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$SAVED_LDFLAGS CXXFLAGS=$SAVED_CXXFLAGS fi if test -z "$fox_libs"; then found_dir="" ls=$qt_searchname ld="$local_fox_libs" for li in $ld; do case "$build" in *-win32*) fname="$li\\$ls" ;; *) fname="$li/$ls" ;; esac if test -r "$fname"; then found_dir="$li" break fi done if test -n "$found_dir" ; then fox_libs="-L$found_dir -lFOX-1.6" fi fi if test -n "$fox_libs"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $fox_libs" >&5 $as_echo "$fox_libs" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } fi # check if all necessary fox components where found if test -z "$fox_includes" || \ test -z "$fox_libs"; then fox_libs="" fox_includes="" have_fox="no" else have_fox="yes" $as_echo "#define HAVE_FOX 1" >>confdefs.h fi fi GIVEN_CFLAGS=$fox_includes INCLUDE_DIRS=`echo | cpp -v 2>&1` INCLUDE_DIRS=`echo $INCLUDE_DIRS | sed -e 's/.*<...> search starts here://' | sed -e 's/End of search list.*//'` for dir in $INCLUDE_DIRS; do GIVEN_CFLAGS=$(echo $GIVEN_CFLAGS | sed -e "s;-I$dir ;;" | sed -e "s;-I$dir$;;") done fox_includes=$GIVEN_CFLAGS if test "$have_fox" != "yes"; then as_fn_error $? " **** FOX Toolkit missing. **** If you want to use the FOX-GUI you will have to install the package **** libfox-1.6 and libfox-1.6-devel on Debian-like systems. **** On RPM systems like SuSE those packages might have different names. **** If you don't need the FOX-GUI you might want to use the option **** --with-guis" "$LINENO" 5 fi $as_echo "#define BUILD_GUI_FOX16 1" >>confdefs.h with_gui_fox16="yes" ;; esac if test "$with_gui_fox16" = "yes"; then WITH_GUI_FOX16_TRUE= WITH_GUI_FOX16_FALSE='#' else WITH_GUI_FOX16_TRUE='#' WITH_GUI_FOX16_FALSE= fi ###------------------------------------------------------------------------- # Check for GTK+ # case "$gwenhywfar_guis" in *gtk2*) # We need at least GTK 2.17.5 because we use functions like # gtk_widget_get_sensitive() and gtk_widget_has_focus() pkg_modules="gtk+-2.0 >= 2.17.5" pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK2" >&5 $as_echo_n "checking for GTK2... " >&6; } if test -n "$GTK2_CFLAGS"; then pkg_cv_GTK2_CFLAGS="$GTK2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$pkg_modules\""; } >&5 ($PKG_CONFIG --exists --print-errors "$pkg_modules") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK2_CFLAGS=`$PKG_CONFIG --cflags "$pkg_modules" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GTK2_LIBS"; then pkg_cv_GTK2_LIBS="$GTK2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$pkg_modules\""; } >&5 ($PKG_CONFIG --exists --print-errors "$pkg_modules") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK2_LIBS=`$PKG_CONFIG --libs "$pkg_modules" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GTK2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$pkg_modules" 2>&1` else GTK2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$pkg_modules" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GTK2_PKG_ERRORS" >&5 true elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } true else GTK2_CFLAGS=$pkg_cv_GTK2_CFLAGS GTK2_LIBS=$pkg_cv_GTK2_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi $as_echo "#define BUILD_GUI_GTK2 1" >>confdefs.h with_gui_gtk2="yes" ;; esac if test "$with_gui_gtk2" = "yes"; then WITH_GUI_GTK2_TRUE= WITH_GUI_GTK2_FALSE='#' else WITH_GUI_GTK2_TRUE='#' WITH_GUI_GTK2_FALSE= fi ###------------------------------------------------------------------------- # # QT4 # UIC4="NO" QT4_BINDIR="" case "$gwenhywfar_guis" in *qt4*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for qt4 includes" >&5 $as_echo_n "checking for qt4 includes... " >&6; } # Check whether --with-qt4-includes was given. if test "${with_qt4_includes+set}" = set; then : withval=$with_qt4_includes; local_qt4_includes="$withval" else local_qt4_includes="\ $QTDIR/include \ /usr/include/qt4 \ /usr/local/include/qt4 \ /usr/lib/qt4/include \ /usr/local/lib/qt4/include \ /opt/qt4/include \ /usr/include/qt \ /usr/local/include/qt \ /usr/lib/qt/include \ /usr/local/lib/qt/include \ /usr/include \ /usr/local/include \ /opt/qt/include \ /usr/X11R6/include \ " fi if test -z "$qt4_includes"; then for i in $local_qt4_includes; do if test -z "$qt4_includes"; then qglobalh_paths="Qt QtCore" for q in $qglobalh_paths; do if test -f "$i/$q/qglobal.h"; then lv1=`grep -h "#define QT_VERSION_STR" $i/$q/qglobal.h` case $lv1 in *4.*) qt4_includes="-I$i -I$i/Qt -I$i/QtCore -I$i/QtGui" qt4_dir=`echo $i | ${SED} 's-/include.*--'` break; ;; esac fi done fi done fi if test -n "$qt4_includes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $qt4_includes" >&5 $as_echo "$qt4_includes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } fi # Check for x86_64 architecture; potentially set lib-directory suffix if test "$target_cpu" = "x86_64"; then libdirsuffix="64" else libdirsuffix="" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for qt4 libraries" >&5 $as_echo_n "checking for qt4 libraries... " >&6; } # Check whether --with-qt4-libs was given. if test "${with_qt4_libs+set}" = set; then : withval=$with_qt4_libs; local_qt4_libs="$withval" else local_qt4_libs="\ $qt4_dir/lib${libdirsuffix} \ $QTDIR/lib${libdirsuffix} \ $DEBIAN_MULTIARCH_DIRS \ /usr/lib/qt4 \ /usr/local/lib/qt4 \ /usr/lib/qt4/lib${libdirsuffix} \ /usr/local/lib/qt4/lib${libdirsuffix} \ /opt/qt4/lib${libdirsuffix} \ /usr/lib/qt \ /usr/local/lib/qt \ /usr/lib/qt/lib${libdirsuffix} \ /usr/local/lib/qt/lib${libdirsuffix} \ /usr/lib${libdirsuffix} \ /usr/lib${libdirsuffix}/qt4/lib \ /usr/lib${libdirsuffix}/qt-4.5/lib \ /usr/lib${libdirsuffix}/qt-4.6/lib \ /usr/local/lib${libdirsuffix} \ /opt/qt/lib${libdirsuffix} \ /usr/X11R6/lib${libdirsuffix} \ " fi # Determine the extension of a shared library; the variable # std_shrext comes from the AC_PROG_LIBTOOL macro. Copied from # libtool. # Shared library suffix. On linux this was set as # shrext_cmds='.so'; but on darwin it is actually a text command. eval std_shrext=\"$shrext_cmds\" if test -n "${std_shrext}"; then std_shrext='.so' fi qt_libname="QtGui" # This is the name of the qt library to search for. if test "x$OSYSTEM" = "xosx"; then qt_searchname="lib${qt_libname}.4.dylib" else qt_searchname="lib${qt_libname}${std_shrext}.4" fi if test -z "$qt4_libs"; then found_dir="" ls=$qt_searchname ld="$local_qt4_libs" for li in $ld; do case "$build" in *-win32*) fname="$li\\$ls" ;; *) fname="$li/$ls" ;; esac if test -r "$fname"; then found_dir="$li" break fi done if test -n "$found_dir" ; then qt4_libs="-L$found_dir -l${qt_libname} -lQtCore" fi fi if test -n "$qt4_libs"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $qt4_libs" >&5 $as_echo "$qt4_libs" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for qt4 moc" >&5 $as_echo_n "checking for qt4 moc... " >&6; } if test -z "$qt4_moc"; then # Check whether --with-qt4-moc was given. if test "${with_qt4_moc+set}" = set; then : withval=$with_qt4_moc; qt4_moc="$withval" else qt4_moc="" fi fi if test -z "$qt4_moc"; then searchdir="\ $qt4_dir/bin \ $QTDIR/bin \ /usr/lib/qt4/bin \ /usr/local/lib/qt4/bin \ /opt/qt4/bin \ /usr/lib/qt/bin \ /usr/local/lib/qt/bin \ /usr/bin \ /usr/local/bin \ /opt/qt/bin \ /usr/X11R6/bin \ " # search for "moc-qt4" for f in $searchdir; do if test -x $f/moc-qt4; then qt4_moc="$f/moc-qt4" break fi done # fall back to "moc" if test -z "$qt4_moc"; then for f in $searchdir; do if test -x $f/moc; then qt4_moc="$f/moc" break fi done fi fi if test -n "$qt4_moc"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $qt4_moc" >&5 $as_echo "$qt4_moc" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for qt4 uic" >&5 $as_echo_n "checking for qt4 uic... " >&6; } if test -z "$qt4_uic"; then # Check whether --with-qt4-uic was given. if test "${with_qt4_uic+set}" = set; then : withval=$with_qt4_uic; qt4_uic="$withval" else qt4_uic="" fi searchdir="\ $qt4_dir/bin \ $QTDIR/bin \ /usr/lib/qt4/bin \ /usr/local/lib/qt4/bin \ /opt/qt4/bin \ /usr/lib/qt/bin \ /usr/local/lib/qt/bin \ /usr/bin \ /usr/local/bin \ /opt/qt/bin \ /usr/X11R6/bin \ " # search for "uic-qt4" for f in $searchdir; do if test -x $f/uic-qt4; then qt4_uic="$f/uic-qt4" break fi done # fall back to "uic" if test -z "$qt4_uic"; then for f in $searchdir; do if test -x $f/uic; then qt4_uic="$f/uic" break fi done fi fi if test -n "$qt4_uic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $qt4_uic" >&5 $as_echo "$qt4_uic" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } fi # check if all necessary qt4 components where found if test -z "$qt4_includes" || \ test -z "$qt4_moc" || \ test -z "$qt4_uic" || \ test -z "$qt4_libs"; then qt4_libs="" qt4_moc="" qt4_uic="" qt4_includes="" have_qt4="no" as_fn_error $? " Compilation of QT applications is enabled but I could not find some Qt components (see which are missing in messages above). If you don't want to compile Qt4 applications please explicitly specify which GUIs you want to support using \"--with-guis\". " "$LINENO" 5 else have_qt4="yes" $as_echo "#define HAVE_QT4 1" >>confdefs.h fi GIVEN_CFLAGS=$qt4_includes INCLUDE_DIRS=`echo | cpp -v 2>&1` INCLUDE_DIRS=`echo $INCLUDE_DIRS | sed -e 's/.*<...> search starts here://' | sed -e 's/End of search list.*//'` for dir in $INCLUDE_DIRS; do GIVEN_CFLAGS=$(echo $GIVEN_CFLAGS | sed -e "s;-I$dir ;;" | sed -e "s;-I$dir$;;") done qt4_includes=$GIVEN_CFLAGS if test "$have_qt4" = "yes"; then # Define this macro to disable the cast from QString to const char # which implicitly uses latin1()! $as_echo "#define QT_NO_ASCII_CAST 1" >>confdefs.h fi # Extract the first word of "yes", so it can be a program name with args. set dummy yes; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_YES+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$YES"; then ac_cv_prog_YES="$YES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_YES="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_YES" && ac_cv_prog_YES="echo -e 'y\ny\ny\ny\n'" fi fi YES=$ac_cv_prog_YES if test -n "$YES"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YES" >&5 $as_echo "$YES" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi QT4_BINDIR="` echo ${qt4_moc} | ${SED} 's-/moc--' | ${SED} 's-/c/-c:\\\\-' | ${SED} 's-/-\\\\-g' `" UIC4="${qt4_uic}" $as_echo "#define BUILD_GUI_QT4 1" >>confdefs.h with_gui_qt4="yes" ;; *) ;; esac if test "$with_gui_qt4" = "yes"; then WITH_GUI_QT4_TRUE= WITH_GUI_QT4_FALSE='#' else WITH_GUI_QT4_TRUE='#' WITH_GUI_QT4_FALSE= fi ###------------------------------------------------------------------------- # # check docpath # { $as_echo "$as_me:${as_lineno-$LINENO}: checking docpath" >&5 $as_echo_n "checking docpath... " >&6; } # Check whether --with-docpath was given. if test "${with_docpath+set}" = set; then : withval=$with_docpath; docpath="$withval" else docpath="${HOME}/apidoc" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $docpath" >&5 $as_echo "$docpath" >&6; } ###------------------------------------------------------------------------- # # search for tag files # { $as_echo "$as_me:${as_lineno-$LINENO}: checking doxygen tag files" >&5 $as_echo_n "checking doxygen tag files... " >&6; } DOXYGEN_TAGFILES="" if test -d "${docpath}"; then DOXYGEN_TAGFILES="`cd ${docpath} && ls *.tag`" if test -n "${DOXYGEN_TAGFILES}"; then DOXYGEN_TAGFILES="`echo ${DOXYGEN_TAGFILES} | ${SED} -e s/${PACKAGE}.tag//`" fi realfiles="" for ff in ${DOXYGEN_TAGFILES}; do realfiles="${realfiles} ${docpath}/${ff}" done DOXYGEN_TAGFILES="${realfiles}" fi if test -z "${DOXYGEN_TAGFILES}"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 $as_echo "found" >&6; } fi ###------------------------------------------------------------------------- # # Search for dlopen # LIBS="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5 $as_echo_n "checking for library containing dlopen... " >&6; } if ${ac_cv_search_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF for ac_lib in '' c dl; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_search_dlopen=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_dlopen+:} false; then : break fi done if ${ac_cv_search_dlopen+:} false; then : else ac_cv_search_dlopen=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5 $as_echo "$ac_cv_search_dlopen" >&6; } ac_res=$ac_cv_search_dlopen if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "$LIBS" = "-lc"; then LIBS="" fi ld_library="$LIBS" LIBS="" all_libraries="$all_libraries $ld_library" ###------------------------------------------------------------------------- # # check for release # { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether this is an official release" >&5 $as_echo_n "checking whether this is an official release... " >&6; } # Check whether --enable-release was given. if test "${enable_release+set}" = set; then : enableval=$enable_release; case "${enableval}" in yes) enable_release="yes";; no) enable_release="no";; *) as_fn_error $? "bad value ${enableval} for --enable-release" "$LINENO" 5;; esac else enable_release="no" fi if test "$enable_release" = "yes"; then STRIPALL="-s" else STRIPALL="" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_release" >&5 $as_echo "$enable_release" >&6; } ###------------------------------------------------------------------------- # # Compiler check for symbol visibility # { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler supports symbol visibility" >&5 $as_echo_n "checking whether compiler supports symbol visibility... " >&6; } if ${ac_cv_hidden_visibility_attribute+:} false; then : $as_echo_n "(cached) " >&6 else echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1; }' > conftest.c ac_cv_hidden_visibility_attribute=no if { ac_try='${CC-cc} -Werror -S conftest.c -o conftest.s 1>&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then if grep '\.hidden.*foo' conftest.s >/dev/null; then ac_cv_hidden_visibility_attribute=yes fi fi rm -f conftest.* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_hidden_visibility_attribute" >&5 $as_echo "$ac_cv_hidden_visibility_attribute" >&6; } if test $ac_cv_hidden_visibility_attribute = yes; then $as_echo "#define GCC_WITH_VISIBILITY_ATTRIBUTE 1" >>confdefs.h visibility_cflags="-fvisibility=hidden" fi ###------------------------------------------------------------------------- # # check for MEMTRACE # { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MEMTRACE is wanted" >&5 $as_echo_n "checking if MEMTRACE is wanted... " >&6; } # Check whether --enable-memtrace was given. if test "${enable_memtrace+set}" = set; then : enableval=$enable_memtrace; enable_memtrace="$enableval" else enable_memtrace="no" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_memtrace" >&5 $as_echo "$enable_memtrace" >&6; } if test "$enable_memtrace" != "no"; then #AC_DEFINE(GWEN_MEMTRACE, 1, [if memory trace is wanted]) $as_echo "#define GWEN_MEMORY_DEBUG 1" >>confdefs.h fi # Debug arguments for compilation # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; case "${enableval}" in yes) CXXFLAGS="${CXXFLAGS} -g" CFLAGS="${CFLAGS} -g" LDFLAGS="${LDFLAGS} -g" $as_echo "#define DEBUG 1" >>confdefs.h ;; no) ;; *) as_fn_error $? "bad value ${enableval} for --enable-debug" "$LINENO" 5 ;; esac else # Default value if the argument was not given CXXFLAGS="${CXXFLAGS}" CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" fi if test ${GCC}x = yesx; then # Check whether --enable-warnings was given. if test "${enable_warnings+set}" = set; then : enableval=$enable_warnings; case "${enableval}" in yes) CXXFLAGS="${CXXFLAGS} -Wall" CFLAGS="${CFLAGS} -Wall" ;; all) CXXFLAGS="${CXXFLAGS} -Wall -pedantic -ansi" CFLAGS="${CFLAGS} -Wall -pedantic -ansi" ;; no) ;; *) as_fn_error $? "bad value ${enableval} for --enable-warnings" "$LINENO" 5 ;; esac else # Default value if the argument was not given CXXFLAGS="${CXXFLAGS} -Wall" CFLAGS="${CFLAGS} -Wall" fi GCC_VERSION=`${CC} -dumpversion` if test `echo ${GCC_VERSION} | cut -d. -f1` -ge 3; then # This is gcc >= 3.x.x if test `echo ${GCC_VERSION} | cut -d. -f2` -ge 4; then # This is gcc >= 3.4.x CFLAGS="${CFLAGS} -Wdeclaration-after-statement" fi fi # Check whether --enable-error-on-warning was given. if test "${enable_error_on_warning+set}" = set; then : enableval=$enable_error_on_warning; case "${enableval}" in yes) CXXFLAGS="${CXXFLAGS} -Werror" CFLAGS="${CFLAGS} -Werror" ;; no) ;; *) as_fn_error $? "bad value ${enableval} for --enable-error-on-warning" "$LINENO" 5 ;; esac else # Default value if the argument was not given CXXFLAGS="${CXXFLAGS}" CFLAGS="${CFLAGS}" fi fi ###------------------------------------------------------------------------- # # check buffer hard limit # { $as_echo "$as_me:${as_lineno-$LINENO}: checking default buffer hard limit" >&5 $as_echo_n "checking default buffer hard limit... " >&6; } # Check whether --with-buffer-hardlimit was given. if test "${with_buffer_hardlimit+set}" = set; then : withval=$with_buffer_hardlimit; gwenhywfar_buffer_hardlimit="$withval" else gwenhywfar_buffer_hardlimit="" fi if test -z "${gwenhywfar_buffer_hardlimit}"; then gwenhywfar_buffer_hardlimit="(16*1024*1024)" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gwenhywfar_buffer_hardlimit" >&5 $as_echo "$gwenhywfar_buffer_hardlimit" >&6; } ###------------------------------------------------------------------------- # # compile program flags # PROG_LIBRARIES="${PROG_LIBRARIES} ${ssl_libraries} ${ssl_lib} ${ncurses_libs}" # Clean up include variables GIVEN_CFLAGS=$ssl_includes INCLUDE_DIRS=`echo | cpp -v 2>&1` INCLUDE_DIRS=`echo $INCLUDE_DIRS | sed -e 's/.*<...> search starts here://' | sed -e 's/End of search list.*//'` for dir in $INCLUDE_DIRS; do GIVEN_CFLAGS=$(echo $GIVEN_CFLAGS | sed -e "s;-I$dir ;;" | sed -e "s;-I$dir$;;") done ssl_includes=$GIVEN_CFLAGS GIVEN_CFLAGS=$gwenhywfar_includes INCLUDE_DIRS=`echo | cpp -v 2>&1` INCLUDE_DIRS=`echo $INCLUDE_DIRS | sed -e 's/.*<...> search starts here://' | sed -e 's/End of search list.*//'` for dir in $INCLUDE_DIRS; do GIVEN_CFLAGS=$(echo $GIVEN_CFLAGS | sed -e "s;-I$dir ;;" | sed -e "s;-I$dir$;;") done gwenhywfar_includes=$GIVEN_CFLAGS GIVEN_CFLAGS=$all_includes INCLUDE_DIRS=`echo | cpp -v 2>&1` INCLUDE_DIRS=`echo $INCLUDE_DIRS | sed -e 's/.*<...> search starts here://' | sed -e 's/End of search list.*//'` for dir in $INCLUDE_DIRS; do GIVEN_CFLAGS=$(echo $GIVEN_CFLAGS | sed -e "s;-I$dir ;;" | sed -e "s;-I$dir$;;") done all_includes=$GIVEN_CFLAGS ###------------------------------------------------------------------------- # # check for doc type # { $as_echo "$as_me:${as_lineno-$LINENO}: checking if full docu should be created" >&5 $as_echo_n "checking if full docu should be created... " >&6; } # Check whether --enable-full-doc was given. if test "${enable_full_doc+set}" = set; then : enableval=$enable_full_doc; case "${enableval}" in yes) enable_fulldoc="yes";; no) enable_fulldoc="no";; *) as_fn_error $? "bad value ${enableval} for --enable-full-doc" "$LINENO" 5;; esac else enable_fulldoc="no" fi if test "$enable_fulldoc" = "yes"; then DOXYGEN_INPUT="listdoc.h src gui" DOXYGEN_DEFINE="" else DOXYGEN_DEFINE="DOXYGEN_HIDE" DOXYGEN_INPUT="listdoc.h gwenhywfar4" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_fulldoc" >&5 $as_echo "$enable_fulldoc" >&6; } # Debug arguments for compilation # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; case "${enableval}" in yes) CXXFLAGS="${CXXFLAGS} -g" CFLAGS="${CFLAGS} -g" LDFLAGS="${LDFLAGS} -g" $as_echo "#define DEBUG 1" >>confdefs.h ;; no) ;; *) as_fn_error $? "bad value ${enableval} for --enable-debug" "$LINENO" 5 ;; esac else # Default value if the argument was not given CXXFLAGS="${CXXFLAGS}" CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" fi if test ${GCC}x = yesx; then # Check whether --enable-warnings was given. if test "${enable_warnings+set}" = set; then : enableval=$enable_warnings; case "${enableval}" in yes) CXXFLAGS="${CXXFLAGS} -Wall" CFLAGS="${CFLAGS} -Wall" ;; all) CXXFLAGS="${CXXFLAGS} -Wall -pedantic -ansi" CFLAGS="${CFLAGS} -Wall -pedantic -ansi" ;; no) ;; *) as_fn_error $? "bad value ${enableval} for --enable-warnings" "$LINENO" 5 ;; esac else # Default value if the argument was not given CXXFLAGS="${CXXFLAGS} -Wall" CFLAGS="${CFLAGS} -Wall" fi GCC_VERSION=`${CC} -dumpversion` if test `echo ${GCC_VERSION} | cut -d. -f1` -ge 3; then # This is gcc >= 3.x.x if test `echo ${GCC_VERSION} | cut -d. -f2` -ge 4; then # This is gcc >= 3.4.x CFLAGS="${CFLAGS} -Wdeclaration-after-statement" fi fi # Check whether --enable-error-on-warning was given. if test "${enable_error_on_warning+set}" = set; then : enableval=$enable_error_on_warning; case "${enableval}" in yes) CXXFLAGS="${CXXFLAGS} -Werror" CFLAGS="${CFLAGS} -Werror" ;; no) ;; *) as_fn_error $? "bad value ${enableval} for --enable-error-on-warning" "$LINENO" 5 ;; esac else # Default value if the argument was not given CXXFLAGS="${CXXFLAGS}" CFLAGS="${CFLAGS}" fi fi ###------------------------------------------------------------------------- # # substitute vars # ###------------------------------------------------------------------------- # { $as_echo "$as_me:${as_lineno-$LINENO}: checking crypt token plugins" >&5 $as_echo_n "checking crypt token plugins... " >&6; } # Check whether --with-plugins-ct was given. if test "${with_plugins_ct+set}" = set; then : withval=$with_plugins_ct; plugins="$withval" else plugins="all" fi if test "$plugins" = "all"; then plugins="ohbci"; fi gwenhywfar_plugins_ct_dirs="" gwenhywfar_plugins_ct_libs="" for plugin in $plugins; do case "$plugin" in ohbci) gwenhywfar_plugins_ct_dirs="$gwenhywfar_plugins_ct_dirs ohbci" gwenhywfar_plugins_ct_libs="$gwenhywfar_plugins_ct_libs ohbci/libct_ohbci.la" $as_echo "#define GWENHYWFAR_WITH_PLUGIN_CT_OHBCI 1" >>confdefs.h ;; *) as_fn_error $? ""ERROR: Unknown plugin \"$plugin\""" "$LINENO" 5 ;; esac done { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugins" >&5 $as_echo "$plugins" >&6; } ###------------------------------------------------------------------------- # { $as_echo "$as_me:${as_lineno-$LINENO}: checking DBIO plugins" >&5 $as_echo_n "checking DBIO plugins... " >&6; } # Check whether --with-plugins-dbio was given. if test "${with_plugins_dbio+set}" = set; then : withval=$with_plugins_dbio; plugins="$withval" else plugins="all" fi if test "$plugins" = "all"; then plugins="csv olddb xmldb"; fi gwenhywfar_plugins_dbio_dirs="" gwenhywfar_plugins_dbio_libs="" for plugin in $plugins; do case "$plugin" in csv) gwenhywfar_plugins_dbio_dirs="$gwenhywfar_plugins_dbio_dirs csv" gwenhywfar_plugins_dbio_libs="$gwenhywfar_plugins_dbio_libs csv/libdbio_csv.la" $as_echo "#define GWENHYWFAR_WITH_PLUGIN_DBIO_CSV 1" >>confdefs.h ;; olddb) gwenhywfar_plugins_dbio_dirs="$gwenhywfar_plugins_dbio_dirs olddb" gwenhywfar_plugins_dbio_libs="$gwenhywfar_plugins_dbio_libs olddb/libdbio_olddb.la" $as_echo "#define GWENHYWFAR_WITH_PLUGIN_DBIO_OLDDB 1" >>confdefs.h ;; xmldb) gwenhywfar_plugins_dbio_dirs="$gwenhywfar_plugins_dbio_dirs xmldb" gwenhywfar_plugins_dbio_libs="$gwenhywfar_plugins_dbio_libs xmldb/libdbio_xmldb.la" $as_echo "#define GWENHYWFAR_WITH_PLUGIN_DBIO_XMLDB 1" >>confdefs.h ;; *) as_fn_error $? ""ERROR: Unknown plugin \"$plugin\""" "$LINENO" 5 ;; esac done { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugins" >&5 $as_echo "$plugins" >&6; } ###------------------------------------------------------------------------- # { $as_echo "$as_me:${as_lineno-$LINENO}: checking ConfigManager plugins" >&5 $as_echo_n "checking ConfigManager plugins... " >&6; } # Check whether --with-plugins-cfgmgr was given. if test "${with_plugins_cfgmgr+set}" = set; then : withval=$with_plugins_cfgmgr; plugins="$withval" else plugins="all" fi if test "$plugins" = "all"; then plugins="dir"; fi gwenhywfar_plugins_cfgmgr_dirs="" gwenhywfar_plugins_cfgmgr_libs="" for plugin in $plugins; do case "$plugin" in dir) gwenhywfar_plugins_cfgmgr_dirs="$gwenhywfar_plugins_cfgmgr_dirs dir" gwenhywfar_plugins_cfgmgr_libs="$gwenhywfar_plugins_cfgmgr_libs dir/libcfgmgr_dir.la" $as_echo "#define GWENHYWFAR_WITH_PLUGIN_CFGMGR_DIR 1" >>confdefs.h ;; *) as_fn_error $? ""ERROR: Unknown plugin \"$plugin\""" "$LINENO" 5 ;; esac done { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugins" >&5 $as_echo "$plugins" >&6; } ###------------------------------------------------------------------------- # # list of files to create # ac_config_files="$ac_config_files Doxyfile Makefile admin/Makefile m4/Makefile po/Makefile gwenhywfar-config.in gwenhywfar.pc gwenhywfar-config.cmake gwenhywfar-config-version.cmake gwenhywfar.spec gwenhywfar.iss checks/Makefile data/Makefile doc/Makefile doc/dialog/Makefile doc/dialog/images/Makefile doc/inherit/Makefile doc/plugindescr.xsd src/Makefile src/types.h src/ressource.rc src/version.h src/base/Makefile src/crypt3/Makefile src/cryptmsg/Makefile src/crypttoken/Makefile src/gui/Makefile src/sio/Makefile src/html/Makefile src/os/Makefile src/os/posix/Makefile src/os/posix/system.h src/os/windows/Makefile src/os/windows/system.h src/parser/Makefile src/gparser/Makefile src/sar/Makefile plugins/Makefile plugins/dbio/Makefile plugins/dbio/csv/Makefile plugins/dbio/csv/csv.xml plugins/dbio/csv/ressource.rc plugins/dbio/olddb/Makefile plugins/dbio/olddb/olddb.xml plugins/dbio/olddb/ressource.rc plugins/dbio/xmldb/Makefile plugins/dbio/xmldb/xmldb.xml plugins/dbio/xmldb/ressource.rc plugins/ct/Makefile plugins/ct/ohbci/Makefile plugins/ct/ohbci/ohbci.xml plugins/ct/ohbci/ressource.rc plugins/configmgr/Makefile plugins/configmgr/dir/Makefile plugins/configmgr/dir/dir.xml tools/Makefile tools/xmlmerge/Makefile tools/typemaker/Makefile tools/typemaker2/Makefile tools/typemaker2/types/Makefile tools/typemaker2/types/c/Makefile tools/gcttool/Makefile tools/gsa/Makefile test/Makefile gui/Makefile gui/cpp/Makefile gui/qt4/Makefile gui/qt4/gwengui-qt4.pc gui/qt4/gwengui-qt4-config.cmake gui/qt4/gwengui-qt4-config-version.cmake gui/fox16/Makefile gui/fox16/gwengui-fox16.pc gui/gtk2/Makefile gui/gtk2/gwengui-gtk2.pc gui/cocoa/Makefile gui/testdialogs/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepOBJC_TRUE}" && test -z "${am__fastdepOBJC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepOBJC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${IS_WINDOWS_TRUE}" && test -z "${IS_WINDOWS_FALSE}"; then as_fn_error $? "conditional \"IS_WINDOWS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${IF_HAVE_OPENSSL_TRUE}" && test -z "${IF_HAVE_OPENSSL_FALSE}"; then as_fn_error $? "conditional \"IF_HAVE_OPENSSL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${IF_MAKE_I18N_FILES_TRUE}" && test -z "${IF_MAKE_I18N_FILES_FALSE}"; then as_fn_error $? "conditional \"IF_MAKE_I18N_FILES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_GUI_FOX16_TRUE}" && test -z "${WITH_GUI_FOX16_FALSE}"; then as_fn_error $? "conditional \"WITH_GUI_FOX16\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_GUI_GTK2_TRUE}" && test -z "${WITH_GUI_GTK2_FALSE}"; then as_fn_error $? "conditional \"WITH_GUI_GTK2\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_GUI_QT4_TRUE}" && test -z "${WITH_GUI_QT4_FALSE}"; then as_fn_error $? "conditional \"WITH_GUI_QT4\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`' LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' LD_RC='`$ECHO "$LD_RC" | $SED "$delay_single_quote_subst"`' reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' reload_flag_RC='`$ECHO "$reload_flag_RC" | $SED "$delay_single_quote_subst"`' reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' reload_cmds_RC='`$ECHO "$reload_cmds_RC" | $SED "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_cmds_RC='`$ECHO "$old_archive_cmds_RC" | $SED "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' compiler_RC='`$ECHO "$compiler_RC" | $SED "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' GCC_RC='`$ECHO "$GCC_RC" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_RC='`$ECHO "$lt_prog_compiler_no_builtin_flag_RC" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_RC='`$ECHO "$lt_prog_compiler_pic_RC" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_RC='`$ECHO "$lt_prog_compiler_wl_RC" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_RC='`$ECHO "$lt_prog_compiler_static_RC" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_RC='`$ECHO "$lt_cv_prog_compiler_c_o_RC" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_RC='`$ECHO "$archive_cmds_need_lc_RC" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_RC='`$ECHO "$enable_shared_with_static_runtimes_RC" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_RC='`$ECHO "$export_dynamic_flag_spec_RC" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_RC='`$ECHO "$whole_archive_flag_spec_RC" | $SED "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' compiler_needs_object_RC='`$ECHO "$compiler_needs_object_RC" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_RC='`$ECHO "$old_archive_from_new_cmds_RC" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_RC='`$ECHO "$old_archive_from_expsyms_cmds_RC" | $SED "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_RC='`$ECHO "$archive_cmds_RC" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_RC='`$ECHO "$archive_expsym_cmds_RC" | $SED "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_cmds_RC='`$ECHO "$module_cmds_RC" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_RC='`$ECHO "$module_expsym_cmds_RC" | $SED "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' with_gnu_ld_RC='`$ECHO "$with_gnu_ld_RC" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_RC='`$ECHO "$allow_undefined_flag_RC" | $SED "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' no_undefined_flag_RC='`$ECHO "$no_undefined_flag_RC" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_RC='`$ECHO "$hardcode_libdir_flag_spec_RC" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_RC='`$ECHO "$hardcode_libdir_separator_RC" | $SED "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_RC='`$ECHO "$hardcode_direct_RC" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_RC='`$ECHO "$hardcode_direct_absolute_RC" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_RC='`$ECHO "$hardcode_minus_L_RC" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_RC='`$ECHO "$hardcode_shlibpath_var_RC" | $SED "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' hardcode_automatic_RC='`$ECHO "$hardcode_automatic_RC" | $SED "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' inherit_rpath_RC='`$ECHO "$inherit_rpath_RC" | $SED "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' link_all_deplibs_RC='`$ECHO "$link_all_deplibs_RC" | $SED "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' always_export_symbols_RC='`$ECHO "$always_export_symbols_RC" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_RC='`$ECHO "$export_symbols_cmds_RC" | $SED "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' exclude_expsyms_RC='`$ECHO "$exclude_expsyms_RC" | $SED "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' include_expsyms_RC='`$ECHO "$include_expsyms_RC" | $SED "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' prelink_cmds_RC='`$ECHO "$prelink_cmds_RC" | $SED "$delay_single_quote_subst"`' postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' postlink_cmds_RC='`$ECHO "$postlink_cmds_RC" | $SED "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' file_list_spec_RC='`$ECHO "$file_list_spec_RC" | $SED "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' hardcode_action_RC='`$ECHO "$hardcode_action_RC" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_RC='`$ECHO "$compiler_lib_search_dirs_RC" | $SED "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' predep_objects_RC='`$ECHO "$predep_objects_RC" | $SED "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' postdep_objects_RC='`$ECHO "$postdep_objects_RC" | $SED "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' predeps_RC='`$ECHO "$predeps_RC" | $SED "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' postdeps_RC='`$ECHO "$postdeps_RC" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_RC='`$ECHO "$compiler_lib_search_path_RC" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ AS \ LD_CXX \ LD_RC \ reload_flag_CXX \ reload_flag_RC \ compiler_CXX \ compiler_RC \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_no_builtin_flag_RC \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_pic_RC \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_wl_RC \ lt_prog_compiler_static_CXX \ lt_prog_compiler_static_RC \ lt_cv_prog_compiler_c_o_CXX \ lt_cv_prog_compiler_c_o_RC \ export_dynamic_flag_spec_CXX \ export_dynamic_flag_spec_RC \ whole_archive_flag_spec_CXX \ whole_archive_flag_spec_RC \ compiler_needs_object_CXX \ compiler_needs_object_RC \ with_gnu_ld_CXX \ with_gnu_ld_RC \ allow_undefined_flag_CXX \ allow_undefined_flag_RC \ no_undefined_flag_CXX \ no_undefined_flag_RC \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_flag_spec_RC \ hardcode_libdir_separator_CXX \ hardcode_libdir_separator_RC \ exclude_expsyms_CXX \ exclude_expsyms_RC \ include_expsyms_CXX \ include_expsyms_RC \ file_list_spec_CXX \ file_list_spec_RC \ compiler_lib_search_dirs_CXX \ compiler_lib_search_dirs_RC \ predep_objects_CXX \ predep_objects_RC \ postdep_objects_CXX \ postdep_objects_RC \ predeps_CXX \ predeps_RC \ postdeps_CXX \ postdeps_RC \ compiler_lib_search_path_CXX \ compiler_lib_search_path_RC; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec \ reload_cmds_CXX \ reload_cmds_RC \ old_archive_cmds_CXX \ old_archive_cmds_RC \ old_archive_from_new_cmds_CXX \ old_archive_from_new_cmds_RC \ old_archive_from_expsyms_cmds_CXX \ old_archive_from_expsyms_cmds_RC \ archive_cmds_CXX \ archive_cmds_RC \ archive_expsym_cmds_CXX \ archive_expsym_cmds_RC \ module_cmds_CXX \ module_cmds_RC \ module_expsym_cmds_CXX \ module_expsym_cmds_RC \ export_symbols_cmds_CXX \ export_symbols_cmds_RC \ prelink_cmds_CXX \ prelink_cmds_RC \ postlink_cmds_CXX \ postlink_cmds_RC; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Doxyfile") CONFIG_FILES="$CONFIG_FILES Doxyfile" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "admin/Makefile") CONFIG_FILES="$CONFIG_FILES admin/Makefile" ;; "m4/Makefile") CONFIG_FILES="$CONFIG_FILES m4/Makefile" ;; "po/Makefile") CONFIG_FILES="$CONFIG_FILES po/Makefile" ;; "gwenhywfar-config.in") CONFIG_FILES="$CONFIG_FILES gwenhywfar-config.in" ;; "gwenhywfar.pc") CONFIG_FILES="$CONFIG_FILES gwenhywfar.pc" ;; "gwenhywfar-config.cmake") CONFIG_FILES="$CONFIG_FILES gwenhywfar-config.cmake" ;; "gwenhywfar-config-version.cmake") CONFIG_FILES="$CONFIG_FILES gwenhywfar-config-version.cmake" ;; "gwenhywfar.spec") CONFIG_FILES="$CONFIG_FILES gwenhywfar.spec" ;; "gwenhywfar.iss") CONFIG_FILES="$CONFIG_FILES gwenhywfar.iss" ;; "checks/Makefile") CONFIG_FILES="$CONFIG_FILES checks/Makefile" ;; "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "doc/dialog/Makefile") CONFIG_FILES="$CONFIG_FILES doc/dialog/Makefile" ;; "doc/dialog/images/Makefile") CONFIG_FILES="$CONFIG_FILES doc/dialog/images/Makefile" ;; "doc/inherit/Makefile") CONFIG_FILES="$CONFIG_FILES doc/inherit/Makefile" ;; "doc/plugindescr.xsd") CONFIG_FILES="$CONFIG_FILES doc/plugindescr.xsd" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/types.h") CONFIG_FILES="$CONFIG_FILES src/types.h" ;; "src/ressource.rc") CONFIG_FILES="$CONFIG_FILES src/ressource.rc" ;; "src/version.h") CONFIG_FILES="$CONFIG_FILES src/version.h" ;; "src/base/Makefile") CONFIG_FILES="$CONFIG_FILES src/base/Makefile" ;; "src/crypt3/Makefile") CONFIG_FILES="$CONFIG_FILES src/crypt3/Makefile" ;; "src/cryptmsg/Makefile") CONFIG_FILES="$CONFIG_FILES src/cryptmsg/Makefile" ;; "src/crypttoken/Makefile") CONFIG_FILES="$CONFIG_FILES src/crypttoken/Makefile" ;; "src/gui/Makefile") CONFIG_FILES="$CONFIG_FILES src/gui/Makefile" ;; "src/sio/Makefile") CONFIG_FILES="$CONFIG_FILES src/sio/Makefile" ;; "src/html/Makefile") CONFIG_FILES="$CONFIG_FILES src/html/Makefile" ;; "src/os/Makefile") CONFIG_FILES="$CONFIG_FILES src/os/Makefile" ;; "src/os/posix/Makefile") CONFIG_FILES="$CONFIG_FILES src/os/posix/Makefile" ;; "src/os/posix/system.h") CONFIG_FILES="$CONFIG_FILES src/os/posix/system.h" ;; "src/os/windows/Makefile") CONFIG_FILES="$CONFIG_FILES src/os/windows/Makefile" ;; "src/os/windows/system.h") CONFIG_FILES="$CONFIG_FILES src/os/windows/system.h" ;; "src/parser/Makefile") CONFIG_FILES="$CONFIG_FILES src/parser/Makefile" ;; "src/gparser/Makefile") CONFIG_FILES="$CONFIG_FILES src/gparser/Makefile" ;; "src/sar/Makefile") CONFIG_FILES="$CONFIG_FILES src/sar/Makefile" ;; "plugins/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/Makefile" ;; "plugins/dbio/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/dbio/Makefile" ;; "plugins/dbio/csv/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/dbio/csv/Makefile" ;; "plugins/dbio/csv/csv.xml") CONFIG_FILES="$CONFIG_FILES plugins/dbio/csv/csv.xml" ;; "plugins/dbio/csv/ressource.rc") CONFIG_FILES="$CONFIG_FILES plugins/dbio/csv/ressource.rc" ;; "plugins/dbio/olddb/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/dbio/olddb/Makefile" ;; "plugins/dbio/olddb/olddb.xml") CONFIG_FILES="$CONFIG_FILES plugins/dbio/olddb/olddb.xml" ;; "plugins/dbio/olddb/ressource.rc") CONFIG_FILES="$CONFIG_FILES plugins/dbio/olddb/ressource.rc" ;; "plugins/dbio/xmldb/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/dbio/xmldb/Makefile" ;; "plugins/dbio/xmldb/xmldb.xml") CONFIG_FILES="$CONFIG_FILES plugins/dbio/xmldb/xmldb.xml" ;; "plugins/dbio/xmldb/ressource.rc") CONFIG_FILES="$CONFIG_FILES plugins/dbio/xmldb/ressource.rc" ;; "plugins/ct/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/ct/Makefile" ;; "plugins/ct/ohbci/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/ct/ohbci/Makefile" ;; "plugins/ct/ohbci/ohbci.xml") CONFIG_FILES="$CONFIG_FILES plugins/ct/ohbci/ohbci.xml" ;; "plugins/ct/ohbci/ressource.rc") CONFIG_FILES="$CONFIG_FILES plugins/ct/ohbci/ressource.rc" ;; "plugins/configmgr/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/configmgr/Makefile" ;; "plugins/configmgr/dir/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/configmgr/dir/Makefile" ;; "plugins/configmgr/dir/dir.xml") CONFIG_FILES="$CONFIG_FILES plugins/configmgr/dir/dir.xml" ;; "tools/Makefile") CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;; "tools/xmlmerge/Makefile") CONFIG_FILES="$CONFIG_FILES tools/xmlmerge/Makefile" ;; "tools/typemaker/Makefile") CONFIG_FILES="$CONFIG_FILES tools/typemaker/Makefile" ;; "tools/typemaker2/Makefile") CONFIG_FILES="$CONFIG_FILES tools/typemaker2/Makefile" ;; "tools/typemaker2/types/Makefile") CONFIG_FILES="$CONFIG_FILES tools/typemaker2/types/Makefile" ;; "tools/typemaker2/types/c/Makefile") CONFIG_FILES="$CONFIG_FILES tools/typemaker2/types/c/Makefile" ;; "tools/gcttool/Makefile") CONFIG_FILES="$CONFIG_FILES tools/gcttool/Makefile" ;; "tools/gsa/Makefile") CONFIG_FILES="$CONFIG_FILES tools/gsa/Makefile" ;; "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; "gui/Makefile") CONFIG_FILES="$CONFIG_FILES gui/Makefile" ;; "gui/cpp/Makefile") CONFIG_FILES="$CONFIG_FILES gui/cpp/Makefile" ;; "gui/qt4/Makefile") CONFIG_FILES="$CONFIG_FILES gui/qt4/Makefile" ;; "gui/qt4/gwengui-qt4.pc") CONFIG_FILES="$CONFIG_FILES gui/qt4/gwengui-qt4.pc" ;; "gui/qt4/gwengui-qt4-config.cmake") CONFIG_FILES="$CONFIG_FILES gui/qt4/gwengui-qt4-config.cmake" ;; "gui/qt4/gwengui-qt4-config-version.cmake") CONFIG_FILES="$CONFIG_FILES gui/qt4/gwengui-qt4-config-version.cmake" ;; "gui/fox16/Makefile") CONFIG_FILES="$CONFIG_FILES gui/fox16/Makefile" ;; "gui/fox16/gwengui-fox16.pc") CONFIG_FILES="$CONFIG_FILES gui/fox16/gwengui-fox16.pc" ;; "gui/gtk2/Makefile") CONFIG_FILES="$CONFIG_FILES gui/gtk2/Makefile" ;; "gui/gtk2/gwengui-gtk2.pc") CONFIG_FILES="$CONFIG_FILES gui/gtk2/gwengui-gtk2.pc" ;; "gui/cocoa/Makefile") CONFIG_FILES="$CONFIG_FILES gui/cocoa/Makefile" ;; "gui/testdialogs/Makefile") CONFIG_FILES="$CONFIG_FILES gui/testdialogs/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="CXX RC " # ### BEGIN LIBTOOL CONFIG # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Assembler program. AS=$lt_AS # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # How to create reloadable object files. reload_flag=$lt_reload_flag_CXX reload_cmds=$lt_reload_cmds_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: RC # The linker used to build libraries. LD=$lt_LD_RC # How to create reloadable object files. reload_flag=$lt_reload_flag_RC reload_cmds=$lt_reload_cmds_RC # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_RC # A language specific compiler. CC=$lt_compiler_RC # Is the compiler the GNU compiler? with_gcc=$GCC_RC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_RC # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_RC # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_RC # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_RC # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_RC # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_RC archive_expsym_cmds=$lt_archive_expsym_cmds_RC # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_RC module_expsym_cmds=$lt_module_expsym_cmds_RC # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_RC # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_RC # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_RC # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_RC # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_RC # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_RC # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_RC # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_RC # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_RC # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_RC # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_RC # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_RC # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_RC # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_RC # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_RC # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_RC # Specify filename containing input files. file_list_spec=$lt_file_list_spec_RC # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_RC # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_RC # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_RC postdep_objects=$lt_postdep_objects_RC predeps=$lt_predeps_RC postdeps=$lt_postdeps_RC # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_RC # ### END LIBTOOL TAG CONFIG: RC _LT_EOF ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi ###------------------------------------------------------------------------- # # create header directory, make symlinks # HEADER_DIRS="src src/base src/crypt3 src/cryptmsg src/crypttoken src/sio src/os src/os/${GWEN_OS} src/gui src/html" HEADER_DIRS="${HEADER_DIRS} src/parser src/gparser src/sar" lprefix="${srcdir}" lprefix=`( cd ${lprefix} ; pwd )` rm -Rf gwenhywfar4 2>/dev/null mkdir -p gwenhywfar4/gwenhywfar for d in ${HEADER_DIRS}; do hfiles=`( cd "${srcdir}/${d}" && ls *.h 2>/dev/null )` for f in ${hfiles}; do case ${f} in *_l.h | *_p.h) ;; *) ln -s "${lprefix}/${d}/${f}" "gwenhywfar4/gwenhywfar/${f}" ;; esac done done #ln -s "${lprefix}/src/os/$OS_TYPE/system.h" "gwenhywfar4/gwenhywfar/system.h" 2>/dev/null # cpp # rm -Rf gwenhywfar4/gwen-gui-cpp 2>/dev/null mkdir -p gwenhywfar4/gwen-gui-cpp for d in gui/cpp; do hfiles=`( cd "${srcdir}/${d}" && ls *.hpp *.h 2>/dev/null )` for f in ${hfiles}; do case ${f} in *_l.hpp | *_p.hpp) ;; *) ln -s "${lprefix}/${d}/${f}" "gwenhywfar4/gwen-gui-cpp/${f}" ;; esac done done # qt4 # rm -Rf gwenhywfar4/gwen-gui-qt4 2>/dev/null mkdir -p gwenhywfar4/gwen-gui-qt4 for d in gui/qt4; do hfiles=`( cd "${srcdir}/${d}" && ls *.hpp *.h 2>/dev/null )` for f in ${hfiles}; do case ${f} in *_l.hpp | *_p.hpp | qt4_gui_*.hpp) ;; *) ln -s "${lprefix}/${d}/${f}" "gwenhywfar4/gwen-gui-qt4/${f}" ;; esac done done # fox16 # rm -Rf gwenhywfar4/gwen-gui-fox16 2>/dev/null mkdir -p gwenhywfar4/gwen-gui-fox16 for d in gui/fox16; do hfiles=`( cd "${srcdir}/${d}" && ls *.hpp *.h 2>/dev/null )` for f in ${hfiles}; do case ${f} in *_l.hpp | *_p.hpp | fox16_gui_*.hpp) ;; *) ln -s "${lprefix}/${d}/${f}" "gwenhywfar4/gwen-gui-fox16/${f}" ;; esac done done # gtk2 # rm -Rf gwenhywfar4/gwen-gui-gtk2 2>/dev/null mkdir -p gwenhywfar4/gwen-gui-gtk2 for d in gui/gtk2; do hfiles=`( cd "${srcdir}/${d}" && ls *.h 2>/dev/null )` for f in ${hfiles}; do case ${f} in *_l.h | *_p.h | gtk2_gui_*.h) ;; *) ln -s "${lprefix}/${d}/${f}" "gwenhywfar4/gwen-gui-gtk2/${f}" ;; esac done done # cocoa # rm -Rf gwenhywfar4/gwen-gui-cocoa 2>/dev/null mkdir -p gwenhywfar4/gwen-gui-cocoa for d in gui/cocoa; do hfiles=`( cd "${srcdir}/${d}" && ls *.h 2>/dev/null )` for f in ${hfiles}; do case ${f} in *_l.h | *_p.h | gtk2_gui_*.h) ;; *) ln -s "${lprefix}/${d}/${f}" "gwenhywfar4/gwen-gui-cocoa/${f}" ;; esac done done ###------------------------------------------------------------------------- # # summary # echo echo "Summary" echo "=============================================" echo "Version : $GWENHYWFAR_VERSION_FULL_STRING" echo "System : $OSYSTEM" echo "Installation Folder : $prefix" echo "Local Installation Mode : $enable_local_install" echo "Plugin Installation Folder : $gwenhywfar_plugindir" echo "Plugin Search Folder : $gwenhywfar_plugin_searchdir" echo "Data Search Folder : $gwenhywfar_data_searchdir" echo "Locale Search Folder : $gwenhywfar_locale_searchdir" echo "Config Search Folder : $gwenhywfar_cfg_searchdir" echo "Buffer Default Hard Limit : $gwenhywfar_buffer_hardlimit" echo "Symbol Visibility : $visibility_supported" echo "OpenSSL Support for gct-tool : $ssl_available" echo "GUI Support : $gwenhywfar_guis" if test "$HAVE_GNUTLS_TRANSPORT_SET_ERRNO" = "yes"; then echo "GNUTLS : 1.6.1 or higher" else echo "GNUTLS : pre-1.6.1" fi echo echo "Plugins" echo "=============================================" echo " Crypt token plugins :$gwenhywfar_plugins_ct_dirs" echo " DBIO plugins :$gwenhywfar_plugins_dbio_dirs" echo " ConfigManager plugins :$gwenhywfar_plugins_cfgmgr_dirs" echo echo "You can now use the command 'make' (or on *BSD 'gmake') to " echo "build Gwenhywfar." echo gwenhywfar-4.15.2beta/tools/0000755000175000017500000000000012643267240012767 500000000000000gwenhywfar-4.15.2beta/tools/gcttool/0000755000175000017500000000000012643267240014442 500000000000000gwenhywfar-4.15.2beta/tools/gcttool/cttest.c0000644000175000017500000003734612364015347016050 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: main.c 1107 2007-01-07 21:17:05Z martin $ begin : Tue May 03 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "src/base/i18n_l.h" #ifdef OS_WIN32 # define DIRSEP "\\" #else # define DIRSEP "/" #endif #ifdef HAVE_I18N # include # include #endif #define GCT_LOGDOMAIN "GCT" //#define DEBUG_GCT_TOOL int signWithNew(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *ttype; const char *tname; GWEN_PLUGIN_MANAGER *pm; GWEN_PLUGIN *pl; GWEN_CRYPT_TOKEN *ct; unsigned int cid; int rv; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "contextId", /* name */ 0, /* minnum */ 1, /* maxnum */ "i", /* short option */ "id", /* long option */ "Context id (0 for any)", /* short description */ "Context id (0 for any)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "ttype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } cid=GWEN_DB_GetIntValue(db, "contextId", 0, 0); ttype=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); assert(ttype); tname=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); /* get crypt token */ pm=GWEN_PluginManager_FindPluginManager("ct"); if (pm==0) { DBG_ERROR(0, "Plugin manager not found"); return 3; } pl=GWEN_PluginManager_GetPlugin(pm, ttype); if (pl==0) { DBG_ERROR(0, "Plugin not found"); return 3; } DBG_INFO(0, "Plugin found"); ct=GWEN_Crypt_Token_Plugin_CreateToken(pl, tname); if (ct==0) { DBG_ERROR(0, "Could not create crypt token"); return 3; } if (GWEN_DB_GetIntValue(dbArgs, "forcePin", 0, 0)) GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_FORCE_PIN_ENTRY); /* open crypt token for use */ rv=GWEN_Crypt_Token_Open(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not open token"); return 3; } else { uint8_t clearText[20]={ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14 }; uint8_t signature[256]; uint32_t signLen; GWEN_CRYPT_PADDALGO *algo; algo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_Iso9796_1A4); signLen=sizeof(signature); rv=GWEN_Crypt_Token_Sign(ct, 0x81, /* local sign key */ algo, clearText, 20, signature, &signLen, NULL, 0); if (rv) { DBG_ERROR(0, "Could not sign data (%d)", rv); return 3; } fprintf(stderr, "Signature is:\n"); GWEN_Text_DumpString((const char*) signature, signLen, 2); rv=GWEN_Crypt_Token_Verify(ct, 0x81, algo, clearText, 20, signature, signLen, 0, 0); if (rv) { DBG_ERROR(0, "Could not verify data (%d)", rv); return 3; } fprintf(stderr, "Signature is ok.\n"); } /* close crypt token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not close token"); return 3; } return 0; } int cryptWithNew(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *ttype; const char *tname; GWEN_PLUGIN_MANAGER *pm; GWEN_PLUGIN *pl; GWEN_CRYPT_TOKEN *ct; unsigned int cid; int rv; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "contextId", /* name */ 0, /* minnum */ 1, /* maxnum */ "i", /* short option */ "id", /* long option */ "Context id (0 for any)", /* short description */ "Context id (0 for any)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "ttype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } cid=GWEN_DB_GetIntValue(db, "contextId", 0, 0); ttype=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); assert(ttype); tname=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); /* get crypt token */ pm=GWEN_PluginManager_FindPluginManager("ct"); if (pm==0) { DBG_ERROR(0, "Plugin manager not found"); return 3; } pl=GWEN_PluginManager_GetPlugin(pm, ttype); if (pl==0) { DBG_ERROR(0, "Plugin not found"); return 3; } DBG_INFO(0, "Plugin found"); ct=GWEN_Crypt_Token_Plugin_CreateToken(pl, tname); if (ct==0) { DBG_ERROR(0, "Could not create crypt token"); return 3; } if (GWEN_DB_GetIntValue(dbArgs, "forcePin", 0, 0)) GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_FORCE_PIN_ENTRY); /* open crypt token for use */ rv=GWEN_Crypt_Token_Open(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not open token"); return 3; } else { uint8_t clearText[16]={ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 }; uint8_t encrypted[128]; uint32_t elen; uint8_t decrypted[128]; uint32_t dlen; GWEN_CRYPT_PADDALGO *algo; algo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_LeftZero); elen=sizeof(encrypted); rv=GWEN_Crypt_Token_Encipher(ct, 0x86, algo, clearText, 16, encrypted, &elen, 0); if (rv) { DBG_ERROR(0, "Could not encipher data (%d)", rv); return 3; } fprintf(stderr, "Encrypted data is:\n"); GWEN_Text_DumpString((const char*) encrypted, elen, 2); dlen=sizeof(decrypted); rv=GWEN_Crypt_Token_Decipher(ct, 0x86, algo, encrypted, elen, decrypted, &dlen, 0); if (rv) { DBG_ERROR(0, "Could not decipher data (%d)", rv); return 3; } if (memcmp(clearText, decrypted, dlen)) { DBG_ERROR(0, "Deciphered data does not equal clear text(%d)", rv); return 3; } fprintf(stderr, "Deciphered data is ok.\n"); } /* close crypt token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not close token"); return 3; } return 0; } int main(int argc, char **argv) { GWEN_DB_NODE *db; const char *cmd; int rv; int err; GWEN_GUI *gui; const char *localedir; GWEN_STRINGLIST *slist; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "cfgfile", /* name */ 0, /* minnum */ 1, /* maxnum */ "C", /* short option */ "cfgfile", /* long option */ "Specify the configuration file", /* short description */ "Specify the configuration file" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "forcePin", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "forcepin", /* long option */ "force pin entry", /* short description */ "force pin entry even if the error counter is not zero" }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; err=GWEN_Init(); if (err) { fprintf(stderr, "Could not initialize Gwenhywfar.\n"); return 2; } gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); slist = GWEN_PathManager_GetPaths(GWEN_PM_LIBNAME, GWEN_PM_LOCALEDIR); assert(GWEN_StringList_Count(slist) > 0); localedir = GWEN_StringList_FirstString(slist); #ifdef HAVE_I18N setlocale(LC_ALL,""); if (bindtextdomain(PACKAGE, localedir)==0) fprintf(stderr, "Error binding locale\n"); #endif GWEN_StringList_free(slist); GWEN_Logger_Open(GCT_LOGDOMAIN, "gct-tool", 0, GWEN_LoggerType_Console, GWEN_LoggerFacility_User); #ifdef DEBUG_GCT_TOOL GWEN_Logger_SetLevel(GCT_LOGDOMAIN, GWEN_LoggerLevel_Info); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Debug); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Info); #else GWEN_Logger_SetLevel(GCT_LOGDOMAIN, GWEN_LoggerLevel_Warning); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Warning); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Warning); #endif #ifdef GCT_IS_EXPERIMENTAL fprintf(stderr, "\n"); fprintf(stderr, "\n"); fprintf(stderr, "=================== WARNING ===================\n"); fprintf(stderr, "This tool is still EXPERIMENTAL !!!\n"); fprintf(stderr, "Please DON'T USE it with your daily key files !\n"); fprintf(stderr, "===============================================\n"); fprintf(stderr, "\n"); fprintf(stderr, "\n"); #endif db=GWEN_DB_Group_new("arguments"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM | GWEN_ARGS_MODE_STOP_AT_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments main\n"); return -1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); GWEN_Buffer_AppendString(ubuf, I18N("Usage: ")); GWEN_Buffer_AppendString(ubuf, argv[0]); GWEN_Buffer_AppendString(ubuf, I18N(" [GLOBAL OPTIONS] COMMAND " "[LOCAL OPTIONS]\n")); GWEN_Buffer_AppendString(ubuf, I18N("\nGlobal Options:\n")); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } GWEN_Buffer_AppendString(ubuf, I18N("\nCommands:\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" create:\n" " This command creates a crypt token" "\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" showuser:\n" " Display user data stored on the " "token\n\n")); fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } if (rv) { argc-=rv-1; argv+=rv-1; } cmd=GWEN_DB_GetCharValue(db, "params", 0, 0); if (!cmd) { fprintf(stderr, "ERROR: Command needed.\n"); return 1; } if (strcasecmp(cmd, "sign")==0) { rv=signWithNew(db, argc, argv); } else if (strcasecmp(cmd, "crypt")==0) { rv=cryptWithNew(db, argc, argv); } else { fprintf(stderr, "ERROR: Unknown command \"%s\".\n", cmd); rv=1; } err=GWEN_Fini(); if (err) { fprintf(stderr, "WARNING: Could not deinitialize Gwenhywfar.\n"); } return rv; } gwenhywfar-4.15.2beta/tools/gcttool/setsignseq.c0000644000175000017500000001215212364015347016713 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: create.c 892 2005-11-03 00:20:45Z aquamaniac $ begin : Tue May 03 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #include int setSignSeq(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *ttype; const char *tname; GWEN_CRYPT_TOKEN *ct; unsigned int keyId; unsigned int seq; int rv; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "keyId", /* name */ 1, /* minnum */ 1, /* maxnum */ "k", /* short option */ "key", /* long option */ "Key id (0 for any)", /* short description */ "Key id (0 for any)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "seq", /* name */ 1, /* minnum */ 1, /* maxnum */ "s", /* short option */ "seq", /* long option */ "New sequence counter value", /* short description */ "New sequence counter value" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "ttype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } keyId=GWEN_DB_GetIntValue(db, "keyId", 0, 0); seq=GWEN_DB_GetIntValue(db, "seq", 0, 0); ttype=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); assert(ttype); tname=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); /* get crypt token */ ct=getCryptToken(ttype, tname); if (ct==0) return 3; if (GWEN_DB_GetIntValue(dbArgs, "forcePin", 0, 0)) GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_FORCE_PIN_ENTRY); /* open crypt token for use */ rv=GWEN_Crypt_Token_Open(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not open token"); return 3; } else { const GWEN_CRYPT_TOKEN_KEYINFO *ki; ki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, GWEN_CRYPT_TOKEN_KEYFLAGS_HASSIGNCOUNTER, 0); if (ki) { GWEN_CRYPT_TOKEN_KEYINFO *nki; nki=GWEN_Crypt_Token_KeyInfo_dup(ki); GWEN_Crypt_Token_KeyInfo_SetSignCounter(nki, seq); rv=GWEN_Crypt_Token_SetKeyInfo(ct, keyId, nki, 0); GWEN_Crypt_Token_KeyInfo_free(nki); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Unable to set sign counter (%d)", rv); return 4; } } } /* close crypt token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not close token"); return 3; } return 0; } gwenhywfar-4.15.2beta/tools/gcttool/main.c0000644000175000017500000001726512364015347015464 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2005-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /*#define GCT_IS_EXPERIMENTAL #define DEBUG_GCT_TOOL */ #include #include #include #include "globals.h" #ifdef OS_WIN32 # define DIRSEP "\\" #else # define DIRSEP "/" #endif #ifdef HAVE_I18N # include # include #endif #ifdef HAVE_OPENSSL # include # include # include # include #endif #ifdef HAVE_OPENSSL int getKeyDataFromTextOpenSSL(GWEN_GUI *gui, const char *password, unsigned char *buffer, unsigned int bsize) { DES_cblock left, right; int i; if (bsize!=16) { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer must be exact 16 bytes in length"); return -1; } DES_string_to_2keys(password, &left, &right); for (i=0; i<8; i++) *(buffer++)=left[i]; for (i=0; i<8; i++) *(buffer++)=right[i]; return 0; } #endif GWEN_CRYPT_TOKEN *getCryptToken(const char *ttype, const char *tname) { GWEN_PLUGIN_MANAGER *pm; GWEN_PLUGIN *pl; GWEN_CRYPT_TOKEN *ct; /* get crypt token */ pm=GWEN_PluginManager_FindPluginManager("ct"); if (pm==0) { DBG_ERROR(0, "Plugin manager not found"); return NULL; } pl=GWEN_PluginManager_GetPlugin(pm, ttype); if (pl==0) { DBG_ERROR(0, "Plugin not found"); fprintf(stderr, "%s", I18N("The plugin could not be found.\n" "Please make sure that you have the following " "packages installed (at least on Debian/Ubuntu):\n" "- libchipcard-plugins-libgwenhywfar (for chipcards)\n" "- libaqbanking-plugins-libgwenhywfar\n")); return NULL; } DBG_INFO(0, "Plugin found"); ct=GWEN_Crypt_Token_Plugin_CreateToken(pl, tname); if (ct==0) { DBG_ERROR(0, "Could not create crypt token"); return NULL; } return ct; } int main(int argc, char **argv) { GWEN_DB_NODE *db; const char *cmd; int rv; int err; GWEN_GUI *gui; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "cfgfile", /* name */ 0, /* minnum */ 1, /* maxnum */ "C", /* short option */ "cfgfile", /* long option */ "Specify the configuration file", /* short description */ "Specify the configuration file" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "forcePin", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "forcepin", /* long option */ "force pin entry", /* short description */ "force pin entry even if the error counter is not zero" }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; err=GWEN_Init(); if (err) { fprintf(stderr, "Could not initialize Gwenhywfar.\n"); return 2; } gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); #ifdef HAVE_OPENSSL /* for conversion purposes */ SSL_load_error_strings(); SSL_library_init(); GWEN_Gui_SetKeyDataFromTextOpenSslFn(gui, getKeyDataFromTextOpenSSL); #endif GWEN_Logger_Open(GCT_LOGDOMAIN, "gct-tool", 0, GWEN_LoggerType_Console, GWEN_LoggerFacility_User); GWEN_Logger_SetLevel(GCT_LOGDOMAIN, GWEN_LoggerLevel_Warning); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Warning); #ifdef GCT_IS_EXPERIMENTAL fprintf(stderr, "\n"); fprintf(stderr, "\n"); fprintf(stderr, "=================== WARNING ===================\n"); fprintf(stderr, "This tool is still EXPERIMENTAL !!!\n"); fprintf(stderr, "Please DON'T USE it with your daily key files !\n"); fprintf(stderr, "===============================================\n"); fprintf(stderr, "\n"); fprintf(stderr, "\n"); #endif db=GWEN_DB_Group_new("arguments"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM | GWEN_ARGS_MODE_STOP_AT_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments main\n"); return -1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); GWEN_Buffer_AppendString(ubuf, I18N("Usage: ")); GWEN_Buffer_AppendString(ubuf, argv[0]); GWEN_Buffer_AppendString(ubuf, I18N(" [GLOBAL OPTIONS] COMMAND " "[LOCAL OPTIONS]\n")); GWEN_Buffer_AppendString(ubuf, I18N("\nGlobal Options:\n")); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } GWEN_Buffer_AppendString(ubuf, I18N("\nCommands:\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" create:\n" " This command creates a crypt token" "\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" showuser:\n" " Display user data stored on the " "token\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" showkey:\n" " Display key info stored on the " "token\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" update:\n" " Update Crypt Token to newer version (e.g. OpenHBCI key" "files)\n\n")); fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } if (rv) { argc-=rv-1; argv+=rv-1; } cmd=GWEN_DB_GetCharValue(db, "params", 0, 0); if (!cmd) { fprintf(stderr, "ERROR: Command needed.\n"); return 1; } if (strcasecmp(cmd, "create")==0) { rv=createToken(db, argc, argv); } else if (strcasecmp(cmd, "showuser")==0) { rv=showUser(db, argc, argv); } else if (strcasecmp(cmd, "showkey")==0) { rv=showKey(db, argc, argv); } else if (strcasecmp(cmd, "genkey")==0) { rv=genKey(db, argc, argv); } else if (strcasecmp(cmd, "activatekey")==0) { rv=activateKey(db, argc, argv); } else if (strcasecmp(cmd, "update")==0) { rv=updateToken(db, argc, argv); } else if (strcasecmp(cmd, "setsignseq")==0) { rv=setSignSeq(db, argc, argv); } else if (strcasecmp(cmd, "changepin")==0) { rv=changePin(db, argc, argv); } else if (strcasecmp(cmd, "setkey")==0) { rv=setKey(db, argc, argv); } else if (strcasecmp(cmd, "hashTree")==0) { rv=hashTree(db, argc, argv); } else if (strcasecmp(cmd, "checkTree")==0) { rv=checkTree(db, argc, argv); } else { fprintf(stderr, "ERROR: Unknown command \"%s\".\n", cmd); rv=1; } err=GWEN_Fini(); if (err) { fprintf(stderr, "WARNING: Could not deinitialize Gwenhywfar.\n"); } return rv; } gwenhywfar-4.15.2beta/tools/gcttool/checktree.c0000644000175000017500000000556512364015347016475 00000000000000/*************************************************************************** begin : Tue Jun 01 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #include #include #include #include #include int checkTree(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *folder; GWEN_MDIGEST *md; int rv; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "folder", /* name */ 1, /* minnum */ 1, /* maxnum */ "d", /* short option */ "dir", /* long option */ "Specify folder to check", /* short description */ "Specify folder to check" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } folder=GWEN_DB_GetCharValue(db, "folder", 0, NULL); assert(folder); /* check hash list */ md=GWEN_MDigest_Rmd160_new(); rv=GWEN_MDigest_CheckFileTree(md, folder, "checksums.rmd", 0, 0); if (rv<0) { fprintf(stderr, "ERROR: Integrity check failed"); GWEN_MDigest_free(md); return 2; } GWEN_MDigest_free(md); fprintf(stdout, "All files found (passed)\n"); return 0; } gwenhywfar-4.15.2beta/tools/gcttool/changepin.c0000644000175000017500000000776512364015347016500 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: create.c 892 2005-11-03 00:20:45Z aquamaniac $ begin : Tue May 03 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #include int changePin(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *ttype; const char *tname; GWEN_CRYPT_TOKEN *ct; int rv; int admin; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "ttype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, "admin", 0, 1, "a", "admin", "Change the admin pin instead of the access pin", "Change the admin pin instead of the access pin" }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } ttype=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); assert(ttype); tname=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); admin=GWEN_DB_GetIntValue(db, "admin", 0, 0); /* get crypt token */ ct=getCryptToken(ttype, tname); if (ct==0) return 3; if (GWEN_DB_GetIntValue(dbArgs, "forcePin", 0, 0)) GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_FORCE_PIN_ENTRY); /* open crypt token for use */ rv=GWEN_Crypt_Token_Open(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not open token"); return 3; } /* change pin */ rv=GWEN_Crypt_Token_ChangePin(ct, admin, 0); if (rv) { DBG_ERROR(0, "Could not change pin"); return 3; } /* close crypt token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not close token"); return 3; } fprintf(stderr, "Crypt Token updated.\n"); return 0; } gwenhywfar-4.15.2beta/tools/gcttool/Makefile.in0000644000175000017500000006515012634022416016430 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = gct-tool$(EXEEXT) @IS_WINDOWS_TRUE@am__append_1 = $(PROG_LIBRARIES) noinst_PROGRAMS = cttest$(EXEEXT) @IF_HAVE_OPENSSL_TRUE@am__append_2 = $(ssl_libraries) $(ssl_lib) subdir = tools/gcttool DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) am_cttest_OBJECTS = cttest.$(OBJEXT) cttest_OBJECTS = $(am_cttest_OBJECTS) cttest_DEPENDENCIES = \ $(top_builddir)/src/$(gwenhywfar_internal_libname) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_gct_tool_OBJECTS = activatekey.$(OBJEXT) changepin.$(OBJEXT) \ create.$(OBJEXT) genkey.$(OBJEXT) showkey.$(OBJEXT) \ showuser.$(OBJEXT) update.$(OBJEXT) setsignseq.$(OBJEXT) \ setkey.$(OBJEXT) hashtree.$(OBJEXT) checktree.$(OBJEXT) \ main.$(OBJEXT) gct_tool_OBJECTS = $(am_gct_tool_OBJECTS) am__DEPENDENCIES_1 = @IS_WINDOWS_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) @IF_HAVE_OPENSSL_TRUE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1) \ @IF_HAVE_OPENSSL_TRUE@ $(am__DEPENDENCIES_1) gct_tool_DEPENDENCIES = \ $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) gct_tool_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(gct_tool_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(cttest_SOURCES) $(gct_tool_SOURCES) DIST_SOURCES = $(cttest_SOURCES) $(gct_tool_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = -I$(top_builddir) -I$(top_srcdir) -I$(gwenhywfar_symlinkdir) $(ssl_includes) noinst_HEADERS = \ globals.h gct_tool_SOURCES = \ activatekey.c \ changepin.c \ create.c \ genkey.c \ showkey.c \ showuser.c \ update.c \ setsignseq.c \ setkey.c \ hashtree.c \ checktree.c \ main.c gct_tool_LDADD = $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(am__append_1) $(am__append_2) @IS_WINDOWS_TRUE@gct_tool_LDFLAGS = -mconsole cttest_SOURCES = cttest.c cttest_LDADD = $(top_builddir)/src/$(gwenhywfar_internal_libname) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tools/gcttool/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/gcttool/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list cttest$(EXEEXT): $(cttest_OBJECTS) $(cttest_DEPENDENCIES) $(EXTRA_cttest_DEPENDENCIES) @rm -f cttest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(cttest_OBJECTS) $(cttest_LDADD) $(LIBS) gct-tool$(EXEEXT): $(gct_tool_OBJECTS) $(gct_tool_DEPENDENCIES) $(EXTRA_gct_tool_DEPENDENCIES) @rm -f gct-tool$(EXEEXT) $(AM_V_CCLD)$(gct_tool_LINK) $(gct_tool_OBJECTS) $(gct_tool_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/activatekey.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/changepin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/checktree.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/create.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cttest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/genkey.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hashtree.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setkey.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setsignseq.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/showkey.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/showuser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/update.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool \ clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS sources: for f in $(gct_tool_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/tools/gcttool/showkey.c0000644000175000017500000002034712364015347016224 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: create.c 892 2005-11-03 00:20:45Z aquamaniac $ begin : Tue May 03 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #include int showKey(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *ttype; const char *tname; GWEN_CRYPT_TOKEN *ct; unsigned int keyId; int shown=0; int rv; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "keyId", /* name */ 0, /* minnum */ 1, /* maxnum */ "k", /* short option */ "key", /* long option */ "Key id (0 for any)", /* short description */ "Key id (0 for any)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "ttype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } keyId=GWEN_DB_GetIntValue(db, "keyId", 0, 0); ttype=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); assert(ttype); tname=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); /* get crypt token */ ct=getCryptToken(ttype, tname); if (ct==0) return 3; if (GWEN_DB_GetIntValue(dbArgs, "forcePin", 0, 0)) GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_FORCE_PIN_ENTRY); /* open crypt token for use */ rv=GWEN_Crypt_Token_Open(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not open token"); return 3; } else { uint32_t keyIds[64]; uint32_t keyCount; uint32_t i; keyCount=64; rv=GWEN_Crypt_Token_GetKeyIdList(ct, keyIds, &keyCount, 0); if (rv<0) { DBG_ERROR(0, "Error filling key list"); GWEN_Crypt_Token_Close(ct, 0, 0); return 3; } for (i=0; i>=1; } } fprintf(stdout, "Modulus : (%d bits)\n", nbits); while(len) { uint32_t rl; rl=(len>16)?16:len; GWEN_Text_ToHexBuffer((const char*)p, rl, tbuf, 2, ' ', 0); fprintf(stdout, " %s\n", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); p+=rl; len-=rl; } GWEN_Buffer_free(tbuf); } if (flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT) { GWEN_BUFFER *tbuf; const char *p; uint32_t len; tbuf=GWEN_Buffer_new(0, 256, 0, 1); fprintf(stdout, "Exponent : \n"); p=(const char*)GWEN_Crypt_Token_KeyInfo_GetExponentData(ki); len=GWEN_Crypt_Token_KeyInfo_GetExponentLen(ki); while(len) { uint32_t rl; rl=(len>16)?16:len; GWEN_Text_ToHexBuffer(p, rl, tbuf, 2, ' ', 0); fprintf(stdout, " %s\n", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); p+=rl; len-=rl; } GWEN_Buffer_free(tbuf); } shown++; } } } } /* close crypt token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not close token"); return 3; } if (!shown) { if (keyId==0) { DBG_ERROR(0, "No key found"); } else { DBG_ERROR(0, "Key %u not found", keyId); } return 1; } return 0; } gwenhywfar-4.15.2beta/tools/gcttool/activatekey.c0000644000175000017500000001066512364015347017046 00000000000000/*************************************************************************** begin : Thu Jun 24 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #include int activateKey(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *ttype; const char *tname; GWEN_CRYPT_TOKEN *ct; unsigned int keyId; int rv; const char *s; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "keyId", /* name */ 1, /* minnum */ 1, /* maxnum */ "k", /* short option */ "key", /* long option */ "Key id", /* short description */ "Key id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "ttype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } keyId=GWEN_DB_GetIntValue(db, "keyId", 0, 0); if (keyId==0) { DBG_ERROR(0, "Key Id must not be zero"); return 1; } s=GWEN_DB_GetCharValue(db, "algo", 0, "rsa"); if (!s) { DBG_ERROR(0, "Algo id missing"); return 1; } ttype=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); assert(ttype); tname=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); /* get crypt token */ ct=getCryptToken(ttype, tname); if (ct==0) return 3; if (GWEN_DB_GetIntValue(dbArgs, "forcePin", 0, 0)) GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_FORCE_PIN_ENTRY); /* open crypt token for use */ rv=GWEN_Crypt_Token_Open(ct, 1, 0); if (rv) { DBG_ERROR(0, "Could not open token"); return 3; } else { /* activate key */ rv=GWEN_Crypt_Token_ActivateKey(ct, keyId, 0); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Error activating key (%d)", rv); return 3; } } /* close crypt token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not close token"); return 3; } fprintf(stderr, "Key %d successfully activated.\n", keyId); return 0; } gwenhywfar-4.15.2beta/tools/gcttool/create.c0000644000175000017500000000747712364015347016007 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: create.c 892 2005-11-03 00:20:45Z aquamaniac $ begin : Tue May 03 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include int createToken(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *ttype; const char *tname; GWEN_PLUGIN_MANAGER *pm; GWEN_PLUGIN *pl; GWEN_CRYPT_TOKEN *ct; int rv; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "ttype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } ttype=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); assert(ttype); tname=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); /* get crypt token */ pm=GWEN_PluginManager_FindPluginManager(GWEN_CRYPT_TOKEN_PLUGIN_TYPENAME); if (pm==0) { DBG_ERROR(0, "Plugin manager not found"); return 3; } pl=GWEN_PluginManager_GetPlugin(pm, ttype); if (pl==0) { DBG_ERROR(0, "Plugin not found"); return 3; } DBG_ERROR(0, "Plugin found"); ct=GWEN_Crypt_Token_Plugin_CreateToken(pl, tname); if (ct==0) { DBG_ERROR(0, "Could not create crypt token"); return 3; } /* create crypt token */ rv=GWEN_Crypt_Token_Create(ct, 0); if (rv) { DBG_ERROR(0, "Could not create token"); return 3; } /* close crypt token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not close token"); return 3; } return 0; } gwenhywfar-4.15.2beta/tools/gcttool/Makefile.am0000644000175000017500000000151512364015347016417 00000000000000INCLUDES= -I$(top_builddir) -I$(top_srcdir) -I$(gwenhywfar_symlinkdir) $(ssl_includes) #EXTRA_DIST= bin_PROGRAMS=gct-tool noinst_HEADERS=\ globals.h gct_tool_SOURCES=\ activatekey.c \ changepin.c \ create.c \ genkey.c \ showkey.c \ showuser.c \ update.c \ setsignseq.c \ setkey.c \ hashtree.c \ checktree.c \ main.c gct_tool_LDADD=$(top_builddir)/src/$(gwenhywfar_internal_libname) if IS_WINDOWS gct_tool_LDFLAGS=-mconsole gct_tool_LDADD+=$(PROG_LIBRARIES) endif noinst_PROGRAMS=cttest cttest_SOURCES=cttest.c cttest_LDADD=$(top_builddir)/src/$(gwenhywfar_internal_libname) if IF_HAVE_OPENSSL gct_tool_LDADD+=$(ssl_libraries) $(ssl_lib) endif sources: for f in $(gct_tool_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-4.15.2beta/tools/gcttool/showuser.c0000644000175000017500000001453412364015347016413 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: create.c 892 2005-11-03 00:20:45Z aquamaniac $ begin : Tue May 03 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include int showUser(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *ttype; const char *tname; GWEN_CRYPT_TOKEN *ct; unsigned int cid; int shown=0; int rv; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "contextId", /* name */ 0, /* minnum */ 1, /* maxnum */ "i", /* short option */ "id", /* long option */ "Context id (0 for any)", /* short description */ "Context id (0 for any)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "ttype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } cid=GWEN_DB_GetIntValue(db, "contextId", 0, 0); ttype=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); assert(ttype); tname=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); /* get crypt token */ ct=getCryptToken(ttype, tname); if (ct==0) return 3; if (GWEN_DB_GetIntValue(dbArgs, "forcePin", 0, 0)) GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_FORCE_PIN_ENTRY); /* open crypt token for use */ rv=GWEN_Crypt_Token_Open(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not open token"); return 3; } else { uint32_t ctxIds[32]; uint32_t ctxCount; uint32_t i; ctxCount=32; rv=GWEN_Crypt_Token_GetContextIdList(ct, ctxIds, &ctxCount, 0); if (rv<0) { DBG_ERROR(0, "Error filling context list"); GWEN_Crypt_Token_Close(ct, 0, 0); return 3; } for (i=0; i #endif #include "globals.h" #include #include #include #include int genKey(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *ttype; const char *tname; GWEN_CRYPT_TOKEN *ct; unsigned int keyId; unsigned int keySize; GWEN_CRYPT_CRYPTALGOID algoId; int rv; const char *s; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "keyId", /* name */ 1, /* minnum */ 1, /* maxnum */ "k", /* short option */ "key", /* long option */ "Key id", /* short description */ "Key id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "ttype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "algo", /* name */ 0, /* minnum */ 1, /* maxnum */ "a", /* short option */ "algo", /* long option */ "Specify the algorithm", /* short description */ "Specify the algorithm" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "keysize", /* name */ 0, /* minnum */ 1, /* maxnum */ "s", /* short option */ "keysize", /* long option */ "Key size in bytes", /* short description */ "Key size in bytes" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "exp65537", /* name */ 0, /* minnum */ 1, /* maxnum */ "e", /* short option */ "exp65537", /* long option */ "Use default exponent of 65537", /* short description */ "Use default exponent of 65537" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } keyId=GWEN_DB_GetIntValue(db, "keyId", 0, 0); if (keyId==0) { DBG_ERROR(0, "Key Id must not be zero"); return 1; } s=GWEN_DB_GetCharValue(db, "algo", 0, "rsa"); if (!s) { DBG_ERROR(0, "Algo id missing"); return 1; } algoId=GWEN_Crypt_CryptAlgoId_fromString(s); if (algoId==GWEN_Crypt_CryptAlgoId_Unknown) { DBG_ERROR(0, "Bad algo id [%s]", s); return 1; } keySize=GWEN_DB_GetIntValue(db, "keySize", 0, 96); if (keySize==0) { DBG_ERROR(0, "Invalid key size %d", keySize); return 1; } ttype=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); assert(ttype); tname=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); /* get crypt token */ ct=getCryptToken(ttype, tname); if (ct==0) return 3; if (GWEN_DB_GetIntValue(dbArgs, "forcePin", 0, 0)) GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_FORCE_PIN_ENTRY); if (GWEN_DB_GetIntValue(db, "exp65537", 0, 0)) GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_EXP_65537); /* open crypt token for use */ rv=GWEN_Crypt_Token_Open(ct, 1, 0); if (rv) { DBG_ERROR(0, "Could not open token"); return 3; } else { GWEN_CRYPT_CRYPTALGO *algo; algo=GWEN_Crypt_CryptAlgo_new(algoId, GWEN_Crypt_CryptMode_None); GWEN_Crypt_CryptAlgo_SetChunkSize(algo, keySize); /* generate key */ rv=GWEN_Crypt_Token_GenerateKey(ct, keyId, algo, 0); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Error generating key (%d)", rv); GWEN_Crypt_CryptAlgo_free(algo); return 3; } } /* close crypt token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not close token"); return 3; } fprintf(stderr, "Key %d (%s, %d bytes) successfully generated.\n", keyId, GWEN_Crypt_CryptAlgoId_toString(algoId), keySize); return 0; } gwenhywfar-4.15.2beta/tools/gcttool/setkey.c0000644000175000017500000001523712364015347016041 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: create.c 892 2005-11-03 00:20:45Z aquamaniac $ begin : Tue May 03 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #include int setKey(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *ttype; const char *tname; GWEN_CRYPT_TOKEN *ct; unsigned int keyId; int seq; int keyNum; int keyVer; int rv; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "keyId", /* name */ 1, /* minnum */ 1, /* maxnum */ "k", /* short option */ "key", /* long option */ "Key id (0 for any)", /* short description */ "Key id (0 for any)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "keyNum", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "keynum", /* long option */ "Key number", /* short description */ "Key number" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "keyVer", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "keyver", /* long option */ "Key version", /* short description */ "Key version" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "seq", /* name */ 0, /* minnum */ 1, /* maxnum */ "s", /* short option */ "seq", /* long option */ "New sequence counter value", /* short description */ "New sequence counter value" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "ttype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } keyId=GWEN_DB_GetIntValue(db, "keyId", 0, 0); seq=GWEN_DB_GetIntValue(db, "seq", 0, -1); keyNum=GWEN_DB_GetIntValue(db, "keyNum", 0, -1); keyVer=GWEN_DB_GetIntValue(db, "keyVer", 0, -1); ttype=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); assert(ttype); tname=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); /* get crypt token */ ct=getCryptToken(ttype, tname); if (ct==0) return 3; if (GWEN_DB_GetIntValue(dbArgs, "forcePin", 0, 0)) GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_FORCE_PIN_ENTRY); /* open crypt token for use */ rv=GWEN_Crypt_Token_Open(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not open token"); return 3; } else { const GWEN_CRYPT_TOKEN_KEYINFO *ki; ki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, GWEN_CRYPT_TOKEN_KEYFLAGS_HASSIGNCOUNTER, 0); if (ki) { GWEN_CRYPT_TOKEN_KEYINFO *nki; nki=GWEN_Crypt_Token_KeyInfo_dup(ki); if (seq!=-1) { GWEN_Crypt_Token_KeyInfo_SetSignCounter(nki, seq); fprintf(stderr, "Setting signature counter\n"); } if (keyNum!=-1) { fprintf(stderr, "Setting key number\n"); GWEN_Crypt_Token_KeyInfo_AddFlags(nki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER); GWEN_Crypt_Token_KeyInfo_SetKeyNumber(nki, keyNum); } if (keyVer!=-1) { fprintf(stderr, "Setting key version\n"); GWEN_Crypt_Token_KeyInfo_AddFlags(nki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION); GWEN_Crypt_Token_KeyInfo_SetKeyVersion(nki, keyVer); } /* store key info */ rv=GWEN_Crypt_Token_SetKeyInfo(ct, keyId, nki, 0); GWEN_Crypt_Token_KeyInfo_free(nki); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Unable to set modify key information (%d)", rv); return 4; } } } /* close crypt token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not close token"); return 3; } return 0; } gwenhywfar-4.15.2beta/tools/gcttool/hashtree.c0000644000175000017500000000676412364015347016345 00000000000000/*************************************************************************** begin : Tue Jun 01 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #include #include int hashTree(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *folder; GWEN_MDIGEST *md; GWEN_STRINGLIST *sl; GWEN_STRINGLISTENTRY *se; GWEN_BUFFER *tbuf; FILE *f; int rv; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "folder", /* name */ 1, /* minnum */ 1, /* maxnum */ "d", /* short option */ "dir", /* long option */ "Specify folder to hash", /* short description */ "Specify folder to hash" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } folder=GWEN_DB_GetCharValue(db, "folder", 0, NULL); assert(folder); /* hash */ sl=GWEN_StringList_new(); md=GWEN_MDigest_Rmd160_new(); rv=GWEN_MDigest_HashFileTree(md, folder, "checksums.rmd", sl); if (rv<0) { fprintf(stderr, "ERROR: Could not hash folder tree (%d)\n", rv); return 2; } /* write checksum file */ tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, folder); GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S "checksums.rmd"); f=fopen(GWEN_Buffer_GetStart(tbuf), "w+"); if (f==NULL) { fprintf(stderr, "ERROR: Could not open output file: %s\n", strerror(errno)); return 2; } se=GWEN_StringList_FirstEntry(sl); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) fprintf(f, "%s\n", s); se=GWEN_StringListEntry_Next(se); } GWEN_MDigest_free(md); GWEN_StringList_free(sl); if (fclose(f)) { fprintf(stderr, "ERROR: Could not close output file: %s\n", strerror(errno)); return 2; } GWEN_Buffer_free(tbuf); return 0; } gwenhywfar-4.15.2beta/tools/gcttool/globals.h0000644000175000017500000000330212364015347016153 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: globals.h 923 2005-11-19 03:35:10Z aquamaniac $ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GCTTOOL_GLOBALS_H #define GCTTOOL_GLOBALS_H #include #include #include #include #include #include #include #include #include #include #include #define GCT_LOGDOMAIN "gcttool" #include "src/base/i18n_l.h" GWEN_CRYPT_TOKEN *getCryptToken(const char *ttype, const char *tname); int createToken(GWEN_DB_NODE *dbArgs, int argc, char **argv); int showUser(GWEN_DB_NODE *dbArgs, int argc, char **argv); int showKey(GWEN_DB_NODE *dbArgs, int argc, char **argv); int genKey(GWEN_DB_NODE *dbArgs, int argc, char **argv); int activateKey(GWEN_DB_NODE *dbArgs, int argc, char **argv); int updateToken(GWEN_DB_NODE *dbArgs, int argc, char **argv); int setSignSeq(GWEN_DB_NODE *dbArgs, int argc, char **argv); int setKey(GWEN_DB_NODE *dbArgs, int argc, char **argv); int changePin(GWEN_DB_NODE *dbArgs, int argc, char **argv); int hashTree(GWEN_DB_NODE *dbArgs, int argc, char **argv); int checkTree(GWEN_DB_NODE *dbArgs, int argc, char **argv); #endif /* GCTTOOL_GLOBALS_H */ gwenhywfar-4.15.2beta/tools/gcttool/update.c0000644000175000017500000000731012364015347016010 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: create.c 892 2005-11-03 00:20:45Z aquamaniac $ begin : Tue May 03 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #include int updateToken(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *ttype; const char *tname; GWEN_CRYPT_TOKEN *ct; int rv; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "ttype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } ttype=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); assert(ttype); tname=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); /* get crypt token */ ct=getCryptToken(ttype, tname); if (ct==0) return 3; if (GWEN_DB_GetIntValue(dbArgs, "forcePin", 0, 0)) GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_FORCE_PIN_ENTRY); /* allow update of key file */ GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_ALLOW_UPDATE); /* open crypt token for use */ rv=GWEN_Crypt_Token_Open(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not open token"); return 3; } /* close crypt token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not close token"); return 3; } fprintf(stderr, "Crypt Token updated.\n"); return 0; } gwenhywfar-4.15.2beta/tools/typemaker/0000755000175000017500000000000012643267240014770 500000000000000gwenhywfar-4.15.2beta/tools/typemaker/test.xml0000644000175000017500000000631112364015347016411 00000000000000
gwenhywfar/types.h
gwenhywfar/gwentime.h
gwenhywfar/stringlist.h
aqbanking/value.h
This group contains information about the local account. This is the code of the local bank (i.e. your bank). This group contains information about the remote account.

This group contains information which differ between backends.

Some of this information might not even be supported by every backends.

gwenhywfar-4.15.2beta/tools/typemaker/phc.c0000644000175000017500000003202112364015347015623 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "args.h" #include "typemaker_p.h" #include #include #include #include #include #include #include #include #include #include #include #include #include int write_h_elem_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { const char *name; const char *typ; const char *mode; GWEN_XMLNODE *tnode; const char *tmode; int err; int isPtr; name=GWEN_XMLNode_GetProperty(node, "name", 0); if (!name) { DBG_ERROR(0, "No name for element"); return -1; } typ=GWEN_XMLNode_GetProperty(node, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } mode=GWEN_XMLNode_GetProperty(node, "mode", "single"); tnode=get_typedef(node, typ); if (tnode) tmode=GWEN_XMLNode_GetProperty(tnode, "mode", "single"); else tmode=mode; isPtr=atoi(get_property(node, "ptr", "0")); err=GWEN_SyncIo_WriteString(sio, " "); if (err) { DBG_ERROR_ERR(0, err); return -1;} if (strcasecmp(tmode, "enum")!=0) GWEN_SyncIo_WriteString(sio, typ); else { GWEN_BUFFER *tid; const char *s; tid=GWEN_Buffer_new(0, 64, 0, 1); s=get_struct_property(node, "id", 0); assert(s); GWEN_Buffer_AppendString(tid, s); GWEN_Buffer_AppendString(tid, "_"); GWEN_Buffer_AppendString(tid, typ); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tid)); GWEN_Buffer_free(tid); } GWEN_SyncIo_WriteString(sio, " "); if (isPtr) { GWEN_SyncIo_WriteString(sio, "*"); } GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ";"); return 0; } int write_h_func_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { const char *name; const char *typ; const char *styp; styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } name=GWEN_XMLNode_GetProperty(node, "name", 0); if (!name) { DBG_ERROR(0, "No name for function"); return -1; } typ=GWEN_XMLNode_GetProperty(node, "type", 0); if (!typ) { DBG_ERROR(0, "No type for function"); return -1; } GWEN_SyncIo_WriteString(sio, " "); /* rettype name; */ GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, "_"); GWEN_SyncIo_WriteString(sio, typ); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ";"); return 0; } int write_h_struct_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { GWEN_XMLNODE *n; const char *id; const char *acc; const char *prefix; id=get_struct_property(node, "id", 0); if (!id) { DBG_ERROR(0, "No id for struct"); return -1; } prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix for struct"); return -1; } if (write_h_enums(args, node, sio, "private")) { DBG_ERROR(0, "Error writing enum types"); return -1; } if (write_h_funcs(args, node, sio, "private")) { DBG_ERROR(0, "Error writing function types"); return -1; } acc=get_struct_property(node, "access", "public"); if (strcasecmp(acc, "private")==0) { GWEN_SyncIo_WriteString(sio, "typedef struct "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, ";"); } GWEN_SyncIo_WriteString(sio, "struct "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " {"); if (get_struct_property(node, "inherit", 0)) { GWEN_SyncIo_WriteString(sio, " GWEN_INHERIT_ELEMENT("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, ")"); } if (get_struct_property(node, "list", 0)) { GWEN_SyncIo_WriteString(sio, " GWEN_LIST_ELEMENT("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, ")"); } GWEN_SyncIo_WriteLine(sio, " int _usage;"); GWEN_SyncIo_WriteLine(sio, " int _modified;"); GWEN_SyncIo_WriteLine(sio, ""); n=GWEN_XMLNode_GetFirstTag(node); while(n) { int rv; rv=write_hp_group_c(args, n, sio); if (rv) return rv; n=GWEN_XMLNode_GetNextTag(n); } /* while */ GWEN_SyncIo_WriteLine(sio, "};"); return 0; } int write_hp_group_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { int rv; if (GWEN_XMLNode_GetType(node)==GWEN_XMLNodeTypeTag) { if (strcasecmp(GWEN_XMLNode_GetData(node), "type")==0) return write_h_struct_c(args, node, sio); else if (strcasecmp(GWEN_XMLNode_GetData(node), "elem")==0) { return write_h_elem_c(args, node, sio); } else if (strcasecmp(GWEN_XMLNode_GetData(node), "func")==0) { return write_h_func_c(args, node, sio); } else if (strcasecmp(GWEN_XMLNode_GetData(node), "header")==0) { return write_h_header(args, node, sio, "header"); } else if (strcasecmp(GWEN_XMLNode_GetData(node), "group")==0) { GWEN_XMLNODE *n; n=GWEN_XMLNode_GetFirstTag(node); while(n) { rv=write_hp_group_c(args, n, sio); if (rv) return rv; n=GWEN_XMLNode_GetNextTag(n); } /* while */ } /* if group */ } return 0; } int write_hp_file_c(ARGUMENTS *args, GWEN_XMLNODE *node) { int rv; const char *f; GWEN_BUFFER *fname; GWEN_BUFFER *hbuf; const char *s; GWEN_SYNCIO *sio; int err; const char *nacc; const char *constAcc; const char *constName; const char *fromDbAcc; const char *fromDbName; const char *dupAcc; const char *dupName; const char *id; const char *prefix; id=get_struct_property(node, "id", 0); if (!id) { DBG_ERROR(0, "No id for struct"); return -1; } prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix for struct"); return -1; } f=get_struct_property(node, "filename", 0); if (!f) { DBG_ERROR(0, "No filename given"); return -1; } nacc=get_struct_property(node, "access", "public"); constAcc=get_struct_property(node, "constructor-access", nacc); constName=get_struct_property(node, "constructor-name", 0); fromDbAcc=get_struct_property(node, "fromdb-access", nacc); fromDbName=get_struct_property(node, "fromdb-name", 0); dupAcc=get_struct_property(node, "dup-access", nacc); dupName=get_struct_property(node, "fromdb-name", 0); fname=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(fname, f); GWEN_Buffer_AppendString(fname, "_p.h"); sio=GWEN_SyncIo_File_new(GWEN_Buffer_GetStart(fname), GWEN_SyncIo_File_CreationMode_CreateAlways); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE | GWEN_SYNCIO_FILE_FLAGS_UREAD | GWEN_SYNCIO_FILE_FLAGS_UWRITE | GWEN_SYNCIO_FILE_FLAGS_GREAD | GWEN_SYNCIO_FILE_FLAGS_GWRITE); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_ERROR(0, "open(%s): %s", GWEN_Buffer_GetStart(fname), strerror(errno)); GWEN_Buffer_free(fname); GWEN_SyncIo_free(sio); return -1; } GWEN_Buffer_free(fname); /* Insert the auto-generation warning */ GWEN_SyncIo_WriteString(sio, "/* This file is auto-generated from \""); GWEN_SyncIo_WriteString(sio, f); GWEN_SyncIo_WriteLine(sio, ".xml\" by the typemaker"); GWEN_SyncIo_WriteLine(sio, " tool of Gwenhywfar. "); GWEN_SyncIo_WriteLine(sio, " Do not edit this file -- all changes will be lost! */"); hbuf=GWEN_Buffer_new(0, 256, 0, 1); s=f; while(*s) { GWEN_Buffer_AppendByte(hbuf, toupper(*s)); s++; } GWEN_Buffer_AppendString(hbuf, "_P_H"); GWEN_SyncIo_WriteString(sio, "#ifndef "); GWEN_SyncIo_WriteLine(sio, GWEN_Buffer_GetStart(hbuf)); GWEN_SyncIo_WriteString(sio, "#define "); GWEN_SyncIo_WriteLine(sio, GWEN_Buffer_GetStart(hbuf)); GWEN_SyncIo_WriteLine(sio, ""); if (strcasecmp(get_struct_property(node, "inherit", ""), "private")==0) { GWEN_SyncIo_WriteLine(sio, "#include "); } if (strcasecmp(get_struct_property(node, "list", ""), "private")==0) { GWEN_SyncIo_WriteLine(sio, "#include "); } if (strcasecmp(get_struct_property(node, "list2", ""), "private")==0) { GWEN_SyncIo_WriteLine(sio, "#include "); } fname=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(fname, f); GWEN_Buffer_AppendString(fname, "_l.h"); GWEN_SyncIo_WriteString(sio, "#include \""); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(fname)); GWEN_SyncIo_WriteLine(sio, "\""); GWEN_Buffer_free(fname); GWEN_SyncIo_WriteLine(sio, ""); rv=write_h_struct_c(args, node, sio); if (rv) { GWEN_Buffer_free(hbuf); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_WriteLine(sio, ""); /* include private functions */ if (strcasecmp(constAcc, "private")==0) { GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, " *"); GWEN_SyncIo_WriteString(sio, prefix); if (constName) GWEN_SyncIo_WriteString(sio, constName); else GWEN_SyncIo_WriteString(sio, "_new"); GWEN_SyncIo_WriteLine(sio, "(void);"); } /* FromDb */ if (strcasecmp(fromDbAcc, "private")==0) { GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, " *"); GWEN_SyncIo_WriteString(sio, prefix); if (fromDbName) GWEN_SyncIo_WriteString(sio, fromDbName); else GWEN_SyncIo_WriteString(sio, "_fromDb"); GWEN_SyncIo_WriteLine(sio, "(GWEN_DB_NODE *db);"); } /* dup */ if (strcasecmp(dupAcc, "private")==0) { GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, " *"); GWEN_SyncIo_WriteString(sio, prefix); if (dupName) GWEN_SyncIo_WriteString(sio, dupName); else GWEN_SyncIo_WriteString(sio, "_dup"); GWEN_SyncIo_WriteString(sio, "(const "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, "*st);"); } if (strcasecmp(nacc, "private")==0) { GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_free("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st);"); GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Attach("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st);"); /* ReadDb */ GWEN_SyncIo_WriteString(sio, "int "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_ReadDb("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st, GWEN_DB_NODE *db);"); /* ToDb */ GWEN_SyncIo_WriteString(sio, "int "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_toDb(const "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, "*st, GWEN_DB_NODE *db);"); GWEN_SyncIo_WriteString(sio, "int "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_IsModified(const "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st);"); GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_SetModified("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st, int i);"); } rv=write_h_setget_c(args, node, sio, "private"); if (rv) { GWEN_Buffer_free(hbuf); GWEN_SyncIo_free(sio); return rv; } /* write trailing endif */ err=GWEN_SyncIo_WriteLine(sio, ""); if (err) { DBG_ERROR_ERR(0, err); GWEN_Buffer_free(hbuf); return -1; } err=GWEN_SyncIo_WriteString(sio, "#endif /* "); if (err) { DBG_ERROR_ERR(0, err); GWEN_Buffer_free(hbuf); return -1; } err=GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(hbuf)); if (err) { DBG_ERROR_ERR(0, err); GWEN_Buffer_free(hbuf); return -1; } err=GWEN_SyncIo_WriteLine(sio, " */"); if (err) { DBG_ERROR_ERR(0, err); GWEN_Buffer_free(hbuf); return -1; } err=GWEN_SyncIo_Disconnect(sio); if (err) { DBG_ERROR_ERR(0, err); GWEN_SyncIo_free(sio); GWEN_Buffer_free(hbuf); return -1; } GWEN_Buffer_free(hbuf); return 0; } int write_hp_files_c(ARGUMENTS *args, GWEN_XMLNODE *node) { GWEN_XMLNODE *n; int rv; n=GWEN_XMLNode_FindFirstTag(node, "type", 0, 0); while (n) { rv=write_hp_file_c(args, n); if (rv) return rv; n=GWEN_XMLNode_FindNextTag(n, "type", 0, 0); } return 0; } gwenhywfar-4.15.2beta/tools/typemaker/code_c.c0000644000175000017500000026171112416477055016305 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "args.h" #include "typemaker_p.h" #include #include #include #include #include #include #include #include #include #include #include #include int write_c_enums(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { GWEN_XMLNODE *n; n=GWEN_XMLNode_FindFirstTag(node, "subtypes", 0, 0); if (n) n=GWEN_XMLNode_FindFirstTag(n, "type", "mode", "enum"); if (n) { GWEN_BUFFER *tprefix; GWEN_BUFFER *tid; uint32_t ppos; uint32_t tpos; const char *s; tprefix=GWEN_Buffer_new(0, 64, 0, 1); tid=GWEN_Buffer_new(0, 64, 0, 1); s=get_struct_property(node, "prefix", 0); assert(s); GWEN_Buffer_AppendString(tprefix, s); GWEN_Buffer_AppendString(tprefix, "_"); ppos=GWEN_Buffer_GetPos(tprefix); s=get_struct_property(node, "id", 0); assert(s); GWEN_Buffer_AppendString(tid, s); GWEN_Buffer_AppendString(tid, "_"); tpos=GWEN_Buffer_GetPos(tid); while(n) { GWEN_XMLNODE *nn; s=GWEN_XMLNode_GetProperty(n, "access", "public"); s=GWEN_XMLNode_GetProperty(n, "id", 0); assert(s); GWEN_Buffer_AppendString(tid, s); s=GWEN_XMLNode_GetProperty(n, "prefix", 0); assert(s); GWEN_Buffer_AppendString(tprefix, s); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tid)); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tprefix)); GWEN_SyncIo_WriteLine(sio, "_fromString(const char *s) {"); GWEN_SyncIo_WriteLine(sio, " if (s) {"); nn=GWEN_XMLNode_FindFirstTag(n, "values", 0, 0); if (nn) nn=GWEN_XMLNode_FindFirstTag(nn, "value", 0, 0); if (nn) { uint32_t vpos; int first=1; vpos=GWEN_Buffer_GetPos(tprefix); while(nn) { GWEN_XMLNODE *nnn; nnn=GWEN_XMLNode_GetFirstData(nn); if (!nnn) { DBG_ERROR(0, "No values in enum description for \"%s\"", GWEN_Buffer_GetStart(tid)); GWEN_Buffer_free(tid); GWEN_Buffer_free(tprefix); return -1; } if (first) GWEN_SyncIo_WriteString(sio, " if (strcasecmp(s, \""); else GWEN_SyncIo_WriteString(sio, " else if (strcasecmp(s, \""); s=GWEN_XMLNode_GetData(nnn); assert(s); GWEN_SyncIo_WriteString(sio, s); GWEN_SyncIo_WriteLine(sio, "\")==0)"); GWEN_SyncIo_WriteString(sio, " return "); GWEN_Buffer_AppendByte(tprefix, toupper(*s)); GWEN_Buffer_AppendString(tprefix, s+1); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tprefix)); GWEN_SyncIo_WriteLine(sio, ";"); GWEN_Buffer_Crop(tprefix, 0, vpos); GWEN_Buffer_SetPos(tprefix, vpos); first=0; nn=GWEN_XMLNode_FindNextTag(nn, "value", 0, 0); } } GWEN_SyncIo_WriteLine(sio, " }"); GWEN_SyncIo_WriteString(sio, " return "); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tprefix)); GWEN_SyncIo_WriteLine(sio, "Unknown;"); GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, "const char *"); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tprefix)); GWEN_SyncIo_WriteString(sio, "_toString("); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tid)); GWEN_SyncIo_WriteLine(sio, " v) {"); GWEN_SyncIo_WriteLine(sio, " switch(v) {"); nn=GWEN_XMLNode_FindFirstTag(n, "values", 0, 0); if (nn) nn=GWEN_XMLNode_FindFirstTag(nn, "value", 0, 0); if (nn) { uint32_t vpos; vpos=GWEN_Buffer_GetPos(tprefix); while(nn) { GWEN_XMLNODE *nnn; nnn=GWEN_XMLNode_GetFirstData(nn); if (!nnn) { DBG_ERROR(0, "No values in enum description for \"%s\"", GWEN_Buffer_GetStart(tid)); GWEN_Buffer_free(tid); GWEN_Buffer_free(tprefix); return -1; } s=GWEN_XMLNode_GetData(nnn); assert(s); GWEN_Buffer_AppendByte(tprefix, toupper(*s)); GWEN_Buffer_AppendString(tprefix, s+1); GWEN_SyncIo_WriteString(sio, " case "); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tprefix)); GWEN_SyncIo_WriteLine(sio, ":"); GWEN_SyncIo_WriteString(sio, " return \""); GWEN_SyncIo_WriteString(sio, s); GWEN_SyncIo_WriteLine(sio, "\";"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_Buffer_Crop(tprefix, 0, vpos); GWEN_Buffer_SetPos(tprefix, vpos); nn=GWEN_XMLNode_FindNextTag(nn, "value", 0, 0); } } GWEN_SyncIo_WriteLine(sio, " default:"); GWEN_SyncIo_WriteLine(sio, " return \"unknown\";"); GWEN_SyncIo_WriteLine(sio, " } /* switch */"); GWEN_SyncIo_WriteLine(sio, "} "); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); GWEN_Buffer_Crop(tprefix, 0, ppos); GWEN_Buffer_Crop(tid, 0, tpos); n=GWEN_XMLNode_FindNextTag(n, "type", "mode", "enum"); } /* while n */ GWEN_Buffer_free(tid); GWEN_Buffer_free(tprefix); } /* if enum types found */ return 0; } int write_code_freeElem_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio){ const char *typ; const char *name; int doCopy; int takeOver; int err; if (atoi(get_property(node, "ptr", "0"))==0) return 0; doCopy=atoi(GWEN_XMLNode_GetProperty(node, "copy", "1")); takeOver=atoi(GWEN_XMLNode_GetProperty(node, "takeOver", "0")); if (!doCopy && !takeOver) return 0; typ=GWEN_XMLNode_GetProperty(node, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } name=GWEN_XMLNode_GetProperty(node, "name", 0); if (!name) { DBG_ERROR(0, "No type for element"); return -1; } err=GWEN_SyncIo_WriteString(sio, " if (st->"); if (err) { DBG_ERROR_ERR(0, err); return -1;} err=GWEN_SyncIo_WriteString(sio, name); if (err) { DBG_ERROR_ERR(0, err); return -1;} err=GWEN_SyncIo_WriteLine(sio, ")"); if (err) { DBG_ERROR_ERR(0, err); return -1;} if (strcmp(typ, "char")==0) { /* we can handle chars */ err=GWEN_SyncIo_WriteString(sio, " free(st->"); if (err) { DBG_ERROR_ERR(0, err); return -1;} err=GWEN_SyncIo_WriteString(sio, name); if (err) { DBG_ERROR_ERR(0, err); return -1;} err=GWEN_SyncIo_WriteLine(sio, ");"); if (err) { DBG_ERROR_ERR(0, err); return -1;} return 0; } else { const char *fname; fname=get_function_name(node, "free"); if (fname) { err=GWEN_SyncIo_WriteString(sio, " "); if (err) { DBG_ERROR_ERR(0, err); return -1;} err=GWEN_SyncIo_WriteString(sio, fname); if (err) { DBG_ERROR_ERR(0, err); return -1;} err=GWEN_SyncIo_WriteString(sio, "(st->"); if (err) { DBG_ERROR_ERR(0, err); return -1;} err=GWEN_SyncIo_WriteString(sio, name); if (err) { DBG_ERROR_ERR(0, err); return -1;} err=GWEN_SyncIo_WriteLine(sio, ");"); if (err) { DBG_ERROR_ERR(0, err); return -1;} return 0; } } DBG_ERROR(0, "Unknown \"free\" function for type \"%s\"", typ); return -1; } int write_code_freeElems_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio){ if (GWEN_XMLNode_GetType(node)==GWEN_XMLNodeTypeTag) { GWEN_XMLNODE *n; n=GWEN_XMLNode_GetFirstTag(node); while(n) { int rv; if (strcasecmp(GWEN_XMLNode_GetData(n), "group")==0) rv=write_code_freeElems_c(args, n, sio); else if (strcasecmp(GWEN_XMLNode_GetData(n), "elem")==0) { rv=write_code_freeElem_c(args, n, sio); } else { rv=0; } if (rv) return rv; n=GWEN_XMLNode_GetNextTag(n); } /* while */ } return 0; } int write_code_dupArg_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *param){ const char *typ; const char *name; int err; typ=GWEN_XMLNode_GetProperty(node, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } name=GWEN_XMLNode_GetProperty(node, "name", 0); if (!name) { DBG_ERROR(0, "No type for element"); return -1; } if (strcmp(typ, "char")==0) { /* we can handle chars */ err=GWEN_SyncIo_WriteString(sio, "strdup("); if (err) { DBG_ERROR_ERR(0, err); return -1;} err=GWEN_SyncIo_WriteString(sio, param); if (err) { DBG_ERROR_ERR(0, err); return -1;} err=GWEN_SyncIo_WriteLine(sio, ");"); if (err) { DBG_ERROR_ERR(0, err); return -1;} return 0; } else { const char *fname; fname=get_function_name(node, "dup"); if (!fname) { DBG_ERROR(0, "No dup function set for type %s", typ); return -1; } err=GWEN_SyncIo_WriteString(sio, fname); if (err) { DBG_ERROR_ERR(0, err); return -1;} err=GWEN_SyncIo_WriteString(sio, "("); err=GWEN_SyncIo_WriteString(sio, param); if (err) { DBG_ERROR_ERR(0, err); return -1;} err=GWEN_SyncIo_WriteLine(sio, ");"); if (err) { DBG_ERROR_ERR(0, err); return -1;} return 0; } DBG_ERROR(0, "Unknown \"dup\" function for type \"%s\"", typ); return -1; } int write_code_todbArg_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { const char *btype; const char *typ; const char *name; const char *mode; int isPtr; isPtr=atoi(get_property(node, "ptr", "0")); name=GWEN_XMLNode_GetProperty(node, "name", 0); if (!name) { DBG_ERROR(0, "No name for element"); return -1; } /* "single" as opposed to "list" or "list2" */ mode=GWEN_XMLNode_GetProperty(node, "mode", "single"); if (strcasecmp(mode, "list")==0 || strcasecmp(mode, "list2")==0) /* all list modes operate on pointers */ isPtr=1; typ=GWEN_XMLNode_GetProperty(node, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } if (isPtr) { const char *fname; fname=get_function_name(node, "todb"); if (fname) { GWEN_SyncIo_WriteString(sio, " if ("); GWEN_SyncIo_WriteString(sio, fname); GWEN_SyncIo_WriteString(sio, "(st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, ", GWEN_DB_GetGroup(db, " "GWEN_DB_FLAGS_DEFAULT, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "\")))"); GWEN_SyncIo_WriteLine(sio, " return -1;"); } else { if (strcasecmp(typ, "char")==0) { GWEN_SyncIo_WriteString(sio, " if (GWEN_DB_SetCharValue(db, " "GWEN_DB_FLAGS_OVERWRITE_VARS, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "\", st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "))"); GWEN_SyncIo_WriteLine(sio, " return -1;"); } else if (strcasecmp(typ, "GWEN_STRINGLIST")==0) { GWEN_SyncIo_WriteLine(sio, " {"); GWEN_SyncIo_WriteLine(sio, " GWEN_STRINGLISTENTRY *se;"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio," GWEN_DB_DeleteVar(db, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "\");"); GWEN_SyncIo_WriteString(sio, " se=GWEN_StringList_FirstEntry(st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ");"); GWEN_SyncIo_WriteLine(sio, " while(se) {"); GWEN_SyncIo_WriteLine(sio, " const char *s;"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, " s=GWEN_StringListEntry_Data(se);"); GWEN_SyncIo_WriteLine(sio, " assert(s);"); GWEN_SyncIo_WriteString(sio, " if (GWEN_DB_SetCharValue(db, " "GWEN_DB_FLAGS_DEFAULT, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "\", s))"); GWEN_SyncIo_WriteLine(sio, " return -1;"); GWEN_SyncIo_WriteLine(sio, " se=GWEN_StringListEntry_Next(se);"); GWEN_SyncIo_WriteLine(sio, " } /* while */"); GWEN_SyncIo_WriteLine(sio, " }"); } else if (strcasecmp(mode, "list")==0) { const char *elemType; const char *elemPrefix; GWEN_XMLNODE *elemNode; /* create list code */ elemType=GWEN_XMLNode_GetProperty(node, "elemType", 0); if (!elemType) { DBG_ERROR(0, "No \"type\" for list type \"%s\"", typ); return -1; } elemNode=get_typedef(node, elemType); if (!elemNode) { DBG_ERROR(0, "Undefined type %s", elemType); return -1; } elemPrefix=GWEN_XMLNode_GetProperty(elemNode, "prefix", 0); if (!elemPrefix) { DBG_ERROR(0, "No \"prefix\" for type \"%s\" (within %s)", elemType, typ); return -1; } /* actually generate the code */ GWEN_SyncIo_WriteLine(sio, " if (1) {"); GWEN_SyncIo_WriteLine(sio, " GWEN_DB_NODE *dbT;"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemType); GWEN_SyncIo_WriteLine(sio, " *e;"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, " dbT=GWEN_DB_GetGroup(db, " "GWEN_PATH_FLAGS_CREATE_GROUP, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "\");"); GWEN_SyncIo_WriteLine(sio, " assert(dbT);"); /* e=ElemType_List_First(st->name) */ GWEN_SyncIo_WriteString(sio, " e="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteString(sio, "_List_First(st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ");"); /* while (e) */ GWEN_SyncIo_WriteLine(sio, " while(e) {"); /* handle element type */ GWEN_SyncIo_WriteString(sio, " if ("); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteString(sio, "_toDb(e, "); GWEN_SyncIo_WriteString(sio, "GWEN_DB_GetGroup(dbT, " "GWEN_PATH_FLAGS_CREATE_GROUP, \""); GWEN_SyncIo_WriteString(sio, "element"); GWEN_SyncIo_WriteLine(sio, "\")))"); GWEN_SyncIo_WriteLine(sio, " return -1;"); /* e=ElemType_List_Next(e) */ GWEN_SyncIo_WriteString(sio, " e="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_List_Next(e);"); GWEN_SyncIo_WriteLine(sio, " } /* while */"); GWEN_SyncIo_WriteLine(sio, " } /* if (1) */"); } else if (strcasecmp(mode, "list2")==0) { const char *elemType; const char *elemPrefix; GWEN_XMLNODE *elemNode; /* create list2 code */ elemType=GWEN_XMLNode_GetProperty(node, "elemType", 0); if (!elemType) { DBG_ERROR(0, "No \"type\" for list type \"%s\"", typ); return -1; } elemNode=get_typedef(node, elemType); if (!elemNode) { DBG_ERROR(0, "Undefined type %s", elemType); return -1; } elemPrefix=GWEN_XMLNode_GetProperty(elemNode, "prefix", 0); if (!elemPrefix) { DBG_ERROR(0, "No \"prefix\" for type \"%s\" (within %s)", elemType, typ); return -1; } /* actually generate the code */ GWEN_SyncIo_WriteLine(sio, " if (1) {"); GWEN_SyncIo_WriteLine(sio, " GWEN_DB_NODE *dbT;"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemType); GWEN_SyncIo_WriteLine(sio, "_LIST2_ITERATOR *it;"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, " dbT=GWEN_DB_GetGroup(db, " "GWEN_PATH_FLAGS_CREATE_GROUP, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "\");"); GWEN_SyncIo_WriteLine(sio, " assert(dbT);"); /* it=ElemType_List2_First(st->name) */ GWEN_SyncIo_WriteString(sio, " it="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteString(sio, "_List2_First(st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ");"); /* if (it) */ GWEN_SyncIo_WriteLine(sio, " if (it) {"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemType); GWEN_SyncIo_WriteLine(sio, " *e;"); GWEN_SyncIo_WriteLine(sio, ""); /* e=ElemType_List2Iterator_Data(it) */ GWEN_SyncIo_WriteString(sio, " e="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_List2Iterator_Data(it);"); GWEN_SyncIo_WriteString(sio, " assert(e);"); /* while (e) */ GWEN_SyncIo_WriteLine(sio, " while(e) {"); /* handle element type */ GWEN_SyncIo_WriteString(sio, " if ("); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteString(sio, "_toDb(e, "); GWEN_SyncIo_WriteString(sio, "GWEN_DB_GetGroup(dbT, " "GWEN_PATH_FLAGS_CREATE_GROUP, \""); GWEN_SyncIo_WriteString(sio, "element"); GWEN_SyncIo_WriteLine(sio, "\")))"); GWEN_SyncIo_WriteLine(sio, " return -1;"); /* e=ElemType_List2Iterator_Next(it) */ GWEN_SyncIo_WriteString(sio, " e="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_List2Iterator_Next(it);"); GWEN_SyncIo_WriteLine(sio, " } /* while */"); /* free iterator */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteString(sio, "_List2Iterator_free(it);"); GWEN_SyncIo_WriteLine(sio, " } /* if (it) */"); GWEN_SyncIo_WriteLine(sio, " } /* if (1) */"); } else { DBG_ERROR(0, "No toDb function for type \"%s\"", typ); return -1; } } } else { btype=get_property(node, "basetype", 0); if (!btype) { if (strcasecmp(typ, "char")==0) btype="char"; else if (strcasecmp(typ, "uint32_t")==0) btype="int"; else if (strcasecmp(typ, "GWEN_TYPE_UINT64")==0) btype="int"; else { btype=typ; } } if (strcasecmp(btype, "int")==0) { GWEN_SyncIo_WriteString(sio, " if (GWEN_DB_SetIntValue(db, " "GWEN_DB_FLAGS_OVERWRITE_VARS, \""); } else if (strcasecmp(btype, "char")==0) { GWEN_SyncIo_WriteString(sio, " if (GWEN_DB_SetCharValue(db, " "GWEN_DB_FLAGS_OVERWRITE_VARS, \""); } else { GWEN_XMLNODE *tnode; const char *tmode; tnode=get_typedef(node, typ); if (!tnode) { DBG_ERROR(0, "Undefined type %s", typ); return -1; } tmode=GWEN_XMLNode_GetProperty(tnode, "mode", "single"); if (strcasecmp(tmode, "enum")==0) { GWEN_XMLNODE *tnode; const char *tmode; tnode=get_typedef(node, typ); if (!tnode) { DBG_ERROR(0, "Undefined type %s", typ); return -1; } tmode=GWEN_XMLNode_GetProperty(tnode, "mode", "single"); if (strcasecmp(tmode, "enum")==0) { GWEN_BUFFER *tprefix; const char *s; tprefix=GWEN_Buffer_new(0, 64, 0, 1); s=get_struct_property(node, "prefix", 0); assert(s); GWEN_Buffer_AppendString(tprefix, s); GWEN_Buffer_AppendString(tprefix, "_"); s=GWEN_XMLNode_GetProperty(tnode, "prefix", 0); assert(s); GWEN_SyncIo_WriteString(sio, " if (GWEN_DB_SetCharValue(db, "); GWEN_SyncIo_WriteString(sio, "GWEN_DB_FLAGS_OVERWRITE_VARS, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "\", "); GWEN_Buffer_AppendString(tprefix, s); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tprefix)); GWEN_SyncIo_WriteString(sio, "_toString(st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, ")"); GWEN_SyncIo_WriteString(sio, ")"); GWEN_SyncIo_WriteLine(sio, ") "); GWEN_SyncIo_WriteLine(sio, " return -1;"); GWEN_Buffer_free(tprefix); return 0; } /* if enum */ else { DBG_ERROR(0, "Bad non-pointer type \"%s\" (not a base type)", typ); return -1; } } else { DBG_ERROR(0, "Bad non-pointer type \"%s\" (not a base type)", typ); return -1; } } GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "\", st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "))"); GWEN_SyncIo_WriteLine(sio, " return -1;"); } return 0; } int write_code_fromdbArg_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { const char *btype; const char *typ; const char *name; const char *mode; int isPtr; const char *defval; int isVolatile; isVolatile=atoi(GWEN_XMLNode_GetProperty(node, "volatile", "0")); if (isVolatile) /* don't save volatile data */ return 0; isPtr=atoi(get_property(node, "ptr", "0")); name=GWEN_XMLNode_GetProperty(node, "name", 0); if (!name) { DBG_ERROR(0, "No name for element"); return -1; } mode=GWEN_XMLNode_GetProperty(node, "mode", "single"); if (strcasecmp(mode, "single")!=0) /* all list modes operate on pointers */ isPtr=1; typ=GWEN_XMLNode_GetProperty(node, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } defval=get_property(node, "default", 0); if (isPtr) { const char *fname; fname=get_function_name(node, "fromdb"); if (fname) { GWEN_SyncIo_WriteString(sio, fname); GWEN_SyncIo_WriteString(sio, "(dbT)"); } else { if (strcasecmp(typ, "char")==0) { GWEN_SyncIo_WriteString(sio, "GWEN_DB_GetCharValue(db, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "\", 0, "); if (defval) { GWEN_SyncIo_WriteString(sio, "\""); GWEN_SyncIo_WriteString(sio, defval); GWEN_SyncIo_WriteString(sio, "\""); } else { GWEN_SyncIo_WriteString(sio, "0"); } GWEN_SyncIo_WriteString(sio, ")"); } else { DBG_ERROR(0, "No fromDb function for type \"%s\"", typ); return -1; } } } else { btype=get_property(node, "basetype", 0); if (!btype) { if (strcasecmp(typ, "char")==0) btype="char"; else if (strcasecmp(typ, "uint32_t")==0) btype="int"; else if (strcasecmp(typ, "GWEN_TYPE_UINT64")==0) btype="int"; else { btype=typ; } } if (strcasecmp(btype, "int")==0) { GWEN_SyncIo_WriteString(sio, "GWEN_DB_GetIntValue(db, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "\", 0, "); if (defval) { GWEN_SyncIo_WriteString(sio, defval); } else { GWEN_SyncIo_WriteString(sio, "0"); } GWEN_SyncIo_WriteString(sio, ")"); } else if (strcasecmp(btype, "char")==0) { GWEN_SyncIo_WriteString(sio, "GWEN_DB_GetCharValue(db, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "\", 0, "); if (defval) { GWEN_SyncIo_WriteString(sio, "\""); GWEN_SyncIo_WriteString(sio, defval); GWEN_SyncIo_WriteString(sio, "\""); } else { GWEN_SyncIo_WriteString(sio, "0"); } GWEN_SyncIo_WriteString(sio, ")"); } else { GWEN_XMLNODE *tnode; const char *tmode; tnode=get_typedef(node, typ); if (!tnode) { DBG_ERROR(0, "Undefined type %s", typ); return -1; } tmode=GWEN_XMLNode_GetProperty(tnode, "mode", "single"); if (strcasecmp(tmode, "enum")==0) { GWEN_BUFFER *tprefix; const char *s; tprefix=GWEN_Buffer_new(0, 64, 0, 1); s=get_struct_property(node, "prefix", 0); assert(s); GWEN_Buffer_AppendString(tprefix, s); GWEN_Buffer_AppendString(tprefix, "_"); s=GWEN_XMLNode_GetProperty(tnode, "prefix", 0); assert(s); GWEN_Buffer_AppendString(tprefix, s); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tprefix)); GWEN_SyncIo_WriteString(sio, "_fromString("); GWEN_SyncIo_WriteString(sio, "GWEN_DB_GetCharValue(db, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "\", 0, "); if (defval) { GWEN_SyncIo_WriteString(sio, "\""); GWEN_SyncIo_WriteString(sio, defval); GWEN_SyncIo_WriteString(sio, "\""); } else { GWEN_SyncIo_WriteString(sio, "0"); } GWEN_SyncIo_WriteString(sio, ")"); GWEN_SyncIo_WriteString(sio, ")"); GWEN_Buffer_free(tprefix); } /* if enum */ else { DBG_ERROR(0, "Bad non-pointer type \"%s\" (not a base type)", typ); return -1; } } } return 0; } int write_code_constrec_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio){ GWEN_XMLNODE *n; int rv; const char *prefix; const char *styp; prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } n=GWEN_XMLNode_GetFirstTag(node); while(n) { if (GWEN_XMLNode_GetType(n)==GWEN_XMLNodeTypeTag) { if (strcasecmp(GWEN_XMLNode_GetData(n), "group")==0) { rv=write_code_constrec_c(args, n, sio); if (rv) { DBG_ERROR(0, "Error in dup"); return rv; } } else if (strcasecmp(GWEN_XMLNode_GetData(n), "elem")==0) { int isPtr; const char *typ; const char *name; const char *setval; const char *mode; name=GWEN_XMLNode_GetProperty(n, "name", 0); if (!name) { DBG_ERROR(0, "No name for element"); return -1; } typ=GWEN_XMLNode_GetProperty(n, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } setval=GWEN_XMLNode_GetProperty(n, "preset", 0); isPtr=atoi(get_property(n, "ptr", "0")); mode=GWEN_XMLNode_GetProperty(n, "mode", "single"); if (strcasecmp(mode, "single")!=0) /* lists always use pointers */ isPtr=1; if (isPtr) { if (strcasecmp(typ, "GWEN_STRINGLIST")==0) { GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "=GWEN_StringList_new();"); } else if (strcasecmp(mode, "single")!=0) { int initVar; initVar=atoi(get_property(n, "init", "0")); if (initVar) { const char *fname; fname=get_function_name(n, "new"); if (!fname) { DBG_ERROR(0, "No new-function set for type %s", typ); return -1; } GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "="); GWEN_SyncIo_WriteString(sio, fname); GWEN_SyncIo_WriteLine(sio, "();"); } /* if init requested */ } /* if !single */ else { if (setval) { GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "="); GWEN_SyncIo_WriteString(sio, setval); GWEN_SyncIo_WriteLine(sio, ";"); } } } else { if (setval) { /* TODO: check for enum values */ GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "="); GWEN_SyncIo_WriteString(sio, setval); GWEN_SyncIo_WriteLine(sio, ";"); } } } else if (strcasecmp(GWEN_XMLNode_GetData(n), "func")==0) { } } n=GWEN_XMLNode_GetNextTag(n); } return 0; } int write_code_const_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio){ const char *prefix; const char *styp; const char *constName; int rv; prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } constName=get_struct_property(node, "constructor-name", 0); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, " *"); GWEN_SyncIo_WriteString(sio, prefix); if (constName && *constName) GWEN_SyncIo_WriteString(sio, constName); else GWEN_SyncIo_WriteString(sio, "_new"); GWEN_SyncIo_WriteLine(sio, "(void) {"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st;"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, " GWEN_NEW_OBJECT("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, ", st)"); GWEN_SyncIo_WriteLine(sio, " st->_usage=1;"); // add inherit functions if (get_struct_property(node, "inherit", 0)) { GWEN_SyncIo_WriteString(sio, " GWEN_INHERIT_INIT("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, ", st)"); } // add list functions if (get_struct_property(node, "list", 0)) { GWEN_SyncIo_WriteString(sio, " GWEN_LIST_INIT("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, ", st)"); } rv=write_code_constrec_c(args, node, sio); if (rv) return rv; GWEN_SyncIo_WriteLine(sio, " return st;"); GWEN_SyncIo_WriteLine(sio, "}"); return 0; } int write_code_dest_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio){ const char *prefix; const char *styp; int rv; prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_free("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st) {"); GWEN_SyncIo_WriteLine(sio, " if (st) {"); GWEN_SyncIo_WriteLine(sio, " assert(st->_usage);"); GWEN_SyncIo_WriteLine(sio, " if (--(st->_usage)==0) {"); // add inherit functions if (get_struct_property(node, "inherit", 0)) { GWEN_SyncIo_WriteString(sio, " GWEN_INHERIT_FINI("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, ", st)"); } rv=write_code_freeElems_c(args, node, sio); if (rv) { DBG_ERROR(0, "Error in freeElems"); return rv; } // add list functions if (get_struct_property(node, "list", 0)) { GWEN_SyncIo_WriteString(sio, " GWEN_LIST_FINI("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, ", st)"); } GWEN_SyncIo_WriteLine(sio, " GWEN_FREE_OBJECT(st);"); GWEN_SyncIo_WriteLine(sio, " }"); GWEN_SyncIo_WriteLine(sio, " }"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, "}"); return 0; } int write_code_setget_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio){ GWEN_XMLNODE *n; int rv; const char *prefix; const char *styp; prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } n=GWEN_XMLNode_GetFirstTag(node); while(n) { if (GWEN_XMLNode_GetType(n)==GWEN_XMLNodeTypeTag) { if (strcasecmp(GWEN_XMLNode_GetData(n), "group")==0) { rv=write_code_setget_c(args, n, sio); if (rv) { DBG_ERROR(0, "Error in setget"); return rv; } } else if (strcasecmp(GWEN_XMLNode_GetData(n), "elem")==0) { int isPtr; const char *typ; const char *name; const char *mode; GWEN_XMLNODE *tnode; const char *tmode; int isConst; int doCopy; GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); name=GWEN_XMLNode_GetProperty(n, "name", 0); if (!name) { DBG_ERROR(0, "No name for element"); return -1; } typ=GWEN_XMLNode_GetProperty(n, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } isPtr=atoi(get_property(n, "ptr", "0")); isConst=atoi(get_property(n, "const", "1")); doCopy=atoi(get_property(n, "copy", "1")); mode=GWEN_XMLNode_GetProperty(n, "mode", "single"); tnode=get_typedef(node, typ); if (tnode) tmode=GWEN_XMLNode_GetProperty(tnode, "mode", "single"); else tmode=mode; if (isPtr && (/*strcasecmp(mode, "single")==0 ||*/ isConst)) { GWEN_SyncIo_WriteString(sio, "const "); } if (strcasecmp(tmode, "enum")!=0) GWEN_SyncIo_WriteString(sio, typ); else { GWEN_BUFFER *tid; const char *s; tid=GWEN_Buffer_new(0, 64, 0, 1); s=get_struct_property(node, "id", 0); assert(s); GWEN_Buffer_AppendString(tid, s); GWEN_Buffer_AppendString(tid, "_"); GWEN_Buffer_AppendString(tid, typ); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tid)); GWEN_Buffer_free(tid); } if (isPtr) { GWEN_SyncIo_WriteString(sio, " *"); } else { GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Get"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "(const "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st) {"); GWEN_SyncIo_WriteLine(sio, " assert(st);"); GWEN_SyncIo_WriteString(sio, " return st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ";"); GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); /* write setter */ GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Set"); GWEN_SyncIo_WriteChar(sio, toupper(*name));; GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, " *st, "); if (isPtr && isConst) { GWEN_SyncIo_WriteString(sio, "const "); } if (strcasecmp(tmode, "enum")!=0) GWEN_SyncIo_WriteString(sio, typ); else { GWEN_BUFFER *tid; const char *s; tid=GWEN_Buffer_new(0, 64, 0, 1); s=get_struct_property(node, "id", 0); assert(s); GWEN_Buffer_AppendString(tid, s); GWEN_Buffer_AppendString(tid, "_"); GWEN_Buffer_AppendString(tid, typ); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tid)); GWEN_Buffer_free(tid); } if (isPtr) { GWEN_SyncIo_WriteString(sio, " *"); } else { GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteLine(sio, "d) {"); GWEN_SyncIo_WriteLine(sio, " assert(st);"); if (isPtr) { /* free old pointer if any */ rv=write_code_freeElem_c(args, n, sio); if (rv) return rv; /* copy argument if any */ if (strcasecmp(mode, "single")==0) { if (strcasecmp(typ, "char")==0) GWEN_SyncIo_WriteLine(sio, " if (d && *d)"); else GWEN_SyncIo_WriteLine(sio, " if (d)"); GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "="); if (doCopy) { rv=write_code_dupArg_c(args, n, sio, "d"); if (rv) return rv; } else { GWEN_SyncIo_WriteLine(sio, "d;"); } } else { if (doCopy) { rv=write_code_dupList_c(args, n, sio, "d"); if (rv) return rv; } else { if (isConst) { DBG_ERROR(0, "Properties: CONST but not COPY"); return -1; } GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "=d;"); } } GWEN_SyncIo_WriteLine(sio, " else"); GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "=0;"); } else { GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "=d;"); } GWEN_SyncIo_WriteLine(sio, " st->_modified=1;"); GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); if (strcasecmp(typ, "GWEN_STRINGLIST")==0) { /* special functions for string lists */ GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Add"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st, const char *d, int chk){"); GWEN_SyncIo_WriteLine(sio, " assert(st);"); GWEN_SyncIo_WriteLine(sio, " assert(d);"); GWEN_SyncIo_WriteString(sio, " if (GWEN_StringList_AppendString(st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ", d, 0, chk))"); GWEN_SyncIo_WriteLine(sio, " st->_modified=1;"); GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); /* remove */ GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Remove"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st, const char *d) {"); GWEN_SyncIo_WriteString(sio, " if (GWEN_StringList_RemoveString(st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ", d))"); GWEN_SyncIo_WriteLine(sio, " st->_modified=1;"); GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); /* clear */ GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Clear"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st) {"); GWEN_SyncIo_WriteString(sio, " if (GWEN_StringList_Count(st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ")) {"); GWEN_SyncIo_WriteString(sio, " GWEN_StringList_Clear(st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ");"); GWEN_SyncIo_WriteLine(sio, " st->_modified=1;"); GWEN_SyncIo_WriteLine(sio, " }"); GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); /* has */ GWEN_SyncIo_WriteString(sio, "int "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Has"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "(const "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st, const char *d) {"); GWEN_SyncIo_WriteString(sio, " return GWEN_StringList_HasString(st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ", d);"); GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); } } else if (strcasecmp(GWEN_XMLNode_GetData(n), "func")==0) { const char *typ; const char *name; const char *rettype; const char *defret; GWEN_XMLNODE *anode; int isPtr; int isVoid; int idx; name=GWEN_XMLNode_GetProperty(n, "name", 0); if (!name) { DBG_ERROR(0, "No name for element"); return -1; } typ=GWEN_XMLNode_GetProperty(n, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } rettype=GWEN_XMLNode_GetProperty(n, "return", 0); if (!rettype) { DBG_ERROR(0, "No return type for function"); return -1; } isPtr=atoi(get_property(n, "ptr", "0")); isVoid=(!isPtr && strcasecmp(rettype, "void")==0); defret=GWEN_XMLNode_GetProperty(n, "default", 0); if (!defret && !isVoid) { DBG_ERROR(0, "No default return value for function %s", name); return -1; } /* getter */ GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, "_"); GWEN_SyncIo_WriteString(sio, typ); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Get"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "(const "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st) {"); GWEN_SyncIo_WriteLine(sio, " assert(st);"); GWEN_SyncIo_WriteString(sio, " return st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ";"); GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); /* setter */ GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Set"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, " *st, "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, "_"); GWEN_SyncIo_WriteString(sio, typ); GWEN_SyncIo_WriteLine(sio, " d) {"); GWEN_SyncIo_WriteLine(sio, " assert(st);"); GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "=d;"); GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); /* function call */ GWEN_SyncIo_WriteString(sio, rettype); if (isPtr) GWEN_SyncIo_WriteString(sio, "*"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, " *st"); anode=GWEN_XMLNode_FindFirstTag(n, "arg", 0, 0); idx=0; while(anode) { const char *aname; const char *atype; int aisPtr; GWEN_SyncIo_WriteString(sio, ", "); aisPtr=atoi(GWEN_XMLNode_GetProperty(anode, "ptr", "0")); aname=GWEN_XMLNode_GetProperty(anode, "name", 0); if (!aname || !*aname) { DBG_ERROR(0, "No name for argument %d in function %s", idx, name); return -1; } atype=GWEN_XMLNode_GetProperty(anode, "type", 0); if (!atype || !*atype) { DBG_ERROR(0, "No type for argument %d in function %s", idx, name); return -1; } GWEN_SyncIo_WriteString(sio, atype); if (aisPtr) GWEN_SyncIo_WriteString(sio, "*"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, aname); idx++; anode=GWEN_XMLNode_FindNextTag(anode, "arg", 0, 0); } GWEN_SyncIo_WriteLine(sio, ") {"); GWEN_SyncIo_WriteLine(sio, " assert(st);"); GWEN_SyncIo_WriteString(sio, " if (st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ")"); GWEN_SyncIo_WriteString(sio, " "); if (!isVoid) GWEN_SyncIo_WriteString(sio, "return "); GWEN_SyncIo_WriteString(sio, "st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "(st"); anode=GWEN_XMLNode_FindFirstTag(n, "arg", 0, 0); while(anode) { const char *aname; GWEN_SyncIo_WriteString(sio, ", "); aname=GWEN_XMLNode_GetProperty(anode, "name", 0); GWEN_SyncIo_WriteString(sio, aname); anode=GWEN_XMLNode_FindNextTag(anode, "arg", 0, 0); } GWEN_SyncIo_WriteLine(sio, ");"); if (!isVoid) { GWEN_SyncIo_WriteString(sio, "return "); GWEN_SyncIo_WriteString(sio, defret); GWEN_SyncIo_WriteLine(sio, ";"); } GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); } } n=GWEN_XMLNode_GetNextTag(n); } return 0; } int write_code_dupList_c(ARGUMENTS *args, GWEN_XMLNODE *n, GWEN_SYNCIO *sio, const char *listName) { int isPtr; const char *typ; const char *name; const char *mode; name=GWEN_XMLNode_GetProperty(n, "name", 0); if (!name) { DBG_ERROR(0, "No name for element"); return -1; } typ=GWEN_XMLNode_GetProperty(n, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } isPtr=atoi(get_property(n, "ptr", "0")); mode=GWEN_XMLNode_GetProperty(n, "mode", "single"); if (strcasecmp(mode, "single")!=0) /* lists are always pointers */ isPtr=1; if (isPtr) { if (strcasecmp(mode, "list")==0) { const char *prefix; const char *elemType; const char *elemPrefix; GWEN_XMLNODE *elemNode; prefix=get_struct_property(n, "prefix", 0); assert(prefix); /* create list code */ elemType=GWEN_XMLNode_GetProperty(n, "elemType", 0); if (!elemType) { DBG_ERROR(0, "No \"type\" for list type \"%s\"", typ); return -1; } elemNode=get_typedef(n, elemType); if (!elemNode) { DBG_ERROR(0, "Undefined type %s", elemType); return -1; } elemPrefix=GWEN_XMLNode_GetProperty(elemNode, "prefix", 0); if (!elemPrefix) { DBG_ERROR(0, "No \"prefix\" for type \"%s\" (within %s)", elemType, typ); return -1; } /* actually generate the code */ GWEN_SyncIo_WriteString(sio, " if ("); GWEN_SyncIo_WriteString(sio, listName); GWEN_SyncIo_WriteLine(sio, ") {"); /* ELEMTYPE *e; */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemType); GWEN_SyncIo_WriteLine(sio, " *e;"); GWEN_SyncIo_WriteLine(sio, ""); /* st->LIST=LIST_new() */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, "st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_List_new();"); /* e=ElemType_List_First */ GWEN_SyncIo_WriteString(sio, " e="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteString(sio, "_List_First("); GWEN_SyncIo_WriteString(sio, listName); GWEN_SyncIo_WriteLine(sio, ");"); /* while (e) ; */ GWEN_SyncIo_WriteLine(sio, " while(e) {"); /* ELEMTYPE *ne; */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemType); GWEN_SyncIo_WriteLine(sio, " *ne;"); GWEN_SyncIo_WriteLine(sio, ""); /* ne=ElemType_dup; assert(ne); */ GWEN_SyncIo_WriteString(sio, " ne="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_dup(e);"); GWEN_SyncIo_WriteLine(sio, " assert(ne);"); /* ElemType_List_Add(ne, st->NAME); */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteString(sio, "_List_Add(ne, st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ");"); /* e=ElemType_List_Next */ GWEN_SyncIo_WriteString(sio, " e="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_List_Next(e);"); GWEN_SyncIo_WriteLine(sio, " } /* while (e) */"); GWEN_SyncIo_WriteLine(sio, " } /* if LIST */"); } else if (strcasecmp(mode, "list2")==0) { const char *prefix; const char *elemType; const char *elemPrefix; GWEN_XMLNODE *elemNode; prefix=get_struct_property(n, "prefix", 0); assert(prefix); /* create list code */ elemType=GWEN_XMLNode_GetProperty(n, "elemType", 0); if (!elemType) { DBG_ERROR(0, "No \"type\" for list type \"%s\"", typ); return -1; } elemNode=get_typedef(n, elemType); if (!elemNode) { DBG_ERROR(0, "Undefined type %s", elemType); return -1; } elemPrefix=GWEN_XMLNode_GetProperty(elemNode, "prefix", 0); if (!elemPrefix) { DBG_ERROR(0, "No \"prefix\" for type \"%s\" (within %s)", elemType, typ); return -1; } /* actually generate the code */ GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_List2_new();"); GWEN_SyncIo_WriteString(sio, " if ("); GWEN_SyncIo_WriteString(sio, listName); GWEN_SyncIo_WriteLine(sio, ") {"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemType); GWEN_SyncIo_WriteLine(sio, "_LIST2_ITERATOR *it;"); GWEN_SyncIo_WriteLine(sio, ""); /* it=ElemType_List2_First */ GWEN_SyncIo_WriteString(sio, " it="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteString(sio, "_List2_First("); GWEN_SyncIo_WriteString(sio, listName); GWEN_SyncIo_WriteLine(sio, ");"); /* if (it) */ GWEN_SyncIo_WriteLine(sio, " if (it) {"); /* ELEMTYPE *e; */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemType); GWEN_SyncIo_WriteLine(sio, " *e;"); GWEN_SyncIo_WriteLine(sio, ""); /* e=ElemType_List2Iterator_Data */ GWEN_SyncIo_WriteString(sio, " e="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_List2Iterator_Data(it);"); GWEN_SyncIo_WriteLine(sio, " assert(e);"); /* while (e) ; */ GWEN_SyncIo_WriteLine(sio, " while(e) {"); /* ELEMTYPE *ne; */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemType); GWEN_SyncIo_WriteLine(sio, " *ne;"); GWEN_SyncIo_WriteLine(sio, ""); /* ne=ElemType_dup; assert(ne); */ GWEN_SyncIo_WriteString(sio, " ne="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_dup(e);"); GWEN_SyncIo_WriteLine(sio, " assert(ne);"); /* ElemType_List2_PushBack(st->NAME, ne); */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteString(sio, "_List2_PushBack(st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ", ne);"); /* e=ElemType_List2Iterator_Next */ GWEN_SyncIo_WriteString(sio, " e="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_List2Iterator_Next(it);"); GWEN_SyncIo_WriteLine(sio, " } /* while (e) */"); /* ElemType_List2Iterator_free */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_List2Iterator_free(it);"); GWEN_SyncIo_WriteLine(sio, " } /* if (it) */"); GWEN_SyncIo_WriteLine(sio, " } /* LIST */"); } } return 0; } int write_code_duprec_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { GWEN_XMLNODE *n; int rv; const char *prefix; const char *styp; prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } n=GWEN_XMLNode_GetFirstTag(node); while(n) { if (GWEN_XMLNode_GetType(n)==GWEN_XMLNodeTypeTag) { if (strcasecmp(GWEN_XMLNode_GetData(n), "group")==0) { rv=write_code_duprec_c(args, n, sio); if (rv) { DBG_ERROR(0, "Error in dup"); return rv; } } else if (strcasecmp(GWEN_XMLNode_GetData(n), "elem")==0) { int isPtr; const char *typ; const char *name; const char *mode; int doCopy; int takeOver; name=GWEN_XMLNode_GetProperty(n, "name", 0); if (!name) { DBG_ERROR(0, "No name for element"); return -1; } typ=GWEN_XMLNode_GetProperty(n, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } isPtr=atoi(get_property(n, "ptr", "0")); doCopy=atoi(get_property(n, "copy", "1")); takeOver=atoi(get_property(n, "takeOver", "0")); mode=GWEN_XMLNode_GetProperty(n, "mode", "single"); if (strcasecmp(mode, "single")!=0) /* lists are always pointers */ isPtr=1; if (isPtr) { GWEN_BUFFER *pbuf; const char *fname; fname=get_function_name(n, "dup"); pbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(pbuf, "d->"); GWEN_Buffer_AppendByte(pbuf, tolower(*name)); GWEN_Buffer_AppendString(pbuf, name+1); if (strcasecmp(mode, "single")!=0 && !fname) { rv=write_code_dupList_c(args, n, sio, GWEN_Buffer_GetStart(pbuf)); GWEN_Buffer_free(pbuf); if (rv) return rv; } else { /* copy argument if any */ GWEN_SyncIo_WriteString(sio, " if (d->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ")"); GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "="); if (doCopy || takeOver) { rv=write_code_dupArg_c(args, n, sio, GWEN_Buffer_GetStart(pbuf)); GWEN_Buffer_free(pbuf); if (rv) return rv; } else { GWEN_SyncIo_WriteLine(sio, GWEN_Buffer_GetStart(pbuf)); GWEN_Buffer_free(pbuf); GWEN_SyncIo_WriteString(sio, ";"); } } } else { GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "=d->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ";"); } } } n=GWEN_XMLNode_GetNextTag(n); } return 0; } int write_code_dup_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { int rv; const char *prefix; const char *styp; const char *dupAcc; const char *dupName; prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } dupAcc=get_struct_property(node, "dup-access", get_struct_property(node, "access", 0)); dupName=get_struct_property(node, "dup-name", 0); if (dupAcc && strcasecmp(dupAcc, "none")!=0) { GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, " *"); GWEN_SyncIo_WriteString(sio, prefix); if (dupName) GWEN_SyncIo_WriteString(sio, dupName); else GWEN_SyncIo_WriteString(sio, "_dup"); GWEN_SyncIo_WriteString(sio, "(const "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *d) {"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st;"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, " assert(d);"); GWEN_SyncIo_WriteString(sio, " st="); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, "_new();"); rv=write_code_duprec_c(args, node, sio); if (rv) { DBG_ERROR(0, "Error in dup"); return rv; } GWEN_SyncIo_WriteLine(sio, " return st;"); GWEN_SyncIo_WriteLine(sio, "}"); } return 0; } int write_code_todbrec_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { GWEN_XMLNODE *n; int rv; const char *prefix; const char *styp; prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } n=GWEN_XMLNode_GetFirstTag(node); while(n) { if (GWEN_XMLNode_GetType(n)==GWEN_XMLNodeTypeTag) { if (strcasecmp(GWEN_XMLNode_GetData(n), "group")==0) { rv=write_code_todbrec_c(args, n, sio); if (rv) { DBG_ERROR(0, "Error in todb"); return rv; } } else if (strcasecmp(GWEN_XMLNode_GetData(n), "elem")==0) { int isVolatile; isVolatile=atoi(GWEN_XMLNode_GetProperty(n, "volatile", "0")); if (isVolatile==0) { int isPtr; const char *typ; const char *name; name=GWEN_XMLNode_GetProperty(n, "name", 0); if (!name) { DBG_ERROR(0, "No name for element"); return -1; } typ=GWEN_XMLNode_GetProperty(n, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } isPtr=atoi(get_property(n, "ptr", "0")); if (isPtr) { GWEN_SyncIo_WriteString(sio, " if (st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ")"); } rv=write_code_todbArg_c(args, n, sio); if (rv) { DBG_ERROR(0, "Error in toDb function"); return rv; } } } } n=GWEN_XMLNode_GetNextTag(n); } return 0; } int write_code_todb_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { int rv; const char *prefix; const char *styp; prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } GWEN_SyncIo_WriteString(sio, "int "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_toDb(const "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st, GWEN_DB_NODE *db) {"); GWEN_SyncIo_WriteLine(sio, " assert(st);"); GWEN_SyncIo_WriteLine(sio, " assert(db);"); rv=write_code_todbrec_c(args, node, sio); if (rv) { DBG_ERROR(0, "Error in todb"); return rv; } GWEN_SyncIo_WriteLine(sio, " return 0;"); GWEN_SyncIo_WriteLine(sio, "}"); return 0; } int write_code_fromdbrec_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { GWEN_XMLNODE *n; int rv; const char *prefix; const char *styp; int isVolatile; isVolatile=atoi(GWEN_XMLNode_GetProperty(node, "volatile", "0")); if (isVolatile) /* don't save volatile data */ return 0; prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } n=GWEN_XMLNode_GetFirstTag(node); while(n) { if (GWEN_XMLNode_GetType(n)==GWEN_XMLNodeTypeTag) { if (strcasecmp(GWEN_XMLNode_GetData(n), "group")==0) { rv=write_code_fromdbrec_c(args, n, sio); if (rv) { DBG_ERROR(0, "Error in fromdb"); return rv; } } else if (strcasecmp(GWEN_XMLNode_GetData(n), "elem")==0) { int isVolatile; isVolatile=atoi(GWEN_XMLNode_GetProperty(n, "volatile", "0")); if (isVolatile==0) { int isPtr; const char *typ; const char *name; const char *mode; name=GWEN_XMLNode_GetProperty(n, "name", 0); if (!name) { DBG_ERROR(0, "No name for element"); return -1; } mode=GWEN_XMLNode_GetProperty(n, "mode", "single"); typ=GWEN_XMLNode_GetProperty(n, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } if (strcasecmp(mode, "list")==0) { const char *prefix; const char *elemType; const char *elemPrefix; GWEN_XMLNODE *elemNode; prefix=get_struct_property(node, "prefix", 0); assert(prefix); /* create list code */ elemType=GWEN_XMLNode_GetProperty(n, "elemType", 0); if (!elemType) { DBG_ERROR(0, "No \"type\" for list type \"%s\"", typ); return -1; } elemNode=get_typedef(n, elemType); if (!elemNode) { DBG_ERROR(0, "Undefined type %s", elemType); return -1; } elemPrefix=GWEN_XMLNode_GetProperty(elemNode, "prefix", 0); if (!elemPrefix) { DBG_ERROR(0, "No \"prefix\" for type \"%s\" (within %s)", elemType, typ); return -1; } /* actually generate the code */ GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_List_new();"); GWEN_SyncIo_WriteLine(sio, " if (1) {/* just for local vars */"); GWEN_SyncIo_WriteLine(sio, " GWEN_DB_NODE *dbT;"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemType); GWEN_SyncIo_WriteLine(sio, " *e;"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, " dbT=GWEN_DB_GetGroup(db, " "GWEN_PATH_FLAGS_NAMEMUSTEXIST, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "\");"); GWEN_SyncIo_WriteLine(sio, " if (dbT) {"); GWEN_SyncIo_WriteLine(sio, " GWEN_DB_NODE *dbT2;"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, " dbT2=GWEN_DB_FindFirstGroup(dbT, \""); GWEN_SyncIo_WriteString(sio, "element"); GWEN_SyncIo_WriteLine(sio, "\");"); /* while (e) */ GWEN_SyncIo_WriteLine(sio, " while(dbT2) {"); /* e=ElemType_fromDb(e) */ GWEN_SyncIo_WriteString(sio, " e="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_fromDb(dbT2);"); /* if (!e) */ GWEN_SyncIo_WriteLine(sio, " if (!e) {"); GWEN_SyncIo_WriteString(sio, " " "DBG_ERROR(0, \"Bad element for type \\\""); GWEN_SyncIo_WriteString(sio, elemType); GWEN_SyncIo_WriteLine(sio, "\\\"\");"); GWEN_SyncIo_WriteLine(sio, " " "if (GWEN_Logger_GetLevel(0)>=" "GWEN_LoggerLevel_Debug)"); GWEN_SyncIo_WriteLine(sio, " " "GWEN_DB_Dump(dbT2, 2);"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, "_free(st);"); GWEN_SyncIo_WriteLine(sio, " return 0;"); GWEN_SyncIo_WriteLine(sio, " }"); /* ElemType_List_Add(e, st->NAME); */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteString(sio, "_List_Add(e, st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, ");"); GWEN_SyncIo_WriteString(sio, " dbT2=GWEN_DB_FindNextGroup(dbT2, \""); GWEN_SyncIo_WriteString(sio, "element"); GWEN_SyncIo_WriteLine(sio, "\");"); GWEN_SyncIo_WriteLine(sio, " } /* while */"); GWEN_SyncIo_WriteLine(sio, " } /* if (dbT) */"); GWEN_SyncIo_WriteLine(sio, " } /* if (1) */"); } else if (strcasecmp(mode, "list2")==0) { const char *prefix; const char *elemType; const char *elemPrefix; GWEN_XMLNODE *elemNode; prefix=get_struct_property(node, "prefix", 0); assert(prefix); /* create list code */ elemType=GWEN_XMLNode_GetProperty(n, "elemType", 0); if (!elemType) { DBG_ERROR(0, "No \"type\" for list type \"%s\"", typ); return -1; } elemNode=get_typedef(node, elemType); if (!elemNode) { DBG_ERROR(0, "Undefined type %s", elemType); return -1; } elemPrefix=GWEN_XMLNode_GetProperty(elemNode, "prefix", 0); if (!elemPrefix) { DBG_ERROR(0, "No \"prefix\" for type \"%s\" (within %s)", elemType, typ); return -1; } /* actually generate the code */ GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_List2_new();"); GWEN_SyncIo_WriteLine(sio, " if (1) {"); GWEN_SyncIo_WriteLine(sio, " GWEN_DB_NODE *dbT;"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemType); GWEN_SyncIo_WriteLine(sio, " *e;"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, " dbT=GWEN_DB_GetGroup(db, " "GWEN_PATH_FLAGS_NAMEMUSTEXIST, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "\");"); GWEN_SyncIo_WriteLine(sio, " if (dbT) {"); GWEN_SyncIo_WriteLine(sio, " GWEN_DB_NODE *dbT2;"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, " dbT2=GWEN_DB_FindFirstGroup(dbT, \""); GWEN_SyncIo_WriteString(sio, "element"); GWEN_SyncIo_WriteLine(sio, "\");"); /* while (e) */ GWEN_SyncIo_WriteLine(sio, " while(dbT2) {"); /* e=ElemType_fromDb(e) */ GWEN_SyncIo_WriteString(sio, " e="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_fromDb(dbT2);"); /* if (!e) */ GWEN_SyncIo_WriteLine(sio, " if (!e) {"); GWEN_SyncIo_WriteString(sio, " " "DBG_ERROR(0, \"Bad element for type \\\""); GWEN_SyncIo_WriteString(sio, elemType); GWEN_SyncIo_WriteLine(sio, "\\\"\");"); GWEN_SyncIo_WriteLine(sio, " " "if (GWEN_Logger_GetLevel(0)>=" "GWEN_LoggerLevel_Debug)"); GWEN_SyncIo_WriteLine(sio, " " "GWEN_DB_Dump(dbT2, 2);"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, "_free(st);"); GWEN_SyncIo_WriteLine(sio, " return 0;"); GWEN_SyncIo_WriteLine(sio, " } /* if !e */"); /* ElemType_List_Add(e, st->NAME); */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteString(sio, "_List2_PushBack(st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ", e);"); GWEN_SyncIo_WriteString(sio," " "dbT2=GWEN_DB_FindNextGroup(dbT2, \""); GWEN_SyncIo_WriteString(sio, "element"); GWEN_SyncIo_WriteLine(sio, "\");"); GWEN_SyncIo_WriteLine(sio, " } /* while */"); GWEN_SyncIo_WriteLine(sio, " } /* if (dbT) */"); GWEN_SyncIo_WriteLine(sio, " } /* if (1) */"); } else if (strcasecmp(typ, "GWEN_STRINGLIST")==0) { GWEN_SyncIo_WriteLine(sio, " if (1) {"); GWEN_SyncIo_WriteLine(sio, " int i;"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, " for (i=0; ; i++) {"); GWEN_SyncIo_WriteLine(sio, " const char *s;"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, " s=GWEN_DB_GetCharValue(db, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "\", i, 0);"); GWEN_SyncIo_WriteLine(sio, " if (!s)"); GWEN_SyncIo_WriteLine(sio, " break;"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Add"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "(st, s, 0);"); GWEN_SyncIo_WriteLine(sio, " } /* for */"); GWEN_SyncIo_WriteLine(sio, " }"); } else { isPtr=atoi(get_property(n, "ptr", "0")); if (isPtr) { if (strcasecmp(typ, "char")!=0) { GWEN_SyncIo_WriteLine(sio, " if (1) { /* for local vars */"); GWEN_SyncIo_WriteLine(sio, " GWEN_DB_NODE *dbT;"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, " dbT=GWEN_DB_GetGroup(db, " "GWEN_PATH_FLAGS_NAMEMUSTEXIST, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "\");"); GWEN_SyncIo_WriteString(sio, " if (dbT)"); } } if (isPtr && strcasecmp(typ, "char")!=0) { GWEN_SyncIo_WriteLine(sio, " {"); rv=write_code_freeElem_c(args, n, sio); if (rv) return rv; GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteString(sio, name); GWEN_SyncIo_WriteString(sio, "="); rv=write_code_fromdbArg_c(args, n, sio); if (rv) return rv; GWEN_SyncIo_WriteLine(sio, ";"); GWEN_SyncIo_WriteLine(sio, "}"); } else { GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Set"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "(st, "); rv=write_code_fromdbArg_c(args, n, sio); if (rv) return rv; GWEN_SyncIo_WriteLine(sio, ");"); } if (isPtr && strcasecmp(typ, "char")!=0) { GWEN_SyncIo_WriteLine(sio, " }"); } } } } } n=GWEN_XMLNode_GetNextTag(n); } return 0; } int write_code_readdb_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { int rv; const char *prefix; const char *styp; prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } GWEN_SyncIo_WriteString(sio, "int "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_ReadDb("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st, GWEN_DB_NODE *db) {"); GWEN_SyncIo_WriteLine(sio, " assert(st);"); GWEN_SyncIo_WriteLine(sio, " assert(db);"); rv=write_code_fromdbrec_c(args, node, sio); if (rv) { DBG_ERROR(0, "Error in fromdb"); return rv; } GWEN_SyncIo_WriteLine(sio, " return 0;"); GWEN_SyncIo_WriteLine(sio, "}"); return 0; } int write_code_fromdb_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { const char *prefix; const char *styp; const char *fromDbName; const char *fromDbAcc; prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } fromDbAcc=get_struct_property(node, "dup-access", get_struct_property(node, "access", 0)); fromDbName=get_struct_property(node, "fromdb-name", 0); if (fromDbAcc && strcasecmp(fromDbAcc, "none")!=0) { GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, " *"); GWEN_SyncIo_WriteString(sio, prefix); if (fromDbName) GWEN_SyncIo_WriteString(sio, fromDbName); else GWEN_SyncIo_WriteString(sio, "_fromDb"); GWEN_SyncIo_WriteLine(sio, "(GWEN_DB_NODE *db) {"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st;"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, " assert(db);"); GWEN_SyncIo_WriteString(sio, " st="); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, "_new();"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, "_ReadDb(st, db);"); GWEN_SyncIo_WriteLine(sio, " st->_modified=0;"); GWEN_SyncIo_WriteLine(sio, " return st;"); GWEN_SyncIo_WriteLine(sio, "}"); } /* if fromDb wanted */ return 0; } int write_code_builtin_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { const char *prefix; const char *styp; const char *dupAcc; prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } dupAcc=get_struct_property(node, "dup-access", get_struct_property(node, "access", 0)); /* IsModified */ GWEN_SyncIo_WriteString(sio, "int "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_IsModified(const "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st) {"); GWEN_SyncIo_WriteLine(sio, " assert(st);"); GWEN_SyncIo_WriteLine(sio, " return st->_modified;"); GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); /* SetModified */ GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_SetModified("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st, int i) {"); GWEN_SyncIo_WriteLine(sio, " assert(st);"); GWEN_SyncIo_WriteLine(sio, " st->_modified=i;"); GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); /* Attach */ GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Attach("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st) {"); GWEN_SyncIo_WriteLine(sio, " assert(st);"); GWEN_SyncIo_WriteLine(sio, " st->_usage++;"); GWEN_SyncIo_WriteLine(sio, "}"); /* list2 functions */ if (get_struct_property(node, "list2", 0)) { /* List2_freeAll */ GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, " *"); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_List2__freeAll_cb("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, " *"); GWEN_SyncIo_WriteLine(sio, "st, void *user_data) {"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, "_free(st);"); GWEN_SyncIo_WriteLine(sio, "return 0;"); GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_List2_freeAll("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, "_LIST2 *stl) {"); GWEN_SyncIo_WriteLine(sio, " if (stl) {"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_List2_ForEach(stl, "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, "_List2__freeAll_cb, 0);"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, "_List2_free(stl); "); GWEN_SyncIo_WriteLine(sio, " }"); GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); } /* list functions */ if (get_struct_property(node, "list", 0)) { /* LIST_dup functions */ if (dupAcc && strcasecmp(dupAcc, "none")!=0) { const char *dupName; dupName=get_struct_property(node, "dup-name", 0); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, "_LIST *"); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_List_dup(const "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, "_LIST *stl) {"); GWEN_SyncIo_WriteLine(sio, " if (stl) {"); /* ELEMTYPE_LIST *nl; */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, "_LIST *nl;"); /* ELEMTYPE *e; */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *e;"); GWEN_SyncIo_WriteLine(sio, ""); /* nl=ElemType_List */ GWEN_SyncIo_WriteString(sio, " nl="); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, "_List_new();"); /* e=ElemType_List_First */ GWEN_SyncIo_WriteString(sio, " e="); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, "_List_First(stl);"); /* while (e) ; */ GWEN_SyncIo_WriteLine(sio, " while(e) {"); /* ELEMTYPE *ne; */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *ne;"); GWEN_SyncIo_WriteLine(sio, ""); /* ne=ElemType_dup; assert(ne); */ GWEN_SyncIo_WriteString(sio, " ne="); GWEN_SyncIo_WriteString(sio, prefix); if (dupName) GWEN_SyncIo_WriteString(sio, dupName); else GWEN_SyncIo_WriteString(sio, "_dup"); GWEN_SyncIo_WriteLine(sio, "(e);"); GWEN_SyncIo_WriteLine(sio, " assert(ne);"); /* ElemType_List_Add(ne, st->NAME); */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, "_List_Add(ne, nl);"); /* e=ElemType_List_Next */ GWEN_SyncIo_WriteString(sio, " e="); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, "_List_Next(e);"); GWEN_SyncIo_WriteLine(sio, " } /* while (e) */"); GWEN_SyncIo_WriteLine(sio, " return nl;"); GWEN_SyncIo_WriteLine(sio, " }"); GWEN_SyncIo_WriteLine(sio, " else"); GWEN_SyncIo_WriteLine(sio, " return 0;"); GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); } /* if we have a dup function */ } return 0; } int write_code_file_c(ARGUMENTS *args, GWEN_XMLNODE *node) { int rv; const char *f; GWEN_BUFFER *fname; const char *nacc; GWEN_SYNCIO *sio; int err; const char *id; const char *prefix; GWEN_XMLNODE *n; id=get_struct_property(node, "id", 0); if (!id) { DBG_ERROR(0, "No id for struct"); return -1; } f=get_struct_property(node, "filename", 0); if (!f) { DBG_ERROR(0, "No filename given"); return -1; } prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } nacc=get_struct_property(node, "access", "public"); fname=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(fname, f); GWEN_Buffer_AppendString(fname, ".c"); sio=GWEN_SyncIo_File_new(GWEN_Buffer_GetStart(fname), GWEN_SyncIo_File_CreationMode_CreateAlways); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE | GWEN_SYNCIO_FILE_FLAGS_UREAD | GWEN_SYNCIO_FILE_FLAGS_UWRITE | GWEN_SYNCIO_FILE_FLAGS_GREAD | GWEN_SYNCIO_FILE_FLAGS_GWRITE); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_ERROR(0, "open(%s): %s", GWEN_Buffer_GetStart(fname), strerror(errno)); GWEN_Buffer_free(fname); GWEN_SyncIo_free(sio); return -1; } GWEN_Buffer_free(fname); /* Insert the auto-generation warning */ GWEN_SyncIo_WriteString(sio, "/* This file is auto-generated from \""); GWEN_SyncIo_WriteString(sio, f); GWEN_SyncIo_WriteLine(sio, ".xml\" by the typemaker"); GWEN_SyncIo_WriteLine(sio, " tool of Gwenhywfar. "); GWEN_SyncIo_WriteLine(sio, " Do not edit this file -- all changes will be lost! */"); GWEN_SyncIo_WriteLine(sio, "#ifdef HAVE_CONFIG_H"); GWEN_SyncIo_WriteLine(sio, "# include \"config.h\""); GWEN_SyncIo_WriteLine(sio, "#endif"); GWEN_SyncIo_WriteLine(sio, ""); fname=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(fname, f); GWEN_Buffer_AppendString(fname, "_p.h"); GWEN_SyncIo_WriteString(sio, "#include \""); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(fname)); GWEN_SyncIo_WriteLine(sio, "\""); GWEN_Buffer_free(fname); GWEN_SyncIo_WriteLine(sio, "#include "); GWEN_SyncIo_WriteLine(sio, "#include "); GWEN_SyncIo_WriteLine(sio, "#include "); GWEN_SyncIo_WriteLine(sio, "#include "); GWEN_SyncIo_WriteLine(sio, "#include "); GWEN_SyncIo_WriteLine(sio, "#include "); GWEN_SyncIo_WriteLine(sio, ""); /* write headers */ n=GWEN_XMLNode_FindFirstTag(node, "headers", 0, 0); if (n) { n=GWEN_XMLNode_FindFirstTag(n, "header", 0, 0); while(n) { write_h_header(args, n, sio, "source"); n=GWEN_XMLNode_FindNextTag(n, "header", 0, 0); } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); } /* write c-headers */ n=GWEN_XMLNode_FindFirstTag(node, "c-headers", 0, 0); if (n) { n=GWEN_XMLNode_FindFirstTag(n, "header", 0, 0); while(n) { write_h_header(args, n, sio, "source"); n=GWEN_XMLNode_FindNextTag(n, "header", 0, 0); } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); } if (get_struct_property(node, "inherit", 0)) { GWEN_SyncIo_WriteString(sio, "GWEN_INHERIT_FUNCTIONS("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, ")"); } if (get_struct_property(node, "list", 0)) { GWEN_SyncIo_WriteString(sio, "GWEN_LIST_FUNCTIONS("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, ", "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, ")"); } if (get_struct_property(node, "list2", 0)) { GWEN_SyncIo_WriteString(sio, "GWEN_LIST2_FUNCTIONS("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, ", "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, ")"); } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); rv=write_c_enums(args, node, sio); if (rv) { GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); rv=write_code_const_c(args, node, sio); if (rv) { GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); rv=write_code_dest_c(args, node, sio); if (rv) { GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); rv=write_code_dup_c(args, node, sio); if (rv) { GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); rv=write_code_todb_c(args, node, sio); if (rv) { GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); rv=write_code_readdb_c(args, node, sio); if (rv) { GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); rv=write_code_fromdb_c(args, node, sio); if (rv) { GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); rv=write_code_setget_c(args, node, sio); if (rv) { GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); rv=write_code_builtin_c(args, node, sio); if (rv) { GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); /* close stream */ err=GWEN_SyncIo_Disconnect(sio); if (err) { DBG_ERROR_ERR(0, err); GWEN_SyncIo_free(sio); return -1; } GWEN_SyncIo_free(sio); return 0; } int write_code_files_c(ARGUMENTS *args, GWEN_XMLNODE *node) { GWEN_XMLNODE *n; int rv; n=GWEN_XMLNode_FindFirstTag(node, "type", 0, 0); while (n) { rv=write_code_file_c(args, n); if (rv) return rv; n=GWEN_XMLNode_FindNextTag(n, "type", 0, 0); } return 0; } gwenhywfar-4.15.2beta/tools/typemaker/main.c0000644000175000017500000010245412364015347016005 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /* Internationalization */ #ifdef ENABLE_NLS # include # include # define I18N(m) dgettext("gwenhywfar", m) # define I18S(m) m #else # define I18N(m) m # define I18S(m) m #endif #include "args.h" #include "typemaker_p.h" #include #include #include #include #include #include #include #include #include #include #include int write_xml_to_bio(GWEN_XMLNODE *n, GWEN_SYNCIO *sio, uint32_t flags) { GWEN_BUFFER *buf; int rv; buf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_XMLNode_toBuffer(n, buf, flags); if (rv) { GWEN_Buffer_free(buf); return rv; } rv=GWEN_SyncIo_WriteForced(sio, (const uint8_t*) GWEN_Buffer_GetStart(buf), GWEN_Buffer_GetUsedBytes(buf)); GWEN_Buffer_free(buf); if (rv<0) { DBG_INFO(0, "here (%d)", rv); return rv; } return 0; } int write_h_header(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *where) { int isSys; int err; const char *d; GWEN_XMLNODE *dn; /*const char *nwhere;*/ /*nwhere=GWEN_XMLNode_GetProperty(node, "out", "header"); if (strcasecmp(nwhere, where)==0) {*/ dn=GWEN_XMLNode_GetFirstData(node); if (!dn) { DBG_ERROR(0, "Empty
"); return -1; } d=GWEN_XMLNode_GetData(dn); if (!d) { DBG_ERROR(0, "Empty
"); return -1; } isSys=(strcasecmp(GWEN_XMLNode_GetProperty(node, "type", ""), "sys")==0); err=GWEN_SyncIo_WriteString(sio, "#include "); if (err) { DBG_ERROR_ERR(0, err); return -1;} if (isSys) { err=GWEN_SyncIo_WriteString(sio, "<"); if (err) { DBG_ERROR_ERR(0, err); return -1;} } else { err=GWEN_SyncIo_WriteString(sio, "\""); if (err) { DBG_ERROR_ERR(0, err); return -1;} } err=GWEN_SyncIo_WriteString(sio, d); if (err) { DBG_ERROR_ERR(0, err); return -1;} if (isSys) { err=GWEN_SyncIo_WriteLine(sio, ">"); if (err) { DBG_ERROR_ERR(0, err); return -1;} } else { err=GWEN_SyncIo_WriteLine(sio, "\""); if (err) { DBG_ERROR_ERR(0, err); return -1;} } /*} */ return 0; } void write_if_nonnull(GWEN_SYNCIO *sio, const char *str) { if (str) { GWEN_SyncIo_WriteString(sio, str); GWEN_SyncIo_WriteString(sio, " "); } } int write_h_setget_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *acc) { GWEN_XMLNODE *n; int rv; const char *prefix; const char *styp; const char *sacc; sacc=get_struct_property(node, "access", "public"); prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } n=GWEN_XMLNode_GetFirstTag(node); while(n) { if (GWEN_XMLNode_GetType(n)==GWEN_XMLNodeTypeTag) { if (strcasecmp(GWEN_XMLNode_GetData(n), "group")==0) { const char *name; int hasDoc; GWEN_XMLNODE *dn; hasDoc=0; name=GWEN_XMLNode_GetProperty(n, "name", 0); if (name) { hasDoc=1; GWEN_SyncIo_WriteString(sio, "/** @name "); GWEN_SyncIo_WriteLine(sio, name); dn=GWEN_XMLNode_FindFirstTag(n, "descr", 0, 0); if (dn) { GWEN_SyncIo_WriteLine(sio, " *"); if (write_xml_to_bio(dn, sio, GWEN_XML_FLAGS_SIMPLE | GWEN_XML_FLAGS_INDENT)) return -1; } GWEN_SyncIo_WriteLine(sio, "*/"); GWEN_SyncIo_WriteLine(sio, "/*@{*/"); } rv=write_h_setget_c(args, n, sio, acc); if (rv) return rv; if (hasDoc) { GWEN_SyncIo_WriteLine(sio, "/*@}*/"); } } else if (strcasecmp(GWEN_XMLNode_GetData(n), "elem")==0) { if (strcasecmp(GWEN_XMLNode_GetProperty(n, "access", sacc), acc)==0) { int isPtr; const char *typ; const char *name; const char *mode; const char *tmode; int isConst; int doCopy; GWEN_XMLNODE *tnode; name=GWEN_XMLNode_GetProperty(n, "name", 0); if (!name) { DBG_ERROR(0, "No name for element"); return -1; } typ=GWEN_XMLNode_GetProperty(n, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } isPtr=atoi(get_property(n, "ptr", "0")); isConst=atoi(get_property(n, "const", "1")); doCopy=atoi(get_property(n, "copy", "1")); mode=GWEN_XMLNode_GetProperty(n, "mode", "single"); if (strcasecmp(mode, "single")!=0) isPtr=1; tnode=get_typedef(node, typ); if (tnode) tmode=GWEN_XMLNode_GetProperty(tnode, "mode", "single"); else tmode=mode; /* getter */ GWEN_SyncIo_WriteLine(sio, "/**"); GWEN_SyncIo_WriteString(sio, "* Returns the property @ref "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, "_"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteLine(sio, name+1); GWEN_SyncIo_WriteLine(sio, "*/"); write_if_nonnull(sio, args->domain); if (isPtr && (/*strcasecmp(mode, "single")==0 ||*/ isConst)) { GWEN_SyncIo_WriteString(sio, "const "); } if (strcasecmp(tmode, "enum")!=0) GWEN_SyncIo_WriteString(sio, typ); else { GWEN_BUFFER *tid; const char *s; tid=GWEN_Buffer_new(0, 64, 0, 1); s=get_struct_property(node, "id", 0); assert(s); GWEN_Buffer_AppendString(tid, s); GWEN_Buffer_AppendString(tid, "_"); GWEN_Buffer_AppendString(tid, typ); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tid)); GWEN_Buffer_free(tid); } if (isPtr) { GWEN_SyncIo_WriteString(sio, " *"); } else { GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Get"); GWEN_SyncIo_WriteChar(sio, toupper(*name));; GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "(const "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *el);"); /* setter */ GWEN_SyncIo_WriteLine(sio, "/**"); GWEN_SyncIo_WriteString(sio, "* Set the property @ref "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, "_"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteLine(sio, name+1); GWEN_SyncIo_WriteLine(sio, "*/"); write_if_nonnull(sio, args->domain); GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Set"); GWEN_SyncIo_WriteChar(sio, toupper(*name));; GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, " *el, "); if (isPtr && isConst) { GWEN_SyncIo_WriteString(sio, "const "); } if (strcasecmp(tmode, "enum")!=0) GWEN_SyncIo_WriteString(sio, typ); else { GWEN_BUFFER *tid; const char *s; tid=GWEN_Buffer_new(0, 64, 0, 1); s=get_struct_property(node, "id", 0); assert(s); GWEN_Buffer_AppendString(tid, s); GWEN_Buffer_AppendString(tid, "_"); GWEN_Buffer_AppendString(tid, typ); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tid)); GWEN_Buffer_free(tid); } if (isPtr) { GWEN_SyncIo_WriteString(sio, " *"); } else { GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteLine(sio, "d);"); if (strcasecmp(typ, "GWEN_STRINGLIST")==0) { /* special functions for string lists */ write_if_nonnull(sio, args->domain); GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Add"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st, const char *d, int chk);"); write_if_nonnull(sio, args->domain); GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Remove"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st, const char *d);"); write_if_nonnull(sio, args->domain); GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Clear"); GWEN_SyncIo_WriteChar(sio, toupper(*name));; GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st);"); write_if_nonnull(sio, args->domain); GWEN_SyncIo_WriteString(sio, "int "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Has"); GWEN_SyncIo_WriteChar(sio, toupper(*name));; GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "(const "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st, const char *d);"); } } } else if (strcasecmp(GWEN_XMLNode_GetData(n), "func")==0) { if (strcasecmp(GWEN_XMLNode_GetProperty(n, "access", sacc), acc)==0) { const char *typ; const char *name; const char *rettype; GWEN_XMLNODE *anode; int isPtr; int isVoid; int idx; name=GWEN_XMLNode_GetProperty(n, "name", 0); if (!name) { DBG_ERROR(0, "No name for element"); return -1; } typ=GWEN_XMLNode_GetProperty(n, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } rettype=GWEN_XMLNode_GetProperty(n, "return", 0); if (!rettype) { DBG_ERROR(0, "No return type for function"); return -1; } isPtr=atoi(get_property(n, "ptr", "0")); isVoid=(!isPtr && strcasecmp(rettype, "void")==0); /* getter */ GWEN_SyncIo_WriteLine(sio, "/**"); GWEN_SyncIo_WriteString(sio, "* Returns the property @ref "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, "_"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteLine(sio, name+1); GWEN_SyncIo_WriteLine(sio, "*/"); write_if_nonnull(sio, args->domain); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, "_"); GWEN_SyncIo_WriteString(sio, typ); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Get"); GWEN_SyncIo_WriteChar(sio, toupper(*name));; GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "(const "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st);"); /* setter */ GWEN_SyncIo_WriteLine(sio, "/**"); GWEN_SyncIo_WriteString(sio, "* Set the property @ref "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, "_"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteLine(sio, name+1); GWEN_SyncIo_WriteLine(sio, "*/"); write_if_nonnull(sio, args->domain); GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Set"); GWEN_SyncIo_WriteChar(sio, toupper(*name));; GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, " *st, "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, "_"); GWEN_SyncIo_WriteString(sio, typ); GWEN_SyncIo_WriteLine(sio, " d);"); /* function call */ GWEN_SyncIo_WriteLine(sio, "/**"); /* TODO: Write API doc for this function */ GWEN_SyncIo_WriteLine(sio, "*/"); write_if_nonnull(sio, args->domain); GWEN_SyncIo_WriteString(sio, rettype); if (isPtr) GWEN_SyncIo_WriteString(sio, "*"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, " *st"); anode=GWEN_XMLNode_FindFirstTag(n, "arg", 0, 0); idx=0; while(anode) { const char *aname; const char *atype; int aisPtr; GWEN_SyncIo_WriteString(sio, ", "); aisPtr=atoi(GWEN_XMLNode_GetProperty(anode, "ptr", "0")); aname=GWEN_XMLNode_GetProperty(anode, "name", 0); if (!aname || !*aname) { DBG_ERROR(0, "No name for argument %d in function %s", idx, name); return -1; } atype=GWEN_XMLNode_GetProperty(anode, "type", 0); if (!atype || !*atype) { DBG_ERROR(0, "No type for argument %d in function %s", idx, name); return -1; } GWEN_SyncIo_WriteString(sio, atype); if (aisPtr) GWEN_SyncIo_WriteString(sio, "*"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, aname); idx++; anode=GWEN_XMLNode_FindNextTag(anode, "arg", 0, 0); } GWEN_SyncIo_WriteLine(sio, ");"); } } } GWEN_SyncIo_WriteLine(sio, ""); n=GWEN_XMLNode_GetNextTag(n); } return 0; } int write_h_enums(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *acc) { GWEN_XMLNODE *n; n=GWEN_XMLNode_FindFirstTag(node, "subtypes", 0, 0); if (n) n=GWEN_XMLNode_FindFirstTag(n, "type", "mode", "enum"); if (n) { GWEN_BUFFER *tprefix; GWEN_BUFFER *tid; uint32_t ppos; uint32_t tpos; const char *s; tprefix=GWEN_Buffer_new(0, 64, 0, 1); tid=GWEN_Buffer_new(0, 64, 0, 1); s=get_struct_property(node, "prefix", 0); assert(s); GWEN_Buffer_AppendString(tprefix, s); GWEN_Buffer_AppendString(tprefix, "_"); ppos=GWEN_Buffer_GetPos(tprefix); s=get_struct_property(node, "id", 0); assert(s); GWEN_Buffer_AppendString(tid, s); GWEN_Buffer_AppendString(tid, "_"); tpos=GWEN_Buffer_GetPos(tid); while(n) { s=GWEN_XMLNode_GetProperty(n, "access", "public"); if (strcasecmp(s, acc)==0) { GWEN_XMLNODE *nn; s=GWEN_XMLNode_GetProperty(n, "id", 0); assert(s); GWEN_Buffer_AppendString(tid, s); s=GWEN_XMLNode_GetProperty(n, "prefix", 0); assert(s); GWEN_Buffer_AppendString(tprefix, s); GWEN_SyncIo_WriteLine(sio, "typedef enum {"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tprefix)); GWEN_SyncIo_WriteString(sio, "Unknown=-1"); nn=GWEN_XMLNode_FindFirstTag(n, "values", 0, 0); if (nn) nn=GWEN_XMLNode_FindFirstTag(nn, "value", 0, 0); if (nn) { uint32_t vpos; vpos=GWEN_Buffer_GetPos(tprefix); while(nn) { GWEN_XMLNODE *nnn; GWEN_XMLNODE *dn; nnn=GWEN_XMLNode_GetFirstData(nn); if (!nnn) { DBG_ERROR(0, "No values in enum description for \"%s\"", GWEN_Buffer_GetStart(tid)); GWEN_Buffer_free(tid); GWEN_Buffer_free(tprefix); return -1; } GWEN_SyncIo_WriteLine(sio, ","); dn=GWEN_XMLNode_FindFirstTag(nn, "descr", 0, 0); if (dn) { GWEN_SyncIo_WriteString(sio, " /** "); if (write_xml_to_bio(dn, sio, GWEN_XML_FLAGS_SIMPLE | GWEN_XML_FLAGS_INDENT)) return -1; GWEN_SyncIo_WriteLine(sio, " */"); } GWEN_SyncIo_WriteString(sio, " "); s=GWEN_XMLNode_GetData(nnn); assert(s); GWEN_Buffer_AppendByte(tprefix, toupper(*s)); GWEN_Buffer_AppendString(tprefix, s+1); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tprefix)); s=GWEN_XMLNode_GetProperty(nn, "value", 0); if (s) { GWEN_SyncIo_WriteString(sio, "="); GWEN_SyncIo_WriteString(sio, s); } GWEN_Buffer_Crop(tprefix, 0, vpos); nn=GWEN_XMLNode_FindNextTag(nn, "value", 0, 0); } } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, "} "); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tid)); GWEN_SyncIo_WriteLine(sio, ";"); GWEN_SyncIo_WriteLine(sio, ""); write_if_nonnull(sio, args->domain); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tid)); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tprefix)); GWEN_SyncIo_WriteLine(sio, "_fromString(const char *s);"); write_if_nonnull(sio, args->domain); GWEN_SyncIo_WriteString(sio, "const char *"); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tprefix)); GWEN_SyncIo_WriteString(sio, "_toString("); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tid)); GWEN_SyncIo_WriteLine(sio, " v);"); GWEN_Buffer_Crop(tprefix, 0, ppos); GWEN_Buffer_Crop(tid, 0, tpos); GWEN_SyncIo_WriteLine(sio, ""); } /* if access type matches */ n=GWEN_XMLNode_FindNextTag(n, "type", "mode", "enum"); } /* while n */ GWEN_Buffer_free(tid); GWEN_Buffer_free(tprefix); } /* if enum types found */ return 0; } int write_h_funcs(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *acc) { GWEN_XMLNODE *n; const char *styp; styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } n=GWEN_XMLNode_FindFirstTag(node, "func", 0, 0); while(n) { const char *sacc; sacc=get_struct_property(n, "access", "public"); assert(sacc); if (strcasecmp(sacc, acc)==0) { const char *prefix; const char *name; const char *rettype; const char *typ; GWEN_XMLNODE *anode; int isPtr; int idx; name=GWEN_XMLNode_GetProperty(n, "name", 0); if (!name) { DBG_ERROR(0, "No name for function"); return -1; } rettype=GWEN_XMLNode_GetProperty(n, "return", 0); if (!rettype) { DBG_ERROR(0, "No return type for function"); return -1; } prefix=get_struct_property(n, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } isPtr=atoi(get_property(n, "ptr", "0")); typ=GWEN_XMLNode_GetProperty(n, "type", 0); if (!typ) { DBG_ERROR(0, "No type for function"); return -1; } /* typdef rettype (*typ)(args) */ GWEN_SyncIo_WriteString(sio, "typedef "); GWEN_SyncIo_WriteString(sio, rettype); if (isPtr) GWEN_SyncIo_WriteString(sio, "*"); GWEN_SyncIo_WriteString(sio, " (*"); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, "_"); GWEN_SyncIo_WriteString(sio, typ); GWEN_SyncIo_WriteString(sio, ")("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, " *st"); anode=GWEN_XMLNode_FindFirstTag(n, "arg", 0, 0); idx=0; while(anode) { const char *aname; const char *atype; int aisPtr; GWEN_SyncIo_WriteString(sio, ", "); aisPtr=atoi(GWEN_XMLNode_GetProperty(anode, "ptr", "0")); aname=GWEN_XMLNode_GetProperty(anode, "name", 0); if (!aname || !*aname) { DBG_ERROR(0, "No name for argument %d in function %s", idx, name); return -1; } atype=GWEN_XMLNode_GetProperty(anode, "type", 0); if (!atype || !*atype) { DBG_ERROR(0, "No type for argument %d in function %s", idx, name); return -1; } GWEN_SyncIo_WriteString(sio, atype); GWEN_SyncIo_WriteString(sio, " "); if (aisPtr) GWEN_SyncIo_WriteString(sio, "*"); GWEN_SyncIo_WriteString(sio, aname); idx++; anode=GWEN_XMLNode_FindNextTag(anode, "arg", 0, 0); } GWEN_SyncIo_WriteLine(sio, ");"); } n=GWEN_XMLNode_FindNextTag(n, "func", 0, 0); } /* while functions */ GWEN_SyncIo_WriteLine(sio, ""); return 0; } int write_apidocrec_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *acc, int level) { GWEN_XMLNODE *n; int rv; const char *prefix; const char *styp; prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } n=GWEN_XMLNode_GetFirstTag(node); while(n) { if (GWEN_XMLNode_GetType(n)==GWEN_XMLNodeTypeTag) { if (strcasecmp(GWEN_XMLNode_GetData(n), "group")==0) { const char *name; GWEN_XMLNODE *dn; char numbuf[16]; name=GWEN_XMLNode_GetProperty(n, "name", 0); if (!name) { DBG_ERROR(0, "No name for element"); return -1; } snprintf(numbuf, sizeof(numbuf), "%d", level); GWEN_SyncIo_WriteString(sio, ""); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, ""); GWEN_SyncIo_WriteLine(sio, "

"); dn=GWEN_XMLNode_FindFirstTag(n, "descr", 0, 0); if (dn) { if (write_xml_to_bio(dn, sio, GWEN_XML_FLAGS_SIMPLE | GWEN_XML_FLAGS_INDENT)) { DBG_INFO(0, "here"); return -1; } } GWEN_SyncIo_WriteLine(sio, "

"); rv=write_apidocrec_c(args, n, sio, acc, level+1); if (rv) { DBG_INFO(0, "here (%d)", rv); return rv; } } else if (strcasecmp(GWEN_XMLNode_GetData(n), "elem")==0) { if (strcasecmp(GWEN_XMLNode_GetProperty(n, "access", "public"), acc)==0) { const char *typ; const char *name; GWEN_XMLNODE *dn; char numbuf[16]; name=GWEN_XMLNode_GetProperty(n, "name", 0); if (!name) { DBG_ERROR(0, "No name for element"); return -1; } typ=GWEN_XMLNode_GetProperty(n, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } snprintf(numbuf, sizeof(numbuf), "%d", level); GWEN_SyncIo_WriteString(sio, "@anchor "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, "_"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteLine(sio, name+1); GWEN_SyncIo_WriteString(sio, ""); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, ""); dn=GWEN_XMLNode_FindFirstTag(n, "brief", 0, 0); if (dn) { GWEN_SyncIo_WriteString(sio, "@short "); if (write_xml_to_bio(dn, sio, GWEN_XML_FLAGS_SIMPLE | GWEN_XML_FLAGS_INDENT)) { DBG_INFO(0, "here"); return -1; } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); } GWEN_SyncIo_WriteLine(sio, "

"); dn=GWEN_XMLNode_FindFirstTag(n, "descr", 0, 0); if (dn) { rv=write_xml_to_bio(dn, sio, GWEN_XML_FLAGS_SIMPLE | GWEN_XML_FLAGS_INDENT); if (rv) { DBG_INFO(0, "here (%d)", rv); return -1; } } GWEN_SyncIo_WriteLine(sio, "

"); GWEN_SyncIo_WriteLine(sio, "

"); GWEN_SyncIo_WriteString(sio, "Set this property with @ref "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Set"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ", "); GWEN_SyncIo_WriteString(sio, "get it with @ref "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Get"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteLine(sio, name+1); GWEN_SyncIo_WriteLine(sio, "

"); GWEN_SyncIo_WriteLine(sio, ""); } } } n=GWEN_XMLNode_GetNextTag(n); } return 0; } int write_apidoc_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *acc) { const char *prefix; const char *styp; GWEN_XMLNODE *dn; const char *brief; const char *s; int rv; prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } GWEN_SyncIo_WriteString(sio, "/** @page P_"); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, "_"); s=acc; while(*s) { GWEN_SyncIo_WriteChar(sio, toupper(*s)); s++; } brief=GWEN_XMLNode_GetProperty(node, "name", prefix); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, brief); GWEN_SyncIo_WriteString(sio, " ("); GWEN_SyncIo_WriteString(sio, acc); GWEN_SyncIo_WriteLine(sio, ")"); GWEN_SyncIo_WriteString(sio, "This page describes the properties of "); GWEN_SyncIo_WriteLine(sio, styp); dn=GWEN_XMLNode_FindFirstTag(node, "descr", 0, 0); if (dn) { if (write_xml_to_bio(dn, sio, GWEN_XML_FLAGS_SIMPLE | GWEN_XML_FLAGS_INDENT)) { DBG_INFO(0, "here"); return -1; } } rv=write_apidocrec_c(args, node, sio, acc, 3); if (rv) { DBG_INFO(0, "here (%d)", rv); return rv; } GWEN_SyncIo_WriteLine(sio, "*/"); return 0; } int write_files(ARGUMENTS *args, GWEN_XMLNODE *node) { int rv; GWEN_XMLNODE *n; n=GWEN_XMLNode_FindFirstTag(node, "types", 0, 0); if (!n) { DBG_WARN(0, "Empty file"); return 0; } rv=write_hp_files_c(args, n); if (rv) { DBG_INFO(0, "here (%d)", rv); return rv; } rv=write_hl_files_c(args, n); if (rv) { DBG_INFO(0, "here (%d)", rv); return rv; } rv=write_ha_files_c(args, n); if (rv) { DBG_INFO(0, "here (%d)", rv); return rv; } rv=write_code_files_c(args, n); if (rv) { DBG_INFO(0, "here (%d)", rv); return rv; } return 0; } const char *get_function_name2(GWEN_XMLNODE *node, const char *ftype, const char *name) { GWEN_XMLNODE *n; /* find typedef for this type */ n=node; /* get root */ while(GWEN_XMLNode_GetParent(n)) n=GWEN_XMLNode_GetParent(n); n=GWEN_XMLNode_FindFirstTag(n, "typedefs", 0, 0); if (!n) return 0; n=GWEN_XMLNode_FindFirstTag(n, "type", "id", name); if (!n) return 0; n=GWEN_XMLNode_FindFirstTag(n, "functions", 0, 0); if (n) { n=GWEN_XMLNode_FindFirstTag(n, "function", "type", ftype); if (n) return GWEN_XMLNode_GetProperty(n, "name", 0); } return 0; } const char *get_function_name(GWEN_XMLNODE *node, const char *ftype) { GWEN_XMLNODE *n; const char *name; n=GWEN_XMLNode_FindFirstTag(node, "functions", 0, 0); if (n) { n=GWEN_XMLNode_FindFirstTag(n, "function", "type", ftype); if (n) return GWEN_XMLNode_GetProperty(n, "name", 0); } name=GWEN_XMLNode_GetProperty(node, "type", 0); if (!name) { DBG_ERROR(0, "no type for element"); return 0; } /* find typedef for this type */ n=node; /* get root */ while(GWEN_XMLNode_GetParent(n)) n=GWEN_XMLNode_GetParent(n); n=GWEN_XMLNode_FindFirstTag(n, "typedefs", 0, 0); if (!n) return 0; n=GWEN_XMLNode_FindFirstTag(n, "type", "id", name); if (!n) return 0; n=GWEN_XMLNode_FindFirstTag(n, "functions", 0, 0); if (n) { n=GWEN_XMLNode_FindFirstTag(n, "function", "type", ftype); if (n) return GWEN_XMLNode_GetProperty(n, "name", 0); } return 0; } GWEN_XMLNODE *get_typedef(GWEN_XMLNODE *node, const char *name) { GWEN_XMLNODE *n; GWEN_XMLNODE *n2; assert(name); /* find typedef for this type */ n=node; /* get root */ while(GWEN_XMLNode_GetParent(n)) n=GWEN_XMLNode_GetParent(n); n2=GWEN_XMLNode_FindFirstTag(n, "typedefs", 0, 0); if (n2) n2=GWEN_XMLNode_FindFirstTag(n2, "type", "id", name); if (n2) return n2; n2=GWEN_XMLNode_FindFirstTag(n, "types", 0, 0); if (n2) n2=GWEN_XMLNode_FindFirstTag(n2, "type", "id", name); if (n2) return n2; n2=get_struct_node(node); assert(n2); n2=GWEN_XMLNode_FindFirstTag(n2, "subtypes", 0, 0); if (n2) n2=GWEN_XMLNode_FindFirstTag(n2, "type", "id", name); if (n2) return n2; return 0; } const char *get_property(GWEN_XMLNODE *node, const char *pname, const char *defval) { GWEN_XMLNODE *n; const char *name; const char *r; r=GWEN_XMLNode_GetProperty(node, pname, 0); if (r) return r; name=GWEN_XMLNode_GetProperty(node, "type", 0); if (!name) { DBG_ERROR(0, "no type for element"); return defval; } /* find typedef for this type */ n=node; /* get root */ while(GWEN_XMLNode_GetParent(n)) n=GWEN_XMLNode_GetParent(n); n=GWEN_XMLNode_FindFirstTag(n, "typedefs", 0, 0); if (!n) return defval; n=GWEN_XMLNode_FindFirstTag(n, "type", "id", name); if (!n) return defval; return GWEN_XMLNode_GetProperty(n, pname, defval); } const char *get_struct_property(GWEN_XMLNODE *node, const char *pname, const char *defval) { GWEN_XMLNODE *n; if (GWEN_XMLNode_GetType(node)==GWEN_XMLNodeTypeTag) if (strcasecmp(GWEN_XMLNode_GetData(node), "type")==0) { return GWEN_XMLNode_GetProperty(node, pname, defval); } /* find typedef for this type */ n=GWEN_XMLNode_GetParent(node); if (n) return get_struct_property(n, pname, defval); return defval; } GWEN_XMLNODE *get_struct_node(GWEN_XMLNODE *node) { while(node) { if (GWEN_XMLNode_GetType(node)==GWEN_XMLNodeTypeTag) if (strcasecmp(GWEN_XMLNode_GetData(node), "type")==0) { return node; } node=GWEN_XMLNode_GetParent(node); } return 0; } int main(int argc, char **argv) { ARGUMENTS *args; int rv; FREEPARAM *inFile; args=Arguments_new(); rv=checkArgs(args, argc, argv); if (rv==-1) { fprintf(stderr, "Parameter error\n"); return rv; } else if (rv==-2) { return 0; } GWEN_Logger_Open(0, "typemaker", args->logFile, args->logType, GWEN_LoggerFacility_User); GWEN_Logger_SetLevel(0, args->logLevel); inFile=args->params; if (!inFile) { fprintf(stderr, "No input file given.\n"); Arguments_free(args); return 1; } /* read all files */ while(inFile) { GWEN_XMLNODE *n; n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "inFile"); if (GWEN_XML_ReadFile(n, inFile->param, GWEN_XML_FLAGS_DEFAULT)) { fprintf(stderr, "ERROR: Error reading file \"%s\"\n", inFile->param); GWEN_XMLNode_free(n); return 2; } /* write file(s) */ rv=write_files(args, n); if (rv) { DBG_ERROR(0, "Error in file \"%s\"", inFile->param); GWEN_XMLNode_free(n); return 2; } GWEN_XMLNode_free(n); inFile=inFile->next; } /* while */ Arguments_free(args); return 0; } gwenhywfar-4.15.2beta/tools/typemaker/args.c0000644000175000017500000001071012364015347016006 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /* Internationalization */ #ifdef ENABLE_NLS # include # include # define I18N(m) dgettext("gwenhywfar", m) # define I18S(m) m #else # define I18N(m) m # define I18S(m) m #endif #include "args.h" #include #include #include #include ARGUMENTS *Arguments_new() { ARGUMENTS *ar; ar=(ARGUMENTS*)malloc(sizeof(ARGUMENTS)); assert(ar); memset(ar, 0, sizeof(ARGUMENTS)); ar->verbous=0; ar->logLevel=GWEN_LoggerLevel_Notice; ar->logType=GWEN_LoggerType_Console; ar->compact=0; return ar; } FREEPARAM *FreeParam_new(const char *s) { FREEPARAM *fr; fr=(FREEPARAM*)malloc(sizeof(FREEPARAM)); assert(fr); memset(fr, 0, sizeof(FREEPARAM)); fr->param=s; return fr; } void FreeParam_free(FREEPARAM *fr) { if (fr) free(fr); } void Arguments_AddParam(ARGUMENTS *ar, const char *pr) { FREEPARAM *curr; FREEPARAM *nfp; DBG_ENTER; assert(ar); assert(pr); nfp=FreeParam_new(pr); curr=ar->params; if (!curr) { ar->params=nfp; } else { /* find last */ while(curr->next) { curr=curr->next; } /* while */ curr->next=nfp; } DBG_LEAVE; } void Arguments_free(ARGUMENTS *ar) { if (ar) { FREEPARAM *fr; FREEPARAM *next; fr=ar->params; while(fr) { next=fr->next; FreeParam_free(fr); fr=next; } /* while */ free(ar); } } void usage(const char *prgname) { fprintf(stdout, "%s%s", k_PRG_VERSION_INFO "\n", I18N( "-v verbous\n" "--logfile ARG name of the logfile\n" "--logtype ARG log type\n" "--loglevel ARG log level\n" "-d ARG use ARG as domain prefix macro for function declarations\n" "-o ARG name of output file (stdout if omitted)\n" "--compact write a more compact file\n" "-V | --version print version of this tool and exit\n" ) ); } int checkArgs(ARGUMENTS *args, int argc, char **argv) { int i; i=1; while (i=argc) return RETURNVALUE_PARAM; args->logFile=argv[i]; } else if (strcmp(argv[i],"--logtype")==0) { i++; if (i>=argc) return RETURNVALUE_PARAM; args->logType=GWEN_Logger_Name2Logtype(argv[i]); if (args->logType==GWEN_LoggerType_Unknown) { fprintf(stderr, I18N("Unknown log type \"%s\"\n"), argv[i]); return RETURNVALUE_PARAM; } } else if (strcmp(argv[i],"--loglevel")==0) { i++; if (i>=argc) return RETURNVALUE_PARAM; args->logLevel=GWEN_Logger_Name2Level(argv[i]); if (args->logLevel==GWEN_LoggerLevel_Unknown) { fprintf(stderr, I18N("Unknown log level \"%s\"\n"), argv[i]); return RETURNVALUE_PARAM; } } else if (strcmp(argv[i],"-o")==0) { i++; if (i>=argc) return RETURNVALUE_PARAM; args->outputFile=argv[i]; } else if (strcmp(argv[i],"-d")==0) { i++; if (i>=argc) return RETURNVALUE_PARAM; args->domain=argv[i]; } else if (strcmp(argv[i],"--compact")==0) { args->compact=1; } else if (strcmp(argv[i],"-h")==0 || strcmp(argv[i],"--help")==0) { usage(argv[0]); return -2; } else if (strcmp(argv[i],"-V")==0 || strcmp(argv[i],"--version")==0) { fprintf(stdout, k_PRG_VERSION_INFO); return -2; } else if (strcmp(argv[i],"-v")==0) { args->verbous=1; } else { // otherwise add param if (argv[i][0]=='-') { fprintf(stderr,I18N("Unknown option \"%s\"\n"),argv[i]); return RETURNVALUE_PARAM; } else Arguments_AddParam(args, argv[i]); } i++; } /* while */ /* that's it */ return 0; } gwenhywfar-4.15.2beta/tools/typemaker/lhc.c0000644000175000017500000002715512364015347015633 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "args.h" #include "typemaker_p.h" #include #include #include #include #include #include #include #include #include #include #include #include int write_hl_file_c(ARGUMENTS *args, GWEN_XMLNODE *node) { int rv; const char *f; GWEN_BUFFER *fname; GWEN_BUFFER *hbuf; const char *s; const char *nacc; const char *constAcc; const char *constName; const char *fromDbAcc; const char *fromDbName; const char *dupAcc; const char *dupName; GWEN_SYNCIO *sio; int err; GWEN_XMLNODE *n; const char *id; const char *prefix; id=get_struct_property(node, "id", 0); if (!id) { DBG_ERROR(0, "No id for struct"); return -1; } prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix for struct"); return -1; } f=get_struct_property(node, "filename", 0); if (!f) { DBG_ERROR(0, "No filename given"); return -1; } nacc=get_struct_property(node, "access", "public"); constAcc=get_struct_property(node, "constructor-access", nacc); constName=get_struct_property(node, "constructor-name", 0); fromDbAcc=get_struct_property(node, "fromdb-access", nacc); fromDbName=get_struct_property(node, "fromdb-name", 0); dupAcc=get_struct_property(node, "dup-access", nacc); dupName=get_struct_property(node, "fromdb-name", 0); fname=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(fname, f); GWEN_Buffer_AppendString(fname, "_l.h"); sio=GWEN_SyncIo_File_new(GWEN_Buffer_GetStart(fname), GWEN_SyncIo_File_CreationMode_CreateAlways); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE | GWEN_SYNCIO_FILE_FLAGS_UREAD | GWEN_SYNCIO_FILE_FLAGS_UWRITE | GWEN_SYNCIO_FILE_FLAGS_GREAD | GWEN_SYNCIO_FILE_FLAGS_GWRITE); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_ERROR(0, "open(%s): %s", GWEN_Buffer_GetStart(fname), strerror(errno)); GWEN_Buffer_free(fname); GWEN_SyncIo_free(sio); return -1; } GWEN_Buffer_free(fname); /* Insert the auto-generation warning */ GWEN_SyncIo_WriteString(sio, "/* This file is auto-generated from \""); GWEN_SyncIo_WriteString(sio, f); GWEN_SyncIo_WriteLine(sio, ".xml\" by the typemaker"); GWEN_SyncIo_WriteLine(sio, " tool of Gwenhywfar. "); GWEN_SyncIo_WriteLine(sio, " Do not edit this file -- all changes will be lost! */"); hbuf=GWEN_Buffer_new(0, 256, 0, 1); s=f; while(*s) { GWEN_Buffer_AppendByte(hbuf, toupper(*s)); s++; } GWEN_Buffer_AppendString(hbuf, "_L_H"); GWEN_SyncIo_WriteString(sio, "#ifndef "); GWEN_SyncIo_WriteLine(sio, GWEN_Buffer_GetStart(hbuf)); GWEN_SyncIo_WriteString(sio, "#define "); GWEN_SyncIo_WriteLine(sio, GWEN_Buffer_GetStart(hbuf)); GWEN_SyncIo_WriteLine(sio, ""); rv=write_apidoc_c(args, node, sio, "lib"); if (rv) return rv; if (strcasecmp(nacc, "lib")==0) { GWEN_SyncIo_WriteLine(sio, "#ifdef __cplusplus"); GWEN_SyncIo_WriteLine(sio, "extern \"C\" {"); GWEN_SyncIo_WriteLine(sio, "#endif"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, "typedef struct "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, ";"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, "#ifdef __cplusplus"); GWEN_SyncIo_WriteLine(sio, "} /* __cplusplus */"); GWEN_SyncIo_WriteLine(sio, "#endif"); GWEN_SyncIo_WriteLine(sio, ""); } if (strcasecmp(get_struct_property(node, "inherit", ""), "lib")==0) { GWEN_SyncIo_WriteLine(sio, "#include "); } if (strcasecmp(get_struct_property(node, "list", ""), "lib")==0) { GWEN_SyncIo_WriteLine(sio, "#include "); } if (strcasecmp(get_struct_property(node, "list2", ""), "lib")==0) { GWEN_SyncIo_WriteLine(sio, "#include "); } if (strcasecmp(nacc, "public")==0) { fname=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(fname, f); GWEN_Buffer_AppendString(fname, ".h"); GWEN_SyncIo_WriteString(sio, "#include \""); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(fname)); GWEN_SyncIo_WriteLine(sio, "\""); GWEN_Buffer_free(fname); } if (strcasecmp(get_struct_property(node, "list", ""), "lib")==0) { GWEN_SyncIo_WriteLine(sio, "#include "); } if (strcasecmp(nacc, "lib")==0) { GWEN_SyncIo_WriteLine(sio, "#include "); n=GWEN_XMLNode_FindFirstTag(node, "pre-headers", 0, 0); if (n) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_GetFirstTag(n); while(nn) { rv=write_hp_group_c(args, nn, sio); if (rv) { GWEN_Buffer_free(hbuf); return -1; } nn=GWEN_XMLNode_GetNextTag(nn); } /* while */ } n=GWEN_XMLNode_FindFirstTag(node, "headers", 0, 0); if (n) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_GetFirstTag(n); while(nn) { rv=write_hp_group_c(args, nn, sio); if (rv) { GWEN_Buffer_free(hbuf); return -1; } nn=GWEN_XMLNode_GetNextTag(nn); } /* while */ } n=GWEN_XMLNode_FindFirstTag(node, "post-headers", 0, 0); if (n) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_GetFirstTag(n); while(nn) { rv=write_hp_group_c(args, nn, sio); if (rv) { GWEN_Buffer_free(hbuf); return -1; } nn=GWEN_XMLNode_GetNextTag(nn); } /* while */ } } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, "#ifdef __cplusplus"); GWEN_SyncIo_WriteLine(sio, "extern \"C\" {"); GWEN_SyncIo_WriteLine(sio, "#endif"); GWEN_SyncIo_WriteLine(sio, ""); if (write_h_enums(args, node, sio, "lib")) { DBG_ERROR(0, "Error writing enum types"); return -1; } if (write_h_funcs(args, node, sio, "lib")) { DBG_ERROR(0, "Error writing function types"); return -1; } if (strcasecmp(get_struct_property(node, "inherit", ""), "lib")==0) { GWEN_SyncIo_WriteString(sio, "GWEN_INHERIT_FUNCTION_DEFS("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, ")"); } if (strcasecmp(get_struct_property(node, "list", ""), "lib")==0) { GWEN_SyncIo_WriteString(sio, "GWEN_LIST_FUNCTION_DEFS("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, ", "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, ")"); if (dupAcc && strcasecmp(dupAcc, "none")!=0) { GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, "_LIST *"); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_List_dup(const "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, "_LIST *stl);"); GWEN_SyncIo_WriteLine(sio, ""); } } if (strcasecmp(get_struct_property(node, "list2", ""), "lib")==0) { GWEN_SyncIo_WriteString(sio, "GWEN_LIST2_FUNCTION_DEFS("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, ", "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, ")"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_List2_freeAll("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, "_LIST2 *stl);"); GWEN_SyncIo_WriteLine(sio, ""); } if (strcasecmp(constAcc, "lib")==0) { GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, " *"); GWEN_SyncIo_WriteString(sio, prefix); if (constName) GWEN_SyncIo_WriteString(sio, constName); else GWEN_SyncIo_WriteString(sio, "_new"); GWEN_SyncIo_WriteLine(sio, "(void);"); } /* FromDb */ if (strcasecmp(fromDbAcc, "lib")==0) { GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, " *"); GWEN_SyncIo_WriteString(sio, prefix); if (fromDbName) GWEN_SyncIo_WriteString(sio, fromDbName); else GWEN_SyncIo_WriteString(sio, "_fromDb"); GWEN_SyncIo_WriteLine(sio, "(GWEN_DB_NODE *db);"); } /* dup */ if (strcasecmp(dupAcc, "lib")==0) { GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, " *"); GWEN_SyncIo_WriteString(sio, prefix); if (dupName) GWEN_SyncIo_WriteString(sio, dupName); else GWEN_SyncIo_WriteString(sio, "_dup"); GWEN_SyncIo_WriteString(sio, "(const "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, "*st);"); } if (strcasecmp(nacc, "lib")==0) { GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_free("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st);"); GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Attach("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st);"); /* ReadDb */ GWEN_SyncIo_WriteString(sio, "int "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_ReadDb("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st, GWEN_DB_NODE *db);"); /* ToDb */ GWEN_SyncIo_WriteString(sio, "int "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_toDb(const "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, "*st, GWEN_DB_NODE *db);"); GWEN_SyncIo_WriteString(sio, "int "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_IsModified(const "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st);"); GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_SetModified("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st, int i);"); } rv=write_h_setget_c(args, node, sio, "lib"); if (rv) { GWEN_Buffer_free(hbuf); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, "#ifdef __cplusplus"); GWEN_SyncIo_WriteLine(sio, "} /* __cplusplus */"); GWEN_SyncIo_WriteLine(sio, "#endif"); GWEN_SyncIo_WriteLine(sio, ""); /* write trailing endif */ GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, "#endif /* "); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(hbuf)); GWEN_SyncIo_WriteLine(sio, " */"); err=GWEN_SyncIo_Disconnect(sio); if (err) { DBG_ERROR_ERR(0, err); GWEN_SyncIo_free(sio); GWEN_Buffer_free(hbuf); return -1; } GWEN_Buffer_free(hbuf); return 0; } int write_hl_files_c(ARGUMENTS *args, GWEN_XMLNODE *node) { GWEN_XMLNODE *n; int rv; n=GWEN_XMLNode_FindFirstTag(node, "type", 0, 0); while (n) { rv=write_hl_file_c(args, n); if (rv) return rv; n=GWEN_XMLNode_FindNextTag(n, "type", 0, 0); } return 0; } gwenhywfar-4.15.2beta/tools/typemaker/Makefile.in0000644000175000017500000006151112634022416016753 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = typemaker$(EXEEXT) @IS_WINDOWS_TRUE@am__append_1 = $(PROG_LIBRARIES) subdir = tools/typemaker DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(noinst_HEADERS) README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_typemaker_OBJECTS = args.$(OBJEXT) main.$(OBJEXT) phc.$(OBJEXT) \ lhc.$(OBJEXT) ahc.$(OBJEXT) code_c.$(OBJEXT) typemaker_OBJECTS = $(am_typemaker_OBJECTS) am__DEPENDENCIES_1 = @IS_WINDOWS_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) typemaker_DEPENDENCIES = \ $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(am__DEPENDENCIES_2) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = typemaker_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(typemaker_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(typemaker_SOURCES) DIST_SOURCES = $(typemaker_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = @all_includes@ -I$(gwenhywfar_symlinkdir) EXTRA_DIST = test.xml noinst_HEADERS = args.h typemaker_p.h typemaker_SOURCES = args.c main.c phc.c lhc.c ahc.c code_c.c typemaker_LDADD = $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(am__append_1) @IS_WINDOWS_TRUE@typemaker_LDFLAGS = -mconsole all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tools/typemaker/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/typemaker/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list typemaker$(EXEEXT): $(typemaker_OBJECTS) $(typemaker_DEPENDENCIES) $(EXTRA_typemaker_DEPENDENCIES) @rm -f typemaker$(EXEEXT) $(AM_V_CCLD)$(typemaker_LINK) $(typemaker_OBJECTS) $(typemaker_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ahc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/args.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/code_c.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lhc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/phc.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS sources: for f in $(typemaker_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/tools/typemaker/ahc.c0000644000175000017500000003770212364015347015617 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "args.h" #include "typemaker_p.h" #include #include #include #include #include #include #include #include #include #include #include #include int write_ha_file_c(ARGUMENTS *args, GWEN_XMLNODE *node) { int rv; const char *f; GWEN_BUFFER *fname; GWEN_BUFFER *hbuf; const char *s; const char *nacc; const char *constAcc; const char *constName; const char *fromDbAcc; const char *fromDbName; const char *dupAcc; const char *dupName; GWEN_SYNCIO *sio; int err; GWEN_XMLNODE *n; const char *id; const char *prefix; id=get_struct_property(node, "id", 0); if (!id) { DBG_ERROR(0, "No id for struct"); return -1; } prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix for struct"); return -1; } f=get_struct_property(node, "filename", 0); if (!f) { DBG_ERROR(0, "No filename given"); return -1; } nacc=get_struct_property(node, "access", "public"); constAcc=get_struct_property(node, "constructor-access", nacc); constName=get_struct_property(node, "constructor-name", 0); fromDbAcc=get_struct_property(node, "fromdb-access", nacc); fromDbName=get_struct_property(node, "fromdb-name", 0); dupAcc=get_struct_property(node, "dup-access", nacc); dupName=get_struct_property(node, "fromdb-name", 0); fname=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(fname, f); GWEN_Buffer_AppendString(fname, ".h"); sio=GWEN_SyncIo_File_new(GWEN_Buffer_GetStart(fname), GWEN_SyncIo_File_CreationMode_CreateAlways); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE | GWEN_SYNCIO_FILE_FLAGS_UREAD | GWEN_SYNCIO_FILE_FLAGS_UWRITE | GWEN_SYNCIO_FILE_FLAGS_GREAD | GWEN_SYNCIO_FILE_FLAGS_GWRITE); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_ERROR(0, "open(%s): %s", GWEN_Buffer_GetStart(fname), strerror(errno)); GWEN_Buffer_free(fname); GWEN_SyncIo_free(sio); return -1; } GWEN_Buffer_free(fname); /* Insert the auto-generation warning */ GWEN_SyncIo_WriteString(sio, "/* This file is auto-generated from \""); GWEN_SyncIo_WriteString(sio, f); GWEN_SyncIo_WriteLine(sio, ".xml\" by the typemaker"); GWEN_SyncIo_WriteLine(sio, " tool of Gwenhywfar. "); GWEN_SyncIo_WriteLine(sio, " Do not edit this file -- all changes will be lost! */"); hbuf=GWEN_Buffer_new(0, 256, 0, 1); s=f; while(*s) { GWEN_Buffer_AppendByte(hbuf, toupper(*s)); s++; } GWEN_Buffer_AppendString(hbuf, "_H"); GWEN_SyncIo_WriteString(sio, "#ifndef "); GWEN_SyncIo_WriteLine(sio, GWEN_Buffer_GetStart(hbuf)); GWEN_SyncIo_WriteString(sio, "#define "); GWEN_SyncIo_WriteLine(sio, GWEN_Buffer_GetStart(hbuf)); GWEN_SyncIo_WriteLine(sio, ""); rv=write_apidoc_c(args, node, sio, "public"); if (rv) { DBG_INFO(0, "here (%d)", rv); return rv; } if (strcasecmp(nacc, "public")==0) { GWEN_SyncIo_WriteLine(sio, "#ifdef __cplusplus"); GWEN_SyncIo_WriteLine(sio, "extern \"C\" {"); GWEN_SyncIo_WriteLine(sio, "#endif"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, "typedef struct "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, ";"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, "#ifdef __cplusplus"); GWEN_SyncIo_WriteLine(sio, "} /* __cplusplus */"); GWEN_SyncIo_WriteLine(sio, "#endif"); GWEN_SyncIo_WriteLine(sio, ""); } GWEN_SyncIo_WriteLine(sio, "#include "); if (strcasecmp(get_struct_property(node, "inherit", ""), "public")==0) { GWEN_SyncIo_WriteLine(sio, "#include "); } if (strcasecmp(get_struct_property(node, "list", ""), "public")==0) { GWEN_SyncIo_WriteLine(sio, "#include "); } if (strcasecmp(get_struct_property(node, "list2", ""), "public")==0) { GWEN_SyncIo_WriteLine(sio, "#include "); } n=GWEN_XMLNode_FindFirstTag(node, "pre-headers", 0, 0); if (n) { GWEN_XMLNODE *nn; GWEN_SyncIo_WriteLine(sio, "/* pre-headers */"); nn=GWEN_XMLNode_GetFirstTag(n); while(nn) { rv=write_hp_group_c(args, nn, sio); if (rv) { GWEN_Buffer_free(hbuf); return -1; } nn=GWEN_XMLNode_GetNextTag(nn); } /* while */ GWEN_SyncIo_WriteLine(sio, ""); } n=GWEN_XMLNode_FindFirstTag(node, "headers", 0, 0); if (n) { GWEN_XMLNODE *nn; GWEN_SyncIo_WriteLine(sio, "/* headers */"); nn=GWEN_XMLNode_GetFirstTag(n); while(nn) { rv=write_hp_group_c(args, nn, sio); if (rv) { GWEN_Buffer_free(hbuf); DBG_INFO(0, "here (%d)", rv); return -1; } nn=GWEN_XMLNode_GetNextTag(nn); } /* while */ GWEN_SyncIo_WriteLine(sio, ""); } GWEN_SyncIo_WriteLine(sio, "#ifdef __cplusplus"); GWEN_SyncIo_WriteLine(sio, "extern \"C\" {"); GWEN_SyncIo_WriteLine(sio, "#endif"); GWEN_SyncIo_WriteLine(sio, ""); if (write_h_enums(args, node, sio, "public")) { DBG_ERROR(0, "Error writing enum types"); return -1; } if (write_h_funcs(args, node, sio, "public")) { DBG_ERROR(0, "Error writing function types"); return -1; } if (strcasecmp(get_struct_property(node, "inherit", ""), "public")==0) { if (args->domain) GWEN_SyncIo_WriteString(sio, "GWEN_INHERIT_FUNCTION_LIB_DEFS("); else GWEN_SyncIo_WriteString(sio, "GWEN_INHERIT_FUNCTION_DEFS("); GWEN_SyncIo_WriteString(sio, id); if (args->domain) { GWEN_SyncIo_WriteString(sio, ", "); GWEN_SyncIo_WriteString(sio, args->domain); } GWEN_SyncIo_WriteLine(sio, ")"); } if (strcasecmp(get_struct_property(node, "list", ""), "public")==0) { if (args->domain) GWEN_SyncIo_WriteString(sio, "GWEN_LIST_FUNCTION_LIB_DEFS("); else GWEN_SyncIo_WriteString(sio, "GWEN_LIST_FUNCTION_DEFS("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, ", "); GWEN_SyncIo_WriteString(sio, prefix); if (args->domain) { GWEN_SyncIo_WriteString(sio, ", "); GWEN_SyncIo_WriteString(sio, args->domain); } GWEN_SyncIo_WriteLine(sio, ")"); if (dupAcc && strcasecmp(dupAcc, "none")!=0) { if (args->domain) { GWEN_SyncIo_WriteString(sio, args->domain); GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, "_LIST *"); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_List_dup(const "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, "_LIST *stl);"); GWEN_SyncIo_WriteLine(sio, ""); } } if (strcasecmp(get_struct_property(node, "list2", ""), "public")==0) { if (args->domain) GWEN_SyncIo_WriteString(sio, "GWEN_LIST2_FUNCTION_LIB_DEFS("); else GWEN_SyncIo_WriteString(sio, "GWEN_LIST2_FUNCTION_DEFS("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, ", "); GWEN_SyncIo_WriteString(sio, prefix); if (args->domain) { GWEN_SyncIo_WriteString(sio, ", "); GWEN_SyncIo_WriteString(sio, args->domain); } GWEN_SyncIo_WriteLine(sio, ")"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, "/** Destroys all objects stored in the given " "LIST2 and the list itself"); GWEN_SyncIo_WriteLine(sio, "*/"); if (args->domain) { GWEN_SyncIo_WriteString(sio, args->domain); GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_List2_freeAll("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, "_LIST2 *stl);"); GWEN_SyncIo_WriteLine(sio, ""); } n=GWEN_XMLNode_FindFirstTag(node, "post-headers", 0, 0); if (n) { GWEN_XMLNODE *nn; GWEN_SyncIo_WriteLine(sio, "/* post-headers */"); nn=GWEN_XMLNode_GetFirstTag(n); while(nn) { rv=write_hp_group_c(args, nn, sio); if (rv) { GWEN_Buffer_free(hbuf); DBG_INFO(0, "here (%d)", rv); return -1; } nn=GWEN_XMLNode_GetNextTag(nn); } /* while */ GWEN_SyncIo_WriteLine(sio, ""); } if (strcasecmp(constAcc, "public")==0) { GWEN_SyncIo_WriteLine(sio, "/** Creates a new object."); GWEN_SyncIo_WriteLine(sio, "*/"); if (args->domain) { GWEN_SyncIo_WriteString(sio, args->domain); GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, " *"); GWEN_SyncIo_WriteString(sio, prefix); if (constName) GWEN_SyncIo_WriteString(sio, constName); else GWEN_SyncIo_WriteString(sio, "_new"); GWEN_SyncIo_WriteLine(sio, "(void);"); } /* FromDb */ if (strcasecmp(fromDbAcc, "public")==0) { GWEN_SyncIo_WriteLine(sio, "/** Creates an object from the data in the" " given GWEN_DB_NODE"); GWEN_SyncIo_WriteLine(sio, "*/"); if (args->domain) { GWEN_SyncIo_WriteString(sio, args->domain); GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, " *"); GWEN_SyncIo_WriteString(sio, prefix); if (fromDbName) GWEN_SyncIo_WriteString(sio, fromDbName); else GWEN_SyncIo_WriteString(sio, "_fromDb"); GWEN_SyncIo_WriteLine(sio, "(GWEN_DB_NODE *db);"); } /* dup */ if (strcasecmp(dupAcc, "public")==0) { GWEN_SyncIo_WriteLine(sio, "/** Creates and returns a deep copy of the" "given object."); GWEN_SyncIo_WriteLine(sio, "*/"); if (args->domain) { GWEN_SyncIo_WriteString(sio, args->domain); GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, " *"); GWEN_SyncIo_WriteString(sio, prefix); if (dupName) GWEN_SyncIo_WriteString(sio, dupName); else GWEN_SyncIo_WriteString(sio, "_dup"); GWEN_SyncIo_WriteString(sio, "(const "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, "*st);"); } if (strcasecmp(nacc, "public")==0) { GWEN_SyncIo_WriteLine(sio, "/** Destroys the given object."); GWEN_SyncIo_WriteLine(sio, "*/"); if (args->domain) { GWEN_SyncIo_WriteString(sio, args->domain); GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_free("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st);"); GWEN_SyncIo_WriteLine(sio, "/** Increments the usage counter of the " "given object, so an additional free() is" " needed to destroy the object."); GWEN_SyncIo_WriteLine(sio, "*/"); if (args->domain) { GWEN_SyncIo_WriteString(sio, args->domain); GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Attach("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st);"); /* ReadDb */ GWEN_SyncIo_WriteLine(sio, "/** Reads data from a GWEN_DB."); GWEN_SyncIo_WriteLine(sio, "*/"); if (args->domain) { GWEN_SyncIo_WriteString(sio, args->domain); GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteString(sio, "int "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_ReadDb("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st, GWEN_DB_NODE *db);"); /* ToDb */ GWEN_SyncIo_WriteLine(sio, "/** Stores an object in the" " given GWEN_DB_NODE"); GWEN_SyncIo_WriteLine(sio, "*/"); if (args->domain) { GWEN_SyncIo_WriteString(sio, args->domain); GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteString(sio, "int "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_toDb(const "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, "*st, GWEN_DB_NODE *db);"); GWEN_SyncIo_WriteLine(sio, "/** Returns 0 if this object has not been" " modified, !=0 otherwise"); GWEN_SyncIo_WriteLine(sio, "*/"); if (args->domain) { GWEN_SyncIo_WriteString(sio, args->domain); GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteString(sio, "int "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_IsModified(const "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st);"); GWEN_SyncIo_WriteLine(sio, "/** Sets the modified state of the given " "object"); GWEN_SyncIo_WriteLine(sio, "*/"); if (args->domain) { GWEN_SyncIo_WriteString(sio, args->domain); GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_SetModified("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st, int i);"); } rv=write_h_setget_c(args, node, sio, "public"); if (rv) { GWEN_Buffer_free(hbuf); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); DBG_INFO(0, "here (%d)", rv); return rv; } err=GWEN_SyncIo_WriteLine(sio, ""); if (err) { DBG_ERROR_ERR(0, err); GWEN_Buffer_free(hbuf); return -1; } err=GWEN_SyncIo_WriteLine(sio, "#ifdef __cplusplus"); if (err) { DBG_ERROR_ERR(0, err); GWEN_Buffer_free(hbuf); return -1; } err=GWEN_SyncIo_WriteLine(sio, "} /* __cplusplus */"); if (err) { DBG_ERROR_ERR(0, err); GWEN_Buffer_free(hbuf); return -1; } err=GWEN_SyncIo_WriteLine(sio, "#endif"); if (err) { DBG_ERROR_ERR(0, err); GWEN_Buffer_free(hbuf); return -1; } err=GWEN_SyncIo_WriteLine(sio, ""); if (err) { DBG_ERROR_ERR(0, err); GWEN_Buffer_free(hbuf); return -1; } /* write trailing endif */ err=GWEN_SyncIo_WriteLine(sio, ""); if (err) { DBG_ERROR_ERR(0, err); GWEN_Buffer_free(hbuf); return -1; } err=GWEN_SyncIo_WriteString(sio, "#endif /* "); if (err) { DBG_ERROR_ERR(0, err); GWEN_Buffer_free(hbuf); return -1; } err=GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(hbuf)); if (err) { DBG_ERROR_ERR(0, err); GWEN_Buffer_free(hbuf); return -1; } err=GWEN_SyncIo_WriteLine(sio, " */"); if (err) { DBG_ERROR_ERR(0, err); GWEN_Buffer_free(hbuf); return -1; } err=GWEN_SyncIo_Disconnect(sio); if (err) { DBG_ERROR_ERR(0, err); GWEN_SyncIo_free(sio); GWEN_Buffer_free(hbuf); return -1; } GWEN_Buffer_free(hbuf); return 0; } int write_ha_files_c(ARGUMENTS *args, GWEN_XMLNODE *node) { GWEN_XMLNODE *n; int rv; n=GWEN_XMLNode_FindFirstTag(node, "type", 0, 0); while (n) { const char *nacc; nacc=get_struct_property(n, "access", "public"); if (strcasecmp(nacc, "public")==0) { rv=write_ha_file_c(args, n); if (rv) { DBG_INFO(0, "here (%d)", rv); return rv; } } n=GWEN_XMLNode_FindNextTag(n, "type", 0, 0); } return 0; } gwenhywfar-4.15.2beta/tools/typemaker/Makefile.am0000644000175000017500000000100212364015347016734 00000000000000INCLUDES=@all_includes@ -I$(gwenhywfar_symlinkdir) EXTRA_DIST=test.xml bin_PROGRAMS=typemaker noinst_HEADERS=args.h typemaker_p.h typemaker_SOURCES=args.c main.c phc.c lhc.c ahc.c code_c.c typemaker_LDADD=$(top_builddir)/src/$(gwenhywfar_internal_libname) if IS_WINDOWS typemaker_LDFLAGS=-mconsole typemaker_LDADD+= $(PROG_LIBRARIES) endif sources: for f in $(typemaker_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-4.15.2beta/tools/typemaker/args.h0000644000175000017500000000313612364015347016017 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef XMLMERGE_ARGS_H #define XMLMERGE_ARGS_H #include #define k_PRG "xmlmerge" #define k_PRG_VERSION_INFO \ "xmlmerge v0.1\n"\ "(c) 2004 Martin Preuss\n"\ "This program is free software licensed under GPL.\n"\ "See COPYING for details.\n" #define RETURNVALUE_PARAM 1 #define RETURNVALUE_SETUP 2 #define RETURNVALUE_NOSTART 3 #define RETURNVALUE_DEINIT 4 #define RETURNVALUE_HANGUP 9 typedef struct _S_PARAM FREEPARAM; typedef struct _S_ARGS ARGUMENTS; struct _S_PARAM { FREEPARAM *next; const char *param; }; struct _S_ARGS { FREEPARAM *params; int verbous; /* -v */ char *logFile; /* --logfile ARG */ GWEN_LOGGER_LOGTYPE logType; /* --logtype ARG */ GWEN_LOGGER_LEVEL logLevel; /* --loglevel ARG */ const char *outputFile; /* -o ARG */ const char *domain; /* -d ARG */ int compact; /* --compact */ }; ARGUMENTS *Arguments_new(); void Arguments_free(ARGUMENTS *ar); int checkArgs(ARGUMENTS *args, int argc, char **argv); #endif /* XMLMERGE_ARGS_H */ gwenhywfar-4.15.2beta/tools/typemaker/typemaker_p.h0000644000175000017500000001014012364015347017374 00000000000000 #ifndef TYPEMAKER_P_H #define TYPEMAKER_P_H #include int write_xml_to_bio(GWEN_XMLNODE *n, GWEN_SYNCIO *sio, uint32_t flags); int write_hp_group_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_hp_file_c(ARGUMENTS *args, GWEN_XMLNODE *node); int write_h_setget_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *acc); int write_h_header(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *where); int write_h_enums(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *acc); int write_h_funcs(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *acc); int write_c_enums(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_h_elem_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_h_func_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_h_struct_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_hp_group_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_hp_file_c(ARGUMENTS *args, GWEN_XMLNODE *node); int write_hp_files_c(ARGUMENTS *args, GWEN_XMLNODE *node); int write_hl_file_c(ARGUMENTS *args, GWEN_XMLNODE *node); int write_hl_files_c(ARGUMENTS *args, GWEN_XMLNODE *node); int write_ha_file_c(ARGUMENTS *args, GWEN_XMLNODE *node); int write_ha_files_c(ARGUMENTS *args, GWEN_XMLNODE *node); int write_code_const_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_code_setget_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_code_file_c(ARGUMENTS *args, GWEN_XMLNODE *node); int write_code_files_c(ARGUMENTS *args, GWEN_XMLNODE *node); int write_code_freeElem_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_code_freeElems_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_code_dupArg_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *param); int write_code_dupList_c(ARGUMENTS *args, GWEN_XMLNODE *n, GWEN_SYNCIO *sio, const char *listName); int write_code_dup_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_code_todb_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_code_todbArg_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_code_fromdbArg_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_code_fromdb_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_code_readdb_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); const char *get_function_name(GWEN_XMLNODE *node, const char *ftype); const char *get_function_name2(GWEN_XMLNODE *node, const char *ftype, const char *name); GWEN_XMLNODE *get_typedef(GWEN_XMLNODE *node, const char *name); int write_code_builtin_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); const char *get_property(GWEN_XMLNODE *node, const char *pname, const char *defval); const char *get_struct_property(GWEN_XMLNODE *node, const char *pname, const char *defval); GWEN_XMLNODE *get_struct_node(GWEN_XMLNODE *node); int write_apidoc_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *acc); #endif gwenhywfar-4.15.2beta/tools/typemaker/README0000644000175000017500000000160212364015347015566 00000000000000 This tool generates source and header files for simple data containers from XML files. It creates fromDb and toDb functions for structs and getters and setters for any member. This makes it easier to maintain data containers with many members (as in AB_TRANSACTION). A member you add to the XML file will immidiately be loaded, saved, destroyed and copied with the rest of the struct upon request (e.g. _fromDb() will load all members from a GWEN_DB). The current version creates a C file and headers for it. Maybe I will later write code to create C++ files as well. It also creates appropriate API documentation if provided with the source XML file. Usage: typemaker [-d DOMAIN] infile1 infile2 [...] infileN Domain is the name of the API, e.g. for AqBanking you would choose AQBANKING_API, for Gwen GWENHYWFAR_API etc. This is used with the list and heritage macros. Martin Preuss gwenhywfar-4.15.2beta/tools/xmlmerge/0000755000175000017500000000000012643267240014607 500000000000000gwenhywfar-4.15.2beta/tools/xmlmerge/main.c0000644000175000017500000001301512364015347015616 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /* Internationalization */ #ifdef ENABLE_NLS # include # include # define I18N(m) dgettext("gwenhywfar", m) # define I18S(m) m #else # define I18N(m) m # define I18S(m) m #endif #include "args.h" #include #include #include #include #include #include #include #include #include #include #include #include int addDefinitions(GWEN_XMLNODE *top, GWEN_XMLNODE *node) { GWEN_XMLNODE *nsrc, *ndst; assert(top); assert(node); nsrc=GWEN_XMLNode_GetChild(node); while(nsrc) { if (GWEN_XMLNode_GetType(nsrc)==GWEN_XMLNodeTypeTag) { ndst=GWEN_XMLNode_FindNode(top, GWEN_XMLNodeTypeTag, GWEN_XMLNode_GetData(nsrc)); if (ndst) { GWEN_XMLNODE *n; n=GWEN_XMLNode_GetChild(nsrc); while (n) { GWEN_XMLNODE *newNode; DBG_DEBUG(0, "Adding node \"%s\"", GWEN_XMLNode_GetData(n)); newNode=GWEN_XMLNode_dup(n); GWEN_XMLNode_AddChild(ndst, newNode); n=GWEN_XMLNode_Next(n); } /* while n */ } else { GWEN_XMLNODE *newNode; DBG_DEBUG(0, "Adding branch \"%s\"", GWEN_XMLNode_GetData(nsrc)); newNode=GWEN_XMLNode_dup(nsrc); GWEN_XMLNode_AddChild(top, newNode); } } /* if TAG */ nsrc=GWEN_XMLNode_Next(nsrc); } /* while */ return 0; } int main(int argc, char **argv) { ARGUMENTS *args; int rv; FREEPARAM *inFile; GWEN_XMLNODE *top; GWEN_XMLNODE *comment; GWEN_SYNCIO *sio; GWEN_XML_CONTEXT *ctx; uint32_t flags; rv=GWEN_Init(); if (rv) { fprintf(stderr, "Could not initialize Gwenhywfar.\n"); return 2; } args=Arguments_new(); rv=checkArgs(args, argc, argv); if (rv==-1) { fprintf(stderr, "Parameter error\n"); return rv; } else if (rv==-2) { return 0; } GWEN_Logger_Open(0, "xmlmerge", args->logFile, args->logType, GWEN_LoggerFacility_User); GWEN_Logger_SetLevel(0, args->logLevel); inFile=args->params; if (!inFile) { fprintf(stderr, "No input file given.\n"); Arguments_free(args); return 1; } top=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); /* add comment */ comment=GWEN_XMLNode_new(GWEN_XMLNodeTypeComment, "This is an automatically generated file, " "do not edit"); GWEN_XMLNode_AddChild(top, comment); /* add header */ if (args->header) { GWEN_XMLNODE *header; header=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "?xml"); GWEN_XMLNode_SetProperty(header, "version", "1.0"); GWEN_XMLNode_SetProperty(header, "encoding", "utf8"); GWEN_XMLNode_AddHeader(top, header); } /* read all files */ while(inFile) { GWEN_XMLNODE *n; n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "inFile"); if (GWEN_XML_ReadFile(n, inFile->param, GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_HANDLE_HEADERS)) { fprintf(stderr, "ERROR: Error reading file \"%s\"\n", inFile->param); GWEN_XMLNode_free(n); GWEN_XMLNode_free(top); return 2; } if (addDefinitions(top, n)) { fprintf(stderr, "ERROR: Error merging file \"%s\"\n", inFile->param); GWEN_XMLNode_free(n); GWEN_XMLNode_free(top); return 3; } GWEN_XMLNode_free(n); inFile=inFile->next; } /* while */ /* write file */ if (args->compact) { flags=GWEN_XML_FLAGS_SIMPLE; } else { flags=GWEN_XML_FLAGS_INDENT; } flags|=GWEN_XML_FLAGS_HANDLE_HEADERS; ctx=GWEN_XmlCtxStore_new(NULL, flags); sio=GWEN_SyncIo_File_new(args->outputFile, GWEN_SyncIo_File_CreationMode_CreateAlways); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE | GWEN_SYNCIO_FILE_FLAGS_UREAD | GWEN_SYNCIO_FILE_FLAGS_UWRITE | GWEN_SYNCIO_FILE_FLAGS_GREAD | GWEN_SYNCIO_FILE_FLAGS_GWRITE); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { fprintf(stderr, "Error opening file \"%s\": %s\n", args->outputFile, strerror(errno)); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); GWEN_XmlCtx_free(ctx); return 5; } rv=GWEN_XMLNode_WriteToStream(top, ctx, sio); if (rv<0) { fprintf(stderr, "Error writing to file \"%s\": %s\n", args->outputFile, strerror(errno)); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); GWEN_XmlCtx_free(ctx); return 5; } /* close file */ rv=GWEN_SyncIo_Disconnect(sio); if (rv<0) { fprintf(stderr, "Error closing output stream (%d)\n", rv); DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); GWEN_XmlCtx_free(ctx); return 5; } GWEN_SyncIo_free(sio); GWEN_XmlCtx_free(ctx); GWEN_XMLNode_free(top); Arguments_free(args); return 0; } gwenhywfar-4.15.2beta/tools/xmlmerge/args.c0000644000175000017500000001063112364015347015627 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /* Internationalization */ #ifdef ENABLE_NLS # include # include # define I18N(m) dgettext("gwenhywfar", m) # define I18S(m) m #else # define I18N(m) m # define I18S(m) m #endif #include "args.h" #include #include #include #include ARGUMENTS *Arguments_new() { ARGUMENTS *ar; ar=(ARGUMENTS*)malloc(sizeof(ARGUMENTS)); assert(ar); memset(ar, 0, sizeof(ARGUMENTS)); ar->verbous=0; ar->logLevel=GWEN_LoggerLevel_Notice; ar->logType=GWEN_LoggerType_Console; ar->compact=0; ar->header=0; return ar; } FREEPARAM *FreeParam_new(const char *s) { FREEPARAM *fr; fr=(FREEPARAM*)malloc(sizeof(FREEPARAM)); assert(fr); memset(fr, 0, sizeof(FREEPARAM)); fr->param=s; return fr; } void FreeParam_free(FREEPARAM *fr) { if (fr) free(fr); } void Arguments_AddParam(ARGUMENTS *ar, const char *pr) { FREEPARAM *curr; FREEPARAM *nfp; DBG_ENTER; assert(ar); assert(pr); nfp=FreeParam_new(pr); curr=ar->params; if (!curr) { ar->params=nfp; } else { /* find last */ while(curr->next) { curr=curr->next; } /* while */ curr->next=nfp; } DBG_LEAVE; } void Arguments_free(ARGUMENTS *ar) { if (ar) { FREEPARAM *fr; FREEPARAM *next; fr=ar->params; while(fr) { next=fr->next; FreeParam_free(fr); fr=next; } /* while */ free(ar); } } void usage(const char *prgname) { fprintf(stdout, "%s%s", k_PRG_VERSION_INFO "\n", I18N( "-v verbous\n" "--logfile ARG name of the logfile\n" "--logtype ARG log type\n" "--loglevel ARG log level\n" "-o ARG name of output file (stdout if omitted)\n" "--compact write a more compact file\n" ) ); } int checkArgs(ARGUMENTS *args, int argc, char **argv) { int i; i=1; while (i=argc) return RETURNVALUE_PARAM; args->logFile=argv[i]; } else if (strcmp(argv[i],"--logtype")==0) { i++; if (i>=argc) return RETURNVALUE_PARAM; args->logType=GWEN_Logger_Name2Logtype(argv[i]); if (args->logType==GWEN_LoggerType_Unknown) { fprintf(stderr, I18N("Unknown log type \"%s\"\n"), argv[i]); return RETURNVALUE_PARAM; } } else if (strcmp(argv[i],"--loglevel")==0) { i++; if (i>=argc) return RETURNVALUE_PARAM; args->logLevel=GWEN_Logger_Name2Level(argv[i]); if (args->logLevel==GWEN_LoggerLevel_Unknown) { fprintf(stderr, I18N("Unknown log level \"%s\"\n"), argv[i]); return RETURNVALUE_PARAM; } } else if (strcmp(argv[i],"-o")==0) { i++; if (i>=argc) return RETURNVALUE_PARAM; args->outputFile=argv[i]; } else if (strcmp(argv[i],"--compact")==0) { args->compact=1; } else if (strcmp(argv[i],"--header")==0) { args->header=1; } else if (strcmp(argv[i],"-h")==0 || strcmp(argv[i],"--help")==0) { usage(argv[0]); return -2; } else if (strcmp(argv[i],"-V")==0 || strcmp(argv[i],"--version")==0) { fprintf(stdout, k_PRG_VERSION_INFO); return -2; } else if (strcmp(argv[i],"-v")==0) { args->verbous=1; } else { /* otherwise add param */ if (argv[i][0]=='-') { fprintf(stderr,I18N("Unknown option \"%s\"\n"),argv[i]); return RETURNVALUE_PARAM; } else Arguments_AddParam(args, argv[i]); } i++; } /* while */ if (args->outputFile==NULL) { fprintf(stderr, "%s\n", I18N("Please specify the name of the output file.")); return RETURNVALUE_PARAM; } /* that's it */ return 0; } gwenhywfar-4.15.2beta/tools/xmlmerge/Makefile.in0000644000175000017500000006063612634022417016602 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = xmlmerge$(EXEEXT) @IS_WINDOWS_TRUE@am__append_1 = $(PROG_LIBRARIES) subdir = tools/xmlmerge DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_xmlmerge_OBJECTS = args.$(OBJEXT) main.$(OBJEXT) xmlmerge_OBJECTS = $(am_xmlmerge_OBJECTS) am__DEPENDENCIES_1 = @IS_WINDOWS_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) xmlmerge_DEPENDENCIES = \ $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(am__DEPENDENCIES_2) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = xmlmerge_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(xmlmerge_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(xmlmerge_SOURCES) DIST_SOURCES = $(xmlmerge_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = @all_includes@ -I$(gwenhywfar_symlinkdir) noinst_HEADERS = args.h xmlmerge_SOURCES = args.c main.c xmlmerge_LDADD = $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(am__append_1) @IS_WINDOWS_TRUE@xmlmerge_LDFLAGS = -mconsole all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tools/xmlmerge/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/xmlmerge/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list xmlmerge$(EXEEXT): $(xmlmerge_OBJECTS) $(xmlmerge_DEPENDENCIES) $(EXTRA_xmlmerge_DEPENDENCIES) @rm -f xmlmerge$(EXEEXT) $(AM_V_CCLD)$(xmlmerge_LINK) $(xmlmerge_OBJECTS) $(xmlmerge_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/args.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS sources: for f in $(xmlmerge_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/tools/xmlmerge/Makefile.am0000644000175000017500000000067412364015347016571 00000000000000INCLUDES=@all_includes@ -I$(gwenhywfar_symlinkdir) bin_PROGRAMS=xmlmerge noinst_HEADERS=args.h xmlmerge_SOURCES=args.c main.c xmlmerge_LDADD=$(top_builddir)/src/$(gwenhywfar_internal_libname) if IS_WINDOWS xmlmerge_LDFLAGS=-mconsole xmlmerge_LDADD+=$(PROG_LIBRARIES) endif sources: for f in $(xmlmerge_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-4.15.2beta/tools/xmlmerge/args.h0000644000175000017500000000314012364015347015631 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef XMLMERGE_ARGS_H #define XMLMERGE_ARGS_H #include #define k_PRG "xmlmerge" #define k_PRG_VERSION_INFO \ "xmlmerge v0.1\n"\ "(c) 2004 Martin Preuss\n"\ "This program is free software licensed under GPL.\n"\ "See COPYING for details.\n" #define RETURNVALUE_PARAM 1 #define RETURNVALUE_SETUP 2 #define RETURNVALUE_NOSTART 3 #define RETURNVALUE_DEINIT 4 #define RETURNVALUE_HANGUP 9 typedef struct _S_PARAM FREEPARAM; typedef struct _S_ARGS ARGUMENTS; struct _S_PARAM { FREEPARAM *next; const char *param; }; struct _S_ARGS { FREEPARAM *params; int verbous; /* -v */ char *logFile; /* --logfile ARG */ GWEN_LOGGER_LOGTYPE logType; /* --logtype ARG */ GWEN_LOGGER_LEVEL logLevel; /* --loglevel ARG */ const char *outputFile; /* -o ARG */ int compact; /* --compact */ int header; /* --header */ }; ARGUMENTS *Arguments_new(); void Arguments_free(ARGUMENTS *ar); int checkArgs(ARGUMENTS *args, int argc, char **argv); #endif /* XMLMERGE_ARGS_H */ gwenhywfar-4.15.2beta/tools/gsa/0000755000175000017500000000000012643267241013542 500000000000000gwenhywfar-4.15.2beta/tools/gsa/main.c0000644000175000017500000001344612364015347014560 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2005-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define GSA_IS_EXPERIMENTAL #define DEBUG_GSA_TOOL */ #include #include #include "globals.h" int readFile(const char *fname, GWEN_BUFFER *dbuf) { FILE *f; f=fopen(fname, "rb"); if (f) { while(!feof(f)) { uint32_t l; ssize_t s; char *p; GWEN_Buffer_AllocRoom(dbuf, 1024); l=GWEN_Buffer_GetMaxUnsegmentedWrite(dbuf); p=GWEN_Buffer_GetPosPointer(dbuf); s=fread(p, 1, l, f); if (s==0) break; if (s==(ssize_t)-1) { DBG_INFO(GWEN_LOGDOMAIN, "fread(%s): %s", fname, strerror(errno)); fclose(f); return GWEN_ERROR_IO; } GWEN_Buffer_IncrementPos(dbuf, s); GWEN_Buffer_AdjustUsedBytes(dbuf); } fclose(f); return 0; } else { DBG_INFO(GWEN_LOGDOMAIN, "fopen(%s): %s", fname, strerror(errno)); return GWEN_ERROR_IO; } } int main(int argc, char **argv) { GWEN_DB_NODE *db; const char *cmd; int rv; int err; GWEN_GUI *gui; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; err=GWEN_Init(); if (err) { fprintf(stderr, "Could not initialize Gwenhywfar.\n"); return 2; } gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); GWEN_Logger_Open(GSA_LOGDOMAIN, "gsa", 0, GWEN_LoggerType_Console, GWEN_LoggerFacility_User); GWEN_Logger_SetLevel(GSA_LOGDOMAIN, GWEN_LoggerLevel_Warning); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Warning); #ifdef GSA_IS_EXPERIMENTAL fprintf(stderr, "\n"); fprintf(stderr, "\n"); fprintf(stderr, "=================== WARNING ===================\n"); fprintf(stderr, "This tool is still EXPERIMENTAL !!!\n"); fprintf(stderr, "Please DON'T USE it with your data files !\n"); fprintf(stderr, "===============================================\n"); fprintf(stderr, "\n"); fprintf(stderr, "\n"); #endif db=GWEN_DB_Group_new("arguments"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM | GWEN_ARGS_MODE_STOP_AT_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments main\n"); return -1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); GWEN_Buffer_AppendString(ubuf, I18N("GWEN's Simple Archiver")); GWEN_Buffer_AppendString(ubuf, " (Gwenhywfar v" GWENHYWFAR_VERSION_FULL_STRING ")\n"); GWEN_Buffer_AppendString(ubuf, I18N("Usage: ")); GWEN_Buffer_AppendString(ubuf, argv[0]); GWEN_Buffer_AppendString(ubuf, I18N(" [GLOBAL OPTIONS] COMMAND " "[LOCAL OPTIONS]\n")); GWEN_Buffer_AppendString(ubuf, I18N("\nGlobal Options:\n")); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } GWEN_Buffer_AppendString(ubuf, I18N("\nCommands:\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" create:\n" " This command creates an archive file" "\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" add:\n" " Add files and folders to an archive file\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" list:\n" " List files and folders in an archive file\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" check:\n" " Check integrity of files and folders in an archive file\n\n")); fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } if (rv) { argc-=rv-1; argv+=rv-1; } cmd=GWEN_DB_GetCharValue(db, "params", 0, 0); if (!cmd) { fprintf(stderr, "ERROR: Command needed.\n"); return 1; } if (strcasecmp(cmd, "create")==0) { rv=createArchive(db, argc, argv); } else if (strcasecmp(cmd, "add")==0) { rv=add2Archive(db, argc, argv); } else if (strcasecmp(cmd, "list")==0) { rv=listArchive(db, argc, argv); } else if (strcasecmp(cmd, "check")==0) { rv=checkArchive(db, argc, argv); } else if (strcasecmp(cmd, "extract")==0) { rv=extractArchive(db, argc, argv); } else if (strcasecmp(cmd, "sign")==0) { rv=signArchive(db, argc, argv); } else if (strcasecmp(cmd, "verify")==0) { rv=verifyArchive(db, argc, argv); } else if (strcasecmp(cmd, "mkkey")==0) { rv=mkArchiveKey(db, argc, argv); } else if (strcasecmp(cmd, "rfi")==0) { rv=releaseFillIn(db, argc, argv); } else { fprintf(stderr, "ERROR: Unknown command \"%s\".\n", cmd); rv=1; } err=GWEN_Fini(); if (err) { fprintf(stderr, "WARNING: Could not deinitialize Gwenhywfar.\n"); } return rv; } gwenhywfar-4.15.2beta/tools/gsa/mkkey.c0000644000175000017500000000624712364015347014755 00000000000000/*************************************************************************** begin : Sat Jun 25 2011 copyright : (C) 2011 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #include int mkArchiveKey(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *keyFile; GWEN_DB_NODE *dbKey; GWEN_CRYPT_KEY *pubKey; GWEN_CRYPT_KEY *privKey; int rv; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "keyfile", /* name */ 1, /* minnum */ 1, /* maxnum */ "k", /* short option */ "keyfile", /* long option */ "Specify the keyfile to use", /* short description */ "Specify the keyfile to use" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } keyFile=GWEN_DB_GetCharValue(db, "keyFile", 0, NULL); assert(keyFile); /* create key */ rv=GWEN_Crypt_KeyRsa_GeneratePair(512, 1, &pubKey, &privKey); if (rv<0) { fprintf(stderr, "ERROR: Error generating key pair (%d)\n", rv); return rv; } dbKey=GWEN_DB_Group_new("keyfile"); rv=GWEN_Crypt_KeyRsa_toDb(privKey, dbKey, 0); if (rv<0) { fprintf(stderr, "ERROR: Error encoding keyfile [%s] (%d)\n", keyFile, rv); return 2; } rv=GWEN_DB_WriteFile(dbKey, keyFile, GWEN_DB_FLAGS_DEFAULT); if (rv<0) { fprintf(stderr, "ERROR: Error writing keyfile [%s] (%d)\n", keyFile, rv); return 2; } GWEN_DB_Group_free(dbKey); GWEN_Crypt_Key_free(privKey); GWEN_Crypt_Key_free(pubKey); return 0; } gwenhywfar-4.15.2beta/tools/gsa/rfi.c0000644000175000017500000001434312364015347014411 00000000000000/*************************************************************************** begin : Mon Jun 27 2011 copyright : (C) 2011 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include int releaseFillIn(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *name; const char *arch; const char *sys; const char *inFile; const char *clFile; const char *outFile; const char *url; int vMajor; int vMinor; int vPatchLevel; int vBuild; int maturityLevel; GWEN_DB_NODE *dbVersion; int rv; GWEN_BUFFER *cbuf; char ubuf[512]; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "infile", /* name */ 1, /* minnum */ 1, /* maxnum */ "i", /* short option */ "infile", /* long option */ "Specify the input version file", /* short description */ "Specify the input version file" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "changeLogFile", /* name */ 1, /* minnum */ 1, /* maxnum */ "c", /* short option */ "changelog", /* long option */ "Specify the changelog file", /* short description */ "Specify the changelog file" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "url", /* name */ 1, /* minnum */ 1, /* maxnum */ "u", /* short option */ "url", /* long option */ "Specify the URL of the update server", /* short description */ "Specify the URL of the update server" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "outfile", /* name */ 1, /* minnum */ 1, /* maxnum */ "o", /* short option */ "outfile", /* long option */ "Specify the output version file", /* short description */ "Specify the output version file" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } inFile=GWEN_DB_GetCharValue(db, "infile", 0, NULL); assert(inFile); clFile=GWEN_DB_GetCharValue(db, "changeLogFile", 0, NULL); assert(clFile); outFile=GWEN_DB_GetCharValue(db, "outfile", 0, NULL); assert(outFile); url=GWEN_DB_GetCharValue(db, "url", 0, NULL); assert(url); /* read changelog file */ cbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=readFile(clFile, cbuf); if (rv<0) { fprintf(stderr, "ERROR: Could not read changelog file [%s] (%d)\n", clFile, rv); return 2; } /* read version file */ dbVersion=GWEN_DB_Group_new("version"); rv=GWEN_DB_ReadFile(dbVersion, inFile, GWEN_DB_FLAGS_DEFAULT); if (rv<0) { fprintf(stderr, "ERROR: Could not read file [%s] (%d)\n", inFile, rv); return 2; } name=GWEN_DB_GetCharValue(dbVersion, "name", 0, NULL); if (!(name && *name)) { fprintf(stderr, "Missing name in version file.\n"); return 2; } arch=GWEN_DB_GetCharValue(dbVersion, "architecture", 0, NULL); if (!(arch && *arch)) { fprintf(stderr, "Missing architecture in version file.\n"); return 2; } sys=GWEN_DB_GetCharValue(dbVersion, "system", 0, NULL); if (!(sys && *sys)) { fprintf(stderr, "Missing system in version file.\n"); return 2; } vMajor=GWEN_DB_GetIntValue(dbVersion, "versionMajor", 0, 0); vMinor=GWEN_DB_GetIntValue(dbVersion, "versionMinor", 0, 0); vPatchLevel=GWEN_DB_GetIntValue(dbVersion, "versionPatchLevel", 0, 0); vBuild=GWEN_DB_GetIntValue(dbVersion, "versionBuild", 0, 0); maturityLevel=GWEN_DB_GetIntValue(dbVersion, "maturityLevel", 0, 0); /* create URL entry */ snprintf(ubuf, sizeof(ubuf)-1, "%s/%s-%s-%s-%d.%d.%d.%d-%d.sar.gz", url, name, sys, arch, vMajor, vMinor, vPatchLevel, vBuild, maturityLevel); ubuf[sizeof(ubuf)-1]=0; GWEN_DB_SetCharValue(dbVersion, GWEN_DB_FLAGS_OVERWRITE_VARS, "url", ubuf); /* create changelog entry */ GWEN_DB_SetCharValue(dbVersion, GWEN_DB_FLAGS_OVERWRITE_VARS, "changeLog", GWEN_Buffer_GetStart(cbuf)); GWEN_Buffer_free(cbuf); /* write version file back */ rv=GWEN_DB_WriteFile(dbVersion, outFile, GWEN_DB_FLAGS_DEFAULT); if (rv<0) { fprintf(stderr, "ERROR: Could not write file [%s] (%d)\n", outFile, rv); return 2; } return 0; } gwenhywfar-4.15.2beta/tools/gsa/check.c0000644000175000017500000000651112364015347014704 00000000000000/*************************************************************************** begin : Sat Jun 25 2011 copyright : (C) 2011 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include int checkArchive(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *aname; GWEN_SAR *sr; int rv; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "archive", /* name */ 1, /* minnum */ 1, /* maxnum */ "a", /* short option */ "archive", /* long option */ "Specify the archive file name", /* short description */ "Specify the archive file name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } aname=GWEN_DB_GetCharValue(db, "archive", 0, NULL); assert(aname); sr=GWEN_Sar_new(); rv=GWEN_Sar_OpenArchive(sr, aname, GWEN_SyncIo_File_CreationMode_OpenExisting, GWEN_SYNCIO_FILE_FLAGS_READ); if (rv<0) { fprintf(stderr, "ERROR: Error opening archive (%d)\n", rv); return 2; } else { const GWEN_SAR_FILEHEADER_LIST *fhl; fhl=GWEN_Sar_GetHeaders(sr); if (fhl) { const GWEN_SAR_FILEHEADER *fh; fh=GWEN_SarFileHeader_List_First(fhl); while(fh) { const char *s; s=GWEN_SarFileHeader_GetPath(fh); rv=GWEN_Sar_CheckFile(sr, fh); if (rv<0) fprintf(stdout, "%s: CRC error (%d)\n", s?s:"(noname)", rv); else fprintf(stdout, "%s: Ok\n", s?s:"(noname)"); fh=GWEN_SarFileHeader_List_Next(fh); } } rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { fprintf(stderr, "ERROR: Error closing archive (%d)\n", rv); return 2; } return 0; } } gwenhywfar-4.15.2beta/tools/gsa/Makefile.in0000644000175000017500000006214112634022416015524 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = gsa$(EXEEXT) @IS_WINDOWS_TRUE@am__append_1 = $(PROG_LIBRARIES) subdir = tools/gsa DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_gsa_OBJECTS = add.$(OBJEXT) create.$(OBJEXT) check.$(OBJEXT) \ extract.$(OBJEXT) list.$(OBJEXT) mkkey.$(OBJEXT) rfi.$(OBJEXT) \ sign.$(OBJEXT) verify.$(OBJEXT) main.$(OBJEXT) gsa_OBJECTS = $(am_gsa_OBJECTS) am__DEPENDENCIES_1 = @IS_WINDOWS_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) gsa_DEPENDENCIES = $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(am__DEPENDENCIES_2) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = gsa_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(gsa_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(gsa_SOURCES) DIST_SOURCES = $(gsa_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = -I$(top_builddir) -I$(top_srcdir) -I$(gwenhywfar_symlinkdir) $(ssl_includes) noinst_HEADERS = \ globals.h gsa_SOURCES = \ add.c \ create.c \ check.c \ extract.c \ list.c \ mkkey.c \ rfi.c \ sign.c \ verify.c \ main.c gsa_LDADD = $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(am__append_1) @IS_WINDOWS_TRUE@gsa_LDFLAGS = -mconsole all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tools/gsa/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/gsa/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list gsa$(EXEEXT): $(gsa_OBJECTS) $(gsa_DEPENDENCIES) $(EXTRA_gsa_DEPENDENCIES) @rm -f gsa$(EXEEXT) $(AM_V_CCLD)$(gsa_LINK) $(gsa_OBJECTS) $(gsa_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/add.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/create.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/extract.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkkey.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rfi.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sign.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/verify.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS sources: for f in $(gsa_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/tools/gsa/create.c0000644000175000017500000000526712364015347015101 00000000000000/*************************************************************************** begin : Sat Jun 25 2011 copyright : (C) 2011 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include int createArchive(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *aname; GWEN_SAR *sr; int rv; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "archive", /* name */ 1, /* minnum */ 1, /* maxnum */ "a", /* short option */ "archive", /* long option */ "Specify the archive file name", /* short description */ "Specify the archive file name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } aname=GWEN_DB_GetCharValue(db, "archive", 0, NULL); assert(aname); sr=GWEN_Sar_new(); rv=GWEN_Sar_CreateArchive(sr, aname); if (rv<0) { fprintf(stderr, "ERROR: Error creating archive (%d)\n", rv); return 2; } rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { fprintf(stderr, "ERROR: Error closing archive (%d)\n", rv); return 2; } return 0; } gwenhywfar-4.15.2beta/tools/gsa/Makefile.am0000644000175000017500000000110012364015347015504 00000000000000INCLUDES= -I$(top_builddir) -I$(top_srcdir) -I$(gwenhywfar_symlinkdir) $(ssl_includes) #EXTRA_DIST= bin_PROGRAMS=gsa noinst_HEADERS=\ globals.h gsa_SOURCES=\ add.c \ create.c \ check.c \ extract.c \ list.c \ mkkey.c \ rfi.c \ sign.c \ verify.c \ main.c gsa_LDADD=$(top_builddir)/src/$(gwenhywfar_internal_libname) if IS_WINDOWS gsa_LDFLAGS=-mconsole gsa_LDADD+=$(PROG_LIBRARIES) endif sources: for f in $(gsa_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-4.15.2beta/tools/gsa/sign.c0000644000175000017500000001172612364015347014573 00000000000000/*************************************************************************** begin : Sat Jun 25 2011 copyright : (C) 2011 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #include int signArchive(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *aname; const char *keyFile; const char *signer; GWEN_DB_NODE *dbKey; GWEN_CRYPT_KEY *key; GWEN_SAR *sr; int rv; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "archive", /* name */ 1, /* minnum */ 1, /* maxnum */ "a", /* short option */ "archive", /* long option */ "Specify the archive file name", /* short description */ "Specify the archive file name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "keyfile", /* name */ 1, /* minnum */ 1, /* maxnum */ "k", /* short option */ "keyfile", /* long option */ "Specify the keyfile to use", /* short description */ "Specify the keyfile to use" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "signer", /* name */ 0, /* minnum */ 1, /* maxnum */ "s", /* short option */ "signer", /* long option */ "Specify the signer", /* short description */ "Specify the signer" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } aname=GWEN_DB_GetCharValue(db, "archive", 0, NULL); assert(aname); keyFile=GWEN_DB_GetCharValue(db, "keyFile", 0, NULL); assert(keyFile); signer=GWEN_DB_GetCharValue(db, "signer", 0, "Signer"); dbKey=GWEN_DB_Group_new("keyfile"); rv=GWEN_DB_ReadFile(dbKey, keyFile, GWEN_DB_FLAGS_DEFAULT); if (rv<0) { fprintf(stderr, "ERROR: Error reading keyfile [%s] (%d)\n", keyFile, rv); return 2; } key=GWEN_Crypt_KeyRsa_fromDb(dbKey); if (key==NULL) { fprintf(stderr, "ERROR: Error decoding keyfile [%s] (%d)\n", keyFile, rv); return 2; } GWEN_Crypt_KeyRsa_AddFlags(key, GWEN_CRYPT_KEYRSA_FLAGS_DIRECTSIGN); sr=GWEN_Sar_new(); rv=GWEN_Sar_OpenArchive(sr, aname, GWEN_SyncIo_File_CreationMode_OpenExisting, GWEN_SYNCIO_FILE_FLAGS_READ|GWEN_SYNCIO_FILE_FLAGS_WRITE); if (rv<0) { fprintf(stderr, "ERROR: Error opening archive (%d)\n", rv); return 2; } else { GWEN_CRYPTMGR *cm; cm=GWEN_CryptMgrKeys_new(signer, key, NULL, NULL, 1); /* sign */ rv=GWEN_Sar_Sign(sr, cm); if (rv<0) { fprintf(stderr, "ERROR: Error signing archive (%d)\n", rv); GWEN_CryptMgr_free(cm); GWEN_Sar_CloseArchive(sr, 1); GWEN_Sar_free(sr); return 2; } GWEN_CryptMgr_free(cm); /* close archive */ rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { fprintf(stderr, "ERROR: Error closing archive (%d)\n", rv); GWEN_Sar_CloseArchive(sr, 1); GWEN_Sar_free(sr); return 2; } return 0; } } gwenhywfar-4.15.2beta/tools/gsa/extract.c0000644000175000017500000001001012364015347015266 00000000000000/*************************************************************************** begin : Sat Jun 25 2011 copyright : (C) 2011 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include int extractArchive(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *aname; GWEN_SAR *sr; int rv; int verbosity; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "archive", /* name */ 1, /* minnum */ 1, /* maxnum */ "a", /* short option */ "archive", /* long option */ "Specify the archive file name", /* short description */ "Specify the archive file name" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "verbosity", /* name */ 0, /* minnum */ 10, /* maxnum */ "v", /* short option */ NULL, /* long option */ "set verbosity", /* short description */ "set verbosity" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } aname=GWEN_DB_GetCharValue(db, "archive", 0, NULL); assert(aname); verbosity=GWEN_DB_GetIntValue(db, "verbosity", 0, 0); sr=GWEN_Sar_new(); rv=GWEN_Sar_OpenArchive(sr, aname, GWEN_SyncIo_File_CreationMode_OpenExisting, GWEN_SYNCIO_FILE_FLAGS_READ); if (rv<0) { fprintf(stderr, "ERROR: Error opening archive (%d)\n", rv); return 2; } else { const GWEN_SAR_FILEHEADER_LIST *fhl; fhl=GWEN_Sar_GetHeaders(sr); if (fhl) { const GWEN_SAR_FILEHEADER *fh; fh=GWEN_SarFileHeader_List_First(fhl); while(fh) { const char *s; s=GWEN_SarFileHeader_GetPath(fh); if (s && *s) { rv=GWEN_Sar_ExtractFile(sr, fh); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Sar_CloseArchive(sr, 1); GWEN_Sar_free(sr); return rv; } if (verbosity>0) { fprintf(stdout, "extracted \"%s\"\n", s); } } fh=GWEN_SarFileHeader_List_Next(fh); } } rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { fprintf(stderr, "ERROR: Error closing archive (%d)\n", rv); return 2; } return 0; } } gwenhywfar-4.15.2beta/tools/gsa/add.c0000644000175000017500000001646212364015347014365 00000000000000/*************************************************************************** begin : Sat Jun 25 2011 copyright : (C) 2011 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #include #include #include #include #include static int addToList(const char *fname, int recursive, GWEN_STRINGLIST *sl) { struct stat st; int rv; /* stat file to be added */ #if _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED rv=lstat(fname, &st); #else rv=stat(fname, &st); #endif if (rv) { DBG_ERROR(GSA_LOGDOMAIN, "stat(%s): %d (%s)", fname, errno, strerror(errno)); fprintf(stderr, "Ignoring file \"%s\"\n", fname); } else { /* always append this entry */ GWEN_StringList_AppendString(sl, fname, 0, 1); if (recursive && S_ISDIR(st.st_mode)) { GWEN_STRINGLIST *sll; GWEN_STRINGLISTENTRY *se; GWEN_DIRECTORY *d; int rv; char buffer[256]; GWEN_BUFFER *tbuf; uint32_t pos; /* add entries */ sll=GWEN_StringList_new(); d=GWEN_Directory_new(); rv=GWEN_Directory_Open(d, fname); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Directory_free(d); GWEN_StringList_free(sll); return rv; } while(0==GWEN_Directory_Read(d, buffer, sizeof(buffer))) { if (strcmp(buffer, ".")!=0 && strcmp(buffer, "..")!=0) GWEN_StringList_AppendString(sll, buffer, 0, 1); } GWEN_Directory_Close(d); GWEN_Directory_free(d); /* recurse */ tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, fname); GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S); pos=GWEN_Buffer_GetPos(tbuf); se=GWEN_StringList_FirstEntry(sll); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) { GWEN_Buffer_AppendString(tbuf, s); rv=addToList(GWEN_Buffer_GetStart(tbuf), recursive, sl); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); GWEN_StringList_free(sll); return rv; } } GWEN_Buffer_Crop(tbuf, 0, pos); se=GWEN_StringListEntry_Next(se); } /* while se */ GWEN_Buffer_free(tbuf); GWEN_StringList_free(sll); } /* if dir and recursive */ } /* if stat was ok */ return 0; } int add2Archive(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *aname; GWEN_SAR *sr; int rv; int recursive; int verbosity; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "archive", /* name */ 1, /* minnum */ 1, /* maxnum */ "a", /* short option */ "archive", /* long option */ "Specify the archive file name", /* short description */ "Specify the archive file name" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "recursive", /* name */ 0, /* minnum */ 1, /* maxnum */ "r", /* short option */ "recursive", /* long option */ "add folders recursively", /* short description */ "add folders recursively" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "verbosity", /* name */ 0, /* minnum */ 10, /* maxnum */ "v", /* short option */ NULL, /* long option */ "set verbosity", /* short description */ "set verbosity" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } aname=GWEN_DB_GetCharValue(db, "archive", 0, NULL); assert(aname); recursive=GWEN_DB_GetIntValue(db, "recursive", 0, 0); verbosity=GWEN_DB_GetIntValue(db, "verbosity", 0, 0); sr=GWEN_Sar_new(); rv=GWEN_Sar_OpenArchive(sr, aname, GWEN_SyncIo_File_CreationMode_OpenExisting, GWEN_SYNCIO_FILE_FLAGS_READ|GWEN_SYNCIO_FILE_FLAGS_WRITE); if (rv<0) { fprintf(stderr, "ERROR: Error opening archive (%d)\n", rv); return 2; } else { int i; GWEN_STRINGLIST *sl; GWEN_STRINGLISTENTRY *se; sl=GWEN_StringList_new(); for (i=0; ; i++) { const char *fname; fname=GWEN_DB_GetCharValue(db, "params", i, 0); if (fname && *fname) { rv=addToList(fname, recursive, sl); if (rv<0) { fprintf(stderr, "ERROR: Error adding entry \"%s\" to archive \"%s\" (%d)\n", fname, aname, rv); GWEN_StringList_free(sl); return 2; } } else break; } se=GWEN_StringList_FirstEntry(sl); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) { rv=GWEN_Sar_AddFile(sr, s); if (rv<0) { fprintf(stderr, "ERROR: Error adding file \"%s\" to archive \"%s\" (%d)\n", s, aname, rv); GWEN_Sar_CloseArchive(sr, 1); GWEN_Sar_free(sr); return 2; } if (verbosity>0) { fprintf(stdout, "added \"%s\"\n", s); } } se=GWEN_StringListEntry_Next(se); } /* while se */ GWEN_StringList_free(sl); rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { fprintf(stderr, "ERROR: Error closing archive (%d)\n", rv); return 2; } return 0; } } gwenhywfar-4.15.2beta/tools/gsa/list.c0000644000175000017500000000627012364015347014604 00000000000000/*************************************************************************** begin : Sat Jun 25 2011 copyright : (C) 2011 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include int listArchive(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *aname; GWEN_SAR *sr; int rv; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "archive", /* name */ 1, /* minnum */ 1, /* maxnum */ "a", /* short option */ "archive", /* long option */ "Specify the archive file name", /* short description */ "Specify the archive file name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } aname=GWEN_DB_GetCharValue(db, "archive", 0, NULL); assert(aname); sr=GWEN_Sar_new(); rv=GWEN_Sar_OpenArchive(sr, aname, GWEN_SyncIo_File_CreationMode_OpenExisting, GWEN_SYNCIO_FILE_FLAGS_READ); if (rv<0) { fprintf(stderr, "ERROR: Error opening archive (%d)\n", rv); return 2; } else { const GWEN_SAR_FILEHEADER_LIST *fhl; fhl=GWEN_Sar_GetHeaders(sr); if (fhl) { const GWEN_SAR_FILEHEADER *fh; fh=GWEN_SarFileHeader_List_First(fhl); while(fh) { const char *s; s=GWEN_SarFileHeader_GetPath(fh); fprintf(stdout, "%s\n", s?s:"(noname)"); fh=GWEN_SarFileHeader_List_Next(fh); } } rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { fprintf(stderr, "ERROR: Error closing archive (%d)\n", rv); return 2; } return 0; } } gwenhywfar-4.15.2beta/tools/gsa/verify.c0000644000175000017500000001175712364015347015143 00000000000000/*************************************************************************** begin : Sat Jun 25 2011 copyright : (C) 2011 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #include int verifyArchive(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *aname; const char *keyFile; const char *signer; GWEN_DB_NODE *dbKey; GWEN_CRYPT_KEY *key; GWEN_SAR *sr; int rv; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "archive", /* name */ 1, /* minnum */ 1, /* maxnum */ "a", /* short option */ "archive", /* long option */ "Specify the archive file name", /* short description */ "Specify the archive file name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "keyfile", /* name */ 1, /* minnum */ 1, /* maxnum */ "k", /* short option */ "keyfile", /* long option */ "Specify the keyfile to use", /* short description */ "Specify the keyfile to use" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "signer", /* name */ 0, /* minnum */ 1, /* maxnum */ "s", /* short option */ "signer", /* long option */ "Specify the signer", /* short description */ "Specify the signer" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } aname=GWEN_DB_GetCharValue(db, "archive", 0, NULL); assert(aname); keyFile=GWEN_DB_GetCharValue(db, "keyFile", 0, NULL); assert(keyFile); signer=GWEN_DB_GetCharValue(db, "Signer", 0, "Signer"); dbKey=GWEN_DB_Group_new("keyfile"); rv=GWEN_DB_ReadFile(dbKey, keyFile, GWEN_DB_FLAGS_DEFAULT); if (rv<0) { fprintf(stderr, "ERROR: Error reading keyfile [%s] (%d)\n", keyFile, rv); return 2; } key=GWEN_Crypt_KeyRsa_fromDb(dbKey); if (key==NULL) { fprintf(stderr, "ERROR: Error decoding keyfile [%s] (%d)\n", keyFile, rv); return 2; } GWEN_Crypt_KeyRsa_AddFlags(key, GWEN_CRYPT_KEYRSA_FLAGS_DIRECTSIGN); sr=GWEN_Sar_new(); rv=GWEN_Sar_OpenArchive(sr, aname, GWEN_SyncIo_File_CreationMode_OpenExisting, GWEN_SYNCIO_FILE_FLAGS_READ); if (rv<0) { fprintf(stderr, "ERROR: Error opening archive (%d)\n", rv); return 2; } else { GWEN_CRYPTMGR *cm; cm=GWEN_CryptMgrKeys_new(NULL, NULL, signer, key, 1); /* verify */ rv=GWEN_Sar_Verify(sr, cm); if (rv<0) { fprintf(stderr, "ERROR: Error verifying archive (%d)\n", rv); GWEN_CryptMgr_free(cm); GWEN_Sar_CloseArchive(sr, 1); GWEN_Sar_free(sr); return 2; } GWEN_CryptMgr_free(cm); /* close archive */ rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { fprintf(stderr, "ERROR: Error closing archive (%d)\n", rv); GWEN_Sar_CloseArchive(sr, 1); GWEN_Sar_free(sr); return 2; } fprintf(stdout, "Signature is valid.\n"); return 0; } } gwenhywfar-4.15.2beta/tools/gsa/globals.h0000644000175000017500000000273212364015347015260 00000000000000/*************************************************************************** begin : Sat Jun 25 2011 copyright : (C) 2011 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GSA_GLOBALS_H #define GSA_GLOBALS_H #include #include #include #include #include #include #include #include #include #include #include #define GSA_LOGDOMAIN "gsa" #include "src/base/i18n_l.h" int readFile(const char *fname, GWEN_BUFFER *dbuf); int createArchive(GWEN_DB_NODE *dbArgs, int argc, char **argv); int checkArchive(GWEN_DB_NODE *dbArgs, int argc, char **argv); int listArchive(GWEN_DB_NODE *dbArgs, int argc, char **argv); int add2Archive(GWEN_DB_NODE *dbArgs, int argc, char **argv); int extractArchive(GWEN_DB_NODE *dbArgs, int argc, char **argv); int mkArchiveKey(GWEN_DB_NODE *dbArgs, int argc, char **argv); int signArchive(GWEN_DB_NODE *dbArgs, int argc, char **argv); int verifyArchive(GWEN_DB_NODE *dbArgs, int argc, char **argv); int releaseFillIn(GWEN_DB_NODE *dbArgs, int argc, char **argv); #endif /* GSA_GLOBALS_H */ gwenhywfar-4.15.2beta/tools/typemaker2/0000755000175000017500000000000012643267240015052 500000000000000gwenhywfar-4.15.2beta/tools/typemaker2/tm_builder_c.c0000644000175000017500000063652212641076611017602 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include "tm_builder_c.h" #include #include #include /* DEBUG */ /*DBG_ERROR(0, "Member %s has flags %x", Typemaker2_Member_GetName(tm), Typemaker2_Member_GetFlags(tm));*/ static int _buildFieldIds(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_MEMBER_LIST *tml; char numbuf[16]; tbuf=GWEN_Buffer_new(0, 256, 0, 1); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while(tm) { if (!(Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_VOLATILE)) { GWEN_Buffer_AppendString(tbuf, "#define "); s=Typemaker2_Member_GetFieldId(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); snprintf(numbuf, sizeof(numbuf)-1, "%d", Typemaker2_Member_GetMemberPosition(tm)); GWEN_Buffer_AppendString(tbuf, numbuf); GWEN_Buffer_AppendString(tbuf, "\n"); } tm=Typemaker2_Member_List_Next(tm); } } GWEN_Buffer_AppendString(tbuf, "#define "); s=Typemaker2_Type_GetFieldCountId(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); snprintf(numbuf, sizeof(numbuf)-1, "%d", Typemaker2_Type_GetNonVolatileMemberCount(ty)); GWEN_Buffer_AppendString(tbuf, numbuf); GWEN_Buffer_AppendString(tbuf, "\n"); Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } /** writes typedef line into public header and also writes includes */ static int _buildTypedef(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; uint32_t flags; TYPEMAKER2_TYPEMANAGER *tym; TYPEMAKER2_HEADER_LIST *hl; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); flags=Typemaker2_Type_GetFlags(ty); /* add some system headers */ GWEN_Buffer_AppendString(tbuf, "/* needed system headers */\n"); GWEN_Buffer_AppendString(tbuf, "#include \n"); if (flags & TYPEMAKER2_FLAGS_WITH_LIST1) GWEN_Buffer_AppendString(tbuf, "#include \n"); if (flags & TYPEMAKER2_FLAGS_WITH_LIST2) GWEN_Buffer_AppendString(tbuf, "#include \n"); if (flags & TYPEMAKER2_FLAGS_WITH_TREE) GWEN_Buffer_AppendString(tbuf, "#include \n"); if (flags & TYPEMAKER2_FLAGS_WITH_INHERIT) GWEN_Buffer_AppendString(tbuf, "#include \n"); if (flags & TYPEMAKER2_FLAGS_WITH_IDMAP) GWEN_Buffer_AppendString(tbuf, "#include \n"); if (flags & TYPEMAKER2_FLAGS_WITH_DB) GWEN_Buffer_AppendString(tbuf, "#include \n"); if (flags & TYPEMAKER2_FLAGS_WITH_XML) GWEN_Buffer_AppendString(tbuf, "#include \n"); if (flags & TYPEMAKER2_FLAGS_WITH_OBJECT) { GWEN_Buffer_AppendString(tbuf, "#include \n"); GWEN_Buffer_AppendString(tbuf, "#include \n"); } if ((flags & TYPEMAKER2_FLAGS_WITH_SIGNALS) || (flags & TYPEMAKER2_FLAGS_WITH_SLOTS)) GWEN_Buffer_AppendString(tbuf, "#include \n"); GWEN_Buffer_AppendString(tbuf, "\n"); /* handle pre-headers */ hl=Typemaker2_Type_GetHeaders(ty); if (hl) { TYPEMAKER2_HEADER *h; h=Typemaker2_Header_List_First(hl); if (h) { GWEN_Buffer_AppendString(tbuf, "/* pre-headers */\n"); while(h) { if (Typemaker2_Header_GetLocation(h)==Typemaker2_HeaderLocation_Pre) { GWEN_Buffer_AppendString(tbuf, "#include "); if (Typemaker2_Header_GetType(h)==Typemaker2_HeaderType_System) { GWEN_Buffer_AppendString(tbuf, "<"); GWEN_Buffer_AppendString(tbuf, Typemaker2_Header_GetFileName(h)); GWEN_Buffer_AppendString(tbuf, ">"); } else { GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, Typemaker2_Header_GetFileName(h)); GWEN_Buffer_AppendString(tbuf, "\""); } GWEN_Buffer_AppendString(tbuf, "\n"); } h=Typemaker2_Header_List_Next(h); } GWEN_Buffer_AppendString(tbuf, "\n"); } } GWEN_Buffer_AppendString(tbuf, "typedef struct "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ";\n"); if (flags & TYPEMAKER2_FLAGS_WITH_LIST1) { if (Typemaker2_TypeManager_GetApiDeclaration(tym)) { GWEN_Buffer_AppendString(tbuf, "GWEN_LIST_FUNCTION_LIB_DEFS("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ", "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ", "); s=Typemaker2_TypeManager_GetApiDeclaration(tym); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ")\n"); } else { GWEN_Buffer_AppendString(tbuf, "GWEN_LIST_FUNCTION_DEFS("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ", "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ")\n"); } } if (flags & TYPEMAKER2_FLAGS_WITH_LIST2) { if (Typemaker2_TypeManager_GetApiDeclaration(tym)) { GWEN_Buffer_AppendString(tbuf, "GWEN_LIST2_FUNCTION_LIB_DEFS("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ", "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ", "); s=Typemaker2_TypeManager_GetApiDeclaration(tym); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ")\n"); } else { GWEN_Buffer_AppendString(tbuf, "GWEN_LIST2_FUNCTION_DEFS("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ", "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ")\n"); } } if (flags & TYPEMAKER2_FLAGS_WITH_TREE) { if (Typemaker2_TypeManager_GetApiDeclaration(tym)) { GWEN_Buffer_AppendString(tbuf, "GWEN_TREE_FUNCTION_LIB_DEFS("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ", "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ", "); s=Typemaker2_TypeManager_GetApiDeclaration(tym); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ")\n"); } else { GWEN_Buffer_AppendString(tbuf, "GWEN_TREE_FUNCTION_DEFS("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ", "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ")\n"); } } if (flags & TYPEMAKER2_FLAGS_WITH_INHERIT) { if (Typemaker2_TypeManager_GetApiDeclaration(tym)) { GWEN_Buffer_AppendString(tbuf, "GWEN_INHERIT_FUNCTION_LIB_DEFS("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ", "); s=Typemaker2_TypeManager_GetApiDeclaration(tym); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ")\n"); } else { GWEN_Buffer_AppendString(tbuf, "GWEN_INHERIT_FUNCTION_DEFS("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ")\n"); } } if (flags & TYPEMAKER2_FLAGS_WITH_IDMAP) { if (Typemaker2_TypeManager_GetApiDeclaration(tym)) { GWEN_Buffer_AppendString(tbuf, "GWEN_IDMAP_FUNCTION_LIB_DEFS("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ", "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ", "); s=Typemaker2_TypeManager_GetApiDeclaration(tym); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ")\n"); } else { GWEN_Buffer_AppendString(tbuf, "GWEN_IDMAP_FUNCTION_DEFS("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ", "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ")\n"); } } GWEN_Buffer_AppendString(tbuf, "\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildPostHeaders(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; TYPEMAKER2_TYPEMANAGER *tym GWEN_UNUSED; TYPEMAKER2_HEADER_LIST *hl; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* handle post-headers */ hl=Typemaker2_Type_GetHeaders(ty); if (hl) { TYPEMAKER2_HEADER *h; h=Typemaker2_Header_List_First(hl); if (h) { GWEN_Buffer_AppendString(tbuf, "/* post-headers */\n"); while(h) { if (Typemaker2_Header_GetLocation(h)==Typemaker2_HeaderLocation_Post) { GWEN_Buffer_AppendString(tbuf, "#include "); if (Typemaker2_Header_GetType(h)==Typemaker2_HeaderType_System) { GWEN_Buffer_AppendString(tbuf, "<"); GWEN_Buffer_AppendString(tbuf, Typemaker2_Header_GetFileName(h)); GWEN_Buffer_AppendString(tbuf, ">"); } else { GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, Typemaker2_Header_GetFileName(h)); GWEN_Buffer_AppendString(tbuf, "\""); } GWEN_Buffer_AppendString(tbuf, "\n"); } h=Typemaker2_Header_List_Next(h); } } GWEN_Buffer_AppendString(tbuf, "\n"); } Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildStruct(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_MEMBER_LIST *tml; uint32_t flags; TYPEMAKER2_VIRTUALFN_LIST *fns; tbuf=GWEN_Buffer_new(0, 256, 0, 1); flags=Typemaker2_Type_GetFlags(ty); GWEN_Buffer_AppendString(tbuf, "struct "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " {\n"); if (flags & TYPEMAKER2_FLAGS_WITH_INHERIT) { GWEN_Buffer_AppendString(tbuf, " GWEN_INHERIT_ELEMENT("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ")\n"); } if (flags & TYPEMAKER2_FLAGS_WITH_LIST1) { GWEN_Buffer_AppendString(tbuf, " GWEN_LIST_ELEMENT("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ")\n"); } if (flags & TYPEMAKER2_FLAGS_WITH_TREE) { GWEN_Buffer_AppendString(tbuf, " GWEN_TREE_ELEMENT("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ")\n"); } if ((flags & TYPEMAKER2_FLAGS_WITH_SIGNALS) || (flags & TYPEMAKER2_FLAGS_WITH_SLOTS)) { GWEN_Buffer_AppendString(tbuf, " GWEN_SIGNALOBJECT *_signalObject;"); GWEN_Buffer_AppendString(tbuf, "\n"); } if (flags & TYPEMAKER2_FLAGS_WITH_REFCOUNT) GWEN_Buffer_AppendString(tbuf, " int _refCount;\n"); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while(tm) { TYPEMAKER2_TYPE *mty; int typeIsWritten=0; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); GWEN_Buffer_AppendString(tbuf, " "); if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_ENUM) { TYPEMAKER2_ENUM *te=Typemaker2_Member_GetEnumPtr(tm); const char *s; assert(te); s=Typemaker2_Enum_GetType(te); if (s && *s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); typeIsWritten=1; } } if (!typeIsWritten) { if ((Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer) && (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_CONST)) GWEN_Buffer_AppendString(tbuf, "const "); s=Typemaker2_Type_GetIdentifier(mty); if (!(s && *s)) { const char *xx; xx=Typemaker2_Member_GetName(tm); DBG_ERROR(0, "Member [%s] has no identifier", xx?xx:"(unnamed)"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer) GWEN_Buffer_AppendString(tbuf, "*"); } s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Array) { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "[%d]", Typemaker2_Member_GetMaxLen(tm)); GWEN_Buffer_AppendString(tbuf, numbuf); } GWEN_Buffer_AppendString(tbuf, ";"); if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_VOLATILE) GWEN_Buffer_AppendString(tbuf, " /* volatile */"); GWEN_Buffer_AppendString(tbuf, "\n"); tm=Typemaker2_Member_List_Next(tm); } } /* add virtual functions */ fns=Typemaker2_Type_GetVirtualFns(ty); assert(fns); if (Typemaker2_VirtualFn_List_GetCount(fns)) { const char *s; TYPEMAKER2_VIRTUALFN *vf; vf=Typemaker2_VirtualFn_List_First(fns); while(vf) { GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { DBG_ERROR(0, "Virtual function has no name"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } while(*s) GWEN_Buffer_AppendByte(tbuf, toupper(*(s++))); GWEN_Buffer_AppendString(tbuf, "_FN "); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { DBG_ERROR(0, "Virtual function has no name"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendByte(tbuf, tolower(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "Fn;\n"); vf=Typemaker2_VirtualFn_List_Next(vf); } } GWEN_Buffer_AppendString(tbuf, "};\n"); Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildMacroFunctions(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; uint32_t flags; /* TYPEMAKER2_TYPEMANAGER *tym; */ /* tym=Typemaker2_Builder_GetTypeManager(tb); */ tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, "/* macro functions */\n"); flags=Typemaker2_Type_GetFlags(ty); if (flags & TYPEMAKER2_FLAGS_WITH_LIST1) { GWEN_Buffer_AppendString(tbuf, "GWEN_LIST_FUNCTIONS("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ", "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ")\n"); } if (flags & TYPEMAKER2_FLAGS_WITH_LIST2) { GWEN_Buffer_AppendString(tbuf, "GWEN_LIST2_FUNCTIONS("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ", "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ")\n"); } if (flags & TYPEMAKER2_FLAGS_WITH_TREE) { GWEN_Buffer_AppendString(tbuf, "GWEN_TREE_FUNCTIONS("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ", "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ")\n"); } if (flags & TYPEMAKER2_FLAGS_WITH_INHERIT) { GWEN_Buffer_AppendString(tbuf, "GWEN_INHERIT_FUNCTIONS("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ")\n"); } if (flags & TYPEMAKER2_FLAGS_WITH_IDMAP) { GWEN_Buffer_AppendString(tbuf, "GWEN_IDMAP_FUNCTIONS("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ", "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ")\n"); } GWEN_Buffer_AppendString(tbuf, "\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildConstructor(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_MEMBER_LIST *tml; uint32_t flags; TYPEMAKER2_TYPEMANAGER *tym; TYPEMAKER2_VIRTUALFN_LIST *tvfl; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); flags=Typemaker2_Type_GetFlags(ty); /* prototype */ if (Typemaker2_Type_GetUsePrivateConstructor(ty)) { GWEN_Buffer_AppendString(tbuf, "/** Private constructor. */\n"); } else { GWEN_Buffer_AppendString(tbuf, "/** Constructor. */\n"); s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } } s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); /* created structs are always pointers */ GWEN_Buffer_AppendString(tbuf, " *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); if (Typemaker2_Type_GetUsePrivateConstructor(ty)) GWEN_Buffer_AppendString(tbuf, "_"); GWEN_Buffer_AppendString(tbuf, "_new(void)"); GWEN_Buffer_AppendString(tbuf, ";\n"); if (Typemaker2_Type_GetUsePrivateConstructor(ty)) Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); else Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); if (Typemaker2_Type_GetUsePrivateConstructor(ty)) GWEN_Buffer_AppendString(tbuf, "_"); GWEN_Buffer_AppendString(tbuf, "_new(void)"); GWEN_Buffer_AppendString(tbuf, " {\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " GWEN_NEW_OBJECT("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ", p_struct)\n"); if (flags & TYPEMAKER2_FLAGS_WITH_REFCOUNT) GWEN_Buffer_AppendString(tbuf, " p_struct->_refCount=1;\n"); if (flags & TYPEMAKER2_FLAGS_WITH_INHERIT) { GWEN_Buffer_AppendString(tbuf, " GWEN_INHERIT_INIT("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ", p_struct)\n"); } if (flags & TYPEMAKER2_FLAGS_WITH_LIST1) { GWEN_Buffer_AppendString(tbuf, " GWEN_LIST_INIT("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ", p_struct)\n"); } if (flags & TYPEMAKER2_FLAGS_WITH_TREE) { GWEN_Buffer_AppendString(tbuf, " GWEN_TREE_INIT("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ", p_struct)\n"); } if ((flags & TYPEMAKER2_FLAGS_WITH_SIGNALS) || (flags & TYPEMAKER2_FLAGS_WITH_SLOTS)) { GWEN_Buffer_AppendString(tbuf, " p_struct->_signalObject=GWEN_SignalObject_new();\n"); } if (flags & TYPEMAKER2_FLAGS_WITH_SIGNALS) { TYPEMAKER2_SIGNAL_LIST *slist; GWEN_Buffer_AppendString(tbuf, " /* generate pre-defined signals */\n"); slist=Typemaker2_Type_GetSignals(ty); if (slist) { TYPEMAKER2_SIGNAL *sig; sig=Typemaker2_Signal_List_First(slist); while(sig) { s=Typemaker2_Signal_GetName(sig); GWEN_Buffer_AppendString(tbuf, " /* signal \""); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\" */\n"); GWEN_Buffer_AppendString(tbuf, " GWEN_Signal_new(p_struct->_signalObject, NULL, "); /* name */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\", "); /* param type 1 */ s=Typemaker2_Signal_GetParamType1(sig); GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s?s:"none"); GWEN_Buffer_AppendString(tbuf, "\", "); /* param type 2 */ s=Typemaker2_Signal_GetParamType2(sig); GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s?s:"none"); GWEN_Buffer_AppendString(tbuf, "\");\n"); sig=Typemaker2_Signal_List_Next(sig); } } } if (flags & TYPEMAKER2_FLAGS_WITH_SLOTS) { TYPEMAKER2_SLOT_LIST *slist; GWEN_Buffer_AppendString(tbuf, " /* generate pre-defined slots */\n"); slist=Typemaker2_Type_GetSlots(ty); if (slist) { TYPEMAKER2_SLOT *slot; slot=Typemaker2_Slot_List_First(slist); while(slot) { s=Typemaker2_Slot_GetName(slot); GWEN_Buffer_AppendString(tbuf, " /* slot \""); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\" */\n"); GWEN_Buffer_AppendString(tbuf, " GWEN_Slot_new(p_struct->_signalObject, NULL, "); /* name */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\", "); /* param type 1 */ s=Typemaker2_Slot_GetParamType1(slot); GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s?s:"none"); GWEN_Buffer_AppendString(tbuf, "\", "); /* param type 2 */ s=Typemaker2_Slot_GetParamType2(slot); GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s?s:"none"); GWEN_Buffer_AppendString(tbuf, "\", "); /* callback function */ s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_SlotCallback_"); s=Typemaker2_Slot_GetName(slot); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, ", (void*) p_struct"); GWEN_Buffer_AppendString(tbuf, ");\n"); slot=Typemaker2_Slot_List_Next(slot); } } } GWEN_Buffer_AppendString(tbuf, " /* members */\n"); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; int rv; tm=Typemaker2_Member_List_First(tml); while(tm) { TYPEMAKER2_TYPE *mty; GWEN_BUFFER *dstbuf; dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dstbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(dstbuf, s); mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_ConstructFn(tb, ty, tm, NULL, /* no source */ GWEN_Buffer_GetStart(dstbuf), tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dstbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_free(dstbuf); GWEN_Buffer_AppendString(tbuf, "\n"); tm=Typemaker2_Member_List_Next(tm); } } tvfl=Typemaker2_Type_GetVirtualFns(ty); if (tvfl) { TYPEMAKER2_VIRTUALFN *tvf; GWEN_Buffer_AppendString(tbuf, " /* virtual functions */\n"); tvf=Typemaker2_VirtualFn_List_First(tvfl); while(tvf) { const char *fname; const char *fpreset; fname=Typemaker2_VirtualFn_GetName(tvf); fpreset=Typemaker2_VirtualFn_GetPreset(tvf); if (fname && *fname && fpreset && *fpreset) { GWEN_Buffer_AppendString(tbuf, " "); GWEN_Buffer_AppendString(tbuf, "p_struct->"); GWEN_Buffer_AppendByte(tbuf, tolower(*fname)); GWEN_Buffer_AppendString(tbuf, fname+1); GWEN_Buffer_AppendString(tbuf, "Fn="); GWEN_Buffer_AppendString(tbuf, fpreset); GWEN_Buffer_AppendString(tbuf, ";\n"); } tvf=Typemaker2_VirtualFn_List_Next(tvf); } } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " return p_struct;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildDestructor(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_MEMBER_LIST *tml; uint32_t flags; TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); flags=Typemaker2_Type_GetFlags(ty); /* prototype */ GWEN_Buffer_AppendString(tbuf, "/** Destructor. */\n"); s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "void "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_free("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* insert freeHook prototype, if needed */ s=Typemaker2_Type_GetFreeHook(ty); if (s && *s) { GWEN_Buffer_AppendString(tbuf, "static void "); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct);\n"); Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); } /* implementation */ GWEN_Buffer_AppendString(tbuf, "void "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_free("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct) {\n"); GWEN_Buffer_AppendString(tbuf, " if (p_struct) {\n"); if (flags & TYPEMAKER2_FLAGS_WITH_REFCOUNT) { GWEN_Buffer_AppendString(tbuf, " assert(p_struct->_refCount);\n"); GWEN_Buffer_AppendString(tbuf, " if (p_struct->_refCount==1) {\n"); } if ((flags & TYPEMAKER2_FLAGS_WITH_SIGNALS) || (flags & TYPEMAKER2_FLAGS_WITH_SLOTS)) { GWEN_Buffer_AppendString(tbuf, " GWEN_SignalObject_free(p_struct->_signalObject);\n"); } /* insert freeHook, if any */ s=Typemaker2_Type_GetFreeHook(ty); if (s && *s) { GWEN_Buffer_AppendString(tbuf, " "); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "(p_struct);\n"); } if (flags & TYPEMAKER2_FLAGS_WITH_INHERIT) { GWEN_Buffer_AppendString(tbuf, " GWEN_INHERIT_FINI("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ", p_struct)\n"); } if (flags & TYPEMAKER2_FLAGS_WITH_LIST1) { GWEN_Buffer_AppendString(tbuf, " GWEN_LIST_FINI("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ", p_struct)\n"); } if (flags & TYPEMAKER2_FLAGS_WITH_TREE) { GWEN_Buffer_AppendString(tbuf, " GWEN_TREE_FINI("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ", p_struct)\n"); } GWEN_Buffer_AppendString(tbuf, " /* members */\n"); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while(tm) { if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_OWN) { /* destruct, but only if the member is owned */ if (1) { GWEN_BUFFER *dstbuf; int rv; dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dstbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(dstbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_DestructFn(tb, ty, tm, GWEN_Buffer_GetStart(dstbuf), NULL, /* no dest */ tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dstbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_free(dstbuf); GWEN_Buffer_AppendString(tbuf, "\n"); } } tm=Typemaker2_Member_List_Next(tm); } } if (flags & TYPEMAKER2_FLAGS_WITH_REFCOUNT) { GWEN_Buffer_AppendString(tbuf, " p_struct->_refCount=0;\n"); } GWEN_Buffer_AppendString(tbuf, " GWEN_FREE_OBJECT(p_struct);\n"); if (flags & TYPEMAKER2_FLAGS_WITH_REFCOUNT) { GWEN_Buffer_AppendString(tbuf, " }\n"); GWEN_Buffer_AppendString(tbuf, " else\n"); GWEN_Buffer_AppendString(tbuf, " p_struct->_refCount--;\n"); } GWEN_Buffer_AppendString(tbuf, " }\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildGetter(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_MEMBER_LIST *tml; uint32_t flags; TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); flags=Typemaker2_Type_GetFlags(ty); /* probably add getter for signalObject */ if ((flags & TYPEMAKER2_FLAGS_WITH_SIGNALS) || (flags & TYPEMAKER2_FLAGS_WITH_SLOTS)) { /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s && *s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "GWEN_SIGNALOBJECT *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_GetSignalObject(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "GWEN_SIGNALOBJECT *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_GetSignalObject(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct) {\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); GWEN_Buffer_AppendString(tbuf, " return p_struct->_signalObject;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); } tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while(tm) { if (!(Typemaker2_Member_GetGetFlags(tm) & TYPEMAKER2_FLAGS_OMIT)) { TYPEMAKER2_TYPE *mty; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); /* prototype */ GWEN_Buffer_AppendString(tbuf, "/** Getter.\n" " * Use this function to get the member \""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\" (see @ref "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ")\n*/\n"); s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s && Typemaker2_Member_GetAccess(tm)<=TypeMaker2_Access_Protected) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } if ((Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer || Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Array) && (Typemaker2_Member_GetGetFlags(tm) & TYPEMAKER2_FLAGS_CONST)) GWEN_Buffer_AppendString(tbuf, "const "); if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_ENUM) { TYPEMAKER2_ENUM *te=Typemaker2_Member_GetEnumPtr(tm); const char *s; assert(te); s=Typemaker2_Enum_GetType(te); if (s && *s) { GWEN_Buffer_AppendString(tbuf, s); } else { s=Typemaker2_Type_GetIdentifier(mty); GWEN_Buffer_AppendString(tbuf, s); } } else { s=Typemaker2_Type_GetIdentifier(mty); GWEN_Buffer_AppendString(tbuf, s); } GWEN_Buffer_AppendString(tbuf, " "); if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer || Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Array) GWEN_Buffer_AppendString(tbuf, "*"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_Get"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "("); if (!(Typemaker2_Member_GetGetFlags(tm) & TYPEMAKER2_FLAGS_NOCONSTOBJECT)) GWEN_Buffer_AppendString(tbuf, "const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct);\n"); switch(Typemaker2_Member_GetAccess(tm)) { case TypeMaker2_Access_Public: Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Library: Typemaker2_Builder_AddLibraryDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Protected: Typemaker2_Builder_AddProtectedDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Private: Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Invalid access type"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_Reset(tbuf); /* implementation */ if ((Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer || Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Array) && (Typemaker2_Member_GetGetFlags(tm) & TYPEMAKER2_FLAGS_CONST)) GWEN_Buffer_AppendString(tbuf, "const "); if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_ENUM) { TYPEMAKER2_ENUM *te=Typemaker2_Member_GetEnumPtr(tm); const char *s; assert(te); s=Typemaker2_Enum_GetType(te); if (s && *s) { GWEN_Buffer_AppendString(tbuf, s); } else { s=Typemaker2_Type_GetIdentifier(mty); GWEN_Buffer_AppendString(tbuf, s); } } else { s=Typemaker2_Type_GetIdentifier(mty); GWEN_Buffer_AppendString(tbuf, s); } GWEN_Buffer_AppendString(tbuf, " "); if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer || Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Array) GWEN_Buffer_AppendString(tbuf, "*"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_Get"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "("); if (!(Typemaker2_Member_GetGetFlags(tm) & TYPEMAKER2_FLAGS_NOCONSTOBJECT)) GWEN_Buffer_AppendString(tbuf, "const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct) {\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); GWEN_Buffer_AppendString(tbuf, " return p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ";\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); } tm=Typemaker2_Member_List_Next(tm); } } return 0; } static int _buildSetter(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_MEMBER_LIST *tml; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while(tm) { if (!(Typemaker2_Member_GetSetFlags(tm) & TYPEMAKER2_FLAGS_OMIT)) { TYPEMAKER2_TYPE *mty; int typeIsWritten=0; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); /* prototype */ GWEN_Buffer_AppendString(tbuf, "/** Setter.\n" " * Use this function to set the member \""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\" (see @ref "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ")\n*/\n"); s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s && Typemaker2_Member_GetAccess(tm)<=TypeMaker2_Access_Protected) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "void "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_Set"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, "); typeIsWritten=0; if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_ENUM) { TYPEMAKER2_ENUM *te=Typemaker2_Member_GetEnumPtr(tm); const char *s; assert(te); s=Typemaker2_Enum_GetType(te); if (s && *s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); GWEN_Buffer_AppendString(tbuf, " p_src"); typeIsWritten=1; } } if (!typeIsWritten) { if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer || Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Array) { if (Typemaker2_Member_GetSetFlags(tm) & TYPEMAKER2_FLAGS_CONST || Typemaker2_Member_GetSetFlags(tm) & TYPEMAKER2_FLAGS_DUP) GWEN_Buffer_AppendString(tbuf, "const "); s=Typemaker2_Type_GetIdentifier(mty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_src"); } else { s=Typemaker2_Type_GetIdentifier(mty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " p_src"); } } GWEN_Buffer_AppendString(tbuf, ");\n"); switch(Typemaker2_Member_GetAccess(tm)) { case TypeMaker2_Access_Public: Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Library: Typemaker2_Builder_AddLibraryDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Protected: Typemaker2_Builder_AddProtectedDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Private: Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Invalid access type"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_Reset(tbuf); /* add special functions for flags */ if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_WITH_FLAGS) { GWEN_Buffer_AppendString(tbuf, "/** Add flags.\n" " * Use this function to add flags to the member \""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\"\n*/\n"); s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s && Typemaker2_Member_GetAccess(tm)<=TypeMaker2_Access_Protected) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "void "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_Add"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, "); typeIsWritten=0; if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_ENUM) { TYPEMAKER2_ENUM *te=Typemaker2_Member_GetEnumPtr(tm); const char *s; assert(te); s=Typemaker2_Enum_GetType(te); if (s && *s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); GWEN_Buffer_AppendString(tbuf, " p_src"); typeIsWritten=1; } } if (!typeIsWritten) { if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer || Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Array) { if (Typemaker2_Member_GetSetFlags(tm) & TYPEMAKER2_FLAGS_CONST || Typemaker2_Member_GetSetFlags(tm) & TYPEMAKER2_FLAGS_DUP) GWEN_Buffer_AppendString(tbuf, "const "); s=Typemaker2_Type_GetIdentifier(mty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_src"); } else { s=Typemaker2_Type_GetIdentifier(mty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " p_src"); } } GWEN_Buffer_AppendString(tbuf, ");\n"); switch(Typemaker2_Member_GetAccess(tm)) { case TypeMaker2_Access_Public: Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Library: Typemaker2_Builder_AddLibraryDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Protected: Typemaker2_Builder_AddProtectedDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Private: Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Invalid access type"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_Reset(tbuf); GWEN_Buffer_AppendString(tbuf, "/** Sub flags.\n" " * Use this function to sub flags from the member \""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\"\n*/\n"); s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s && Typemaker2_Member_GetAccess(tm)<=TypeMaker2_Access_Protected) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "void "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_Sub"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, "); typeIsWritten=0; if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_ENUM) { TYPEMAKER2_ENUM *te=Typemaker2_Member_GetEnumPtr(tm); const char *s; assert(te); s=Typemaker2_Enum_GetType(te); if (s && *s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); GWEN_Buffer_AppendString(tbuf, " p_src"); typeIsWritten=1; } } if (!typeIsWritten) { if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer || Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Array) { if (Typemaker2_Member_GetSetFlags(tm) & TYPEMAKER2_FLAGS_CONST || Typemaker2_Member_GetSetFlags(tm) & TYPEMAKER2_FLAGS_DUP) GWEN_Buffer_AppendString(tbuf, "const "); s=Typemaker2_Type_GetIdentifier(mty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_src"); } else { s=Typemaker2_Type_GetIdentifier(mty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " p_src"); } } GWEN_Buffer_AppendString(tbuf, ");\n"); switch(Typemaker2_Member_GetAccess(tm)) { case TypeMaker2_Access_Public: Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Library: Typemaker2_Builder_AddLibraryDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Protected: Typemaker2_Builder_AddProtectedDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Private: Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Invalid access type"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_Reset(tbuf); } /* implementation */ GWEN_Buffer_AppendString(tbuf, "void "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_Set"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, "); typeIsWritten=0; if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_ENUM) { TYPEMAKER2_ENUM *te=Typemaker2_Member_GetEnumPtr(tm); const char *s; assert(te); s=Typemaker2_Enum_GetType(te); if (s && *s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); GWEN_Buffer_AppendString(tbuf, " p_src"); typeIsWritten=1; } } if (!typeIsWritten) { if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer || Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Array) { if (Typemaker2_Member_GetSetFlags(tm) & TYPEMAKER2_FLAGS_CONST || Typemaker2_Member_GetSetFlags(tm) & TYPEMAKER2_FLAGS_DUP) GWEN_Buffer_AppendString(tbuf, "const "); s=Typemaker2_Type_GetIdentifier(mty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_src"); } else { s=Typemaker2_Type_GetIdentifier(mty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " p_src"); } } GWEN_Buffer_AppendString(tbuf, ") {\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_OWN) { if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer) { GWEN_Buffer_AppendString(tbuf, " if (p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ") {\n"); } /* free */ if (1) { GWEN_BUFFER *srcbuf; int rv; srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(srcbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(srcbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_DestructFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), NULL, /* no dest */ tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(srcbuf); } if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer) { GWEN_Buffer_AppendString(tbuf, " }\n"); } } /* if own */ if (Typemaker2_Member_GetSetFlags(tm) & TYPEMAKER2_FLAGS_DUP) { if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer) GWEN_Buffer_AppendString(tbuf, " if (p_src) {\n"); /* dup */ if (1) { GWEN_BUFFER *dstbuf; int rv; dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dstbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(dstbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_DupFn(tb, ty, tm, "p_src", GWEN_Buffer_GetStart(dstbuf), tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dstbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(dstbuf); } if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer) { GWEN_Buffer_AppendString(tbuf, " }\n"); GWEN_Buffer_AppendString(tbuf, " else {\n"); /* construct */ if (1) { GWEN_BUFFER *dstbuf; int rv; dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dstbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(dstbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_ConstructFn(tb, ty, tm, NULL, GWEN_Buffer_GetStart(dstbuf), tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dstbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(dstbuf); } else { GWEN_Buffer_AppendString(tbuf, " p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " = "); s=Typemaker2_Member_GetPresetValue(tm); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); else GWEN_Buffer_AppendString(tbuf, "NULL"); GWEN_Buffer_AppendString(tbuf, ";\n"); } GWEN_Buffer_AppendString(tbuf, " }\n"); } } else { if (1) { GWEN_BUFFER *dstbuf; int rv; dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dstbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(dstbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_AssignFn(tb, ty, tm, "p_src", GWEN_Buffer_GetStart(dstbuf), tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dstbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(dstbuf); } } GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_WITH_FLAGS) { /* add flags */ GWEN_Buffer_AppendString(tbuf, "void "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_Add"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, "); typeIsWritten=0; if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_ENUM) { TYPEMAKER2_ENUM *te=Typemaker2_Member_GetEnumPtr(tm); const char *s; assert(te); s=Typemaker2_Enum_GetType(te); if (s && *s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); GWEN_Buffer_AppendString(tbuf, " p_src"); typeIsWritten=1; } } if (!typeIsWritten) { s=Typemaker2_Type_GetIdentifier(mty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " p_src"); } GWEN_Buffer_AppendString(tbuf, ") {\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); GWEN_Buffer_AppendString(tbuf, " p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "|=p_src;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* sub flags */ GWEN_Buffer_AppendString(tbuf, "void "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_Sub"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, "); typeIsWritten=0; if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_ENUM) { TYPEMAKER2_ENUM *te=Typemaker2_Member_GetEnumPtr(tm); const char *s; assert(te); s=Typemaker2_Enum_GetType(te); if (s && *s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); GWEN_Buffer_AppendString(tbuf, " p_src"); typeIsWritten=1; } } if (!typeIsWritten) { s=Typemaker2_Type_GetIdentifier(mty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " p_src"); } GWEN_Buffer_AppendString(tbuf, ") {\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); GWEN_Buffer_AppendString(tbuf, " p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "&=~p_src;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); } } tm=Typemaker2_Member_List_Next(tm); } } return 0; } static int _buildReadDb(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_MEMBER_LIST *tml; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "void "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_ReadDb("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, GWEN_DB_NODE *p_db);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "void "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_ReadDb("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, GWEN_DB_NODE *p_db) {\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while(tm) { TYPEMAKER2_TYPE *mty; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); GWEN_Buffer_AppendString(tbuf, " /* member \""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\" */\n"); /* release previous value */ if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer && (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_OWN)) { GWEN_Buffer_AppendString(tbuf, " if (p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ") {\n"); /* free */ if (1) { GWEN_BUFFER *srcbuf; int rv; srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(srcbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(srcbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_DestructFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), NULL, /* no dest */ tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(srcbuf); } GWEN_Buffer_AppendString(tbuf, " }\n"); } /* read form object */ if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_VOLATILE) { GWEN_BUFFER *dstbuf; int rv; /* volatile */ GWEN_Buffer_AppendString(tbuf, " /* member \""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\" is volatile, just presetting */\n"); dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dstbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(dstbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_ConstructFn(tb, ty, tm, NULL, /* no source */ GWEN_Buffer_GetStart(dstbuf), tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dstbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(dstbuf); } else { /* not volatile */ if (1) { /* from object */ GWEN_BUFFER *dstbuf; int rv; dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dstbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(dstbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_FromDbFn(tb, ty, tm, NULL, /* no source */ GWEN_Buffer_GetStart(dstbuf), tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dstbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_free(dstbuf); GWEN_Buffer_AppendString(tbuf, "\n"); } /* add preset code for the case when a pointer is NULL */ if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer) { GWEN_Buffer_AppendString(tbuf, " if (p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "==NULL) {"); if (1) { GWEN_BUFFER *dstbuf; int rv; dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dstbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(dstbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_ConstructFn(tb, ty, tm, NULL, /* no source */ GWEN_Buffer_GetStart(dstbuf), tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dstbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(dstbuf); } GWEN_Buffer_AppendString(tbuf, " }\n"); } } GWEN_Buffer_AppendString(tbuf, "\n"); tm=Typemaker2_Member_List_Next(tm); } } GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildWriteDb(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_MEMBER_LIST *tml; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_WriteDb(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, GWEN_DB_NODE *p_db);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_WriteDb(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, GWEN_DB_NODE *p_db) {\n"); if (Typemaker2_Type_GetNonVolatileMemberCount(ty)) { GWEN_Buffer_AppendString(tbuf, " int p_rv;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); } GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while(tm) { TYPEMAKER2_TYPE *mty; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); if (!(Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_VOLATILE)) { GWEN_Buffer_AppendString(tbuf, " /* member \""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\" */\n"); /* toDb */ if (1) { GWEN_BUFFER *srcbuf; int rv; srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(srcbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(srcbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_ToDbFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), NULL, /* no dest */ tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(srcbuf); } GWEN_Buffer_AppendString(tbuf, " if (p_rv<0) {\n"); GWEN_Buffer_AppendString(tbuf, " DBG_INFO(GWEN_LOGDOMAIN, \"here (%d)\\n\", p_rv);\n"); GWEN_Buffer_AppendString(tbuf, " return p_rv;\n"); GWEN_Buffer_AppendString(tbuf, " }\n"); } else { GWEN_Buffer_AppendString(tbuf, " /* member \""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\" is volatile, not writing to db */\n"); } GWEN_Buffer_AppendString(tbuf, "\n"); tm=Typemaker2_Member_List_Next(tm); } } GWEN_Buffer_AppendString(tbuf, " return 0;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildToDb(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_toDb(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, GWEN_DB_NODE *p_db);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_toDb(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, GWEN_DB_NODE *p_db) {\n"); GWEN_Buffer_AppendString(tbuf, " return "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_WriteDb(p_struct, p_db);\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildFromDb(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_fromDb(GWEN_DB_NODE *p_db);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_fromDb(GWEN_DB_NODE *p_db) {\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct;\n"); GWEN_Buffer_AppendString(tbuf, " p_struct="); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_new();\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_ReadDb(p_struct, p_db);\n"); GWEN_Buffer_AppendString(tbuf, " return p_struct;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildReadXml(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_MEMBER_LIST *tml; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "void "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_ReadXml("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, GWEN_XMLNODE *p_db);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "void "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_ReadXml("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, GWEN_XMLNODE *p_db) {\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while(tm) { TYPEMAKER2_TYPE *mty; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); GWEN_Buffer_AppendString(tbuf, " /* member \""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\" */\n"); /* release previous value */ if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer && (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_OWN)) { GWEN_Buffer_AppendString(tbuf, " if (p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ") {\n"); /* free */ if (1) { GWEN_BUFFER *srcbuf; int rv; srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(srcbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(srcbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_DestructFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), NULL, /* no dest */ tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(srcbuf); } GWEN_Buffer_AppendString(tbuf, " }\n"); } /* read form object */ if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_VOLATILE) { GWEN_BUFFER *dstbuf; int rv; /* volatile */ GWEN_Buffer_AppendString(tbuf, " /* member \""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\" is volatile, just presetting */\n"); dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dstbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(dstbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_ConstructFn(tb, ty, tm, NULL, /* no source */ GWEN_Buffer_GetStart(dstbuf), tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dstbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(dstbuf); } else { /* not volatile */ if (1) { /* from object */ GWEN_BUFFER *dstbuf; int rv; dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dstbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(dstbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_FromXmlFn(tb, ty, tm, NULL, /* no source */ GWEN_Buffer_GetStart(dstbuf), tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dstbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_free(dstbuf); GWEN_Buffer_AppendString(tbuf, "\n"); } if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer) { GWEN_Buffer_AppendString(tbuf, " if (p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "==NULL) {"); if (1) { GWEN_BUFFER *dstbuf; int rv; /* preset */ GWEN_Buffer_AppendString(tbuf, " /* preset member \""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\" if empty */\n"); dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dstbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(dstbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_ConstructFn(tb, ty, tm, NULL, /* no source */ GWEN_Buffer_GetStart(dstbuf), tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dstbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(dstbuf); } GWEN_Buffer_AppendString(tbuf, " }\n"); } } GWEN_Buffer_AppendString(tbuf, "\n"); tm=Typemaker2_Member_List_Next(tm); } } GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildWriteXml(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_MEMBER_LIST *tml; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "void "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_WriteXml(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, GWEN_XMLNODE *p_db);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "void "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_WriteXml(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, GWEN_XMLNODE *p_db) {\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while(tm) { TYPEMAKER2_TYPE *mty; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); if (!(Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_VOLATILE)) { GWEN_Buffer_AppendString(tbuf, " /* member \""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\" */\n"); /* toXml */ if (1) { GWEN_BUFFER *srcbuf; int rv; srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(srcbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(srcbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_ToXmlFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), NULL, /* no dest */ tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(srcbuf); } } else { GWEN_Buffer_AppendString(tbuf, " /* member \""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\" is volatile, not writing to xml */\n"); } GWEN_Buffer_AppendString(tbuf, "\n"); tm=Typemaker2_Member_List_Next(tm); } } GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildToXml(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "void "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_toXml(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, GWEN_XMLNODE *p_db);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "void "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_toXml(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, GWEN_XMLNODE *p_db) {\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_WriteXml(p_struct, p_db);\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildFromXml(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_fromXml(GWEN_XMLNODE *p_db);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_fromXml(GWEN_XMLNODE *p_db) {\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct;\n"); GWEN_Buffer_AppendString(tbuf, " p_struct="); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_new();\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_ReadXml(p_struct, p_db);\n"); GWEN_Buffer_AppendString(tbuf, " return p_struct;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildReadObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_MEMBER_LIST *tml; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_ReadObject("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, const AQDB_OBJECT *p_db);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_ReadObject("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, const AQDB_OBJECT *p_db) {\n"); if (Typemaker2_Type_GetNonVolatileMemberCount(ty)) { GWEN_Buffer_AppendString(tbuf, " int p_rv;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); } GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while(tm) { TYPEMAKER2_TYPE *mty; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); GWEN_Buffer_AppendString(tbuf, " /* member \""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\" */\n"); /* release previous value */ if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer && (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_OWN)) { GWEN_Buffer_AppendString(tbuf, " if (p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ") {\n"); /* free */ if (1) { GWEN_BUFFER *srcbuf; int rv; srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(srcbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(srcbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_DestructFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), NULL, /* no dest */ tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(srcbuf); } GWEN_Buffer_AppendString(tbuf, " }\n"); } /* read form object */ if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_VOLATILE) { GWEN_BUFFER *dstbuf; int rv; /* volatile */ GWEN_Buffer_AppendString(tbuf, " /* member \""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\" is volatile, just presetting */\n"); dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dstbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(dstbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_ConstructFn(tb, ty, tm, NULL, /* no source */ GWEN_Buffer_GetStart(dstbuf), tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dstbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(dstbuf); } else { /* not volatile */ if (1) { /* from object */ GWEN_BUFFER *dstbuf; int rv; dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dstbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(dstbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_FromObjectFn(tb, ty, tm, NULL, /* no source */ GWEN_Buffer_GetStart(dstbuf), tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dstbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_free(dstbuf); GWEN_Buffer_AppendString(tbuf, "\n"); } GWEN_Buffer_AppendString(tbuf, " if (p_rv<0) {\n"); GWEN_Buffer_AppendString(tbuf, " DBG_INFO(GWEN_LOGDOMAIN, \"here (%d)\\n\", p_rv);\n"); GWEN_Buffer_AppendString(tbuf, " return p_rv;\n"); GWEN_Buffer_AppendString(tbuf, " }\n"); } GWEN_Buffer_AppendString(tbuf, "\n"); tm=Typemaker2_Member_List_Next(tm); } } GWEN_Buffer_AppendString(tbuf, " return 0;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildWriteObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_MEMBER_LIST *tml; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_WriteObject(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, AQDB_OBJECT *p_db);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_WriteObject(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, AQDB_OBJECT *p_db) {\n"); if (Typemaker2_Type_GetNonVolatileMemberCount(ty)) { GWEN_Buffer_AppendString(tbuf, " int p_rv;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); } GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while(tm) { TYPEMAKER2_TYPE *mty; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); if (!(Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_VOLATILE)) { GWEN_Buffer_AppendString(tbuf, " /* member \""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\" */\n"); /* toObject */ if (1) { GWEN_BUFFER *srcbuf; int rv; srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(srcbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(srcbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_ToObjectFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), NULL, /* no dest */ tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(srcbuf); } GWEN_Buffer_AppendString(tbuf, " if (p_rv<0) {\n"); GWEN_Buffer_AppendString(tbuf, " DBG_INFO(GWEN_LOGDOMAIN, \"here (%d)\\n\", p_rv);\n"); GWEN_Buffer_AppendString(tbuf, " return p_rv;\n"); GWEN_Buffer_AppendString(tbuf, " }\n"); } else { GWEN_Buffer_AppendString(tbuf, " /* member \""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\" is volatile, not writing to object */\n"); } GWEN_Buffer_AppendString(tbuf, "\n"); tm=Typemaker2_Member_List_Next(tm); } } GWEN_Buffer_AppendString(tbuf, " return 0;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildToObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_toObject(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, AQDB_OBJECT *p_db);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_toObject(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, AQDB_OBJECT *p_db) {\n"); GWEN_Buffer_AppendString(tbuf, " return "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_WriteObject(p_struct, p_db);\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildFromObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_fromObject(const AQDB_OBJECT *p_db, "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " **pp_struct);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_fromObject(const AQDB_OBJECT *p_db, "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " **pp_struct) {\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct;\n"); GWEN_Buffer_AppendString(tbuf, " int p_rv;\n"); GWEN_Buffer_AppendString(tbuf, " p_struct="); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_new();\n"); GWEN_Buffer_AppendString(tbuf, " p_rv="); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_ReadObject(p_struct, p_db);\n"); GWEN_Buffer_AppendString(tbuf, " if (p_rv<0) {\n"); GWEN_Buffer_AppendString(tbuf, " DBG_INFO(GWEN_LOGDOMAIN, \"here (%d)\", p_rv);\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_free(p_struct);\n"); GWEN_Buffer_AppendString(tbuf, " return p_rv;\n"); GWEN_Buffer_AppendString(tbuf, " }\n"); GWEN_Buffer_AppendString(tbuf, " *pp_struct=p_struct;\n"); GWEN_Buffer_AppendString(tbuf, " return 0;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildCreateColumnList(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_MEMBER_LIST *tml; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "AQDB_COLUMN_LIST *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_CreateColumnList();\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "AQDB_COLUMN_LIST *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_CreateColumnList() {\n"); if (Typemaker2_Type_GetNonVolatileMemberCount(ty)==0) { GWEN_Buffer_AppendString(tbuf, " return NULL;\n"); } else { GWEN_Buffer_AppendString(tbuf, " AQDB_COLUMN_LIST *p_cl;\n"); GWEN_Buffer_AppendString(tbuf, " AQDB_COLUMN *p_c;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " p_cl=AQDB_Column_List_new();\n"); GWEN_Buffer_AppendString(tbuf, "\n"); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while(tm) { TYPEMAKER2_TYPE *mty; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); if (!(Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_VOLATILE)) { char numbuf[32]; int l; GWEN_Buffer_AppendString(tbuf, " /* member \""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\" */\n"); GWEN_Buffer_AppendString(tbuf, " p_c=AQDB_Column_new("); s=Typemaker2_Type_GetAqDbType(mty); if (s && *s) { GWEN_Buffer_AppendString(tbuf, s); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Type has no AQDB type element"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendString(tbuf, ", \""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\", "); l=Typemaker2_Member_GetMaxLen(tm); if (l==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Member [%s] has no maxlen attribute", Typemaker2_Member_GetName(tm)); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } snprintf(numbuf, sizeof(numbuf)-1, "%d", l); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(tbuf, numbuf); GWEN_Buffer_AppendString(tbuf, ");\n"); GWEN_Buffer_AppendString(tbuf, " AQDB_Column_List_Add(p_c, p_cl);\n"); } else { GWEN_Buffer_AppendString(tbuf, " /* member \""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\" is volatile, not adding to column list */\n"); } GWEN_Buffer_AppendString(tbuf, "\n"); tm=Typemaker2_Member_List_Next(tm); } } GWEN_Buffer_AppendString(tbuf, " return p_cl;\n"); } GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildDup(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_MEMBER_LIST *tml; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_dup(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_dup(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_src) {\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_src);\n"); GWEN_Buffer_AppendString(tbuf, " p_struct="); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_new();\n"); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while(tm) { TYPEMAKER2_TYPE *mty; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); if (!(Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_NODUP)) { GWEN_Buffer_AppendString(tbuf, " /* member \""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\" */\n"); if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer) { if (Typemaker2_Member_GetDupFlags(tm) & TYPEMAKER2_FLAGS_ASSIGN) { /* assign */ if (1) { GWEN_BUFFER *dstbuf; GWEN_BUFFER *srcbuf; int rv; dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dstbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(dstbuf, s); srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(srcbuf, "p_src->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(srcbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_AssignFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), GWEN_Buffer_GetStart(dstbuf), tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(dstbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(dstbuf); } } else { if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_OWN) { GWEN_Buffer_AppendString(tbuf, " if (p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ") {\n"); /* free */ if (1) { GWEN_BUFFER *srcbuf; int rv; srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(srcbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(srcbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_DestructFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), NULL, /* no dest */ tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(srcbuf); } /* preset with NULL */ GWEN_Buffer_AppendString(tbuf, " p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "=NULL;\n"); GWEN_Buffer_AppendString(tbuf, " }\n"); } else { /* preset with NULL */ GWEN_Buffer_AppendString(tbuf, " p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "=NULL;\n"); } GWEN_Buffer_AppendString(tbuf, " if (p_src->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ") {\n"); /* dup */ if (1) { GWEN_BUFFER *dstbuf; GWEN_BUFFER *srcbuf; int rv; dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dstbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(dstbuf, s); srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(srcbuf, "p_src->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(srcbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_DupFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), GWEN_Buffer_GetStart(dstbuf), tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(dstbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(dstbuf); } GWEN_Buffer_AppendString(tbuf, " }\n"); } } /* if pointer */ else { /* dup */ if (1) { GWEN_BUFFER *dstbuf; GWEN_BUFFER *srcbuf; int rv; dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dstbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(dstbuf, s); srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(srcbuf, "p_src->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(srcbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_DupFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), GWEN_Buffer_GetStart(dstbuf), tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(dstbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(dstbuf); } } } /* if !nodup */ else { GWEN_Buffer_AppendString(tbuf, " /* member \""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\" has nodup flag, not copying */\n"); } GWEN_Buffer_AppendString(tbuf, "\n"); tm=Typemaker2_Member_List_Next(tm); } } GWEN_Buffer_AppendString(tbuf, " return p_struct;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildCopy(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_MEMBER_LIST *tml; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_copy("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, const "); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_src);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_copy("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, const "); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_src) {\n"); GWEN_Buffer_AppendString(tbuf, " "); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_src);\n"); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while(tm) { TYPEMAKER2_TYPE *mty; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); if (!(Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_NOCOPY)) { GWEN_Buffer_AppendString(tbuf, " /* member \""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\" */\n"); #if 0 /* release previous value */ if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer && (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_OWN)) { GWEN_Buffer_AppendString(tbuf, " if (p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ") {\n"); /* free */ if (1) { GWEN_BUFFER *srcbuf; int rv; srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(srcbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(srcbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_DestructFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), NULL, /* no dest */ tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(srcbuf); } GWEN_Buffer_AppendString(tbuf, " }\n"); } #endif if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer) { if (Typemaker2_Member_GetCopyFlags(tm) & TYPEMAKER2_FLAGS_ASSIGN) { /* assign */ if (1) { GWEN_BUFFER *dstbuf; GWEN_BUFFER *srcbuf; int rv; dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dstbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(dstbuf, s); srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(srcbuf, "p_src->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(srcbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_AssignFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), GWEN_Buffer_GetStart(dstbuf), tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(dstbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(dstbuf); } } else { if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_OWN) { GWEN_Buffer_AppendString(tbuf, " if (p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ") {\n"); /* free */ if (1) { GWEN_BUFFER *srcbuf; int rv; srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(srcbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(srcbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_DestructFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), NULL, /* no dest */ tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(srcbuf); } /* preset with NULL */ GWEN_Buffer_AppendString(tbuf, " p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "=NULL;\n"); GWEN_Buffer_AppendString(tbuf, " }\n"); } else { /* preset with NULL */ GWEN_Buffer_AppendString(tbuf, " p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "=NULL;\n"); } GWEN_Buffer_AppendString(tbuf, " if (p_src->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ") {\n"); /* dup */ if (1) { GWEN_BUFFER *dstbuf; GWEN_BUFFER *srcbuf; int rv; dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dstbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(dstbuf, s); srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(srcbuf, "p_src->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(srcbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_DupFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), GWEN_Buffer_GetStart(dstbuf), tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(dstbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(dstbuf); } GWEN_Buffer_AppendString(tbuf, " }\n"); } } /* if pointer */ else { /* copy */ if (1) { GWEN_BUFFER *dstbuf; GWEN_BUFFER *srcbuf; int rv; dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dstbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(dstbuf, s); srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(srcbuf, "p_src->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(srcbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_DupFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), GWEN_Buffer_GetStart(dstbuf), tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(dstbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(dstbuf); } } } /* if !nocopy */ else { GWEN_Buffer_AppendString(tbuf, " /* member \""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\" has NOCOPY flag, not copying */\n"); } GWEN_Buffer_AppendString(tbuf, "\n"); tm=Typemaker2_Member_List_Next(tm); } } GWEN_Buffer_AppendString(tbuf, " return p_struct;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildList1Dup(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ /* prototype */ GWEN_Buffer_AppendString(tbuf, "/* list1 functions */\n"); s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_LIST *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_List_dup(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_LIST *p_src);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "/* list1 functions */\n"); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_LIST *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_List_dup(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_LIST *p_src) {\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_LIST *p_dest;\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_elem;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_src);\n"); GWEN_Buffer_AppendString(tbuf, " p_dest="); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_List_new();\n"); GWEN_Buffer_AppendString(tbuf, " p_elem="); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_List_First(p_src);\n"); GWEN_Buffer_AppendString(tbuf, " while(p_elem) {\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_cpy;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " p_cpy="); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_dup(p_elem);\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_List_Add(p_cpy, p_dest);\n"); GWEN_Buffer_AppendString(tbuf, " p_elem="); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_List_Next(p_elem);\n"); GWEN_Buffer_AppendString(tbuf, " }\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " return p_dest;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildCreateTable(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_CreateTable(AQDB_DB *p_db, const char *p_name, uint32_t p_flags);"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_CreateTable(AQDB_DB *p_db, const char *p_name, uint32_t p_flags) {\n"); GWEN_Buffer_AppendString(tbuf, " AQDB_COLUMN_LIST *p_cl;\n"); GWEN_Buffer_AppendString(tbuf, " int p_rv;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " p_cl="); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_CreateColumnList();\n"); GWEN_Buffer_AppendString(tbuf, " p_rv=AQDB_DB_CreateTable(p_db, p_name, p_flags, p_cl);\n"); GWEN_Buffer_AppendString(tbuf, " AQDB_Column_List_free(p_cl);\n"); GWEN_Buffer_AppendString(tbuf, " if (p_rv<0) {\n"); GWEN_Buffer_AppendString(tbuf, " DBG_INFO(GWEN_LOGDOMAIN, \"here (%d)\", p_rv);\n"); GWEN_Buffer_AppendString(tbuf, " return p_rv;\n"); GWEN_Buffer_AppendString(tbuf, " }\n"); GWEN_Buffer_AppendString(tbuf, " return 0;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildCreateObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_CreateObject(AQDB_DB *p_db, AQDB_ID p_tableId, AQDB_ID p_id, AQDB_OBJECT **pp_o);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_CreateObject(AQDB_DB *p_db, AQDB_ID p_tableId, AQDB_ID p_id, AQDB_OBJECT **pp_o) {\n"); GWEN_Buffer_AppendString(tbuf, " AQDB_OBJECT *p_o;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " p_o=AQDB_Object_new(p_tableId, p_id, "); s=Typemaker2_Type_GetFieldCountId(ty); if (s && *s) { } GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ");\n"); GWEN_Buffer_AppendString(tbuf, " *pp_o=p_o;\n"); GWEN_Buffer_AppendString(tbuf, " return 0;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildDefineEnums(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_ENUM_LIST *enums; /* TYPEMAKER2_TYPEMANAGER *tym; */ /* uint32_t flags; */ /* tym=Typemaker2_Builder_GetTypeManager(tb); */ enums=Typemaker2_Type_GetEnums(ty); /* flags=Typemaker2_Type_GetFlags(ty); */ assert(enums); if (Typemaker2_Enum_List_GetCount(enums)) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_ENUM *te; tbuf=GWEN_Buffer_new(0, 256, 0, 1); te=Typemaker2_Enum_List_First(enums); while(te) { const char *prefix; const char *etype; TYPEMAKER2_ITEM *ti; int access=TypeMaker2_Access_Public; prefix=Typemaker2_Enum_GetPrefix(te); if (prefix==NULL || *prefix==0) { DBG_ERROR(GWEN_LOGDOMAIN, "No prefix in enum definition"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } etype=Typemaker2_Enum_GetType(te); if (etype && *etype) GWEN_Buffer_AppendString(tbuf, "typedef enum {\n"); else GWEN_Buffer_AppendString(tbuf, "enum {\n"); GWEN_Buffer_AppendString(tbuf, " "); if (prefix) GWEN_Buffer_AppendString(tbuf, prefix); GWEN_Buffer_AppendString(tbuf, "Unknown = -1"); ti=Typemaker2_Item_List_First(Typemaker2_Enum_GetItems(te)); if (ti) GWEN_Buffer_AppendString(tbuf, ","); GWEN_Buffer_AppendString(tbuf, "\n"); while(ti) { GWEN_Buffer_AppendString(tbuf, " "); if (prefix) GWEN_Buffer_AppendString(tbuf, prefix); s=Typemaker2_Item_GetName(ti); if (s && *s) { GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); } s=Typemaker2_Item_GetValue(ti); if (s) { GWEN_Buffer_AppendString(tbuf, " = "); GWEN_Buffer_AppendString(tbuf, s); } ti=Typemaker2_Item_List_Next(ti); if (ti) GWEN_Buffer_AppendString(tbuf, ","); GWEN_Buffer_AppendString(tbuf, "\n"); } GWEN_Buffer_AppendString(tbuf, "}"); if (etype && *etype) { GWEN_Buffer_AppendString(tbuf, " "); GWEN_Buffer_AppendString(tbuf, etype); } GWEN_Buffer_AppendString(tbuf, ";\n"); GWEN_Buffer_AppendString(tbuf, "\n"); switch(access) { case TypeMaker2_Access_Public: Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Library: Typemaker2_Builder_AddLibraryDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Protected: Typemaker2_Builder_AddProtectedDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Private: Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Invalid access type"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_Reset(tbuf); te=Typemaker2_Enum_List_Next(te); } } return 0; } int _buildDefineVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *loc) { TYPEMAKER2_VIRTUALFN_LIST *fns; /* TYPEMAKER2_TYPEMANAGER *tym; */ /*uint32_t flags; */ /* tym=Typemaker2_Builder_GetTypeManager(tb); */ fns=Typemaker2_Type_GetVirtualFns(ty); /* flags=Typemaker2_Type_GetFlags(ty); */ assert(fns); if (Typemaker2_VirtualFn_List_GetCount(fns)) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_VIRTUALFN *vf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (loc && *loc) { GWEN_Buffer_AppendString(tbuf, "/* definitions for virtual functions ("); GWEN_Buffer_AppendString(tbuf, loc); GWEN_Buffer_AppendString(tbuf, ") */\n"); } else GWEN_Buffer_AppendString(tbuf, "/* definitions for virtual functions */\n"); vf=Typemaker2_VirtualFn_List_First(fns); while(vf) { s=Typemaker2_VirtualFn_GetLocation(vf); if (!(s && *s)) s="pre"; if (s && loc && strcasecmp(s, loc)==0) { int access=Typemaker2_VirtualFn_GetAccess(vf); TYPEMAKER2_VIRTUALFN_PARAM_LIST *plist; int i; GWEN_Buffer_AppendString(tbuf, "typedef "); s=Typemaker2_VirtualFn_GetReturnType(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " (*"); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } while(*s) { GWEN_Buffer_AppendByte(tbuf, toupper(*s)); s++; } GWEN_Buffer_AppendString(tbuf, "_FN)("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); /* created structs are always pointers */ GWEN_Buffer_AppendString(tbuf, " *p_struct"); plist=Typemaker2_VirtualFn_GetParamTypeList(vf); if (plist) { TYPEMAKER2_VIRTUALFN_PARAM *prm; i=1; prm=Typemaker2_VirtualFn_Param_List_First(plist); while(prm) { const char *paramName; const char *paramType; GWEN_Buffer_AppendString(tbuf, ", "); paramName=Typemaker2_VirtualFn_Param_GetName(prm); paramType=Typemaker2_VirtualFn_Param_GetType(prm); GWEN_Buffer_AppendString(tbuf, paramType); GWEN_Buffer_AppendString(tbuf, " "); if (paramName) GWEN_Buffer_AppendString(tbuf, paramName); else { char numbuf[64]; snprintf(numbuf, sizeof(numbuf)-1, "param%d", i); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(tbuf, numbuf); } prm=Typemaker2_VirtualFn_Param_List_Next(prm); i++; } } GWEN_Buffer_AppendString(tbuf, ");\n"); switch(access) { case TypeMaker2_Access_Public: Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Library: Typemaker2_Builder_AddLibraryDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Protected: Typemaker2_Builder_AddProtectedDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Private: Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Invalid access type"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_Reset(tbuf); } vf=Typemaker2_VirtualFn_List_Next(vf); } } return 0; } int _buildProtoVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_VIRTUALFN_LIST *fns; TYPEMAKER2_TYPEMANAGER *tym; /* uint32_t flags; */ tym=Typemaker2_Builder_GetTypeManager(tb); fns=Typemaker2_Type_GetVirtualFns(ty); /* flags=Typemaker2_Type_GetFlags(ty); */ assert(fns); if (Typemaker2_VirtualFn_List_GetCount(fns)) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_VIRTUALFN *vf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, "/* prototypes for virtual functions */\n"); vf=Typemaker2_VirtualFn_List_First(fns); while(vf) { int access=Typemaker2_VirtualFn_GetAccess(vf); TYPEMAKER2_VIRTUALFN_PARAM_LIST *plist; int i; /* write APIDOC */ GWEN_Buffer_AppendString(tbuf, "/**\n"); s=Typemaker2_VirtualFn_GetDescr(vf); if (s && *s) { int len; GWEN_Buffer_AppendString(tbuf, " * "); GWEN_Buffer_AppendString(tbuf, s); len=strlen(s); if (s[len-1]!='\n') GWEN_Buffer_AppendString(tbuf, "\n"); } s=Typemaker2_VirtualFn_GetReturnTypeDescr(vf); if (s && *s) { int len; GWEN_Buffer_AppendString(tbuf, " * @return "); GWEN_Buffer_AppendString(tbuf, s); len=strlen(s); if (s[len-1]!='\n') GWEN_Buffer_AppendString(tbuf, "\n"); } i=1; plist=Typemaker2_VirtualFn_GetParamTypeList(vf); if (plist) { TYPEMAKER2_VIRTUALFN_PARAM *prm; i=1; prm=Typemaker2_VirtualFn_Param_List_First(plist); while(prm) { const char *paramDescr; paramDescr=Typemaker2_VirtualFn_Param_GetDescr(prm); if (paramDescr && *paramDescr) { const char *paramName; int len; GWEN_Buffer_AppendString(tbuf, " * @param "); paramName=Typemaker2_VirtualFn_Param_GetName(prm); if (paramName) GWEN_Buffer_AppendString(tbuf, paramName); else { char numbuf[64]; snprintf(numbuf, sizeof(numbuf)-1, "param%d", i); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(tbuf, numbuf); } GWEN_Buffer_AppendString(tbuf, " "); GWEN_Buffer_AppendString(tbuf, paramDescr); len=strlen(paramDescr); if (paramDescr[len-1]!='\n') GWEN_Buffer_AppendString(tbuf, "\n"); } i++; prm=Typemaker2_VirtualFn_Param_List_Next(prm); } } GWEN_Buffer_AppendString(tbuf, " */\n"); s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s && *s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } s=Typemaker2_VirtualFn_GetReturnType(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); /* created structs are always pointers */ GWEN_Buffer_AppendString(tbuf, " *p_struct"); i=1; plist=Typemaker2_VirtualFn_GetParamTypeList(vf); if (plist) { TYPEMAKER2_VIRTUALFN_PARAM *prm; i=1; prm=Typemaker2_VirtualFn_Param_List_First(plist); while(prm) { const char *paramName; const char *paramType; GWEN_Buffer_AppendString(tbuf, ", "); paramName=Typemaker2_VirtualFn_Param_GetName(prm); paramType=Typemaker2_VirtualFn_Param_GetType(prm); GWEN_Buffer_AppendString(tbuf, paramType); GWEN_Buffer_AppendString(tbuf, " "); if (paramName) GWEN_Buffer_AppendString(tbuf, paramName); else { char numbuf[64]; snprintf(numbuf, sizeof(numbuf)-1, "param%d", i); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(tbuf, numbuf); } prm=Typemaker2_VirtualFn_Param_List_Next(prm); i++; } } GWEN_Buffer_AppendString(tbuf, ");\n"); switch(access) { case TypeMaker2_Access_Public: Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Library: Typemaker2_Builder_AddLibraryDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Protected: Typemaker2_Builder_AddProtectedDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Private: Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Invalid access type"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_Reset(tbuf); vf=Typemaker2_VirtualFn_List_Next(vf); } } return 0; } int _buildCodeVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_VIRTUALFN_LIST *fns; /* TYPEMAKER2_TYPEMANAGER *tym; */ /* uint32_t flags; */ /* tym=Typemaker2_Builder_GetTypeManager(tb); */ fns=Typemaker2_Type_GetVirtualFns(ty); /* flags=Typemaker2_Type_GetFlags(ty); */ assert(fns); if (Typemaker2_VirtualFn_List_GetCount(fns)) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_VIRTUALFN *vf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, "/* code for virtual functions */\n"); vf=Typemaker2_VirtualFn_List_First(fns); while(vf) { TYPEMAKER2_VIRTUALFN_PARAM_LIST *plist; int i; s=Typemaker2_VirtualFn_GetReturnType(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); /* created structs are always pointers */ GWEN_Buffer_AppendString(tbuf, " *p_struct"); i=1; plist=Typemaker2_VirtualFn_GetParamTypeList(vf); if (plist) { TYPEMAKER2_VIRTUALFN_PARAM *prm; i=1; prm=Typemaker2_VirtualFn_Param_List_First(plist); while(prm) { const char *paramName; const char *paramType; GWEN_Buffer_AppendString(tbuf, ", "); paramName=Typemaker2_VirtualFn_Param_GetName(prm); paramType=Typemaker2_VirtualFn_Param_GetType(prm); GWEN_Buffer_AppendString(tbuf, paramType); GWEN_Buffer_AppendString(tbuf, " "); if (paramName) GWEN_Buffer_AppendString(tbuf, paramName); else { char numbuf[64]; snprintf(numbuf, sizeof(numbuf)-1, "param%d", i); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(tbuf, numbuf); } prm=Typemaker2_VirtualFn_Param_List_Next(prm); i++; } } GWEN_Buffer_AppendString(tbuf, ") {\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); GWEN_Buffer_AppendString(tbuf, " if (p_struct->"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { DBG_ERROR(0, "Virtual functions has no name"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "Fn)\n"); GWEN_Buffer_AppendString(tbuf, " return p_struct->"); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "Fn(p_struct"); i=1; plist=Typemaker2_VirtualFn_GetParamTypeList(vf); if (plist) { TYPEMAKER2_VIRTUALFN_PARAM *prm; i=1; prm=Typemaker2_VirtualFn_Param_List_First(plist); while(prm) { const char *paramName; GWEN_Buffer_AppendString(tbuf, ", "); paramName=Typemaker2_VirtualFn_Param_GetName(prm); if (paramName) GWEN_Buffer_AppendString(tbuf, paramName); else { char numbuf[64]; snprintf(numbuf, sizeof(numbuf)-1, "param%d", i); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(tbuf, numbuf); } prm=Typemaker2_VirtualFn_Param_List_Next(prm); i++; } } GWEN_Buffer_AppendString(tbuf, ");\n"); GWEN_Buffer_AppendString(tbuf, " else\n"); GWEN_Buffer_AppendString(tbuf, " return "); s=Typemaker2_VirtualFn_GetDefaultReturnValue(vf); if (!(s && *s)) { DBG_ERROR(0, "No default return value"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ";\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); vf=Typemaker2_VirtualFn_List_Next(vf); } } return 0; } int _buildProtoSetterVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_VIRTUALFN_LIST *fns; TYPEMAKER2_TYPEMANAGER *tym; /* uint32_t flags; */ tym=Typemaker2_Builder_GetTypeManager(tb); fns=Typemaker2_Type_GetVirtualFns(ty); /* flags=Typemaker2_Type_GetFlags(ty); */ assert(fns); if (Typemaker2_VirtualFn_List_GetCount(fns)) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_VIRTUALFN *vf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, "/* setters for virtual functions */\n"); vf=Typemaker2_VirtualFn_List_First(fns); while(vf) { int access=Typemaker2_VirtualFn_GetAccess(vf); s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s && *s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } while(*s) GWEN_Buffer_AppendByte(tbuf, toupper(*(s++))); GWEN_Buffer_AppendString(tbuf, "_FN "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_Set"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "Fn("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); /* created structs are always pointers */ GWEN_Buffer_AppendString(tbuf, " *p_struct, "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } while(*s) GWEN_Buffer_AppendByte(tbuf, toupper(*(s++))); GWEN_Buffer_AppendString(tbuf, "_FN fn);\n"); switch(access) { case TypeMaker2_Access_Public: Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Library: Typemaker2_Builder_AddLibraryDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Protected: Typemaker2_Builder_AddProtectedDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Private: Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Invalid access type"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_Reset(tbuf); vf=Typemaker2_VirtualFn_List_Next(vf); } } return 0; } int _buildSetterVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_VIRTUALFN_LIST *fns; /* TYPEMAKER2_TYPEMANAGER *tym; */ /* uint32_t flags; */ /* tym=Typemaker2_Builder_GetTypeManager(tb); */ fns=Typemaker2_Type_GetVirtualFns(ty); /* flags=Typemaker2_Type_GetFlags(ty); */ assert(fns); if (Typemaker2_VirtualFn_List_GetCount(fns)) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_VIRTUALFN *vf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, "/* setters for virtual functions */\n"); vf=Typemaker2_VirtualFn_List_First(fns); while(vf) { s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } while(*s) GWEN_Buffer_AppendByte(tbuf, toupper(*(s++))); GWEN_Buffer_AppendString(tbuf, "_FN "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_Set"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "Fn("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); /* created structs are always pointers */ GWEN_Buffer_AppendString(tbuf, " *p_struct, "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } while(*s) GWEN_Buffer_AppendByte(tbuf, toupper(*(s++))); GWEN_Buffer_AppendString(tbuf, "_FN fn){\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } while(*s) GWEN_Buffer_AppendByte(tbuf, toupper(*(s++))); GWEN_Buffer_AppendString(tbuf, "_FN oldFn;\n\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); GWEN_Buffer_AppendString(tbuf, " oldFn=p_struct->"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "Fn;\n"); GWEN_Buffer_AppendString(tbuf, " p_struct->"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "Fn=fn;\n"); GWEN_Buffer_AppendString(tbuf, " return oldFn;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); vf=Typemaker2_VirtualFn_List_Next(vf); } } return 0; } static int _setEnumStringFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_ENUM_LIST *enums; /* TYPEMAKER2_TYPEMANAGER *tym; */ /* uint32_t flags; */ /* tym=Typemaker2_Builder_GetTypeManager(tb); */ enums=Typemaker2_Type_GetEnums(ty); /* flags=Typemaker2_Type_GetFlags(ty); */ assert(enums); if (Typemaker2_Enum_List_GetCount(enums)) { TYPEMAKER2_ENUM *te; te=Typemaker2_Enum_List_First(enums); while(te) { const char *prefix; GWEN_BUFFER *tbuf; prefix=Typemaker2_Enum_GetPrefix(te); if (prefix==NULL || *prefix==0) { DBG_ERROR(GWEN_LOGDOMAIN, "No prefix in enum definition"); return GWEN_ERROR_BAD_DATA; } tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (prefix && *prefix) { GWEN_Buffer_AppendString(tbuf, prefix); if (prefix[strlen(prefix)-1]!='_') GWEN_Buffer_AppendString(tbuf, "_"); } GWEN_Buffer_AppendString(tbuf, "fromString"); Typemaker2_Enum_SetFromStringFn(te, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); if (prefix && *prefix) { GWEN_Buffer_AppendString(tbuf, prefix); if (prefix[strlen(prefix)-1]!='_') GWEN_Buffer_AppendString(tbuf, "_"); } GWEN_Buffer_AppendString(tbuf, "toString"); Typemaker2_Enum_SetToStringFn(te, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); te=Typemaker2_Enum_List_Next(te); } } return 0; } static int _buildEnumFromString(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_ENUM_LIST *enums; TYPEMAKER2_TYPEMANAGER *tym; /* uint32_t flags; */ tym=Typemaker2_Builder_GetTypeManager(tb); enums=Typemaker2_Type_GetEnums(ty); /* flags=Typemaker2_Type_GetFlags(ty); */ assert(enums); if (Typemaker2_Enum_List_GetCount(enums)) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_ENUM *te; tbuf=GWEN_Buffer_new(0, 256, 0, 1); te=Typemaker2_Enum_List_First(enums); while(te) { const char *prefix; const char *etype; TYPEMAKER2_ITEM *ti; int acc=TypeMaker2_Access_Public; int i; prefix=Typemaker2_Enum_GetPrefix(te); if (prefix==NULL || *prefix==0) { DBG_ERROR(GWEN_LOGDOMAIN, "No prefix in enum definition"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } etype=Typemaker2_Enum_GetType(te); /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } if (etype && *etype) { GWEN_Buffer_AppendString(tbuf, etype); GWEN_Buffer_AppendString(tbuf, " "); } else GWEN_Buffer_AppendString(tbuf, "int "); if (prefix && *prefix) { GWEN_Buffer_AppendString(tbuf, prefix); if (prefix[strlen(prefix)-1]!='_') GWEN_Buffer_AppendString(tbuf, "_"); } GWEN_Buffer_AppendString(tbuf, "fromString(const char *p_s);\n"); switch(acc) { case TypeMaker2_Access_Public: Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Library: Typemaker2_Builder_AddLibraryDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Protected: Typemaker2_Builder_AddProtectedDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Private: Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Invalid access type"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_Reset(tbuf); /* implementation */ if (etype && *etype) { GWEN_Buffer_AppendString(tbuf, etype); GWEN_Buffer_AppendString(tbuf, " "); } else GWEN_Buffer_AppendString(tbuf, "int "); if (prefix && *prefix) { GWEN_Buffer_AppendString(tbuf, prefix); if (prefix[strlen(prefix)-1]!='_') GWEN_Buffer_AppendString(tbuf, "_"); } GWEN_Buffer_AppendString(tbuf, "fromString(const char *p_s) {\n"); GWEN_Buffer_AppendString(tbuf, " if (p_s && *p_s) {\n"); i=0; ti=Typemaker2_Item_List_First(Typemaker2_Enum_GetItems(te)); while(ti) { GWEN_Buffer_AppendString(tbuf, " "); if (i++) GWEN_Buffer_AppendString(tbuf, "else "); GWEN_Buffer_AppendString(tbuf, "if (strcasecmp(p_s, \""); s=Typemaker2_Item_GetName(ti); if (s && *s) { GWEN_Buffer_AppendByte(tbuf, tolower(*s)); GWEN_Buffer_AppendString(tbuf, s+1); } GWEN_Buffer_AppendString(tbuf, "\")==0)\n"); GWEN_Buffer_AppendString(tbuf, " return "); if (prefix) GWEN_Buffer_AppendString(tbuf, prefix); s=Typemaker2_Item_GetName(ti); if (s && *s) { GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); } GWEN_Buffer_AppendString(tbuf, ";\n"); ti=Typemaker2_Item_List_Next(ti); } GWEN_Buffer_AppendString(tbuf, " }\n"); GWEN_Buffer_AppendString(tbuf, " return "); if (prefix) GWEN_Buffer_AppendString(tbuf, prefix); GWEN_Buffer_AppendString(tbuf, "Unknown;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); te=Typemaker2_Enum_List_Next(te); } GWEN_Buffer_free(tbuf); } /* if enums */ return 0; } static int _buildEnumToString(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_ENUM_LIST *enums; TYPEMAKER2_TYPEMANAGER *tym; /* uint32_t flags; */ tym=Typemaker2_Builder_GetTypeManager(tb); enums=Typemaker2_Type_GetEnums(ty); /* flags=Typemaker2_Type_GetFlags(ty); */ assert(enums); if (Typemaker2_Enum_List_GetCount(enums)) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_ENUM *te; tbuf=GWEN_Buffer_new(0, 256, 0, 1); te=Typemaker2_Enum_List_First(enums); while(te) { const char *prefix; const char *etype; TYPEMAKER2_ITEM *ti; int acc=TypeMaker2_Access_Public; prefix=Typemaker2_Enum_GetPrefix(te); if (prefix==NULL || *prefix==0) { DBG_ERROR(GWEN_LOGDOMAIN, "No prefix in enum definition"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } etype=Typemaker2_Enum_GetType(te); /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "const char *"); if (prefix && *prefix) { GWEN_Buffer_AppendString(tbuf, prefix); if (prefix[strlen(prefix)-1]!='_') GWEN_Buffer_AppendString(tbuf, "_"); } GWEN_Buffer_AppendString(tbuf, "toString("); if (etype && *etype) GWEN_Buffer_AppendString(tbuf, etype); else GWEN_Buffer_AppendString(tbuf, "int"); GWEN_Buffer_AppendString(tbuf, " p_i);\n"); switch(acc) { case TypeMaker2_Access_Public: Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Library: Typemaker2_Builder_AddLibraryDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Protected: Typemaker2_Builder_AddProtectedDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Private: Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Invalid access type"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "const char *"); if (prefix && *prefix) { GWEN_Buffer_AppendString(tbuf, prefix); if (prefix[strlen(prefix)-1]!='_') GWEN_Buffer_AppendString(tbuf, "_"); } GWEN_Buffer_AppendString(tbuf, "toString("); if (etype && *etype) GWEN_Buffer_AppendString(tbuf, etype); else GWEN_Buffer_AppendString(tbuf, "int"); GWEN_Buffer_AppendString(tbuf, " p_i) {\n"); GWEN_Buffer_AppendString(tbuf, " switch(p_i) {\n"); ti=Typemaker2_Item_List_First(Typemaker2_Enum_GetItems(te)); while(ti) { GWEN_Buffer_AppendString(tbuf, " case "); if (prefix) GWEN_Buffer_AppendString(tbuf, prefix); s=Typemaker2_Item_GetName(ti); if (s && *s) { GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); } GWEN_Buffer_AppendString(tbuf, ": return \""); s=Typemaker2_Item_GetName(ti); if (s && *s) { GWEN_Buffer_AppendByte(tbuf, tolower(*s)); GWEN_Buffer_AppendString(tbuf, s+1); } GWEN_Buffer_AppendString(tbuf, "\";\n"); ti=Typemaker2_Item_List_Next(ti); } GWEN_Buffer_AppendString(tbuf, " default: return \"unknown\";\n"); GWEN_Buffer_AppendString(tbuf, " }\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); te=Typemaker2_Enum_List_Next(te); } GWEN_Buffer_free(tbuf); } /* if enums */ return 0; } static int _buildList1GetByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm) { GWEN_BUFFER *tbuf; const char *s; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; TYPEMAKER2_TYPE *mty; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_List_Get"); GWEN_Buffer_AppendString(tbuf, "By"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_LIST *p_list, "); if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer || Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Array) { GWEN_Buffer_AppendString(tbuf, " const "); s=Typemaker2_Type_GetIdentifier(mty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *"); } else { s=Typemaker2_Type_GetIdentifier(mty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "p_cmp);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_List_Get"); GWEN_Buffer_AppendString(tbuf, "By"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_LIST *p_list, "); if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer || Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Array) { GWEN_Buffer_AppendString(tbuf, " const "); s=Typemaker2_Type_GetIdentifier(mty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *"); } else { s=Typemaker2_Type_GetIdentifier(mty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "p_cmp) {\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_list);\n"); GWEN_Buffer_AppendString(tbuf, " p_struct = "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_List_First(p_list);\n"); GWEN_Buffer_AppendString(tbuf, " while(p_struct) {\n"); GWEN_Buffer_AppendString(tbuf, " int p_rv;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " "); if (1) { GWEN_BUFFER *dstbuf; GWEN_BUFFER *srcbuf; int rv; srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(srcbuf, "p_cmp"); dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dstbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(dstbuf, s); rv=Typemaker2_Builder_Invoke_CompareFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), GWEN_Buffer_GetStart(dstbuf), tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(dstbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(dstbuf); } GWEN_Buffer_AppendString(tbuf, " if (p_rv == 0)\n"); GWEN_Buffer_AppendString(tbuf, " return p_struct;\n"); GWEN_Buffer_AppendString(tbuf, " p_struct = "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_List_Next(p_struct);\n"); GWEN_Buffer_AppendString(tbuf, " }\n"); GWEN_Buffer_AppendString(tbuf, " return NULL;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildTreeGetByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm) { GWEN_BUFFER *tbuf; const char *s; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; TYPEMAKER2_TYPE *mty; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_Tree_Get"); GWEN_Buffer_AppendString(tbuf, "By"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_TREE *p_tree, "); if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer || Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Array) { GWEN_Buffer_AppendString(tbuf, " const "); s=Typemaker2_Type_GetIdentifier(mty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *"); } else { s=Typemaker2_Type_GetIdentifier(mty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "p_cmp);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_Tree_Get"); GWEN_Buffer_AppendString(tbuf, "By"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_TREE *p_tree, "); if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer || Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Array) { GWEN_Buffer_AppendString(tbuf, " const "); s=Typemaker2_Type_GetIdentifier(mty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *"); } else { s=Typemaker2_Type_GetIdentifier(mty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "p_cmp) {\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_tree);\n"); GWEN_Buffer_AppendString(tbuf, " p_struct = "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_Tree_GetFirst(p_tree);\n"); GWEN_Buffer_AppendString(tbuf, " while(p_struct) {\n"); GWEN_Buffer_AppendString(tbuf, " int p_rv;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " "); if (1) { GWEN_BUFFER *dstbuf; GWEN_BUFFER *srcbuf; int rv; srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(srcbuf, "p_cmp"); dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dstbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(dstbuf, s); rv=Typemaker2_Builder_Invoke_CompareFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), GWEN_Buffer_GetStart(dstbuf), tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(dstbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(dstbuf); } GWEN_Buffer_AppendString(tbuf, " if (p_rv == 0)\n"); GWEN_Buffer_AppendString(tbuf, " return p_struct;\n"); GWEN_Buffer_AppendString(tbuf, " p_struct = "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_Tree_GetBelow(p_struct);\n"); GWEN_Buffer_AppendString(tbuf, " }\n"); GWEN_Buffer_AppendString(tbuf, " return NULL;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildGetByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; TYPEMAKER2_MEMBER_LIST *tml; uint32_t flags; /* TYPEMAKER2_TYPEMANAGER *tym; */ /* tym=Typemaker2_Builder_GetTypeManager(tb); */ tbuf=GWEN_Buffer_new(0, 256, 0, 1); flags=Typemaker2_Type_GetFlags(ty); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while(tm) { TYPEMAKER2_TYPE *mty; int rv; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_WITH_GETBYMEMBER) { if (flags & TYPEMAKER2_FLAGS_WITH_LIST1) { rv=_buildList1GetByMember(tb, ty, tm); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } if (flags & TYPEMAKER2_FLAGS_WITH_TREE) { rv=_buildTreeGetByMember(tb, ty, tm); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } } tm=Typemaker2_Member_List_Next(tm); } GWEN_Buffer_AppendString(tbuf, " return p_cl;\n"); } return 0; } static int _buildList1SortByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm) { GWEN_BUFFER *tbuf; const char *s; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; TYPEMAKER2_TYPE *mty; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); /* ==== prototypes ========================================================*/ /* ---- _List_SortByMember ----------------------------------------------- */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } /* return type */ GWEN_Buffer_AppendString(tbuf, "void "); /* function name */ s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_List_SortBy"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); /* argument list */ GWEN_Buffer_AppendString(tbuf, "("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_LIST *p_list, int p_ascending);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* ---- _List_Compare_Member --------------------------------------------- */ /* return type */ GWEN_Buffer_AppendString(tbuf, "int GWENHYWFAR_CB "); /* function name */ s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_List_Compare_"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); /* argument list */ GWEN_Buffer_AppendString(tbuf, "(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_a, "); GWEN_Buffer_AppendString(tbuf, "const "); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_b, "); GWEN_Buffer_AppendString(tbuf, "int p_ascending);\n"); Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* ==== implementations =================================================== */ /* ---- _List_SortByMember ----------------------------------------------- */ /* return type */ GWEN_Buffer_AppendString(tbuf, "void "); /* function name */ s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_List_SortBy"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); /* argument list */ GWEN_Buffer_AppendString(tbuf, "("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_LIST *p_list, int p_ascending) {\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_LIST_SORT_FN oldSortFn;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " oldSortFn="); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_List_SetSortFn(p_list, "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_List_Compare_"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, ");\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_List_Sort(p_list, p_ascending);\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_List_SetSortFn(p_list, oldSortFn);\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* ---- _List_Compare_Member --------------------------------------------- */ /* return type */ GWEN_Buffer_AppendString(tbuf, "int GWENHYWFAR_CB "); /* function name */ s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_List_Compare_"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); /* argument list */ GWEN_Buffer_AppendString(tbuf, "(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_a, "); GWEN_Buffer_AppendString(tbuf, "const "); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_b, "); GWEN_Buffer_AppendString(tbuf, "int p_ascending) {\n"); GWEN_Buffer_AppendString(tbuf, " int p_rv;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); if (1) { GWEN_BUFFER *dstbuf; GWEN_BUFFER *srcbuf; int rv; srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(srcbuf, "p_a->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(srcbuf, s); dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dstbuf, "p_b->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(dstbuf, s); rv=Typemaker2_Builder_Invoke_CompareFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), GWEN_Buffer_GetStart(dstbuf), tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(dstbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(dstbuf); } GWEN_Buffer_AppendString(tbuf, " if (p_ascending)\n"); GWEN_Buffer_AppendString(tbuf, " return p_rv;\n"); GWEN_Buffer_AppendString(tbuf, " else\n"); GWEN_Buffer_AppendString(tbuf, " return -p_rv;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildSortByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_MEMBER_LIST *tml; uint32_t flags; /* TYPEMAKER2_TYPEMANAGER *tym; */ /* tym=Typemaker2_Builder_GetTypeManager(tb); */ flags=Typemaker2_Type_GetFlags(ty); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while(tm) { TYPEMAKER2_TYPE *mty; int rv; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_SORTBYMEMBER) { if (flags & TYPEMAKER2_FLAGS_WITH_LIST1) { rv=_buildList1SortByMember(tb, ty, tm); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } } tm=Typemaker2_Member_List_Next(tm); } } return 0; } static int _buildDefineDefines(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_DEFINE_LIST *defines; /* TYPEMAKER2_TYPEMANAGER *tym; */ /* uint32_t flags; */ /* tym=Typemaker2_Builder_GetTypeManager(tb); */ defines=Typemaker2_Type_GetDefines(ty); /* flags=Typemaker2_Type_GetFlags(ty); */ assert(defines); if (Typemaker2_Define_List_GetCount(defines)) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_DEFINE *td; tbuf=GWEN_Buffer_new(0, 256, 0, 1); td=Typemaker2_Define_List_First(defines); while(td) { const char *prefix; TYPEMAKER2_ITEM *ti; int access=TypeMaker2_Access_Public; int j=Typemaker2_Define_GetStartValue(td); GWEN_Buffer_AppendString(tbuf, "/* define "); s=Typemaker2_Define_GetId(td); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " */\n"); prefix=Typemaker2_Define_GetPrefix(td); if (prefix==NULL || *prefix==0) { DBG_ERROR(GWEN_LOGDOMAIN, "No prefix in define definition"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } ti=Typemaker2_Item_List_First(Typemaker2_Define_GetItems(td)); while(ti) { GWEN_Buffer_AppendString(tbuf, "#define "); if (prefix) GWEN_Buffer_AppendString(tbuf, prefix); s=Typemaker2_Item_GetName(ti); if (s && *s) { GWEN_Buffer_AppendString(tbuf, s); } s=Typemaker2_Item_GetValue(ti); if (s) { GWEN_Buffer_AppendString(tbuf, " "); GWEN_Buffer_AppendString(tbuf, s); } else { char numbuf[32]; int k=0; switch(Typemaker2_Define_GetMode(td)) { case Typemaker2_Define_Mode_BitField: k=1<"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(srcbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_ToHashStringFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), NULL, /* no dest */ tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(srcbuf); } GWEN_Buffer_AppendString(tbuf, " GWEN_Buffer_AppendByte(p_buffer, \':\');\n"); } else { GWEN_Buffer_AppendString(tbuf, " /* member \""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\" does not have the with_hash flag, ignoring */\n"); } tm=Typemaker2_Member_List_Next(tm); } } GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildInlines(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; uint32_t flags; /* TYPEMAKER2_TYPEMANAGER *tym; */ /* tym=Typemaker2_Builder_GetTypeManager(tb); */ tbuf=GWEN_Buffer_new(0, 256, 0, 1); flags=Typemaker2_Type_GetFlags(ty); while(ty) { TYPEMAKER2_INLINE *ti; ti=Typemaker2_Inline_List_First(Typemaker2_Type_GetInlines(ty)); while(ti) { if ((flags & Typemaker2_Inline_GetTypeFlagsMask(ti))==Typemaker2_Inline_GetTypeFlagsValue(ti)) { const char *content; content=Typemaker2_Inline_GetContent(ti); if (content && *content) { GWEN_DB_NODE *db; int rv; db=Typemaker2_Builder_CreateDbForCall(tb, ty, NULL, NULL, NULL); assert(db); rv=Typemaker2_Builder_ReplaceVars(content, db, tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } /* include code */ switch(Typemaker2_Inline_GetLocation(ti)) { case Typemaker2_InlineLocation_Header: switch(Typemaker2_Inline_GetAccess(ti)) { case TypeMaker2_Access_Public: Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Library: Typemaker2_Builder_AddLibraryDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Protected: Typemaker2_Builder_AddProtectedDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Private: Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Invalid access type"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } break; case Typemaker2_InlineLocation_Code: Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); break; } } GWEN_Buffer_Reset(tbuf); } ti=Typemaker2_Inline_List_Next(ti); } ty=Typemaker2_Type_GetExtendsPtr(ty); } return 0; } static int _buildAttach(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "void "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_Attach("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "void "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_Attach("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct) {\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_struct->_refCount);\n"); GWEN_Buffer_AppendString(tbuf, " p_struct->_refCount++;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildSignalFunctions(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; TYPEMAKER2_SIGNAL_LIST *sigList; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ sigList=Typemaker2_Type_GetSignals(ty); if (sigList) { TYPEMAKER2_SIGNAL *sig; /* prototype */ GWEN_Buffer_AppendString(tbuf, "/* signal functions */\n"); sig=Typemaker2_Signal_List_First(sigList); while(sig) { /* SignalConnect */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_SignalConnect_"); s=Typemaker2_Signal_GetName(sig); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, GWEN_SLOT *slot);\n"); /* SignalDisconnect */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_SignalDisconnect_"); s=Typemaker2_Signal_GetName(sig); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, GWEN_SLOT *slot);\n"); /* GetSignal */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "GWEN_SIGNAL *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_GetSignal_"); s=Typemaker2_Signal_GetName(sig); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct);\n"); /* EmitSignal */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_EmitSignal_"); s=Typemaker2_Signal_GetName(sig); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct"); s=Typemaker2_Signal_GetParamType1(sig); /* param 1 */ if (s && *s && strcasecmp(s, "none")) { GWEN_Buffer_AppendString(tbuf, ", "); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " param1"); } s=Typemaker2_Signal_GetParamType2(sig); /* param 2 */ if (s && *s && strcasecmp(s, "none")) { GWEN_Buffer_AppendString(tbuf, ", "); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " param2"); } if (Typemaker2_Signal_GetFlags(sig) & TYPEMAKER2_SIGNAL_FLAGS_USE_PARAM3) { GWEN_Buffer_AppendString(tbuf, ", int param3"); } if (Typemaker2_Signal_GetFlags(sig) & TYPEMAKER2_SIGNAL_FLAGS_USE_PARAM4) { GWEN_Buffer_AppendString(tbuf, ", int param4"); } GWEN_Buffer_AppendString(tbuf, ");\n"); sig=Typemaker2_Signal_List_Next(sig); } Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "/* signal functions */\n"); sig=Typemaker2_Signal_List_First(sigList); while(sig) { /* SignalConnect */ GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_SignalConnect_"); s=Typemaker2_Signal_GetName(sig); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, GWEN_SLOT *slot) {\n"); GWEN_Buffer_AppendString(tbuf, " GWEN_SIGNAL *sig;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); GWEN_Buffer_AppendString(tbuf, " sig=GWEN_SignalObject_FindSignal(p_struct->_signalObject, "); s=Typemaker2_Signal_GetName(sig); /* name */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\", "); s=Typemaker2_Signal_GetParamType1(sig); /* param 1 */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s?s:"none"); GWEN_Buffer_AppendString(tbuf, "\", "); s=Typemaker2_Signal_GetParamType2(sig); /* param 2 */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s?s:"none"); GWEN_Buffer_AppendString(tbuf, "\");\n"); GWEN_Buffer_AppendString(tbuf, " if (sig)\n"); GWEN_Buffer_AppendString(tbuf, " return GWEN_Signal_Connect(sig, slot);\n"); GWEN_Buffer_AppendString(tbuf, " else\n"); GWEN_Buffer_AppendString(tbuf, " return GWEN_ERROR_NOT_FOUND;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); GWEN_Buffer_AppendString(tbuf, "\n"); /* SignalDisconnect */ GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_SignalDisconnect_"); s=Typemaker2_Signal_GetName(sig); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, GWEN_SLOT *slot) {\n"); GWEN_Buffer_AppendString(tbuf, " GWEN_SIGNAL *sig;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); GWEN_Buffer_AppendString(tbuf, " sig=GWEN_SignalObject_FindSignal(p_struct->_signalObject, "); s=Typemaker2_Signal_GetName(sig); /* name */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\", "); s=Typemaker2_Signal_GetParamType1(sig); /* param 1 */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s?s:"none"); GWEN_Buffer_AppendString(tbuf, "\", "); s=Typemaker2_Signal_GetParamType2(sig); /* param 2 */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s?s:"none"); GWEN_Buffer_AppendString(tbuf, "\");\n"); GWEN_Buffer_AppendString(tbuf, " if (sig)\n"); GWEN_Buffer_AppendString(tbuf, " return GWEN_Signal_Disconnect(sig, slot);\n"); GWEN_Buffer_AppendString(tbuf, " else\n"); GWEN_Buffer_AppendString(tbuf, " return GWEN_ERROR_NOT_FOUND;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); GWEN_Buffer_AppendString(tbuf, "\n"); /* GetSignal */ GWEN_Buffer_AppendString(tbuf, "GWEN_SIGNAL *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_GetSignal_"); s=Typemaker2_Signal_GetName(sig); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct) {\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); GWEN_Buffer_AppendString(tbuf, " return GWEN_SignalObject_FindSignal(p_struct->_signalObject, "); s=Typemaker2_Signal_GetName(sig); /* name */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\", "); s=Typemaker2_Signal_GetParamType1(sig); /* param 1 */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s?s:"none"); GWEN_Buffer_AppendString(tbuf, "\", "); s=Typemaker2_Signal_GetParamType2(sig); /* param 2 */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s?s:"none"); GWEN_Buffer_AppendString(tbuf, "\");\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); GWEN_Buffer_AppendString(tbuf, "\n"); /* EmitSignal */ GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_EmitSignal_"); s=Typemaker2_Signal_GetName(sig); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct"); s=Typemaker2_Signal_GetParamType1(sig); /* param 1 */ if (s && *s && strcasecmp(s, "none")) { GWEN_Buffer_AppendString(tbuf, ", "); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " param1"); } s=Typemaker2_Signal_GetParamType2(sig); /* param 2 */ if (s && *s && strcasecmp(s, "none")) { GWEN_Buffer_AppendString(tbuf, ", "); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " param2"); } if (Typemaker2_Signal_GetFlags(sig) & TYPEMAKER2_SIGNAL_FLAGS_USE_PARAM3) { GWEN_Buffer_AppendString(tbuf, ", int param3"); } if (Typemaker2_Signal_GetFlags(sig) & TYPEMAKER2_SIGNAL_FLAGS_USE_PARAM4) { GWEN_Buffer_AppendString(tbuf, ", int param4"); } GWEN_Buffer_AppendString(tbuf, "){\n"); GWEN_Buffer_AppendString(tbuf, " GWEN_SIGNAL *sig;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); GWEN_Buffer_AppendString(tbuf, " sig=GWEN_SignalObject_FindSignal(p_struct->_signalObject, "); s=Typemaker2_Signal_GetName(sig); /* name */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\", "); s=Typemaker2_Signal_GetParamType1(sig); /* param 1 */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s?s:"none"); GWEN_Buffer_AppendString(tbuf, "\", "); s=Typemaker2_Signal_GetParamType2(sig); /* param 2 */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s?s:"none"); GWEN_Buffer_AppendString(tbuf, "\");\n"); GWEN_Buffer_AppendString(tbuf, " if (sig) \n"); GWEN_Buffer_AppendString(tbuf, " return GWEN_Signal_Emit(sig, "); s=Typemaker2_Signal_GetParamType1(sig); /* param 1 */ if (s && *s && strcasecmp(s, "none")) { GWEN_Buffer_AppendString(tbuf, "(void*) "); GWEN_Buffer_AppendString(tbuf, "param1, "); } else GWEN_Buffer_AppendString(tbuf, "NULL, "); s=Typemaker2_Signal_GetParamType2(sig); /* param 2 */ if (s && *s && strcasecmp(s, "none")) { GWEN_Buffer_AppendString(tbuf, "(void*) "); GWEN_Buffer_AppendString(tbuf, " param2, "); } else GWEN_Buffer_AppendString(tbuf, "NULL, "); if (Typemaker2_Signal_GetFlags(sig) & TYPEMAKER2_SIGNAL_FLAGS_USE_PARAM3) GWEN_Buffer_AppendString(tbuf, "param3, "); else GWEN_Buffer_AppendString(tbuf, "0, "); if (Typemaker2_Signal_GetFlags(sig) & TYPEMAKER2_SIGNAL_FLAGS_USE_PARAM4) GWEN_Buffer_AppendString(tbuf, "param4"); else GWEN_Buffer_AppendString(tbuf, "0"); GWEN_Buffer_AppendString(tbuf, ");\n"); GWEN_Buffer_AppendString(tbuf, " else\n"); GWEN_Buffer_AppendString(tbuf, " return 0;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); GWEN_Buffer_AppendString(tbuf, "\n"); sig=Typemaker2_Signal_List_Next(sig); } Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); } GWEN_Buffer_free(tbuf); return 0; } static int _buildSlotFunctions(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_TYPEMANAGER *tym; TYPEMAKER2_SLOT_LIST *slotList; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); slotList=Typemaker2_Type_GetSlots(ty); if (slotList) { TYPEMAKER2_SLOT *slot; /* private prototypes */ GWEN_Buffer_AppendString(tbuf, "/* slot functions */\n"); slot=Typemaker2_Slot_List_First(slotList); while(slot) { /* callback function */ GWEN_Buffer_AppendString(tbuf, "static int GWENHYWFAR_CB "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_SlotCallback_"); s=Typemaker2_Slot_GetName(slot); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "(GWEN_SLOT *slot, void *userData, void *p1, void *p2, int p3, int p4);\n"); slot=Typemaker2_Slot_List_Next(slot); } Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* public prototypes */ GWEN_Buffer_AppendString(tbuf, "/* slot functions */\n"); slot=Typemaker2_Slot_List_First(slotList); while(slot) { /* GetSlot */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "GWEN_SLOT *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_GetSlot_"); s=Typemaker2_Slot_GetName(slot); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct);\n"); slot=Typemaker2_Slot_List_Next(slot); } Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "/* slot functions */\n"); slot=Typemaker2_Slot_List_First(slotList); while(slot) { /* callback function */ GWEN_Buffer_AppendString(tbuf, "static int GWENHYWFAR_CB "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_SlotCallback_"); s=Typemaker2_Slot_GetName(slot); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "(GWEN_SLOT *slot, void *userData, void *p1, void *p2, int p3, int p4) {\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " p_struct=("); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "*) userData;\n"); GWEN_Buffer_AppendString(tbuf, " return "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_"); s=Typemaker2_Slot_GetName(slot); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "(p_struct"); s=Typemaker2_Slot_GetParamType1(slot); /* param 1 */ if (s && *s && strcasecmp(s, "none")) { GWEN_Buffer_AppendString(tbuf, ", ("); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ") p1"); } s=Typemaker2_Slot_GetParamType2(slot); /* param 2 */ if (s && *s && strcasecmp(s, "none")) { GWEN_Buffer_AppendString(tbuf, ", ("); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ") p2"); } if (Typemaker2_Slot_GetFlags(slot) & TYPEMAKER2_SLOT_FLAGS_USE_PARAM3) GWEN_Buffer_AppendString(tbuf, ", p3"); if (Typemaker2_Slot_GetFlags(slot) & TYPEMAKER2_SLOT_FLAGS_USE_PARAM4) GWEN_Buffer_AppendString(tbuf, ", p4"); GWEN_Buffer_AppendString(tbuf, ");\n"); GWEN_Buffer_AppendString(tbuf, "}\n\n"); /* GetSlot */ GWEN_Buffer_AppendString(tbuf, "GWEN_SLOT *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_GetSlot_"); s=Typemaker2_Slot_GetName(slot); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct) {\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); GWEN_Buffer_AppendString(tbuf, " return GWEN_SignalObject_FindSlot(p_struct->_signalObject, "); s=Typemaker2_Slot_GetName(slot); /* name */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\", "); s=Typemaker2_Slot_GetParamType1(slot); /* param 1 */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s?s:"none"); GWEN_Buffer_AppendString(tbuf, "\", "); s=Typemaker2_Slot_GetParamType2(slot); /* param 2 */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s?s:"none"); GWEN_Buffer_AppendString(tbuf, "\");\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); GWEN_Buffer_AppendString(tbuf, "\n"); slot=Typemaker2_Slot_List_Next(slot); } Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); } GWEN_Buffer_free(tbuf); return 0; } static int _buildCacheFunctions(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* public prototypes */ GWEN_Buffer_AppendString(tbuf, "/* cache functions */\n"); s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "int GWENHYWFAR_CB "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_CacheFn_Attach(void *ptr);\n"); GWEN_Buffer_AppendString(tbuf, "\n"); s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "int GWENHYWFAR_CB "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_CacheFn_Free(void *ptr);\n"); GWEN_Buffer_AppendString(tbuf, "\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementations */ GWEN_Buffer_AppendString(tbuf, "/* cache functions */\n"); GWEN_Buffer_AppendString(tbuf, "int GWENHYWFAR_CB "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_CacheFn_Attach(void *ptr) {\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_Attach(("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "*) ptr);\n"); GWEN_Buffer_AppendString(tbuf, " return 0;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, "int GWENHYWFAR_CB "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_CacheFn_Free(void *ptr){\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_free(("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "*) ptr);\n"); GWEN_Buffer_AppendString(tbuf, " return 0;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); GWEN_Buffer_AppendString(tbuf, "\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildGroupApiDoc(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_GROUP *grp, int depth, GWEN_BUFFER *buf) { char numbuf[32]; const char *s; TYPEMAKER2_GROUP *childGrp; TYPEMAKER2_MEMBER_LIST *members; const char *sTypeIdentifier; const char *sTypePrefix; sTypeIdentifier=Typemaker2_Type_GetIdentifier(ty); sTypePrefix=Typemaker2_Type_GetPrefix(ty); /* write title */ GWEN_Buffer_AppendString(buf, "\n\n"); GWEN_Buffer_AppendString(buf, ""); s=Typemaker2_Group_GetTitle(grp); if (s && *s) GWEN_Buffer_AppendString(buf, s); else GWEN_Buffer_AppendString(buf, "Unnamed Group"); GWEN_Buffer_AppendString(buf, "\n"); GWEN_Buffer_AppendString(buf, "\n"); s=Typemaker2_Group_GetDescription(grp); if (s && *s) { GWEN_Buffer_AppendString(buf, s); GWEN_Buffer_AppendString(buf, "\n"); } /* write member docs */ members=Typemaker2_Type_GetMembers(ty); if (members) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(members); while(tm) { if (Typemaker2_Member_GetGroupPtr(tm)==grp) { const char *sMemberName; /* write APIDOC for member */ sMemberName=Typemaker2_Member_GetName(tm); /* write anchor */ GWEN_Buffer_AppendString(buf, "\n\n@anchor "); GWEN_Buffer_AppendString(buf, sTypeIdentifier); GWEN_Buffer_AppendString(buf, "_"); GWEN_Buffer_AppendString(buf, sMemberName); GWEN_Buffer_AppendString(buf, "\n"); /* write name */ GWEN_Buffer_AppendString(buf, ""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(buf, s); GWEN_Buffer_AppendString(buf, "\n"); GWEN_Buffer_AppendString(buf, "\n"); /* add description, if any */ s=Typemaker2_Member_GetDescription(tm); if (s && *s) { GWEN_Buffer_AppendString(buf, s); GWEN_Buffer_AppendString(buf, "\n"); } /* add setter/getter info */ GWEN_Buffer_AppendString(buf, "

"); GWEN_Buffer_AppendString(buf, "Set this property with @ref "); GWEN_Buffer_AppendString(buf, sTypePrefix); GWEN_Buffer_AppendString(buf, "_Set"); GWEN_Buffer_AppendByte(buf, toupper(*sMemberName)); GWEN_Buffer_AppendString(buf, sMemberName+1); GWEN_Buffer_AppendString(buf, "(), get it with @ref "); GWEN_Buffer_AppendString(buf, sTypePrefix); GWEN_Buffer_AppendString(buf, "_Get"); GWEN_Buffer_AppendByte(buf, toupper(*sMemberName)); GWEN_Buffer_AppendString(buf, sMemberName+1); GWEN_Buffer_AppendString(buf, "()."); GWEN_Buffer_AppendString(buf, "

\n"); } tm=Typemaker2_Member_List_Next(tm); } } /* write children groups */ childGrp=Typemaker2_Group_Tree_GetFirstChild(grp); while(childGrp) { int rv; rv=_buildGroupApiDoc(tb, ty, childGrp, depth+1, buf); if (rv<0) { DBG_ERROR(0, "here (%d)", rv); return rv; } childGrp=Typemaker2_Group_Tree_GetNext(childGrp); } return 0; } static int _buildApiDoc(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_GROUP_TREE *groupTree; TYPEMAKER2_GROUP *grp; GWEN_BUFFER *tbuf; const char *sTypeIdentifier; sTypeIdentifier=Typemaker2_Type_GetIdentifier(ty); groupTree=Typemaker2_Type_GetGroupTree(ty); tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, "/** @page P_"); GWEN_Buffer_AppendString(tbuf, sTypeIdentifier); GWEN_Buffer_AppendString(tbuf, " Structure "); GWEN_Buffer_AppendString(tbuf, sTypeIdentifier); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, "

This page describes the properties of "); GWEN_Buffer_AppendString(tbuf, sTypeIdentifier); GWEN_Buffer_AppendString(tbuf, ".

\n"); GWEN_Buffer_AppendString(tbuf, "\n"); grp=Typemaker2_Group_Tree_GetFirst(groupTree); while(grp) { _buildGroupApiDoc(tb, ty, grp, 1, tbuf); grp=Typemaker2_Group_Tree_GetNext(grp); } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, "*/\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _addVirtualFnsFromSlots(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_VIRTUALFN_LIST *fnList; TYPEMAKER2_SLOT_LIST *slotList; tbuf=GWEN_Buffer_new(0, 256, 0, 1); fnList=Typemaker2_Type_GetVirtualFns(ty); slotList=Typemaker2_Type_GetSlots(ty); if (slotList) { TYPEMAKER2_SLOT *slot; slot=Typemaker2_Slot_List_First(slotList); while(slot) { TYPEMAKER2_VIRTUALFN *fn; TYPEMAKER2_VIRTUALFN_PARAM_LIST *plist; /* callback function */ s=Typemaker2_Slot_GetName(slot); GWEN_Buffer_AppendByte(tbuf, tolower(*s)); GWEN_Buffer_AppendString(tbuf, s+1); fn=Typemaker2_VirtualFn_new(); plist=Typemaker2_VirtualFn_GetParamTypeList(fn); /* name */ Typemaker2_VirtualFn_SetName(fn, GWEN_Buffer_GetStart(tbuf)); s=Typemaker2_Slot_GetParamType1(slot); /* param 1 */ if (s && *s && strcasecmp(s, "none")) { TYPEMAKER2_VIRTUALFN_PARAM *prm; prm=Typemaker2_VirtualFn_Param_new(); Typemaker2_VirtualFn_Param_SetType(prm, s); Typemaker2_VirtualFn_Param_List_Add(prm, plist); } s=Typemaker2_Slot_GetParamType2(slot); /* param 2 */ if (s && *s && strcasecmp(s, "none")) { TYPEMAKER2_VIRTUALFN_PARAM *prm; prm=Typemaker2_VirtualFn_Param_new(); Typemaker2_VirtualFn_Param_SetType(prm, s); Typemaker2_VirtualFn_Param_List_Add(prm, plist); } if (Typemaker2_Slot_GetFlags(slot) & TYPEMAKER2_SLOT_FLAGS_USE_PARAM3) { TYPEMAKER2_VIRTUALFN_PARAM *prm; prm=Typemaker2_VirtualFn_Param_new(); Typemaker2_VirtualFn_Param_SetType(prm, "int"); Typemaker2_VirtualFn_Param_List_Add(prm, plist); } if (Typemaker2_Slot_GetFlags(slot) & TYPEMAKER2_SLOT_FLAGS_USE_PARAM4) { TYPEMAKER2_VIRTUALFN_PARAM *prm; prm=Typemaker2_VirtualFn_Param_new(); Typemaker2_VirtualFn_Param_SetType(prm, "int"); Typemaker2_VirtualFn_Param_List_Add(prm, plist); } Typemaker2_VirtualFn_SetAccess(fn, TypeMaker2_Access_Public); Typemaker2_VirtualFn_SetLocation(fn, "post"); Typemaker2_VirtualFn_SetReturnType(fn, "int"); Typemaker2_VirtualFn_SetDefaultReturnValue(fn, "GWEN_ERROR_NOT_IMPLEMENTED"); Typemaker2_VirtualFn_AddFlags(fn, TYPEMAKER2_VIRTUALFN_FLAGS_FROMSLOT); Typemaker2_VirtualFn_List_Add(fn, fnList); slot=Typemaker2_Slot_List_Next(slot); } } GWEN_Buffer_free(tbuf); return 0; } static void _delVirtualFnsFromSlots(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_VIRTUALFN_LIST *fnList; fnList=Typemaker2_Type_GetVirtualFns(ty); if (fnList) { TYPEMAKER2_VIRTUALFN *fn; fn=Typemaker2_VirtualFn_List_First(fnList); while(fn) { TYPEMAKER2_VIRTUALFN *fnNext; fnNext=Typemaker2_VirtualFn_List_Next(fn); if (Typemaker2_VirtualFn_GetFlags(fn) & TYPEMAKER2_VIRTUALFN_FLAGS_FROMSLOT) { Typemaker2_VirtualFn_List_Del(fn); Typemaker2_VirtualFn_free(fn); } fn=fnNext; } } } static int Typemaker2_Builder_C_Build(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { int rv; uint32_t flags; flags=Typemaker2_Type_GetFlags(ty); if (flags & TYPEMAKER2_FLAGS_WITH_SLOTS) { _delVirtualFnsFromSlots(tb, ty); rv=_addVirtualFnsFromSlots(tb,ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } rv=_setEnumStringFns(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } if (flags & TYPEMAKER2_FLAGS_WITH_OBJECT) { rv=_buildFieldIds(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } rv=_buildApiDoc(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildDefineDefines(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildTypedef(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildDefineEnums(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildDefineVirtualFns(tb, ty, "pre"); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildPostHeaders(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildDefineVirtualFns(tb, ty, "post"); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildStruct(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildMacroFunctions(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildEnumFromString(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildEnumToString(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildConstructor(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildDestructor(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } if (flags & TYPEMAKER2_FLAGS_WITH_REFCOUNT) { rv=_buildAttach(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } if (!(flags & TYPEMAKER2_FLAGS_NODUP)) { rv=_buildDup(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } if (!(flags & TYPEMAKER2_FLAGS_NOCOPY)) { rv=_buildCopy(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } rv=_buildGetter(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildSetter(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildProtoVirtualFns(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildCodeVirtualFns(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildProtoSetterVirtualFns(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildSetterVirtualFns(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } if (flags & TYPEMAKER2_FLAGS_WITH_LIST1) { if (!(flags & TYPEMAKER2_FLAGS_NODUP)) { rv=_buildList1Dup(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } } if (flags & TYPEMAKER2_FLAGS_WITH_DB) { rv=_buildReadDb(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildWriteDb(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildFromDb(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildToDb(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } if (flags & TYPEMAKER2_FLAGS_WITH_XML) { rv=_buildReadXml(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildWriteXml(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildToXml(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildFromXml(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } if (flags & TYPEMAKER2_FLAGS_WITH_OBJECT) { rv=_buildReadObject(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildWriteObject(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildToObject(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildFromObject(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildCreateColumnList(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildCreateTable(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildCreateObject(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } rv=_buildGetByMember(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } if (flags & TYPEMAKER2_FLAGS_WITH_HASH) { rv=_buildToHashString(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } rv=_buildSortByMember(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } if (flags & TYPEMAKER2_FLAGS_WITH_SIGNALS) { rv=_buildSignalFunctions(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } if (flags & TYPEMAKER2_FLAGS_WITH_SLOTS) { rv=_buildSlotFunctions(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } if (flags & TYPEMAKER2_FLAGS_WITH_CACHEFNS) { rv=_buildCacheFunctions(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } rv=_buildInlines(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } TYPEMAKER2_BUILDER *Typemaker2_Builder_C_new() { TYPEMAKER2_BUILDER *tb; tb=Typemaker2_Builder_new(); Typemaker2_Builder_SetBuildFn(tb, Typemaker2_Builder_C_Build); return tb; } gwenhywfar-4.15.2beta/tools/typemaker2/tm_type.h0000644000175000017500000002012412641054644016623 00000000000000/*************************************************************************** begin : Wed Jul 01 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_TYPE_H #define TYPEMAKER2_TYPE_H #include #include #include #include typedef struct TYPEMAKER2_TYPE TYPEMAKER2_TYPE; GWEN_LIST_FUNCTION_DEFS(TYPEMAKER2_TYPE, Typemaker2_Type) GWEN_LIST2_FUNCTION_DEFS(TYPEMAKER2_TYPE, Typemaker2_Type) /* don't forget to add new flags to tm_util.c ! */ #define TYPEMAKER2_FLAGS_OWN 0x00000001 #define TYPEMAKER2_FLAGS_VOLATILE 0x00000002 #define TYPEMAKER2_FLAGS_CONST 0x00000004 #define TYPEMAKER2_FLAGS_STATIC 0x00000008 #define TYPEMAKER2_FLAGS_DUP 0x00000010 #define TYPEMAKER2_FLAGS_NODUP 0x00000020 #define TYPEMAKER2_FLAGS_ATTRIBUTE 0x00000040 #define TYPEMAKER2_FLAGS_ENUM 0x00000080 #define TYPEMAKER2_FLAGS_DEFINE 0x00000100 #define TYPEMAKER2_FLAGS_ASSIGN 0x00000200 #define TYPEMAKER2_FLAGS_OMIT 0x00000400 #define TYPEMAKER2_FLAGS_COPY 0x00000800 #define TYPEMAKER2_FLAGS_NOCOPY 0x00001000 #define TYPEMAKER2_FLAGS_SORTBYMEMBER 0x00002000 #define TYPEMAKER2_FLAGS_NOCONSTOBJECT 0x00004000 /** special value which is used to overwrite flags from extended types */ #define TYPEMAKER2_FLAGS_NONE 0x00008000 #define TYPEMAKER2_FLAGS_WITH_DB 0x00010000 #define TYPEMAKER2_FLAGS_WITH_XML 0x00020000 #define TYPEMAKER2_FLAGS_WITH_OBJECT 0x00040000 #define TYPEMAKER2_FLAGS_WITH_LIST1 0x00080000 #define TYPEMAKER2_FLAGS_WITH_LIST2 0x00100000 #define TYPEMAKER2_FLAGS_WITH_INHERIT 0x00200000 #define TYPEMAKER2_FLAGS_WITH_IDMAP 0x00400000 #define TYPEMAKER2_FLAGS_WITH_GETBYMEMBER 0x00800000 #define TYPEMAKER2_FLAGS_WITH_TREE 0x01000000 #define TYPEMAKER2_FLAGS_WITH_HASH 0x02000000 #define TYPEMAKER2_FLAGS_WITH_REFCOUNT 0x04000000 #define TYPEMAKER2_FLAGS_WITH_FLAGS 0x08000000 #define TYPEMAKER2_FLAGS_WITH_HASHNUM 0x10000000 #define TYPEMAKER2_FLAGS_WITH_SIGNALS 0x20000000 #define TYPEMAKER2_FLAGS_WITH_SLOTS 0x40000000 #define TYPEMAKER2_FLAGS_WITH_CACHEFNS 0x80000000 enum { TypeMaker2_Type_Unknown=0, TypeMaker2_Type_Opaque, TypeMaker2_Type_Pointer, TypeMaker2_Type_Array }; enum { TypeMaker2_Access_Unknown=0, TypeMaker2_Access_Public, TypeMaker2_Access_Protected, TypeMaker2_Access_Library, TypeMaker2_Access_Private }; #include "tm_member.h" #include "tm_header.h" #include "tm_enum.h" #include "tm_define.h" #include "tm_code.h" #include "tm_inline.h" #include "tm_virtualfn.h" #include "tm_signal.h" #include "tm_slot.h" #include "tm_group.h" TYPEMAKER2_TYPE *Typemaker2_Type_new(); void Typemaker2_Type_free(TYPEMAKER2_TYPE *ty); void Typemaker2_Type_Attach(TYPEMAKER2_TYPE *ty); const char *Typemaker2_Type_GetName(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetName(TYPEMAKER2_TYPE *ty, const char *s); const char *Typemaker2_Type_GetExtends(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetExtends(TYPEMAKER2_TYPE *ty, const char *s); const char *Typemaker2_Type_GetBaseType(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetBaseType(TYPEMAKER2_TYPE *ty, const char *s); int Typemaker2_Type_GetType(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetType(TYPEMAKER2_TYPE *ty, int i); const char *Typemaker2_Type_GetAqDbType(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetAqDbType(TYPEMAKER2_TYPE *ty, const char *s); const char *Typemaker2_Type_GetBaseFileName(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetBaseFileName(TYPEMAKER2_TYPE *ty, const char *s); const char *Typemaker2_Type_GetFreeHook(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetFreeHook(TYPEMAKER2_TYPE *ty, const char *s); uint32_t Typemaker2_Type_GetFlags(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetFlags(TYPEMAKER2_TYPE *ty, uint32_t i); uint32_t Typemaker2_Type_GetSetFlags(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetSetFlags(TYPEMAKER2_TYPE *ty, uint32_t i); uint32_t Typemaker2_Type_GetGetFlags(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetGetFlags(TYPEMAKER2_TYPE *ty, uint32_t i); uint32_t Typemaker2_Type_GetDupFlags(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetDupFlags(TYPEMAKER2_TYPE *ty, uint32_t i); uint32_t Typemaker2_Type_GetCopyFlags(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetCopyFlags(TYPEMAKER2_TYPE *ty, uint32_t i); int Typemaker2_Type_GetAccess(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetAccess(TYPEMAKER2_TYPE *ty, int i); int Typemaker2_Type_GetUsePrivateConstructor(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetUsePrivateConstructor(TYPEMAKER2_TYPE *ty, int i); const char *Typemaker2_Type_GetDescription(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetDescription(TYPEMAKER2_TYPE *ty, const char *s); const char *Typemaker2_Type_GetDefaultValue(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetDefaultValue(TYPEMAKER2_TYPE *ty, const char *s); const char *Typemaker2_Type_GetPresetValue(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetPresetValue(TYPEMAKER2_TYPE *ty, const char *s); const char *Typemaker2_Type_GetIdentifier(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetIdentifier(TYPEMAKER2_TYPE *ty, const char *s); const char *Typemaker2_Type_GetPrefix(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetPrefix(TYPEMAKER2_TYPE *ty, const char *s); const char *Typemaker2_Type_GetInherits(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetInherits(TYPEMAKER2_TYPE *ty, const char *s); const char *Typemaker2_Type_GetBaseType(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetBaseType(TYPEMAKER2_TYPE *ty, const char *s); const char *Typemaker2_Type_GetExtends(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetExtends(TYPEMAKER2_TYPE *ty, const char *s); TYPEMAKER2_MEMBER_LIST *Typemaker2_Type_GetMembers(const TYPEMAKER2_TYPE *ty); TYPEMAKER2_HEADER_LIST *Typemaker2_Type_GetHeaders(const TYPEMAKER2_TYPE *ty); TYPEMAKER2_ENUM_LIST *Typemaker2_Type_GetEnums(const TYPEMAKER2_TYPE *ty); TYPEMAKER2_DEFINE_LIST *Typemaker2_Type_GetDefines(const TYPEMAKER2_TYPE *ty); TYPEMAKER2_CODE_LIST *Typemaker2_Type_GetCodeDefs(const TYPEMAKER2_TYPE *ty); TYPEMAKER2_INLINE_LIST *Typemaker2_Type_GetInlines(const TYPEMAKER2_TYPE *ty); TYPEMAKER2_VIRTUALFN_LIST *Typemaker2_Type_GetVirtualFns(const TYPEMAKER2_TYPE *ty); TYPEMAKER2_SIGNAL_LIST *Typemaker2_Type_GetSignals(const TYPEMAKER2_TYPE *ty); TYPEMAKER2_SLOT_LIST *Typemaker2_Type_GetSlots(const TYPEMAKER2_TYPE *ty); TYPEMAKER2_GROUP_TREE *Typemaker2_Type_GetGroupTree(const TYPEMAKER2_TYPE *ty); int Typemaker2_Type_GetNonVolatileMemberCount(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetNonVolatileMemberCount(TYPEMAKER2_TYPE *ty, int i); TYPEMAKER2_TYPE *Typemaker2_Type_GetExtendsPtr(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetExtendsPtr(TYPEMAKER2_TYPE *ty, TYPEMAKER2_TYPE *p); TYPEMAKER2_TYPE *Typemaker2_Type_GetBaseTypePtr(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetBaseTypePtr(TYPEMAKER2_TYPE *ty, TYPEMAKER2_TYPE *p); TYPEMAKER2_TYPE *Typemaker2_Type_GetInheritsPtr(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetInheritsPtr(TYPEMAKER2_TYPE *ty, TYPEMAKER2_TYPE *p); const char *Typemaker2_Type_GetFieldCountId(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetFieldCountId(TYPEMAKER2_TYPE *ty, const char *s); TYPEMAKER2_ENUM *Typemaker2_Type_FindEnum(TYPEMAKER2_TYPE *ty, const char *s); TYPEMAKER2_CODE *Typemaker2_Type_FindCodeForMember(const TYPEMAKER2_TYPE *ty, const TYPEMAKER2_MEMBER *tm, const char *id); int Typemaker2_Type_readXml(TYPEMAKER2_TYPE *ty, GWEN_XMLNODE *node, const char *wantedLang); void Typemaker2_Type_Dump(TYPEMAKER2_TYPE *ty, FILE *f, int indent); #endif gwenhywfar-4.15.2beta/tools/typemaker2/tm_inline.c0000644000175000017500000000641412364015347017120 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_inline_p.h" #include "tm_util.h" #include #include #include GWEN_LIST_FUNCTIONS(TYPEMAKER2_INLINE, Typemaker2_Inline) TYPEMAKER2_INLINE *Typemaker2_Inline_new() { TYPEMAKER2_INLINE *th; GWEN_NEW_OBJECT(TYPEMAKER2_INLINE, th); th->refCount=1; GWEN_LIST_INIT(TYPEMAKER2_INLINE, th); return th; } void Typemaker2_Inline_free(TYPEMAKER2_INLINE *th) { if (th) { assert(th->refCount); if (th->refCount==1) { GWEN_LIST_FINI(TYPEMAKER2_INLINE, th); free(th->content); th->refCount=0; GWEN_FREE_OBJECT(th); } else th->refCount++; } } void Typemaker2_Inline_Attach(TYPEMAKER2_INLINE *th) { assert(th); assert(th->refCount); th->refCount++; } const char *Typemaker2_Inline_GetContent(const TYPEMAKER2_INLINE *th) { assert(th); assert(th->refCount); return th->content; } void Typemaker2_Inline_SetContent(TYPEMAKER2_INLINE *th, const char *s) { assert(th); assert(th->refCount); free(th->content); if (s) th->content=strdup(s); else th->content=NULL; } int Typemaker2_Inline_GetLocation(const TYPEMAKER2_INLINE *th) { assert(th); assert(th->refCount); return th->location; } void Typemaker2_Inline_SetLocation(TYPEMAKER2_INLINE *th, int i) { assert(th); assert(th->refCount); th->location=i; } int Typemaker2_Inline_GetAccess(const TYPEMAKER2_INLINE *th) { assert(th); assert(th->refCount); return th->acc; } void Typemaker2_Inline_SetAccess(TYPEMAKER2_INLINE *th, int i) { assert(th); assert(th->refCount); th->acc=i; } int Typemaker2_Inline_GetTypeFlagsMask(const TYPEMAKER2_INLINE *th) { assert(th); assert(th->refCount); return th->typeFlagsMask; } int Typemaker2_Inline_GetTypeFlagsValue(const TYPEMAKER2_INLINE *th) { assert(th); assert(th->refCount); return th->typeFlagsValue; } TYPEMAKER2_INLINE *Typemaker2_Inline_fromXml(GWEN_XMLNODE *node) { TYPEMAKER2_INLINE *th; const char *s; th=Typemaker2_Inline_new(); s=GWEN_XMLNode_GetCharValue(node, "content", NULL); Typemaker2_Inline_SetContent(th, s); s=GWEN_XMLNode_GetCharValue(node, "typeFlagsMask", NULL); if (s && *s) th->typeFlagsMask=Typemaker2_FlagsFromString(s); s=GWEN_XMLNode_GetCharValue(node, "typeFlagsValue", NULL); if (s && *s) th->typeFlagsValue=Typemaker2_FlagsFromString(s); /* read header location */ s=GWEN_XMLNode_GetProperty(node, "loc", "post"); if (strcasecmp(s, "header")==0) Typemaker2_Inline_SetLocation(th, Typemaker2_InlineLocation_Header); else if (strcasecmp(s, "code")==0) Typemaker2_Inline_SetLocation(th, Typemaker2_InlineLocation_Code); /* read access */ s=GWEN_XMLNode_GetProperty(node, "access", "public"); Typemaker2_Inline_SetAccess(th, Typemaker2_AccessFromString(s)); return th; } gwenhywfar-4.15.2beta/tools/typemaker2/tm_enum.xml0000644000175000017500000000420712364015347017162 00000000000000 TYPEMAKER2_ENUM Typemaker2_Enum tm_enum with_list1 with_xml
tm_item.h
NULL NULL public own attribute const dup const NULL NULL public own attribute const dup const NULL NULL public own attribute const dup const NULL Typemaker2_Item_List_new() public own volatile const dup none NULL NULL public own volatile const dup const NULL NULL public own volatile const dup const
gwenhywfar-4.15.2beta/tools/typemaker2/tm_typemanager_p.h0000644000175000017500000000171612364015347020502 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_TYPEMANAGER_P_H #define TYPEMAKER2_TYPEMANAGER_P_H #include "tm_typemanager.h" struct TYPEMAKER2_TYPEMANAGER { TYPEMAKER2_TYPE_LIST *typeList; GWEN_STRINGLIST *folders; char *lang; char *apiDeclaration; }; TYPEMAKER2_TYPE *Typemaker2_TypeManager_LoadType(TYPEMAKER2_TYPEMANAGER *tym, const char *typeName); int Typemaker2_TypeManager_SetTypePtrs(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty); int Typemaker2_TypeManager_SetMemberTypePtrs(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty); #endif gwenhywfar-4.15.2beta/tools/typemaker2/tm_type.c0000644000175000017500000007252512641054707016632 00000000000000/*************************************************************************** begin : Wed Jul 01 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_type_p.h" #include "tm_util.h" #include #include #include GWEN_LIST_FUNCTIONS(TYPEMAKER2_TYPE, Typemaker2_Type); GWEN_LIST2_FUNCTIONS(TYPEMAKER2_TYPE, Typemaker2_Type); TYPEMAKER2_TYPE *Typemaker2_Type_new() { TYPEMAKER2_TYPE *ty; GWEN_NEW_OBJECT(TYPEMAKER2_TYPE, ty); ty->refCount=1; GWEN_LIST_INIT(TYPEMAKER2_TYPE, ty); ty->headers=Typemaker2_Header_List_new(); ty->enums=Typemaker2_Enum_List_new(); ty->defines=Typemaker2_Define_List_new(); ty->codeDefs=Typemaker2_Code_List_new(); ty->inlines=Typemaker2_Inline_List_new(); ty->virtualFns=Typemaker2_VirtualFn_List_new(); ty->signals=Typemaker2_Signal_List_new(); ty->slots=Typemaker2_Slot_List_new(); ty->structIncludes=GWEN_StringList_new(); ty->privateIncludes=GWEN_StringList_new(); ty->libraryIncludes=GWEN_StringList_new(); ty->publicIncludes=GWEN_StringList_new(); ty->codeIncludes=GWEN_StringList_new(); ty->members=Typemaker2_Member_List_new(); ty->groupTree=Typemaker2_Group_Tree_new(); return ty; } void Typemaker2_Type_free(TYPEMAKER2_TYPE *ty) { if (ty) { assert(ty->refCount); if (ty->refCount==1) { GWEN_LIST_FINI(TYPEMAKER2_TYPE, ty); free(ty->name); free(ty->extends); free(ty->baseType); free(ty->inherits); free(ty->identifier); free(ty->prefix); free(ty->defaultValue); free(ty->presetValue); free(ty->aqdb_type); free(ty->baseFileName); free(ty->freeHook); free(ty->descr); Typemaker2_Header_List_free(ty->headers); Typemaker2_Enum_List_free(ty->enums); Typemaker2_Define_List_free(ty->defines); Typemaker2_Code_List_free(ty->codeDefs); Typemaker2_Inline_List_free(ty->inlines); Typemaker2_VirtualFn_List_free(ty->virtualFns); Typemaker2_Signal_List_free(ty->signals); Typemaker2_Slot_List_free(ty->slots); GWEN_StringList_free(ty->structIncludes); GWEN_StringList_free(ty->privateIncludes); GWEN_StringList_free(ty->libraryIncludes); GWEN_StringList_free(ty->publicIncludes); GWEN_StringList_free(ty->codeIncludes); Typemaker2_Member_List_free(ty->members); Typemaker2_Group_Tree_free(ty->groupTree); free(ty->fieldCountId); ty->refCount=0; GWEN_FREE_OBJECT(ty); } else ty->refCount--; } } void Typemaker2_Type_Attach(TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); ty->refCount++; } const char *Typemaker2_Type_GetName(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->name; } void Typemaker2_Type_SetName(TYPEMAKER2_TYPE *ty, const char *s) { assert(ty); assert(ty->refCount); free(ty->name); if (s && *s) ty->name=strdup(s); else ty->name=NULL; } const char *Typemaker2_Type_GetDescription(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->descr; } void Typemaker2_Type_SetDescription(TYPEMAKER2_TYPE *ty, const char *s) { assert(ty); assert(ty->refCount); free(ty->descr); if (s && *s) ty->descr=strdup(s); else ty->descr=NULL; } int Typemaker2_Type_GetType(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); /* nothing here? ask extended type */ if (ty->type==TypeMaker2_Type_Unknown && ty->extendsPtr) return Typemaker2_Type_GetType(ty->extendsPtr); return ty->type; } void Typemaker2_Type_SetType(TYPEMAKER2_TYPE *ty, int i) { assert(ty); assert(ty->refCount); ty->type=i; } const char *Typemaker2_Type_GetAqDbType(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); if (ty->aqdb_type==NULL && ty->extendsPtr) return Typemaker2_Type_GetAqDbType(ty->extendsPtr); return ty->aqdb_type; } void Typemaker2_Type_SetAqDbType(TYPEMAKER2_TYPE *ty, const char *s) { assert(ty); assert(ty->refCount); free(ty->aqdb_type); if (s && *s) ty->aqdb_type=strdup(s); else ty->aqdb_type=NULL; } const char *Typemaker2_Type_GetBaseFileName(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->baseFileName; } void Typemaker2_Type_SetBaseFileName(TYPEMAKER2_TYPE *ty, const char *s) { assert(ty); assert(ty->refCount); free(ty->baseFileName); if (s && *s) ty->baseFileName=strdup(s); else ty->baseFileName=NULL; } const char *Typemaker2_Type_GetFreeHook(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->freeHook; } void Typemaker2_Type_SetFreeHook(TYPEMAKER2_TYPE *ty, const char *s) { assert(ty); assert(ty->refCount); free(ty->freeHook); if (s && *s) ty->freeHook=strdup(s); else ty->freeHook=NULL; } const char *Typemaker2_Type_GetExtends(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->extends; } void Typemaker2_Type_SetExtends(TYPEMAKER2_TYPE *ty, const char *s) { assert(ty); assert(ty->refCount); free(ty->extends); if (s && *s) ty->extends=strdup(s); else ty->extends=NULL; } const char *Typemaker2_Type_GetBaseType(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); if (ty->baseType==NULL && ty->extendsPtr) return Typemaker2_Type_GetBaseType(ty->extendsPtr); return ty->baseType; } void Typemaker2_Type_SetBaseType(TYPEMAKER2_TYPE *ty, const char *s) { assert(ty); assert(ty->refCount); free(ty->baseType); if (s && *s) ty->baseType=strdup(s); else ty->baseType=NULL; } const char *Typemaker2_Type_GetInherits(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); if (ty->inherits==NULL && ty->extendsPtr) return Typemaker2_Type_GetInherits(ty->extendsPtr); return ty->inherits; } void Typemaker2_Type_SetInherits(TYPEMAKER2_TYPE *ty, const char *s) { assert(ty); assert(ty->refCount); free(ty->inherits); if (s && *s) ty->inherits=strdup(s); else ty->inherits=NULL; } uint32_t Typemaker2_Type_GetFlags(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); if (ty->flags==0 && ty->extendsPtr) return Typemaker2_Type_GetFlags(ty->extendsPtr); return ty->flags; } void Typemaker2_Type_SetFlags(TYPEMAKER2_TYPE *ty, uint32_t i) { assert(ty); assert(ty->refCount); ty->flags=i; } uint32_t Typemaker2_Type_GetSetFlags(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); if (ty->setFlags==0 && ty->extendsPtr) return Typemaker2_Type_GetSetFlags(ty->extendsPtr); return ty->setFlags; } void Typemaker2_Type_SetSetFlags(TYPEMAKER2_TYPE *ty, uint32_t i) { assert(ty); assert(ty->refCount); ty->setFlags=i; } uint32_t Typemaker2_Type_GetGetFlags(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); if (ty->getFlags==0 && ty->extendsPtr) return Typemaker2_Type_GetGetFlags(ty->extendsPtr); return ty->getFlags; } void Typemaker2_Type_SetGetFlags(TYPEMAKER2_TYPE *ty, uint32_t i) { assert(ty); assert(ty->refCount); ty->getFlags=i; } uint32_t Typemaker2_Type_GetDupFlags(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); if (ty->dupFlags==0 && ty->extendsPtr) return Typemaker2_Type_GetDupFlags(ty->extendsPtr); return ty->dupFlags; } void Typemaker2_Type_SetDupFlags(TYPEMAKER2_TYPE *ty, uint32_t i) { assert(ty); assert(ty->refCount); ty->dupFlags=i; } uint32_t Typemaker2_Type_GetCopyFlags(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); if (ty->copyFlags==0 && ty->extendsPtr) return Typemaker2_Type_GetCopyFlags(ty->extendsPtr); return ty->copyFlags; } void Typemaker2_Type_SetCopyFlags(TYPEMAKER2_TYPE *ty, uint32_t i) { assert(ty); assert(ty->refCount); ty->copyFlags=i; } int Typemaker2_Type_GetAccess(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); if (ty->access==TypeMaker2_Access_Unknown && ty->extendsPtr) return Typemaker2_Type_GetAccess(ty->extendsPtr); return ty->access; } void Typemaker2_Type_SetAccess(TYPEMAKER2_TYPE *ty, int i) { assert(ty); assert(ty->refCount); ty->access=i; } int Typemaker2_Type_GetUsePrivateConstructor(const TYPEMAKER2_TYPE *ty){ assert(ty); assert(ty->refCount); return ty->usePrivateConstructor; } void Typemaker2_Type_SetUsePrivateConstructor(TYPEMAKER2_TYPE *ty, int i){ assert(ty); assert(ty->refCount); ty->usePrivateConstructor=i; } const char *Typemaker2_Type_GetDefaultValue(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); if (ty->defaultValue==NULL && ty->extendsPtr) return Typemaker2_Type_GetDefaultValue(ty->extendsPtr); return ty->defaultValue; } void Typemaker2_Type_SetDefaultValue(TYPEMAKER2_TYPE *ty, const char *s) { assert(ty); assert(ty->refCount); free(ty->defaultValue); if (s && *s) ty->defaultValue=strdup(s); else ty->defaultValue=NULL; } const char *Typemaker2_Type_GetPresetValue(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); if (ty->presetValue==NULL && ty->extendsPtr) return Typemaker2_Type_GetPresetValue(ty->extendsPtr); return ty->presetValue; } void Typemaker2_Type_SetPresetValue(TYPEMAKER2_TYPE *ty, const char *s) { assert(ty); assert(ty->refCount); free(ty->presetValue); if (s && *s) ty->presetValue=strdup(s); else ty->presetValue=NULL; } const char *Typemaker2_Type_GetIdentifier(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->identifier; } void Typemaker2_Type_SetIdentifier(TYPEMAKER2_TYPE *ty, const char *s) { assert(ty); assert(ty->refCount); free(ty->identifier); if (s && *s) ty->identifier=strdup(s); else ty->identifier=NULL; } const char *Typemaker2_Type_GetPrefix(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->prefix; } void Typemaker2_Type_SetPrefix(TYPEMAKER2_TYPE *ty, const char *s) { assert(ty); assert(ty->refCount); free(ty->prefix); if (s && *s) ty->prefix=strdup(s); else ty->prefix=NULL; } TYPEMAKER2_TYPE *Typemaker2_Type_GetExtendsPtr(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->extendsPtr; } void Typemaker2_Type_SetExtendsPtr(TYPEMAKER2_TYPE *ty, TYPEMAKER2_TYPE *p) { assert(ty); assert(ty->refCount); ty->extendsPtr=p; } TYPEMAKER2_TYPE *Typemaker2_Type_GetInheritsPtr(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->inheritsPtr; } void Typemaker2_Type_SetInheritsPtr(TYPEMAKER2_TYPE *ty, TYPEMAKER2_TYPE *p) { assert(ty); assert(ty->refCount); ty->inheritsPtr=p; } TYPEMAKER2_TYPE *Typemaker2_Type_GetBaseTypePtr(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->baseTypePtr; } void Typemaker2_Type_SetBaseTypePtr(TYPEMAKER2_TYPE *ty, TYPEMAKER2_TYPE *p) { assert(ty); assert(ty->refCount); ty->baseTypePtr=p; } TYPEMAKER2_MEMBER_LIST *Typemaker2_Type_GetMembers(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->members; } TYPEMAKER2_HEADER_LIST *Typemaker2_Type_GetHeaders(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->headers; } TYPEMAKER2_ENUM_LIST *Typemaker2_Type_GetEnums(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->enums; } TYPEMAKER2_DEFINE_LIST *Typemaker2_Type_GetDefines(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->defines; } TYPEMAKER2_CODE_LIST *Typemaker2_Type_GetCodeDefs(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->codeDefs; } TYPEMAKER2_INLINE_LIST *Typemaker2_Type_GetInlines(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->inlines; } TYPEMAKER2_VIRTUALFN_LIST *Typemaker2_Type_GetVirtualFns(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->virtualFns; } TYPEMAKER2_SIGNAL_LIST *Typemaker2_Type_GetSignals(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->signals; } TYPEMAKER2_SLOT_LIST *Typemaker2_Type_GetSlots(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->slots; } TYPEMAKER2_GROUP_TREE *Typemaker2_Type_GetGroupTree(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->groupTree; } int Typemaker2_Type_GetNonVolatileMemberCount(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->nonVolatileMemberCount; } void Typemaker2_Type_SetNonVolatileMemberCount(TYPEMAKER2_TYPE *ty, int i) { assert(ty); assert(ty->refCount); ty->nonVolatileMemberCount=i; } const char *Typemaker2_Type_GetFieldCountId(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->fieldCountId; } void Typemaker2_Type_SetFieldCountId(TYPEMAKER2_TYPE *ty, const char *s) { assert(ty); assert(ty->refCount); free(ty->fieldCountId); if (s) ty->fieldCountId=strdup(s); else ty->fieldCountId=NULL; } int Typemaker2_Type_readMembersAndGroupsXml(TYPEMAKER2_TYPE *ty, GWEN_XMLNODE *node, TYPEMAKER2_GROUP *parentGroup) { GWEN_XMLNODE *n; /* read members */ n=GWEN_XMLNode_GetFirstTag(node); while (n) { const char *s; /* get tag name */ s=GWEN_XMLNode_GetData(n); if (s) { if (strcasecmp(s, "member")==0) { TYPEMAKER2_MEMBER *tm; int rv; tm=Typemaker2_Member_new(); rv=Typemaker2_Member_readXml(tm, n); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); Typemaker2_Member_free(tm); return rv; } /* set current parentGroup as group */ Typemaker2_Member_SetGroupPtr(tm, parentGroup); Typemaker2_Member_List_Add(tm, ty->members); } else if (strcasecmp(s, "group")==0) { TYPEMAKER2_GROUP *group; int rv; /* create and read group */ group=Typemaker2_Group_new(); rv=Typemaker2_Group_readXml(group, n); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); Typemaker2_Group_free(group); return rv; } Typemaker2_Group_Tree_AddChild(parentGroup, group); /* read sub-groups and -members */ rv=Typemaker2_Type_readMembersAndGroupsXml(ty, n, group); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } } n=GWEN_XMLNode_GetNextTag(n); } return 0; } int Typemaker2_Type_readXml(TYPEMAKER2_TYPE *ty, GWEN_XMLNODE *node, const char *wantedLang) { GWEN_XMLNODE *langNode=NULL; GWEN_XMLNODE *n; const char *s; TYPEMAKER2_GROUP *rootGroup=NULL; /* parse type */ s=GWEN_XMLNode_GetProperty(node, "type", "opaque"); if (strcasecmp(s, "opaque")==0) Typemaker2_Type_SetType(ty, TypeMaker2_Type_Opaque); else if (strcasecmp(s, "pointer")==0) Typemaker2_Type_SetType(ty, TypeMaker2_Type_Pointer); else if (strcasecmp(s, "array")==0) Typemaker2_Type_SetType(ty, TypeMaker2_Type_Array); else { DBG_ERROR(GWEN_LOGDOMAIN, "Unknown type [%s]", s); return GWEN_ERROR_BAD_DATA; } s=GWEN_XMLNode_GetProperty(node, "id", NULL); Typemaker2_Type_SetName(ty, s); s=GWEN_XMLNode_GetProperty(node, "extends", NULL); Typemaker2_Type_SetExtends(ty, s); s=GWEN_XMLNode_GetProperty(node, "basetype", NULL); Typemaker2_Type_SetBaseType(ty, s); if (wantedLang) langNode=GWEN_XMLNode_FindFirstTag(node, "lang", "id", wantedLang); if (langNode==NULL) langNode=node; /* read identifier and prefix */ s=GWEN_XMLNode_GetCharValue(langNode, "identifier", NULL); Typemaker2_Type_SetIdentifier(ty, s); s=GWEN_XMLNode_GetCharValue(langNode, "prefix", NULL); Typemaker2_Type_SetPrefix(ty, s); s=GWEN_XMLNode_GetCharValue(langNode, "aqdb_type", NULL); Typemaker2_Type_SetAqDbType(ty, s); /* read base file name (used to derive other output filenames) */ s=GWEN_XMLNode_GetCharValue(langNode, "basefilename", NULL); Typemaker2_Type_SetBaseFileName(ty, s); s=GWEN_XMLNode_GetCharValue(langNode, "freeHook", NULL); Typemaker2_Type_SetFreeHook(ty, s); /* read flags. this element exists for elements. * For elements the flags are stored in the group. */ s=GWEN_XMLNode_GetCharValue(langNode, "flags", NULL); if (s && *s) Typemaker2_Type_SetFlags(ty, Typemaker2_FlagsFromString(s)); /* read headers */ n=GWEN_XMLNode_FindFirstTag(langNode, "headers", NULL, NULL); if (n) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_FindFirstTag(n, "header", NULL, NULL); while(nn) { TYPEMAKER2_HEADER *th; int rv; th=Typemaker2_Header_new(); rv=Typemaker2_Header_readXml(th, nn); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); Typemaker2_Header_free(th); return rv; } Typemaker2_Header_List_Add(th, ty->headers); nn=GWEN_XMLNode_FindNextTag(nn, "header", NULL, NULL); } } /* read description */ n=GWEN_XMLNode_FindFirstTag(node, "descr", NULL, NULL); if (n) { GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_XMLNode_toBuffer(n, tbuf, GWEN_XML_FLAGS_SIMPLE | GWEN_XML_FLAGS_HANDLE_COMMENTS); if (rv<0) { DBG_ERROR(0, "here (%d)", rv); } else { Typemaker2_Type_SetDescription(ty, GWEN_Buffer_GetStart(tbuf)); } GWEN_Buffer_free(tbuf); } /* create and add root group */ Typemaker2_Group_Tree_Clear(ty->groupTree); rootGroup=Typemaker2_Group_new(); Typemaker2_Group_SetTitle(rootGroup, Typemaker2_Type_GetName(ty)); Typemaker2_Group_SetDescription(rootGroup, Typemaker2_Type_GetDescription(ty)); Typemaker2_Group_Tree_Add(ty->groupTree, rootGroup); /* read members */ n=GWEN_XMLNode_FindFirstTag(node, "members", NULL, NULL); if (n) { int rv; rv=Typemaker2_Type_readMembersAndGroupsXml(ty, n, rootGroup); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } /* read codedefs */ n=GWEN_XMLNode_FindFirstTag(langNode, "codedefs", NULL, NULL); if (n) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_FindFirstTag(n, "codedef", NULL, NULL); while(nn) { TYPEMAKER2_CODE *tc; tc=Typemaker2_Code_fromXml(nn); if (tc) { const char *s; s=Typemaker2_Code_GetMemberFlagsMask(tc); if (s && *s) Typemaker2_Code_SetMemberFlagsMaskInt(tc, Typemaker2_FlagsFromString(s)); s=Typemaker2_Code_GetMemberFlagsValue(tc); if (s && *s) Typemaker2_Code_SetMemberFlagsValueInt(tc, Typemaker2_FlagsFromString(s)); } Typemaker2_Code_List_Add(tc, ty->codeDefs); nn=GWEN_XMLNode_FindNextTag(nn, "codedef", NULL, NULL); } } /* read inlines */ n=GWEN_XMLNode_FindFirstTag(langNode, "inlines", NULL, NULL); if (n) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_FindFirstTag(n, "inline", NULL, NULL); while(nn) { TYPEMAKER2_INLINE *ti; ti=Typemaker2_Inline_fromXml(nn); Typemaker2_Inline_List_Add(ti, ty->inlines); nn=GWEN_XMLNode_FindNextTag(nn, "inline", NULL, NULL); } } /* read enums */ n=GWEN_XMLNode_FindFirstTag(node, "enums", NULL, NULL); if (n) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_FindFirstTag(n, "enum", NULL, NULL); while(nn) { TYPEMAKER2_ENUM *te; GWEN_XMLNODE *nnn; te=Typemaker2_Enum_fromXml(nn); /* read items */ nnn=GWEN_XMLNode_FindFirstTag(nn, "item", NULL, NULL); while(nnn) { TYPEMAKER2_ITEM *ti; ti=Typemaker2_Item_fromXml(nnn); Typemaker2_Item_List_Add(ti, Typemaker2_Enum_GetItems(te)); nnn=GWEN_XMLNode_FindNextTag(nnn, "item", NULL, NULL); } Typemaker2_Enum_List_Add(te, ty->enums); nn=GWEN_XMLNode_FindNextTag(nn, "enum", NULL, NULL); } } /* read defines */ n=GWEN_XMLNode_FindFirstTag(node, "defines", NULL, NULL); if (n) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_FindFirstTag(n, "define", NULL, NULL); while(nn) { TYPEMAKER2_DEFINE *td; GWEN_XMLNODE *nnn; td=Typemaker2_Define_fromXml(nn); /* read items */ nnn=GWEN_XMLNode_FindFirstTag(nn, "item", NULL, NULL); while(nnn) { TYPEMAKER2_ITEM *ti; ti=Typemaker2_Item_fromXml(nnn); Typemaker2_Item_List_Add(ti, Typemaker2_Define_GetItems(td)); nnn=GWEN_XMLNode_FindNextTag(nnn, "item", NULL, NULL); } Typemaker2_Define_List_Add(td, ty->defines); nn=GWEN_XMLNode_FindNextTag(nn, "define", NULL, NULL); } } /* read virtual functions */ n=GWEN_XMLNode_FindFirstTag(node, "virtualFns", NULL, NULL); if (n) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_FindFirstTag(n, "fn", NULL, NULL); while(nn) { TYPEMAKER2_VIRTUALFN *vf; int rv; vf=Typemaker2_VirtualFn_new(); rv=Typemaker2_VirtualFn_readXml(vf, nn); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); Typemaker2_VirtualFn_free(vf); return rv; } Typemaker2_VirtualFn_List_Add(vf, ty->virtualFns); nn=GWEN_XMLNode_FindNextTag(nn, "fn", NULL, NULL); } } /* read signals */ n=GWEN_XMLNode_FindFirstTag(node, "signals", NULL, NULL); if (n) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_FindFirstTag(n, "signal", NULL, NULL); while(nn) { TYPEMAKER2_SIGNAL *sig; GWEN_XMLNODE *nnn; int i; s=GWEN_XMLNode_GetProperty(nn, "name", NULL); if (!(s && *s)) { DBG_ERROR(GWEN_LOGDOMAIN, "Unnamed signal"); return GWEN_ERROR_INVALID; } sig=Typemaker2_Signal_new(); Typemaker2_Signal_SetName(sig, s); Typemaker2_Signal_SetParamType1(sig, "none"); Typemaker2_Signal_SetParamType2(sig, "none"); i=GWEN_XMLNode_GetIntProperty(nn, "useParam3", 0); if (i) Typemaker2_Signal_AddFlags(sig, TYPEMAKER2_SIGNAL_FLAGS_USE_PARAM3); i=GWEN_XMLNode_GetIntProperty(nn, "useParam4", 0); if (i) Typemaker2_Signal_AddFlags(sig, TYPEMAKER2_SIGNAL_FLAGS_USE_PARAM4); nnn=GWEN_XMLNode_FindFirstTag(nn, "params", NULL, NULL); if (nnn) { GWEN_XMLNODE *nnnn; int i; nnnn=GWEN_XMLNode_FindFirstTag(nnn, "param", NULL, NULL); i=1; while(nnnn && i<3) { const char *s; s=GWEN_XMLNode_GetProperty(nnnn, "type", "none"); if (i==1) Typemaker2_Signal_SetParamType1(sig, s); else Typemaker2_Signal_SetParamType2(sig, s); i++; nnnn=GWEN_XMLNode_FindNextTag(nnnn, "param", NULL, NULL); } } Typemaker2_Signal_List_Add(sig, ty->signals); nn=GWEN_XMLNode_FindNextTag(nn, "signal", NULL, NULL); } } /* read slots */ n=GWEN_XMLNode_FindFirstTag(node, "slots", NULL, NULL); if (n) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_FindFirstTag(n, "slot", NULL, NULL); while(nn) { TYPEMAKER2_SLOT *slot; GWEN_XMLNODE *nnn; int i; s=GWEN_XMLNode_GetProperty(nn, "name", NULL); if (!(s && *s)) { DBG_ERROR(GWEN_LOGDOMAIN, "Unnamed slot"); return GWEN_ERROR_INVALID; } slot=Typemaker2_Slot_new(); Typemaker2_Slot_SetName(slot, s); Typemaker2_Slot_SetParamType1(slot, "none"); Typemaker2_Slot_SetParamType2(slot, "none"); i=GWEN_XMLNode_GetIntProperty(nn, "useParam3", 0); if (i) Typemaker2_Slot_AddFlags(slot, TYPEMAKER2_SLOT_FLAGS_USE_PARAM3); i=GWEN_XMLNode_GetIntProperty(nn, "useParam4", 0); if (i) Typemaker2_Slot_AddFlags(slot, TYPEMAKER2_SLOT_FLAGS_USE_PARAM4); nnn=GWEN_XMLNode_FindFirstTag(nn, "params", NULL, NULL); if (nnn) { GWEN_XMLNODE *nnnn; int i; nnnn=GWEN_XMLNode_FindFirstTag(nnn, "param", NULL, NULL); i=1; while(nnnn && i<3) { const char *s; s=GWEN_XMLNode_GetProperty(nnnn, "type", "none"); if (i==1) Typemaker2_Slot_SetParamType1(slot, s); else Typemaker2_Slot_SetParamType2(slot, s); i++; nnnn=GWEN_XMLNode_FindNextTag(nnnn, "param", NULL, NULL); } } Typemaker2_Slot_List_Add(slot, ty->slots); nn=GWEN_XMLNode_FindNextTag(nn, "slot", NULL, NULL); } } /* read defaults */ n=GWEN_XMLNode_FindFirstTag(langNode, "defaults", NULL, NULL); if (n) { s=GWEN_XMLNode_GetCharValue(n, "default", NULL); Typemaker2_Type_SetDefaultValue(ty, s); s=GWEN_XMLNode_GetCharValue(n, "preset", NULL); Typemaker2_Type_SetPresetValue(ty, s); /* read flags */ s=GWEN_XMLNode_GetCharValue(n, "flags", NULL); if (s && *s) Typemaker2_Type_SetFlags(ty, Typemaker2_FlagsFromString(s)); /* read setflags */ s=GWEN_XMLNode_GetCharValue(n, "setflags", NULL); if (s && *s) Typemaker2_Type_SetSetFlags(ty, Typemaker2_FlagsFromString(s)); /* read getflags */ s=GWEN_XMLNode_GetCharValue(n, "getflags", NULL); if (s && *s) Typemaker2_Type_SetGetFlags(ty, Typemaker2_FlagsFromString(s)); /* read dupflags */ s=GWEN_XMLNode_GetCharValue(n, "dupflags", NULL); if (s && *s) Typemaker2_Type_SetDupFlags(ty, Typemaker2_FlagsFromString(s)); /* read copyflags */ s=GWEN_XMLNode_GetCharValue(n, "copyflags", NULL); if (s && *s) Typemaker2_Type_SetCopyFlags(ty, Typemaker2_FlagsFromString(s)); /* read access */ s=GWEN_XMLNode_GetCharValue(n, "access", NULL); if (s && *s) { int i=Typemaker2_AccessFromString(s); if (i==TypeMaker2_Access_Unknown) { DBG_ERROR(GWEN_LOGDOMAIN, "Unknown access type [%s]", s); return GWEN_ERROR_BAD_DATA; } Typemaker2_Type_SetAccess(ty, i); } } s=GWEN_XMLNode_GetProperty(langNode, "usePrivateConstructor", "0"); if (s && *s) Typemaker2_Type_SetUsePrivateConstructor(ty, atoi(s)); return 0; } void Typemaker2_Type_Dump(TYPEMAKER2_TYPE *ty, FILE *f, int indent) { if (ty) { int i; TYPEMAKER2_MEMBER *tm; const char *s1, *s2; for (i=0; iname)?(ty->name):""); for (i=0; iidentifier)?(ty->identifier):""); for (i=0; iaqdb_type)?(ty->aqdb_type):""); for (i=0; iextends)?(ty->extends):""); for (i=0; iinherits; s2=Typemaker2_Type_GetInherits(ty); fprintf(f, "Inherits : %s [%s]\n", s1?s1:"", s2?s2:""); for (i=0; ibaseType)?(ty->baseType):""); for (i=0; iprefix)?(ty->prefix):""); for (i=0; iaccess, Typemaker2_Type_GetAccess(ty)); for (i=0; iflags, Typemaker2_Type_GetFlags(ty)); for (i=0; isetFlags, Typemaker2_Type_GetSetFlags(ty)); for (i=0; igetFlags, Typemaker2_Type_GetGetFlags(ty)); for (i=0; idupFlags, Typemaker2_Type_GetDupFlags(ty)); for (i=0; icopyFlags, Typemaker2_Type_GetCopyFlags(ty)); for (i=0; idefaultValue; s2=Typemaker2_Type_GetDefaultValue(ty); fprintf(f, "Default : %s [%s]\n", s1?s1:"", s2?s2:""); for (i=0; ipresetValue; s2=Typemaker2_Type_GetPresetValue(ty); fprintf(f, "Preset : %s [%s]\n", s1?s1:"", s2?s2:""); for (i=0; imembers); if (tm==NULL) { for (i=0; ifieldCountId)?(ty->fieldCountId):""); for (i=0; idescr)?(ty->descr):""); } } TYPEMAKER2_ENUM *Typemaker2_Type_FindEnum(TYPEMAKER2_TYPE *ty, const char *s) { TYPEMAKER2_ENUM *te; assert(ty); te=Typemaker2_Enum_List_First(ty->enums); while(te) { const char *n; n=Typemaker2_Enum_GetId(te); if (n && strcasecmp(s, n)==0) break; te=Typemaker2_Enum_List_Next(te); } return te; } TYPEMAKER2_CODE *Typemaker2_Type_FindCodeForMember(const TYPEMAKER2_TYPE *ty, const TYPEMAKER2_MEMBER *tm, const char *id) { TYPEMAKER2_CODE *tc=NULL; uint32_t flags=0; if (tm) flags=Typemaker2_Member_GetFlags(tm); while(ty) { tc=Typemaker2_Code_List_First(ty->codeDefs); while(tc) { const char *s; s=Typemaker2_Code_GetId(tc); if (s && strcasecmp(s, id)==0) { if ((flags & Typemaker2_Code_GetMemberFlagsMaskInt(tc))==Typemaker2_Code_GetMemberFlagsValueInt(tc)) return tc; } tc=Typemaker2_Code_List_Next(tc); } ty=ty->extendsPtr; } return NULL; } gwenhywfar-4.15.2beta/tools/typemaker2/tm_slot.c0000644000175000017500000001534012364015347016621 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_slot.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_slot_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(TYPEMAKER2_SLOT, Typemaker2_Slot) GWEN_LIST2_FUNCTIONS(TYPEMAKER2_SLOT, Typemaker2_Slot) TYPEMAKER2_SLOT *Typemaker2_Slot_new(void) { TYPEMAKER2_SLOT *p_struct; GWEN_NEW_OBJECT(TYPEMAKER2_SLOT, p_struct) GWEN_LIST_INIT(TYPEMAKER2_SLOT, p_struct) /* members */ p_struct->name=NULL; p_struct->paramType1=NULL; p_struct->paramType2=NULL; p_struct->flags=0; /* virtual functions */ return p_struct; } void Typemaker2_Slot_free(TYPEMAKER2_SLOT *p_struct) { if (p_struct) { GWEN_LIST_FINI(TYPEMAKER2_SLOT, p_struct) /* members */ free(p_struct->name); free(p_struct->paramType1); free(p_struct->paramType2); GWEN_FREE_OBJECT(p_struct); } } TYPEMAKER2_SLOT *Typemaker2_Slot_dup(const TYPEMAKER2_SLOT *p_src) { TYPEMAKER2_SLOT *p_struct; assert(p_src); p_struct=Typemaker2_Slot_new(); /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; } if (p_src->name) { p_struct->name=strdup(p_src->name); } /* member "paramType1" */ if (p_struct->paramType1) { free(p_struct->paramType1); p_struct->paramType1=NULL; } if (p_src->paramType1) { p_struct->paramType1=strdup(p_src->paramType1); } /* member "paramType2" */ if (p_struct->paramType2) { free(p_struct->paramType2); p_struct->paramType2=NULL; } if (p_src->paramType2) { p_struct->paramType2=strdup(p_src->paramType2); } /* member "flags" */ p_struct->flags=p_src->flags; return p_struct; } TYPEMAKER2_SLOT *Typemaker2_Slot_copy(TYPEMAKER2_SLOT *p_struct, const TYPEMAKER2_SLOT *p_src) { assert(p_struct); assert(p_src); /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; } if (p_src->name) { p_struct->name=strdup(p_src->name); } /* member "paramType1" */ if (p_struct->paramType1) { free(p_struct->paramType1); p_struct->paramType1=NULL; } if (p_src->paramType1) { p_struct->paramType1=strdup(p_src->paramType1); } /* member "paramType2" */ if (p_struct->paramType2) { free(p_struct->paramType2); p_struct->paramType2=NULL; } if (p_src->paramType2) { p_struct->paramType2=strdup(p_src->paramType2); } /* member "flags" */ p_struct->flags=p_src->flags; return p_struct; } const char *Typemaker2_Slot_GetName(const TYPEMAKER2_SLOT *p_struct) { assert(p_struct); return p_struct->name; } const char *Typemaker2_Slot_GetParamType1(const TYPEMAKER2_SLOT *p_struct) { assert(p_struct); return p_struct->paramType1; } const char *Typemaker2_Slot_GetParamType2(const TYPEMAKER2_SLOT *p_struct) { assert(p_struct); return p_struct->paramType2; } uint32_t Typemaker2_Slot_GetFlags(const TYPEMAKER2_SLOT *p_struct) { assert(p_struct); return p_struct->flags; } void Typemaker2_Slot_SetName(TYPEMAKER2_SLOT *p_struct, const char *p_src) { assert(p_struct); if (p_struct->name) { free(p_struct->name); } if (p_src) { p_struct->name=strdup(p_src); } else { p_struct->name=NULL; } } void Typemaker2_Slot_SetParamType1(TYPEMAKER2_SLOT *p_struct, const char *p_src) { assert(p_struct); if (p_struct->paramType1) { free(p_struct->paramType1); } if (p_src) { p_struct->paramType1=strdup(p_src); } else { p_struct->paramType1=NULL; } } void Typemaker2_Slot_SetParamType2(TYPEMAKER2_SLOT *p_struct, const char *p_src) { assert(p_struct); if (p_struct->paramType2) { free(p_struct->paramType2); } if (p_src) { p_struct->paramType2=strdup(p_src); } else { p_struct->paramType2=NULL; } } void Typemaker2_Slot_SetFlags(TYPEMAKER2_SLOT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags=p_src; } void Typemaker2_Slot_AddFlags(TYPEMAKER2_SLOT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags|=p_src; } void Typemaker2_Slot_SubFlags(TYPEMAKER2_SLOT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags&=~p_src; } TYPEMAKER2_SLOT_LIST *Typemaker2_Slot_List_dup(const TYPEMAKER2_SLOT_LIST *p_src) { TYPEMAKER2_SLOT_LIST *p_dest; TYPEMAKER2_SLOT *p_elem; assert(p_src); p_dest=Typemaker2_Slot_List_new(); p_elem=Typemaker2_Slot_List_First(p_src); while(p_elem) { TYPEMAKER2_SLOT *p_cpy; p_cpy=Typemaker2_Slot_dup(p_elem); Typemaker2_Slot_List_Add(p_cpy, p_dest); p_elem=Typemaker2_Slot_List_Next(p_elem); } return p_dest; } void Typemaker2_Slot_ReadXml(TYPEMAKER2_SLOT *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "name" */ if (p_struct->name) { free(p_struct->name); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "name", NULL); if (s) p_struct->name=strdup(s); } if (p_struct->name==NULL) { /* member "name" is volatile, just presetting */ p_struct->name=NULL; } /* member "paramType1" */ if (p_struct->paramType1) { free(p_struct->paramType1); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "paramType1", NULL); if (s) p_struct->paramType1=strdup(s); } if (p_struct->paramType1==NULL) { /* member "paramType1" is volatile, just presetting */ p_struct->paramType1=NULL; } /* member "paramType2" */ if (p_struct->paramType2) { free(p_struct->paramType2); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "paramType2", NULL); if (s) p_struct->paramType2=strdup(s); } if (p_struct->paramType2==NULL) { /* member "paramType2" is volatile, just presetting */ p_struct->paramType2=NULL; } /* member "flags" */ p_struct->flags=GWEN_XMLNode_GetIntValue(p_db, "flags", 0); } void Typemaker2_Slot_WriteXml(const TYPEMAKER2_SLOT *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "name" */ GWEN_XMLNode_SetProperty(p_db, "name", p_struct->name); /* member "paramType1" */ GWEN_XMLNode_SetProperty(p_db, "paramType1", p_struct->paramType1); /* member "paramType2" */ GWEN_XMLNode_SetProperty(p_db, "paramType2", p_struct->paramType2); /* member "flags" */ GWEN_XMLNode_SetIntValue(p_db, "flags", p_struct->flags); } void Typemaker2_Slot_toXml(const TYPEMAKER2_SLOT *p_struct, GWEN_XMLNODE *p_db) { Typemaker2_Slot_WriteXml(p_struct, p_db); } TYPEMAKER2_SLOT *Typemaker2_Slot_fromXml(GWEN_XMLNODE *p_db) { TYPEMAKER2_SLOT *p_struct; p_struct=Typemaker2_Slot_new(); Typemaker2_Slot_ReadXml(p_struct, p_db); return p_struct; } /* code headers */ gwenhywfar-4.15.2beta/tools/typemaker2/tm_member.h0000644000175000017500000001006612641053634017113 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_MEMBER_H #define TYPEMAKER2_MEMBER_H #include #include #include typedef struct TYPEMAKER2_MEMBER TYPEMAKER2_MEMBER; GWEN_LIST_FUNCTION_DEFS(TYPEMAKER2_MEMBER, Typemaker2_Member); #include "tm_type.h" #include "tm_enum.h" #include "tm_define.h" #include "tm_group.h" TYPEMAKER2_MEMBER *Typemaker2_Member_new(); void Typemaker2_Member_free(TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_Attach(TYPEMAKER2_MEMBER *tm); const char *Typemaker2_Member_GetName(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetName(TYPEMAKER2_MEMBER *tm, const char *s); const char *Typemaker2_Member_GetTypeName(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetTypeName(TYPEMAKER2_MEMBER *tm, const char *s); const char *Typemaker2_Member_GetDescription(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetDescription(TYPEMAKER2_MEMBER *tm, const char *s); const char *Typemaker2_Member_GetFieldId(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetFieldId(TYPEMAKER2_MEMBER *tm, const char *s); const char *Typemaker2_Member_GetEnumId(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetEnumId(TYPEMAKER2_MEMBER *tm, const char *s); const char *Typemaker2_Member_GetDefineId(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetDefineId(TYPEMAKER2_MEMBER *tm, const char *s); uint32_t Typemaker2_Member_GetFlags(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetFlags(TYPEMAKER2_MEMBER *tm, uint32_t i); uint32_t Typemaker2_Member_GetSetFlags(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetSetFlags(TYPEMAKER2_MEMBER *tm, uint32_t i); uint32_t Typemaker2_Member_GetGetFlags(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetGetFlags(TYPEMAKER2_MEMBER *tm, uint32_t i); uint32_t Typemaker2_Member_GetDupFlags(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetDupFlags(TYPEMAKER2_MEMBER *tm, uint32_t i); uint32_t Typemaker2_Member_GetCopyFlags(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetCopyFlags(TYPEMAKER2_MEMBER *tm, uint32_t i); TYPEMAKER2_TYPE *Typemaker2_Member_GetTypePtr(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetTypePtr(TYPEMAKER2_MEMBER *tm, TYPEMAKER2_TYPE *ty); TYPEMAKER2_ENUM *Typemaker2_Member_GetEnumPtr(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetEnumPtr(TYPEMAKER2_MEMBER *tm, TYPEMAKER2_ENUM *te); TYPEMAKER2_DEFINE *Typemaker2_Member_GetDefinePtr(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetDefinePtr(TYPEMAKER2_MEMBER *tm, TYPEMAKER2_DEFINE *td); TYPEMAKER2_GROUP *Typemaker2_Member_GetGroupPtr(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetGroupPtr(TYPEMAKER2_MEMBER *tm, TYPEMAKER2_GROUP *gr); int Typemaker2_Member_GetAccess(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetAccess(TYPEMAKER2_MEMBER *tm, int i); const char *Typemaker2_Member_GetDefaultValue(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetDefaultValue(TYPEMAKER2_MEMBER *tm, const char *s); const char *Typemaker2_Member_GetPresetValue(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetPresetValue(TYPEMAKER2_MEMBER *tm, const char *s); int Typemaker2_Member_GetMaxLen(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetMaxLen(TYPEMAKER2_MEMBER *tm, int i); const char *Typemaker2_Member_GetAqDbType(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetAqDbType(TYPEMAKER2_MEMBER *tm, const char *s); int Typemaker2_Member_GetMemberPosition(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetMemberPosition(TYPEMAKER2_MEMBER *tm, int i); int Typemaker2_Member_readXml(TYPEMAKER2_MEMBER *tm, GWEN_XMLNODE *node); void Typemaker2_Member_Dump(TYPEMAKER2_MEMBER *tm, FILE *f, int indent); #endif gwenhywfar-4.15.2beta/tools/typemaker2/tm_member_p.h0000644000175000017500000000204412641053604017424 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_MEMBER_P_H #define TYPEMAKER2_MEMBER_P_H #include "tm_member.h" struct TYPEMAKER2_MEMBER { GWEN_LIST_ELEMENT(TYPEMAKER2_MEMBER) char *name; char *typeName; char *descr; int access; uint32_t flags; uint32_t setFlags; uint32_t getFlags; uint32_t dupFlags; uint32_t copyFlags; int maxLen; char *defaultValue; char *presetValue; char *aedb_type; char *enumId; char *defineId; TYPEMAKER2_TYPE *typePtr; TYPEMAKER2_ENUM *enumPtr; TYPEMAKER2_DEFINE *definePtr; TYPEMAKER2_GROUP *groupPtr; int refCount; int memberPosition; char *fieldId; }; #endif gwenhywfar-4.15.2beta/tools/typemaker2/tm_signal_p.h0000644000175000017500000000114612364015347017440 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_signal.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef TM_SIGNAL_P_H #define TM_SIGNAL_P_H #include "tm_signal.h" #ifdef __cplusplus extern "C" { #endif struct TYPEMAKER2_SIGNAL { GWEN_LIST_ELEMENT(TYPEMAKER2_SIGNAL) char *name; char *paramType1; char *paramType2; uint32_t flags; }; #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/tools/typemaker2/tm_define.h0000644000175000017500000000715212364015347017101 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_define.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef TM_DEFINE_H #define TM_DEFINE_H #ifdef __cplusplus extern "C" { #endif /* needed system headers */ #include #include #include /* pre-headers */ #include "tm_item.h" typedef struct TYPEMAKER2_DEFINE TYPEMAKER2_DEFINE; GWEN_LIST_FUNCTION_DEFS(TYPEMAKER2_DEFINE, Typemaker2_Define) enum { Typemaker2_Define_Mode_Unknown = -1, Typemaker2_Define_Mode_Sequence = 1, Typemaker2_Define_Mode_BitField }; /* post-headers */ int Typemaker2_Define_Mode_fromString(const char *p_s); const char *Typemaker2_Define_Mode_toString(int p_i); /** Constructor. */ TYPEMAKER2_DEFINE *Typemaker2_Define_new(void); /** Destructor. */ void Typemaker2_Define_free(TYPEMAKER2_DEFINE *p_struct); TYPEMAKER2_DEFINE *Typemaker2_Define_dup(const TYPEMAKER2_DEFINE *p_struct); TYPEMAKER2_DEFINE *Typemaker2_Define_copy(TYPEMAKER2_DEFINE *p_struct, const TYPEMAKER2_DEFINE *p_src); /** Getter. * Use this function to get the member "id" */ const char *Typemaker2_Define_GetId(const TYPEMAKER2_DEFINE *p_struct); /** Getter. * Use this function to get the member "prefix" */ const char *Typemaker2_Define_GetPrefix(const TYPEMAKER2_DEFINE *p_struct); /** Getter. * Use this function to get the member "type" */ const char *Typemaker2_Define_GetType(const TYPEMAKER2_DEFINE *p_struct); /** Getter. * Use this function to get the member "items" */ TYPEMAKER2_ITEM_LIST *Typemaker2_Define_GetItems(const TYPEMAKER2_DEFINE *p_struct); /** Getter. * Use this function to get the member "mode" */ int Typemaker2_Define_GetMode(const TYPEMAKER2_DEFINE *p_struct); /** Getter. * Use this function to get the member "startValue" */ int Typemaker2_Define_GetStartValue(const TYPEMAKER2_DEFINE *p_struct); /** Getter. * Use this function to get the member "lastValue" */ int Typemaker2_Define_GetLastValue(const TYPEMAKER2_DEFINE *p_struct); /** Setter. * Use this function to set the member "id" */ void Typemaker2_Define_SetId(TYPEMAKER2_DEFINE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "prefix" */ void Typemaker2_Define_SetPrefix(TYPEMAKER2_DEFINE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "type" */ void Typemaker2_Define_SetType(TYPEMAKER2_DEFINE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "items" */ void Typemaker2_Define_SetItems(TYPEMAKER2_DEFINE *p_struct, const TYPEMAKER2_ITEM_LIST *p_src); /** Setter. * Use this function to set the member "mode" */ void Typemaker2_Define_SetMode(TYPEMAKER2_DEFINE *p_struct, int p_src); /** Setter. * Use this function to set the member "startValue" */ void Typemaker2_Define_SetStartValue(TYPEMAKER2_DEFINE *p_struct, int p_src); /** Setter. * Use this function to set the member "lastValue" */ void Typemaker2_Define_SetLastValue(TYPEMAKER2_DEFINE *p_struct, int p_src); TYPEMAKER2_DEFINE_LIST *Typemaker2_Define_List_dup(const TYPEMAKER2_DEFINE_LIST *p_src); void Typemaker2_Define_ReadXml(TYPEMAKER2_DEFINE *p_struct, GWEN_XMLNODE *p_db); void Typemaker2_Define_WriteXml(const TYPEMAKER2_DEFINE *p_struct, GWEN_XMLNODE *p_db); void Typemaker2_Define_toXml(const TYPEMAKER2_DEFINE *p_struct, GWEN_XMLNODE *p_db); TYPEMAKER2_DEFINE *Typemaker2_Define_fromXml(GWEN_XMLNODE *p_db); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/tools/typemaker2/main.c0000644000175000017500000001553612364015347016073 00000000000000 #include "typemaker2.h" #include #include #include #include #include #define I18N(msg) msg int main(int argc, char **argv) { GWEN_DB_NODE *db; int rv; int err; int defsOnly=0; GWEN_GUI *gui; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "api", /* name */ 0, /* minnum */ 1, /* maxnum */ "D", /* short option */ "api", /* long option */ "API declaration prefix (like GWENHYWFAR_API)", "API declaration prefix (like GWENHYWFAR_API)" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "publicFile", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "public", /* long option */ "Name of the public header file to create", "Name of the public header file to create" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "libraryFile", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "library", /* long option */ "Name of the library header file to create", "Name of the library header file to create" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "protectedFile", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "protected", /* long option */ "Name of the protected header file to create", "Name of the protected header file to create" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "privateFile", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "private", /* long option */ "Name of the private header file to create", "Name of the private header file to create" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "codeFile", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "code", /* long option */ "Name of the code file to create", "Name of the code file to create" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "destFolder", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "destfolder", /* long option */ "Destination folder", "Destination folder" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "language", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "lang", /* long option */ "Language for which to create the headers and code", "Language for which to create the headers and code" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "include", /* name */ 0, /* minnum */ 99, /* maxnum */ "I", /* short option */ "include", /* long option */ "Add folder to include for type lookup", "Add folder to include for type lookup" }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "defsOnly", /* name */ 0, /* minnum */ 1, /* maxnum */ "d", /* short option */ "defs-only", /* long option */ "Only write def files (*.tm2)", "Only write def files (*.tm2)" }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; err=GWEN_Init(); if (err) { fprintf(stderr, "Could not initialize Gwenhywfar.\n"); return 2; } gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); GWEN_Logger_Open(0, "typemaker2", 0, GWEN_LoggerType_Console, GWEN_LoggerFacility_User); db=GWEN_DB_Group_new("arguments"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments main\n"); return -1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); GWEN_Buffer_AppendString(ubuf, I18N("Usage: ")); GWEN_Buffer_AppendString(ubuf, argv[0]); GWEN_Buffer_AppendString(ubuf, I18N(" [GLOBAL OPTIONS] COMMAND " "[LOCAL OPTIONS]\n")); GWEN_Buffer_AppendString(ubuf, I18N("\nGlobal Options:\n")); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } GWEN_Buffer_AppendString(ubuf, I18N("\nCommands:\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" build:\n" " This command creates source and header files for the given file" "\n\n")); fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } if (rv) { argc-=rv-1; argv+=rv-1; } defsOnly=GWEN_DB_GetIntValue(db, "defsOnly", 0, 0); if (defsOnly) rv=buildDefs(db); else rv=build(db); err=GWEN_Fini(); if (err) { fprintf(stderr, "WARNING: Could not deinitialize Gwenhywfar.\n"); } return rv; } gwenhywfar-4.15.2beta/tools/typemaker2/tm_builder_c.h0000644000175000017500000000110712364015347017571 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_BUILDER_C_H #define TYPEMAKER2_BUILDER_C_H #include "tm_builder.h" TYPEMAKER2_BUILDER *Typemaker2_Builder_C_new(); #endif gwenhywfar-4.15.2beta/tools/typemaker2/tm_slot.h0000644000175000017500000000571312364015347016631 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_slot.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef TM_SLOT_H #define TM_SLOT_H #ifdef __cplusplus extern "C" { #endif /* define TYPEMAKER2_SLOT_FLAGS */ #define TYPEMAKER2_SLOT_FLAGS_USE_PARAM3 0x00000001 #define TYPEMAKER2_SLOT_FLAGS_USE_PARAM4 0x00000002 /* needed system headers */ #include #include #include #include typedef struct TYPEMAKER2_SLOT TYPEMAKER2_SLOT; GWEN_LIST_FUNCTION_DEFS(TYPEMAKER2_SLOT, Typemaker2_Slot) GWEN_LIST2_FUNCTION_DEFS(TYPEMAKER2_SLOT, Typemaker2_Slot) /** Constructor. */ TYPEMAKER2_SLOT *Typemaker2_Slot_new(void); /** Destructor. */ void Typemaker2_Slot_free(TYPEMAKER2_SLOT *p_struct); TYPEMAKER2_SLOT *Typemaker2_Slot_dup(const TYPEMAKER2_SLOT *p_struct); TYPEMAKER2_SLOT *Typemaker2_Slot_copy(TYPEMAKER2_SLOT *p_struct, const TYPEMAKER2_SLOT *p_src); /** Getter. * Use this function to get the member "name" */ const char *Typemaker2_Slot_GetName(const TYPEMAKER2_SLOT *p_struct); /** Getter. * Use this function to get the member "paramType1" */ const char *Typemaker2_Slot_GetParamType1(const TYPEMAKER2_SLOT *p_struct); /** Getter. * Use this function to get the member "paramType2" */ const char *Typemaker2_Slot_GetParamType2(const TYPEMAKER2_SLOT *p_struct); /** Getter. * Use this function to get the member "flags" */ uint32_t Typemaker2_Slot_GetFlags(const TYPEMAKER2_SLOT *p_struct); /** Setter. * Use this function to set the member "name" */ void Typemaker2_Slot_SetName(TYPEMAKER2_SLOT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "paramType1" */ void Typemaker2_Slot_SetParamType1(TYPEMAKER2_SLOT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "paramType2" */ void Typemaker2_Slot_SetParamType2(TYPEMAKER2_SLOT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "flags" */ void Typemaker2_Slot_SetFlags(TYPEMAKER2_SLOT *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to the member "flags" */ void Typemaker2_Slot_AddFlags(TYPEMAKER2_SLOT *p_struct, uint32_t p_src); /** Sub flags. * Use this function to sub flags to the member "flags" */ void Typemaker2_Slot_SubFlags(TYPEMAKER2_SLOT *p_struct, uint32_t p_src); TYPEMAKER2_SLOT_LIST *Typemaker2_Slot_List_dup(const TYPEMAKER2_SLOT_LIST *p_src); void Typemaker2_Slot_ReadXml(TYPEMAKER2_SLOT *p_struct, GWEN_XMLNODE *p_db); void Typemaker2_Slot_WriteXml(const TYPEMAKER2_SLOT *p_struct, GWEN_XMLNODE *p_db); void Typemaker2_Slot_toXml(const TYPEMAKER2_SLOT *p_struct, GWEN_XMLNODE *p_db); TYPEMAKER2_SLOT *Typemaker2_Slot_fromXml(GWEN_XMLNODE *p_db); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/tools/typemaker2/tm_group.h0000644000175000017500000000221112641050501016757 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_GROUP_H #define TYPEMAKER2_GROUP_H #include #include typedef struct TYPEMAKER2_GROUP TYPEMAKER2_GROUP; GWEN_TREE_FUNCTION_DEFS(TYPEMAKER2_GROUP, Typemaker2_Group) TYPEMAKER2_GROUP *Typemaker2_Group_new(); void Typemaker2_Group_free(TYPEMAKER2_GROUP *gr); void Typemaker2_Group_Attach(TYPEMAKER2_GROUP *gr); const char *Typemaker2_Group_GetTitle(TYPEMAKER2_GROUP *gr); void Typemaker2_Group_SetTitle(TYPEMAKER2_GROUP *gr, const char *s); const char *Typemaker2_Group_GetDescription(TYPEMAKER2_GROUP *gr); void Typemaker2_Group_SetDescription(TYPEMAKER2_GROUP *gr, const char *s); int Typemaker2_Group_readXml(TYPEMAKER2_GROUP *gr, GWEN_XMLNODE *node); #endif gwenhywfar-4.15.2beta/tools/typemaker2/tm_inline_p.h0000644000175000017500000000131312364015347017435 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_INLINE_P_H #define TYPEMAKER2_INLINE_P_H #include "tm_inline.h" struct TYPEMAKER2_INLINE { GWEN_LIST_ELEMENT(TYPEMAKER2_INLINE) char *content; int acc; int location; uint32_t typeFlagsMask; uint32_t typeFlagsValue; int refCount; }; #endif gwenhywfar-4.15.2beta/tools/typemaker2/tm_util.h0000644000175000017500000000115612364015347016622 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_UTIL_H #define TYPEMAKER2_UTIL_H #include uint32_t Typemaker2_FlagsFromString(const char *s); int Typemaker2_AccessFromString(const char *s); #endif gwenhywfar-4.15.2beta/tools/typemaker2/tm_slot.xml0000644000175000017500000000327412364015347017202 00000000000000 TYPEMAKER2_SLOT Typemaker2_Slot tm_slot with_list1 with_list2 with_xml NULL NULL public own attribute const dup const NULL NULL public own attribute const dup const NULL NULL public own attribute const dup const 0 0 public with_flags gwenhywfar-4.15.2beta/tools/typemaker2/tm_inline.h0000644000175000017500000000303112364015347017115 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_INLINE_H #define TYPEMAKER2_INLINE_H #include #include typedef struct TYPEMAKER2_INLINE TYPEMAKER2_INLINE; GWEN_LIST_FUNCTION_DEFS(TYPEMAKER2_INLINE, Typemaker2_Inline) enum { Typemaker2_InlineLocation_Unknown=-1, Typemaker2_InlineLocation_Header=0, Typemaker2_InlineLocation_Code }; TYPEMAKER2_INLINE *Typemaker2_Inline_new(); void Typemaker2_Inline_free(TYPEMAKER2_INLINE *th); void Typemaker2_Inline_Attach(TYPEMAKER2_INLINE *th); const char *Typemaker2_Inline_GetContent(const TYPEMAKER2_INLINE *th); void Typemaker2_Inline_SetContent(TYPEMAKER2_INLINE *th, const char *s); int Typemaker2_Inline_GetAccess(const TYPEMAKER2_INLINE *th); void Typemaker2_Inline_SetAccess(TYPEMAKER2_INLINE *th, int i); int Typemaker2_Inline_GetLocation(const TYPEMAKER2_INLINE *th); void Typemaker2_Inline_SetLocation(TYPEMAKER2_INLINE *th, int i); int Typemaker2_Inline_GetTypeFlagsMask(const TYPEMAKER2_INLINE *th); int Typemaker2_Inline_GetTypeFlagsValue(const TYPEMAKER2_INLINE *th); TYPEMAKER2_INLINE *Typemaker2_Inline_fromXml(GWEN_XMLNODE *node); #endif gwenhywfar-4.15.2beta/tools/typemaker2/tm_header.h0000644000175000017500000000310612364015347017072 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_HEADER_H #define TYPEMAKER2_HEADER_H #include #include typedef struct TYPEMAKER2_HEADER TYPEMAKER2_HEADER; GWEN_LIST_FUNCTION_DEFS(TYPEMAKER2_HEADER, Typemaker2_Header) enum { Typemaker2_HeaderType_Unknown=-1, Typemaker2_HeaderType_System=0, Typemaker2_HeaderType_Local }; enum { Typemaker2_HeaderLocation_Unknown=-1, Typemaker2_HeaderLocation_Pre=0, Typemaker2_HeaderLocation_Post, Typemaker2_HeaderLocation_Code, Typemaker2_HeaderLocation_CodeEnd }; TYPEMAKER2_HEADER *Typemaker2_Header_new(); void Typemaker2_Header_free(TYPEMAKER2_HEADER *th); void Typemaker2_Header_Attach(TYPEMAKER2_HEADER *th); const char *Typemaker2_Header_GetFileName(const TYPEMAKER2_HEADER *th); void Typemaker2_Header_SetFileName(TYPEMAKER2_HEADER *th, const char *s); int Typemaker2_Header_GetType(const TYPEMAKER2_HEADER *th); void Typemaker2_Header_SetType(TYPEMAKER2_HEADER *th, int i); int Typemaker2_Header_GetLocation(const TYPEMAKER2_HEADER *th); void Typemaker2_Header_SetLocation(TYPEMAKER2_HEADER *th, int i); int Typemaker2_Header_readXml(TYPEMAKER2_HEADER *th, GWEN_XMLNODE *node); #endif gwenhywfar-4.15.2beta/tools/typemaker2/tm_group.c0000644000175000017500000000514512641065537017002 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_group_p.h" #include #include #include GWEN_TREE_FUNCTIONS(TYPEMAKER2_GROUP, Typemaker2_Group) TYPEMAKER2_GROUP *Typemaker2_Group_new() { TYPEMAKER2_GROUP *gr; GWEN_NEW_OBJECT(TYPEMAKER2_GROUP, gr); gr->refCount=1; GWEN_TREE_INIT(TYPEMAKER2_GROUP, gr); return gr; } void Typemaker2_Group_free(TYPEMAKER2_GROUP *gr) { if (gr) { assert(gr->refCount); if (gr->refCount==1) { GWEN_TREE_FINI(TYPEMAKER2_GROUP, gr); free(gr->title); free(gr->description); gr->refCount=0; GWEN_FREE_OBJECT(gr); } else gr->refCount++; } } void Typemaker2_Group_Attach(TYPEMAKER2_GROUP *gr) { assert(gr); assert(gr->refCount); gr->refCount++; } const char *Typemaker2_Group_GetTitle(TYPEMAKER2_GROUP *gr) { assert(gr); assert(gr->refCount); return gr->title; } void Typemaker2_Group_SetTitle(TYPEMAKER2_GROUP *gr, const char *s) { assert(gr); assert(gr->refCount); free(gr->title); if (s && *s) gr->title=strdup(s); else gr->title=NULL; } const char *Typemaker2_Group_GetDescription(TYPEMAKER2_GROUP *gr) { assert(gr); assert(gr->refCount); return gr->description; } void Typemaker2_Group_SetDescription(TYPEMAKER2_GROUP *gr, const char *s) { assert(gr); assert(gr->refCount); free(gr->description); if (s && *s) gr->description=strdup(s); else gr->description=NULL; } int Typemaker2_Group_readXml(TYPEMAKER2_GROUP *gr, GWEN_XMLNODE *node) { const char *s; GWEN_XMLNODE *n; assert(gr); assert(gr->refCount); /* read title */ s=GWEN_XMLNode_GetProperty(node, "title", NULL); if (s && *s) Typemaker2_Group_SetTitle(gr, s); /* read descr */ n=GWEN_XMLNode_FindFirstTag(node, "descr", NULL, NULL); if (n) { GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_XMLNode_toBuffer(n, tbuf, GWEN_XML_FLAGS_SIMPLE | GWEN_XML_FLAGS_HANDLE_COMMENTS); if (rv<0) { DBG_ERROR(0, "here (%d)", rv); } else { Typemaker2_Group_SetDescription(gr, GWEN_Buffer_GetStart(tbuf)); } GWEN_Buffer_free(tbuf); } return 0; } gwenhywfar-4.15.2beta/tools/typemaker2/tm_typemanager.c0000644000175000017500000005156512364015347020165 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_typemanager_p.h" #include #include #include #include #include TYPEMAKER2_TYPEMANAGER *Typemaker2_TypeManager_new() { TYPEMAKER2_TYPEMANAGER *tym; GWEN_NEW_OBJECT(TYPEMAKER2_TYPEMANAGER, tym); tym->typeList=Typemaker2_Type_List_new(); tym->folders=GWEN_StringList_new(); tym->lang=strdup("c"); return tym; } void Typemaker2_TypeManager_free(TYPEMAKER2_TYPEMANAGER *tym) { if (tym) { Typemaker2_Type_List_free(tym->typeList); GWEN_StringList_free(tym->folders); GWEN_FREE_OBJECT(tym); } } const char *Typemaker2_TypeManager_GetLanguage(const TYPEMAKER2_TYPEMANAGER *tym) { assert(tym); return tym->lang; } void Typemaker2_TypeManager_SetLanguage(TYPEMAKER2_TYPEMANAGER *tym, const char *s) { assert(tym); free(tym->lang); if (s) tym->lang=strdup(s); else tym->lang=NULL; } const char *Typemaker2_TypeManager_GetApiDeclaration(const TYPEMAKER2_TYPEMANAGER *tym) { assert(tym); return tym->apiDeclaration; } void Typemaker2_TypeManager_SetApiDeclaration(TYPEMAKER2_TYPEMANAGER *tym, const char *s) { assert(tym); free(tym->apiDeclaration); if (s) tym->apiDeclaration=strdup(s); else tym->apiDeclaration=NULL; } void Typemaker2_TypeManager_AddFolder(TYPEMAKER2_TYPEMANAGER *tym, const char *s) { assert(tym); GWEN_StringList_AppendString(tym->folders, s, 0, 1); } void Typemaker2_TypeManager_AddType(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty) { assert(tym); Typemaker2_Type_List_Add(ty, tym->typeList); } TYPEMAKER2_TYPE *Typemaker2_TypeManager_FindType(TYPEMAKER2_TYPEMANAGER *tym, const char *s) { TYPEMAKER2_TYPE *ty; assert(tym); ty=Typemaker2_Type_List_First(tym->typeList); while(ty) { const char *n; n=Typemaker2_Type_GetName(ty); if (n && strcasecmp(s, n)==0) break; ty=Typemaker2_Type_List_Next(ty); } return ty; } TYPEMAKER2_TYPE *Typemaker2_TypeManager_LoadType(TYPEMAKER2_TYPEMANAGER *tym, const char *typeName) { GWEN_BUFFER *tbuf; GWEN_BUFFER *nbuf; char *p; int rv; TYPEMAKER2_TYPE *ty=NULL; GWEN_XMLNODE *root; GWEN_XMLNODE *node; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, typeName); p=GWEN_Buffer_GetStart(tbuf); while(*p) { *p=tolower(*p); p++; } GWEN_Buffer_AppendString(tbuf, ".tm2"); nbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Directory_FindFileInPaths(tym->folders, GWEN_Buffer_GetStart(tbuf), nbuf); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Typefile [%s] not found (%d)", GWEN_Buffer_GetStart(tbuf), rv); GWEN_Buffer_free(nbuf); GWEN_Buffer_free(tbuf); return NULL; } /* read XML file */ root=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "xml"); rv=GWEN_XML_ReadFile(root, GWEN_Buffer_GetStart(nbuf), GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_HANDLE_HEADERS | GWEN_XML_FLAGS_HANDLE_OPEN_HTMLTAGS); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not load typefile [%s] (%d)", GWEN_Buffer_GetStart(nbuf), rv); GWEN_XMLNode_free(root); GWEN_Buffer_free(nbuf); GWEN_Buffer_free(tbuf); return NULL; } /* get element */ node=GWEN_XMLNode_FindFirstTag(root, "tm2", NULL, NULL); if (node==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "File [%s] does not contain a tm2 element", GWEN_Buffer_GetStart(nbuf)); GWEN_XMLNode_free(root); GWEN_Buffer_free(nbuf); GWEN_Buffer_free(tbuf); return NULL; } /* get element with id==typeName and wanted language */ node=GWEN_XMLNode_FindFirstTag(node, "typedef", "id", typeName); while(node) { const char *s=GWEN_XMLNode_GetProperty(node, "lang", NULL); if (s && *s && strcasecmp(s, tym->lang)==0) break; node=GWEN_XMLNode_FindNextTag(node, "typedef", "id", typeName); } if (node==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "File [%s] does not contain a element for type [%s] and language [%s]", GWEN_Buffer_GetStart(nbuf), typeName, tym->lang); GWEN_XMLNode_free(root); GWEN_Buffer_free(nbuf); GWEN_Buffer_free(tbuf); return NULL; } /* load typedef from XML element */ ty=Typemaker2_Type_new(); rv=Typemaker2_Type_readXml(ty, node, NULL); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Error reading type [%s] from file [%s] (%d)", typeName, GWEN_Buffer_GetStart(nbuf), rv); Typemaker2_Type_free(ty); GWEN_XMLNode_free(root); GWEN_Buffer_free(nbuf); GWEN_Buffer_free(tbuf); return NULL; } GWEN_XMLNode_free(root); GWEN_Buffer_free(nbuf); GWEN_Buffer_free(tbuf); return ty; } int Typemaker2_TypeManager_MakeTypeDerivatives(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty, const char *baseType, const char *nType, const char *nPrefix) { TYPEMAKER2_TYPE *t2; char tbuf[256]; int rv; t2=Typemaker2_Type_new(); Typemaker2_Type_SetExtends(t2, baseType); Typemaker2_Type_SetType(t2, TypeMaker2_Type_Pointer); Typemaker2_Type_SetBaseType(t2, Typemaker2_Type_GetName(ty)); snprintf(tbuf, sizeof(tbuf)-1, "%s_%s", Typemaker2_Type_GetName(ty), nType); tbuf[sizeof(tbuf)-1]=0; Typemaker2_Type_SetName(t2, tbuf); snprintf(tbuf, sizeof(tbuf)-1, "%s_%s", Typemaker2_Type_GetIdentifier(ty), nType); tbuf[sizeof(tbuf)-1]=0; Typemaker2_Type_SetIdentifier(t2, tbuf); snprintf(tbuf, sizeof(tbuf)-1, "%s_%s", Typemaker2_Type_GetPrefix(ty), nPrefix); tbuf[sizeof(tbuf)-1]=0; Typemaker2_Type_SetPrefix(t2, tbuf); Typemaker2_TypeManager_AddType(tym, t2); /* set type pointers in this type structure */ rv=Typemaker2_TypeManager_SetTypePtrs(tym, t2); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=Typemaker2_TypeManager_SetMemberTypePtrs(tym, t2); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int Typemaker2_TypeManager_MakeTypeList1(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty) { return Typemaker2_TypeManager_MakeTypeDerivatives(tym, ty, "list1_base", "LIST", "List"); } int Typemaker2_TypeManager_MakeTypeList2(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty) { return Typemaker2_TypeManager_MakeTypeDerivatives(tym, ty, "list2_base", "LIST2", "List2"); } int Typemaker2_TypeManager_MakeTypeTree(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty) { return Typemaker2_TypeManager_MakeTypeDerivatives(tym, ty, "tree_base", "TREE", "Tree"); } TYPEMAKER2_TYPE *Typemaker2_TypeManager_LoadTypeFile(TYPEMAKER2_TYPEMANAGER *tym, const char *fileName) { int rv; TYPEMAKER2_TYPE *ty=NULL; GWEN_XMLNODE *root; GWEN_XMLNODE *node; /* read XML file */ root=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "xml"); rv=GWEN_XML_ReadFile(root, fileName, GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_HANDLE_HEADERS | GWEN_XML_FLAGS_HANDLE_OPEN_HTMLTAGS); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not load typefile [%s] (%d)", fileName, rv); GWEN_XMLNode_free(root); return NULL; } /* get element */ node=GWEN_XMLNode_FindFirstTag(root, "tm2", NULL, NULL); if (node==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "File [%s] does not contain a tm2 element", fileName); GWEN_XMLNode_free(root); return NULL; } /* get element with id==typeName and wanted language */ node=GWEN_XMLNode_FindFirstTag(node, "type", NULL, NULL); if (node==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "File [%s] does not contain a type element", fileName); GWEN_XMLNode_free(root); return NULL; } /* load type from XML element */ ty=Typemaker2_Type_new(); rv=Typemaker2_Type_readXml(ty, node, tym->lang); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Error reading type from file [%s] (%d)", fileName, rv); Typemaker2_Type_free(ty); GWEN_XMLNode_free(root); return NULL; } GWEN_XMLNode_free(root); /* preset some stuff */ if (1) { const char *x; x=Typemaker2_Type_GetExtends(ty); if (!x || !(*x)) Typemaker2_Type_SetExtends(ty, "struct_base"); } /* add first, because other types might want to refer to this one */ Typemaker2_Type_List_Add(ty, tym->typeList); if (Typemaker2_Type_GetFlags(ty) & TYPEMAKER2_FLAGS_WITH_LIST1) Typemaker2_TypeManager_MakeTypeList1(tym, ty); if (Typemaker2_Type_GetFlags(ty) & TYPEMAKER2_FLAGS_WITH_LIST2) Typemaker2_TypeManager_MakeTypeList2(tym, ty); if (Typemaker2_Type_GetFlags(ty) & TYPEMAKER2_FLAGS_WITH_TREE) Typemaker2_TypeManager_MakeTypeTree(tym, ty); //Typemaker2_TypeManager_Dump(tym, stderr, 2); /* set type pointers in this type structure */ rv=Typemaker2_TypeManager_SetTypePtrs(tym, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); Typemaker2_Type_free(ty); return NULL; } /* set type pointers in the member structures */ rv=Typemaker2_TypeManager_SetMemberTypePtrs(tym, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); Typemaker2_Type_free(ty); return NULL; } return ty; } int Typemaker2_TypeManager_LoadTypeFile2(TYPEMAKER2_TYPEMANAGER *tym, const char *fileName, TYPEMAKER2_TYPE_LIST2 *tlist2) { int rv; TYPEMAKER2_TYPE *ty=NULL; GWEN_XMLNODE *root; GWEN_XMLNODE *node; TYPEMAKER2_TYPE_LIST2 *tl; TYPEMAKER2_TYPE_LIST2_ITERATOR *it; /* read XML file */ root=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "xml"); rv=GWEN_XML_ReadFile(root, fileName, GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_HANDLE_HEADERS | GWEN_XML_FLAGS_HANDLE_OPEN_HTMLTAGS); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not load typefile [%s] (%d)", fileName, rv); GWEN_XMLNode_free(root); return rv; } /* get element */ node=GWEN_XMLNode_FindFirstTag(root, "tm2", NULL, NULL); if (node==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "File [%s] does not contain a tm2 element", fileName); GWEN_XMLNode_free(root); return GWEN_ERROR_NO_DATA; } /* get element with id==typeName and wanted language */ node=GWEN_XMLNode_FindFirstTag(node, "type", NULL, NULL); if (node==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "File [%s] does not contain a type element", fileName); GWEN_XMLNode_free(root); return GWEN_ERROR_NO_DATA; } /* read all types from the file */ tl=Typemaker2_Type_List2_new(); while(node) { /* load type from XML element */ ty=Typemaker2_Type_new(); rv=Typemaker2_Type_readXml(ty, node, tym->lang); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Error reading type from file [%s] (%d)", fileName, rv); Typemaker2_Type_free(ty); GWEN_XMLNode_free(root); Typemaker2_Type_List2_free(tl); return rv; } /* preset some stuff */ if (1) { const char *x; x=Typemaker2_Type_GetExtends(ty); if (!x || !(*x)) Typemaker2_Type_SetExtends(ty, "struct_base"); } /* add first, because other types might want to refer to this one */ Typemaker2_Type_List_Add(ty, tym->typeList); Typemaker2_Type_List2_PushBack(tl, ty); if (Typemaker2_Type_GetFlags(ty) & TYPEMAKER2_FLAGS_WITH_LIST1) Typemaker2_TypeManager_MakeTypeList1(tym, ty); if (Typemaker2_Type_GetFlags(ty) & TYPEMAKER2_FLAGS_WITH_LIST2) Typemaker2_TypeManager_MakeTypeList2(tym, ty); if (Typemaker2_Type_GetFlags(ty) & TYPEMAKER2_FLAGS_WITH_TREE) Typemaker2_TypeManager_MakeTypeTree(tym, ty); node=GWEN_XMLNode_FindNextTag(node, "type", NULL, NULL); } GWEN_XMLNode_free(root); //Typemaker2_TypeManager_Dump(tym, stderr, 2); /* set type pointers first */ it=Typemaker2_Type_List2_First(tl); if(it) { ty=Typemaker2_Type_List2Iterator_Data(it); while(ty) { /* set type pointers in this type structure */ rv=Typemaker2_TypeManager_SetTypePtrs(tym, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); Typemaker2_Type_List2Iterator_free(it); Typemaker2_Type_List2_free(tl); return rv; } /* handle next type */ ty=Typemaker2_Type_List2Iterator_Next(it); } Typemaker2_Type_List2Iterator_free(it); } /* now set member pointers */ it=Typemaker2_Type_List2_First(tl); if(it) { ty=Typemaker2_Type_List2Iterator_Data(it); while(ty) { /* set type pointers in the member structures */ rv=Typemaker2_TypeManager_SetMemberTypePtrs(tym, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); Typemaker2_Type_List2Iterator_free(it); Typemaker2_Type_List2_free(tl); return rv; } /* add to provided list2 */ Typemaker2_Type_List2_PushBack(tlist2, ty); /* handle next type */ ty=Typemaker2_Type_List2Iterator_Next(it); } Typemaker2_Type_List2Iterator_free(it); } /* done, free list */ Typemaker2_Type_List2_free(tl); return 0; } int Typemaker2_TypeManager_LoadTypeFileNoLookup(TYPEMAKER2_TYPEMANAGER *tym, const char *fileName, TYPEMAKER2_TYPE_LIST2 *tlist2) { int rv; TYPEMAKER2_TYPE *ty=NULL; GWEN_XMLNODE *root; GWEN_XMLNODE *node; /* read XML file */ root=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "xml"); rv=GWEN_XML_ReadFile(root, fileName, GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_HANDLE_HEADERS | GWEN_XML_FLAGS_HANDLE_OPEN_HTMLTAGS); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not load typefile [%s] (%d)", fileName, rv); GWEN_XMLNode_free(root); return rv; } /* get element */ node=GWEN_XMLNode_FindFirstTag(root, "tm2", NULL, NULL); if (node==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "File [%s] does not contain a tm2 element", fileName); GWEN_XMLNode_free(root); return GWEN_ERROR_NO_DATA; } /* get element with id==typeName and wanted language */ node=GWEN_XMLNode_FindFirstTag(node, "type", NULL, NULL); if (node==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "File [%s] does not contain a type element", fileName); GWEN_XMLNode_free(root); return GWEN_ERROR_NO_DATA; } /* read all types from the file */ while(node) { /* load type from XML element */ ty=Typemaker2_Type_new(); rv=Typemaker2_Type_readXml(ty, node, tym->lang); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Error reading type from file [%s] (%d)", fileName, rv); Typemaker2_Type_free(ty); GWEN_XMLNode_free(root); return rv; } /* preset some stuff */ if (1) { const char *x; x=Typemaker2_Type_GetExtends(ty); if (!x || !(*x)) Typemaker2_Type_SetExtends(ty, "struct_base"); } /* add first, because other types might want to refer to this one */ Typemaker2_Type_List_Add(ty, tym->typeList); Typemaker2_Type_List2_PushBack(tlist2, ty); if (Typemaker2_Type_GetFlags(ty) & TYPEMAKER2_FLAGS_WITH_LIST1) Typemaker2_TypeManager_MakeTypeList1(tym, ty); if (Typemaker2_Type_GetFlags(ty) & TYPEMAKER2_FLAGS_WITH_LIST2) Typemaker2_TypeManager_MakeTypeList2(tym, ty); if (Typemaker2_Type_GetFlags(ty) & TYPEMAKER2_FLAGS_WITH_TREE) Typemaker2_TypeManager_MakeTypeTree(tym, ty); node=GWEN_XMLNode_FindNextTag(node, "type", NULL, NULL); } GWEN_XMLNode_free(root); //Typemaker2_TypeManager_Dump(tym, stderr, 2); return 0; } int Typemaker2_TypeManager_SetTypePtrs(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty) { if (Typemaker2_Type_GetExtendsPtr(ty)==NULL) { const char *s; s=Typemaker2_Type_GetExtends(ty); if (s && *s) { TYPEMAKER2_TYPE *tt; tt=Typemaker2_TypeManager_GetType(tym, s); if (tt==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Type for \"extends\" not found [%s]", s); return GWEN_ERROR_NOT_FOUND; } Typemaker2_Type_SetExtendsPtr(ty, tt); } } if (Typemaker2_Type_GetBaseTypePtr(ty)==NULL) { const char *s; s=Typemaker2_Type_GetBaseType(ty); if (s && *s) { TYPEMAKER2_TYPE *tt; tt=Typemaker2_TypeManager_GetType(tym, s); if (tt==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Type for \"basetype\" not found [%s]", s); return GWEN_ERROR_NOT_FOUND; } Typemaker2_Type_SetBaseTypePtr(ty, tt); } } if (Typemaker2_Type_GetInheritsPtr(ty)==NULL) { const char *s; s=Typemaker2_Type_GetInherits(ty); if (s && *s) { TYPEMAKER2_TYPE *tt; tt=Typemaker2_TypeManager_GetType(tym, s); if (tt==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Type for \"inherits\" not found [%s]", s); return GWEN_ERROR_NOT_FOUND; } Typemaker2_Type_SetInheritsPtr(ty, tt); } } return 0; } int Typemaker2_TypeManager_SetMemberTypePtrs(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_MEMBER_LIST *ml; ml=Typemaker2_Type_GetMembers(ty); if (ml) { TYPEMAKER2_MEMBER *m; int pos=0; /* set pointers */ m=Typemaker2_Member_List_First(ml); while(m) { if (Typemaker2_Member_GetTypePtr(m)==NULL) { const char *s; /* set type pointer */ s=Typemaker2_Member_GetTypeName(m); if (s && *s) { TYPEMAKER2_TYPE *tt; tt=Typemaker2_TypeManager_GetType(tym, s); if (tt==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Type for \"type\" not found [%s]", s); return GWEN_ERROR_NOT_FOUND; } Typemaker2_Member_SetTypePtr(m, tt); } /* set enum pointer (if any) */ if ((Typemaker2_Member_GetFlags(m) & TYPEMAKER2_FLAGS_ENUM) && Typemaker2_Member_GetEnumPtr(m)==NULL) { s=Typemaker2_Member_GetEnumId(m); if (s && *s) { TYPEMAKER2_ENUM *te=Typemaker2_Type_FindEnum(ty, s); if (te) Typemaker2_Member_SetEnumPtr(m, te); else { DBG_ERROR(GWEN_LOGDOMAIN, "Enum [%s] not found", s); return GWEN_ERROR_NOT_FOUND; } } } } m=Typemaker2_Member_List_Next(m); } /* update member positions (needed for toObject/fromObject functions) */ m=Typemaker2_Member_List_First(ml); while(m) { if (!(Typemaker2_Member_GetFlags(m) & TYPEMAKER2_FLAGS_VOLATILE)) { const char *s; Typemaker2_Member_SetMemberPosition(m, pos++); /* create field id */ s=Typemaker2_Type_GetName(ty); if (s && *s) { GWEN_BUFFER *tbuf; char *p; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_FIELD_"); s=Typemaker2_Member_GetName(m); GWEN_Buffer_AppendString(tbuf, s); /* all in capitals */ p=GWEN_Buffer_GetStart(tbuf); while(*p) { *p=toupper(*p); p++; } Typemaker2_Member_SetFieldId(m, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } } m=Typemaker2_Member_List_Next(m); } Typemaker2_Type_SetNonVolatileMemberCount(ty, pos); if (pos) { const char *s; /* create field id */ s=Typemaker2_Type_GetName(ty); if (s && *s) { GWEN_BUFFER *tbuf; char *p; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_FIELD_COUNT"); /* all in capitals */ p=GWEN_Buffer_GetStart(tbuf); while(*p) { *p=toupper(*p); p++; } Typemaker2_Type_SetFieldCountId(ty, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } } } return 0; } TYPEMAKER2_TYPE *Typemaker2_TypeManager_GetType(TYPEMAKER2_TYPEMANAGER *tym, const char *s) { TYPEMAKER2_TYPE *ty; ty=Typemaker2_TypeManager_FindType(tym, s); if (ty==NULL) { ty=Typemaker2_TypeManager_LoadType(tym, s); if (ty) { int rv; /* add first, because other types might want to refer to this one */ Typemaker2_Type_List_Add(ty, tym->typeList); /* set type pointers in this type structure */ rv=Typemaker2_TypeManager_SetTypePtrs(tym, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return NULL; } /* set type pointers in the member structures */ rv=Typemaker2_TypeManager_SetMemberTypePtrs(tym, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return NULL; } } else { DBG_INFO(GWEN_LOGDOMAIN, "here"); } } if (ty==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Type [%s] not found", s); } return ty; } void Typemaker2_TypeManager_Dump(TYPEMAKER2_TYPEMANAGER *tym, FILE *f, int indent) { TYPEMAKER2_TYPE *ty; int i; for (i=0; itypeList); while(ty) { Typemaker2_Type_Dump(ty, f, indent+2); ty=Typemaker2_Type_List_Next(ty); } } gwenhywfar-4.15.2beta/tools/typemaker2/tm_code.c0000644000175000017500000002132512364015347016552 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_code.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_code_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(TYPEMAKER2_CODE, Typemaker2_Code) TYPEMAKER2_CODE *Typemaker2_Code_new(void) { TYPEMAKER2_CODE *p_struct; GWEN_NEW_OBJECT(TYPEMAKER2_CODE, p_struct) GWEN_LIST_INIT(TYPEMAKER2_CODE, p_struct) /* members */ p_struct->id=NULL; p_struct->memberFlagsMask=NULL; p_struct->memberFlagsValue=NULL; p_struct->code=NULL; p_struct->memberFlagsMaskInt=0; p_struct->memberFlagsValueInt=0; /* virtual functions */ return p_struct; } void Typemaker2_Code_free(TYPEMAKER2_CODE *p_struct) { if (p_struct) { GWEN_LIST_FINI(TYPEMAKER2_CODE, p_struct) /* members */ free(p_struct->id); free(p_struct->memberFlagsMask); free(p_struct->memberFlagsValue); free(p_struct->code); GWEN_FREE_OBJECT(p_struct); } } TYPEMAKER2_CODE *Typemaker2_Code_dup(const TYPEMAKER2_CODE *p_src) { TYPEMAKER2_CODE *p_struct; assert(p_src); p_struct=Typemaker2_Code_new(); /* member "id" */ if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; } if (p_src->id) { p_struct->id=strdup(p_src->id); } /* member "memberFlagsMask" */ if (p_struct->memberFlagsMask) { free(p_struct->memberFlagsMask); p_struct->memberFlagsMask=NULL; } if (p_src->memberFlagsMask) { p_struct->memberFlagsMask=strdup(p_src->memberFlagsMask); } /* member "memberFlagsValue" */ if (p_struct->memberFlagsValue) { free(p_struct->memberFlagsValue); p_struct->memberFlagsValue=NULL; } if (p_src->memberFlagsValue) { p_struct->memberFlagsValue=strdup(p_src->memberFlagsValue); } /* member "code" */ if (p_struct->code) { free(p_struct->code); p_struct->code=NULL; } if (p_src->code) { p_struct->code=strdup(p_src->code); } /* member "memberFlagsMaskInt" */ p_struct->memberFlagsMaskInt=p_src->memberFlagsMaskInt; /* member "memberFlagsValueInt" */ p_struct->memberFlagsValueInt=p_src->memberFlagsValueInt; return p_struct; } TYPEMAKER2_CODE *Typemaker2_Code_copy(TYPEMAKER2_CODE *p_struct, const TYPEMAKER2_CODE *p_src) { assert(p_struct); assert(p_src); /* member "id" */ if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; } if (p_src->id) { p_struct->id=strdup(p_src->id); } /* member "memberFlagsMask" */ if (p_struct->memberFlagsMask) { free(p_struct->memberFlagsMask); p_struct->memberFlagsMask=NULL; } if (p_src->memberFlagsMask) { p_struct->memberFlagsMask=strdup(p_src->memberFlagsMask); } /* member "memberFlagsValue" */ if (p_struct->memberFlagsValue) { free(p_struct->memberFlagsValue); p_struct->memberFlagsValue=NULL; } if (p_src->memberFlagsValue) { p_struct->memberFlagsValue=strdup(p_src->memberFlagsValue); } /* member "code" */ if (p_struct->code) { free(p_struct->code); p_struct->code=NULL; } if (p_src->code) { p_struct->code=strdup(p_src->code); } /* member "memberFlagsMaskInt" */ p_struct->memberFlagsMaskInt=p_src->memberFlagsMaskInt; /* member "memberFlagsValueInt" */ p_struct->memberFlagsValueInt=p_src->memberFlagsValueInt; return p_struct; } const char *Typemaker2_Code_GetId(const TYPEMAKER2_CODE *p_struct) { assert(p_struct); return p_struct->id; } const char *Typemaker2_Code_GetMemberFlagsMask(const TYPEMAKER2_CODE *p_struct) { assert(p_struct); return p_struct->memberFlagsMask; } const char *Typemaker2_Code_GetMemberFlagsValue(const TYPEMAKER2_CODE *p_struct) { assert(p_struct); return p_struct->memberFlagsValue; } const char *Typemaker2_Code_GetCode(const TYPEMAKER2_CODE *p_struct) { assert(p_struct); return p_struct->code; } uint32_t Typemaker2_Code_GetMemberFlagsMaskInt(const TYPEMAKER2_CODE *p_struct) { assert(p_struct); return p_struct->memberFlagsMaskInt; } uint32_t Typemaker2_Code_GetMemberFlagsValueInt(const TYPEMAKER2_CODE *p_struct) { assert(p_struct); return p_struct->memberFlagsValueInt; } void Typemaker2_Code_SetId(TYPEMAKER2_CODE *p_struct, const char *p_src) { assert(p_struct); if (p_struct->id) { free(p_struct->id); } if (p_src) { p_struct->id=strdup(p_src); } else { p_struct->id=NULL; } } void Typemaker2_Code_SetMemberFlagsMask(TYPEMAKER2_CODE *p_struct, const char *p_src) { assert(p_struct); if (p_struct->memberFlagsMask) { free(p_struct->memberFlagsMask); } if (p_src) { p_struct->memberFlagsMask=strdup(p_src); } else { p_struct->memberFlagsMask=NULL; } } void Typemaker2_Code_SetMemberFlagsValue(TYPEMAKER2_CODE *p_struct, const char *p_src) { assert(p_struct); if (p_struct->memberFlagsValue) { free(p_struct->memberFlagsValue); } if (p_src) { p_struct->memberFlagsValue=strdup(p_src); } else { p_struct->memberFlagsValue=NULL; } } void Typemaker2_Code_SetCode(TYPEMAKER2_CODE *p_struct, const char *p_src) { assert(p_struct); if (p_struct->code) { free(p_struct->code); } if (p_src) { p_struct->code=strdup(p_src); } else { p_struct->code=NULL; } } void Typemaker2_Code_SetMemberFlagsMaskInt(TYPEMAKER2_CODE *p_struct, uint32_t p_src) { assert(p_struct); p_struct->memberFlagsMaskInt=p_src; } void Typemaker2_Code_SetMemberFlagsValueInt(TYPEMAKER2_CODE *p_struct, uint32_t p_src) { assert(p_struct); p_struct->memberFlagsValueInt=p_src; } TYPEMAKER2_CODE_LIST *Typemaker2_Code_List_dup(const TYPEMAKER2_CODE_LIST *p_src) { TYPEMAKER2_CODE_LIST *p_dest; TYPEMAKER2_CODE *p_elem; assert(p_src); p_dest=Typemaker2_Code_List_new(); p_elem=Typemaker2_Code_List_First(p_src); while(p_elem) { TYPEMAKER2_CODE *p_cpy; p_cpy=Typemaker2_Code_dup(p_elem); Typemaker2_Code_List_Add(p_cpy, p_dest); p_elem=Typemaker2_Code_List_Next(p_elem); } return p_dest; } void Typemaker2_Code_ReadXml(TYPEMAKER2_CODE *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "id" */ if (p_struct->id) { free(p_struct->id); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "id", NULL); if (s) p_struct->id=strdup(s); } if (p_struct->id==NULL) { /* member "id" is volatile, just presetting */ p_struct->id=NULL; } /* member "memberFlagsMask" */ if (p_struct->memberFlagsMask) { free(p_struct->memberFlagsMask); } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "memberFlagsMask", NULL); if (s) p_struct->memberFlagsMask=strdup(s); } if (p_struct->memberFlagsMask==NULL) { /* member "memberFlagsMask" is volatile, just presetting */ p_struct->memberFlagsMask=NULL; } /* member "memberFlagsValue" */ if (p_struct->memberFlagsValue) { free(p_struct->memberFlagsValue); } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "memberFlagsValue", NULL); if (s) p_struct->memberFlagsValue=strdup(s); } if (p_struct->memberFlagsValue==NULL) { /* member "memberFlagsValue" is volatile, just presetting */ p_struct->memberFlagsValue=NULL; } /* member "code" */ if (p_struct->code) { free(p_struct->code); } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "code", NULL); if (s) p_struct->code=strdup(s); } if (p_struct->code==NULL) { /* member "code" is volatile, just presetting */ p_struct->code=NULL; } /* member "memberFlagsMaskInt" */ /* member "memberFlagsMaskInt" is volatile, just presetting */ p_struct->memberFlagsMaskInt=0; /* member "memberFlagsValueInt" */ /* member "memberFlagsValueInt" is volatile, just presetting */ p_struct->memberFlagsValueInt=0; } void Typemaker2_Code_WriteXml(const TYPEMAKER2_CODE *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "id" */ GWEN_XMLNode_SetProperty(p_db, "id", p_struct->id); /* member "memberFlagsMask" */ GWEN_XMLNode_SetCharValue(p_db, "memberFlagsMask", p_struct->memberFlagsMask); /* member "memberFlagsValue" */ GWEN_XMLNode_SetCharValue(p_db, "memberFlagsValue", p_struct->memberFlagsValue); /* member "code" */ GWEN_XMLNode_SetCharValue(p_db, "code", p_struct->code); /* member "memberFlagsMaskInt" is volatile, not writing to xml */ /* member "memberFlagsValueInt" is volatile, not writing to xml */ } void Typemaker2_Code_toXml(const TYPEMAKER2_CODE *p_struct, GWEN_XMLNODE *p_db) { Typemaker2_Code_WriteXml(p_struct, p_db); } TYPEMAKER2_CODE *Typemaker2_Code_fromXml(GWEN_XMLNODE *p_db) { TYPEMAKER2_CODE *p_struct; p_struct=Typemaker2_Code_new(); Typemaker2_Code_ReadXml(p_struct, p_db); return p_struct; } /* code headers */ gwenhywfar-4.15.2beta/tools/typemaker2/tm_virtualfn_p.h0000644000175000017500000000173212404132056020166 00000000000000/*************************************************************************** begin : Mon Jun 28 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_VIRTUALFN_P_H #define TYPEMAKER2_VIRTUALFN_P_H #include "tm_virtualfn.h" struct TYPEMAKER2_VIRTUALFN_PARAM { GWEN_LIST_ELEMENT(TYPEMAKER2_VIRTUALFN_PARAM) char *name; char *type; char *descr; }; struct TYPEMAKER2_VIRTUALFN { GWEN_LIST_ELEMENT(TYPEMAKER2_VIRTUALFN) char *name; char *location; char *descr; int access; uint32_t flags; char *returnType; char *returnTypeDescr; char *defaultReturnValue; char *preset; TYPEMAKER2_VIRTUALFN_PARAM_LIST *paramList; int refCount; }; #endif gwenhywfar-4.15.2beta/tools/typemaker2/tm_virtualfn.c0000644000175000017500000002163112364015347017652 00000000000000/*************************************************************************** begin : Mon Jun 28 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_virtualfn_p.h" #include "tm_util.h" #include "tm_type.h" #include #include #include GWEN_LIST_FUNCTIONS(TYPEMAKER2_VIRTUALFN, Typemaker2_VirtualFn); GWEN_LIST_FUNCTIONS(TYPEMAKER2_VIRTUALFN_PARAM, Typemaker2_VirtualFn_Param); TYPEMAKER2_VIRTUALFN *Typemaker2_VirtualFn_new() { TYPEMAKER2_VIRTUALFN *vf; GWEN_NEW_OBJECT(TYPEMAKER2_VIRTUALFN, vf); vf->refCount=1; GWEN_LIST_INIT(TYPEMAKER2_VIRTUALFN, vf); vf->access=TypeMaker2_Access_Public; vf->paramList=Typemaker2_VirtualFn_Param_List_new(); return vf; } void Typemaker2_VirtualFn_free(TYPEMAKER2_VIRTUALFN *vf) { if (vf) { if (vf->refCount==1) { GWEN_LIST_FINI(TYPEMAKER2_VIRTUALFN, vf); free(vf->preset); free(vf->name); free(vf->descr); free(vf->returnType); free(vf->defaultReturnValue); free(vf->location); Typemaker2_VirtualFn_Param_List_free(vf->paramList); vf->refCount=0; GWEN_FREE_OBJECT(vf); } else vf->refCount--; } } void Typemaker2_VirtualFn_Attach(TYPEMAKER2_VIRTUALFN *vf) { assert(vf); assert(vf->refCount); vf->refCount++; } int Typemaker2_VirtualFn_readXml(TYPEMAKER2_VIRTUALFN *vf, GWEN_XMLNODE *node) { const char *s; GWEN_XMLNODE *n; assert(vf); assert(vf->refCount); s=GWEN_XMLNode_GetProperty(node, "name", NULL); if (s==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Member has no id"); return GWEN_ERROR_BAD_DATA; } Typemaker2_VirtualFn_SetName(vf, s); s=GWEN_XMLNode_GetProperty(node, "location", "pre"); Typemaker2_VirtualFn_SetLocation(vf, s); /* read flags */ s=GWEN_XMLNode_GetCharValue(node, "flags", NULL); if (s && *s) Typemaker2_VirtualFn_SetFlags(vf, Typemaker2_FlagsFromString(s)); /* read access */ s=GWEN_XMLNode_GetCharValue(node, "access", NULL); if (s && *s) { int i=Typemaker2_AccessFromString(s); if (i==TypeMaker2_Access_Unknown) { DBG_ERROR(GWEN_LOGDOMAIN, "Unknown access type [%s]", s); return GWEN_ERROR_BAD_DATA; } Typemaker2_VirtualFn_SetAccess(vf, i); } /* read default value */ s=GWEN_XMLNode_GetCharValue(node, "defaultReturnValue", NULL); if (s && *s) Typemaker2_VirtualFn_SetDefaultReturnValue(vf, s); s=GWEN_XMLNode_GetCharValue(node, "preset", NULL); if (s && *s) Typemaker2_VirtualFn_SetPreset(vf, s); /* read return type */ s=GWEN_XMLNode_GetCharValue(node, "returnType", NULL); if (s && *s) Typemaker2_VirtualFn_SetReturnType(vf, s); /* read returnType description */ n=GWEN_XMLNode_FindFirstTag(node, "returnType", NULL, NULL); if (n) { s=GWEN_XMLNode_GetCharValue(n, "descr", NULL); Typemaker2_VirtualFn_SetReturnTypeDescr(vf, s); } n=GWEN_XMLNode_FindFirstTag(node, "params", NULL, NULL); if (n) { n=GWEN_XMLNode_FindFirstTag(n, "param", NULL, NULL); while(n) { const char *paramName; const char *paramType; const char *paramDescr; TYPEMAKER2_VIRTUALFN_PARAM *prm; paramType=GWEN_XMLNode_GetProperty(n, "type", NULL); paramName=GWEN_XMLNode_GetProperty(n, "name", NULL); paramDescr=GWEN_XMLNode_GetCharValue(n, "descr", NULL); if (!(paramType && *paramType)) { DBG_ERROR(GWEN_LOGDOMAIN, "Parameter has no type"); return GWEN_ERROR_BAD_DATA; } prm=Typemaker2_VirtualFn_Param_new(); Typemaker2_VirtualFn_Param_SetName(prm, paramName); Typemaker2_VirtualFn_Param_SetType(prm, paramType); Typemaker2_VirtualFn_Param_SetDescr(prm, paramDescr); Typemaker2_VirtualFn_Param_List_Add(prm, vf->paramList); n=GWEN_XMLNode_FindNextTag(n, "param", NULL, NULL); } } /* read descr */ s=GWEN_XMLNode_GetCharValue(node, "descr", NULL); Typemaker2_VirtualFn_SetDescr(vf, s); return 0; } const char *Typemaker2_VirtualFn_GetName(const TYPEMAKER2_VIRTUALFN *vf) { assert(vf); assert(vf->refCount); return vf->name; } void Typemaker2_VirtualFn_SetName(TYPEMAKER2_VIRTUALFN *vf, const char *s) { assert(vf); assert(vf->refCount); free(vf->name); if (s) vf->name=strdup(s); else vf->name=NULL; } const char *Typemaker2_VirtualFn_GetLocation(const TYPEMAKER2_VIRTUALFN *vf) { assert(vf); assert(vf->refCount); return vf->location; } void Typemaker2_VirtualFn_SetLocation(TYPEMAKER2_VIRTUALFN *vf, const char *s) { assert(vf); assert(vf->refCount); free(vf->location); if (s) vf->location=strdup(s); else vf->location=NULL; } const char *Typemaker2_VirtualFn_GetDescr(const TYPEMAKER2_VIRTUALFN *vf) { assert(vf); assert(vf->refCount); return vf->descr; } void Typemaker2_VirtualFn_SetDescr(TYPEMAKER2_VIRTUALFN *vf, const char *s) { assert(vf); assert(vf->refCount); free(vf->descr); if (s) vf->descr=strdup(s); else vf->descr=NULL; } uint32_t Typemaker2_VirtualFn_GetFlags(const TYPEMAKER2_VIRTUALFN *vf) { assert(vf); assert(vf->refCount); return vf->flags; } void Typemaker2_VirtualFn_SetFlags(TYPEMAKER2_VIRTUALFN *vf, uint32_t fl) { assert(vf); assert(vf->refCount); vf->flags=fl; } void Typemaker2_VirtualFn_AddFlags(TYPEMAKER2_VIRTUALFN *vf, uint32_t fl) { assert(vf); assert(vf->refCount); vf->flags|=fl; } void Typemaker2_VirtualFn_SubFlags(TYPEMAKER2_VIRTUALFN *vf, uint32_t fl) { assert(vf); assert(vf->refCount); vf->flags&=~fl; } int Typemaker2_VirtualFn_GetAccess(const TYPEMAKER2_VIRTUALFN *vf) { assert(vf); assert(vf->refCount); return vf->access; } void Typemaker2_VirtualFn_SetAccess(TYPEMAKER2_VIRTUALFN *vf, int i) { assert(vf); assert(vf->refCount); vf->access=i; } const char *Typemaker2_VirtualFn_GetReturnType(const TYPEMAKER2_VIRTUALFN *vf) { assert(vf); assert(vf->refCount); return vf->returnType; } void Typemaker2_VirtualFn_SetReturnType(TYPEMAKER2_VIRTUALFN *vf, const char *s) { assert(vf); assert(vf->refCount); free(vf->returnType); if (s) vf->returnType=strdup(s); else vf->returnType=NULL; } const char *Typemaker2_VirtualFn_GetReturnTypeDescr(const TYPEMAKER2_VIRTUALFN *vf) { assert(vf); return vf->returnTypeDescr; } void Typemaker2_VirtualFn_SetReturnTypeDescr(TYPEMAKER2_VIRTUALFN *vf, const char *s) { assert(vf); free(vf->returnTypeDescr); if (s) vf->returnTypeDescr=strdup(s); else vf->returnTypeDescr=NULL; } const char *Typemaker2_VirtualFn_GetDefaultReturnValue(const TYPEMAKER2_VIRTUALFN *vf) { assert(vf); assert(vf->refCount); return vf->defaultReturnValue; } void Typemaker2_VirtualFn_SetDefaultReturnValue(TYPEMAKER2_VIRTUALFN *vf, const char *s) { assert(vf); assert(vf->refCount); free(vf->defaultReturnValue); if (s) vf->defaultReturnValue=strdup(s); else vf->defaultReturnValue=NULL; } TYPEMAKER2_VIRTUALFN_PARAM_LIST *Typemaker2_VirtualFn_GetParamTypeList(const TYPEMAKER2_VIRTUALFN *vf) { assert(vf); assert(vf->refCount); return vf->paramList; } const char *Typemaker2_VirtualFn_GetPreset(const TYPEMAKER2_VIRTUALFN *vf) { assert(vf); assert(vf->refCount); return vf->preset; } void Typemaker2_VirtualFn_SetPreset(TYPEMAKER2_VIRTUALFN *vf, const char *s) { assert(vf); assert(vf->refCount); free(vf->preset); if (s) vf->preset=strdup(s); else vf->preset=NULL; } TYPEMAKER2_VIRTUALFN_PARAM *Typemaker2_VirtualFn_Param_new() { TYPEMAKER2_VIRTUALFN_PARAM *prm; GWEN_NEW_OBJECT(TYPEMAKER2_VIRTUALFN_PARAM, prm); GWEN_LIST_INIT(TYPEMAKER2_VIRTUALFN_PARAM, prm); return prm; } void Typemaker2_VirtualFn_Param_free(TYPEMAKER2_VIRTUALFN_PARAM *prm) { if (prm) { free(prm->name); free(prm->type); free(prm->descr); GWEN_FREE_OBJECT(prm); } } const char *Typemaker2_VirtualFn_Param_GetName(const TYPEMAKER2_VIRTUALFN_PARAM *prm) { assert(prm); return prm->name; } void Typemaker2_VirtualFn_Param_SetName(TYPEMAKER2_VIRTUALFN_PARAM *prm, const char *s) { assert(prm); free(prm->name); if (s) prm->name=strdup(s); else prm->name=NULL; } const char *Typemaker2_VirtualFn_Param_GetType(const TYPEMAKER2_VIRTUALFN_PARAM *prm) { assert(prm); return prm->type; } void Typemaker2_VirtualFn_Param_SetType(TYPEMAKER2_VIRTUALFN_PARAM *prm, const char *s) { assert(prm); free(prm->type); if (s) prm->type=strdup(s); else prm->type=NULL; } const char *Typemaker2_VirtualFn_Param_GetDescr(const TYPEMAKER2_VIRTUALFN_PARAM *prm) { assert(prm); return prm->descr; } void Typemaker2_VirtualFn_Param_SetDescr(TYPEMAKER2_VIRTUALFN_PARAM *prm, const char *s) { assert(prm); free(prm->descr); if (s) prm->descr=strdup(s); else prm->descr=NULL; } gwenhywfar-4.15.2beta/tools/typemaker2/tm_virtualfn.h0000644000175000017500000000670212364015347017661 00000000000000/*************************************************************************** begin : Mon Jun 28 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_VIRTUALFN_H #define TYPEMAKER2_VIRTUALFN_H #include #include #include typedef struct TYPEMAKER2_VIRTUALFN TYPEMAKER2_VIRTUALFN; GWEN_LIST_FUNCTION_DEFS(TYPEMAKER2_VIRTUALFN, Typemaker2_VirtualFn); typedef struct TYPEMAKER2_VIRTUALFN_PARAM TYPEMAKER2_VIRTUALFN_PARAM; GWEN_LIST_FUNCTION_DEFS(TYPEMAKER2_VIRTUALFN_PARAM, Typemaker2_VirtualFn_Param); #define TYPEMAKER2_VIRTUALFN_FLAGS_FROMSLOT 0x00000001 TYPEMAKER2_VIRTUALFN *Typemaker2_VirtualFn_new(); void Typemaker2_VirtualFn_free(TYPEMAKER2_VIRTUALFN *vf); void Typemaker2_VirtualFn_Attach(TYPEMAKER2_VIRTUALFN *vf); int Typemaker2_VirtualFn_readXml(TYPEMAKER2_VIRTUALFN *vf, GWEN_XMLNODE *node); const char *Typemaker2_VirtualFn_GetName(const TYPEMAKER2_VIRTUALFN *vf); void Typemaker2_VirtualFn_SetName(TYPEMAKER2_VIRTUALFN *vf, const char *s); const char *Typemaker2_VirtualFn_GetLocation(const TYPEMAKER2_VIRTUALFN *vf); void Typemaker2_VirtualFn_SetLocation(TYPEMAKER2_VIRTUALFN *vf, const char *s); const char *Typemaker2_VirtualFn_GetDescr(const TYPEMAKER2_VIRTUALFN *vf); void Typemaker2_VirtualFn_SetDescr(TYPEMAKER2_VIRTUALFN *vf, const char *s); uint32_t Typemaker2_VirtualFn_GetFlags(const TYPEMAKER2_VIRTUALFN *vf); void Typemaker2_VirtualFn_SetFlags(TYPEMAKER2_VIRTUALFN *vf, uint32_t fl); void Typemaker2_VirtualFn_AddFlags(TYPEMAKER2_VIRTUALFN *vf, uint32_t fl); void Typemaker2_VirtualFn_SubFlags(TYPEMAKER2_VIRTUALFN *vf, uint32_t fl); int Typemaker2_VirtualFn_GetAccess(const TYPEMAKER2_VIRTUALFN *vf); void Typemaker2_VirtualFn_SetAccess(TYPEMAKER2_VIRTUALFN *vf, int i); const char *Typemaker2_VirtualFn_GetReturnType(const TYPEMAKER2_VIRTUALFN *vf); void Typemaker2_VirtualFn_SetReturnType(TYPEMAKER2_VIRTUALFN *vf, const char *s); const char *Typemaker2_VirtualFn_GetReturnTypeDescr(const TYPEMAKER2_VIRTUALFN *vf); void Typemaker2_VirtualFn_SetReturnTypeDescr(TYPEMAKER2_VIRTUALFN *vf, const char *s); const char *Typemaker2_VirtualFn_GetPreset(const TYPEMAKER2_VIRTUALFN *vf); void Typemaker2_VirtualFn_SetPreset(TYPEMAKER2_VIRTUALFN *vf, const char *s); const char *Typemaker2_VirtualFn_GetDefaultReturnValue(const TYPEMAKER2_VIRTUALFN *vf); void Typemaker2_VirtualFn_SetDefaultReturnValue(TYPEMAKER2_VIRTUALFN *vf, const char *s); TYPEMAKER2_VIRTUALFN_PARAM_LIST *Typemaker2_VirtualFn_GetParamTypeList(const TYPEMAKER2_VIRTUALFN *vf); TYPEMAKER2_VIRTUALFN_PARAM *Typemaker2_VirtualFn_Param_new(); void Typemaker2_VirtualFn_Param_free(TYPEMAKER2_VIRTUALFN_PARAM *prm); const char *Typemaker2_VirtualFn_Param_GetName(const TYPEMAKER2_VIRTUALFN_PARAM *prm); void Typemaker2_VirtualFn_Param_SetName(TYPEMAKER2_VIRTUALFN_PARAM *prm, const char *s); const char *Typemaker2_VirtualFn_Param_GetType(const TYPEMAKER2_VIRTUALFN_PARAM *prm); void Typemaker2_VirtualFn_Param_SetType(TYPEMAKER2_VIRTUALFN_PARAM *prm, const char *s); const char *Typemaker2_VirtualFn_Param_GetDescr(const TYPEMAKER2_VIRTUALFN_PARAM *prm); void Typemaker2_VirtualFn_Param_SetDescr(TYPEMAKER2_VIRTUALFN_PARAM *prm, const char *s); #endif gwenhywfar-4.15.2beta/tools/typemaker2/tm_typemanager.h0000644000175000017500000000411612364015347020160 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_TYPEMANAGER_H #define TYPEMAKER2_TYPEMANAGER_H #include "tm_type.h" #include typedef struct TYPEMAKER2_TYPEMANAGER TYPEMAKER2_TYPEMANAGER; TYPEMAKER2_TYPEMANAGER *Typemaker2_TypeManager_new(); void Typemaker2_TypeManager_free(TYPEMAKER2_TYPEMANAGER *tym); const char *Typemaker2_TypeManager_GetLanguage(const TYPEMAKER2_TYPEMANAGER *tym); void Typemaker2_TypeManager_SetLanguage(TYPEMAKER2_TYPEMANAGER *tym, const char *s); const char *Typemaker2_TypeManager_GetApiDeclaration(const TYPEMAKER2_TYPEMANAGER *tym); void Typemaker2_TypeManager_SetApiDeclaration(TYPEMAKER2_TYPEMANAGER *tym, const char *s); void Typemaker2_TypeManager_AddFolder(TYPEMAKER2_TYPEMANAGER *tym, const char *s); void Typemaker2_TypeManager_AddType(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty); int Typemaker2_TypeManager_SetTypePtrs(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty); int Typemaker2_TypeManager_SetMemberTypePtrs(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty); TYPEMAKER2_TYPE *Typemaker2_TypeManager_FindType(TYPEMAKER2_TYPEMANAGER *tym, const char *s); TYPEMAKER2_TYPE *Typemaker2_TypeManager_GetType(TYPEMAKER2_TYPEMANAGER *tym, const char *s); TYPEMAKER2_TYPE *Typemaker2_TypeManager_LoadTypeFile(TYPEMAKER2_TYPEMANAGER *tym, const char *fileName); int Typemaker2_TypeManager_LoadTypeFile2(TYPEMAKER2_TYPEMANAGER *tym, const char *fileName, TYPEMAKER2_TYPE_LIST2 *tlist2); int Typemaker2_TypeManager_LoadTypeFileNoLookup(TYPEMAKER2_TYPEMANAGER *tym, const char *fileName, TYPEMAKER2_TYPE_LIST2 *tlist2); void Typemaker2_TypeManager_Dump(TYPEMAKER2_TYPEMANAGER *tym, FILE *f, int indent); #endif gwenhywfar-4.15.2beta/tools/typemaker2/Makefile.in0000644000175000017500000007670112641052676017055 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = typemaker2$(EXEEXT) @IS_WINDOWS_TRUE@am__append_1 = $(PROG_LIBRARIES) subdir = tools/typemaker2 DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(noinst_HEADERS) README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_typemaker2_OBJECTS = tm_type.$(OBJEXT) tm_member.$(OBJEXT) \ tm_header.$(OBJEXT) tm_util.$(OBJEXT) tm_typemanager.$(OBJEXT) \ tm_builder.$(OBJEXT) tm_builder_c.$(OBJEXT) tm_item.$(OBJEXT) \ tm_enum.$(OBJEXT) tm_define.$(OBJEXT) tm_code.$(OBJEXT) \ tm_inline.$(OBJEXT) tm_virtualfn.$(OBJEXT) tm_signal.$(OBJEXT) \ tm_slot.$(OBJEXT) tm_group.$(OBJEXT) build.$(OBJEXT) \ builddefs.$(OBJEXT) main.$(OBJEXT) typemaker2_OBJECTS = $(am_typemaker2_OBJECTS) am__DEPENDENCIES_1 = @IS_WINDOWS_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) typemaker2_DEPENDENCIES = \ $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(am__DEPENDENCIES_2) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = typemaker2_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(typemaker2_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(typemaker2_SOURCES) DIST_SOURCES = $(typemaker2_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ SUBDIRS = types INCLUDES = @all_includes@ -I$(gwenhywfar_symlinkdir) typefiles = \ tm_item.xml \ tm_enum.xml \ tm_define.xml \ tm_code.xml \ tm_signal.xml \ tm_slot.xml noinst_HEADERS = \ tm_type_p.h tm_type.h \ tm_member_p.h tm_member.h \ tm_header_p.h tm_header.h \ tm_typemanager_p.h tm_typemanager.h \ tm_virtualfn_p.h tm_virtualfn.h \ tm_builder_p.h tm_builder.h \ tm_item_p.h tm_item.h \ tm_enum_p.h tm_enum.h \ tm_define_p.h tm_define.h \ tm_code_p.h tm_code.h \ tm_inline_p.h tm_inline.h \ tm_signal_p.h tm_signal.h \ tm_slot_p.h tm_slot.h \ tm_group_p.h tm_group.h \ tm_util.h \ typemaker2.h \ tm_builder_c.h typemaker2_SOURCES = \ tm_type.c \ tm_member.c \ tm_header.c \ tm_util.c \ tm_typemanager.c \ tm_builder.c \ tm_builder_c.c \ tm_item.c \ tm_enum.c \ tm_define.c \ tm_code.c \ tm_inline.c \ tm_virtualfn.c \ tm_signal.c \ tm_slot.c \ tm_group.c \ build.c \ builddefs.c \ main.c # tm_enum.c typemaker2_LDADD = $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(am__append_1) @IS_WINDOWS_TRUE@typemaker2_LDFLAGS = -mconsole EXTRA_DIST = $(typefiles) all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tools/typemaker2/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/typemaker2/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list typemaker2$(EXEEXT): $(typemaker2_OBJECTS) $(typemaker2_DEPENDENCIES) $(EXTRA_typemaker2_DEPENDENCIES) @rm -f typemaker2$(EXEEXT) $(AM_V_CCLD)$(typemaker2_LINK) $(typemaker2_OBJECTS) $(typemaker2_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/build.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/builddefs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_builder.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_builder_c.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_code.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_define.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_enum.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_group.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_header.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_inline.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_item.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_member.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_signal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_slot.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_type.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_typemanager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_util.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_virtualfn.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(PROGRAMS) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-binPROGRAMS clean-generic clean-libtool \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-binPROGRAMS install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS #BUILT_SOURCES= sources: for f in $(typemaker2_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done indent: $(BUILT_SOURCES) astyle \ --style=gnu \ --indent=spaces=2 \ --min-conditional-indent=0 \ --indent-labels \ --pad=oper \ --one-line=keep-blocks \ --suffix=none \ -a -y $(BUILT_SOURCES) types: $(typefiles) ./typemaker2 -I types/c -I $(srcdir) $(typefiles) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/tools/typemaker2/tm_builder.h0000644000175000017500000001462712452070262017275 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_BUILDER_H #define TYPEMAKER2_BUILDER_H #include #include #include #include typedef struct TYPEMAKER2_BUILDER TYPEMAKER2_BUILDER; GWEN_INHERIT_FUNCTION_DEFS(TYPEMAKER2_BUILDER) #include "tm_typemanager.h" #include "tm_type.h" #include "tm_member.h" typedef int (*TYPEMAKER2_BUILDER_BUILD_FN)(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); TYPEMAKER2_BUILDER *Typemaker2_Builder_new(); void Typemaker2_Builder_free(TYPEMAKER2_BUILDER *tb); GWEN_STRINGLIST *Typemaker2_Builder_GetPublicDeclarations(const TYPEMAKER2_BUILDER *tb); GWEN_STRINGLIST *Typemaker2_Builder_GetLibraryDeclarations(const TYPEMAKER2_BUILDER *tb); GWEN_STRINGLIST *Typemaker2_Builder_GetProtectedDeclarations(const TYPEMAKER2_BUILDER *tb); GWEN_STRINGLIST *Typemaker2_Builder_GetPrivateDeclarations(const TYPEMAKER2_BUILDER *tb); GWEN_STRINGLIST *Typemaker2_Builder_GetCode(const TYPEMAKER2_BUILDER *tb); TYPEMAKER2_TYPEMANAGER *Typemaker2_Builder_GetTypeManager(const TYPEMAKER2_BUILDER *tb); void Typemaker2_Builder_SetTypeManager(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPEMANAGER *tm); void Typemaker2_Builder_AddPublicDeclaration(TYPEMAKER2_BUILDER *tb, const char *s); void Typemaker2_Builder_AddLibraryDeclaration(TYPEMAKER2_BUILDER *tb, const char *s); void Typemaker2_Builder_AddProtectedDeclaration(TYPEMAKER2_BUILDER *tb, const char *s); void Typemaker2_Builder_AddPrivateDeclaration(TYPEMAKER2_BUILDER *tb, const char *s); void Typemaker2_Builder_AddCode(TYPEMAKER2_BUILDER *tb, const char *s); const char *Typemaker2_Builder_GetFileNamePublic(const TYPEMAKER2_BUILDER *tb); void Typemaker2_Builder_SetFileNamePublic(TYPEMAKER2_BUILDER *tb, const char *s); const char *Typemaker2_Builder_GetFileNameLibrary(const TYPEMAKER2_BUILDER *tb); void Typemaker2_Builder_SetFileNameLibrary(TYPEMAKER2_BUILDER *tb, const char *s); const char *Typemaker2_Builder_GetFileNameProtected(const TYPEMAKER2_BUILDER *tb); void Typemaker2_Builder_SetFileNameProtected(TYPEMAKER2_BUILDER *tb, const char *s); const char *Typemaker2_Builder_GetFileNamePrivate(const TYPEMAKER2_BUILDER *tb); void Typemaker2_Builder_SetFileNamePrivate(TYPEMAKER2_BUILDER *tb, const char *s); const char *Typemaker2_Builder_GetFileNameCode(const TYPEMAKER2_BUILDER *tb); void Typemaker2_Builder_SetFileNameCode(TYPEMAKER2_BUILDER *tb, const char *s); const char *Typemaker2_Builder_GetSourceFileName(const TYPEMAKER2_BUILDER *tb); void Typemaker2_Builder_SetSourceFileName(TYPEMAKER2_BUILDER *tb, const char *s); const char *Typemaker2_Builder_GetTypedefFileName(const TYPEMAKER2_BUILDER *tb); void Typemaker2_Builder_SetTypedefFileName(TYPEMAKER2_BUILDER *tb, const char *s); void Typemaker2_Builder_SetDestFolderName(TYPEMAKER2_BUILDER *tb, const char *s); void Typemaker2_Builder_SetBuildFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_BUILDER_BUILD_FN fn); int Typemaker2_Builder_Build(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); int Typemaker2_Builder_WriteFiles(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, int defsOnly); int Typemaker2_Builder_MakeTypeList1(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); int Typemaker2_Builder_MakeTypeList2(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); int Typemaker2_Builder_MakeTypeTree(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); GWEN_DB_NODE *Typemaker2_Builder_CreateDbForCall(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst); int Typemaker2_Builder_ReplaceVars(const char *s, GWEN_DB_NODE *db, GWEN_BUFFER *dbuf); /* see INVOKE_FN macro in tm_builder.c */ int Typemaker2_Builder_Invoke_ConstructFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst, GWEN_BUFFER *dbuf); int Typemaker2_Builder_Invoke_DestructFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst, GWEN_BUFFER *dbuf); int Typemaker2_Builder_Invoke_AssignFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst, GWEN_BUFFER *dbuf); int Typemaker2_Builder_Invoke_DupFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst, GWEN_BUFFER *dbuf); int Typemaker2_Builder_Invoke_CompareFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst, GWEN_BUFFER *dbuf); int Typemaker2_Builder_Invoke_ToDbFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst, GWEN_BUFFER *dbuf); int Typemaker2_Builder_Invoke_FromDbFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst, GWEN_BUFFER *dbuf); int Typemaker2_Builder_Invoke_ToXmlFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst, GWEN_BUFFER *dbuf); int Typemaker2_Builder_Invoke_FromXmlFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst, GWEN_BUFFER *dbuf); int Typemaker2_Builder_Invoke_ToObjectFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst, GWEN_BUFFER *dbuf); int Typemaker2_Builder_Invoke_FromObjectFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst, GWEN_BUFFER *dbuf); int Typemaker2_Builder_Invoke_ToHashStringFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst, GWEN_BUFFER *dbuf); #endif gwenhywfar-4.15.2beta/tools/typemaker2/tm_code.xml0000644000175000017500000000412112364015347017123 00000000000000 TYPEMAKER2_CODE Typemaker2_Code tm_code with_list1 with_xml
tm_item.h
NULL NULL public own attribute const dup const NULL NULL public own const dup const NULL NULL public own const dup const NULL NULL public own const dup const 0 0 public volatile none none 0 0 public volatile none none
gwenhywfar-4.15.2beta/tools/typemaker2/tm_item.xml0000644000175000017500000000175212364015347017156 00000000000000 TYPEMAKER2_ITEM Typemaker2_Item tm_item with_list1 with_list2 with_xml NULL NULL public own attribute const dup const NULL NULL public own attribute const dup const gwenhywfar-4.15.2beta/tools/typemaker2/tm_item.c0000644000175000017500000001076712364015347016606 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_item.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_item_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(TYPEMAKER2_ITEM, Typemaker2_Item) GWEN_LIST2_FUNCTIONS(TYPEMAKER2_ITEM, Typemaker2_Item) TYPEMAKER2_ITEM *Typemaker2_Item_new(void) { TYPEMAKER2_ITEM *p_struct; GWEN_NEW_OBJECT(TYPEMAKER2_ITEM, p_struct) GWEN_LIST_INIT(TYPEMAKER2_ITEM, p_struct) /* members */ p_struct->name=NULL; p_struct->value=NULL; /* virtual functions */ return p_struct; } void Typemaker2_Item_free(TYPEMAKER2_ITEM *p_struct) { if (p_struct) { GWEN_LIST_FINI(TYPEMAKER2_ITEM, p_struct) /* members */ free(p_struct->name); free(p_struct->value); GWEN_FREE_OBJECT(p_struct); } } TYPEMAKER2_ITEM *Typemaker2_Item_dup(const TYPEMAKER2_ITEM *p_src) { TYPEMAKER2_ITEM *p_struct; assert(p_src); p_struct=Typemaker2_Item_new(); /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; } if (p_src->name) { p_struct->name=strdup(p_src->name); } /* member "value" */ if (p_struct->value) { free(p_struct->value); p_struct->value=NULL; } if (p_src->value) { p_struct->value=strdup(p_src->value); } return p_struct; } TYPEMAKER2_ITEM *Typemaker2_Item_copy(TYPEMAKER2_ITEM *p_struct, const TYPEMAKER2_ITEM *p_src) { assert(p_struct); assert(p_src); /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; } if (p_src->name) { p_struct->name=strdup(p_src->name); } /* member "value" */ if (p_struct->value) { free(p_struct->value); p_struct->value=NULL; } if (p_src->value) { p_struct->value=strdup(p_src->value); } return p_struct; } const char *Typemaker2_Item_GetName(const TYPEMAKER2_ITEM *p_struct) { assert(p_struct); return p_struct->name; } const char *Typemaker2_Item_GetValue(const TYPEMAKER2_ITEM *p_struct) { assert(p_struct); return p_struct->value; } void Typemaker2_Item_SetName(TYPEMAKER2_ITEM *p_struct, const char *p_src) { assert(p_struct); if (p_struct->name) { free(p_struct->name); } if (p_src) { p_struct->name=strdup(p_src); } else { p_struct->name=NULL; } } void Typemaker2_Item_SetValue(TYPEMAKER2_ITEM *p_struct, const char *p_src) { assert(p_struct); if (p_struct->value) { free(p_struct->value); } if (p_src) { p_struct->value=strdup(p_src); } else { p_struct->value=NULL; } } TYPEMAKER2_ITEM_LIST *Typemaker2_Item_List_dup(const TYPEMAKER2_ITEM_LIST *p_src) { TYPEMAKER2_ITEM_LIST *p_dest; TYPEMAKER2_ITEM *p_elem; assert(p_src); p_dest=Typemaker2_Item_List_new(); p_elem=Typemaker2_Item_List_First(p_src); while(p_elem) { TYPEMAKER2_ITEM *p_cpy; p_cpy=Typemaker2_Item_dup(p_elem); Typemaker2_Item_List_Add(p_cpy, p_dest); p_elem=Typemaker2_Item_List_Next(p_elem); } return p_dest; } void Typemaker2_Item_ReadXml(TYPEMAKER2_ITEM *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "name" */ if (p_struct->name) { free(p_struct->name); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "name", NULL); if (s) p_struct->name=strdup(s); } if (p_struct->name==NULL) { /* member "name" is volatile, just presetting */ p_struct->name=NULL; } /* member "value" */ if (p_struct->value) { free(p_struct->value); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "value", NULL); if (s) p_struct->value=strdup(s); } if (p_struct->value==NULL) { /* member "value" is volatile, just presetting */ p_struct->value=NULL; } } void Typemaker2_Item_WriteXml(const TYPEMAKER2_ITEM *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "name" */ GWEN_XMLNode_SetProperty(p_db, "name", p_struct->name); /* member "value" */ GWEN_XMLNode_SetProperty(p_db, "value", p_struct->value); } void Typemaker2_Item_toXml(const TYPEMAKER2_ITEM *p_struct, GWEN_XMLNODE *p_db) { Typemaker2_Item_WriteXml(p_struct, p_db); } TYPEMAKER2_ITEM *Typemaker2_Item_fromXml(GWEN_XMLNODE *p_db) { TYPEMAKER2_ITEM *p_struct; p_struct=Typemaker2_Item_new(); Typemaker2_Item_ReadXml(p_struct, p_db); return p_struct; } /* code headers */ gwenhywfar-4.15.2beta/tools/typemaker2/tm_member.c0000644000175000017500000003240412641053644017107 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_member_p.h" #include "tm_util.h" #include #include #include GWEN_LIST_FUNCTIONS(TYPEMAKER2_MEMBER, Typemaker2_Member) TYPEMAKER2_MEMBER *Typemaker2_Member_new() { TYPEMAKER2_MEMBER *tm; GWEN_NEW_OBJECT(TYPEMAKER2_MEMBER, tm); tm->refCount=1; GWEN_LIST_INIT(TYPEMAKER2_MEMBER, tm); return tm; } void Typemaker2_Member_free(TYPEMAKER2_MEMBER *tm) { if (tm) { assert(tm->refCount); if (tm->refCount==1) { GWEN_LIST_FINI(TYPEMAKER2_MEMBER, tm); free(tm->name); free(tm->typeName); free(tm->descr); free(tm->fieldId); free(tm->defaultValue); free(tm->presetValue); free(tm->aedb_type); free(tm->enumId); free(tm->defineId); tm->refCount=0; GWEN_FREE_OBJECT(tm); } else { tm->refCount--; } } } void Typemaker2_Member_Attach(TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); tm->refCount++; } const char *Typemaker2_Member_GetName(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); return tm->name; } void Typemaker2_Member_SetName(TYPEMAKER2_MEMBER *tm, const char *s) { assert(tm); assert(tm->refCount); free(tm->name); if (s && *s) tm->name=strdup(s); else tm->name=NULL; } const char *Typemaker2_Member_GetTypeName(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); return tm->typeName; } void Typemaker2_Member_SetTypeName(TYPEMAKER2_MEMBER *tm, const char *s) { assert(tm); assert(tm->refCount); free(tm->typeName); if (s && *s) tm->typeName=strdup(s); else tm->typeName=NULL; } const char *Typemaker2_Member_GetDescription(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); return tm->descr; } void Typemaker2_Member_SetDescription(TYPEMAKER2_MEMBER *tm, const char *s) { assert(tm); assert(tm->refCount); free(tm->descr); if (s && *s) tm->descr=strdup(s); else tm->descr=NULL; } const char *Typemaker2_Member_GetFieldId(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); return tm->fieldId; } void Typemaker2_Member_SetFieldId(TYPEMAKER2_MEMBER *tm, const char *s) { assert(tm); assert(tm->refCount); free(tm->fieldId); if (s && *s) tm->fieldId=strdup(s); else tm->fieldId=NULL; } const char *Typemaker2_Member_GetEnumId(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); return tm->enumId; } void Typemaker2_Member_SetEnumId(TYPEMAKER2_MEMBER *tm, const char *s) { assert(tm); assert(tm->refCount); free(tm->enumId); if (s && *s) tm->enumId=strdup(s); else tm->enumId=NULL; } const char *Typemaker2_Member_GetDefineId(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); return tm->defineId; } void Typemaker2_Member_SetDefineId(TYPEMAKER2_MEMBER *tm, const char *s) { assert(tm); assert(tm->refCount); free(tm->defineId); if (s && *s) tm->defineId=strdup(s); else tm->defineId=NULL; } uint32_t Typemaker2_Member_GetFlags(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); if (tm->flags==0 && tm->typePtr) return Typemaker2_Type_GetFlags(tm->typePtr); return tm->flags; } void Typemaker2_Member_SetFlags(TYPEMAKER2_MEMBER *tm, uint32_t i) { assert(tm); assert(tm->refCount); tm->flags=i; } uint32_t Typemaker2_Member_GetSetFlags(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); if (tm->setFlags==0 && tm->typePtr) return Typemaker2_Type_GetSetFlags(tm->typePtr); return tm->setFlags; } void Typemaker2_Member_SetSetFlags(TYPEMAKER2_MEMBER *tm, uint32_t i) { assert(tm); assert(tm->refCount); tm->setFlags=i; } uint32_t Typemaker2_Member_GetGetFlags(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); if (tm->getFlags==0 && tm->typePtr) return Typemaker2_Type_GetGetFlags(tm->typePtr); return tm->getFlags; } void Typemaker2_Member_SetGetFlags(TYPEMAKER2_MEMBER *tm, uint32_t i) { assert(tm); assert(tm->refCount); tm->getFlags=i; } uint32_t Typemaker2_Member_GetDupFlags(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); if (tm->dupFlags==0 && tm->typePtr) return Typemaker2_Type_GetDupFlags(tm->typePtr); return tm->dupFlags; } void Typemaker2_Member_SetDupFlags(TYPEMAKER2_MEMBER *tm, uint32_t i) { assert(tm); assert(tm->refCount); tm->dupFlags=i; } uint32_t Typemaker2_Member_GetCopyFlags(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); if (tm->copyFlags==0 && tm->typePtr) return Typemaker2_Type_GetCopyFlags(tm->typePtr); return tm->copyFlags; } void Typemaker2_Member_SetCopyFlags(TYPEMAKER2_MEMBER *tm, uint32_t i) { assert(tm); assert(tm->refCount); tm->copyFlags=i; } int Typemaker2_Member_GetAccess(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); if (tm->access==TypeMaker2_Access_Unknown && tm->typePtr) return Typemaker2_Type_GetAccess(tm->typePtr); return tm->access; } void Typemaker2_Member_SetAccess(TYPEMAKER2_MEMBER *tm, int i) { assert(tm); assert(tm->refCount); tm->access=i; } int Typemaker2_Member_GetMaxLen(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); return tm->maxLen; } void Typemaker2_Member_SetMaxLen(TYPEMAKER2_MEMBER *tm, int i) { assert(tm); assert(tm->refCount); tm->maxLen=i; } const char *Typemaker2_Member_GetDefaultValue(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); if (tm->defaultValue==NULL && tm->typePtr) return Typemaker2_Type_GetDefaultValue(tm->typePtr); return tm->defaultValue; } void Typemaker2_Member_SetDefaultValue(TYPEMAKER2_MEMBER *tm, const char *s) { assert(tm); assert(tm->refCount); free(tm->defaultValue); if (s) tm->defaultValue=strdup(s); else tm->defaultValue=NULL; } const char *Typemaker2_Member_GetPresetValue(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); if (tm->presetValue==NULL && tm->typePtr) return Typemaker2_Type_GetPresetValue(tm->typePtr); return tm->presetValue; } void Typemaker2_Member_SetPresetValue(TYPEMAKER2_MEMBER *tm, const char *s) { assert(tm); assert(tm->refCount); free(tm->presetValue); if (s) tm->presetValue=strdup(s); else tm->presetValue=NULL; } const char *Typemaker2_Member_GetAqDbType(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); if (tm->aedb_type==NULL && tm->typePtr) return Typemaker2_Type_GetAqDbType(tm->typePtr); return tm->aedb_type; } void Typemaker2_Member_SetAqDbType(TYPEMAKER2_MEMBER *tm, const char *s) { assert(tm); assert(tm->refCount); free(tm->aedb_type); if (s) tm->aedb_type=strdup(s); else tm->aedb_type=NULL; } TYPEMAKER2_TYPE *Typemaker2_Member_GetTypePtr(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); return tm->typePtr; } void Typemaker2_Member_SetTypePtr(TYPEMAKER2_MEMBER *tm, TYPEMAKER2_TYPE *ty) { assert(tm); assert(tm->refCount); tm->typePtr=ty; } TYPEMAKER2_ENUM *Typemaker2_Member_GetEnumPtr(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); return tm->enumPtr; } void Typemaker2_Member_SetEnumPtr(TYPEMAKER2_MEMBER *tm, TYPEMAKER2_ENUM *te) { assert(tm); assert(tm->refCount); tm->enumPtr=te; } TYPEMAKER2_DEFINE *Typemaker2_Member_GetDefinePtr(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); return tm->definePtr; } void Typemaker2_Member_SetDefinePtr(TYPEMAKER2_MEMBER *tm, TYPEMAKER2_DEFINE *td) { assert(tm); assert(tm->refCount); tm->definePtr=td; } TYPEMAKER2_GROUP *Typemaker2_Member_GetGroupPtr(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); return tm->groupPtr; } void Typemaker2_Member_SetGroupPtr(TYPEMAKER2_MEMBER *tm, TYPEMAKER2_GROUP *gr) { assert(tm); assert(tm->refCount); tm->groupPtr=gr; } int Typemaker2_Member_GetMemberPosition(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); return tm->memberPosition; } void Typemaker2_Member_SetMemberPosition(TYPEMAKER2_MEMBER *tm, int i) { assert(tm); assert(tm->refCount); tm->memberPosition=i; } int Typemaker2_Member_readXml(TYPEMAKER2_MEMBER *tm, GWEN_XMLNODE *node) { const char *s; GWEN_XMLNODE *nn; assert(tm); assert(tm->refCount); s=GWEN_XMLNode_GetProperty(node, "name", NULL); if (s==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Member has no id"); return GWEN_ERROR_BAD_DATA; } Typemaker2_Member_SetName(tm, s); s=GWEN_XMLNode_GetProperty(node, "type", NULL); if (s==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Member has no type"); return GWEN_ERROR_BAD_DATA; } Typemaker2_Member_SetTypeName(tm, s); s=GWEN_XMLNode_GetProperty(node, "enum", NULL); Typemaker2_Member_SetEnumId(tm, s); s=GWEN_XMLNode_GetProperty(node, "define", NULL); Typemaker2_Member_SetDefineId(tm, s); s=GWEN_XMLNode_GetProperty(node, "maxlen", NULL); if (s && *s) { int i; if (1==sscanf(s, "%i", &i)) tm->maxLen=i; else { DBG_ERROR(GWEN_LOGDOMAIN, "Bad value for maxlen [%s]", s); return GWEN_ERROR_BAD_DATA; } } /* read flags */ s=GWEN_XMLNode_GetCharValue(node, "flags", NULL); if (s && *s) Typemaker2_Member_SetFlags(tm, Typemaker2_FlagsFromString(s)); /* read setflags */ s=GWEN_XMLNode_GetCharValue(node, "setflags", NULL); if (s && *s) Typemaker2_Member_SetSetFlags(tm, Typemaker2_FlagsFromString(s)); /* read getflags */ s=GWEN_XMLNode_GetCharValue(node, "getflags", NULL); if (s && *s) Typemaker2_Member_SetGetFlags(tm, Typemaker2_FlagsFromString(s)); /* read dupflags */ s=GWEN_XMLNode_GetCharValue(node, "dupflags", NULL); if (s && *s) Typemaker2_Member_SetDupFlags(tm, Typemaker2_FlagsFromString(s)); /* read copyflags */ s=GWEN_XMLNode_GetCharValue(node, "copyflags", NULL); if (s && *s) Typemaker2_Member_SetCopyFlags(tm, Typemaker2_FlagsFromString(s)); /* read access */ s=GWEN_XMLNode_GetCharValue(node, "access", NULL); if (s && *s) { int i=Typemaker2_AccessFromString(s); if (i==TypeMaker2_Access_Unknown) { DBG_ERROR(GWEN_LOGDOMAIN, "Unknown access type [%s]", s); return GWEN_ERROR_BAD_DATA; } Typemaker2_Member_SetAccess(tm, i); } /* read default value */ s=GWEN_XMLNode_GetCharValue(node, "default", NULL); if (s && *s) Typemaker2_Member_SetDefaultValue(tm, s); /* read preset value */ s=GWEN_XMLNode_GetCharValue(node, "preset", NULL); if (s && *s) Typemaker2_Member_SetPresetValue(tm, s); /* read AEDB type */ s=GWEN_XMLNode_GetCharValue(node, "aedb_type", NULL); if (s && *s) Typemaker2_Member_SetAqDbType(tm, s); /* read description */ nn=GWEN_XMLNode_FindFirstTag(node, "descr", NULL, NULL); if (nn) { GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_XMLNode_toBuffer(nn, tbuf, GWEN_XML_FLAGS_SIMPLE | GWEN_XML_FLAGS_HANDLE_COMMENTS); if (rv<0) { DBG_ERROR(0, "here (%d)", rv); } else { Typemaker2_Member_SetDescription(tm, GWEN_Buffer_GetStart(tbuf)); } GWEN_Buffer_free(tbuf); } return 0; } void Typemaker2_Member_Dump(TYPEMAKER2_MEMBER *tm, FILE *f, int indent) { if (tm) { int i; const char *s1, *s2; for (i=0; iname)?(tm->name):""); for (i=0; itypeName)?(tm->typeName):""); for (i=0; ifieldId)?(tm->fieldId):""); for (i=0; iaccess, Typemaker2_Member_GetAccess(tm)); for (i=0; iflags, Typemaker2_Member_GetFlags(tm)); for (i=0; isetFlags, Typemaker2_Member_GetSetFlags(tm)); for (i=0; igetFlags, Typemaker2_Member_GetGetFlags(tm)); for (i=0; idupFlags, Typemaker2_Member_GetDupFlags(tm)); for (i=0; idefaultValue; s2=Typemaker2_Member_GetDefaultValue(tm); fprintf(f, "Default : %s [%s]\n", s1?s1:"", s2?s2:""); for (i=0; ipresetValue; s2=Typemaker2_Member_GetPresetValue(tm); fprintf(f, "Preset : %s [%s]\n", s1?s1:"", s2?s2:""); for (i=0; imemberPosition); for (i=0; idescr)?(tm->descr):""); } } gwenhywfar-4.15.2beta/tools/typemaker2/tm_item_p.h0000644000175000017500000000105712364015347017122 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_item.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef TM_ITEM_P_H #define TM_ITEM_P_H #include "tm_item.h" #ifdef __cplusplus extern "C" { #endif struct TYPEMAKER2_ITEM { GWEN_LIST_ELEMENT(TYPEMAKER2_ITEM) char *name; char *value; }; #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/tools/typemaker2/tm_code.h0000644000175000017500000000624012364015347016556 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_code.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef TM_CODE_H #define TM_CODE_H #ifdef __cplusplus extern "C" { #endif /* needed system headers */ #include #include #include /* pre-headers */ #include "tm_item.h" typedef struct TYPEMAKER2_CODE TYPEMAKER2_CODE; GWEN_LIST_FUNCTION_DEFS(TYPEMAKER2_CODE, Typemaker2_Code) /* post-headers */ /** Constructor. */ TYPEMAKER2_CODE *Typemaker2_Code_new(void); /** Destructor. */ void Typemaker2_Code_free(TYPEMAKER2_CODE *p_struct); TYPEMAKER2_CODE *Typemaker2_Code_dup(const TYPEMAKER2_CODE *p_struct); TYPEMAKER2_CODE *Typemaker2_Code_copy(TYPEMAKER2_CODE *p_struct, const TYPEMAKER2_CODE *p_src); /** Getter. * Use this function to get the member "id" */ const char *Typemaker2_Code_GetId(const TYPEMAKER2_CODE *p_struct); /** Getter. * Use this function to get the member "memberFlagsMask" */ const char *Typemaker2_Code_GetMemberFlagsMask(const TYPEMAKER2_CODE *p_struct); /** Getter. * Use this function to get the member "memberFlagsValue" */ const char *Typemaker2_Code_GetMemberFlagsValue(const TYPEMAKER2_CODE *p_struct); /** Getter. * Use this function to get the member "code" */ const char *Typemaker2_Code_GetCode(const TYPEMAKER2_CODE *p_struct); /** Getter. * Use this function to get the member "memberFlagsMaskInt" */ uint32_t Typemaker2_Code_GetMemberFlagsMaskInt(const TYPEMAKER2_CODE *p_struct); /** Getter. * Use this function to get the member "memberFlagsValueInt" */ uint32_t Typemaker2_Code_GetMemberFlagsValueInt(const TYPEMAKER2_CODE *p_struct); /** Setter. * Use this function to set the member "id" */ void Typemaker2_Code_SetId(TYPEMAKER2_CODE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "memberFlagsMask" */ void Typemaker2_Code_SetMemberFlagsMask(TYPEMAKER2_CODE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "memberFlagsValue" */ void Typemaker2_Code_SetMemberFlagsValue(TYPEMAKER2_CODE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "code" */ void Typemaker2_Code_SetCode(TYPEMAKER2_CODE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "memberFlagsMaskInt" */ void Typemaker2_Code_SetMemberFlagsMaskInt(TYPEMAKER2_CODE *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "memberFlagsValueInt" */ void Typemaker2_Code_SetMemberFlagsValueInt(TYPEMAKER2_CODE *p_struct, uint32_t p_src); TYPEMAKER2_CODE_LIST *Typemaker2_Code_List_dup(const TYPEMAKER2_CODE_LIST *p_src); void Typemaker2_Code_ReadXml(TYPEMAKER2_CODE *p_struct, GWEN_XMLNODE *p_db); void Typemaker2_Code_WriteXml(const TYPEMAKER2_CODE *p_struct, GWEN_XMLNODE *p_db); void Typemaker2_Code_toXml(const TYPEMAKER2_CODE *p_struct, GWEN_XMLNODE *p_db); TYPEMAKER2_CODE *Typemaker2_Code_fromXml(GWEN_XMLNODE *p_db); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/tools/typemaker2/tm_util.c0000644000175000017500000001012612364015347016612 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_util.h" #include "tm_type.h" #include #include uint32_t Typemaker2_FlagsFromString(const char *t) { GWEN_STRINGLIST *sl; uint32_t flags=0; assert(t && *t); sl=GWEN_StringList_fromString(t, " ,:/", 1); if (sl) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(sl); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); assert(s); if (strcasecmp(s, "own")==0) flags|=TYPEMAKER2_FLAGS_OWN; else if (strcasecmp(s, "volatile")==0) flags|=TYPEMAKER2_FLAGS_VOLATILE; else if (strcasecmp(s, "const")==0) flags|=TYPEMAKER2_FLAGS_CONST; else if (strcasecmp(s, "static")==0) flags|=TYPEMAKER2_FLAGS_STATIC; else if (strcasecmp(s, "dup")==0) flags|=TYPEMAKER2_FLAGS_DUP; else if (strcasecmp(s, "nodup")==0) flags|=TYPEMAKER2_FLAGS_NODUP; else if (strcasecmp(s, "copy")==0) flags|=TYPEMAKER2_FLAGS_COPY; else if (strcasecmp(s, "nocopy")==0) flags|=TYPEMAKER2_FLAGS_NOCOPY; else if (strcasecmp(s, "attribute")==0) flags|=TYPEMAKER2_FLAGS_ATTRIBUTE; else if (strcasecmp(s, "enum")==0) flags|=TYPEMAKER2_FLAGS_ENUM; else if (strcasecmp(s, "define")==0) flags|=TYPEMAKER2_FLAGS_DEFINE; else if (strcasecmp(s, "with_db")==0) flags|=TYPEMAKER2_FLAGS_WITH_DB; else if (strcasecmp(s, "with_xml")==0) flags|=TYPEMAKER2_FLAGS_WITH_XML; else if (strcasecmp(s, "with_object")==0) flags|=TYPEMAKER2_FLAGS_WITH_OBJECT; else if (strcasecmp(s, "with_list1")==0) flags|=TYPEMAKER2_FLAGS_WITH_LIST1; else if (strcasecmp(s, "with_list2")==0) flags|=TYPEMAKER2_FLAGS_WITH_LIST2; else if (strcasecmp(s, "with_inherit")==0) flags|=TYPEMAKER2_FLAGS_WITH_INHERIT; else if (strcasecmp(s, "with_idmap")==0) flags|=TYPEMAKER2_FLAGS_WITH_IDMAP; else if (strcasecmp(s, "with_getbymember")==0) flags|=TYPEMAKER2_FLAGS_WITH_GETBYMEMBER; else if (strcasecmp(s, "with_tree")==0) flags|=TYPEMAKER2_FLAGS_WITH_TREE; else if (strcasecmp(s, "with_hash")==0) flags|=TYPEMAKER2_FLAGS_WITH_HASH; else if (strcasecmp(s, "with_hashnum")==0) flags|=TYPEMAKER2_FLAGS_WITH_HASHNUM; else if (strcasecmp(s, "with_refcount")==0) flags|=TYPEMAKER2_FLAGS_WITH_REFCOUNT; else if (strcasecmp(s, "with_flags")==0) flags|=TYPEMAKER2_FLAGS_WITH_FLAGS; else if (strcasecmp(s, "assign")==0) flags|=TYPEMAKER2_FLAGS_ASSIGN; else if (strcasecmp(s, "omit")==0) flags|=TYPEMAKER2_FLAGS_OMIT; else if (strcasecmp(s, "with_signals")==0) flags|=TYPEMAKER2_FLAGS_WITH_SIGNALS; else if (strcasecmp(s, "with_slots")==0) flags|=TYPEMAKER2_FLAGS_WITH_SLOTS; else if (strcasecmp(s, "with_cachefns")==0) flags|=TYPEMAKER2_FLAGS_WITH_CACHEFNS; else if (strcasecmp(s, "sortByMember")==0) flags|=TYPEMAKER2_FLAGS_SORTBYMEMBER; else if (strcasecmp(s, "noConstObject")==0) flags|=TYPEMAKER2_FLAGS_NOCONSTOBJECT; else if (strcasecmp(s, "none")==0) flags|=TYPEMAKER2_FLAGS_NONE; se=GWEN_StringListEntry_Next(se); } GWEN_StringList_free(sl); } return flags; } int Typemaker2_AccessFromString(const char *s) { assert(s); if (strcasecmp(s, "pub")==0 || strcasecmp(s, "public")==0) return TypeMaker2_Access_Public; else if (strcasecmp(s, "library")==0 || strcasecmp(s, "lib")==0) return TypeMaker2_Access_Library; else if (strcasecmp(s, "protected")==0 || strcasecmp(s, "prot")==0) return TypeMaker2_Access_Protected; else if (strcasecmp(s, "private")==0 || strcasecmp(s, "priv")==0) return TypeMaker2_Access_Private; return TypeMaker2_Access_Unknown; } gwenhywfar-4.15.2beta/tools/typemaker2/tm_builder.c0000644000175000017500000010606212364015347017270 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_builder_p.h" #include "tm_member.h" #include #include #include #include #include #include GWEN_INHERIT_FUNCTIONS(TYPEMAKER2_BUILDER) TYPEMAKER2_BUILDER *Typemaker2_Builder_new() { TYPEMAKER2_BUILDER *tb; GWEN_NEW_OBJECT(TYPEMAKER2_BUILDER, tb); GWEN_INHERIT_INIT(TYPEMAKER2_BUILDER, tb); tb->declarationsPublic=GWEN_StringList_new(); tb->declarationsLibrary=GWEN_StringList_new(); tb->declarationsProtected=GWEN_StringList_new(); tb->declarationsPrivate=GWEN_StringList_new(); tb->code=GWEN_StringList_new(); return tb; } void Typemaker2_Builder_free(TYPEMAKER2_BUILDER *tb) { if (tb) { GWEN_INHERIT_FINI(TYPEMAKER2_BUILDER, tb); GWEN_StringList_free(tb->declarationsPublic); GWEN_StringList_free(tb->declarationsLibrary); GWEN_StringList_free(tb->declarationsProtected); GWEN_StringList_free(tb->declarationsPrivate); GWEN_StringList_free(tb->code); free(tb->fileNamePublic); free(tb->fileNameLibrary); free(tb->fileNameProtected); free(tb->fileNamePrivate); free(tb->fileNameCode); free(tb->destFolder); GWEN_FREE_OBJECT(tb); } } GWEN_STRINGLIST *Typemaker2_Builder_GetPublicDeclarations(const TYPEMAKER2_BUILDER *tb) { assert(tb); return tb->declarationsPublic; } GWEN_STRINGLIST *Typemaker2_Builder_GetLibraryDeclarations(const TYPEMAKER2_BUILDER *tb) { assert(tb); return tb->declarationsLibrary; } GWEN_STRINGLIST *Typemaker2_Builder_GetProtectedDeclarations(const TYPEMAKER2_BUILDER *tb) { assert(tb); return tb->declarationsProtected; } GWEN_STRINGLIST *Typemaker2_Builder_GetPrivateDeclarations(const TYPEMAKER2_BUILDER *tb) { assert(tb); return tb->declarationsPrivate; } GWEN_STRINGLIST *Typemaker2_Builder_GetCode(const TYPEMAKER2_BUILDER *tb) { assert(tb); return tb->code; } TYPEMAKER2_TYPEMANAGER *Typemaker2_Builder_GetTypeManager(const TYPEMAKER2_BUILDER *tb) { assert(tb); return tb->typeManager; } void Typemaker2_Builder_SetTypeManager(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPEMANAGER *tm) { assert(tb); tb->typeManager=tm; } void Typemaker2_Builder_AddPublicDeclaration(TYPEMAKER2_BUILDER *tb, const char *s) { assert(tb); GWEN_StringList_AppendString(tb->declarationsPublic, s, 0, 0); } void Typemaker2_Builder_AddLibraryDeclaration(TYPEMAKER2_BUILDER *tb, const char *s) { assert(tb); GWEN_StringList_AppendString(tb->declarationsLibrary, s, 0, 0); } void Typemaker2_Builder_AddProtectedDeclaration(TYPEMAKER2_BUILDER *tb, const char *s) { assert(tb); GWEN_StringList_AppendString(tb->declarationsProtected, s, 0, 0); } void Typemaker2_Builder_AddPrivateDeclaration(TYPEMAKER2_BUILDER *tb, const char *s) { assert(tb); GWEN_StringList_AppendString(tb->declarationsPrivate, s, 0, 0); } void Typemaker2_Builder_AddCode(TYPEMAKER2_BUILDER *tb, const char *s) { assert(tb); GWEN_StringList_AppendString(tb->code, s, 0, 0); } const char *Typemaker2_Builder_GetFileNamePublic(const TYPEMAKER2_BUILDER *tb) { assert(tb); return tb->fileNamePublic; } void Typemaker2_Builder_SetFileNamePublic(TYPEMAKER2_BUILDER *tb, const char *s) { assert(tb); free(tb->fileNamePublic); if (s) tb->fileNamePublic=strdup(s); else tb->fileNamePublic=NULL; } const char *Typemaker2_Builder_GetFileNameLibrary(const TYPEMAKER2_BUILDER *tb) { assert(tb); return tb->fileNameLibrary; } void Typemaker2_Builder_SetFileNameLibrary(TYPEMAKER2_BUILDER *tb, const char *s) { assert(tb); free(tb->fileNameLibrary); if (s) tb->fileNameLibrary=strdup(s); else tb->fileNameLibrary=NULL; } const char *Typemaker2_Builder_GetFileNameProtected(const TYPEMAKER2_BUILDER *tb) { assert(tb); return tb->fileNameProtected; } void Typemaker2_Builder_SetFileNameProtected(TYPEMAKER2_BUILDER *tb, const char *s) { assert(tb); free(tb->fileNameProtected); if (s) tb->fileNameProtected=strdup(s); else tb->fileNameProtected=NULL; } const char *Typemaker2_Builder_GetFileNamePrivate(const TYPEMAKER2_BUILDER *tb) { assert(tb); return tb->fileNamePrivate; } void Typemaker2_Builder_SetFileNamePrivate(TYPEMAKER2_BUILDER *tb, const char *s) { assert(tb); free(tb->fileNamePrivate); if (s) tb->fileNamePrivate=strdup(s); else tb->fileNamePrivate=NULL; } const char *Typemaker2_Builder_GetFileNameCode(const TYPEMAKER2_BUILDER *tb) { assert(tb); return tb->fileNameCode; } void Typemaker2_Builder_SetFileNameCode(TYPEMAKER2_BUILDER *tb, const char *s) { assert(tb); free(tb->fileNameCode); if (s) tb->fileNameCode=strdup(s); else tb->fileNameCode=NULL; } const char *Typemaker2_Builder_GetSourceFileName(const TYPEMAKER2_BUILDER *tb) { assert(tb); return tb->sourceFileName; } void Typemaker2_Builder_SetSourceFileName(TYPEMAKER2_BUILDER *tb, const char *s) { assert(tb); free(tb->sourceFileName); if (s) tb->sourceFileName=strdup(s); else tb->sourceFileName=NULL; } const char *Typemaker2_Builder_GetDestFolderName(const TYPEMAKER2_BUILDER *tb) { assert(tb); return tb->destFolder; } void Typemaker2_Builder_SetDestFolderName(TYPEMAKER2_BUILDER *tb, const char *s) { assert(tb); free(tb->destFolder); if (s) tb->destFolder=strdup(s); else tb->destFolder=NULL; } void Typemaker2_Builder_SetBuildFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_BUILDER_BUILD_FN fn) { assert(tb); tb->buildFn=fn; } int Typemaker2_Builder_Build(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { assert(tb); if (tb->buildFn) return tb->buildFn(tb, ty); else return GWEN_ERROR_NOT_SUPPORTED; } GWEN_DB_NODE *Typemaker2_Builder_CreateDbForCall(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst) { GWEN_DB_NODE *db; const char *s; db=GWEN_DB_Group_new("vars"); if (tb->typeManager) { s=Typemaker2_TypeManager_GetApiDeclaration(tb->typeManager); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "api", s); else GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "", s); } /* set some type vars */ if (ty) { TYPEMAKER2_TYPE *bty; s=Typemaker2_Type_GetIdentifier(ty); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "struct_type", s); s=Typemaker2_Type_GetPrefix(ty); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "struct_prefix", s); bty=Typemaker2_Type_GetBaseTypePtr(ty); if (bty) { s=Typemaker2_Type_GetIdentifier(bty); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "basetype_type", s); s=Typemaker2_Type_GetPrefix(bty); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "basetype_prefix", s); } } /* set some member vars */ if (tm) { char numbuf[32]; TYPEMAKER2_TYPE *mty; s=Typemaker2_Member_GetName(tm); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "name", s); s=Typemaker2_Member_GetDefaultValue(tm); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "default", s); s=Typemaker2_Member_GetPresetValue(tm); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "preset", s); if (!(Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_VOLATILE)) { /* set field number for toObject/fromObject */ s=Typemaker2_Member_GetFieldId(tm); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "fieldid", s); } /* maxlen */ snprintf(numbuf, sizeof(numbuf)-1, "%d", Typemaker2_Member_GetMaxLen(tm)); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "maxlen", numbuf); /* set basetype stuff */ mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); if (mty) { TYPEMAKER2_TYPE *bty; s=Typemaker2_Type_GetIdentifier(mty); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "member_type", s); s=Typemaker2_Type_GetPrefix(mty); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "member_prefix", s); bty=Typemaker2_Type_GetBaseTypePtr(mty); if (bty) { s=Typemaker2_Type_GetIdentifier(bty); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "member_basetype_type", s); s=Typemaker2_Type_GetPrefix(bty); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "member_basetype_prefix", s); } } /* set enum-specific stuff */ if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_ENUM) { TYPEMAKER2_ENUM *te; te=Typemaker2_Member_GetEnumPtr(tm); if (te) { s=Typemaker2_Enum_GetFromStringFn(te); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "enum_fromstring_fn", s); s=Typemaker2_Enum_GetToStringFn(te); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "enum_tostring_fn", s); } } } /* set src and dst */ if (src && *src) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "src", src); if (dst && *dst) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "dst", dst); /* set some fixed vars */ GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "retval", "p_rv"); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "db", "p_db"); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "buffer", "p_buffer"); return db; } int Typemaker2_Builder_ReplaceVars(const char *s, GWEN_DB_NODE *db, GWEN_BUFFER *dbuf) { const char *p; p=s; while(*p) { if (*p=='$') { p++; if (*p=='$') GWEN_Buffer_AppendByte(dbuf, '$'); else if (*p=='(') { const char *pStart; p++; pStart=p; while(*p && *p!=')') p++; if (*p!=')') { DBG_ERROR(GWEN_LOGDOMAIN, "Unterminated variable name in code"); return GWEN_ERROR_BAD_DATA; } else { int len; char *name; const char *v; len=p-pStart; if (len<1) { DBG_ERROR(GWEN_LOGDOMAIN, "Empty variable name in code"); return GWEN_ERROR_BAD_DATA; } name=(char*) malloc(len+1); assert(name); memmove(name, pStart, len); name[len]=0; v=GWEN_DB_GetCharValue(db, name, 0, NULL); if (v) { free(name); GWEN_Buffer_AppendString(dbuf, v); } else { GWEN_Buffer_AppendString(dbuf, " [__VALUE OF "); GWEN_Buffer_AppendString(dbuf, name); GWEN_Buffer_AppendString(dbuf, " WAS NOT SET__] "); free(name); } } } else { DBG_ERROR(GWEN_LOGDOMAIN, "Bad variable string in code"); return GWEN_ERROR_BAD_DATA; } p++; } else { if (*p=='#') { /* let # lines begin on a new line */ GWEN_Buffer_AppendByte(dbuf, '\n'); GWEN_Buffer_AppendByte(dbuf, *p); /* skip introducing cross and copy all stuff until the next cross * upon which wa inject a newline (to make the preprocessor happy) */ p++; while(*p && *p!='#') { GWEN_Buffer_AppendByte(dbuf, *p); p++; } if (*p=='#') { GWEN_Buffer_AppendByte(dbuf, '\n'); p++; } } else { GWEN_Buffer_AppendByte(dbuf, *p); p++; } } } return 0; } #define INVOKE_FN(macro_var1) \ int Typemaker2_Builder_Invoke_##macro_var1##Fn(TYPEMAKER2_BUILDER *tb, \ TYPEMAKER2_TYPE *ty, \ TYPEMAKER2_MEMBER *tm, \ const char *src, \ const char *dst, \ GWEN_BUFFER *dbuf) { \ if (tm) { \ TYPEMAKER2_TYPE *mty; \ TYPEMAKER2_CODE *tc; \ const char *s=NULL; \ \ mty=Typemaker2_Member_GetTypePtr(tm); \ if (mty==NULL) { \ DBG_ERROR(GWEN_LOGDOMAIN, "No type pointer for member"); \ return GWEN_ERROR_NO_DATA; \ } \ tc=Typemaker2_Type_FindCodeForMember(mty, tm, __STRING(macro_var1));\ if (tc) \ s=Typemaker2_Code_GetCode(tc); \ if (s && *s) { \ GWEN_DB_NODE *db; \ int rv; \ \ db=Typemaker2_Builder_CreateDbForCall(tb, ty, tm, src, dst); \ if (db==NULL) { \ DBG_INFO(GWEN_LOGDOMAIN, "here"); \ return GWEN_ERROR_BAD_DATA; \ } \ \ if (0) { \ GWEN_Buffer_AppendString(dbuf, "/* function \""); \ GWEN_Buffer_AppendString(dbuf, __STRING(macro_var1)); \ GWEN_Buffer_AppendString(dbuf, "\" of type \""); \ GWEN_Buffer_AppendString(dbuf, Typemaker2_Type_GetName(mty)); \ GWEN_Buffer_AppendString(dbuf, "\" */\n"); \ } \ rv=Typemaker2_Builder_ReplaceVars(s, db, dbuf); \ GWEN_DB_Group_free(db); \ if (rv<0) { \ DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); \ return rv; \ } \ return 0; \ } \ else { \ DBG_INFO(GWEN_LOGDOMAIN, "No code for type [%s]", \ Typemaker2_Type_GetName(mty)); \ return 0; \ } \ } \ else { \ DBG_ERROR(GWEN_LOGDOMAIN, "No member information"); \ return GWEN_ERROR_NO_DATA; \ } \ } INVOKE_FN(Construct); INVOKE_FN(Destruct); INVOKE_FN(Assign); INVOKE_FN(Dup); INVOKE_FN(Compare); INVOKE_FN(ToDb); INVOKE_FN(FromDb); INVOKE_FN(ToXml); INVOKE_FN(FromXml); INVOKE_FN(ToObject); INVOKE_FN(FromObject); INVOKE_FN(ToHashString); int Typemaker2_Builder_WriteFile(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName, GWEN_STRINGLIST *sl, int acc) { GWEN_STRINGLISTENTRY *se; FILE *f; f=fopen(fileName, "w"); if (f==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s): %s (%d)", fileName, strerror(errno), errno); return GWEN_ERROR_IO; } fprintf(f, "/**********************************************************\n" " * This file has been automatically created by \"typemaker2\"\n" " * from the file \"%s\".\n" " * Please do not edit this file, all changes will be lost.\n" " * Better edit the mentioned source file instead.\n" " **********************************************************/\n" "\n", Typemaker2_Builder_GetSourceFileName(tb)); if (acc==TypeMaker2_Access_Unknown) { const char *s; TYPEMAKER2_HEADER_LIST *hl; fprintf(f, "#ifdef HAVE_CONFIG_H\n# include \n#endif\n\n"); s=tb->fileNamePrivate; if (s==NULL) s=tb->fileNameLibrary; if (s==NULL) s=tb->fileNameProtected; if (s==NULL) s=tb->fileNamePublic; if (s) { fprintf(f, "#include \"%s\"\n\n", s); } /* add some needed headers */ fprintf(f, "#include \n"); fprintf(f, "#include \n"); /* write code headers */ fprintf(f, "\n"); fprintf(f, "/* code headers */\n"); hl=Typemaker2_Type_GetHeaders(ty); if (hl) { TYPEMAKER2_HEADER *h; h=Typemaker2_Header_List_First(hl); while(h) { if (Typemaker2_Header_GetLocation(h)==Typemaker2_HeaderLocation_Code) { if (Typemaker2_Header_GetType(h)==Typemaker2_HeaderType_System) fprintf(f, "#include <%s>\n", Typemaker2_Header_GetFileName(h)); else fprintf(f, "#include \"%s\"\n", Typemaker2_Header_GetFileName(h)); } h=Typemaker2_Header_List_Next(h); } } fprintf(f, "\n"); } else { GWEN_BUFFER *xbuf; char *p; const char *s; xbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(xbuf, fileName); p=GWEN_Buffer_GetStart(xbuf); while(*p) { if (*p=='.') *p='_'; else *p=toupper(*p); p++; } fprintf(f, "#ifndef %s\n", GWEN_Buffer_GetStart(xbuf)); fprintf(f, "#define %s\n\n", GWEN_Buffer_GetStart(xbuf)); s=NULL; switch(acc) { case TypeMaker2_Access_Unknown: s=tb->fileNamePrivate; if (s) break; case TypeMaker2_Access_Private: s=tb->fileNameLibrary; if (s) break; case TypeMaker2_Access_Library: s=tb->fileNameProtected; if (s) break; case TypeMaker2_Access_Protected: s=tb->fileNamePublic; if (s) break; default: break; } if (s) { fprintf(f, "#include \"%s\"\n\n", s); } fprintf(f, "\n"); fprintf(f, "#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n"); GWEN_Buffer_free(xbuf); } se=GWEN_StringList_FirstEntry(sl); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s) fprintf(f, "%s\n", s); se=GWEN_StringListEntry_Next(se); } if (acc==TypeMaker2_Access_Unknown) { TYPEMAKER2_HEADER_LIST *hl; /* write codeEnd headers */ fprintf(f, "\n"); fprintf(f, "/* code headers */\n"); hl=Typemaker2_Type_GetHeaders(ty); if (hl) { TYPEMAKER2_HEADER *h; h=Typemaker2_Header_List_First(hl); while(h) { if (Typemaker2_Header_GetLocation(h)==Typemaker2_HeaderLocation_CodeEnd) { if (Typemaker2_Header_GetType(h)==Typemaker2_HeaderType_System) fprintf(f, "#include <%s>\n", Typemaker2_Header_GetFileName(h)); else fprintf(f, "#include \"%s\"\n", Typemaker2_Header_GetFileName(h)); } h=Typemaker2_Header_List_Next(h); } } fprintf(f, "\n"); } if (acc!=TypeMaker2_Access_Unknown) { fprintf(f, "#ifdef __cplusplus\n}\n#endif\n\n"); fprintf(f, "#endif\n\n"); } if (fclose(f)) { DBG_ERROR(GWEN_LOGDOMAIN, "fclose(%s): %s (%d)", fileName, strerror(errno), errno); return GWEN_ERROR_IO; } return 0; } int Typemaker2_Builder_WriteTypedefFile(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName) { FILE *f; f=fopen(fileName, "w"); if (f==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s): %s (%d)", fileName, strerror(errno), errno); return GWEN_ERROR_IO; } fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, " \n", Typemaker2_Type_GetName(ty)); fprintf(f, " %s\n", Typemaker2_Type_GetName(ty)); fprintf(f, " %s\n", Typemaker2_Type_GetPrefix(ty)); fprintf(f, " \n"); fprintf(f, "\n"); if (fclose(f)) { DBG_ERROR(GWEN_LOGDOMAIN, "fclose(%s): %s (%d)", fileName, strerror(errno), errno); return GWEN_ERROR_IO; } return 0; } int Typemaker2_Builder_WriteTypedefFile_List1(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName) { FILE *f; f=fopen(fileName, "w"); if (f==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s): %s (%d)", fileName, strerror(errno), errno); return GWEN_ERROR_IO; } fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, " \n", Typemaker2_Type_GetName(ty), Typemaker2_Type_GetName(ty)); fprintf(f, " %s_LIST\n", Typemaker2_Type_GetName(ty)); fprintf(f, " %s_List\n", Typemaker2_Type_GetPrefix(ty)); fprintf(f, " \n"); fprintf(f, "\n"); if (fclose(f)) { DBG_ERROR(GWEN_LOGDOMAIN, "fclose(%s): %s (%d)", fileName, strerror(errno), errno); return GWEN_ERROR_IO; } return 0; } int Typemaker2_Builder_WriteTypedefFile_List2(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName) { FILE *f; f=fopen(fileName, "w"); if (f==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s): %s (%d)", fileName, strerror(errno), errno); return GWEN_ERROR_IO; } fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, " \n", Typemaker2_Type_GetName(ty), Typemaker2_Type_GetName(ty)); fprintf(f, " %s_LIST2\n", Typemaker2_Type_GetName(ty)); fprintf(f, " %s_List2\n", Typemaker2_Type_GetPrefix(ty)); fprintf(f, " \n"); fprintf(f, "\n"); if (fclose(f)) { DBG_ERROR(GWEN_LOGDOMAIN, "fclose(%s): %s (%d)", fileName, strerror(errno), errno); return GWEN_ERROR_IO; } return 0; } int Typemaker2_Builder_WriteTypedefFile_Tree(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName) { FILE *f; f=fopen(fileName, "w"); if (f==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s): %s (%d)", fileName, strerror(errno), errno); return GWEN_ERROR_IO; } fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, " \n", Typemaker2_Type_GetName(ty), Typemaker2_Type_GetName(ty)); fprintf(f, " %s_TREE\n", Typemaker2_Type_GetName(ty)); fprintf(f, " %s_Tree\n", Typemaker2_Type_GetPrefix(ty)); fprintf(f, " \n"); fprintf(f, "\n"); if (fclose(f)) { DBG_ERROR(GWEN_LOGDOMAIN, "fclose(%s): %s (%d)", fileName, strerror(errno), errno); return GWEN_ERROR_IO; } return 0; } int Typemaker2_Builder_WriteTypedefFile_IdMap(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName) { FILE *f; f=fopen(fileName, "w"); if (f==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s): %s (%d)", fileName, strerror(errno), errno); return GWEN_ERROR_IO; } fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, " \n", Typemaker2_Type_GetName(ty), Typemaker2_Type_GetName(ty)); fprintf(f, " %s_IDMAP\n", Typemaker2_Type_GetName(ty)); fprintf(f, " %s_IdMap\n", Typemaker2_Type_GetPrefix(ty)); fprintf(f, " \n"); fprintf(f, "\n"); if (fclose(f)) { DBG_ERROR(GWEN_LOGDOMAIN, "fclose(%s): %s (%d)", fileName, strerror(errno), errno); return GWEN_ERROR_IO; } return 0; } int Typemaker2_Builder_DetermineOutFileNames(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { const char *fname; if (GWEN_StringList_Count(tb->declarationsPublic)) { fname=tb->fileNamePublic; if (fname==NULL || *fname==0) { const char *s; char *t; GWEN_BUFFER *tbuf; s=Typemaker2_Type_GetBaseFileName(ty); if (s==NULL || *s==0) { s=Typemaker2_Type_GetName(ty); if (s==NULL || *s==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name"); return GWEN_ERROR_BAD_DATA; } } tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (tb->destFolder) { GWEN_Buffer_AppendString(tbuf, tb->destFolder); GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(tbuf, s); t=GWEN_Buffer_GetStart(tbuf); while(*t) { *t=tolower(*t); t++; } GWEN_Buffer_AppendString(tbuf, ".h"); fname=GWEN_Buffer_GetStart(tbuf); Typemaker2_Builder_SetFileNamePublic(tb, fname); GWEN_Buffer_free(tbuf); } } if (GWEN_StringList_Count(tb->declarationsLibrary)) { fname=tb->fileNameLibrary; if (fname==NULL || *fname==0) { const char *s; char *t; GWEN_BUFFER *tbuf; s=Typemaker2_Type_GetBaseFileName(ty); if (s==NULL || *s==0) { s=Typemaker2_Type_GetName(ty); if (s==NULL || *s==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name"); return GWEN_ERROR_BAD_DATA; } } tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (tb->destFolder) { GWEN_Buffer_AppendString(tbuf, tb->destFolder); GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(tbuf, s); t=GWEN_Buffer_GetStart(tbuf); while(*t) { *t=tolower(*t); t++; } GWEN_Buffer_AppendString(tbuf, "_l.h"); fname=GWEN_Buffer_GetStart(tbuf); Typemaker2_Builder_SetFileNameLibrary(tb, fname); GWEN_Buffer_free(tbuf); } } if (GWEN_StringList_Count(tb->declarationsProtected)) { fname=tb->fileNameProtected; if (fname==NULL || *fname==0) { const char *s; char *t; GWEN_BUFFER *tbuf; s=Typemaker2_Type_GetBaseFileName(ty); if (s==NULL || *s==0) { s=Typemaker2_Type_GetName(ty); if (s==NULL || *s==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name"); return GWEN_ERROR_BAD_DATA; } } tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (tb->destFolder) { GWEN_Buffer_AppendString(tbuf, tb->destFolder); GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(tbuf, s); t=GWEN_Buffer_GetStart(tbuf); while(*t) { *t=tolower(*t); t++; } GWEN_Buffer_AppendString(tbuf, "_be.h"); fname=GWEN_Buffer_GetStart(tbuf); Typemaker2_Builder_SetFileNameProtected(tb, fname); GWEN_Buffer_free(tbuf); } } if (GWEN_StringList_Count(tb->declarationsPrivate)) { fname=tb->fileNamePrivate; if (fname==NULL || *fname==0) { const char *s; char *t; GWEN_BUFFER *tbuf; s=Typemaker2_Type_GetBaseFileName(ty); if (s==NULL || *s==0) { s=Typemaker2_Type_GetName(ty); if (s==NULL || *s==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name"); return GWEN_ERROR_BAD_DATA; } } tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (tb->destFolder) { GWEN_Buffer_AppendString(tbuf, tb->destFolder); GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(tbuf, s); t=GWEN_Buffer_GetStart(tbuf); while(*t) { *t=tolower(*t); t++; } GWEN_Buffer_AppendString(tbuf, "_p.h"); fname=GWEN_Buffer_GetStart(tbuf); Typemaker2_Builder_SetFileNamePrivate(tb, fname); GWEN_Buffer_free(tbuf); } } if (GWEN_StringList_Count(tb->code)) { fname=tb->fileNameCode; if (fname==NULL || *fname==0) { const char *s; char *t; GWEN_BUFFER *tbuf; s=Typemaker2_Type_GetBaseFileName(ty); if (s==NULL || *s==0) { s=Typemaker2_Type_GetName(ty); if (s==NULL || *s==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name"); return GWEN_ERROR_BAD_DATA; } } tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (tb->destFolder) { GWEN_Buffer_AppendString(tbuf, tb->destFolder); GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(tbuf, s); t=GWEN_Buffer_GetStart(tbuf); while(*t) { *t=tolower(*t); t++; } GWEN_Buffer_AppendString(tbuf, ".c"); fname=GWEN_Buffer_GetStart(tbuf); Typemaker2_Builder_SetFileNameCode(tb, fname); GWEN_Buffer_free(tbuf); } } return 0; } int Typemaker2_Builder_WriteFiles(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, int defsOnly) { const char *fname; int rv; rv=Typemaker2_Builder_DetermineOutFileNames(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } if (defsOnly) { if (GWEN_StringList_Count(tb->declarationsPublic)) { fname=tb->fileNamePublic; assert(fname); rv=Typemaker2_Builder_WriteFile(tb, ty, fname, tb->declarationsPublic, TypeMaker2_Access_Public); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } if (GWEN_StringList_Count(tb->declarationsLibrary)) { fname=tb->fileNameLibrary; assert(fname); rv=Typemaker2_Builder_WriteFile(tb, ty, fname, tb->declarationsLibrary, TypeMaker2_Access_Library); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } if (GWEN_StringList_Count(tb->declarationsProtected)) { fname=tb->fileNameProtected; assert(fname); rv=Typemaker2_Builder_WriteFile(tb, ty, fname, tb->declarationsProtected, TypeMaker2_Access_Protected); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } if (GWEN_StringList_Count(tb->declarationsPrivate)) { fname=tb->fileNamePrivate; assert(fname); rv=Typemaker2_Builder_WriteFile(tb, ty, fname, tb->declarationsPrivate, TypeMaker2_Access_Private); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } if (GWEN_StringList_Count(tb->code)) { fname=tb->fileNameCode; assert(fname); rv=Typemaker2_Builder_WriteFile(tb, ty, fname, tb->code, TypeMaker2_Access_Unknown); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } } /* write typedef file */ if (1) { const char *s; char *t; GWEN_BUFFER *tbuf; s=Typemaker2_Type_GetName(ty); if (s==NULL || *s==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name"); return GWEN_ERROR_BAD_DATA; } tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (tb->destFolder) { GWEN_Buffer_AppendString(tbuf, tb->destFolder); GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(tbuf, s); t=GWEN_Buffer_GetStart(tbuf); while(*t) { *t=tolower(*t); t++; } GWEN_Buffer_AppendString(tbuf, ".tm2"); fname=GWEN_Buffer_GetStart(tbuf); rv=Typemaker2_Builder_WriteTypedefFile(tb, ty, fname); GWEN_Buffer_free(tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } /* write typedef file for list1 */ if (Typemaker2_Type_GetFlags(ty) & TYPEMAKER2_FLAGS_WITH_LIST1) { const char *s; char *t; GWEN_BUFFER *tbuf; s=Typemaker2_Type_GetName(ty); if (s==NULL || *s==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name"); return GWEN_ERROR_BAD_DATA; } tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (tb->destFolder) { GWEN_Buffer_AppendString(tbuf, tb->destFolder); GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(tbuf, s); t=GWEN_Buffer_GetStart(tbuf); while(*t) { *t=tolower(*t); t++; } GWEN_Buffer_AppendString(tbuf, "_list.tm2"); fname=GWEN_Buffer_GetStart(tbuf); rv=Typemaker2_Builder_WriteTypedefFile_List1(tb, ty, fname); GWEN_Buffer_free(tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } /* write typedef file for list2 */ if (Typemaker2_Type_GetFlags(ty) & TYPEMAKER2_FLAGS_WITH_LIST2) { const char *s; char *t; GWEN_BUFFER *tbuf; s=Typemaker2_Type_GetName(ty); if (s==NULL || *s==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name"); return GWEN_ERROR_BAD_DATA; } tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (tb->destFolder) { GWEN_Buffer_AppendString(tbuf, tb->destFolder); GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(tbuf, s); t=GWEN_Buffer_GetStart(tbuf); while(*t) { *t=tolower(*t); t++; } GWEN_Buffer_AppendString(tbuf, "_list2.tm2"); fname=GWEN_Buffer_GetStart(tbuf); rv=Typemaker2_Builder_WriteTypedefFile_List2(tb, ty, fname); GWEN_Buffer_free(tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } /* write typedef file for tree */ if (Typemaker2_Type_GetFlags(ty) & TYPEMAKER2_FLAGS_WITH_TREE) { const char *s; char *t; GWEN_BUFFER *tbuf; s=Typemaker2_Type_GetName(ty); if (s==NULL || *s==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name"); return GWEN_ERROR_BAD_DATA; } tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (tb->destFolder) { GWEN_Buffer_AppendString(tbuf, tb->destFolder); GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(tbuf, s); t=GWEN_Buffer_GetStart(tbuf); while(*t) { *t=tolower(*t); t++; } GWEN_Buffer_AppendString(tbuf, "_tree.tm2"); fname=GWEN_Buffer_GetStart(tbuf); rv=Typemaker2_Builder_WriteTypedefFile_Tree(tb, ty, fname); GWEN_Buffer_free(tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } /* write typedef file for idmap */ if (Typemaker2_Type_GetFlags(ty) & TYPEMAKER2_FLAGS_WITH_IDMAP) { const char *s; char *t; GWEN_BUFFER *tbuf; s=Typemaker2_Type_GetName(ty); if (s==NULL || *s==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name"); return GWEN_ERROR_BAD_DATA; } tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (tb->destFolder) { GWEN_Buffer_AppendString(tbuf, tb->destFolder); GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(tbuf, s); t=GWEN_Buffer_GetStart(tbuf); while(*t) { *t=tolower(*t); t++; } GWEN_Buffer_AppendString(tbuf, "_idmap.tm2"); fname=GWEN_Buffer_GetStart(tbuf); rv=Typemaker2_Builder_WriteTypedefFile_IdMap(tb, ty, fname); GWEN_Buffer_free(tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } return 0; } gwenhywfar-4.15.2beta/tools/typemaker2/tm_enum.c0000644000175000017500000002172112364015347016604 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_enum.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_enum_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(TYPEMAKER2_ENUM, Typemaker2_Enum) TYPEMAKER2_ENUM *Typemaker2_Enum_new(void) { TYPEMAKER2_ENUM *p_struct; GWEN_NEW_OBJECT(TYPEMAKER2_ENUM, p_struct) GWEN_LIST_INIT(TYPEMAKER2_ENUM, p_struct) /* members */ p_struct->id=NULL; p_struct->prefix=NULL; p_struct->type=NULL; p_struct->items=Typemaker2_Item_List_new(); p_struct->toStringFn=NULL; p_struct->fromStringFn=NULL; /* virtual functions */ return p_struct; } void Typemaker2_Enum_free(TYPEMAKER2_ENUM *p_struct) { if (p_struct) { GWEN_LIST_FINI(TYPEMAKER2_ENUM, p_struct) /* members */ free(p_struct->id); free(p_struct->prefix); free(p_struct->type); Typemaker2_Item_List_free(p_struct->items); free(p_struct->toStringFn); free(p_struct->fromStringFn); GWEN_FREE_OBJECT(p_struct); } } TYPEMAKER2_ENUM *Typemaker2_Enum_dup(const TYPEMAKER2_ENUM *p_src) { TYPEMAKER2_ENUM *p_struct; assert(p_src); p_struct=Typemaker2_Enum_new(); /* member "id" */ if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; } if (p_src->id) { p_struct->id=strdup(p_src->id); } /* member "prefix" */ if (p_struct->prefix) { free(p_struct->prefix); p_struct->prefix=NULL; } if (p_src->prefix) { p_struct->prefix=strdup(p_src->prefix); } /* member "type" */ if (p_struct->type) { free(p_struct->type); p_struct->type=NULL; } if (p_src->type) { p_struct->type=strdup(p_src->type); } /* member "items" */ if (p_struct->items) { Typemaker2_Item_List_free(p_struct->items); p_struct->items=NULL; } if (p_src->items) { p_struct->items=Typemaker2_Item_List_dup(p_src->items); } /* member "toStringFn" */ if (p_struct->toStringFn) { free(p_struct->toStringFn); p_struct->toStringFn=NULL; } if (p_src->toStringFn) { p_struct->toStringFn=strdup(p_src->toStringFn); } /* member "fromStringFn" */ if (p_struct->fromStringFn) { free(p_struct->fromStringFn); p_struct->fromStringFn=NULL; } if (p_src->fromStringFn) { p_struct->fromStringFn=strdup(p_src->fromStringFn); } return p_struct; } TYPEMAKER2_ENUM *Typemaker2_Enum_copy(TYPEMAKER2_ENUM *p_struct, const TYPEMAKER2_ENUM *p_src) { assert(p_struct); assert(p_src); /* member "id" */ if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; } if (p_src->id) { p_struct->id=strdup(p_src->id); } /* member "prefix" */ if (p_struct->prefix) { free(p_struct->prefix); p_struct->prefix=NULL; } if (p_src->prefix) { p_struct->prefix=strdup(p_src->prefix); } /* member "type" */ if (p_struct->type) { free(p_struct->type); p_struct->type=NULL; } if (p_src->type) { p_struct->type=strdup(p_src->type); } /* member "items" */ if (p_struct->items) { Typemaker2_Item_List_free(p_struct->items); p_struct->items=NULL; } if (p_src->items) { p_struct->items=Typemaker2_Item_List_dup(p_src->items); } /* member "toStringFn" */ if (p_struct->toStringFn) { free(p_struct->toStringFn); p_struct->toStringFn=NULL; } if (p_src->toStringFn) { p_struct->toStringFn=strdup(p_src->toStringFn); } /* member "fromStringFn" */ if (p_struct->fromStringFn) { free(p_struct->fromStringFn); p_struct->fromStringFn=NULL; } if (p_src->fromStringFn) { p_struct->fromStringFn=strdup(p_src->fromStringFn); } return p_struct; } const char *Typemaker2_Enum_GetId(const TYPEMAKER2_ENUM *p_struct) { assert(p_struct); return p_struct->id; } const char *Typemaker2_Enum_GetPrefix(const TYPEMAKER2_ENUM *p_struct) { assert(p_struct); return p_struct->prefix; } const char *Typemaker2_Enum_GetType(const TYPEMAKER2_ENUM *p_struct) { assert(p_struct); return p_struct->type; } TYPEMAKER2_ITEM_LIST *Typemaker2_Enum_GetItems(const TYPEMAKER2_ENUM *p_struct) { assert(p_struct); return p_struct->items; } const char *Typemaker2_Enum_GetToStringFn(const TYPEMAKER2_ENUM *p_struct) { assert(p_struct); return p_struct->toStringFn; } const char *Typemaker2_Enum_GetFromStringFn(const TYPEMAKER2_ENUM *p_struct) { assert(p_struct); return p_struct->fromStringFn; } void Typemaker2_Enum_SetId(TYPEMAKER2_ENUM *p_struct, const char *p_src) { assert(p_struct); if (p_struct->id) { free(p_struct->id); } if (p_src) { p_struct->id=strdup(p_src); } else { p_struct->id=NULL; } } void Typemaker2_Enum_SetPrefix(TYPEMAKER2_ENUM *p_struct, const char *p_src) { assert(p_struct); if (p_struct->prefix) { free(p_struct->prefix); } if (p_src) { p_struct->prefix=strdup(p_src); } else { p_struct->prefix=NULL; } } void Typemaker2_Enum_SetType(TYPEMAKER2_ENUM *p_struct, const char *p_src) { assert(p_struct); if (p_struct->type) { free(p_struct->type); } if (p_src) { p_struct->type=strdup(p_src); } else { p_struct->type=NULL; } } void Typemaker2_Enum_SetItems(TYPEMAKER2_ENUM *p_struct, const TYPEMAKER2_ITEM_LIST *p_src) { assert(p_struct); if (p_struct->items) { Typemaker2_Item_List_free(p_struct->items); } if (p_src) { p_struct->items=Typemaker2_Item_List_dup(p_src); } else { p_struct->items=Typemaker2_Item_List_new(); } } void Typemaker2_Enum_SetToStringFn(TYPEMAKER2_ENUM *p_struct, const char *p_src) { assert(p_struct); if (p_struct->toStringFn) { free(p_struct->toStringFn); } if (p_src) { p_struct->toStringFn=strdup(p_src); } else { p_struct->toStringFn=NULL; } } void Typemaker2_Enum_SetFromStringFn(TYPEMAKER2_ENUM *p_struct, const char *p_src) { assert(p_struct); if (p_struct->fromStringFn) { free(p_struct->fromStringFn); } if (p_src) { p_struct->fromStringFn=strdup(p_src); } else { p_struct->fromStringFn=NULL; } } TYPEMAKER2_ENUM_LIST *Typemaker2_Enum_List_dup(const TYPEMAKER2_ENUM_LIST *p_src) { TYPEMAKER2_ENUM_LIST *p_dest; TYPEMAKER2_ENUM *p_elem; assert(p_src); p_dest=Typemaker2_Enum_List_new(); p_elem=Typemaker2_Enum_List_First(p_src); while(p_elem) { TYPEMAKER2_ENUM *p_cpy; p_cpy=Typemaker2_Enum_dup(p_elem); Typemaker2_Enum_List_Add(p_cpy, p_dest); p_elem=Typemaker2_Enum_List_Next(p_elem); } return p_dest; } void Typemaker2_Enum_ReadXml(TYPEMAKER2_ENUM *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "id" */ if (p_struct->id) { free(p_struct->id); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "id", NULL); if (s) p_struct->id=strdup(s); } if (p_struct->id==NULL) { /* member "id" is volatile, just presetting */ p_struct->id=NULL; } /* member "prefix" */ if (p_struct->prefix) { free(p_struct->prefix); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "prefix", NULL); if (s) p_struct->prefix=strdup(s); } if (p_struct->prefix==NULL) { /* member "prefix" is volatile, just presetting */ p_struct->prefix=NULL; } /* member "type" */ if (p_struct->type) { free(p_struct->type); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "type", NULL); if (s) p_struct->type=strdup(s); } if (p_struct->type==NULL) { /* member "type" is volatile, just presetting */ p_struct->type=NULL; } /* member "items" */ if (p_struct->items) { Typemaker2_Item_List_free(p_struct->items); } /* member "items" is volatile, just presetting */ p_struct->items=Typemaker2_Item_List_new(); /* member "toStringFn" */ if (p_struct->toStringFn) { free(p_struct->toStringFn); } /* member "toStringFn" is volatile, just presetting */ p_struct->toStringFn=NULL; /* member "fromStringFn" */ if (p_struct->fromStringFn) { free(p_struct->fromStringFn); } /* member "fromStringFn" is volatile, just presetting */ p_struct->fromStringFn=NULL; } void Typemaker2_Enum_WriteXml(const TYPEMAKER2_ENUM *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "id" */ GWEN_XMLNode_SetProperty(p_db, "id", p_struct->id); /* member "prefix" */ GWEN_XMLNode_SetProperty(p_db, "prefix", p_struct->prefix); /* member "type" */ GWEN_XMLNode_SetProperty(p_db, "type", p_struct->type); /* member "items" is volatile, not writing to xml */ /* member "toStringFn" is volatile, not writing to xml */ /* member "fromStringFn" is volatile, not writing to xml */ } void Typemaker2_Enum_toXml(const TYPEMAKER2_ENUM *p_struct, GWEN_XMLNODE *p_db) { Typemaker2_Enum_WriteXml(p_struct, p_db); } TYPEMAKER2_ENUM *Typemaker2_Enum_fromXml(GWEN_XMLNODE *p_db) { TYPEMAKER2_ENUM *p_struct; p_struct=Typemaker2_Enum_new(); Typemaker2_Enum_ReadXml(p_struct, p_db); return p_struct; } /* code headers */ gwenhywfar-4.15.2beta/tools/typemaker2/tm_enum.h0000644000175000017500000000607212364015347016613 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_enum.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef TM_ENUM_H #define TM_ENUM_H #ifdef __cplusplus extern "C" { #endif /* needed system headers */ #include #include #include /* pre-headers */ #include "tm_item.h" typedef struct TYPEMAKER2_ENUM TYPEMAKER2_ENUM; GWEN_LIST_FUNCTION_DEFS(TYPEMAKER2_ENUM, Typemaker2_Enum) /* post-headers */ /** Constructor. */ TYPEMAKER2_ENUM *Typemaker2_Enum_new(void); /** Destructor. */ void Typemaker2_Enum_free(TYPEMAKER2_ENUM *p_struct); TYPEMAKER2_ENUM *Typemaker2_Enum_dup(const TYPEMAKER2_ENUM *p_struct); TYPEMAKER2_ENUM *Typemaker2_Enum_copy(TYPEMAKER2_ENUM *p_struct, const TYPEMAKER2_ENUM *p_src); /** Getter. * Use this function to get the member "id" */ const char *Typemaker2_Enum_GetId(const TYPEMAKER2_ENUM *p_struct); /** Getter. * Use this function to get the member "prefix" */ const char *Typemaker2_Enum_GetPrefix(const TYPEMAKER2_ENUM *p_struct); /** Getter. * Use this function to get the member "type" */ const char *Typemaker2_Enum_GetType(const TYPEMAKER2_ENUM *p_struct); /** Getter. * Use this function to get the member "items" */ TYPEMAKER2_ITEM_LIST *Typemaker2_Enum_GetItems(const TYPEMAKER2_ENUM *p_struct); /** Getter. * Use this function to get the member "toStringFn" */ const char *Typemaker2_Enum_GetToStringFn(const TYPEMAKER2_ENUM *p_struct); /** Getter. * Use this function to get the member "fromStringFn" */ const char *Typemaker2_Enum_GetFromStringFn(const TYPEMAKER2_ENUM *p_struct); /** Setter. * Use this function to set the member "id" */ void Typemaker2_Enum_SetId(TYPEMAKER2_ENUM *p_struct, const char *p_src); /** Setter. * Use this function to set the member "prefix" */ void Typemaker2_Enum_SetPrefix(TYPEMAKER2_ENUM *p_struct, const char *p_src); /** Setter. * Use this function to set the member "type" */ void Typemaker2_Enum_SetType(TYPEMAKER2_ENUM *p_struct, const char *p_src); /** Setter. * Use this function to set the member "items" */ void Typemaker2_Enum_SetItems(TYPEMAKER2_ENUM *p_struct, const TYPEMAKER2_ITEM_LIST *p_src); /** Setter. * Use this function to set the member "toStringFn" */ void Typemaker2_Enum_SetToStringFn(TYPEMAKER2_ENUM *p_struct, const char *p_src); /** Setter. * Use this function to set the member "fromStringFn" */ void Typemaker2_Enum_SetFromStringFn(TYPEMAKER2_ENUM *p_struct, const char *p_src); TYPEMAKER2_ENUM_LIST *Typemaker2_Enum_List_dup(const TYPEMAKER2_ENUM_LIST *p_src); void Typemaker2_Enum_ReadXml(TYPEMAKER2_ENUM *p_struct, GWEN_XMLNODE *p_db); void Typemaker2_Enum_WriteXml(const TYPEMAKER2_ENUM *p_struct, GWEN_XMLNODE *p_db); void Typemaker2_Enum_toXml(const TYPEMAKER2_ENUM *p_struct, GWEN_XMLNODE *p_db); TYPEMAKER2_ENUM *Typemaker2_Enum_fromXml(GWEN_XMLNODE *p_db); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/tools/typemaker2/tm_signal.xml0000644000175000017500000000331012364015347017465 00000000000000 TYPEMAKER2_SIGNAL Typemaker2_Signal tm_signal with_list1 with_list2 with_xml NULL NULL public own attribute const dup const NULL NULL public own attribute const dup const NULL NULL public own attribute const dup const 0 0 public with_flags gwenhywfar-4.15.2beta/tools/typemaker2/Makefile.am0000644000175000017500000000321612641051551017022 00000000000000SUBDIRS=types INCLUDES=@all_includes@ -I$(gwenhywfar_symlinkdir) typefiles=\ tm_item.xml \ tm_enum.xml \ tm_define.xml \ tm_code.xml \ tm_signal.xml \ tm_slot.xml bin_PROGRAMS=typemaker2 noinst_HEADERS=\ tm_type_p.h tm_type.h \ tm_member_p.h tm_member.h \ tm_header_p.h tm_header.h \ tm_typemanager_p.h tm_typemanager.h \ tm_virtualfn_p.h tm_virtualfn.h \ tm_builder_p.h tm_builder.h \ tm_item_p.h tm_item.h \ tm_enum_p.h tm_enum.h \ tm_define_p.h tm_define.h \ tm_code_p.h tm_code.h \ tm_inline_p.h tm_inline.h \ tm_signal_p.h tm_signal.h \ tm_slot_p.h tm_slot.h \ tm_group_p.h tm_group.h \ tm_util.h \ typemaker2.h \ tm_builder_c.h typemaker2_SOURCES=\ tm_type.c \ tm_member.c \ tm_header.c \ tm_util.c \ tm_typemanager.c \ tm_builder.c \ tm_builder_c.c \ tm_item.c \ tm_enum.c \ tm_define.c \ tm_code.c \ tm_inline.c \ tm_virtualfn.c \ tm_signal.c \ tm_slot.c \ tm_group.c \ build.c \ builddefs.c \ main.c # tm_enum.c typemaker2_LDADD=$(top_builddir)/src/$(gwenhywfar_internal_libname) if IS_WINDOWS typemaker2_LDFLAGS=-mconsole typemaker2_LDADD+= $(PROG_LIBRARIES) endif EXTRA_DIST=$(typefiles) #BUILT_SOURCES= sources: for f in $(typemaker2_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done indent: $(BUILT_SOURCES) astyle \ --style=gnu \ --indent=spaces=2 \ --min-conditional-indent=0 \ --indent-labels \ --pad=oper \ --one-line=keep-blocks \ --suffix=none \ -a -y $(BUILT_SOURCES) types: $(typefiles) ./typemaker2 -I types/c -I $(srcdir) $(typefiles) gwenhywfar-4.15.2beta/tools/typemaker2/tm_signal.h0000644000175000017500000000606712364015347017130 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_signal.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef TM_SIGNAL_H #define TM_SIGNAL_H #ifdef __cplusplus extern "C" { #endif /* define TYPEMAKER2_SIGNAL_FLAGS */ #define TYPEMAKER2_SIGNAL_FLAGS_USE_PARAM3 0x00000001 #define TYPEMAKER2_SIGNAL_FLAGS_USE_PARAM4 0x00000002 /* needed system headers */ #include #include #include #include typedef struct TYPEMAKER2_SIGNAL TYPEMAKER2_SIGNAL; GWEN_LIST_FUNCTION_DEFS(TYPEMAKER2_SIGNAL, Typemaker2_Signal) GWEN_LIST2_FUNCTION_DEFS(TYPEMAKER2_SIGNAL, Typemaker2_Signal) /** Constructor. */ TYPEMAKER2_SIGNAL *Typemaker2_Signal_new(void); /** Destructor. */ void Typemaker2_Signal_free(TYPEMAKER2_SIGNAL *p_struct); TYPEMAKER2_SIGNAL *Typemaker2_Signal_dup(const TYPEMAKER2_SIGNAL *p_struct); TYPEMAKER2_SIGNAL *Typemaker2_Signal_copy(TYPEMAKER2_SIGNAL *p_struct, const TYPEMAKER2_SIGNAL *p_src); /** Getter. * Use this function to get the member "name" */ const char *Typemaker2_Signal_GetName(const TYPEMAKER2_SIGNAL *p_struct); /** Getter. * Use this function to get the member "paramType1" */ const char *Typemaker2_Signal_GetParamType1(const TYPEMAKER2_SIGNAL *p_struct); /** Getter. * Use this function to get the member "paramType2" */ const char *Typemaker2_Signal_GetParamType2(const TYPEMAKER2_SIGNAL *p_struct); /** Getter. * Use this function to get the member "flags" */ uint32_t Typemaker2_Signal_GetFlags(const TYPEMAKER2_SIGNAL *p_struct); /** Setter. * Use this function to set the member "name" */ void Typemaker2_Signal_SetName(TYPEMAKER2_SIGNAL *p_struct, const char *p_src); /** Setter. * Use this function to set the member "paramType1" */ void Typemaker2_Signal_SetParamType1(TYPEMAKER2_SIGNAL *p_struct, const char *p_src); /** Setter. * Use this function to set the member "paramType2" */ void Typemaker2_Signal_SetParamType2(TYPEMAKER2_SIGNAL *p_struct, const char *p_src); /** Setter. * Use this function to set the member "flags" */ void Typemaker2_Signal_SetFlags(TYPEMAKER2_SIGNAL *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to the member "flags" */ void Typemaker2_Signal_AddFlags(TYPEMAKER2_SIGNAL *p_struct, uint32_t p_src); /** Sub flags. * Use this function to sub flags to the member "flags" */ void Typemaker2_Signal_SubFlags(TYPEMAKER2_SIGNAL *p_struct, uint32_t p_src); TYPEMAKER2_SIGNAL_LIST *Typemaker2_Signal_List_dup(const TYPEMAKER2_SIGNAL_LIST *p_src); void Typemaker2_Signal_ReadXml(TYPEMAKER2_SIGNAL *p_struct, GWEN_XMLNODE *p_db); void Typemaker2_Signal_WriteXml(const TYPEMAKER2_SIGNAL *p_struct, GWEN_XMLNODE *p_db); void Typemaker2_Signal_toXml(const TYPEMAKER2_SIGNAL *p_struct, GWEN_XMLNODE *p_db); TYPEMAKER2_SIGNAL *Typemaker2_Signal_fromXml(GWEN_XMLNODE *p_db); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/tools/typemaker2/tm_header_p.h0000644000175000017500000000122712364015347017413 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_HEADER_P_H #define TYPEMAKER2_HEADER_P_H #include "tm_header.h" struct TYPEMAKER2_HEADER { GWEN_LIST_ELEMENT(TYPEMAKER2_HEADER) char *fileName; int type; int location; int refCount; }; #endif gwenhywfar-4.15.2beta/tools/typemaker2/tm_slot_p.h0000644000175000017500000000113212364015347017137 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_slot.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef TM_SLOT_P_H #define TM_SLOT_P_H #include "tm_slot.h" #ifdef __cplusplus extern "C" { #endif struct TYPEMAKER2_SLOT { GWEN_LIST_ELEMENT(TYPEMAKER2_SLOT) char *name; char *paramType1; char *paramType2; uint32_t flags; }; #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/tools/typemaker2/tm_group_p.h0000644000175000017500000000121012641053754017311 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_GROUP_P_H #define TYPEMAKER2_GROUP_P_H #include "tm_group.h" struct TYPEMAKER2_GROUP { GWEN_TREE_ELEMENT(TYPEMAKER2_GROUP) char *title; char *description; int refCount; }; #endif gwenhywfar-4.15.2beta/tools/typemaker2/tm_define_p.h0000644000175000017500000000126412364015347017416 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_define.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef TM_DEFINE_P_H #define TM_DEFINE_P_H #include "tm_define.h" #ifdef __cplusplus extern "C" { #endif struct TYPEMAKER2_DEFINE { GWEN_LIST_ELEMENT(TYPEMAKER2_DEFINE) char *id; char *prefix; char *type; TYPEMAKER2_ITEM_LIST *items; /* volatile */ int mode; int startValue; int lastValue; /* volatile */ }; #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/tools/typemaker2/build.c0000644000175000017500000001672512364015347016247 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "typemaker2.h" #include "tm_typemanager.h" #include "tm_builder_c.h" #include #include #include int buildFile2(GWEN_DB_NODE *dbArgs, const char *fname) { TYPEMAKER2_TYPEMANAGER *tym; TYPEMAKER2_BUILDER *tb=NULL; TYPEMAKER2_TYPE *ty; GWEN_STRINGLIST *sl; TYPEMAKER2_TYPE_LIST2 *tlist; TYPEMAKER2_TYPE_LIST2_ITERATOR *it; const char *s; int i; int rv; tym=Typemaker2_TypeManager_new(); s=GWEN_DB_GetCharValue(dbArgs, "api", 0, NULL); if (s && *s) Typemaker2_TypeManager_SetApiDeclaration(tym, s); s=GWEN_DB_GetCharValue(dbArgs, "language", 0, "c"); if (s && *s) { Typemaker2_TypeManager_SetLanguage(tym, s); if (strcasecmp(s, "c")==0) { tb=Typemaker2_Builder_C_new(); Typemaker2_Builder_SetTypeManager(tb, tym); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Unsupported language [%s]", s); return 1; } } else { DBG_ERROR(GWEN_LOGDOMAIN, "Missing language specification"); return 1; } Typemaker2_Builder_SetSourceFileName(tb, fname); for (i=0; i<99; i++) { s=GWEN_DB_GetCharValue(dbArgs, "include", i, NULL); if (s && *s) Typemaker2_TypeManager_AddFolder(tym, s); else break; } sl=GWEN_PathManager_GetPaths(GWEN_PM_LIBNAME, GWEN_PM_DATADIR); if (sl) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(sl); while(se) { s=GWEN_StringListEntry_Data(se); if (s) { GWEN_BUFFER *xbuf; xbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(xbuf, s); GWEN_Buffer_AppendString(xbuf, "/typemaker2/"); s=Typemaker2_TypeManager_GetLanguage(tym); if (s && *s) GWEN_Buffer_AppendString(xbuf, s); Typemaker2_TypeManager_AddFolder(tym, GWEN_Buffer_GetStart(xbuf)); GWEN_Buffer_free(xbuf); } se=GWEN_StringListEntry_Next(se); } GWEN_StringList_free(sl); } tlist=Typemaker2_Type_List2_new(); rv=Typemaker2_TypeManager_LoadTypeFile2(tym, fname, tlist); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Unable to load file [%s] (%d)", fname, rv); return 2; } it=Typemaker2_Type_List2_First(tlist); if(it) { ty=Typemaker2_Type_List2Iterator_Data(it); while(ty) { /* DEBUG */ #if 0 Typemaker2_TypeManager_Dump(tym, stderr, 2); #endif /* build */ rv=Typemaker2_Builder_Build(tb, ty); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "here (%d)", rv); return 2; } /* only write typedef files */ rv=Typemaker2_Builder_WriteFiles(tb, ty, 1); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "here (%d)", rv); return 2; } /* handle next type */ ty=Typemaker2_Type_List2Iterator_Next(it); } Typemaker2_Type_List2Iterator_free(it); s=GWEN_DB_GetCharValue(dbArgs, "publicFile", 0, NULL); if (s) Typemaker2_Builder_SetFileNamePublic(tb, s); s=GWEN_DB_GetCharValue(dbArgs, "libraryFile", 0, NULL); if (s) Typemaker2_Builder_SetFileNameLibrary(tb, s); s=GWEN_DB_GetCharValue(dbArgs, "protectedFile", 0, NULL); if (s) Typemaker2_Builder_SetFileNameProtected(tb, s); s=GWEN_DB_GetCharValue(dbArgs, "privateFile", 0, NULL); if (s) Typemaker2_Builder_SetFileNamePrivate(tb, s); s=GWEN_DB_GetCharValue(dbArgs, "codeFile", 0, NULL); if (s) Typemaker2_Builder_SetFileNameCode(tb, s); s = GWEN_DB_GetCharValue(dbArgs, "destFolder", 0, NULL); if (s) Typemaker2_Builder_SetDestFolderName(tb, s); ty=Typemaker2_Type_List2_GetFront(tlist); rv=Typemaker2_Builder_WriteFiles(tb, ty, 0); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "here (%d)", rv); return 2; } } Typemaker2_Type_List2_free(tlist); return 0; } int buildFile(GWEN_DB_NODE *dbArgs, const char *fname) { TYPEMAKER2_TYPEMANAGER *tym; TYPEMAKER2_BUILDER *tb=NULL; TYPEMAKER2_TYPE *ty; GWEN_STRINGLIST *sl; const char *s; int i; int rv; tym=Typemaker2_TypeManager_new(); s=GWEN_DB_GetCharValue(dbArgs, "api", 0, NULL); if (s && *s) Typemaker2_TypeManager_SetApiDeclaration(tym, s); s=GWEN_DB_GetCharValue(dbArgs, "language", 0, "c"); if (s && *s) { Typemaker2_TypeManager_SetLanguage(tym, s); if (strcasecmp(s, "c")==0) { tb=Typemaker2_Builder_C_new(); Typemaker2_Builder_SetTypeManager(tb, tym); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Unsupported language [%s]", s); return 1; } } else { DBG_ERROR(GWEN_LOGDOMAIN, "Missing language specification"); return 1; } Typemaker2_Builder_SetSourceFileName(tb, fname); for (i=0; i<99; i++) { s=GWEN_DB_GetCharValue(dbArgs, "include", i, NULL); if (s && *s) Typemaker2_TypeManager_AddFolder(tym, s); else break; } sl=GWEN_PathManager_GetPaths(GWEN_PM_LIBNAME, GWEN_PM_DATADIR); if (sl) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(sl); while(se) { s=GWEN_StringListEntry_Data(se); if (s) { GWEN_BUFFER *xbuf; xbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(xbuf, s); GWEN_Buffer_AppendString(xbuf, "/typemaker2/"); s=Typemaker2_TypeManager_GetLanguage(tym); if (s && *s) GWEN_Buffer_AppendString(xbuf, s); Typemaker2_TypeManager_AddFolder(tym, GWEN_Buffer_GetStart(xbuf)); GWEN_Buffer_free(xbuf); } se=GWEN_StringListEntry_Next(se); } GWEN_StringList_free(sl); } s=GWEN_DB_GetCharValue(dbArgs, "publicFile", 0, NULL); if (s) Typemaker2_Builder_SetFileNamePublic(tb, s); s=GWEN_DB_GetCharValue(dbArgs, "libraryFile", 0, NULL); if (s) Typemaker2_Builder_SetFileNameLibrary(tb, s); s=GWEN_DB_GetCharValue(dbArgs, "protectedFile", 0, NULL); if (s) Typemaker2_Builder_SetFileNameProtected(tb, s); s=GWEN_DB_GetCharValue(dbArgs, "privateFile", 0, NULL); if (s) Typemaker2_Builder_SetFileNamePrivate(tb, s); s=GWEN_DB_GetCharValue(dbArgs, "codeFile", 0, NULL); if (s) Typemaker2_Builder_SetFileNameCode(tb, s); s = GWEN_DB_GetCharValue(dbArgs, "destFolder", 0, NULL); if (s) Typemaker2_Builder_SetDestFolderName(tb, s); ty=Typemaker2_TypeManager_LoadTypeFile(tym, fname); if (ty==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Unable to load file [%s]", fname); return 2; } /* DEBUG */ #if 0 Typemaker2_TypeManager_Dump(tym, stderr, 2); #endif /* build */ rv=Typemaker2_Builder_Build(tb, ty); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "here (%d)", rv); return 2; } rv=Typemaker2_Builder_WriteFiles(tb, ty, 0); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "here (%d)", rv); return 2; } return 0; } int build(GWEN_DB_NODE *dbArgs) { int i; for (i=0; i<99; i++) { const char *fileName; fileName=GWEN_DB_GetCharValue(dbArgs, "params", i, NULL); if (fileName) { int rv=buildFile2(dbArgs, fileName); if (rv != 0) { DBG_ERROR(GWEN_LOGDOMAIN, "Error building type from [%s]", fileName); return 2; } } else { if (i==0) { DBG_ERROR(GWEN_LOGDOMAIN, "No input"); return 1; } } } return 0; } gwenhywfar-4.15.2beta/tools/typemaker2/builddefs.c0000644000175000017500000000711712364015347017104 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "typemaker2.h" #include "tm_typemanager.h" #include "tm_builder_c.h" #include #include #include int doBuildDefs(GWEN_DB_NODE *dbArgs, const char *fname) { TYPEMAKER2_TYPEMANAGER *tym; TYPEMAKER2_BUILDER *tb=NULL; TYPEMAKER2_TYPE *ty; GWEN_STRINGLIST *sl; TYPEMAKER2_TYPE_LIST2 *tlist; TYPEMAKER2_TYPE_LIST2_ITERATOR *it; const char *s; int i; int rv; tym=Typemaker2_TypeManager_new(); s=GWEN_DB_GetCharValue(dbArgs, "api", 0, NULL); if (s && *s) Typemaker2_TypeManager_SetApiDeclaration(tym, s); s=GWEN_DB_GetCharValue(dbArgs, "language", 0, "c"); if (s && *s) { Typemaker2_TypeManager_SetLanguage(tym, s); if (strcasecmp(s, "c")==0) { tb=Typemaker2_Builder_C_new(); Typemaker2_Builder_SetTypeManager(tb, tym); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Unsupported language [%s]", s); return 1; } } else { DBG_ERROR(GWEN_LOGDOMAIN, "Missing language specification"); return 1; } Typemaker2_Builder_SetSourceFileName(tb, fname); for (i=0; i<99; i++) { s=GWEN_DB_GetCharValue(dbArgs, "include", i, NULL); if (s && *s) Typemaker2_TypeManager_AddFolder(tym, s); else break; } sl=GWEN_PathManager_GetPaths(GWEN_PM_LIBNAME, GWEN_PM_DATADIR); if (sl) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(sl); while(se) { s=GWEN_StringListEntry_Data(se); if (s) { GWEN_BUFFER *xbuf; xbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(xbuf, s); GWEN_Buffer_AppendString(xbuf, "/typemaker2/"); s=Typemaker2_TypeManager_GetLanguage(tym); if (s && *s) GWEN_Buffer_AppendString(xbuf, s); Typemaker2_TypeManager_AddFolder(tym, GWEN_Buffer_GetStart(xbuf)); GWEN_Buffer_free(xbuf); } se=GWEN_StringListEntry_Next(se); } GWEN_StringList_free(sl); } tlist=Typemaker2_Type_List2_new(); rv=Typemaker2_TypeManager_LoadTypeFileNoLookup(tym, fname, tlist); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Unable to load file [%s] (%d)", fname, rv); return 2; } it=Typemaker2_Type_List2_First(tlist); if(it) { ty=Typemaker2_Type_List2Iterator_Data(it); while(ty) { /* DEBUG */ #if 0 Typemaker2_TypeManager_Dump(tym, stderr, 2); #endif /* only write typedef files */ rv=Typemaker2_Builder_WriteFiles(tb, ty, 1); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "here (%d)", rv); return 2; } /* handle next type */ ty=Typemaker2_Type_List2Iterator_Next(it); } Typemaker2_Type_List2Iterator_free(it); } Typemaker2_Type_List2_free(tlist); return 0; } int buildDefs(GWEN_DB_NODE *dbArgs) { int i; for (i=0; i<99; i++) { const char *fileName; fileName=GWEN_DB_GetCharValue(dbArgs, "params", i, NULL); if (fileName) { int rv=doBuildDefs(dbArgs, fileName); if (rv != 0) { DBG_ERROR(GWEN_LOGDOMAIN, "Error building type from [%s]", fileName); return 2; } } else { if (i==0) { DBG_ERROR(GWEN_LOGDOMAIN, "No input"); return 1; } } } return 0; } gwenhywfar-4.15.2beta/tools/typemaker2/tm_builder_p.h0000644000175000017500000000502312364015347017607 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_BUILDER_P_H #define TYPEMAKER2_BUILDER_P_H #include "tm_builder.h" struct TYPEMAKER2_BUILDER { GWEN_INHERIT_ELEMENT(TYPEMAKER2_BUILDER) GWEN_STRINGLIST *declarationsPublic; GWEN_STRINGLIST *declarationsLibrary; GWEN_STRINGLIST *declarationsProtected; GWEN_STRINGLIST *declarationsPrivate; GWEN_STRINGLIST *code; char *fileNamePublic; char *fileNameLibrary; char *fileNameProtected; char *fileNamePrivate; char *fileNameCode; char *sourceFileName; char *destFolder; TYPEMAKER2_TYPEMANAGER *typeManager; TYPEMAKER2_BUILDER_BUILD_FN buildFn; }; GWEN_DB_NODE *Typemaker2_Builder_CreateDbForCall(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst); int Typemaker2_Builder_ReplaceVars(const char *s, GWEN_DB_NODE *db, GWEN_BUFFER *dbuf); int Typemaker2_Builder_Invoke_Fn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *code, const char *src, const char *dst, GWEN_BUFFER *dbuf); int Typemaker2_Builder_WriteFile(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName, GWEN_STRINGLIST *sl, int acc); int Typemaker2_Builder_WriteTypedefFile(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName); int Typemaker2_Builder_WriteTypedefFile_List1(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName); int Typemaker2_Builder_WriteTypedefFile_List2(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName); int Typemaker2_Builder_WriteTypedefFile_Tree(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName); int Typemaker2_Builder_WriteTypedefFile_IdMap(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName); int Typemaker2_Builder_DetermineOutFileNames(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); #endif gwenhywfar-4.15.2beta/tools/typemaker2/typemaker2.h0000644000175000017500000000113612364015347017226 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_TYPEMAKER2_H #define TYPEMAKER2_TYPEMAKER2_H #include int build(GWEN_DB_NODE *dbArgs); int buildDefs(GWEN_DB_NODE *dbArgs); #endif gwenhywfar-4.15.2beta/tools/typemaker2/tm_enum_p.h0000644000175000017500000000126212364015347017126 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_enum.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef TM_ENUM_P_H #define TM_ENUM_P_H #include "tm_enum.h" #ifdef __cplusplus extern "C" { #endif struct TYPEMAKER2_ENUM { GWEN_LIST_ELEMENT(TYPEMAKER2_ENUM) char *id; char *prefix; char *type; TYPEMAKER2_ITEM_LIST *items; /* volatile */ char *toStringFn; /* volatile */ char *fromStringFn; /* volatile */ }; #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/tools/typemaker2/tm_define.c0000644000175000017500000002232712364015347017075 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_define.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_define_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(TYPEMAKER2_DEFINE, Typemaker2_Define) int Typemaker2_Define_Mode_fromString(const char *p_s) { if (p_s && *p_s) { if (strcasecmp(p_s, "sequence")==0) return Typemaker2_Define_Mode_Sequence; else if (strcasecmp(p_s, "bitField")==0) return Typemaker2_Define_Mode_BitField; } return Typemaker2_Define_Mode_Unknown; } const char *Typemaker2_Define_Mode_toString(int p_i) { switch(p_i) { case Typemaker2_Define_Mode_Sequence: return "sequence"; case Typemaker2_Define_Mode_BitField: return "bitField"; default: return "unknown"; } } TYPEMAKER2_DEFINE *Typemaker2_Define_new(void) { TYPEMAKER2_DEFINE *p_struct; GWEN_NEW_OBJECT(TYPEMAKER2_DEFINE, p_struct) GWEN_LIST_INIT(TYPEMAKER2_DEFINE, p_struct) /* members */ p_struct->id=NULL; p_struct->prefix=NULL; p_struct->type=NULL; p_struct->items=Typemaker2_Item_List_new(); p_struct->mode=Typemaker2_Define_Mode_Unknown; p_struct->startValue=0; p_struct->lastValue=0; /* virtual functions */ return p_struct; } void Typemaker2_Define_free(TYPEMAKER2_DEFINE *p_struct) { if (p_struct) { GWEN_LIST_FINI(TYPEMAKER2_DEFINE, p_struct) /* members */ free(p_struct->id); free(p_struct->prefix); free(p_struct->type); Typemaker2_Item_List_free(p_struct->items); GWEN_FREE_OBJECT(p_struct); } } TYPEMAKER2_DEFINE *Typemaker2_Define_dup(const TYPEMAKER2_DEFINE *p_src) { TYPEMAKER2_DEFINE *p_struct; assert(p_src); p_struct=Typemaker2_Define_new(); /* member "id" */ if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; } if (p_src->id) { p_struct->id=strdup(p_src->id); } /* member "prefix" */ if (p_struct->prefix) { free(p_struct->prefix); p_struct->prefix=NULL; } if (p_src->prefix) { p_struct->prefix=strdup(p_src->prefix); } /* member "type" */ if (p_struct->type) { free(p_struct->type); p_struct->type=NULL; } if (p_src->type) { p_struct->type=strdup(p_src->type); } /* member "items" */ if (p_struct->items) { Typemaker2_Item_List_free(p_struct->items); p_struct->items=NULL; } if (p_src->items) { p_struct->items=Typemaker2_Item_List_dup(p_src->items); } /* member "mode" */ p_struct->mode=p_src->mode; /* member "startValue" */ p_struct->startValue=p_src->startValue; /* member "lastValue" */ p_struct->lastValue=p_src->lastValue; return p_struct; } TYPEMAKER2_DEFINE *Typemaker2_Define_copy(TYPEMAKER2_DEFINE *p_struct, const TYPEMAKER2_DEFINE *p_src) { assert(p_struct); assert(p_src); /* member "id" */ if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; } if (p_src->id) { p_struct->id=strdup(p_src->id); } /* member "prefix" */ if (p_struct->prefix) { free(p_struct->prefix); p_struct->prefix=NULL; } if (p_src->prefix) { p_struct->prefix=strdup(p_src->prefix); } /* member "type" */ if (p_struct->type) { free(p_struct->type); p_struct->type=NULL; } if (p_src->type) { p_struct->type=strdup(p_src->type); } /* member "items" */ if (p_struct->items) { Typemaker2_Item_List_free(p_struct->items); p_struct->items=NULL; } if (p_src->items) { p_struct->items=Typemaker2_Item_List_dup(p_src->items); } /* member "mode" */ p_struct->mode=p_src->mode; /* member "startValue" */ p_struct->startValue=p_src->startValue; /* member "lastValue" */ p_struct->lastValue=p_src->lastValue; return p_struct; } const char *Typemaker2_Define_GetId(const TYPEMAKER2_DEFINE *p_struct) { assert(p_struct); return p_struct->id; } const char *Typemaker2_Define_GetPrefix(const TYPEMAKER2_DEFINE *p_struct) { assert(p_struct); return p_struct->prefix; } const char *Typemaker2_Define_GetType(const TYPEMAKER2_DEFINE *p_struct) { assert(p_struct); return p_struct->type; } TYPEMAKER2_ITEM_LIST *Typemaker2_Define_GetItems(const TYPEMAKER2_DEFINE *p_struct) { assert(p_struct); return p_struct->items; } int Typemaker2_Define_GetMode(const TYPEMAKER2_DEFINE *p_struct) { assert(p_struct); return p_struct->mode; } int Typemaker2_Define_GetStartValue(const TYPEMAKER2_DEFINE *p_struct) { assert(p_struct); return p_struct->startValue; } int Typemaker2_Define_GetLastValue(const TYPEMAKER2_DEFINE *p_struct) { assert(p_struct); return p_struct->lastValue; } void Typemaker2_Define_SetId(TYPEMAKER2_DEFINE *p_struct, const char *p_src) { assert(p_struct); if (p_struct->id) { free(p_struct->id); } if (p_src) { p_struct->id=strdup(p_src); } else { p_struct->id=NULL; } } void Typemaker2_Define_SetPrefix(TYPEMAKER2_DEFINE *p_struct, const char *p_src) { assert(p_struct); if (p_struct->prefix) { free(p_struct->prefix); } if (p_src) { p_struct->prefix=strdup(p_src); } else { p_struct->prefix=NULL; } } void Typemaker2_Define_SetType(TYPEMAKER2_DEFINE *p_struct, const char *p_src) { assert(p_struct); if (p_struct->type) { free(p_struct->type); } if (p_src) { p_struct->type=strdup(p_src); } else { p_struct->type=NULL; } } void Typemaker2_Define_SetItems(TYPEMAKER2_DEFINE *p_struct, const TYPEMAKER2_ITEM_LIST *p_src) { assert(p_struct); if (p_struct->items) { Typemaker2_Item_List_free(p_struct->items); } if (p_src) { p_struct->items=Typemaker2_Item_List_dup(p_src); } else { p_struct->items=Typemaker2_Item_List_new(); } } void Typemaker2_Define_SetMode(TYPEMAKER2_DEFINE *p_struct, int p_src) { assert(p_struct); p_struct->mode=p_src; } void Typemaker2_Define_SetStartValue(TYPEMAKER2_DEFINE *p_struct, int p_src) { assert(p_struct); p_struct->startValue=p_src; } void Typemaker2_Define_SetLastValue(TYPEMAKER2_DEFINE *p_struct, int p_src) { assert(p_struct); p_struct->lastValue=p_src; } TYPEMAKER2_DEFINE_LIST *Typemaker2_Define_List_dup(const TYPEMAKER2_DEFINE_LIST *p_src) { TYPEMAKER2_DEFINE_LIST *p_dest; TYPEMAKER2_DEFINE *p_elem; assert(p_src); p_dest=Typemaker2_Define_List_new(); p_elem=Typemaker2_Define_List_First(p_src); while(p_elem) { TYPEMAKER2_DEFINE *p_cpy; p_cpy=Typemaker2_Define_dup(p_elem); Typemaker2_Define_List_Add(p_cpy, p_dest); p_elem=Typemaker2_Define_List_Next(p_elem); } return p_dest; } void Typemaker2_Define_ReadXml(TYPEMAKER2_DEFINE *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "id" */ if (p_struct->id) { free(p_struct->id); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "id", NULL); if (s) p_struct->id=strdup(s); } if (p_struct->id==NULL) { /* member "id" is volatile, just presetting */ p_struct->id=NULL; } /* member "prefix" */ if (p_struct->prefix) { free(p_struct->prefix); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "prefix", NULL); if (s) p_struct->prefix=strdup(s); } if (p_struct->prefix==NULL) { /* member "prefix" is volatile, just presetting */ p_struct->prefix=NULL; } /* member "type" */ if (p_struct->type) { free(p_struct->type); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "type", NULL); if (s) p_struct->type=strdup(s); } if (p_struct->type==NULL) { /* member "type" is volatile, just presetting */ p_struct->type=NULL; } /* member "items" */ if (p_struct->items) { Typemaker2_Item_List_free(p_struct->items); } /* member "items" is volatile, just presetting */ p_struct->items=Typemaker2_Item_List_new(); /* member "mode" */ { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "mode", NULL); if (s) p_struct->mode=Typemaker2_Define_Mode_fromString(s); else p_struct->mode=Typemaker2_Define_Mode_Unknown; } /* member "startValue" */ p_struct->startValue=GWEN_XMLNode_GetIntValue(p_db, "startValue", 0); /* member "lastValue" */ /* member "lastValue" is volatile, just presetting */ p_struct->lastValue=0; } void Typemaker2_Define_WriteXml(const TYPEMAKER2_DEFINE *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "id" */ GWEN_XMLNode_SetProperty(p_db, "id", p_struct->id); /* member "prefix" */ GWEN_XMLNode_SetProperty(p_db, "prefix", p_struct->prefix); /* member "type" */ GWEN_XMLNode_SetProperty(p_db, "type", p_struct->type); /* member "items" is volatile, not writing to xml */ /* member "mode" */ GWEN_XMLNode_SetProperty(p_db, "mode", Typemaker2_Define_Mode_toString(p_struct->mode)); /* member "startValue" */ GWEN_XMLNode_SetIntValue(p_db, "startValue", p_struct->startValue); /* member "lastValue" is volatile, not writing to xml */ } void Typemaker2_Define_toXml(const TYPEMAKER2_DEFINE *p_struct, GWEN_XMLNODE *p_db) { Typemaker2_Define_WriteXml(p_struct, p_db); } TYPEMAKER2_DEFINE *Typemaker2_Define_fromXml(GWEN_XMLNODE *p_db) { TYPEMAKER2_DEFINE *p_struct; p_struct=Typemaker2_Define_new(); Typemaker2_Define_ReadXml(p_struct, p_db); return p_struct; } /* code headers */ gwenhywfar-4.15.2beta/tools/typemaker2/tm_type_p.h0000644000175000017500000000320712641052707017143 00000000000000/*************************************************************************** begin : Wed Jul 01 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_TYPE_P_H #define TYPEMAKER2_TYPE_P_H #include "tm_type.h" struct TYPEMAKER2_TYPE { GWEN_LIST_ELEMENT(TYPEMAKER2_TYPE) char *name; char *descr; uint32_t flags; uint32_t setFlags; uint32_t getFlags; uint32_t dupFlags; uint32_t copyFlags; int access; int usePrivateConstructor; int type; char *extends; char *baseType; char *inherits; char *identifier; char *prefix; char *defaultValue; char *presetValue; char *aqdb_type; char *baseFileName; char *freeHook; TYPEMAKER2_HEADER_LIST *headers; TYPEMAKER2_ENUM_LIST *enums; TYPEMAKER2_DEFINE_LIST *defines; TYPEMAKER2_CODE_LIST *codeDefs; TYPEMAKER2_INLINE_LIST *inlines; TYPEMAKER2_VIRTUALFN_LIST *virtualFns; TYPEMAKER2_SIGNAL_LIST *signals; TYPEMAKER2_SLOT_LIST *slots; TYPEMAKER2_GROUP_TREE *groupTree; GWEN_STRINGLIST *structIncludes; GWEN_STRINGLIST *privateIncludes; GWEN_STRINGLIST *libraryIncludes; GWEN_STRINGLIST *publicIncludes; GWEN_STRINGLIST *codeIncludes; TYPEMAKER2_MEMBER_LIST *members; TYPEMAKER2_TYPE *extendsPtr; TYPEMAKER2_TYPE *baseTypePtr; TYPEMAKER2_TYPE *inheritsPtr; int nonVolatileMemberCount; char *fieldCountId; int refCount; }; #endif gwenhywfar-4.15.2beta/tools/typemaker2/tm_code_p.h0000644000175000017500000000127412364015347017077 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_code.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef TM_CODE_P_H #define TM_CODE_P_H #include "tm_code.h" #ifdef __cplusplus extern "C" { #endif struct TYPEMAKER2_CODE { GWEN_LIST_ELEMENT(TYPEMAKER2_CODE) char *id; char *memberFlagsMask; char *memberFlagsValue; char *code; uint32_t memberFlagsMaskInt; /* volatile */ uint32_t memberFlagsValueInt; /* volatile */ }; #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/tools/typemaker2/tm_header.c0000644000175000017500000000620412364015347017067 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_header_p.h" #include #include #include GWEN_LIST_FUNCTIONS(TYPEMAKER2_HEADER, Typemaker2_Header) TYPEMAKER2_HEADER *Typemaker2_Header_new() { TYPEMAKER2_HEADER *th; GWEN_NEW_OBJECT(TYPEMAKER2_HEADER, th); th->refCount=1; GWEN_LIST_INIT(TYPEMAKER2_HEADER, th); return th; } void Typemaker2_Header_free(TYPEMAKER2_HEADER *th) { if (th) { assert(th->refCount); if (th->refCount==1) { GWEN_LIST_FINI(TYPEMAKER2_HEADER, th); free(th->fileName); th->refCount=0; GWEN_FREE_OBJECT(th); } else th->refCount++; } } void Typemaker2_Header_Attach(TYPEMAKER2_HEADER *th) { assert(th); assert(th->refCount); th->refCount++; } const char *Typemaker2_Header_GetFileName(const TYPEMAKER2_HEADER *th) { assert(th); assert(th->refCount); return th->fileName; } void Typemaker2_Header_SetFileName(TYPEMAKER2_HEADER *th, const char *s) { assert(th); assert(th->refCount); free(th->fileName); if (s) th->fileName=strdup(s); else th->fileName=NULL; } int Typemaker2_Header_GetType(const TYPEMAKER2_HEADER *th) { assert(th); assert(th->refCount); return th->type; } void Typemaker2_Header_SetType(TYPEMAKER2_HEADER *th, int i) { assert(th); assert(th->refCount); th->type=i; } int Typemaker2_Header_GetLocation(const TYPEMAKER2_HEADER *th) { assert(th); assert(th->refCount); return th->location; } void Typemaker2_Header_SetLocation(TYPEMAKER2_HEADER *th, int i) { assert(th); assert(th->refCount); th->location=i; } int Typemaker2_Header_readXml(TYPEMAKER2_HEADER *th, GWEN_XMLNODE *node) { const char *s; GWEN_XMLNODE *n; assert(th); assert(th->refCount); n=GWEN_XMLNode_GetFirstData(node); if (n) { s=GWEN_XMLNode_GetData(n); Typemaker2_Header_SetFileName(th, s); } /* read header type */ s=GWEN_XMLNode_GetProperty(node, "type", "sys"); if (strcasecmp(s, "sys")==0 || strcasecmp(s, "system")==0) Typemaker2_Header_SetType(th, Typemaker2_HeaderType_System); else if (strcasecmp(s, "local")==0) Typemaker2_Header_SetType(th, Typemaker2_HeaderType_Local); /* read header location */ s=GWEN_XMLNode_GetProperty(node, "loc", "post"); if (strcasecmp(s, "pre")==0) Typemaker2_Header_SetLocation(th, Typemaker2_HeaderLocation_Pre); else if (strcasecmp(s, "post")==0) Typemaker2_Header_SetLocation(th, Typemaker2_HeaderLocation_Post); else if (strcasecmp(s, "code")==0) Typemaker2_Header_SetLocation(th, Typemaker2_HeaderLocation_Code); else if (strcasecmp(s, "codeEnd")==0) Typemaker2_Header_SetLocation(th, Typemaker2_HeaderLocation_CodeEnd); return 0; } gwenhywfar-4.15.2beta/tools/typemaker2/types/0000755000175000017500000000000012643267240016216 500000000000000gwenhywfar-4.15.2beta/tools/typemaker2/types/c/0000755000175000017500000000000012643267240016440 500000000000000gwenhywfar-4.15.2beta/tools/typemaker2/types/c/uint64_t.tm20000644000175000017500000000017712364015347020464 00000000000000 uint64_t gwenhywfar-4.15.2beta/tools/typemaker2/types/c/struct_base.tm20000644000175000017500000000506012364015347021322 00000000000000 $(dst)=$(preset); $(member_prefix)_free($(src)); $(dst)=$(src); $(dst)=$(member_prefix)_dup($(src)); { GWEN_XMLNODE *dbDest; dbDest=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "$(name)"); $(member_prefix)_toXml($(src), dbDest); GWEN_XMLNode_AddChild($(db), dbDest); } { GWEN_XMLNODE *dbSource; dbSource=GWEN_XMLNode_FindFirstTag($(db), "$(name)", NULL, NULL); if (dbSource) $(dst)=$(member_prefix)_fromXml(dbSource); else $(dst)=$(preset); } { GWEN_DB_NODE *dbDest; dbDest=GWEN_DB_GetGroup($(db), GWEN_DB_FLAGS_OVERWRITE_GROUPS, "$(name)"); assert(dbDest); $(retval)=$(member_prefix)_toDb($(src), dbDest); } { GWEN_DB_NODE *dbSource; dbSource=GWEN_DB_GetGroup($(db), GWEN_PATH_FLAGS_NAMEMUSTEXIST, "$(name)"); if (dbSource) $(dst)=$(member_prefix)_fromDb(dbSource); else $(dst)=$(preset); } $(member_prefix)_toHashString($(src), $(buffer)); NULL NULL const dup const const gwenhywfar-4.15.2beta/tools/typemaker2/types/c/gwen_time.tm20000644000175000017500000001162712364015347020770 00000000000000 GWEN_TIME AQDB_DataType_Date $(dst)=$(preset); GWEN_Time_free($(src)); $(dst)=$(src); $(dst)=GWEN_Time_dup($(src)); if ($(dst) && $(src)) $(retval)=GWEN_Time_Compare($(src), $(dst)); else if ($(src)) $(retval)=1; else if ($(dst)) $(retval)=-1; else $(retval)=0; attribute if ($(src)){ GWEN_BUFFER *xbuf; int rv; xbuf=GWEN_Buffer_new(0, 32, 0, 1); rv=GWEN_Time_toString($(src), "YYYY/MM/DD-hh:mm", xbuf); if (rv>=0) GWEN_XMLNode_SetCharValue($(db), "$(name)", GWEN_Buffer_GetStart(xbuf)); GWEN_Buffer_free(xbuf); } attribute attribute if ($(src)){ GWEN_BUFFER *xbuf; int rv; xbuf=GWEN_Buffer_new(0, 32, 0, 1); rv=GWEN_Time_toString($(src), "YYYY/MM/DD-hh:mm", xbuf); if (rv>=0) GWEN_XMLNode_SetProperty($(db), "$(name)", GWEN_Buffer_GetStart(xbuf)); GWEN_Buffer_free(xbuf); } attribute { const char *s; s=GWEN_XMLNode_GetCharValue($(db), "$(name)", NULL); if (s && *s) $(dst)=GWEN_Time_fromString(s, "YYYY/MM/DD-hh:mm"); } attribute attribute { const char *s; s=GWEN_XMLNode_GetProperty($(db), "$(name)", NULL); if (s && *s) $(dst)=GWEN_Time_fromString(s, "YYYY/MM/DD-hh:mm"); } if ($(src)){ GWEN_DB_NODE *dbDest; dbDest=GWEN_DB_GetGroup($(db), GWEN_DB_FLAGS_OVERWRITE_GROUPS, "$(name)"); assert(dbDest); $(retval)=GWEN_Time_toDb($(src), dbDest); } else $(retval)=0; { GWEN_DB_NODE *dbDest; dbDest=GWEN_DB_GetGroup($(db), GWEN_PATH_FLAGS_NAMEMUSTEXIST, "$(name)"); if (dbDest) $(dst)=GWEN_Time_fromDb(dbDest); } if ($(src)){ GWEN_BUFFER *xbuf=GWEN_Buffer_new(0, 64, 0, 1); $(retval)=GWEN_Time_toString($(src), "YYYYMMDD", xbuf); if ($(retval)>=0) $(retval)=AQDB_Object_SetFieldString($(db), $(fieldid), GWEN_Buffer_GetStart(xbuf)); GWEN_Buffer_free(xbuf); } else $(retval)=0; { const char *s; $(retval)=AQDB_Object_GetFieldString($(db), $(fieldid), &s); if ($(retval)>=0 && s && *s) { $(dst)=GWEN_Time_fromString(s, "YYYYMMDD"); if ($(dst)==NULL) $(retval)=GWEN_ERROR_BAD_DATA; } else $(retval)=0; } if ($(src)) GWEN_Time_toString($(src), "YYYY/MM/DD-hh:mm", $(buffer)); NULL NULL const dup const const gwenhywfar-4.15.2beta/tools/typemaker2/types/c/gwen_multicache.tm20000644000175000017500000000276312364015347022151 00000000000000 GWEN_MULTICACHE GWEN_MultiCache $(dst)=$(preset); $(member_prefix)_free($(src)); $(dst)=$(src); NULL NULL const dup const const gwenhywfar-4.15.2beta/tools/typemaker2/types/c/gwen_bindata.tm20000644000175000017500000001321712501353167021427 00000000000000 GWEN_BINDATA AQDB_DataType_Bin $(dst).pointer=NULL; $(dst).length=0; if ($(src).length && $(src).pointer) { free($(src).pointer); $(src).pointer=NULL; $(src).length=0; } $(dst).pointer=$(src).pointer; $(dst).length=$(src).length; if ($(src).length && $(src).pointer) { $(dst).pointer=(uint8_t*) malloc($(src).length); if ($(dst).pointer) { $(dst).length=$(src).length; memmove($(dst).pointer, $(src).pointer, $(src).length); } else { $(dst).pointer=NULL; $(dst).length=0; } } else { $(dst).pointer=NULL; $(dst).length=0; } if (($(src).length == $(dst).length) && $(src).pointer && $(dst).pointer ) $(retval)=memcmp($(src).pointer, $(dst).pointer, $(maxlen)); else if ($(src).length>$(dst).length) $(retval)=1; else if ($(dst).length>$(src).length) $(retval)=-1; else $(retval)=0; { if ($(src).length && $(src).pointer) { GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, 1024, 0, 1); rv=GWEN_Base64_Encode((const unsigned char*) $(src).pointer, $(src).length, tbuf, 80); if (rv < 0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); } else { GWEN_XMLNode_SetCharValue($(db), "$(name)", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } } } { const char *s; s=GWEN_XMLNode_GetCharValue($(db), "$(name)", $(default)); if (s) { GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, 1024, 0, 1); rv=GWEN_Base64_Decode((const unsigned char*)s, strlen(s), tbuf); if (rv < 0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); } else { char *t; uint32_t len; len=GWEN_Buffer_GetUsedBytes(tbuf); t=GWEN_Buffer_GetStart(tbuf); if (GWEN_Buffer_Relinquish(tbuf) < 0) { uint8_t *dest; dest=(uint8_t*) malloc(len); memmove(dest, t, len); $(dst).pointer=dest; $(dst).length=len; } else { $(dst).pointer=(uint8_t*) t; $(dst).length=len; } } GWEN_Buffer_free(tbuf); } } { if ($(src).length && $(src).pointer) { GWEN_DB_SetBinValue($(db), GWEN_DB_FLAGS_OVERWRITE_VARS, "$(name)", $(src).pointer, $(src).length); } else { GWEN_DB_DeleteVar($(db), "$(name)"); $(retval)=0; } } { const void *v; unsigned int vlen; v=GWEN_DB_GetBinValue($(db), "$(name)", 0, NULL, 0, &vlen); if (v && vlen) { uint8_t *dest; dest=(uint8_t*) malloc(vlen); memmove(dest, v, vlen); $(dst).pointer=dest; $(dst).length=vlen; } } { if ($(src).length && $(src).pointer) $(retval)=AQDB_Object_SetField($(db), $(fieldId), $(src).pointer, $(src).length); else $(retval)=AQDB_Object_SetField($(db), $(fieldId), NULL, 0); } { uint8_t *data=NULL; uint32_t len=0; int rv; rv=AQDB_Object_GetField($(db), $(fieldId), &data, &len); if (rv < 0) { $(retval)=rv; } else { uint8_t *dest; dest=(uint8_t*) malloc(len); memmove(dest, data, len); $(dst).pointer=dest; $(dst).length=len; } } NULL assign none const gwenhywfar-4.15.2beta/tools/typemaker2/types/c/gwen_stringlist2.tm20000644000175000017500000000551312364015347022313 00000000000000 GWEN_STRINGLIST2 AQDB_DataType_String $(dst)=$(preset); GWEN_StringList2_free($(src)); $(dst)=$(src); $(dst)=GWEN_StringList2_dup($(src)); $(retval)=0; attribute if ($(src)){ GWEN_XMLNODE *n; n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "$(name)"); GWEN_StringList2_toXml($(src), n); GWEN_XMLNode_AddChild($(db), n); } attribute { GWEN_XMLNODE *n; n=GWEN_XMLNode_FindFirstTag($(db), "$(name)", 0, 0); if(n) { $(dst)=GWEN_StringList2_fromXml(n, GWEN_StringList2_IntertMode_AlwaysAdd); } else $(dst)=NULL; } if ($(src)){ $(retval)=GWEN_StringList2_toDb($(src), $(db), "$(name)"); } else { GWEN_DB_DeleteVar($(db), "$(name)"); $(retval)=0; } { $(dst)=GWEN_StringList2_fromDb($(db), "$(name)", GWEN_StringList2_IntertMode_AlwaysAdd); } #error "Not implemented" #error "Not implemented" #error "Not implemented" NULL NULL own assign none const gwenhywfar-4.15.2beta/tools/typemaker2/types/c/uint8_t.tm20000644000175000017500000000017512364015347020400 00000000000000 uint8_t gwenhywfar-4.15.2beta/tools/typemaker2/types/c/uint32_t.tm20000644000175000017500000000017712364015347020457 00000000000000 uint32_t gwenhywfar-4.15.2beta/tools/typemaker2/types/c/gwen_date.tm20000644000175000017500000001050612364015347020742 00000000000000 GWEN_DATE AQDB_DataType_Date $(dst)=$(preset); GWEN_Date_free($(src)); $(dst)=$(src); $(dst)=GWEN_Date_dup($(src)); if ($(dst) && $(src)) $(retval)=GWEN_Date_Compare($(src), $(dst)); else if ($(src)) $(retval)=1; else if ($(dst)) $(retval)=-1; else $(retval)=0; attribute if ($(src)){ const char *s=GWEN_Date_GetString($(src)); GWEN_XMLNode_SetCharValue($(db), "$(name)", s); } attribute attribute if ($(src)){ const char *s=GWEN_Date_GetString($(src)); GWEN_XMLNode_SetProperty($(db), "$(name)", s); } attribute { const char *s; s=GWEN_XMLNode_GetCharValue($(db), "$(name)", NULL); if (s && *s) $(dst)=GWEN_Date_fromString(s); } attribute attribute { const char *s; s=GWEN_XMLNode_GetProperty($(db), "$(name)", NULL); if (s && *s) $(dst)=GWEN_Date_fromString(s); } if ($(src)){ const char *s=GWEN_Date_GetString($(src)); $(retval)=GWEN_DB_SetCharValue($(db), GWEN_DB_FLAGS_OVERWRITE_VARS, "$(name)", s); } else { GWEN_DB_DeleteVar($(db), "$(name)"); $(retval)=0; } { const char *s; s=GWEN_DB_GetCharValue($(db), "$(name)", 0, NULL); if (s && *s) $(dst)=GWEN_Date_fromString(s); } if ($(src)){ const char *s=GWEN_Date_GetString($(src)); $(retval)=AQDB_Object_SetFieldString($(db), $(fieldid), s); } else { $(retval)=AQDB_Object_SetFieldString($(db), $(fieldid), NULL); } { const char *s; $(retval)=AQDB_Object_GetFieldString($(db), $(fieldid), &s); if ($(retval)>=0 && s && *s) { $(dst)=GWEN_Date_fromString(s); if ($(dst)==NULL) $(retval)=GWEN_ERROR_BAD_DATA; } else $(retval)=0; } if ($(src)) GWEN_Buffer_AppendString($(buffer), GWEN_Date_GetString($(src))); NULL NULL const dup const const gwenhywfar-4.15.2beta/tools/typemaker2/types/c/char_array.tm20000644000175000017500000001113512364015347021117 00000000000000 char AQDB_DataType_String memset($(dst), 0, $(maxlen)); $(dst)=$(src); strncpy($(dst), $(src), $(maxlen)-1); ($(dst))[$(maxlen)-1]=0; if (*($(dst)) && *($(src))) $(retval)=strncasecmp($(src), $(dst), $(maxlen)); else if ($(src)) $(retval)=1; else if ($(dst)) $(retval)=-1; else $(retval)=0; attribute if (*($(src))) GWEN_XMLNode_SetCharValue($(db), "$(name)", $(src)); attribute attribute if (*($(src))) GWEN_XMLNode_SetProperty($(db), "$(name)", $(src)); attribute { const char *s; s=GWEN_XMLNode_GetCharValue($(db), "$(name)", $(default)); if (s) strncpy($(dst), s, $(maxlen)); } attribute attribute { const char *s; s=GWEN_XMLNode_GetProperty($(db), "$(name)", $(default)); if (s) strncpy($(dst), s, $(maxlen)); } if (*($(src))) $(retval)=GWEN_DB_SetCharValue($(db), GWEN_DB_FLAGS_OVERWRITE_VARS, "$(name)", $(src)); else { GWEN_DB_DeleteVar($(db), "$(name)"); $(retval)=0; } { const char *s; s=GWEN_DB_GetCharValue($(db), "$(name)", 0, $(default)); if (s) strncpy($(dst), s, $(maxlen)); } if ($(src)) $(retval)=AQDB_Object_SetFieldString($(db), $(fieldId), $(src)); else $(retval)=AQDB_Object_SetFieldString($(db), $(fieldId), NULL); { const char *s; $(retval)=AQDB_Object_GetFieldString($(db), $(fieldId), &s); if ($(retval)>=0 && s) strncpy($(dst), s, $(maxlen)); } with_hashnum if (*($(src))) GWEN_Buffer_AppendString($(buffer), $(src)); with_hashnum with_hashnum if (*($(src))) { const char *tmp_s; tmp_s=$(src); while (*tmp_s=='0') tmp_s++; if (*tmp_s) GWEN_Buffer_AppendString($(buffer), tmp_s); } NULL const dup const const gwenhywfar-4.15.2beta/tools/typemaker2/types/c/gwen_idlist64.tm20000644000175000017500000000145212364015347021467 00000000000000 GWEN_IDLIST64 $(dst)=$(preset); GWEN_IdList64_free($(src)); $(dst)=$(src); $(dst)=GWEN_IdList64_dup($(src)); NULL NULL const gwenhywfar-4.15.2beta/tools/typemaker2/types/c/char.tm20000644000175000017500000000016712364015347017724 00000000000000 char gwenhywfar-4.15.2beta/tools/typemaker2/types/c/Makefile.in0000644000175000017500000004640412634022416020427 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = tools/typemaker2/types/c DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(dist_typedata_DATA) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(typedatadir)" DATA = $(dist_typedata_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ typedatadir = $(datadir)/gwenhywfar/typemaker2/c dist_typedata_DATA = \ char.tm2 \ char_array.tm2 \ char_ptr.tm2 \ double.tm2 \ int.tm2 \ int_base.tm2 \ gwen_buffer.tm2 \ gwen_date.tm2 \ gwen_idlist64.tm2 \ gwen_time.tm2 \ list1_base.tm2 \ list2_base.tm2 \ struct_base.tm2 \ uint32_t.tm2 \ uint32_t_array.tm2 \ uint64_t.tm2 \ tree_base.tm2 \ idmap_base.tm2 \ gwen_multicache.tm2 \ gwen_multicache_type.tm2 \ uint8_t.tm2 \ uint8_t_array.tm2 \ gwen_bindata.tm2 \ double_array.tm2 \ gwen_stringlist2.tm2 all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tools/typemaker2/types/c/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/typemaker2/types/c/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_typedataDATA: $(dist_typedata_DATA) @$(NORMAL_INSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(typedatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(typedatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typedatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(typedatadir)" || exit $$?; \ done uninstall-dist_typedataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(typedatadir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(typedatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_typedataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_typedataDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dist_typedataDATA install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-dist_typedataDATA sources: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/tools/typemaker2/types/c/double.tm20000644000175000017500000000723612364015347020265 00000000000000 AQDB_DataType_String double $(dst)=$(preset); $(dst)=$(src); $(dst)=$(src); if ($(dst)==$(src)) $(retval)=0; else if ($(src)<$(dst)) $(retval)=-1; else $(retval)=1; { char numbuf[64]; snprintf(numbuf, sizeof(numbuf)-1, "%f", $(src)); numbuf[sizeof(numbuf)-1]=0; GWEN_XMLNode_SetCharValue($(db), "$(name)", numbuf); } { const char *s; s=GWEN_XMLNode_GetCharValue($(db), "$(name)", NULL); if (s) { double v; if (sscanf(s, "%lf", &v)==1) $(dst)=v; else $(dst)=$(default); } else $(dst)=$(default); } { char numbuf[64]; snprintf(numbuf, sizeof(numbuf)-1, "%f", $(src)); numbuf[sizeof(numbuf)-1]=0; $(retval)=GWEN_DB_SetCharValue($(db), GWEN_DB_FLAGS_OVERWRITE_VARS, "$(name)", numbuf); } { const char *s; s=GWEN_DB_GetCharValue($(db), "$(name)", 0, NULL); if (s) { double v; if (sscanf(s, "%lf", &v)==1) $(dst)=v; else $(dst)=$(default); } else $(dst)=$(default); } { char numbuf[64]; snprintf(numbuf, sizeof(numbuf)-1, "%f", $(src)); numbuf[sizeof(numbuf)-1]=0; $(retval)=AQDB_Object_SetFieldString($(db), $(fieldId), numbuf); } { const char *s; $(retval)=AQDB_Object_GetFieldString($(db), $(fieldId), &s); if ($(retval)>=0) { double v; if (sscanf(s, "%lf", &v)==1) $(dst)=v; else $(dst)=0.0; } } { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%f", $(src)); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString($(buffer), numbuf); } 0 0.0 gwenhywfar-4.15.2beta/tools/typemaker2/types/c/uint8_t_array.tm20000644000175000017500000000327712364015347021604 00000000000000 uint8_t memset($(dst), 0, $(maxlen)); $(dst)=$(src); memmove($(dst), $(src), $(maxlen)); if (*($(dst)) && *($(src))) $(retval)=memcmp($(src), $(dst), $(maxlen)); else if ($(src)) $(retval)=1; else if ($(dst)) $(retval)=-1; else $(retval)=0; NULL const dup const const gwenhywfar-4.15.2beta/tools/typemaker2/types/c/list2_base.tm20000644000175000017500000000402012364015347021026 00000000000000 $(dst)=$(preset); $(member_prefix)_free($(src)); $(dst)=$(src); attribute attribute attribute attribute attribute attribute NULL NULL const dup const const gwenhywfar-4.15.2beta/tools/typemaker2/types/c/int_base.tm20000644000175000017500000001237712364015347020601 00000000000000 AQDB_DataType_Int $(dst)=$(preset); $(dst)=$(src); $(dst)=$(src); if ($(dst)==$(src)) $(retval)=0; else if ($(src)<$(dst)) $(retval)=-1; else $(retval)=1; enum attribute enum GWEN_XMLNode_SetCharValue($(db), "$(name)", $(enum_tostring_fn)($(src))); enum attribute enum attribute GWEN_XMLNode_SetProperty($(db), "$(name)", $(enum_tostring_fn)($(src))); enum GWEN_XMLNode_SetIntValue($(db), "$(name)", $(src)); enum attribute enum { const char *s; s=GWEN_XMLNode_GetCharValue($(db), "$(name)", NULL); if (s) $(dst)=$(enum_fromstring_fn)(s); else $(dst)=$(default); } enum attribute enum attribute { const char *s; s=GWEN_XMLNode_GetProperty($(db), "$(name)", NULL); if (s) $(dst)=$(enum_fromstring_fn)(s); else $(dst)=$(default); } enum $(dst)=GWEN_XMLNode_GetIntValue($(db), "$(name)", $(default)); enum enum $(retval)=GWEN_DB_SetCharValue($(db), GWEN_DB_FLAGS_OVERWRITE_VARS, "$(name)", $(enum_tostring_fn)($(src))); enum $(retval)=GWEN_DB_SetIntValue($(db), GWEN_DB_FLAGS_OVERWRITE_VARS, "$(name)", $(src)); enum enum { const char *s; s=GWEN_DB_GetCharValue($(db), "$(name)", 0, NULL); if (s) $(dst)=$(enum_fromstring_fn)(s); else $(dst)=$(default); } enum $(dst)=GWEN_DB_GetIntValue($(db), "$(name)", 0, $(default)); { int64_t v64=(int64_t) ($(src)); $(retval)=AQDB_Object_SetFieldInt64($(db), $(fieldId), v64); } { int64_t v64; $(retval)=AQDB_Object_GetFieldInt64($(db), $(fieldId), &v64); if ($(retval)>=0) $(dst)=(int) v64; } { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", $(src)); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString($(buffer), numbuf); } 0 0 gwenhywfar-4.15.2beta/tools/typemaker2/types/c/double_array.tm20000644000175000017500000000335112364015347021455 00000000000000 double memset($(dst), 0, $(maxlen)*sizeof(double)); $(dst)=$(src); memmove($(dst), $(src), $(maxlen)*sizeof(double)); if (*($(dst)) && *($(src))) $(retval)=memcmp($(src), $(dst), $(maxlen)*sizeof(double)); else if ($(src)) $(retval)=1; else if ($(dst)) $(retval)=-1; else $(retval)=0; NULL const dup const const gwenhywfar-4.15.2beta/tools/typemaker2/types/c/Makefile.am0000644000175000017500000000106012364015347020410 00000000000000 typedatadir=$(datadir)/gwenhywfar/typemaker2/c dist_typedata_DATA=\ char.tm2 \ char_array.tm2 \ char_ptr.tm2 \ double.tm2 \ int.tm2 \ int_base.tm2 \ gwen_buffer.tm2 \ gwen_date.tm2 \ gwen_idlist64.tm2 \ gwen_time.tm2 \ list1_base.tm2 \ list2_base.tm2 \ struct_base.tm2 \ uint32_t.tm2 \ uint32_t_array.tm2 \ uint64_t.tm2 \ tree_base.tm2 \ idmap_base.tm2 \ gwen_multicache.tm2 \ gwen_multicache_type.tm2 \ uint8_t.tm2 \ uint8_t_array.tm2 \ gwen_bindata.tm2 \ double_array.tm2 \ gwen_stringlist2.tm2 sources: gwenhywfar-4.15.2beta/tools/typemaker2/types/c/uint32_t_array.tm20000644000175000017500000000331612364015347021653 00000000000000 uint32_t memset($(dst), 0, ($(maxlen))*4); $(dst)=$(src); memmove($(dst), $(src), ($(maxlen))*4); if (*($(dst)) && *($(src))) $(retval)=memcmp($(src), $(dst), ($(maxlen))*4); else if ($(src)) $(retval)=1; else if ($(dst)) $(retval)=-1; else $(retval)=0; NULL const dup const const gwenhywfar-4.15.2beta/tools/typemaker2/types/c/idmap_base.tm20000644000175000017500000000141712364015347021072 00000000000000 $(dst)=$(preset); $(member_prefix)_free($(src)); $(dst)=$(src); NULL NULL const gwenhywfar-4.15.2beta/tools/typemaker2/types/c/gwen_multicache_type.tm20000644000175000017500000000300212364015347023175 00000000000000 GWEN_MULTICACHE_TYPE GWEN_MultiCache_Type $(dst)=$(preset); $(member_prefix)_free($(src)); $(dst)=$(src); NULL NULL const dup const const gwenhywfar-4.15.2beta/tools/typemaker2/types/c/char_ptr.tm20000644000175000017500000001104112364015347020602 00000000000000 char AQDB_DataType_String $(dst)=$(preset); free($(src)); $(dst)=$(src); $(dst)=strdup($(src)); if ($(dst) && $(src)) $(retval)=strcasecmp($(src), $(dst)); else if ($(src)) $(retval)=1; else if ($(dst)) $(retval)=-1; else $(retval)=0; attribute GWEN_XMLNode_SetCharValue($(db), "$(name)", $(src)); attribute attribute GWEN_XMLNode_SetProperty($(db), "$(name)", $(src)); attribute { const char *s; s=GWEN_XMLNode_GetCharValue($(db), "$(name)", $(default)); if (s) $(dst)=strdup(s); } attribute attribute { const char *s; s=GWEN_XMLNode_GetProperty($(db), "$(name)", $(default)); if (s) $(dst)=strdup(s); } if ($(src)) $(retval)=GWEN_DB_SetCharValue($(db), GWEN_DB_FLAGS_OVERWRITE_VARS, "$(name)", $(src)); else { GWEN_DB_DeleteVar($(db), "$(name)"); $(retval)=0; } { const char *s; s=GWEN_DB_GetCharValue($(db), "$(name)", 0, $(default)); if (s) $(dst)=strdup(s); } if ($(src)) $(retval)=AQDB_Object_SetFieldString($(db), $(fieldId), $(src)); else $(retval)=AQDB_Object_SetFieldString($(db), $(fieldId), NULL); { const char *s; $(retval)=AQDB_Object_GetFieldString($(db), $(fieldId), &s); if ($(retval)>=0 && s) $(dst)=strdup(s); } with_hashnum if ($(src)) GWEN_Buffer_AppendString($(buffer), $(src)); with_hashnum with_hashnum if (($(src))) { const char *tmp_s; tmp_s=$(src); while (*tmp_s=='0') tmp_s++; if (*tmp_s) GWEN_Buffer_AppendString($(buffer), tmp_s); } NULL NULL own const dup const const gwenhywfar-4.15.2beta/tools/typemaker2/types/c/tree_base.tm20000644000175000017500000000401712364015347020736 00000000000000 $(dst)=$(preset); $(member_prefix)_free($(src)); $(dst)=$(src); attribute attribute attribute attribute attribute attribute NULL NULL const dup const const gwenhywfar-4.15.2beta/tools/typemaker2/types/c/gwen_buffer.tm20000644000175000017500000000770412364015347021304 00000000000000 GWEN_BUFFER AQDB_DataType_Bin $(dst)=$(preset); GWEN_Buffer_free($(src)); $(dst)=$(src); $(dst)=GWEN_Buffer_dup($(src)); if ($(dst) && $(src)) $(retval)=0; else if ($(src)) $(retval)=1; else if ($(dst)) $(retval)=-1; else $(retval)=0; if ($(src)) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, GWEN_Buffer_GetUsedBytes($(src))*2, 0, 1); GWEN_Text_ToHexBuffer(GWEN_Buffer_GetStart($(src)), GWEN_Buffer_GetUsedBytes($(src)), tbuf, 0, 0, 0); GWEN_XMLNode_SetCharValue($(db), "$(name)", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } { const char *s; s=GWEN_XMLNode_GetCharValue($(db), "$(name)", $(default)); if (s) { $(dst)=GWEN_Buffer_new(0, strlen(s)/2, 0, 1); GWEN_Text_FromHexBuffer(s, $(dst)); } } if ($(src)) $(retval)=GWEN_DB_SetBinValue($(db), GWEN_DB_FLAGS_OVERWRITE_VARS, "$(name)", GWEN_Buffer_GetStart($(src)), GWEN_Buffer_GetUsedBytes($(src))); else { GWEN_DB_DeleteVar($(db), "$(name)"); $(retval)=0; } { const uint8_t *ptr; uint32_t len; ptr=GWEN_DB_GetBinValue($(db), "$(name)", 0, NULL, 0, &len); if (ptr && len) { $(dst)=GWEN_Buffer_new(0, len, 0, 1); GWEN_Buffer_AppendBytes($(dst), (const char*)ptr, len); } } if ($(src)) { $(retval)=AQDB_Object_SetField($(db), $(fieldId), (const uint8_t*) GWEN_Buffer_GetStart($(src)), GWEN_Buffer_GetUsedBytes($(src))); } else $(retval)=AQDB_Object_SetField($(db), $(fieldId), NULL, 0); { uint8_t *p; uint32_t len; $(retval)=AQDB_Object_GetField($(db), $(fieldId), &p, &len); if ($(retval)>=0 && p && len) { $(dst)=GWEN_Buffer_new(0, len, 0, 1); GWEN_Buffer_AppendBytes($(dst), (const char*) p, len); } } NULL NULL own const dup const const gwenhywfar-4.15.2beta/tools/typemaker2/types/c/int.tm20000644000175000017500000000016512364015347017577 00000000000000 int gwenhywfar-4.15.2beta/tools/typemaker2/types/c/list1_base.tm20000644000175000017500000001057112364015347021035 00000000000000 $(dst)=$(preset); $(member_prefix)_free($(src)); $(dst)=$(src); $(dst)=$(member_prefix)_dup($(src)); { GWEN_XMLNODE *dbDest; $(member_basetype_type) *elem; dbDest=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "$(name)"); elem=$(member_prefix)_First($(src)); while(elem) { GWEN_XMLNODE *dbElem; dbElem=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "element"); assert(dbElem); $(member_basetype_prefix)_toXml(elem, dbElem); GWEN_XMLNode_AddChild(dbDest, dbElem); elem=$(member_prefix)_Next(elem); } GWEN_XMLNode_AddChild($(db), dbDest); } { GWEN_XMLNODE *dbSource; dbSource=GWEN_XMLNode_FindFirstTag($(db), "$(name)", NULL, NULL); if (dbSource) { $(member_type) *t; GWEN_XMLNODE *dbT; t=$(member_prefix)_new(); dbT=GWEN_XMLNode_FindFirstTag(dbSource, "element", NULL, NULL); while(dbT) { $(member_basetype_type) *elem; elem=$(member_basetype_prefix)_fromXml(dbT); if (elem) $(member_prefix)_Add(elem, t); dbT=GWEN_XMLNode_FindNextTag(dbT, "element", NULL, NULL); } $(dst)=t; } else $(dst)=$(preset); } { GWEN_DB_NODE *dbDest; $(member_basetype_type) *elem; $(retval)=0; dbDest=GWEN_DB_GetGroup($(db), GWEN_DB_FLAGS_OVERWRITE_GROUPS, "$(name)"); assert(dbDest); elem=$(member_prefix)_First($(src)); while(elem) { GWEN_DB_NODE *dbElem; dbElem=GWEN_DB_GetGroup(dbDest, GWEN_PATH_FLAGS_CREATE_GROUP, "element"); assert(dbElem); $(retval)=$(member_basetype_prefix)_toDb(elem, dbElem); if ($(retval)<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", $(retval)); break; } elem=$(member_prefix)_Next(elem); } } { GWEN_DB_NODE *dbSource; dbSource=GWEN_DB_GetGroup($(db), GWEN_PATH_FLAGS_NAMEMUSTEXIST, "$(name)"); if (dbSource) { $(member_type) *t; GWEN_DB_NODE *dbT; t=$(member_prefix)_new(); dbT=GWEN_DB_FindFirstGroup(dbSource, "element"); while(dbT) { $(member_basetype_type) *elem; elem=$(member_basetype_prefix)_fromDb(dbT); if (elem) $(member_prefix)_Add(elem, t); dbT=GWEN_DB_FindNextGroup(dbT, "element"); } $(dst)=t; } else $(dst)=$(preset); } NULL NULL const dup const const gwenhywfar-4.15.2beta/tools/typemaker2/types/Makefile.in0000644000175000017500000005525712634022416020213 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = tools/typemaker2/types DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ SUBDIRS = c all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tools/typemaker2/types/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/typemaker2/types/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am sources: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/tools/typemaker2/types/Makefile.am0000644000175000017500000000002412364015347020165 00000000000000SUBDIRS=c sources: gwenhywfar-4.15.2beta/tools/typemaker2/tm_item.h0000644000175000017500000000371612364015347016607 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_item.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef TM_ITEM_H #define TM_ITEM_H #ifdef __cplusplus extern "C" { #endif /* needed system headers */ #include #include #include #include typedef struct TYPEMAKER2_ITEM TYPEMAKER2_ITEM; GWEN_LIST_FUNCTION_DEFS(TYPEMAKER2_ITEM, Typemaker2_Item) GWEN_LIST2_FUNCTION_DEFS(TYPEMAKER2_ITEM, Typemaker2_Item) /** Constructor. */ TYPEMAKER2_ITEM *Typemaker2_Item_new(void); /** Destructor. */ void Typemaker2_Item_free(TYPEMAKER2_ITEM *p_struct); TYPEMAKER2_ITEM *Typemaker2_Item_dup(const TYPEMAKER2_ITEM *p_struct); TYPEMAKER2_ITEM *Typemaker2_Item_copy(TYPEMAKER2_ITEM *p_struct, const TYPEMAKER2_ITEM *p_src); /** Getter. * Use this function to get the member "name" */ const char *Typemaker2_Item_GetName(const TYPEMAKER2_ITEM *p_struct); /** Getter. * Use this function to get the member "value" */ const char *Typemaker2_Item_GetValue(const TYPEMAKER2_ITEM *p_struct); /** Setter. * Use this function to set the member "name" */ void Typemaker2_Item_SetName(TYPEMAKER2_ITEM *p_struct, const char *p_src); /** Setter. * Use this function to set the member "value" */ void Typemaker2_Item_SetValue(TYPEMAKER2_ITEM *p_struct, const char *p_src); TYPEMAKER2_ITEM_LIST *Typemaker2_Item_List_dup(const TYPEMAKER2_ITEM_LIST *p_src); void Typemaker2_Item_ReadXml(TYPEMAKER2_ITEM *p_struct, GWEN_XMLNODE *p_db); void Typemaker2_Item_WriteXml(const TYPEMAKER2_ITEM *p_struct, GWEN_XMLNODE *p_db); void Typemaker2_Item_toXml(const TYPEMAKER2_ITEM *p_struct, GWEN_XMLNODE *p_db); TYPEMAKER2_ITEM *Typemaker2_Item_fromXml(GWEN_XMLNODE *p_db); #ifdef __cplusplus } #endif #endif gwenhywfar-4.15.2beta/tools/typemaker2/tm_define.xml0000644000175000017500000000522612364015347017452 00000000000000 TYPEMAKER2_DEFINE Typemaker2_Define tm_define with_list1 with_xml
tm_item.h
NULL NULL public own attribute const dup const NULL NULL public own attribute const dup const NULL NULL public own attribute const dup const NULL Typemaker2_Item_List_new() public own volatile const dup none Typemaker2_Define_Mode_Unknown Typemaker2_Define_Mode_Unknown public attribute enum none none 0 0 public attribute none none 0 0 public volatile none none
gwenhywfar-4.15.2beta/tools/typemaker2/README0000644000175000017500000000457212364015347015661 00000000000000 TEST Test with_db with_xml with_object with_list1 with_list2 with_inherit with_idmap
gwenhywfar/types.h
test/user.h
test_l.h
0 0 library volatile NULL NULL public own const dup const NULL NULL public own const dup const NULL NULL protected own nodup const dup const NULL NULL private own const dup const Test_Enum_Mode_Unknown Test_Enum_Mode_Unknown public attribute enum none none
gwenhywfar-4.15.2beta/tools/typemaker2/tm_signal.c0000644000175000017500000001554412364015347017123 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_signal.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_signal_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(TYPEMAKER2_SIGNAL, Typemaker2_Signal) GWEN_LIST2_FUNCTIONS(TYPEMAKER2_SIGNAL, Typemaker2_Signal) TYPEMAKER2_SIGNAL *Typemaker2_Signal_new(void) { TYPEMAKER2_SIGNAL *p_struct; GWEN_NEW_OBJECT(TYPEMAKER2_SIGNAL, p_struct) GWEN_LIST_INIT(TYPEMAKER2_SIGNAL, p_struct) /* members */ p_struct->name=NULL; p_struct->paramType1=NULL; p_struct->paramType2=NULL; p_struct->flags=0; /* virtual functions */ return p_struct; } void Typemaker2_Signal_free(TYPEMAKER2_SIGNAL *p_struct) { if (p_struct) { GWEN_LIST_FINI(TYPEMAKER2_SIGNAL, p_struct) /* members */ free(p_struct->name); free(p_struct->paramType1); free(p_struct->paramType2); GWEN_FREE_OBJECT(p_struct); } } TYPEMAKER2_SIGNAL *Typemaker2_Signal_dup(const TYPEMAKER2_SIGNAL *p_src) { TYPEMAKER2_SIGNAL *p_struct; assert(p_src); p_struct=Typemaker2_Signal_new(); /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; } if (p_src->name) { p_struct->name=strdup(p_src->name); } /* member "paramType1" */ if (p_struct->paramType1) { free(p_struct->paramType1); p_struct->paramType1=NULL; } if (p_src->paramType1) { p_struct->paramType1=strdup(p_src->paramType1); } /* member "paramType2" */ if (p_struct->paramType2) { free(p_struct->paramType2); p_struct->paramType2=NULL; } if (p_src->paramType2) { p_struct->paramType2=strdup(p_src->paramType2); } /* member "flags" */ p_struct->flags=p_src->flags; return p_struct; } TYPEMAKER2_SIGNAL *Typemaker2_Signal_copy(TYPEMAKER2_SIGNAL *p_struct, const TYPEMAKER2_SIGNAL *p_src) { assert(p_struct); assert(p_src); /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; } if (p_src->name) { p_struct->name=strdup(p_src->name); } /* member "paramType1" */ if (p_struct->paramType1) { free(p_struct->paramType1); p_struct->paramType1=NULL; } if (p_src->paramType1) { p_struct->paramType1=strdup(p_src->paramType1); } /* member "paramType2" */ if (p_struct->paramType2) { free(p_struct->paramType2); p_struct->paramType2=NULL; } if (p_src->paramType2) { p_struct->paramType2=strdup(p_src->paramType2); } /* member "flags" */ p_struct->flags=p_src->flags; return p_struct; } const char *Typemaker2_Signal_GetName(const TYPEMAKER2_SIGNAL *p_struct) { assert(p_struct); return p_struct->name; } const char *Typemaker2_Signal_GetParamType1(const TYPEMAKER2_SIGNAL *p_struct) { assert(p_struct); return p_struct->paramType1; } const char *Typemaker2_Signal_GetParamType2(const TYPEMAKER2_SIGNAL *p_struct) { assert(p_struct); return p_struct->paramType2; } uint32_t Typemaker2_Signal_GetFlags(const TYPEMAKER2_SIGNAL *p_struct) { assert(p_struct); return p_struct->flags; } void Typemaker2_Signal_SetName(TYPEMAKER2_SIGNAL *p_struct, const char *p_src) { assert(p_struct); if (p_struct->name) { free(p_struct->name); } if (p_src) { p_struct->name=strdup(p_src); } else { p_struct->name=NULL; } } void Typemaker2_Signal_SetParamType1(TYPEMAKER2_SIGNAL *p_struct, const char *p_src) { assert(p_struct); if (p_struct->paramType1) { free(p_struct->paramType1); } if (p_src) { p_struct->paramType1=strdup(p_src); } else { p_struct->paramType1=NULL; } } void Typemaker2_Signal_SetParamType2(TYPEMAKER2_SIGNAL *p_struct, const char *p_src) { assert(p_struct); if (p_struct->paramType2) { free(p_struct->paramType2); } if (p_src) { p_struct->paramType2=strdup(p_src); } else { p_struct->paramType2=NULL; } } void Typemaker2_Signal_SetFlags(TYPEMAKER2_SIGNAL *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags=p_src; } void Typemaker2_Signal_AddFlags(TYPEMAKER2_SIGNAL *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags|=p_src; } void Typemaker2_Signal_SubFlags(TYPEMAKER2_SIGNAL *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags&=~p_src; } TYPEMAKER2_SIGNAL_LIST *Typemaker2_Signal_List_dup(const TYPEMAKER2_SIGNAL_LIST *p_src) { TYPEMAKER2_SIGNAL_LIST *p_dest; TYPEMAKER2_SIGNAL *p_elem; assert(p_src); p_dest=Typemaker2_Signal_List_new(); p_elem=Typemaker2_Signal_List_First(p_src); while(p_elem) { TYPEMAKER2_SIGNAL *p_cpy; p_cpy=Typemaker2_Signal_dup(p_elem); Typemaker2_Signal_List_Add(p_cpy, p_dest); p_elem=Typemaker2_Signal_List_Next(p_elem); } return p_dest; } void Typemaker2_Signal_ReadXml(TYPEMAKER2_SIGNAL *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "name" */ if (p_struct->name) { free(p_struct->name); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "name", NULL); if (s) p_struct->name=strdup(s); } if (p_struct->name==NULL) { /* member "name" is volatile, just presetting */ p_struct->name=NULL; } /* member "paramType1" */ if (p_struct->paramType1) { free(p_struct->paramType1); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "paramType1", NULL); if (s) p_struct->paramType1=strdup(s); } if (p_struct->paramType1==NULL) { /* member "paramType1" is volatile, just presetting */ p_struct->paramType1=NULL; } /* member "paramType2" */ if (p_struct->paramType2) { free(p_struct->paramType2); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "paramType2", NULL); if (s) p_struct->paramType2=strdup(s); } if (p_struct->paramType2==NULL) { /* member "paramType2" is volatile, just presetting */ p_struct->paramType2=NULL; } /* member "flags" */ p_struct->flags=GWEN_XMLNode_GetIntValue(p_db, "flags", 0); } void Typemaker2_Signal_WriteXml(const TYPEMAKER2_SIGNAL *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "name" */ GWEN_XMLNode_SetProperty(p_db, "name", p_struct->name); /* member "paramType1" */ GWEN_XMLNode_SetProperty(p_db, "paramType1", p_struct->paramType1); /* member "paramType2" */ GWEN_XMLNode_SetProperty(p_db, "paramType2", p_struct->paramType2); /* member "flags" */ GWEN_XMLNode_SetIntValue(p_db, "flags", p_struct->flags); } void Typemaker2_Signal_toXml(const TYPEMAKER2_SIGNAL *p_struct, GWEN_XMLNODE *p_db) { Typemaker2_Signal_WriteXml(p_struct, p_db); } TYPEMAKER2_SIGNAL *Typemaker2_Signal_fromXml(GWEN_XMLNODE *p_db) { TYPEMAKER2_SIGNAL *p_struct; p_struct=Typemaker2_Signal_new(); Typemaker2_Signal_ReadXml(p_struct, p_db); return p_struct; } /* code headers */ gwenhywfar-4.15.2beta/tools/Makefile.in0000644000175000017500000005533712634022416014763 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = tools DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ SUBDIRS = xmlmerge typemaker typemaker2 gcttool gsa all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tools/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am sources: for d in $(SUBDIRS); do \ make -C $$d sources; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/tools/Makefile.am0000644000175000017500000000016712364015347014746 00000000000000SUBDIRS=xmlmerge typemaker typemaker2 gcttool gsa sources: for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-4.15.2beta/README.DARWIN0000644000175000017500000000031712364015347013412 00000000000000 Currently Darwin does not handle the "__attribute__ ((constructor))" entries in C files as it seems, so in your programs on Darwin you will have to call GWEN_Init() yourself before doing anything else... gwenhywfar-4.15.2beta/admin/0000755000175000017500000000000012643267233012721 500000000000000gwenhywfar-4.15.2beta/admin/mklistdoc.c0000644000175000017500000003401112560445316014773 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Fri Jun 02 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #define MAX_LINESIZE 8192 typedef struct MACRO_DEF MACRO_DEF; struct MACRO_DEF { char *macroName; char *tmplFileName; char *fileSuffix; }; typedef struct MACRO_STRUCT MACRO_STRUCT; struct MACRO_STRUCT { MACRO_STRUCT *next; MACRO_DEF *macroDef; char *typeName; char *typePrefix; }; MACRO_DEF macroDefs[]= { { "GWEN_LIST2_FUNCTION_DEFS", "list2.tmpl", "_list2p" }, { "GWEN_LIST2_FUNCTION_LIB_DEFS", "list2.tmpl", "_list2" }, { "GWEN_CONSTLIST2_FUNCTION_DEFS", "list2.tmpl", "_constlist2p" }, { "GWEN_CONSTLIST2_FUNCTION_LIB_DEFS", "list2.tmpl", "_constlist2" }, { "GWEN_LIST_FUNCTION_DEFS", "list1.tmpl", "_listp" }, { "GWEN_LIST_FUNCTION_LIB_DEFS", "list1.tmpl", "_list" }, { "GWEN_CONSTLIST_FUNCTION_DEFS", "list1.tmpl", "_constlistp" }, { "GWEN_CONSTLIST_FUNCTION_LIB_DEFS", "list1.tmpl", "_constlist" }, { 0, 0, 0 } }; #define MODE_CHECKONLY 1 #define MODE_WRITEHEADER 2 #define MODE_WRITESTDOUT 3 const char *templatePath=GWEN_HEADERS; int mode=MODE_WRITESTDOUT; int verbosity=0; MACRO_STRUCT *MacroStruct_new(MACRO_DEF *macroDef, const char *typeName, const char *typePrefix) { MACRO_STRUCT *m; m=(MACRO_STRUCT*)malloc(sizeof(MACRO_STRUCT)); memset(m, 0, sizeof(MACRO_STRUCT)); m->macroDef=macroDef; if (typeName) m->typeName=strdup(typeName); if (typePrefix) m->typePrefix=strdup(typePrefix); return m; } void MacroStruct_free(MACRO_STRUCT *m) { if (m) { free(m->typeName); free(m->typePrefix); free(m); } } int scanLine(MACRO_DEF *macroDef, char *buffer, MACRO_STRUCT **m) { char *p; char *macroBegin; p=strstr(buffer, macroDef->macroName); if (p) { /* found something, search for opening bracket */ macroBegin=p; p+=strlen(macroDef->macroName); while(*p && isspace((int)*p)) p++; if (*p && *p!='(') return -1; while(*p) { if (*p=='(') { char *typeName; char *typeNameEnd; char *typePrefix; char *typePrefixEnd; typeName=typePrefix=0; typeNameEnd=typePrefixEnd=0; /* found it, now read the typename */ p++; while(*p && isspace((int)*p)) p++; typeName=p; /* find comma */ while(*p) { if (*p==',') { /* found it, name ends here */ if (!typeNameEnd) typeNameEnd=p; p++; while(*p && isspace((int)*p)) p++; typePrefix=p; /* find closing bracket */ while(*p) { if (*p==')' || *p==',') { MACRO_STRUCT *lm; MACRO_STRUCT *sm; char *s; char c1, c2; /* found it, now all is complete */ if (!typePrefixEnd) typePrefixEnd=p; /* check whether this is a definition */ s=buffer; while(*s && isspace((int)*s)) s++; if (*s=='#') { s++; /* preprocessor command, check for define */ while(*s && isspace((int)*s)) s++; if (strncasecmp(s, "define ", 7)==0) { s+=7; /* it is a define, now check if the next nonblank is * the beginning of this macro */ while(*s && isspace((int)*s)) s++; if (s==macroBegin) { if (verbosity>1) fprintf(stderr, "Found definition for macro \"%s\".\n", macroDef->macroName); return -1; } } } c1=*typePrefixEnd; c2=*typeNameEnd; *typePrefixEnd=0; *typeNameEnd=0; sm=*m; while(sm) { if (strcmp(sm->macroDef->macroName, macroDef->macroName)==0) if (strcmp(sm->typeName, typeName)==0) /* already exists */ break; sm=sm->next; } if (!sm) { /* macro is new, store it */ lm=MacroStruct_new(macroDef, typeName, typePrefix); *typePrefixEnd=c1; *typeNameEnd=c2; if (*m==0) *m=lm; else { lm->next=*m; *m=lm; } if (verbosity>1) fprintf(stderr, "Found macro \"%s\" (%s, %s)\n", lm->macroDef->macroName, lm->typeName, lm->typePrefix); } return 0; } else if (isspace((int)*p)) { if (!typePrefixEnd) typePrefixEnd=p; } else { if (typePrefixEnd) return -1; } p++; } /* closing bracket missing, probably need more data... */ return 1; } else if (isspace((int)*p)) { if (!typeNameEnd) typeNameEnd=p; } else { if (typeNameEnd) return -1; } p++; } /* comma missing, probably need more data... */ return 1; } p++; } /* opening bracket missing, probably need more data... */ return 1; } /* macro not found in this line */ return -1; } int scanLineForAllMacros(char *buffer, MACRO_STRUCT **m) { int i; for (i=0; ; i++) { if (macroDefs[i].macroName==0) return 0; if (scanLine(¯oDefs[i], buffer, m)==1) return 1; } return 0; } MACRO_STRUCT *scanForMacros(const char *fname) { FILE *f; MACRO_STRUCT *mst; char buffer[MAX_LINESIZE]; int line; char *p; mst=0; line=0; if (verbosity) fprintf(stderr, "Reading file \"%s\"\n", fname); f=fopen(fname, "r"); if (!f) { fprintf(stderr, "fopen(%s): %s\n", fname, strerror(errno)); return 0; } buffer[0]=0; buffer[sizeof(buffer)-1]=0; while(!feof(f)) { int sl; int rv; line++; if (verbosity>3) fprintf(stderr, "Reading line %d\n", line); /* read line */ if (buffer[0]==0) { p=fgets(buffer, sizeof(buffer)-1, f); } else { int sizeLeft; if (verbosity>3) fprintf(stderr, "Multi-line macro (%d)\n", line); sl=strlen(buffer); sizeLeft=(sizeof(buffer)-1)-sl; if (sizeLeft<2) { fprintf(stderr, "Line %d: Line full, macro too long\n", line); fclose(f); return 0; } strcat(buffer, " "); p=fgets(buffer+sl+1, sizeLeft, f); } if (!p) { if (ferror(f)) { fprintf(stderr, "fread(%s): %s\n", fname, strerror(errno)); fclose(f); return 0; } else /* simple eof */ break; } sl=strlen(buffer); if (buffer[sl-1]=='\n') buffer[--sl]=0; if (buffer[sl-1]=='\\') { buffer[--sl]=0; } else { /* now check for macros */ rv=scanLineForAllMacros(buffer, &mst); if (rv!=1) /* no more data needed */ buffer[0]=0; } } /* while */ fclose(f); return mst; } int transformF(FILE *inFile, FILE *outFile, const char *outFileName, MACRO_STRUCT *m) { char *p; char buffer[MAX_LINESIZE]; int didIt; while(!feof(inFile)) { char *vname; int sl; /* read line */ p=fgets(buffer, sizeof(buffer)-1, inFile); if (!p) { if (ferror(inFile)) { fprintf(stderr, "fread(): %s\n", strerror(errno)); return 0; } else /* simple eof */ break; } sl=strlen(buffer); if (buffer[sl-1]=='\n') buffer[--sl]=0; vname=0; p=buffer; while(*p) { while(*p && *p!='@') { if (EOF==fputc(*p, outFile)) { fprintf(stderr, "fputc(): %s (1)\n", strerror(errno)); return 2; } p++; } didIt=0; if (*p=='@') { char *psave; /* got a var... */ psave=p; p++; vname=p; while(*p && *p!='@') p++; if (*p=='@') { char c; const char *replacement; /* got it */ c=*p; *p=0; if (strcmp(vname, "TYPENAME")==0) replacement=m->typeName; else if (strcmp(vname, "FN_PREFIX")==0) replacement=m->typePrefix; else if (strcmp(vname, "FILENAME")==0) replacement=outFileName; else { /* not a var */ replacement=0; } *p=c; p++; if (replacement) { if (fprintf(outFile, "%s", replacement)<1) { fprintf(stderr, "fprintf(): %s\n", strerror(errno)); return 2; } didIt=1; } else { /* write the original data */ p=psave; } } else /* write the original data */ p=psave; } if (!didIt) { if (*p) { if (EOF==fputc(*p, outFile)) { fprintf(stderr, "fputc(): %s\n", strerror(errno)); return 2; } p++; } } } /* while line */ fprintf(outFile, "\n"); } /* while */ return 0; } int transform(const char *inFile, const char *outFile, MACRO_STRUCT *m) { FILE *f1; FILE *f2; int rv; f1=fopen(inFile, "r"); if (!f1) { fprintf(stderr, "fopen(%s, \"r\"): %s\n", inFile, strerror(errno)); return 2; } if (outFile==0) { f2=stdout; rv=transformF(f1, f2, "(stdout)", m); } else { f2=fopen(outFile, "w+"); if (!f2) { fprintf(stderr, "fopen(%s, \"w+\"): %s\n", outFile, strerror(errno)); fclose(f1); return 2; } rv=transformF(f1, f2, outFile, m); } if (outFile!=0) { if (fclose(f2)) { fprintf(stderr, "fclose(%s): %s\n", outFile, strerror(errno)); fclose(f1); return 2; } } if (fclose(f1)) { fprintf(stderr, "fclose(%s): %s\n", inFile, strerror(errno)); return 2; } return rv; } int processFile(const char *fname) { MACRO_STRUCT *m; m=scanForMacros(fname); if (m) { /* do something with the macros */ if (mode==MODE_WRITESTDOUT) { MACRO_STRUCT *cm; cm=m; while(cm) { int rv; char tmplBuffer[256]; rv=snprintf(tmplBuffer, sizeof(tmplBuffer), "%s/%s", templatePath, cm->macroDef->tmplFileName); if (rv<1 || rv>=sizeof(tmplBuffer)) { fprintf(stderr, "Internal error: buffer too small [processFile]\n"); return 3; } rv=transform(tmplBuffer, 0, cm); if (rv) { fprintf(stderr, "Error transforming template file.\n"); return rv; } cm=cm->next; } } } return 0; } int main(int argc, char **argv) { int i = 1; int wantHelp; wantHelp=0; if (argc<2) { wantHelp=1; } else { i=1; while(i=argc) { fprintf(stderr, "Argument missing for -I\n"); return 1; } templatePath=argv[i]; } else if (strcmp(argv[i], "-v")==0) { verbosity++; } else if (strcmp(argv[i], "-h")==0 || strcmp(argv[i], "--help")==0) { wantHelp=1; } else if (strcmp(argv[i], "--doc")==0) { /* only generate header */ mode=MODE_WRITEHEADER; } else if (strcmp(argv[i], "--stdout")==0) { /* write all headers to stdout instead of creating one header per * input */ mode=MODE_WRITESTDOUT; } else break; i++; } } if (wantHelp) { fprintf(stderr, "MkListDoc (c) 2004 Martin Preuss\n" "Part of Gwenhywfar " GWENHYWFAR_VERSION_FULL_STRING "\n" "This tool is licensed under the LGPL (see COPYING in\n" "toplevel source folder).\n" "MkListDoc expands GWEN_LIST macros and creates a suitable\n" "header file for every encounterd list definition macro.\n" "Example:\n" "You are using GWEN_LIST2 macros to manage list of some objects:\n" " GWEN_LIST2_FUNCTION_DEFS(TYPE_SOMETHING, TypeSomething);\n" "The list is now available but not documented by Doxygen.\n" "This tool now creates output that can then be fed to doxygen\n" "to create appropriate API documentation.\n" "\n" "Usage: %s [OPTIONS] file1 file2 ... fileN\n" "Options are:\n" "-v increases the verbosity level\n" "-I path to GWEN include headers\n" "Output is sent to stdout.\n", argv[0]); return 0; } if (i>=argc) { /* no input ? */ fprintf(stderr, "No input files.\n"); return 1; } while(i&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = mklistdoc$(EXEEXT) subdir = admin DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/m4/ssl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_mklistdoc_OBJECTS = mklistdoc.$(OBJEXT) mklistdoc_OBJECTS = $(am_mklistdoc_OBJECTS) mklistdoc_LDADD = $(LDADD) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(mklistdoc_SOURCES) DIST_SOURCES = $(mklistdoc_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ QT4_BINDIR = @QT4_BINDIR@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ rt_libs = @rt_libs@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ ssl_includes = @ssl_includes@ ssl_lib = @ssl_lib@ ssl_libraries = @ssl_libraries@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = @all_includes@ AM_CFLAGS = -DGWEN_HEADERS=\"$(gwenhywfar_headerdir_am)/gwenhywfar\" mklistdoc_SOURCES = mklistdoc.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu admin/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu admin/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list mklistdoc$(EXEEXT): $(mklistdoc_OBJECTS) $(mklistdoc_DEPENDENCIES) $(EXTRA_mklistdoc_DEPENDENCIES) @rm -f mklistdoc$(EXEEXT) $(AM_V_CCLD)$(LINK) $(mklistdoc_OBJECTS) $(mklistdoc_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mklistdoc.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS sources: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwenhywfar-4.15.2beta/admin/Makefile.am0000644000175000017500000000023612364015347014673 00000000000000INCLUDES=@all_includes@ AM_CFLAGS = -DGWEN_HEADERS=\"$(gwenhywfar_headerdir_am)/gwenhywfar\" bin_PROGRAMS=mklistdoc mklistdoc_SOURCES=mklistdoc.c sources: gwenhywfar-4.15.2beta/configure.ac0000644000175000017500000011735512634022401014035 00000000000000# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. # ###------------------------------------------------------------------------- # # The following line makes sure that this file is always touched when a new # revision is checked out. # # $Rev$ # # info GWENHYWFAR_AUTHOR="Martin Preuss" GWENHYWFAR_BUGREPORT_ADDR="" AC_PREREQ(2.60) AC_INIT AC_CANONICAL_BUILD AC_CANONICAL_HOST AC_CONFIG_SRCDIR([src/gwenhywfarapi.h]) AC_CONFIG_HEADERS([config.h]) ###------------------------------------------------------------------------- # # versions # GWENHYWFAR_VERSION_MAJOR=4 GWENHYWFAR_VERSION_MINOR=15 GWENHYWFAR_VERSION_PATCHLEVEL=2 GWENHYWFAR_VERSION_BUILD=0 dnl "stable", "rcX", "betaX", "cvs" GWENHYWFAR_VERSION_TAG="beta" ###------------------------------------------------------------------------- # # SO version for Gwenhywfar # GWENHYWFAR_SO_CURRENT="75" GWENHYWFAR_SO_AGE="15" GWENHYWFAR_SO_REVISION="2" GWENHYWFAR_SO_EFFECTIVE="`echo \$(($GWENHYWFAR_SO_CURRENT-$GWENHYWFAR_SO_AGE))`" ###------------------------------------------------------------------------- # # Generate version strings and BUILD # #GWENHYWFAR_VERSION_BUILD="0" # Let svn write the revision number directly into here on # each svn update. Note: The trailing space is necessary for # cvs versions. #GWENHYWFAR_VERSION_BUILD=`echo "$Rev$ " | cut -d' ' -f2` #if test "x$GWENHYWFAR_VERSION_BUILD" = "x" ; then # GWENHYWFAR_VERSION_BUILD="0" #fi GWENHYWFAR_VERSION_FULL_STRING="$GWENHYWFAR_VERSION_MAJOR.$GWENHYWFAR_VERSION_MINOR.${GWENHYWFAR_VERSION_PATCHLEVEL}${GWENHYWFAR_VERSION_TAG}-${GWENHYWFAR_VERSION_BUILD}" GWENHYWFAR_VERSION_STRING="$GWENHYWFAR_VERSION_MAJOR.$GWENHYWFAR_VERSION_MINOR.$GWENHYWFAR_VERSION_PATCHLEVEL" # The version number for the plugin/ct/ohbci/ohbci.la OHBCI_VERSION_STRING="0.1.0" ###------------------------------------------------------------------------- # # Create release strings # case "$GWENHYWFAR_VERSION_TAG" in cvs|svn|git) GWENHYWFAR_VERSION_RELEASE_STRING="$GWENHYWFAR_VERSION_MAJOR.$GWENHYWFAR_VERSION_MINOR.$GWENHYWFAR_VERSION_PATCHLEVEL.r${GWENHYWFAR_VERSION_BUILD}" ;; stable) GWENHYWFAR_VERSION_RELEASE_STRING="$GWENHYWFAR_VERSION_MAJOR.$GWENHYWFAR_VERSION_MINOR.$GWENHYWFAR_VERSION_PATCHLEVEL" ;; *) GWENHYWFAR_VERSION_RELEASE_STRING="$GWENHYWFAR_VERSION_MAJOR.$GWENHYWFAR_VERSION_MINOR.$GWENHYWFAR_VERSION_PATCHLEVEL" # add TAG GWENHYWFAR_VERSION_RELEASE_STRING="${GWENHYWFAR_VERSION_RELEASE_STRING}${GWENHYWFAR_VERSION_TAG}" ;; esac AC_SUBST(GWENHYWFAR_VERSION_MAJOR) AC_SUBST(GWENHYWFAR_VERSION_MINOR) AC_SUBST(GWENHYWFAR_VERSION_PATCHLEVEL) AC_SUBST(GWENHYWFAR_VERSION_BUILD) AC_SUBST(GWENHYWFAR_VERSION_TAG) AC_SUBST(GWENHYWFAR_VERSION_FULL_STRING) AC_SUBST(GWENHYWFAR_VERSION_STRING) AC_SUBST(GWENHYWFAR_VERSION_RELEASE_STRING) AC_SUBST(OHBCI_VERSION_STRING) AC_DEFINE_UNQUOTED(GWENHYWFAR_VERSION_MAJOR,$GWENHYWFAR_VERSION_MAJOR, [major version]) AC_DEFINE_UNQUOTED(GWENHYWFAR_VERSION_MINOR,$GWENHYWFAR_VERSION_MINOR, [minor version]) AC_DEFINE_UNQUOTED(GWENHYWFAR_VERSION_PATCHLEVEL,$GWENHYWFAR_VERSION_PATCHLEVEL, [patchlevel]) AC_DEFINE_UNQUOTED(GWENHYWFAR_VERSION_BUILD,$GWENHYWFAR_VERSION_BUILD, [build]) AC_DEFINE_UNQUOTED(GWENHYWFAR_VERSION_STRING,"$GWENHYWFAR_VERSION_STRING", [version string]) AC_DEFINE_UNQUOTED(GWENHYWFAR_VERSION_FULL_STRING,"$GWENHYWFAR_VERSION_FULL_STRING", [full version string]) AC_DEFINE_UNQUOTED(GWENHYWFAR_VERSION_TAG,$GWENHYWFAR_VERSION_TAG, [tag]) AC_SUBST(GWENHYWFAR_SO_CURRENT) AC_SUBST(GWENHYWFAR_SO_REVISION) AC_SUBST(GWENHYWFAR_SO_AGE) AC_SUBST(GWENHYWFAR_SO_EFFECTIVE) AM_INIT_AUTOMAKE(gwenhywfar, $GWENHYWFAR_VERSION_RELEASE_STRING) ###------------------------------------------------------------------------- # # SO version for GwenUI # GWENUI_SO_CURRENT="1" GWENUI_SO_REVISION="1" GWENUI_SO_AGE="0" GWENUI_SO_EFFECTIVE="`echo \$(($GWENUI_SO_CURRENT-$GWENUI_SO_AGE))`" AC_SUBST(GWENUI_SO_CURRENT) AC_SUBST(GWENUI_SO_REVISION) AC_SUBST(GWENUI_SO_AGE) AC_SUBST(GWENUI_SO_EFFECTIVE) ###------------------------------------------------------------------------- # # SO version for GwenPP # GWENPP_SO_CURRENT="16" GWENPP_SO_REVISION="0" GWENPP_SO_AGE="0" GWENPP_SO_EFFECTIVE="`echo \$(($GWENPP_SO_CURRENT-$GWENPP_SO_AGE))`" AC_SUBST(GWENPP_SO_CURRENT) AC_SUBST(GWENPP_SO_REVISION) AC_SUBST(GWENPP_SO_AGE) AC_SUBST(GWENPP_SO_EFFECTIVE) ###------------------------------------------------------------------------- # check for OS AQ_CHECK_OS if test "$OSYSTEM" = "osx"; then COCOA_FRAMEWORK="-framework Cocoa" FOUNDATION_FRAMEWORK="-framework CoreFoundation" SYSCONF_FRAMEWORK="-framework SystemConfiguration" APPKIT_FRAMEWORK="-framework AppKit" COREDATA_FRAMEWORK="-framework CoreData" WEBKIT_FRAMEWORK="-framework WebKit" fi AC_SUBST(COCOA_FRAMEWORK) AC_SUBST(FOUNDATION_FRAMEWORK) AC_SUBST(SYSCONF_FRAMEWORK) AC_SUBST(APPKIT_FRAMEWORK) AC_SUBST(COREDATA_FRAMEWORK) AC_SUBST(WEBKIT_FRAMEWORK) ###------------------------------------------------------------------------- # prefix handling AC_PREFIX_DEFAULT(/usr) if test "x$prefix" = "xNONE"; then prefix=$ac_default_prefix ac_configure_args="$ac_configure_args --prefix $prefix" fi AC_SUBST(prefix) ###------------------------------------------------------------------------- # # static/shared handling # AC_ENABLE_STATIC(no) AC_ENABLE_SHARED(yes) ###------------------------------------------------------------------------- # # Checks for programs. # AC_PROG_CC AC_PROG_CXX AC_PROG_OBJC #AC_PROG_OBJCXX #AC_PROG_OBJCXXCPP AC_PROG_INSTALL AC_PROG_LIBTOOL AC_LIBTOOL_WIN32_DLL AC_LIBTOOL_RC # Newer libtool doesn't have AC_LIBTOOL_RC anymore. Need to check for # $(RC) by ourselves. AC_CHECK_TOOL([RC], [windres], [no]) AC_PROG_AWK AC_CHECK_PROG(USE_DOT,dot,YES,NO) AC_CHECK_PROG(SED,sed,sed) ###------------------------------------------------------------------------- # # Checks for libraries. # AC_CHECK_LIB(dl, dlopen) # note: this AC_CHECK_LIB will also add -ldl to LIBS. AC_CHECK_LIB(rt, sem_init, [ rt_libs="-lrt -pthread" AC_DEFINE(HAVE_LIBRT, "1", [whether librt is available]) ], [], [-pthread]) AC_SUBST(rt_libs) # Some systems have iconv in libc, some have it in libiconv (OSF/1 and # those with the standalone portable GNU libiconv installed). Check # which one is available. The define ICONV_CONST will be "" or "const" # accordingly. AM_ICONV ###------------------------------------------------------------------------- # # Checks for header files. # AC_HEADER_DIRENT AC_HEADER_STDC AC_CHECK_HEADERS([arpa/inet.h fcntl.h netdb.h netinet/in.h]) AC_CHECK_HEADERS([stdlib.h string.h strings.h sys/socket.h sys/time.h]) AC_CHECK_HEADERS([syslog.h unistd.h]) AC_CHECK_HEADERS([unistd.h]) AC_CHECK_HEADERS([dlfcn.h]) AC_CHECK_HEADERS([signal.h termios.h langinfo.h localcharset.h iconv.h]) AC_CHECK_HEADERS([time.h locale.h]) AC_CHECK_HEADERS([syslog.h]) AC_CHECK_HEADERS([sys/stat.h]) AC_CHECK_HEADERS([sys/types.h]) AC_CHECK_HEADERS([sys/wait.h]) AC_CHECK_HEADERS([regex.h]) ###------------------------------------------------------------------------- # # Checks for declarations # AC_CHECK_DECLS([sigprocmask], [], [], [ #ifdef HAVE_SIGNAL_H # include #endif ]) ###------------------------------------------------------------------------- # # Checks for typedefs, structures, and compiler characteristics. # AC_C_CONST AC_HEADER_TIME AC_STRUCT_TM ###------------------------------------------------------------------------- # # Checks for library functions. # AC_FUNC_CLOSEDIR_VOID AC_FUNC_MKTIME AC_FUNC_SELECT_ARGTYPES AC_CHECK_FUNCS([gethostbyaddr gethostbyname inet_ntoa isascii getpid]) AC_CHECK_FUNCS([memmove memset]) AC_CHECK_FUNCS([select socket]) AC_CHECK_FUNCS([strcasecmp strchr strdup strerror]) AC_CHECK_FUNCS([snprintf]) AC_CHECK_FUNCS([symlink setlocale]) AC_CHECK_FUNCS([srandom random]) # Init binreloc AM_BINRELOC ###------------------------------------------------------------------------- # # check whether gwen is a subproject to another one # AC_MSG_CHECKING(if gwen is a subproject) AC_ARG_ENABLE(gwen-subproject, [ --enable-gwen-subproject make gwen only a subproject (default=no)], enable_gwen_subproject="$enableval", enable_gwen_subproject="no") AC_MSG_RESULT($enable_gwen_subproject) if test "$enable_gwen_subproject" != "no"; then AC_DEFINE(GWENHYWFAR_IS_SUBPROJECT, 1, [whether gwen is a subproject]) fi ###------------------------------------------------------------------------- # # check whether 'make check' should run checks that depend on network connectivity # AC_MSG_CHECKING(network connectivity can be assumed available during 'make check') AC_ARG_ENABLE(network-checks, [ --disable-network-checks disables checks that assume available network during build (default=enabled)], enable_gwen_network_checks="$enableval", enable_gwen_network_checks="yes") AC_MSG_RESULT($enable_gwen_network_checks) if test "$enable_gwen_network_checks" = "no"; then AC_DEFINE(GWENHYWFAR_SKIP_NETWORK_CHECKS, 1, [whether to run network-dependent checks during build]) fi ###------------------------------------------------------------------------- # # check whether local installation mode is enabled # AC_MSG_CHECKING(whether local installation mode is wanted) AC_ARG_ENABLE(local-install, [ --enable-local-install allow local installation mode (default=no)], enable_local_install="$enableval", enable_local_install="no") AC_MSG_RESULT($enable_local_install) if test "$enable_local_install" != "no"; then AC_DEFINE(ENABLE_LOCAL_INSTALL, 1, [whether local install is wanted]) fi ###------------------------------------------------------------------------- # # OS dependant settings # # Common settings for all OSs gwenhywfar_bindir="\${bindir}" gwenhywfar_libs="-lgwenhywfar" gwenhywfar_ldflags="-L\${libdir}" gwenhywfar_internal_libname="libgwenhywfar.la" gwenhywfar_headerdir_am="\$(includedir)/gwenhywfar4" gwenhywfar_headerdir="\${includedir}/gwenhywfar4" gwenhywfar_plugindir="\${libdir}/gwenhywfar/plugins/${GWENHYWFAR_SO_EFFECTIVE}" gwenhywfar_symlinkdir="\$(top_builddir)/gwenhywfar4" gwenhywfar_datadir="\${datadir}/gwenhywfar" gwenhywfar_sysdatadir="\${datadir}" # Now the specific settings case "$OS_TYPE" in posix) gwenhywfar_sys_is_windows=0 gwenhywfar_os_lib="os/posix/libos.la" GWEN_OS="posix" # add special libraries for solaris if test "$OSYSTEM" = "solaris"; then all_libraries="${all_libraries} -lresolv -lsocket" PROG_LIBRARIES="${PROG_LIBRARIES} -lresolv -lsocket" fi # add special libraries for darwin if test "$OSYSTEM" = "osx"; then # hmm, this should be detected by the GETTEXT macro... #PROG_LIBRARIES="${PROG_LIBRARIES} -lintl" # for local install mode on Mac OS X link with the CoreFoundation framework if test "$enable_local_install" != "no"; then all_libraries="${all_libraries} -framework CoreFoundation" fi fi ;; windows) gwenhywfar_sys_is_windows=1 dnl ACX_WINDOWS_PATHS gwenhywfar_os_lib="os/windows/libos.la" GWEN_OS="windows" all_libraries="${all_libraries} -lwsock32 -lintl" ;; *) AC_MSG_ERROR(**** Unknown operating system type) ;; esac AM_CONDITIONAL(IS_WINDOWS, [test "$OS_TYPE" = "windows"]) AC_SUBST(gwenhywfar_sys_is_windows) dnl # Check for x86_64 architecture; potentially set lib-directory suffix dnl if test "$target_cpu" = "x86_64"; then dnl libdirsuffix="64" dnl else dnl libdirsuffix="" dnl fi dnl AC_DEFINE_UNQUOTED(LIBDIRSUFFIX, ["$libdirsuffix"], [Defined to the suffix string of the library directory]) dnl --- no longer needed since $libdir is used directly ###------------------------------------------------------------------------- # # check plugin search path # AC_MSG_CHECKING(plugin search dir) AC_ARG_WITH(plugin-searchdir, [ --with-plugin-searchdir=DIR where to search for plugins], [gwenhywfar_plugin_searchdir="$withval"], [gwenhywfar_plugin_searchdir=""]) if test -z "${gwenhywfar_plugin_searchdir}"; then if test "$OSYSTEM" = "windows"; then gwenhywfar_plugin_searchdir="lib/gwenhywfar/plugins/${GWENHYWFAR_SO_EFFECTIVE}" else if test "$enable_local_install" != "no"; then gwenhywfar_plugin_searchdir="lib/gwenhywfar/plugins/${GWENHYWFAR_SO_EFFECTIVE}" else gwenhywfar_plugin_searchdir="$gwenhywfar_plugindir" fi fi fi AC_SUBST(gwenhywfar_plugin_searchdir) AC_MSG_RESULT($gwenhywfar_plugin_searchdir) ###------------------------------------------------------------------------- # # check data search dir # AC_MSG_CHECKING(data search dir) AC_ARG_WITH(data-searchdir, [ --with-data-searchdir=DIR where to search for gwen's data files], [gwenhywfar_data_searchdir="$withval"], [gwenhywfar_data_searchdir=""]) if test -z "${gwenhywfar_data_searchdir}"; then if test "$OSYSTEM" = "windows"; then gwenhywfar_data_searchdir="share/gwenhywfar" else if test "$enable_local_install" != "no"; then gwenhywfar_data_searchdir="share/gwenhywfar" else gwenhywfar_data_searchdir="$gwenhywfar_datadir" fi fi fi AC_SUBST(gwenhywfar_data_searchdir) AC_MSG_RESULT($gwenhywfar_data_searchdir) ###------------------------------------------------------------------------- # # check system data search dir # AC_MSG_CHECKING(system data search dir) AC_ARG_WITH(sysdata-searchdir, [ --with-sysdata-searchdir=DIR where to search for data files], [gwenhywfar_sysdata_searchdir="$withval"], [gwenhywfar_sysdata_searchdir=""]) if test -z "${gwenhywfar_sysdata_searchdir}"; then if test "$OSYSTEM" = "windows"; then gwenhywfar_sysdata_searchdir="share" else if test "$enable_local_install" != "no"; then gwenhywfar_sysdata_searchdir="share" else gwenhywfar_sysdata_searchdir="$gwenhywfar_sysdatadir" fi fi fi AC_SUBST(gwenhywfar_sysdata_searchdir) AC_MSG_RESULT($gwenhywfar_sysdata_searchdir) ###------------------------------------------------------------------------- # # check locale search dir # AC_MSG_CHECKING(locale search dir) AC_ARG_WITH(locale-searchdir, [ --with-locale-searchdir=DIR where to search for locale files], [gwenhywfar_locale_searchdir="$withval"], [gwenhywfar_locale_searchdir=""]) if test -z "${gwenhywfar_locale_searchdir}"; then if test "$OSYSTEM" = "windows"; then gwenhywfar_locale_searchdir="share/locale" else if test "$enable_local_install" != "no"; then gwenhywfar_locale_searchdir="share/locale" else gwenhywfar_locale_searchdir="\$(localedir)" fi fi fi AC_SUBST(gwenhywfar_locale_searchdir) AC_MSG_RESULT($gwenhywfar_locale_searchdir) ###------------------------------------------------------------------------- # # check cfg search dir # AC_MSG_CHECKING(cfg search dir) AC_ARG_WITH(cfg-searchdir, [ --with-cfg-searchdir=DIR where to search for cfg files], [gwenhywfar_cfg_searchdir="$withval"], [gwenhywfar_cfg_searchdir=""]) if test -z "$gwenhywfar_cfg_searchdir"; then if test "$OSYSTEM" = "windows"; then gwenhywfar_cfg_searchdir="etc" else if test "$enable_local_install" != "no"; then gwenhywfar_cfg_searchdir="etc" else gwenhywfar_cfg_searchdir="\$(sysconfdir)" fi fi fi AC_SUBST(gwenhywfar_cfg_searchdir) AC_MSG_RESULT($gwenhywfar_cfg_searchdir) ###------------------------------------------------------------------------- # # check whether variadic macros should be supported # AC_MSG_CHECKING(if compiling with variadic macros) AC_ARG_ENABLE(variadic-macros, [ --enable-variadic-macros enable variadic macros (default=yes)], enable_variadic_macros="$enableval", enable_variadic_macros="yes") AC_MSG_RESULT($enable_variadic_macros) if test "x$enable_variadic_macros" = "xno"; then AC_DEFINE(NO_VARIADIC_MACROS, 1, [Define if variadic macros should be disabled]) fi ###------------------------------------------------------------------------- # # check whether profiling is to be supported # AC_MSG_CHECKING(if profiling is to be supported) AC_ARG_ENABLE(profiling, [ --enable-profiling enable profiling (default=no)], enable_profiling="$enableval", enable_profiling="no") AC_MSG_RESULT($enable_profiling) if test "x$enable_profiling" = "xyes"; then PROFILING_CFLAGS="-pg" PROFILING_LDFLAGS="-pg" else PROFILING_CFLAGS="" PROFILING_LDFLAGS="" fi AC_SUBST(PROFILING_CFLAGS) AC_SUBST(PROFILING_LDFLAGS) ###------------------------------------------------------------------------- # # check for Debian multiarch paths # AC_PATH_TOOL([DPKG_ARCH], [dpkg-architecture]) AC_MSG_CHECKING([for multiarch paths]) multiarch_triplet="" DEBIAN_MULTIARCH_DIRS="" if test -n "$DPKG_ARCH"; then multiarch_triplet=$($DPKG_ARCH -qDEB_HOST_MULTIARCH 2> /dev/null) if test -z "$multiarch_triplet"; then multiarch_triplet=$($DPKG_ARCH -qDEB_HOST_GNU_TYPE) fi fi if test -n "$multiarch_triplet"; then DEBIAN_MULTIARCH_DIRS="/lib/$multiarch_triplet /usr/lib/$multiarch_triplet" AC_MSG_RESULT([$DEBIAN_MULTIARCH_DIRS]) else AC_MSG_RESULT([not found]) fi ###------------------------------------------------------------------------- # # check for libgcrypt # NEED_LIBGCRYPT_API=1 NEED_LIBGCRYPT_VERSION=1.2.0 AC_DEFINE_UNQUOTED(NEED_LIBGCRYPT_VERSION, "$NEED_LIBGCRYPT_VERSION", [Required version of Libgcrypt]) case "$OS_TYPE" in windows) LIBGCRYPT_CFLAGS="" LIBGCRYPT_LIBS="-lgcrypt" AC_SUBST(LIBGCRYPT_CFLAGS) AC_SUBST(LIBGCRYPT_LIBS) ;; *) AM_PATH_LIBGCRYPT("$NEED_LIBGCRYPT_API:$NEED_LIBGCRYPT_VERSION", [have_gcrypt="yes"], [have_gcrypt="no"]) if test "$have_gcrypt" != "yes"; then AC_MSG_ERROR([ **** Libgcrypt is required for Gwenhywfar. Please install it (including devel packages) **** (at least version $NEED_LIBGCRYPT_VERSION using API $NEED_LIBGCRYPT_API is required.)]) fi ;; esac ###------------------------------------------------------------------------- # # check for library for common error values and messages in GnuPG components # AM_PATH_GPG_ERROR ###------------------------------------------------------------------------- # # check for libgnutls # case "$OS_TYPE" in windows) LIBGNUTLS_CFLAGS="" LIBGNUTLS_LIBS="-lgnutls -lgpg-error" # we use 1.6.3 or higher, so we do have gnutls_transport_set_error HAVE_GNUTLS_TRANSPORT_SET_ERRNO="yes" AC_SUBST(LIBGNUTLS_CFLAGS) AC_SUBST(LIBGNUTLS_LIBS) ;; *) PKG_CHECK_MODULES([LIBGNUTLS], [gnutls >= 2.9.8]) # check for 1.6 or higher oldlibs="$LIBS" LIBS="${LIBGNUTLS_LIBS}" AC_CHECK_LIB(gnutls,gnutls_transport_set_errno, [HAVE_GNUTLS_TRANSPORT_SET_ERRNO="yes"], [HAVE_GNUTLS_TRANSPORT_SET_ERRNO="no"]) LIBS="$oldlibs" ;; esac if test "x${HAVE_GNUTLS_TRANSPORT_SET_ERRNO}" = "xyes"; then AC_DEFINE(HAVE_GNUTLS_TRANSPORT_SET_ERRNO, 1, [only in gnutls>=1.6]) fi ###------------------------------------------------------------------------- # # check for OpenSSL # AQ_CHECK_SSL if test "$ssl_available" = "yes"; then AC_DEFINE_UNQUOTED(HAVE_OPENSSL, 1, [Defined if OpenSSL is available]) USE_CRYPT="yes" else GWEN_CRYPTO="none" USE_CRYPT="no" fi AM_CONDITIONAL(IF_HAVE_OPENSSL, [test "$ssl_available" = "yes"]) AC_SUBST(ssl_available) ###------------------------------------------------------------------------- # check for Distribution AQ_DISTRIBUTION ###------------------------------------------------------------------------- # # check for I18N # # check whether i18n files are to be created AC_CHECK_PROG(XGETTEXT,xgettext,xgettext, missing) MAKE_I18N_FILES="yes" if test "$XGETTEXT" = "missing"; then MAKE_I18N_FILES="no" AC_MSG_WARN([xgettext is missing. Locale suport is disabled.]) fi AC_PATH_PROG([MSGFMT], [msgfmt], [missing]) if test "$MSGFMT" = "missing"; then MAKE_I18N_FILES="no" AC_MSG_WARN([msgfmt is missing. Locale suport is disabled.]) fi AC_SUBST(MAKE_I18N_FILES) AM_CONDITIONAL(IF_MAKE_I18N_FILES, [test "$MAKE_I18N_FILES" = "yes"]) # then check whether i18n support is to be compiled in i18n_libs="" HAVE_I18N="yes" AC_CHECK_HEADERS([locale.h libintl.h], [], [HAVE_I18N="no"]) if test "$OS_TYPE" != "windows"; then oldlibs="$LIBS" LIBS="" AC_SEARCH_LIBS(gettext, intl, [], [HAVE_I18N="no"]) i18n_libs="$LIBS" LIBS="$oldlibs" else i18n_libs="-lintl" fi if test "$HAVE_I18N" != "NO"; then AC_DEFINE_UNQUOTED(HAVE_I18N, 1, [whether I18N is available]) fi AC_SUBST(HAVE_I18N) AC_SUBST(i18n_libs) ###------------------------------------------------------------------------- # # check for iconv # AC_ARG_WITH(iconv, [ --with-iconv=PATH take iconv from PATH], [ICONV_DIR="$withval"], [ICONV_DIR="/usr"]) if test "$ICONV_DIR" = "no" ; then echo Disabling ICONV support else if test "$with_iconv" != "yes" -a "$with_iconv" != "" ; then CPPFLAGS="${CPPFLAGS} -I$with_iconv/include" # Export this since our headers include iconv.h ICONV_INCLUDES="-I$ICONV_DIR/include" ICONV_LIBS="-L$ICONV_DIR/lib" fi AC_CHECK_HEADER(iconv.h, AC_MSG_CHECKING(for iconv) AC_TRY_LINK([#include #include ],[ iconv_t cd = iconv_open ("",""); iconv (cd, NULL, NULL, NULL, NULL);],[ AC_MSG_RESULT(yes) WITH_ICONV=1],[ AC_MSG_RESULT(no) AC_MSG_CHECKING(for iconv in -liconv) _ldflags="${LDFLAGS}" _libs="${LIBS}" LDFLAGS="${LDFLAGS} ${ICONV_LIBS}" LIBS="${LIBS} -liconv" AC_TRY_LINK([#include #include ],[ iconv_t cd = iconv_open ("",""); iconv (cd, NULL, NULL, NULL, NULL);],[ AC_MSG_RESULT(yes) WITH_ICONV=1 ICONV_LIBS="${ICONV_LIBS} -liconv" LIBS="${_libs}" LDFLAGS="${_ldflags}"],[ AC_MSG_RESULT(no) LIBS="${_libs}" LDFLAGS="${_ldflags}"])])) fi AC_DEFINE_UNQUOTED(HAVE_ICONV, $WITH_ICONV, [Defined if libiconv is available]) AC_SUBST(WITH_ICONV) AC_SUBST(ICONV_LIBS) ###------------------------------------------------------------------------- # # guis # AC_ARG_WITH(guis, [ --with-guis=list space separated list of GUI implementations (default:all)], [gwenhywfar_guis="$withval"], [gwenhywfar_guis="qt4 gtk2"] ) if test "$gwenhywfar_guis" = "none"; then gwenhywfar_guis="" fi if test "$gwenhywfar_guis" = "yes"; then gwenhywfar_guis="" fi AC_SUBST(gwenhywfar_guis) ###------------------------------------------------------------------------- # Check for fox toolkit # case "$gwenhywfar_guis" in *fox16*) AQ_CHECK_FOX if test "$have_fox" != "yes"; then AC_MSG_ERROR([ **** FOX Toolkit missing. **** If you want to use the FOX-GUI you will have to install the package **** libfox-1.6 and libfox-1.6-devel on Debian-like systems. **** On RPM systems like SuSE those packages might have different names. **** If you don't need the FOX-GUI you might want to use the option **** --with-guis]) fi AC_DEFINE(BUILD_GUI_FOX16, 1, [if gwen gui for fox16 is built]) with_gui_fox16="yes" ;; esac AC_SUBST(with_gui_fox16) AM_CONDITIONAL(WITH_GUI_FOX16, [test "$with_gui_fox16" = "yes"]) ###------------------------------------------------------------------------- # Check for GTK+ # case "$gwenhywfar_guis" in *gtk2*) # We need at least GTK 2.17.5 because we use functions like # gtk_widget_get_sensitive() and gtk_widget_has_focus() pkg_modules="gtk+-2.0 >= 2.17.5" dnl $4=true => don't die in case of failure. PKG_CHECK_MODULES(GTK2, [$pkg_modules], [], true) AC_DEFINE(BUILD_GUI_GTK2, 1, [if gwen gui for gtk2 is built]) with_gui_gtk2="yes" ;; esac AC_SUBST(with_gui_gtk2) AM_CONDITIONAL(WITH_GUI_GTK2, [test "$with_gui_gtk2" = "yes"]) ###------------------------------------------------------------------------- # # QT4 # UIC4="NO" QT4_BINDIR="" case "$gwenhywfar_guis" in *qt4*) AQ_CHECK_QT4 if test "$have_qt4" = "yes"; then # Define this macro to disable the cast from QString to const char # which implicitly uses latin1()! AC_DEFINE(QT_NO_ASCII_CAST,[1],[Disable the cast from QString to const char.]) fi dnl windows/mingw doesnt have the yes program, so add this emulation AC_CHECK_PROG(YES, yes, yes, [[echo -e 'y\ny\ny\ny\n']]) dnl Store the bin dir for the windows dlls QT4_BINDIR="` echo ${qt4_moc} | ${SED} 's-/moc--' | ${SED} 's-/c/-c:\\\\-' | ${SED} 's-/-\\\\-g' `" UIC4="${qt4_uic}" AC_DEFINE(BUILD_GUI_QT4, 1, [if gwen gui for qt4 is built]) with_gui_qt4="yes" ;; *) ;; esac dnl Store the bin dir for the windows dlls AC_SUBST(QT4_BINDIR) AC_SUBST(with_gui_qt4) AM_CONDITIONAL(WITH_GUI_QT4, [test "$with_gui_qt4" = "yes"]) ###------------------------------------------------------------------------- # # check docpath # AC_MSG_CHECKING(docpath) AC_ARG_WITH(docpath, [ --with-docpath=DIR where to store the apidoc], [docpath="$withval"], [docpath="${HOME}/apidoc"]) AC_SUBST(docpath) AC_MSG_RESULT($docpath) ###------------------------------------------------------------------------- # # search for tag files # AC_MSG_CHECKING(doxygen tag files) DOXYGEN_TAGFILES="" if test -d "${docpath}"; then DOXYGEN_TAGFILES="`cd ${docpath} && ls *.tag`" if test -n "${DOXYGEN_TAGFILES}"; then DOXYGEN_TAGFILES="`echo ${DOXYGEN_TAGFILES} | ${SED} -e s/${PACKAGE}.tag//`" fi realfiles="" for ff in ${DOXYGEN_TAGFILES}; do realfiles="${realfiles} ${docpath}/${ff}" done DOXYGEN_TAGFILES="${realfiles}" fi if test -z "${DOXYGEN_TAGFILES}"; then AC_MSG_RESULT(none) else AC_MSG_RESULT(found) fi AC_SUBST(DOXYGEN_TAGFILES) ###------------------------------------------------------------------------- # # Search for dlopen # LIBS="" AC_SEARCH_LIBS(dlopen, c dl) if test "$LIBS" = "-lc"; then LIBS="" fi ld_library="$LIBS" LIBS="" all_libraries="$all_libraries $ld_library" ###------------------------------------------------------------------------- # # check for release # AC_MSG_CHECKING(whether this is an official release) AC_ARG_ENABLE(release, [ --enable-release make this an official release (default=no)], [ case "${enableval}" in yes) enable_release="yes";; no) enable_release="no";; *) AC_MSG_ERROR(bad value ${enableval} for --enable-release);; esac ], enable_release="no") if test "$enable_release" = "yes"; then STRIPALL="-s" else STRIPALL="" fi AC_SUBST(STRIPALL) AC_MSG_RESULT($enable_release) ###------------------------------------------------------------------------- # # Compiler check for symbol visibility # AC_CACHE_CHECK([whether compiler supports symbol visibility], ac_cv_hidden_visibility_attribute, [ echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1; }' > conftest.c ac_cv_hidden_visibility_attribute=no if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then if grep '\.hidden.*foo' conftest.s >/dev/null; then ac_cv_hidden_visibility_attribute=yes fi fi rm -f conftest.* ]) if test $ac_cv_hidden_visibility_attribute = yes; then AC_DEFINE(GCC_WITH_VISIBILITY_ATTRIBUTE, 1, [visibility]) visibility_cflags="-fvisibility=hidden" fi AC_SUBST(visibility_cflags) ###------------------------------------------------------------------------- # # check for MEMTRACE # AC_MSG_CHECKING(if MEMTRACE is wanted) AC_ARG_ENABLE(memtrace, [ --enable-memtrace enable memory trace (default=no)], enable_memtrace="$enableval", enable_memtrace="no") AC_MSG_RESULT($enable_memtrace) if test "$enable_memtrace" != "no"; then #AC_DEFINE(GWEN_MEMTRACE, 1, [if memory trace is wanted]) AC_DEFINE(GWEN_MEMORY_DEBUG, 1, [if memory debugging is wanted]) fi # Debug arguments for compilation ACX_COMPILE_WARN() ###------------------------------------------------------------------------- # # check buffer hard limit # AC_MSG_CHECKING(default buffer hard limit) AC_ARG_WITH(buffer-hardlimit, [ --with-buffer-hardlimit=VALUE new default buffer hard limit], [gwenhywfar_buffer_hardlimit="$withval"], [gwenhywfar_buffer_hardlimit=""]) if test -z "${gwenhywfar_buffer_hardlimit}"; then gwenhywfar_buffer_hardlimit="(16*1024*1024)" fi AC_SUBST(gwenhywfar_buffer_hardlimit) AC_MSG_RESULT($gwenhywfar_buffer_hardlimit) ###------------------------------------------------------------------------- # # compile program flags # PROG_LIBRARIES="${PROG_LIBRARIES} ${ssl_libraries} ${ssl_lib} ${ncurses_libs}" # Clean up include variables AS_SCRUB_INCLUDE(ssl_includes) AS_SCRUB_INCLUDE(gwenhywfar_includes) AS_SCRUB_INCLUDE(all_includes) ###------------------------------------------------------------------------- # # check for doc type # AC_MSG_CHECKING(if full docu should be created) AC_ARG_ENABLE(full-doc, [ --enable-full-doc enable creating full apidoc (default=no)], [ case "${enableval}" in yes) enable_fulldoc="yes";; no) enable_fulldoc="no";; *) AC_MSG_ERROR(bad value ${enableval} for --enable-full-doc);; esac ], enable_fulldoc="no") if test "$enable_fulldoc" = "yes"; then DOXYGEN_INPUT="listdoc.h src gui" DOXYGEN_DEFINE="" else DOXYGEN_DEFINE="DOXYGEN_HIDE" DOXYGEN_INPUT="listdoc.h gwenhywfar4" fi AC_SUBST(DOXYGEN_INPUT) AC_SUBST(DOXYGEN_DEFINE) AC_MSG_RESULT($enable_fulldoc) # Debug arguments for compilation ACX_COMPILE_WARN() ###------------------------------------------------------------------------- # # substitute vars # AC_SUBST(GWEN_OS) AC_SUBST(PROG_LIBRARIES) AC_SUBST(all_includes) AC_SUBST(all_libraries) AC_SUBST(gwenhywfar_crypt_lib) AC_SUBST(gwenhywfar_ldflags) AC_SUBST(gwenhywfar_bindir) AC_SUBST(gwenhywfar_libs) AC_SUBST(gwenhywfar_internal_libname) AC_SUBST(gwenhywfar_libspp) AC_SUBST(gwenhywfar_libsui) AC_SUBST(gwenhywfar_os_lib) AC_SUBST(gwenhywfar_pkgincludedir) AC_SUBST(gwenhywfar_plugindir) AC_SUBST(gwenhywfar_headerdir_am) AC_SUBST(gwenhywfar_headerdir) AC_SUBST(gwenhywfar_symlinkdir) AC_SUBST(gwenhywfar_datadir) ###------------------------------------------------------------------------- # AC_MSG_CHECKING(crypt token plugins) AC_ARG_WITH(plugins-ct, [ --with-plugins-ct=LIST list of CT plugins to build], [plugins="$withval"], [plugins="all"]) if test "$plugins" = "all"; then plugins="ohbci"; fi gwenhywfar_plugins_ct_dirs="" gwenhywfar_plugins_ct_libs="" for plugin in $plugins; do case "$plugin" in ohbci) gwenhywfar_plugins_ct_dirs="$gwenhywfar_plugins_ct_dirs ohbci" gwenhywfar_plugins_ct_libs="$gwenhywfar_plugins_ct_libs ohbci/libct_ohbci.la" AC_DEFINE(GWENHYWFAR_WITH_PLUGIN_CT_OHBCI, 1, [plugin availability]) ;; *) AC_MSG_ERROR("ERROR: Unknown plugin \"$plugin\"") ;; esac done AC_SUBST(gwenhywfar_plugins_ct_dirs) AC_SUBST(gwenhywfar_plugins_ct_libs) AC_MSG_RESULT($plugins) ###------------------------------------------------------------------------- # AC_MSG_CHECKING(DBIO plugins) AC_ARG_WITH(plugins-dbio, [ --with-plugins-dbio=LIST list of DBIO plugins to build], [plugins="$withval"], [plugins="all"]) if test "$plugins" = "all"; then plugins="csv olddb xmldb"; fi gwenhywfar_plugins_dbio_dirs="" gwenhywfar_plugins_dbio_libs="" for plugin in $plugins; do case "$plugin" in csv) gwenhywfar_plugins_dbio_dirs="$gwenhywfar_plugins_dbio_dirs csv" gwenhywfar_plugins_dbio_libs="$gwenhywfar_plugins_dbio_libs csv/libdbio_csv.la" AC_DEFINE(GWENHYWFAR_WITH_PLUGIN_DBIO_CSV, 1, [plugin availability]) ;; olddb) gwenhywfar_plugins_dbio_dirs="$gwenhywfar_plugins_dbio_dirs olddb" gwenhywfar_plugins_dbio_libs="$gwenhywfar_plugins_dbio_libs olddb/libdbio_olddb.la" AC_DEFINE(GWENHYWFAR_WITH_PLUGIN_DBIO_OLDDB, 1, [plugin availability]) ;; xmldb) gwenhywfar_plugins_dbio_dirs="$gwenhywfar_plugins_dbio_dirs xmldb" gwenhywfar_plugins_dbio_libs="$gwenhywfar_plugins_dbio_libs xmldb/libdbio_xmldb.la" AC_DEFINE(GWENHYWFAR_WITH_PLUGIN_DBIO_XMLDB, 1, [plugin availability]) ;; *) AC_MSG_ERROR("ERROR: Unknown plugin \"$plugin\"") ;; esac done AC_SUBST(gwenhywfar_plugins_dbio_dirs) AC_SUBST(gwenhywfar_plugins_dbio_libs) AC_MSG_RESULT($plugins) ###------------------------------------------------------------------------- # AC_MSG_CHECKING(ConfigManager plugins) AC_ARG_WITH(plugins-cfgmgr, [ --with-plugins-cfgmgr=LIST list of ConfigManager plugins to build], [plugins="$withval"], [plugins="all"]) if test "$plugins" = "all"; then plugins="dir"; fi gwenhywfar_plugins_cfgmgr_dirs="" gwenhywfar_plugins_cfgmgr_libs="" for plugin in $plugins; do case "$plugin" in dir) gwenhywfar_plugins_cfgmgr_dirs="$gwenhywfar_plugins_cfgmgr_dirs dir" gwenhywfar_plugins_cfgmgr_libs="$gwenhywfar_plugins_cfgmgr_libs dir/libcfgmgr_dir.la" AC_DEFINE(GWENHYWFAR_WITH_PLUGIN_CFGMGR_DIR, 1, [plugin availability]) ;; *) AC_MSG_ERROR("ERROR: Unknown plugin \"$plugin\"") ;; esac done AC_SUBST(gwenhywfar_plugins_cfgmgr_dirs) AC_SUBST(gwenhywfar_plugins_cfgmgr_libs) AC_MSG_RESULT($plugins) ###------------------------------------------------------------------------- # # list of files to create # AC_CONFIG_FILES([Doxyfile Makefile admin/Makefile m4/Makefile po/Makefile gwenhywfar-config.in gwenhywfar.pc gwenhywfar-config.cmake gwenhywfar-config-version.cmake gwenhywfar.spec gwenhywfar.iss checks/Makefile data/Makefile doc/Makefile doc/dialog/Makefile doc/dialog/images/Makefile doc/inherit/Makefile doc/plugindescr.xsd src/Makefile src/types.h src/ressource.rc src/version.h src/base/Makefile src/crypt3/Makefile src/cryptmsg/Makefile src/crypttoken/Makefile src/gui/Makefile src/sio/Makefile src/html/Makefile src/os/Makefile src/os/posix/Makefile src/os/posix/system.h src/os/windows/Makefile src/os/windows/system.h src/parser/Makefile src/gparser/Makefile src/sar/Makefile plugins/Makefile plugins/dbio/Makefile plugins/dbio/csv/Makefile plugins/dbio/csv/csv.xml plugins/dbio/csv/ressource.rc plugins/dbio/olddb/Makefile plugins/dbio/olddb/olddb.xml plugins/dbio/olddb/ressource.rc plugins/dbio/xmldb/Makefile plugins/dbio/xmldb/xmldb.xml plugins/dbio/xmldb/ressource.rc plugins/ct/Makefile plugins/ct/ohbci/Makefile plugins/ct/ohbci/ohbci.xml plugins/ct/ohbci/ressource.rc plugins/configmgr/Makefile plugins/configmgr/dir/Makefile plugins/configmgr/dir/dir.xml tools/Makefile tools/xmlmerge/Makefile tools/typemaker/Makefile tools/typemaker2/Makefile tools/typemaker2/types/Makefile tools/typemaker2/types/c/Makefile tools/gcttool/Makefile tools/gsa/Makefile test/Makefile gui/Makefile gui/cpp/Makefile gui/qt4/Makefile gui/qt4/gwengui-qt4.pc gui/qt4/gwengui-qt4-config.cmake gui/qt4/gwengui-qt4-config-version.cmake gui/fox16/Makefile gui/fox16/gwengui-fox16.pc gui/gtk2/Makefile gui/gtk2/gwengui-gtk2.pc gui/cocoa/Makefile gui/testdialogs/Makefile ]) AC_OUTPUT ###------------------------------------------------------------------------- # # create header directory, make symlinks # HEADER_DIRS="src src/base src/crypt3 src/cryptmsg src/crypttoken src/sio src/os src/os/${GWEN_OS} src/gui src/html" HEADER_DIRS="${HEADER_DIRS} src/parser src/gparser src/sar" lprefix="${srcdir}" lprefix=`( cd ${lprefix} ; pwd )` rm -Rf gwenhywfar4 2>/dev/null mkdir -p gwenhywfar4/gwenhywfar for d in ${HEADER_DIRS}; do hfiles=`( cd "${srcdir}/${d}" && ls *.h 2>/dev/null )` for f in ${hfiles}; do case ${f} in *_l.h | *_p.h) ;; *) ln -s "${lprefix}/${d}/${f}" "gwenhywfar4/gwenhywfar/${f}" ;; esac done done #ln -s "${lprefix}/src/os/$OS_TYPE/system.h" "gwenhywfar4/gwenhywfar/system.h" 2>/dev/null # cpp # rm -Rf gwenhywfar4/gwen-gui-cpp 2>/dev/null mkdir -p gwenhywfar4/gwen-gui-cpp for d in gui/cpp; do hfiles=`( cd "${srcdir}/${d}" && ls *.hpp *.h 2>/dev/null )` for f in ${hfiles}; do case ${f} in *_l.hpp | *_p.hpp) ;; *) ln -s "${lprefix}/${d}/${f}" "gwenhywfar4/gwen-gui-cpp/${f}" ;; esac done done # qt4 # rm -Rf gwenhywfar4/gwen-gui-qt4 2>/dev/null mkdir -p gwenhywfar4/gwen-gui-qt4 for d in gui/qt4; do hfiles=`( cd "${srcdir}/${d}" && ls *.hpp *.h 2>/dev/null )` for f in ${hfiles}; do case ${f} in *_l.hpp | *_p.hpp | qt4_gui_*.hpp) ;; *) ln -s "${lprefix}/${d}/${f}" "gwenhywfar4/gwen-gui-qt4/${f}" ;; esac done done # fox16 # rm -Rf gwenhywfar4/gwen-gui-fox16 2>/dev/null mkdir -p gwenhywfar4/gwen-gui-fox16 for d in gui/fox16; do hfiles=`( cd "${srcdir}/${d}" && ls *.hpp *.h 2>/dev/null )` for f in ${hfiles}; do case ${f} in *_l.hpp | *_p.hpp | fox16_gui_*.hpp) ;; *) ln -s "${lprefix}/${d}/${f}" "gwenhywfar4/gwen-gui-fox16/${f}" ;; esac done done # gtk2 # rm -Rf gwenhywfar4/gwen-gui-gtk2 2>/dev/null mkdir -p gwenhywfar4/gwen-gui-gtk2 for d in gui/gtk2; do hfiles=`( cd "${srcdir}/${d}" && ls *.h 2>/dev/null )` for f in ${hfiles}; do case ${f} in *_l.h | *_p.h | gtk2_gui_*.h) ;; *) ln -s "${lprefix}/${d}/${f}" "gwenhywfar4/gwen-gui-gtk2/${f}" ;; esac done done # cocoa # rm -Rf gwenhywfar4/gwen-gui-cocoa 2>/dev/null mkdir -p gwenhywfar4/gwen-gui-cocoa for d in gui/cocoa; do hfiles=`( cd "${srcdir}/${d}" && ls *.h 2>/dev/null )` for f in ${hfiles}; do case ${f} in *_l.h | *_p.h | gtk2_gui_*.h) ;; *) ln -s "${lprefix}/${d}/${f}" "gwenhywfar4/gwen-gui-cocoa/${f}" ;; esac done done ###------------------------------------------------------------------------- # # summary # echo echo "Summary" echo "=============================================" echo "Version : $GWENHYWFAR_VERSION_FULL_STRING" echo "System : $OSYSTEM" echo "Installation Folder : $prefix" echo "Local Installation Mode : $enable_local_install" echo "Plugin Installation Folder : $gwenhywfar_plugindir" echo "Plugin Search Folder : $gwenhywfar_plugin_searchdir" echo "Data Search Folder : $gwenhywfar_data_searchdir" echo "Locale Search Folder : $gwenhywfar_locale_searchdir" echo "Config Search Folder : $gwenhywfar_cfg_searchdir" echo "Buffer Default Hard Limit : $gwenhywfar_buffer_hardlimit" echo "Symbol Visibility : $visibility_supported" echo "OpenSSL Support for gct-tool : $ssl_available" echo "GUI Support : $gwenhywfar_guis" if test "$HAVE_GNUTLS_TRANSPORT_SET_ERRNO" = "yes"; then echo "GNUTLS : 1.6.1 or higher" else echo "GNUTLS : pre-1.6.1" fi echo echo "Plugins" echo "=============================================" echo " Crypt token plugins :$gwenhywfar_plugins_ct_dirs" echo " DBIO plugins :$gwenhywfar_plugins_dbio_dirs" echo " ConfigManager plugins :$gwenhywfar_plugins_cfgmgr_dirs" echo echo "You can now use the command 'make' (or on *BSD 'gmake') to " echo "build Gwenhywfar." echo gwenhywfar-4.15.2beta/RELEASES0000644000175000017500000000000012364015347012662 00000000000000gwenhywfar-4.15.2beta/gwenhywfar.iss.in0000644000175000017500000002151512364015347015060 00000000000000; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Input configuration for the Inno Setup Compiler ; Copyright (c) 2004-2005 Christian Stimming ; ; Inno Setup Compiler: See http://www.jrsoftware.org/isdl.php ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [Setup] ; Using the name here directly because we want it capitalized AppName=Gwenhywfar AppVerName=Gwenhywfar @VERSION@ AppPublisher=Gwenhywfar Development Team AppPublisherURL=http://sourceforge.net/projects/gwenhywfar AppSupportURL=http://sourceforge.net/support/getsupport.php?group_id=88769 AppUpdatesURL=http://sourceforge.net/project/showfiles.php?group_id=88769 DefaultDirName={pf}\@PACKAGE@ LicenseFile=COPYING Compression=lzma OutputDir=. OutputBaseFilename=@PACKAGE@-@VERSION@-setup UninstallFilesDir={app}\uninstall\@PACKAGE@ InfoAfterFile=README [Types] Name: "full"; Description: "{cm:FullInstall}" Name: "binary"; Description: "{cm:BinaryInstall}" Name: "custom"; Description: "{cm:CustomInstall}"; Flags: iscustom [Components] Name: "main"; Description: "{cm:MainFiles}"; Types: full binary custom; Flags: fixed Name: "devel"; Description: "{cm:DevelFiles}"; Types: full Name: "doc"; Description: "{cm:DocFiles}"; Types: full ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Here we configure the included files and the place of their ; installation ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [Files] ; The main DLL Source: "distribution\usr\bin\*.dll"; DestDir: "{win}"; Flags: sharedfile; Components: main ; The lib file for linking against it Source: "distribution\usr\lib\lib@PACKAGE@.la"; DestDir: "{app}\lib"; Flags: sharedfile; Components: devel Source: "distribution\usr\lib\*.dll.a"; DestDir: "{app}\lib"; Flags: sharedfile; Components: devel ; The config-script. It is post-processed by the Pascal script below. Source: "@PACKAGE@-config.in.in"; DestDir: "{app}\bin"; Flags: recursesubdirs; Components: devel; AfterInstall: MyAfterInstallConfig(ExpandConstant('{app}\bin\@PACKAGE@-config')) ; The tools executables Source: "distribution\usr\bin\*.exe"; DestDir: "{app}\bin"; Flags: ignoreversion; Components: devel ; The headers, and the aclocal macro. Source: "distribution\usr\include\*"; DestDir: "{app}\include"; Flags: ignoreversion recursesubdirs; Components: devel Source: "distribution\usr\share\*"; DestDir: "{app}\share"; Flags: ignoreversion recursesubdirs; Components: devel ; The plugins Source: "distribution\usr\lib\@PACKAGE@\plugins\@GWENHYWFAR_SO_EFFECTIVE@\*"; DestDir: "{app}\lib\@PACKAGE@\plugins\@GWENHYWFAR_SO_EFFECTIVE@"; Flags: ignoreversion recursesubdirs; Components: main ; The certificate file Source: "distribution\usr\etc\gwen-public-ca.crt"; DestDir: "{app}\etc"; Components: main ; And all the documentation Source: "README"; DestDir: "{app}\doc\@PACKAGE@"; Components: doc Source: "COPYING"; DestDir: "{app}\doc\@PACKAGE@"; Flags: ignoreversion; Components: doc Source: "README.W32"; DestDir: "{app}\doc\@PACKAGE@"; Components: doc Source: "AUTHORS"; DestDir: "{app}\doc\@PACKAGE@"; Components: doc Source: "ChangeLog"; DestDir: "{app}\doc\@PACKAGE@"; Components: doc ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Define the registry keys Setup should create (HKCU = HKEY_CURRENT_USER) ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [Registry] Root: HKLM; Subkey: "Software\Gwenhywfar\Paths"; ValueType: string; ValueName: "prefix"; ValueData: "{app}" Root: HKLM; Subkey: "Software\Gwenhywfar\Paths"; ValueType: string; ValueName: "libdir"; ValueData: "{app}\lib" Root: HKLM; Subkey: "Software\Gwenhywfar\Paths"; ValueType: string; ValueName: "pkglibdir"; ValueData: "{app}\lib\@PACKAGE@" Root: HKLM; Subkey: "Software\Gwenhywfar\Paths"; ValueType: string; ValueName: "plugindir"; ValueData: "{app}\lib\@PACKAGE@\plugins\@GWENHYWFAR_SO_EFFECTIVE@" Root: HKLM; Subkey: "Software\Gwenhywfar\Paths"; ValueType: string; ValueName: "dbio-plugins"; ValueData: "{app}\lib\@PACKAGE@\plugins\@GWENHYWFAR_SO_EFFECTIVE@\dbio" Root: HKLM; Subkey: "Software\Gwenhywfar\Paths"; ValueType: string; ValueName: "crypttoken-plugins"; ValueData: "{app}\lib\@PACKAGE@\plugins\@GWENHYWFAR_SO_EFFECTIVE@\crypttoken" Root: HKLM; Subkey: "Software\Gwenhywfar\Paths"; ValueType: string; ValueName: "sysconfdir"; ValueData: "{app}\etc" Root: HKLM; Subkey: "Software\Gwenhywfar\Paths"; ValueType: string; ValueName: "localedir"; ValueData: "{app}\share\locale" ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Delete the created config script on uninstall ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [UninstallDelete] Type: files; Name: "{app}\bin\@PACKAGE@-config" ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; This large section is a Pascal scripting program that will modify ; the gwenhywfar-config shell script so that it then includes the ; correct values according to our local installation. See ; http://www.remobjects.com/?ps for a syntax reference. ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [Code] function MingwBacksl(const S: String): String; begin { Modify the path name S so that it can be used by MinGW } if Length(ExtractFileDrive(S)) = 0 then Result := S else begin Result := '/'+S; StringChange(Result, ':\', '\'); end; StringChange(Result, '\', '/'); end; procedure MyAfterInstallConfig(FileName: String); var FileString, appdir, windir, includedir, plugindir: String; Res: Boolean; begin { Load the unchanged original file } Res := LoadStringFromFile(Format('%s.in.in',[FileName]), FileString); if Res = False then MsgBox('Error on loading '+FileName+'.in.in for final adaptation', mbInformation, MB_OK); { Insert the custom file header; #10 is the linefeed character } Insert('#!/bin/sh '#10'dir="@prefix'+'@"'#10, FileString, 0); { Get the installation-specific paths } windir := MingwBacksl(ExpandConstant('{win}')); appdir := MingwBacksl(ExpandConstant('{app}')); includedir := appdir + '/include'; plugindir := appdir + '/lib/@PACKAGE@/plugins/@GWENHYWFAR_SO_EFFECTIVE@'; { Now make all the replacements } { Explanation: StringChange(S,FromStr,ToStr): Change all occurances in S of FromStr to ToStr. } StringChange(FileString, '@'+'prefix@', appdir); StringChange(FileString, '@'+'libdir@', windir); StringChange(FileString, '@'+'ssl_includes@', '@ssl_includes@'); StringChange(FileString, '@'+'gwenhywfar_headerdir@', includedir); StringChange(FileString, '@'+'gwenhywfar_ldflags@', '-L'+windir); StringChange(FileString, '@'+'gwenhywfar_libs@', '@gwenhywfar_libs@'); StringChange(FileString, '@'+'gwenhywfar_libspp@', '@gwenhywfar_libspp@'); StringChange(FileString, '@'+'gwenhywfar_libsui@', '@gwenhywfar_libsui@'); StringChange(FileString, '@'+'gwenhywfar_pkgincludedir@', includedir+'/@PACKAGE@'); StringChange(FileString, '@'+'gwenhywfar_plugindir@', plugindir); StringChange(FileString, '@'+'GWENHYWFAR_VERSION_MAJOR@', '@GWENHYWFAR_VERSION_MAJOR@'); StringChange(FileString, '@'+'GWENHYWFAR_VERSION_MINOR@', '@GWENHYWFAR_VERSION_MINOR@'); StringChange(FileString, '@'+'GWENHYWFAR_VERSION_PATCHLEVEL@', '@GWENHYWFAR_VERSION_PATCHLEVEL@'); StringChange(FileString, '@'+'GWENHYWFAR_VERSION_BUILD@', '@GWENHYWFAR_VERSION_BUILD@'); StringChange(FileString, '@'+'GWENHYWFAR_VERSION_TAG@', '@GWENHYWFAR_VERSION_TAG@'); StringChange(FileString, '@'+'USE_CRYPT@', '@USE_CRYPT@'); { Save the final file } Res := SaveStringToFile(FileName, FileString, False); if Res = False then MsgBox('Error on saving '+FileName+' for final adaptation', mbInformation, MB_OK); end; [Languages] Name: "en"; MessagesFile: "compiler:Default.isl" Name: "de"; MessagesFile: "compiler:Languages\German.isl" Name: "pt"; MessagesFile: "compiler:Languages\Portuguese.isl" Name: "fr"; MessagesFile: "compiler:Languages\French.isl" ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; These are only for improved text messages ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [Messages] ; *** "Select Destination" wizard page SelectDirLabel3=Setup will install [name] into the following folder. If you have MinGW installed on your system, you can safely choose MinGW's root folder here as well (e.g. c:\msys\1.0). de.SelectDirLabel3=Das Setup wird [name] in den folgenden Ordner installieren. Wenn Sie MinGW auf Ihrem Computer installiert haben, können Sie hier problemlos das Root-Verzeichnis von MinGW angeben (z.B. c:\msys\1.0). [CustomMessages] ; *** "Select Components" wizard page FullInstall=Full installation BinaryInstall=Install only libraries CustomInstall=Custom installation MainFiles=Gwenhywfar DLL Library DevelFiles=Development files DocFiles=Documentation files de.FullInstall=Komplett-Installation de.BinaryInstall=Nur Bibliotheken installieren de.CustomInstall=Benutzerdefiniert de.MainFiles=Gwenhywfar DLL Bibliothek de.DevelFiles=Entwickler-Dateien de.DocFiles=Dokumentations-Dateien gwenhywfar-4.15.2beta/README0000644000175000017500000001230712364015347012431 00000000000000 This is Gwenhywfar, a multi-platform helper library for networking and security applications and libraries. It is used by - Libchipcard (http://www.libchipcard.de), - OpenHBCI2 (http://www.openhbci.de), - Simthetic, the simulation tool (http://simthetic.sourceforge.net) - AqBanking/AqHBCI (http://www.aqbanking.de/). - and others by using one of the projects above Features ======== This library is written in C, and it follows the object-oriented programming paradigm for most of its parts. The header files can directly be used from C++, too. Gwenhywfar includes the following features: - Basic Data types for binary buffers, ring buffers, linked lists, error objects, string lists (src/base/), buffered IO operations (src/io/) - Macros for typesafe list management - OS abstraction functions for directory and Internet address handling and library loading (src/os/) - Networking functions which allow to manage many connections to be used economically even in single threaded applications - High-level functions for parsing files with a simplified "XML-like" format and accessing them like a hierarchical database (src/parser/) It is able to process valid XML files, too. - High-level cryptographic functions on top of OpenSSL functionality (src/crypt/) - Support for interprocess communication (HTTP on top of SSL or plain TCP/UDP sockets, with or without certificates for clients and/or servers) - A tool to generate simple data containers from XML files. It automatically generates getters, setters, constructor, destructor, deep-copy function, usage counter handling, modification tracking, functions for reading from and writing to GWEN_DBs (used by AqBanking to create the transaction class) Requirements ============ - GnuTLS >= 1.4 (>=2.0.1 recommended) - libgcrypt (>=1.2.0) Platforms ========= Gwenhywfar is being developed on Linux. But the following platforms are also supported: - Windows (98, NT and newer; for using this library from Microsoft Visual Studio C please see the explanations in test/README.MSVC) - FreeBSD - Linux (i386, amd64, alpha) - Mac OS-X - NetBSD (untested, but most likely to work) - OpenBSD (untested, but most likely to work) - SunOS 5.9 (compiles, untested, but most likely to work) On Windows, an .exe setup program is provided, created with the Inno Setup Compiler http://www.jrsoftware.org/isdl.php . Architectures ============= According to Debian Gwen runs on the following platforms: - alpha - amd64 - arm - hppa - i386 - ia64 - m68k - mips - mipsel - powerpc - s390 - sparc Environment Variables ===================== "GWEN_MEMORY_DEBUG" ------------------- This integer variable tells gwen whether (and how) to print the memory debugger statistic. This only works for sources compiled with the defined macro GWEN_MEMORY_DEBUG. - "0" shows ALL listed objects - "1" only shows those objects whose count is not 0 "GWEN_SSL_DEBUG" ---------------- If this environment variable exists the SSL code will append data received via an SSL connection to "/tmp/read.bin" and append data sent via an SSL connection to /tmp/written.bin". "GWEN_TLS_CIPHER_PRIORITIES" -------------------------- If this environment variable is set, the SSL code will initialize the GnuTLS library with the provided cipher priority list. In case forced SSLv3 is enabled, this cipher priority list is prefixed with the string "+VERS-SSL3.0:". If this environment variable is unset, the following cipher priority list is being used: SECURE256:-ARCFOUR-128:-AES-128-CBC:-CAMELLIA-128-CBC:-3DES-CBC For the exact format of the cipher priority list, please consult the GnuTLS documentation, section "Priority strings": http://gnutls.org/manual/html_node/Priority-Strings.html Registry Keys ============= On Windows platforms Gwen uses some keys below HKEY_CURRENT_USER to store information about file/folder locations. The keys are set in the Inno Setup file gwenhywfar.iss, so please check the [Registry] section in gwenyhwfar.iss.in for the authoritative source of available registry keys. "Software\\Gwenhywfar\\Paths\\dbio-plugins" ------------------------------------------- Complete path to the folder containing GWENs DBIO plugins. (and some more keys. See gwenhywfar.iss.in) Documentation ============= The documentation can be found in the header files. Many header files already include extensive comments in doxygen-format (however some don't). For a more or less complete API documentation use the command "make srcdoc" You will need the tool doxygen for this command to run. Contact ======= For questions about this library please ask on the mailing list of the OpenHBCI project aqbanking-devel (subscriber-only, please subscribe on http://lists.sourceforge.net/lists/listinfo/aqbanking-devel), since this is where the author(s) hang out. Authors ======= This library is being written by and is being maintained by Martin Preuss . I also wish to thank Christian Stimming for his contributions and for adding MSVC support to Gwen (thus making Gwen completely available on Windows). Name ==== The name of this library was chosen to honour a very special person ;-) (that should suffice as an explanation) Hamburg, Germany 2007/10/31 gwenhywfar-4.15.2beta/AUTHORS0000644000175000017500000000026712364015347012623 00000000000000Martin Preuss Special thanks to Christian Stimming for keeping the tarball and RPMs in Bristol fashion and for making gwenhywfar available on WIN32 platforms.